{"version":3,"file":"main.js","sources":["../node_modules/@vue/shared/dist/shared.esm-bundler.js","../node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","../node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js","../node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js","../node_modules/@intlify/shared/dist/shared.esm-bundler.js","../node_modules/@intlify/message-compiler/dist/message-compiler.esm-bundler.js","../node_modules/@intlify/core-base/dist/core-base.esm-bundler.js","../node_modules/vue-i18n/dist/vue-i18n.runtime.esm-bundler.js","../node_modules/loglevel/lib/loglevel.js","../node_modules/web-vitals/dist/web-vitals.attribution.js","../node_modules/pinia/node_modules/vue-demi/lib/index.mjs","../node_modules/pinia/dist/pinia.mjs","../node_modules/pinia-plugin-persistedstate/dist/index.mjs","../obr_ui/locales/de.yml","../obr_ui/locales/en.yml","../node_modules/@vueuse/shared/index.mjs","../node_modules/@vueuse/core/index.mjs","../node_modules/bowser/src/constants.js","../node_modules/bowser/src/utils.js","../node_modules/bowser/src/parser-browsers.js","../node_modules/bowser/src/parser-os.js","../node_modules/bowser/src/parser-platforms.js","../node_modules/bowser/src/parser-engines.js","../node_modules/bowser/src/parser.js","../node_modules/bowser/src/bowser.js","../node_modules/semver/internal/constants.js","../node_modules/semver/internal/debug.js","../node_modules/semver/internal/re.js","../node_modules/semver/internal/parse-options.js","../node_modules/semver/internal/identifiers.js","../node_modules/semver/classes/semver.js","../node_modules/semver/functions/parse.js","../node_modules/semver/functions/valid.js","../node_modules/semver/functions/clean.js","../node_modules/semver/functions/inc.js","../node_modules/semver/functions/diff.js","../node_modules/semver/functions/major.js","../node_modules/semver/functions/minor.js","../node_modules/semver/functions/patch.js","../node_modules/semver/functions/prerelease.js","../node_modules/semver/functions/compare.js","../node_modules/semver/functions/rcompare.js","../node_modules/semver/functions/compare-loose.js","../node_modules/semver/functions/compare-build.js","../node_modules/semver/functions/sort.js","../node_modules/semver/functions/rsort.js","../node_modules/semver/functions/gt.js","../node_modules/semver/functions/lt.js","../node_modules/semver/functions/eq.js","../node_modules/semver/functions/neq.js","../node_modules/semver/functions/gte.js","../node_modules/semver/functions/lte.js","../node_modules/semver/functions/cmp.js","../node_modules/semver/functions/coerce.js","../node_modules/yallist/iterator.js","../node_modules/yallist/yallist.js","../node_modules/lru-cache/index.js","../node_modules/semver/classes/range.js","../node_modules/semver/classes/comparator.js","../node_modules/semver/functions/satisfies.js","../node_modules/semver/ranges/to-comparators.js","../node_modules/semver/ranges/max-satisfying.js","../node_modules/semver/ranges/min-satisfying.js","../node_modules/semver/ranges/min-version.js","../node_modules/semver/ranges/valid.js","../node_modules/semver/ranges/outside.js","../node_modules/semver/ranges/gtr.js","../node_modules/semver/ranges/ltr.js","../node_modules/semver/ranges/intersects.js","../node_modules/semver/ranges/simplify.js","../node_modules/semver/ranges/subset.js","../node_modules/semver/index.js","../obr_ui/settings.ts","../obr_ui/stores/ui.ts","../obr_ui/composables/device.ts","../obr_ui/stores/settings.ts","../node_modules/has-symbols/shams.js","../node_modules/has-symbols/index.js","../node_modules/function-bind/implementation.js","../node_modules/function-bind/index.js","../node_modules/has/src/index.js","../node_modules/get-intrinsic/index.js","../node_modules/call-bind/index.js","../node_modules/call-bind/callBound.js","../node_modules/side-channel/index.js","../node_modules/qs/lib/formats.js","../node_modules/qs/lib/utils.js","../node_modules/qs/lib/stringify.js","../node_modules/qs/lib/parse.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/axios/lib/core/enhanceError.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/core/createError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/cancel/Cancel.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/axios.js","../node_modules/axios/index.js","../node_modules/is-retry-allowed/index.js","../node_modules/axios-retry/lib/esm/index.js","../obr_ui/api/client.ts","../obr_ui/composables/api.ts","../obr_ui/api/account.ts","../obr_ui/composables/account.ts","../obr_ui/analytics/event.ts","../obr_ui/composables/analytics.ts","../obr_ui/stores/account.ts","../obr_ui/composables/settings.ts","../obr_ui/utils/theme.ts","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/identity.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_apply.js","../node_modules/lodash-es/_copyArray.js","../node_modules/lodash-es/_shortOut.js","../node_modules/lodash-es/constant.js","../node_modules/lodash-es/_defineProperty.js","../node_modules/lodash-es/_baseSetToString.js","../node_modules/lodash-es/_setToString.js","../node_modules/lodash-es/_baseFindIndex.js","../node_modules/lodash-es/_baseIsNaN.js","../node_modules/lodash-es/_strictIndexOf.js","../node_modules/lodash-es/_baseIndexOf.js","../node_modules/lodash-es/_arrayIncludes.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/_overRest.js","../node_modules/lodash-es/_baseRest.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/toString.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_createRound.js","../node_modules/lodash-es/_stackClear.js","../node_modules/lodash-es/_stackDelete.js","../node_modules/lodash-es/_stackGet.js","../node_modules/lodash-es/_stackHas.js","../node_modules/lodash-es/_stackSet.js","../node_modules/lodash-es/_Stack.js","../node_modules/lodash-es/_arrayFilter.js","../node_modules/lodash-es/stubArray.js","../node_modules/lodash-es/_getSymbols.js","../node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/lodash-es/_getAllKeys.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/_Uint8Array.js","../node_modules/lodash-es/_setCacheAdd.js","../node_modules/lodash-es/_setCacheHas.js","../node_modules/lodash-es/_SetCache.js","../node_modules/lodash-es/_arraySome.js","../node_modules/lodash-es/_cacheHas.js","../node_modules/lodash-es/_equalArrays.js","../node_modules/lodash-es/_mapToArray.js","../node_modules/lodash-es/_setToArray.js","../node_modules/lodash-es/_equalByTag.js","../node_modules/lodash-es/_equalObjects.js","../node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/lodash-es/_baseIsEqual.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/isArrayLikeObject.js","../node_modules/lodash-es/_arrayIncludesWith.js","../node_modules/lodash-es/_baseDifference.js","../node_modules/lodash-es/isString.js","../node_modules/lodash-es/_baseValues.js","../node_modules/lodash-es/values.js","../node_modules/lodash-es/isEqual.js","../node_modules/lodash-es/_baseRandom.js","../node_modules/lodash-es/round.js","../node_modules/lodash-es/_shuffleSelf.js","../node_modules/lodash-es/_arrayShuffle.js","../node_modules/lodash-es/_baseShuffle.js","../node_modules/lodash-es/shuffle.js","../node_modules/lodash-es/without.js","../obr_ui/stores/player.ts","../obr_ui/stores/queue.ts","../node_modules/luxon/src/errors.js","../node_modules/luxon/src/impl/formats.js","../node_modules/luxon/src/impl/util.js","../node_modules/luxon/src/impl/english.js","../node_modules/luxon/src/impl/formatter.js","../node_modules/luxon/src/impl/invalid.js","../node_modules/luxon/src/zone.js","../node_modules/luxon/src/zones/systemZone.js","../node_modules/luxon/src/zones/IANAZone.js","../node_modules/luxon/src/zones/fixedOffsetZone.js","../node_modules/luxon/src/zones/invalidZone.js","../node_modules/luxon/src/impl/zoneUtil.js","../node_modules/luxon/src/settings.js","../node_modules/luxon/src/impl/locale.js","../node_modules/luxon/src/impl/regexParser.js","../node_modules/luxon/src/duration.js","../node_modules/luxon/src/interval.js","../node_modules/luxon/src/info.js","../node_modules/luxon/src/impl/diff.js","../node_modules/luxon/src/impl/digits.js","../node_modules/luxon/src/impl/tokenParser.js","../node_modules/luxon/src/impl/conversions.js","../node_modules/luxon/src/datetime.js","../obr_ui/api/broadcast.ts","../obr_ui/stores/time.ts","../obr_ui/stores/schedule.ts","../node_modules/vue-router/dist/vue-router.mjs","../obr_ui/stores/notification.ts","../obr_ui/composables/notification.ts","../node_modules/mitt/dist/mitt.mjs","../obr_ui/eventBus.ts","../obr_ui/app-bridge/appleIdLogin.ts","../obr_ui/app-bridge/googleIdTokenLogin.ts","../obr_ui/app-bridge/appBridge.ts","../node_modules/email-validator/index.js","../obr_ui/components/ui/button/AsyncButton.vue","../obr_ui/components/ui/error/ApiErrors.vue","../obr_ui/components/ui/Message.vue","../obr_ui/components/account/auth/EmailLoginForm.vue","../obr_ui/components/account/auth/TokenInput.vue","../obr_ui/components/account/auth/EmailLoginVerify.vue","../obr_ui/assets/brand-icons/apple.svg","../obr_ui/assets/brand-icons/deezer.svg","../obr_ui/assets/brand-icons/google.svg","../obr_ui/assets/brand-icons/spotify.svg","../obr_ui/composables/icon.ts","../obr_ui/components/ui/icon/IconBuffering.vue","../obr_ui/components/account/auth/SocialLogin.vue","../obr_ui/components/account/auth/AuthPanel.vue","../obr_ui/components/ui/button/CircleButton.vue","../obr_ui/components/ui/icon/IconClose.vue","../obr_ui/components/ui/panel/CloseButton.vue","../obr_ui/components/ui/panel/SidePanel.vue","../obr_ui/components/account/context/ServiceInfoAside.vue","../obr_ui/components/account/legal/Availability.vue","../obr_ui/components/account/legal/Terms.vue","../obr_ui/components/account/auth/AuthSidebar.vue","../obr_ui/components/ui/panel/ModalPanel.vue","../obr_ui/components/browser-compatibility/CompatibilityNotice.vue","../obr_ui/components/cta/CtaPresenter.vue","../obr_ui/components/ui/icon/IconHeart.vue","../obr_ui/components/donation/DonateCta.vue","../node_modules/@stripe/stripe-js/dist/pure.js","../node_modules/@stripe/stripe-js/pure.js","../obr_ui/components/donation/flow/FlowRecurringPayment.vue","../obr_ui/components/donation/flow/FlowRecurring.vue","../obr_ui/components/donation/flow/FlowSinglePayment.vue","../obr_ui/components/donation/flow/FlowSingle.vue","../obr_ui/components/donation/DonatePanel.vue","../obr_ui/components/ui/panel/OverlayPanel.vue","../obr_ui/components/geolocation/GeoblockNotice.vue","../obr_ui/components/legal/vendor/cookieconsent.js","../obr_ui/components/legal/CookieConsent.vue","../obr_ui/components/legal/LegalLinks.vue","../obr_ui/api/search.ts","../obr_ui/components/search/SearchInput.vue","../obr_ui/api/catalog.ts","../obr_ui/components/ui/icon/IconPause.vue","../obr_ui/components/ui/icon/IconPlay.vue","../obr_ui/components/ui/icon/IconPlaying.vue","../obr_ui/components/ui/icon/IconPlayQueued.vue","../obr_ui/utils/color.ts","../obr_ui/components/player/button/ButtonPlay.vue","../obr_ui/composables/obj.ts","../obr_ui/composables/player.ts","../obr_ui/composables/queue.ts","../obr_ui/api/rating.ts","../obr_ui/stores/rating.ts","../node_modules/@sentry/utils/esm/is.js","../node_modules/@sentry/utils/esm/worldwide.js","../node_modules/@sentry/utils/esm/logger.js","../node_modules/@sentry/utils/esm/object.js","../node_modules/@sentry/utils/esm/misc.js","../node_modules/@sentry/utils/esm/env.js","../node_modules/@sentry/utils/esm/node.js","../node_modules/@sentry/utils/esm/syncpromise.js","../node_modules/@sentry/utils/esm/time.js","../node_modules/@sentry/core/esm/constants.js","../node_modules/@sentry/core/esm/session.js","../node_modules/@sentry/core/esm/scope.js","../node_modules/@sentry/core/esm/hub.js","../node_modules/@sentry/core/esm/exports.js","../obr_ui/api/subscription.ts","../obr_ui/stores/subscription.ts","../obr_ui/composables/subscription.ts","../obr_ui/utils/account.ts","../obr_ui/components/catalog/actions/PlayAction.vue","../obr_ui/components/utils/intersect.js","../obr_ui/utils/image.ts","../obr_ui/components/ui/LazyImage.vue","../obr_ui/components/search/SearchResultsResult.vue","../obr_ui/components/search/SearchResults.vue","../obr_ui/components/navigation/GlobalSearch.vue","../obr_ui/components/navigation/AccountMenu.vue","../obr_ui/components/navigation/MainMenu.vue","../obr_ui/components/ui/icon/IconAlert.vue","../obr_ui/components/navigation/SubscriptionStatus.vue","../obr_ui/components/ui/icon/IconMenu.vue","../obr_ui/components/navigation/ToggleMenuButton.vue","../obr_ui/components/ui/icon/IconSearch.vue","../obr_ui/components/navigation/ToggleSearchButton.vue","../obr_ui/components/ui/icon/IconProgram.vue","../obr_ui/components/ui/icon/IconShop.vue","../obr_ui/components/ui/logo/Logo.vue","../obr_ui/components/navigation/Navigation.vue","../obr_ui/components/navigation/LanguageChooser.vue","../obr_ui/components/navigation/ToggleDarkModeButton.vue","../obr_ui/components/navigation/SideMenu.vue","../obr_ui/components/notification/CloseButton.vue","../obr_ui/components/notification/Notifications.vue","../obr_ui/components/player/button/OnAir.vue","../obr_ui/components/catalog/media/MediaReleases.vue","../obr_ui/components/ui/icon/IconFlash.vue","../obr_ui/composables/rating.ts","../obr_ui/components/rating/UserRating.vue","../obr_ui/components/ui/icon/IconRemove.vue","../obr_ui/components/player/QueueMedia.vue","../obr_ui/components/ui/icon/IconCaret.vue","../obr_ui/components/player/button/Circle.vue","../obr_ui/components/ui/icon/IconShuffle.vue","../obr_ui/components/player/ShuffleControl.vue","../obr_ui/components/player/Queue.vue","../obr_ui/components/ui/icon/IconQueue.vue","../node_modules/shifty/dist/shifty.js","../obr_ui/components/ui/number/AnimatedNumber.vue","../obr_ui/components/player/QueueControl.vue","../obr_ui/components/player/mobile/CurrentMedia.vue","../obr_ui/components/ui/icon/IconSkip.vue","../obr_ui/components/player/button/ButtonSkip.vue","../obr_ui/components/player/mobile/PlayerControl.vue","../obr_ui/components/ui/time/Duration.vue","../obr_ui/components/player/mobile/Playhead.vue","../obr_ui/components/player/mobile/Panel.vue","../obr_ui/components/player/mobile/PlayerPlayButton.vue","../obr_ui/components/player/mobile/Player.vue","../obr_ui/components/player/button/Bandwidth.vue","../obr_ui/components/player/button/Donate.vue","../obr_ui/components/dev/Debug.vue","../obr_ui/stores/news.ts","../obr_ui/composables/news.ts","../obr_ui/components/news/NewsSettings.vue","../obr_ui/components/ui/panel/SlideUpPanel.vue","../obr_ui/components/player/button/News.vue","../obr_ui/components/player/CurrentMedia.vue","../obr_ui/assets/news/icon-rfi.png","../obr_ui/components/player/CurrentNews.vue","../obr_ui/utils/time.ts","../obr_ui/components/player/PlayerControl.vue","../obr_ui/components/player/PlayheadHandle.vue","../obr_ui/components/player/PlayheadTime.vue","../obr_ui/components/player/Playhead.vue","../obr_ui/components/ui/icon/IconSpeaker.vue","../obr_ui/components/player/VolumeControl.vue","../obr_ui/components/player/Player.vue","../obr_ui/components/ui/date/Datetime.vue","../obr_ui/components/ui/Money.vue","../obr_ui/components/subscription/SubscribePlan.vue","../obr_ui/components/subscription/voucher/CodeInput.vue","../obr_ui/components/subscription/SubscribeVoucher.vue","../obr_ui/components/subscription/Subscribe.vue","../obr_ui/components/subscription/voucher/Claim.vue","../obr_ui/player/hlsConfig.ts","../obr_ui/player/analyser.ts","../obr_ui/player/hlsPlayer.ts","../obr_ui/player/mediaSession.ts","../obr_ui/api/stats.ts","../obr_ui/stats/event.ts","../obr_ui/stats/heartbeat.ts","../obr_ui/utils/schedule.ts","../obr_ui/utils/ui.ts","../obr_ui/init.ts","../obr_ui/App.vue","../obr_ui/directives/tooltip.ts","../obr_ui/components/ui/icon/brand/IconFacebook.vue","../obr_ui/components/ui/icon/brand/IconGithub.vue","../obr_ui/components/ui/icon/brand/IconInstagram.vue","../obr_ui/components/social-media/SocialMediaLinks.vue","../obr_ui/layouts/Page.vue","../obr_ui/components/account/EmailLogin.vue","../obr_ui/components/account/Login.vue","../node_modules/qrcode.vue/dist/qrcode.vue.esm.js","../obr_ui/components/ui/icon/IconEdit.vue","../obr_ui/components/account/settings/Section.vue","../obr_ui/components/account/qrcode/QRCodeLogin.vue","../obr_ui/components/ui/form/SelectInput.vue","../obr_ui/components/ui/form/TextInput.vue","../obr_ui/components/account/settings/AddressForm.vue","../obr_ui/components/account/settings/Address.vue","../obr_ui/components/account/settings/Donations.vue","../obr_ui/components/account/settings/EmailForm.vue","../obr_ui/components/account/settings/Email.vue","../obr_ui/api/newsletter.ts","../obr_ui/components/account/settings/Newsletter.vue","../obr_ui/components/account/settings/PasswordForm.vue","../obr_ui/components/account/settings/Password.vue","../obr_ui/components/account/settings/PersonalForm.vue","../obr_ui/components/account/settings/Personal.vue","../obr_ui/components/account/settings/Social.vue","../obr_ui/components/account/settings/Stream.vue","../obr_ui/components/subscription/CurrentSubscription.vue","../obr_ui/components/account/Settings.vue","../obr_ui/assets/brand-icons/app-store.svg","../obr_ui/components/account/qrcode/QRCodeApp.vue","../obr_ui/components/account/qrcode/QRCodeVoucher.vue","../obr_ui/components/account/voucher/UserVoucher.vue","../obr_ui/components/account/UserVouchers.vue","../obr_ui/components/broadcast/editor/Card.vue","../obr_ui/components/broadcast/editor/List.vue","../obr_ui/components/ui/icon/IconContext.vue","../obr_ui/components/ui/icon/IconEnqueue.vue","../obr_ui/components/context-menu/actions/Action.vue","../obr_ui/components/context-menu/ListActions.vue","../obr_ui/components/ui/icon/IconShare.vue","../obr_ui/components/context-menu/ObjectActions.vue","../obr_ui/components/context-menu/ContextMenu.vue","../obr_ui/components/tagging/Tag.vue","../obr_ui/components/tagging/ObjectTags.vue","../obr_ui/components/catalog/artist/Card.vue","../obr_ui/components/filter/Query.vue","../obr_ui/components/filter/Tag.vue","../obr_ui/components/filter/ListFilter.vue","../obr_ui/components/ui/loading/LoadingGrid.vue","../obr_ui/components/ui/loading/LoadingTable.vue","../obr_ui/components/ui/loading/Loading.vue","../obr_ui/components/ui/loading/NoResults.vue","../node_modules/pulltorefreshjs/dist/index.esm.js","../obr_ui/composables/pullToRefresh.ts","../obr_ui/components/catalog/artist/List.vue","../obr_ui/components/catalog/actions/PlayAllAction.vue","../obr_ui/components/ui/date/RelativeDateTime.vue","../obr_ui/components/catalog/media/Row.vue","../obr_ui/components/catalog/media/RowHeader.vue","../obr_ui/components/catalog/media/List.vue","../obr_ui/stores/catalog.ts","../obr_ui/composables/catalog.ts","../obr_ui/components/catalog/mood/Card.vue","../obr_ui/components/catalog/mood/List.vue","../obr_ui/components/catalog/playlist/Name.vue","../obr_ui/components/catalog/playlist/Card.vue","../obr_ui/components/catalog/playlist/Row.vue","../obr_ui/components/catalog/playlist/RowHeader.vue","../obr_ui/components/catalog/playlist/List.vue","../obr_ui/components/discover/HomeSection.vue","../obr_ui/components/discover/Home.vue","../obr_ui/components/ui/icon/IconFilter.vue","../obr_ui/components/filter/Searchbar.vue","../obr_ui/composables/title.ts","../obr_ui/layouts/DiscoverHeader.vue","../obr_ui/utils/filter.ts","../obr_ui/views/Account.vue","../obr_ui/components/identifier/Identifier.vue","../obr_ui/components/identifier/ObjectIdentifiers.vue","../obr_ui/components/ui/icon/IconBack.vue","../obr_ui/components/ui/button/BackButton.vue","../obr_ui/layouts/DetailHeader.vue","../obr_ui/layouts/DetailPage.vue","../obr_ui/stores/broadcast.ts","../obr_ui/views/broadcast/EditorDetail.vue","../obr_ui/layouts/DetailHeaderLoading.vue","../obr_ui/views/catalog/ArtistDetail.vue","../obr_ui/views/catalog/MediaDetail.vue","../obr_ui/components/catalog/mood/Visual.vue","../obr_ui/views/catalog/MoodDetail.vue","../obr_ui/components/audio/AudioVisualisation.vue","../obr_ui/components/audio/Spectrogram.vue","../obr_ui/components/broadcast/editor/Inline.vue","../obr_ui/utils/catalog.ts","../obr_ui/views/catalog/PlaylistDetail.vue","../obr_ui/api/cms.ts","../obr_ui/components/ui/icon/IconMinus.vue","../obr_ui/components/ui/icon/IconPlus.vue","../obr_ui/components/ui/section/ExpandableSection.vue","../obr_ui/components/cms/Section.vue","../obr_ui/views/cms/Page.vue","../obr_ui/views/Collection.vue","../obr_ui/views/Discover.vue","../obr_ui/api/faq.ts","../node_modules/@vueuse/router/index.mjs","../node_modules/showdown/dist/showdown.js","../obr_ui/components/faq/Topic.vue","../obr_ui/views/faq/Faq.vue","../obr_ui/views/NotFound.vue","../obr_ui/assets/pages/donate/twint-qr-code.png","../obr_ui/views/pages/Page.vue","../obr_ui/views/pages/Donate.vue","../obr_ui/stores/program.ts","../obr_ui/components/broadcast/program/emission/EmissionRow.vue","../obr_ui/components/broadcast/program/emission/MediaRow.vue","../obr_ui/components/broadcast/program/emission/MediaSet.vue","../obr_ui/components/broadcast/program/emission/Emission.vue","../obr_ui/components/ui/form/DateInput.vue","../obr_ui/components/broadcast/program/Filter.vue","../obr_ui/components/broadcast/program/Program.vue","../obr_ui/views/Program.vue","../obr_ui/components/ui/icon/IconLogo.vue","../obr_ui/components/broadcast/radio/flow/FlowItemPlay.vue","../obr_ui/components/broadcast/radio/flow/FlowItem.vue","../obr_ui/components/ui/icon/brand/IconDAB.vue","../obr_ui/components/broadcast/radio/flow/FlowPlaceholderItem.vue","../obr_ui/components/broadcast/radio/flow/Flow.vue","../obr_ui/components/broadcast/radio/flow/FlowNews.vue","../obr_ui/components/ui/icon/IconPaginate.vue","../obr_ui/components/broadcast/radio/flow/PaginateButton.vue","../obr_ui/components/broadcast/radio/focused/FocusedEmission.vue","../obr_ui/components/broadcast/radio/focused/FocusedMedia.vue","../obr_ui/utils/format.ts","../obr_ui/components/broadcast/radio/station-time/HistoryTime.vue","../obr_ui/components/broadcast/radio/station-time/StationTime.vue","../obr_ui/components/broadcast/radio/RadioHeader.vue","../obr_ui/components/ui/form/RadioInput.vue","../obr_ui/components/ui/form/TextareaInput.vue","../obr_ui/components/broadcast/radio/rating/Rating.vue","../obr_ui/components/broadcast/radio/Radio.vue","../obr_ui/components/broadcast/radio/focused/FocusedEmissionMobile.vue","../obr_ui/components/broadcast/radio/focused/FocusedMediaMobile.vue","../obr_ui/components/broadcast/radio/RadioMobile.vue","../obr_ui/views/Radio.vue","../obr_ui/router/index.ts","../obr_ui/main.ts"],"sourcesContent":["function makeMap(str, expectsLowerCase) {\n  const map = /* @__PURE__ */ Object.create(null);\n  const list = str.split(\",\");\n  for (let i = 0; i < list.length; i++) {\n    map[list[i]] = true;\n  }\n  return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val];\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst onRE = /^on[^a-z]/;\nconst isOn = (key) => onRE.test(key);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n  const i = arr.indexOf(el);\n  if (i > -1) {\n    arr.splice(i, 1);\n  }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n  return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n  return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n  // the leading comma is intentional so empty string \"\" is also included\n  \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n  \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n};\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n  (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction(\n  (str) => str.charAt(0).toUpperCase() + str.slice(1)\n);\nconst toHandlerKey = cacheStringFunction(\n  (str) => str ? `on${capitalize(str)}` : ``\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, arg) => {\n  for (let i = 0; i < fns.length; i++) {\n    fns[i](arg);\n  }\n};\nconst def = (obj, key, value) => {\n  Object.defineProperty(obj, key, {\n    configurable: true,\n    enumerable: false,\n    value\n  });\n};\nconst looseToNumber = (val) => {\n  const n = parseFloat(val);\n  return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n  const n = isString(val) ? Number(val) : NaN;\n  return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n  return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n  return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\n\nconst PatchFlagNames = {\n  [1]: `TEXT`,\n  [2]: `CLASS`,\n  [4]: `STYLE`,\n  [8]: `PROPS`,\n  [16]: `FULL_PROPS`,\n  [32]: `HYDRATE_EVENTS`,\n  [64]: `STABLE_FRAGMENT`,\n  [128]: `KEYED_FRAGMENT`,\n  [256]: `UNKEYED_FRAGMENT`,\n  [512]: `NEED_PATCH`,\n  [1024]: `DYNAMIC_SLOTS`,\n  [2048]: `DEV_ROOT_FRAGMENT`,\n  [-1]: `HOISTED`,\n  [-2]: `BAIL`\n};\n\nconst slotFlagsText = {\n  [1]: \"STABLE\",\n  [2]: \"DYNAMIC\",\n  [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_WHITE_LISTED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console\";\nconst isGloballyWhitelisted = /* @__PURE__ */ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n  let lines = source.split(/(\\r?\\n)/);\n  const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n  lines = lines.filter((_, idx) => idx % 2 === 0);\n  let count = 0;\n  const res = [];\n  for (let i = 0; i < lines.length; i++) {\n    count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n    if (count >= start) {\n      for (let j = i - range; j <= i + range || end > count; j++) {\n        if (j < 0 || j >= lines.length)\n          continue;\n        const line = j + 1;\n        res.push(\n          `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`\n        );\n        const lineLength = lines[j].length;\n        const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n        if (j === i) {\n          const pad = start - (count - (lineLength + newLineSeqLength));\n          const length = Math.max(\n            1,\n            end > count ? lineLength - pad : end - start\n          );\n          res.push(`   |  ` + \" \".repeat(pad) + \"^\".repeat(length));\n        } else if (j > i) {\n          if (end > count) {\n            const length = Math.max(Math.min(end - count, lineLength), 1);\n            res.push(`   |  ` + \"^\".repeat(length));\n          }\n          count += lineLength + newLineSeqLength;\n        }\n      }\n      break;\n    }\n  }\n  return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n  if (isArray(value)) {\n    const res = {};\n    for (let i = 0; i < value.length; i++) {\n      const item = value[i];\n      const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n      if (normalized) {\n        for (const key in normalized) {\n          res[key] = normalized[key];\n        }\n      }\n    }\n    return res;\n  } else if (isString(value)) {\n    return value;\n  } else if (isObject(value)) {\n    return value;\n  }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n  const ret = {};\n  cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n    if (item) {\n      const tmp = item.split(propertyDelimiterRE);\n      tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return ret;\n}\nfunction stringifyStyle(styles) {\n  let ret = \"\";\n  if (!styles || isString(styles)) {\n    return ret;\n  }\n  for (const key in styles) {\n    const value = styles[key];\n    const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n    if (isString(value) || typeof value === \"number\") {\n      ret += `${normalizedKey}:${value};`;\n    }\n  }\n  return ret;\n}\nfunction normalizeClass(value) {\n  let res = \"\";\n  if (isString(value)) {\n    res = value;\n  } else if (isArray(value)) {\n    for (let i = 0; i < value.length; i++) {\n      const normalized = normalizeClass(value[i]);\n      if (normalized) {\n        res += normalized + \" \";\n      }\n    }\n  } else if (isObject(value)) {\n    for (const name in value) {\n      if (value[name]) {\n        res += name + \" \";\n      }\n    }\n  }\n  return res.trim();\n}\nfunction normalizeProps(props) {\n  if (!props)\n    return null;\n  let { class: klass, style } = props;\n  if (klass && !isString(klass)) {\n    props.class = normalizeClass(klass);\n  }\n  if (style) {\n    props.style = normalizeStyle(style);\n  }\n  return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n  specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n  return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n  if (attrValidationCache.hasOwnProperty(name)) {\n    return attrValidationCache[name];\n  }\n  const isUnsafe = unsafeAttrCharRE.test(name);\n  if (isUnsafe) {\n    console.error(`unsafe attribute name: ${name}`);\n  }\n  return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n  acceptCharset: \"accept-charset\",\n  className: \"class\",\n  htmlFor: \"for\",\n  httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n  `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n  `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n  const str = \"\" + string;\n  const match = escapeRE.exec(str);\n  if (!match) {\n    return str;\n  }\n  let html = \"\";\n  let escaped;\n  let index;\n  let lastIndex = 0;\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        escaped = \"&quot;\";\n        break;\n      case 38:\n        escaped = \"&amp;\";\n        break;\n      case 39:\n        escaped = \"&#39;\";\n        break;\n      case 60:\n        escaped = \"&lt;\";\n        break;\n      case 62:\n        escaped = \"&gt;\";\n        break;\n      default:\n        continue;\n    }\n    if (lastIndex !== index) {\n      html += str.slice(lastIndex, index);\n    }\n    lastIndex = index + 1;\n    html += escaped;\n  }\n  return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n  return src.replace(commentStripRE, \"\");\n}\n\nfunction looseCompareArrays(a, b) {\n  if (a.length !== b.length)\n    return false;\n  let equal = true;\n  for (let i = 0; equal && i < a.length; i++) {\n    equal = looseEqual(a[i], b[i]);\n  }\n  return equal;\n}\nfunction looseEqual(a, b) {\n  if (a === b)\n    return true;\n  let aValidType = isDate(a);\n  let bValidType = isDate(b);\n  if (aValidType || bValidType) {\n    return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n  }\n  aValidType = isSymbol(a);\n  bValidType = isSymbol(b);\n  if (aValidType || bValidType) {\n    return a === b;\n  }\n  aValidType = isArray(a);\n  bValidType = isArray(b);\n  if (aValidType || bValidType) {\n    return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n  }\n  aValidType = isObject(a);\n  bValidType = isObject(b);\n  if (aValidType || bValidType) {\n    if (!aValidType || !bValidType) {\n      return false;\n    }\n    const aKeysCount = Object.keys(a).length;\n    const bKeysCount = Object.keys(b).length;\n    if (aKeysCount !== bKeysCount) {\n      return false;\n    }\n    for (const key in a) {\n      const aHasKey = a.hasOwnProperty(key);\n      const bHasKey = b.hasOwnProperty(key);\n      if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n  }\n  return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n  return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst toDisplayString = (val) => {\n  return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n  if (val && val.__v_isRef) {\n    return replacer(_key, val.value);\n  } else if (isMap(val)) {\n    return {\n      [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val2]) => {\n        entries[`${key} =>`] = val2;\n        return entries;\n      }, {})\n    };\n  } else if (isSet(val)) {\n    return {\n      [`Set(${val.size})`]: [...val.values()]\n    };\n  } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n    return String(val);\n  }\n  return val;\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, genPropsAccessExp, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","import { extend, isArray, isMap, isIntegerKey, hasOwn, isSymbol, isObject, hasChanged, makeMap, capitalize, toRawType, def, isFunction, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n  console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n  constructor(detached = false) {\n    this.detached = detached;\n    /**\n     * @internal\n     */\n    this._active = true;\n    /**\n     * @internal\n     */\n    this.effects = [];\n    /**\n     * @internal\n     */\n    this.cleanups = [];\n    this.parent = activeEffectScope;\n    if (!detached && activeEffectScope) {\n      this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n        this\n      ) - 1;\n    }\n  }\n  get active() {\n    return this._active;\n  }\n  run(fn) {\n    if (this._active) {\n      const currentEffectScope = activeEffectScope;\n      try {\n        activeEffectScope = this;\n        return fn();\n      } finally {\n        activeEffectScope = currentEffectScope;\n      }\n    } else if (!!(process.env.NODE_ENV !== \"production\")) {\n      warn(`cannot run an inactive effect scope.`);\n    }\n  }\n  /**\n   * This should only be called on non-detached scopes\n   * @internal\n   */\n  on() {\n    activeEffectScope = this;\n  }\n  /**\n   * This should only be called on non-detached scopes\n   * @internal\n   */\n  off() {\n    activeEffectScope = this.parent;\n  }\n  stop(fromParent) {\n    if (this._active) {\n      let i, l;\n      for (i = 0, l = this.effects.length; i < l; i++) {\n        this.effects[i].stop();\n      }\n      for (i = 0, l = this.cleanups.length; i < l; i++) {\n        this.cleanups[i]();\n      }\n      if (this.scopes) {\n        for (i = 0, l = this.scopes.length; i < l; i++) {\n          this.scopes[i].stop(true);\n        }\n      }\n      if (!this.detached && this.parent && !fromParent) {\n        const last = this.parent.scopes.pop();\n        if (last && last !== this) {\n          this.parent.scopes[this.index] = last;\n          last.index = this.index;\n        }\n      }\n      this.parent = void 0;\n      this._active = false;\n    }\n  }\n}\nfunction effectScope(detached) {\n  return new EffectScope(detached);\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n  if (scope && scope.active) {\n    scope.effects.push(effect);\n  }\n}\nfunction getCurrentScope() {\n  return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n  if (activeEffectScope) {\n    activeEffectScope.cleanups.push(fn);\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    warn(\n      `onScopeDispose() is called when there is no active effect scope to be associated with.`\n    );\n  }\n}\n\nconst createDep = (effects) => {\n  const dep = new Set(effects);\n  dep.w = 0;\n  dep.n = 0;\n  return dep;\n};\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\nconst initDepMarkers = ({ deps }) => {\n  if (deps.length) {\n    for (let i = 0; i < deps.length; i++) {\n      deps[i].w |= trackOpBit;\n    }\n  }\n};\nconst finalizeDepMarkers = (effect) => {\n  const { deps } = effect;\n  if (deps.length) {\n    let ptr = 0;\n    for (let i = 0; i < deps.length; i++) {\n      const dep = deps[i];\n      if (wasTracked(dep) && !newTracked(dep)) {\n        dep.delete(effect);\n      } else {\n        deps[ptr++] = dep;\n      }\n      dep.w &= ~trackOpBit;\n      dep.n &= ~trackOpBit;\n    }\n    deps.length = ptr;\n  }\n};\n\nconst targetMap = /* @__PURE__ */ new WeakMap();\nlet effectTrackDepth = 0;\nlet trackOpBit = 1;\nconst maxMarkerBits = 30;\nlet activeEffect;\nconst ITERATE_KEY = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"iterate\" : \"\");\nconst MAP_KEY_ITERATE_KEY = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"Map key iterate\" : \"\");\nclass ReactiveEffect {\n  constructor(fn, scheduler = null, scope) {\n    this.fn = fn;\n    this.scheduler = scheduler;\n    this.active = true;\n    this.deps = [];\n    this.parent = void 0;\n    recordEffectScope(this, scope);\n  }\n  run() {\n    if (!this.active) {\n      return this.fn();\n    }\n    let parent = activeEffect;\n    let lastShouldTrack = shouldTrack;\n    while (parent) {\n      if (parent === this) {\n        return;\n      }\n      parent = parent.parent;\n    }\n    try {\n      this.parent = activeEffect;\n      activeEffect = this;\n      shouldTrack = true;\n      trackOpBit = 1 << ++effectTrackDepth;\n      if (effectTrackDepth <= maxMarkerBits) {\n        initDepMarkers(this);\n      } else {\n        cleanupEffect(this);\n      }\n      return this.fn();\n    } finally {\n      if (effectTrackDepth <= maxMarkerBits) {\n        finalizeDepMarkers(this);\n      }\n      trackOpBit = 1 << --effectTrackDepth;\n      activeEffect = this.parent;\n      shouldTrack = lastShouldTrack;\n      this.parent = void 0;\n      if (this.deferStop) {\n        this.stop();\n      }\n    }\n  }\n  stop() {\n    if (activeEffect === this) {\n      this.deferStop = true;\n    } else if (this.active) {\n      cleanupEffect(this);\n      if (this.onStop) {\n        this.onStop();\n      }\n      this.active = false;\n    }\n  }\n}\nfunction cleanupEffect(effect2) {\n  const { deps } = effect2;\n  if (deps.length) {\n    for (let i = 0; i < deps.length; i++) {\n      deps[i].delete(effect2);\n    }\n    deps.length = 0;\n  }\n}\nfunction effect(fn, options) {\n  if (fn.effect) {\n    fn = fn.effect.fn;\n  }\n  const _effect = new ReactiveEffect(fn);\n  if (options) {\n    extend(_effect, options);\n    if (options.scope)\n      recordEffectScope(_effect, options.scope);\n  }\n  if (!options || !options.lazy) {\n    _effect.run();\n  }\n  const runner = _effect.run.bind(_effect);\n  runner.effect = _effect;\n  return runner;\n}\nfunction stop(runner) {\n  runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n  trackStack.push(shouldTrack);\n  shouldTrack = false;\n}\nfunction enableTracking() {\n  trackStack.push(shouldTrack);\n  shouldTrack = true;\n}\nfunction resetTracking() {\n  const last = trackStack.pop();\n  shouldTrack = last === void 0 ? true : last;\n}\nfunction track(target, type, key) {\n  if (shouldTrack && activeEffect) {\n    let depsMap = targetMap.get(target);\n    if (!depsMap) {\n      targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n    }\n    let dep = depsMap.get(key);\n    if (!dep) {\n      depsMap.set(key, dep = createDep());\n    }\n    const eventInfo = !!(process.env.NODE_ENV !== \"production\") ? { effect: activeEffect, target, type, key } : void 0;\n    trackEffects(dep, eventInfo);\n  }\n}\nfunction trackEffects(dep, debuggerEventExtraInfo) {\n  let shouldTrack2 = false;\n  if (effectTrackDepth <= maxMarkerBits) {\n    if (!newTracked(dep)) {\n      dep.n |= trackOpBit;\n      shouldTrack2 = !wasTracked(dep);\n    }\n  } else {\n    shouldTrack2 = !dep.has(activeEffect);\n  }\n  if (shouldTrack2) {\n    dep.add(activeEffect);\n    activeEffect.deps.push(dep);\n    if (!!(process.env.NODE_ENV !== \"production\") && activeEffect.onTrack) {\n      activeEffect.onTrack(\n        extend(\n          {\n            effect: activeEffect\n          },\n          debuggerEventExtraInfo\n        )\n      );\n    }\n  }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n  const depsMap = targetMap.get(target);\n  if (!depsMap) {\n    return;\n  }\n  let deps = [];\n  if (type === \"clear\") {\n    deps = [...depsMap.values()];\n  } else if (key === \"length\" && isArray(target)) {\n    const newLength = Number(newValue);\n    depsMap.forEach((dep, key2) => {\n      if (key2 === \"length\" || key2 >= newLength) {\n        deps.push(dep);\n      }\n    });\n  } else {\n    if (key !== void 0) {\n      deps.push(depsMap.get(key));\n    }\n    switch (type) {\n      case \"add\":\n        if (!isArray(target)) {\n          deps.push(depsMap.get(ITERATE_KEY));\n          if (isMap(target)) {\n            deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n          }\n        } else if (isIntegerKey(key)) {\n          deps.push(depsMap.get(\"length\"));\n        }\n        break;\n      case \"delete\":\n        if (!isArray(target)) {\n          deps.push(depsMap.get(ITERATE_KEY));\n          if (isMap(target)) {\n            deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n          }\n        }\n        break;\n      case \"set\":\n        if (isMap(target)) {\n          deps.push(depsMap.get(ITERATE_KEY));\n        }\n        break;\n    }\n  }\n  const eventInfo = !!(process.env.NODE_ENV !== \"production\") ? { target, type, key, newValue, oldValue, oldTarget } : void 0;\n  if (deps.length === 1) {\n    if (deps[0]) {\n      if (!!(process.env.NODE_ENV !== \"production\")) {\n        triggerEffects(deps[0], eventInfo);\n      } else {\n        triggerEffects(deps[0]);\n      }\n    }\n  } else {\n    const effects = [];\n    for (const dep of deps) {\n      if (dep) {\n        effects.push(...dep);\n      }\n    }\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      triggerEffects(createDep(effects), eventInfo);\n    } else {\n      triggerEffects(createDep(effects));\n    }\n  }\n}\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\n  const effects = isArray(dep) ? dep : [...dep];\n  for (const effect2 of effects) {\n    if (effect2.computed) {\n      triggerEffect(effect2, debuggerEventExtraInfo);\n    }\n  }\n  for (const effect2 of effects) {\n    if (!effect2.computed) {\n      triggerEffect(effect2, debuggerEventExtraInfo);\n    }\n  }\n}\nfunction triggerEffect(effect2, debuggerEventExtraInfo) {\n  if (effect2 !== activeEffect || effect2.allowRecurse) {\n    if (!!(process.env.NODE_ENV !== \"production\") && effect2.onTrigger) {\n      effect2.onTrigger(extend({ effect: effect2 }, debuggerEventExtraInfo));\n    }\n    if (effect2.scheduler) {\n      effect2.scheduler();\n    } else {\n      effect2.run();\n    }\n  }\n}\nfunction getDepFromReactive(object, key) {\n  var _a;\n  return (_a = targetMap.get(object)) == null ? void 0 : _a.get(key);\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n  /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nconst get$1 = /* @__PURE__ */ createGetter();\nconst shallowGet = /* @__PURE__ */ createGetter(false, true);\nconst readonlyGet = /* @__PURE__ */ createGetter(true);\nconst shallowReadonlyGet = /* @__PURE__ */ createGetter(true, true);\nconst arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n  const instrumentations = {};\n  [\"includes\", \"indexOf\", \"lastIndexOf\"].forEach((key) => {\n    instrumentations[key] = function(...args) {\n      const arr = toRaw(this);\n      for (let i = 0, l = this.length; i < l; i++) {\n        track(arr, \"get\", i + \"\");\n      }\n      const res = arr[key](...args);\n      if (res === -1 || res === false) {\n        return arr[key](...args.map(toRaw));\n      } else {\n        return res;\n      }\n    };\n  });\n  [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\"].forEach((key) => {\n    instrumentations[key] = function(...args) {\n      pauseTracking();\n      const res = toRaw(this)[key].apply(this, args);\n      resetTracking();\n      return res;\n    };\n  });\n  return instrumentations;\n}\nfunction hasOwnProperty(key) {\n  const obj = toRaw(this);\n  track(obj, \"has\", key);\n  return obj.hasOwnProperty(key);\n}\nfunction createGetter(isReadonly2 = false, shallow = false) {\n  return function get2(target, key, receiver) {\n    if (key === \"__v_isReactive\") {\n      return !isReadonly2;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly2;\n    } else if (key === \"__v_isShallow\") {\n      return shallow;\n    } else if (key === \"__v_raw\" && receiver === (isReadonly2 ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) {\n      return target;\n    }\n    const targetIsArray = isArray(target);\n    if (!isReadonly2) {\n      if (targetIsArray && hasOwn(arrayInstrumentations, key)) {\n        return Reflect.get(arrayInstrumentations, key, receiver);\n      }\n      if (key === \"hasOwnProperty\") {\n        return hasOwnProperty;\n      }\n    }\n    const res = Reflect.get(target, key, receiver);\n    if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n      return res;\n    }\n    if (!isReadonly2) {\n      track(target, \"get\", key);\n    }\n    if (shallow) {\n      return res;\n    }\n    if (isRef(res)) {\n      return targetIsArray && isIntegerKey(key) ? res : res.value;\n    }\n    if (isObject(res)) {\n      return isReadonly2 ? readonly(res) : reactive(res);\n    }\n    return res;\n  };\n}\nconst set$1 = /* @__PURE__ */ createSetter();\nconst shallowSet = /* @__PURE__ */ createSetter(true);\nfunction createSetter(shallow = false) {\n  return function set2(target, key, value, receiver) {\n    let oldValue = target[key];\n    if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n      return false;\n    }\n    if (!shallow) {\n      if (!isShallow(value) && !isReadonly(value)) {\n        oldValue = toRaw(oldValue);\n        value = toRaw(value);\n      }\n      if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n        oldValue.value = value;\n        return true;\n      }\n    }\n    const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);\n    const result = Reflect.set(target, key, value, receiver);\n    if (target === toRaw(receiver)) {\n      if (!hadKey) {\n        trigger(target, \"add\", key, value);\n      } else if (hasChanged(value, oldValue)) {\n        trigger(target, \"set\", key, value, oldValue);\n      }\n    }\n    return result;\n  };\n}\nfunction deleteProperty(target, key) {\n  const hadKey = hasOwn(target, key);\n  const oldValue = target[key];\n  const result = Reflect.deleteProperty(target, key);\n  if (result && hadKey) {\n    trigger(target, \"delete\", key, void 0, oldValue);\n  }\n  return result;\n}\nfunction has$1(target, key) {\n  const result = Reflect.has(target, key);\n  if (!isSymbol(key) || !builtInSymbols.has(key)) {\n    track(target, \"has\", key);\n  }\n  return result;\n}\nfunction ownKeys(target) {\n  track(target, \"iterate\", isArray(target) ? \"length\" : ITERATE_KEY);\n  return Reflect.ownKeys(target);\n}\nconst mutableHandlers = {\n  get: get$1,\n  set: set$1,\n  deleteProperty,\n  has: has$1,\n  ownKeys\n};\nconst readonlyHandlers = {\n  get: readonlyGet,\n  set(target, key) {\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      warn(\n        `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n        target\n      );\n    }\n    return true;\n  },\n  deleteProperty(target, key) {\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      warn(\n        `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n        target\n      );\n    }\n    return true;\n  }\n};\nconst shallowReactiveHandlers = /* @__PURE__ */ extend(\n  {},\n  mutableHandlers,\n  {\n    get: shallowGet,\n    set: shallowSet\n  }\n);\nconst shallowReadonlyHandlers = /* @__PURE__ */ extend(\n  {},\n  readonlyHandlers,\n  {\n    get: shallowReadonlyGet\n  }\n);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly = false, isShallow = false) {\n  target = target[\"__v_raw\"];\n  const rawTarget = toRaw(target);\n  const rawKey = toRaw(key);\n  if (!isReadonly) {\n    if (key !== rawKey) {\n      track(rawTarget, \"get\", key);\n    }\n    track(rawTarget, \"get\", rawKey);\n  }\n  const { has: has2 } = getProto(rawTarget);\n  const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n  if (has2.call(rawTarget, key)) {\n    return wrap(target.get(key));\n  } else if (has2.call(rawTarget, rawKey)) {\n    return wrap(target.get(rawKey));\n  } else if (target !== rawTarget) {\n    target.get(key);\n  }\n}\nfunction has(key, isReadonly = false) {\n  const target = this[\"__v_raw\"];\n  const rawTarget = toRaw(target);\n  const rawKey = toRaw(key);\n  if (!isReadonly) {\n    if (key !== rawKey) {\n      track(rawTarget, \"has\", key);\n    }\n    track(rawTarget, \"has\", rawKey);\n  }\n  return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n  target = target[\"__v_raw\"];\n  !isReadonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n  return Reflect.get(target, \"size\", target);\n}\nfunction add(value) {\n  value = toRaw(value);\n  const target = toRaw(this);\n  const proto = getProto(target);\n  const hadKey = proto.has.call(target, value);\n  if (!hadKey) {\n    target.add(value);\n    trigger(target, \"add\", value, value);\n  }\n  return this;\n}\nfunction set(key, value) {\n  value = toRaw(value);\n  const target = toRaw(this);\n  const { has: has2, get: get2 } = getProto(target);\n  let hadKey = has2.call(target, key);\n  if (!hadKey) {\n    key = toRaw(key);\n    hadKey = has2.call(target, key);\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    checkIdentityKeys(target, has2, key);\n  }\n  const oldValue = get2.call(target, key);\n  target.set(key, value);\n  if (!hadKey) {\n    trigger(target, \"add\", key, value);\n  } else if (hasChanged(value, oldValue)) {\n    trigger(target, \"set\", key, value, oldValue);\n  }\n  return this;\n}\nfunction deleteEntry(key) {\n  const target = toRaw(this);\n  const { has: has2, get: get2 } = getProto(target);\n  let hadKey = has2.call(target, key);\n  if (!hadKey) {\n    key = toRaw(key);\n    hadKey = has2.call(target, key);\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    checkIdentityKeys(target, has2, key);\n  }\n  const oldValue = get2 ? get2.call(target, key) : void 0;\n  const result = target.delete(key);\n  if (hadKey) {\n    trigger(target, \"delete\", key, void 0, oldValue);\n  }\n  return result;\n}\nfunction clear() {\n  const target = toRaw(this);\n  const hadItems = target.size !== 0;\n  const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n  const result = target.clear();\n  if (hadItems) {\n    trigger(target, \"clear\", void 0, void 0, oldTarget);\n  }\n  return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n  return function forEach(callback, thisArg) {\n    const observed = this;\n    const target = observed[\"__v_raw\"];\n    const rawTarget = toRaw(target);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    !isReadonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n    return target.forEach((value, key) => {\n      return callback.call(thisArg, wrap(value), wrap(key), observed);\n    });\n  };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n  return function(...args) {\n    const target = this[\"__v_raw\"];\n    const rawTarget = toRaw(target);\n    const targetIsMap = isMap(rawTarget);\n    const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n    const isKeyOnly = method === \"keys\" && targetIsMap;\n    const innerIterator = target[method](...args);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    !isReadonly && track(\n      rawTarget,\n      \"iterate\",\n      isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n    );\n    return {\n      // iterator protocol\n      next() {\n        const { value, done } = innerIterator.next();\n        return done ? { value, done } : {\n          value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n          done\n        };\n      },\n      // iterable protocol\n      [Symbol.iterator]() {\n        return this;\n      }\n    };\n  };\n}\nfunction createReadonlyMethod(type) {\n  return function(...args) {\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n      console.warn(\n        `${capitalize(type)} operation ${key}failed: target is readonly.`,\n        toRaw(this)\n      );\n    }\n    return type === \"delete\" ? false : this;\n  };\n}\nfunction createInstrumentations() {\n  const mutableInstrumentations2 = {\n    get(key) {\n      return get(this, key);\n    },\n    get size() {\n      return size(this);\n    },\n    has,\n    add,\n    set,\n    delete: deleteEntry,\n    clear,\n    forEach: createForEach(false, false)\n  };\n  const shallowInstrumentations2 = {\n    get(key) {\n      return get(this, key, false, true);\n    },\n    get size() {\n      return size(this);\n    },\n    has,\n    add,\n    set,\n    delete: deleteEntry,\n    clear,\n    forEach: createForEach(false, true)\n  };\n  const readonlyInstrumentations2 = {\n    get(key) {\n      return get(this, key, true);\n    },\n    get size() {\n      return size(this, true);\n    },\n    has(key) {\n      return has.call(this, key, true);\n    },\n    add: createReadonlyMethod(\"add\"),\n    set: createReadonlyMethod(\"set\"),\n    delete: createReadonlyMethod(\"delete\"),\n    clear: createReadonlyMethod(\"clear\"),\n    forEach: createForEach(true, false)\n  };\n  const shallowReadonlyInstrumentations2 = {\n    get(key) {\n      return get(this, key, true, true);\n    },\n    get size() {\n      return size(this, true);\n    },\n    has(key) {\n      return has.call(this, key, true);\n    },\n    add: createReadonlyMethod(\"add\"),\n    set: createReadonlyMethod(\"set\"),\n    delete: createReadonlyMethod(\"delete\"),\n    clear: createReadonlyMethod(\"clear\"),\n    forEach: createForEach(true, true)\n  };\n  const iteratorMethods = [\"keys\", \"values\", \"entries\", Symbol.iterator];\n  iteratorMethods.forEach((method) => {\n    mutableInstrumentations2[method] = createIterableMethod(\n      method,\n      false,\n      false\n    );\n    readonlyInstrumentations2[method] = createIterableMethod(\n      method,\n      true,\n      false\n    );\n    shallowInstrumentations2[method] = createIterableMethod(\n      method,\n      false,\n      true\n    );\n    shallowReadonlyInstrumentations2[method] = createIterableMethod(\n      method,\n      true,\n      true\n    );\n  });\n  return [\n    mutableInstrumentations2,\n    readonlyInstrumentations2,\n    shallowInstrumentations2,\n    shallowReadonlyInstrumentations2\n  ];\n}\nconst [\n  mutableInstrumentations,\n  readonlyInstrumentations,\n  shallowInstrumentations,\n  shallowReadonlyInstrumentations\n] = /* @__PURE__ */ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n  const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations;\n  return (target, key, receiver) => {\n    if (key === \"__v_isReactive\") {\n      return !isReadonly;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly;\n    } else if (key === \"__v_raw\") {\n      return target;\n    }\n    return Reflect.get(\n      hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n      key,\n      receiver\n    );\n  };\n}\nconst mutableCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has2, key) {\n  const rawKey = toRaw(key);\n  if (rawKey !== key && has2.call(target, rawKey)) {\n    const type = toRawType(target);\n    console.warn(\n      `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n    );\n  }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n  switch (rawType) {\n    case \"Object\":\n    case \"Array\":\n      return 1 /* COMMON */;\n    case \"Map\":\n    case \"Set\":\n    case \"WeakMap\":\n    case \"WeakSet\":\n      return 2 /* COLLECTION */;\n    default:\n      return 0 /* INVALID */;\n  }\n}\nfunction getTargetType(value) {\n  return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n  if (isReadonly(target)) {\n    return target;\n  }\n  return createReactiveObject(\n    target,\n    false,\n    mutableHandlers,\n    mutableCollectionHandlers,\n    reactiveMap\n  );\n}\nfunction shallowReactive(target) {\n  return createReactiveObject(\n    target,\n    false,\n    shallowReactiveHandlers,\n    shallowCollectionHandlers,\n    shallowReactiveMap\n  );\n}\nfunction readonly(target) {\n  return createReactiveObject(\n    target,\n    true,\n    readonlyHandlers,\n    readonlyCollectionHandlers,\n    readonlyMap\n  );\n}\nfunction shallowReadonly(target) {\n  return createReactiveObject(\n    target,\n    true,\n    shallowReadonlyHandlers,\n    shallowReadonlyCollectionHandlers,\n    shallowReadonlyMap\n  );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n  if (!isObject(target)) {\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      console.warn(`value cannot be made reactive: ${String(target)}`);\n    }\n    return target;\n  }\n  if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n    return target;\n  }\n  const existingProxy = proxyMap.get(target);\n  if (existingProxy) {\n    return existingProxy;\n  }\n  const targetType = getTargetType(target);\n  if (targetType === 0 /* INVALID */) {\n    return target;\n  }\n  const proxy = new Proxy(\n    target,\n    targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n  );\n  proxyMap.set(target, proxy);\n  return proxy;\n}\nfunction isReactive(value) {\n  if (isReadonly(value)) {\n    return isReactive(value[\"__v_raw\"]);\n  }\n  return !!(value && value[\"__v_isReactive\"]);\n}\nfunction isReadonly(value) {\n  return !!(value && value[\"__v_isReadonly\"]);\n}\nfunction isShallow(value) {\n  return !!(value && value[\"__v_isShallow\"]);\n}\nfunction isProxy(value) {\n  return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n  const raw = observed && observed[\"__v_raw\"];\n  return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n  def(value, \"__v_skip\", true);\n  return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref2) {\n  if (shouldTrack && activeEffect) {\n    ref2 = toRaw(ref2);\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      trackEffects(ref2.dep || (ref2.dep = createDep()), {\n        target: ref2,\n        type: \"get\",\n        key: \"value\"\n      });\n    } else {\n      trackEffects(ref2.dep || (ref2.dep = createDep()));\n    }\n  }\n}\nfunction triggerRefValue(ref2, newVal) {\n  ref2 = toRaw(ref2);\n  const dep = ref2.dep;\n  if (dep) {\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      triggerEffects(dep, {\n        target: ref2,\n        type: \"set\",\n        key: \"value\",\n        newValue: newVal\n      });\n    } else {\n      triggerEffects(dep);\n    }\n  }\n}\nfunction isRef(r) {\n  return !!(r && r.__v_isRef === true);\n}\nfunction ref(value) {\n  return createRef(value, false);\n}\nfunction shallowRef(value) {\n  return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n  if (isRef(rawValue)) {\n    return rawValue;\n  }\n  return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n  constructor(value, __v_isShallow) {\n    this.__v_isShallow = __v_isShallow;\n    this.dep = void 0;\n    this.__v_isRef = true;\n    this._rawValue = __v_isShallow ? value : toRaw(value);\n    this._value = __v_isShallow ? value : toReactive(value);\n  }\n  get value() {\n    trackRefValue(this);\n    return this._value;\n  }\n  set value(newVal) {\n    const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n    newVal = useDirectValue ? newVal : toRaw(newVal);\n    if (hasChanged(newVal, this._rawValue)) {\n      this._rawValue = newVal;\n      this._value = useDirectValue ? newVal : toReactive(newVal);\n      triggerRefValue(this, newVal);\n    }\n  }\n}\nfunction triggerRef(ref2) {\n  triggerRefValue(ref2, !!(process.env.NODE_ENV !== \"production\") ? ref2.value : void 0);\n}\nfunction unref(ref2) {\n  return isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n  return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n  get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n  set: (target, key, value, receiver) => {\n    const oldValue = target[key];\n    if (isRef(oldValue) && !isRef(value)) {\n      oldValue.value = value;\n      return true;\n    } else {\n      return Reflect.set(target, key, value, receiver);\n    }\n  }\n};\nfunction proxyRefs(objectWithRefs) {\n  return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n  constructor(factory) {\n    this.dep = void 0;\n    this.__v_isRef = true;\n    const { get, set } = factory(\n      () => trackRefValue(this),\n      () => triggerRefValue(this)\n    );\n    this._get = get;\n    this._set = set;\n  }\n  get value() {\n    return this._get();\n  }\n  set value(newVal) {\n    this._set(newVal);\n  }\n}\nfunction customRef(factory) {\n  return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n  if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n    console.warn(`toRefs() expects a reactive object but received a plain one.`);\n  }\n  const ret = isArray(object) ? new Array(object.length) : {};\n  for (const key in object) {\n    ret[key] = propertyToRef(object, key);\n  }\n  return ret;\n}\nclass ObjectRefImpl {\n  constructor(_object, _key, _defaultValue) {\n    this._object = _object;\n    this._key = _key;\n    this._defaultValue = _defaultValue;\n    this.__v_isRef = true;\n  }\n  get value() {\n    const val = this._object[this._key];\n    return val === void 0 ? this._defaultValue : val;\n  }\n  set value(newVal) {\n    this._object[this._key] = newVal;\n  }\n  get dep() {\n    return getDepFromReactive(toRaw(this._object), this._key);\n  }\n}\nclass GetterRefImpl {\n  constructor(_getter) {\n    this._getter = _getter;\n    this.__v_isRef = true;\n    this.__v_isReadonly = true;\n  }\n  get value() {\n    return this._getter();\n  }\n}\nfunction toRef(source, key, defaultValue) {\n  if (isRef(source)) {\n    return source;\n  } else if (isFunction(source)) {\n    return new GetterRefImpl(source);\n  } else if (isObject(source) && arguments.length > 1) {\n    return propertyToRef(source, key, defaultValue);\n  } else {\n    return ref(source);\n  }\n}\nfunction propertyToRef(source, key, defaultValue) {\n  const val = source[key];\n  return isRef(val) ? val : new ObjectRefImpl(\n    source,\n    key,\n    defaultValue\n  );\n}\n\nclass ComputedRefImpl {\n  constructor(getter, _setter, isReadonly, isSSR) {\n    this._setter = _setter;\n    this.dep = void 0;\n    this.__v_isRef = true;\n    this[\"__v_isReadonly\"] = false;\n    this._dirty = true;\n    this.effect = new ReactiveEffect(getter, () => {\n      if (!this._dirty) {\n        this._dirty = true;\n        triggerRefValue(this);\n      }\n    });\n    this.effect.computed = this;\n    this.effect.active = this._cacheable = !isSSR;\n    this[\"__v_isReadonly\"] = isReadonly;\n  }\n  get value() {\n    const self = toRaw(this);\n    trackRefValue(self);\n    if (self._dirty || !self._cacheable) {\n      self._dirty = false;\n      self._value = self.effect.run();\n    }\n    return self._value;\n  }\n  set value(newValue) {\n    this._setter(newValue);\n  }\n}\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n  let getter;\n  let setter;\n  const onlyGetter = isFunction(getterOrOptions);\n  if (onlyGetter) {\n    getter = getterOrOptions;\n    setter = !!(process.env.NODE_ENV !== \"production\") ? () => {\n      console.warn(\"Write operation failed: computed value is readonly\");\n    } : NOOP;\n  } else {\n    getter = getterOrOptions.get;\n    setter = getterOrOptions.set;\n  }\n  const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n  if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n    cRef.effect.onTrack = debugOptions.onTrack;\n    cRef.effect.onTrigger = debugOptions.onTrigger;\n  }\n  return cRef;\n}\n\nconst tick = /* @__PURE__ */ Promise.resolve();\nconst queue = [];\nlet queued = false;\nconst scheduler = (fn) => {\n  queue.push(fn);\n  if (!queued) {\n    queued = true;\n    tick.then(flush);\n  }\n};\nconst flush = () => {\n  for (let i = 0; i < queue.length; i++) {\n    queue[i]();\n  }\n  queue.length = 0;\n  queued = false;\n};\nclass DeferredComputedRefImpl {\n  constructor(getter) {\n    this.dep = void 0;\n    this._dirty = true;\n    this.__v_isRef = true;\n    this[\"__v_isReadonly\"] = true;\n    let compareTarget;\n    let hasCompareTarget = false;\n    let scheduled = false;\n    this.effect = new ReactiveEffect(getter, (computedTrigger) => {\n      if (this.dep) {\n        if (computedTrigger) {\n          compareTarget = this._value;\n          hasCompareTarget = true;\n        } else if (!scheduled) {\n          const valueToCompare = hasCompareTarget ? compareTarget : this._value;\n          scheduled = true;\n          hasCompareTarget = false;\n          scheduler(() => {\n            if (this.effect.active && this._get() !== valueToCompare) {\n              triggerRefValue(this);\n            }\n            scheduled = false;\n          });\n        }\n        for (const e of this.dep) {\n          if (e.computed instanceof DeferredComputedRefImpl) {\n            e.scheduler(\n              true\n              /* computedTrigger */\n            );\n          }\n        }\n      }\n      this._dirty = true;\n    });\n    this.effect.computed = this;\n  }\n  _get() {\n    if (this._dirty) {\n      this._dirty = false;\n      return this._value = this.effect.run();\n    }\n    return this._value;\n  }\n  get value() {\n    trackRefValue(this);\n    return toRaw(this)._get();\n  }\n}\nfunction deferredComputed(getter) {\n  return new DeferredComputedRefImpl(getter);\n}\n\nexport { EffectScope, ITERATE_KEY, ReactiveEffect, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, pauseTracking, proxyRefs, reactive, readonly, ref, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, track, trigger, triggerRef, unref };\n","import { pauseTracking, resetTracking, isRef, toRaw, getCurrentScope, isShallow as isShallow$1, isReactive, ReactiveEffect, ref, shallowReadonly, track, reactive, shallowReactive, trigger, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1, isReadonly } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, customRef, effect, effectScope, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, isPromise, isArray, NOOP, getGlobalThis, extend, EMPTY_OBJ, toHandlerKey, looseToNumber, hyphenate, camelize, isObject, isOn, hasOwn, isModelListener, toNumber, hasChanged, remove, isSet, isMap, isPlainObject, isBuiltInDirective, invokeArrayFns, isRegExp, capitalize, isGloballyWhitelisted, NO, def, isReservedProp, EMPTY_ARR, toRawType, makeMap, normalizeClass, normalizeStyle } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n  stack.push(vnode);\n}\nfunction popWarningContext() {\n  stack.pop();\n}\nfunction warn(msg, ...args) {\n  if (!!!(process.env.NODE_ENV !== \"production\"))\n    return;\n  pauseTracking();\n  const instance = stack.length ? stack[stack.length - 1].component : null;\n  const appWarnHandler = instance && instance.appContext.config.warnHandler;\n  const trace = getComponentTrace();\n  if (appWarnHandler) {\n    callWithErrorHandling(\n      appWarnHandler,\n      instance,\n      11,\n      [\n        msg + args.join(\"\"),\n        instance && instance.proxy,\n        trace.map(\n          ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n        ).join(\"\\n\"),\n        trace\n      ]\n    );\n  } else {\n    const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n    if (trace.length && // avoid spamming console during tests\n    true) {\n      warnArgs.push(`\n`, ...formatTrace(trace));\n    }\n    console.warn(...warnArgs);\n  }\n  resetTracking();\n}\nfunction getComponentTrace() {\n  let currentVNode = stack[stack.length - 1];\n  if (!currentVNode) {\n    return [];\n  }\n  const normalizedStack = [];\n  while (currentVNode) {\n    const last = normalizedStack[0];\n    if (last && last.vnode === currentVNode) {\n      last.recurseCount++;\n    } else {\n      normalizedStack.push({\n        vnode: currentVNode,\n        recurseCount: 0\n      });\n    }\n    const parentInstance = currentVNode.component && currentVNode.component.parent;\n    currentVNode = parentInstance && parentInstance.vnode;\n  }\n  return normalizedStack;\n}\nfunction formatTrace(trace) {\n  const logs = [];\n  trace.forEach((entry, i) => {\n    logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n  });\n  return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n  const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n  const isRoot = vnode.component ? vnode.component.parent == null : false;\n  const open = ` at <${formatComponentName(\n    vnode.component,\n    vnode.type,\n    isRoot\n  )}`;\n  const close = `>` + postfix;\n  return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n  const res = [];\n  const keys = Object.keys(props);\n  keys.slice(0, 3).forEach((key) => {\n    res.push(...formatProp(key, props[key]));\n  });\n  if (keys.length > 3) {\n    res.push(` ...`);\n  }\n  return res;\n}\nfunction formatProp(key, value, raw) {\n  if (isString(value)) {\n    value = JSON.stringify(value);\n    return raw ? value : [`${key}=${value}`];\n  } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n    return raw ? value : [`${key}=${value}`];\n  } else if (isRef(value)) {\n    value = formatProp(key, toRaw(value.value), true);\n    return raw ? value : [`${key}=Ref<`, value, `>`];\n  } else if (isFunction(value)) {\n    return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n  } else {\n    value = toRaw(value);\n    return raw ? value : [`${key}=`, value];\n  }\n}\nfunction assertNumber(val, type) {\n  if (!!!(process.env.NODE_ENV !== \"production\"))\n    return;\n  if (val === void 0) {\n    return;\n  } else if (typeof val !== \"number\") {\n    warn(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n  } else if (isNaN(val)) {\n    warn(`${type} is NaN - the duration expression might be incorrect.`);\n  }\n}\n\nconst ErrorTypeStrings = {\n  [\"sp\"]: \"serverPrefetch hook\",\n  [\"bc\"]: \"beforeCreate hook\",\n  [\"c\"]: \"created hook\",\n  [\"bm\"]: \"beforeMount hook\",\n  [\"m\"]: \"mounted hook\",\n  [\"bu\"]: \"beforeUpdate hook\",\n  [\"u\"]: \"updated\",\n  [\"bum\"]: \"beforeUnmount hook\",\n  [\"um\"]: \"unmounted hook\",\n  [\"a\"]: \"activated hook\",\n  [\"da\"]: \"deactivated hook\",\n  [\"ec\"]: \"errorCaptured hook\",\n  [\"rtc\"]: \"renderTracked hook\",\n  [\"rtg\"]: \"renderTriggered hook\",\n  [0]: \"setup function\",\n  [1]: \"render function\",\n  [2]: \"watcher getter\",\n  [3]: \"watcher callback\",\n  [4]: \"watcher cleanup function\",\n  [5]: \"native event handler\",\n  [6]: \"component event handler\",\n  [7]: \"vnode hook\",\n  [8]: \"directive hook\",\n  [9]: \"transition hook\",\n  [10]: \"app errorHandler\",\n  [11]: \"app warnHandler\",\n  [12]: \"ref function\",\n  [13]: \"async component loader\",\n  [14]: \"scheduler flush. This is likely a Vue internals bug. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n  let res;\n  try {\n    res = args ? fn(...args) : fn();\n  } catch (err) {\n    handleError(err, instance, type);\n  }\n  return res;\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n  if (isFunction(fn)) {\n    const res = callWithErrorHandling(fn, instance, type, args);\n    if (res && isPromise(res)) {\n      res.catch((err) => {\n        handleError(err, instance, type);\n      });\n    }\n    return res;\n  }\n  const values = [];\n  for (let i = 0; i < fn.length; i++) {\n    values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n  }\n  return values;\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n  const contextVNode = instance ? instance.vnode : null;\n  if (instance) {\n    let cur = instance.parent;\n    const exposedInstance = instance.proxy;\n    const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings[type] : type;\n    while (cur) {\n      const errorCapturedHooks = cur.ec;\n      if (errorCapturedHooks) {\n        for (let i = 0; i < errorCapturedHooks.length; i++) {\n          if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n            return;\n          }\n        }\n      }\n      cur = cur.parent;\n    }\n    const appErrorHandler = instance.appContext.config.errorHandler;\n    if (appErrorHandler) {\n      callWithErrorHandling(\n        appErrorHandler,\n        null,\n        10,\n        [err, exposedInstance, errorInfo]\n      );\n      return;\n    }\n  }\n  logError(err, type, contextVNode, throwInDev);\n}\nfunction logError(err, type, contextVNode, throwInDev = true) {\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    const info = ErrorTypeStrings[type];\n    if (contextVNode) {\n      pushWarningContext(contextVNode);\n    }\n    warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n    if (contextVNode) {\n      popWarningContext();\n    }\n    if (throwInDev) {\n      throw err;\n    } else {\n      console.error(err);\n    }\n  } else {\n    console.error(err);\n  }\n}\n\nlet isFlushing = false;\nlet isFlushPending = false;\nconst queue = [];\nlet flushIndex = 0;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n  const p = currentFlushPromise || resolvedPromise;\n  return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n  let start = flushIndex + 1;\n  let end = queue.length;\n  while (start < end) {\n    const middle = start + end >>> 1;\n    const middleJobId = getId(queue[middle]);\n    middleJobId < id ? start = middle + 1 : end = middle;\n  }\n  return start;\n}\nfunction queueJob(job) {\n  if (!queue.length || !queue.includes(\n    job,\n    isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex\n  )) {\n    if (job.id == null) {\n      queue.push(job);\n    } else {\n      queue.splice(findInsertionIndex(job.id), 0, job);\n    }\n    queueFlush();\n  }\n}\nfunction queueFlush() {\n  if (!isFlushing && !isFlushPending) {\n    isFlushPending = true;\n    currentFlushPromise = resolvedPromise.then(flushJobs);\n  }\n}\nfunction invalidateJob(job) {\n  const i = queue.indexOf(job);\n  if (i > flushIndex) {\n    queue.splice(i, 1);\n  }\n}\nfunction queuePostFlushCb(cb) {\n  if (!isArray(cb)) {\n    if (!activePostFlushCbs || !activePostFlushCbs.includes(\n      cb,\n      cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex\n    )) {\n      pendingPostFlushCbs.push(cb);\n    }\n  } else {\n    pendingPostFlushCbs.push(...cb);\n  }\n  queueFlush();\n}\nfunction flushPreFlushCbs(seen, i = isFlushing ? flushIndex + 1 : 0) {\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    seen = seen || /* @__PURE__ */ new Map();\n  }\n  for (; i < queue.length; i++) {\n    const cb = queue[i];\n    if (cb && cb.pre) {\n      if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n        continue;\n      }\n      queue.splice(i, 1);\n      i--;\n      cb();\n    }\n  }\n}\nfunction flushPostFlushCbs(seen) {\n  if (pendingPostFlushCbs.length) {\n    const deduped = [...new Set(pendingPostFlushCbs)];\n    pendingPostFlushCbs.length = 0;\n    if (activePostFlushCbs) {\n      activePostFlushCbs.push(...deduped);\n      return;\n    }\n    activePostFlushCbs = deduped;\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      seen = seen || /* @__PURE__ */ new Map();\n    }\n    activePostFlushCbs.sort((a, b) => getId(a) - getId(b));\n    for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n      if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {\n        continue;\n      }\n      activePostFlushCbs[postFlushIndex]();\n    }\n    activePostFlushCbs = null;\n    postFlushIndex = 0;\n  }\n}\nconst getId = (job) => job.id == null ? Infinity : job.id;\nconst comparator = (a, b) => {\n  const diff = getId(a) - getId(b);\n  if (diff === 0) {\n    if (a.pre && !b.pre)\n      return -1;\n    if (b.pre && !a.pre)\n      return 1;\n  }\n  return diff;\n};\nfunction flushJobs(seen) {\n  isFlushPending = false;\n  isFlushing = true;\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    seen = seen || /* @__PURE__ */ new Map();\n  }\n  queue.sort(comparator);\n  const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n  try {\n    for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n      const job = queue[flushIndex];\n      if (job && job.active !== false) {\n        if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n          continue;\n        }\n        callWithErrorHandling(job, null, 14);\n      }\n    }\n  } finally {\n    flushIndex = 0;\n    queue.length = 0;\n    flushPostFlushCbs(seen);\n    isFlushing = false;\n    currentFlushPromise = null;\n    if (queue.length || pendingPostFlushCbs.length) {\n      flushJobs(seen);\n    }\n  }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n  if (!seen.has(fn)) {\n    seen.set(fn, 1);\n  } else {\n    const count = seen.get(fn);\n    if (count > RECURSION_LIMIT) {\n      const instance = fn.ownerInstance;\n      const componentName = instance && getComponentName(instance.type);\n      warn(\n        `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`\n      );\n      return true;\n    } else {\n      seen.set(fn, count + 1);\n    }\n  }\n}\n\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = /* @__PURE__ */ new Set();\nif (!!(process.env.NODE_ENV !== \"production\")) {\n  getGlobalThis().__VUE_HMR_RUNTIME__ = {\n    createRecord: tryWrap(createRecord),\n    rerender: tryWrap(rerender),\n    reload: tryWrap(reload)\n  };\n}\nconst map = /* @__PURE__ */ new Map();\nfunction registerHMR(instance) {\n  const id = instance.type.__hmrId;\n  let record = map.get(id);\n  if (!record) {\n    createRecord(id, instance.type);\n    record = map.get(id);\n  }\n  record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n  map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n  if (map.has(id)) {\n    return false;\n  }\n  map.set(id, {\n    initialDef: normalizeClassComponent(initialDef),\n    instances: /* @__PURE__ */ new Set()\n  });\n  return true;\n}\nfunction normalizeClassComponent(component) {\n  return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n  const record = map.get(id);\n  if (!record) {\n    return;\n  }\n  record.initialDef.render = newRender;\n  [...record.instances].forEach((instance) => {\n    if (newRender) {\n      instance.render = newRender;\n      normalizeClassComponent(instance.type).render = newRender;\n    }\n    instance.renderCache = [];\n    isHmrUpdating = true;\n    instance.update();\n    isHmrUpdating = false;\n  });\n}\nfunction reload(id, newComp) {\n  const record = map.get(id);\n  if (!record)\n    return;\n  newComp = normalizeClassComponent(newComp);\n  updateComponentDef(record.initialDef, newComp);\n  const instances = [...record.instances];\n  for (const instance of instances) {\n    const oldComp = normalizeClassComponent(instance.type);\n    if (!hmrDirtyComponents.has(oldComp)) {\n      if (oldComp !== record.initialDef) {\n        updateComponentDef(oldComp, newComp);\n      }\n      hmrDirtyComponents.add(oldComp);\n    }\n    instance.appContext.propsCache.delete(instance.type);\n    instance.appContext.emitsCache.delete(instance.type);\n    instance.appContext.optionsCache.delete(instance.type);\n    if (instance.ceReload) {\n      hmrDirtyComponents.add(oldComp);\n      instance.ceReload(newComp.styles);\n      hmrDirtyComponents.delete(oldComp);\n    } else if (instance.parent) {\n      queueJob(instance.parent.update);\n    } else if (instance.appContext.reload) {\n      instance.appContext.reload();\n    } else if (typeof window !== \"undefined\") {\n      window.location.reload();\n    } else {\n      console.warn(\n        \"[HMR] Root or manually mounted instance modified. Full reload required.\"\n      );\n    }\n  }\n  queuePostFlushCb(() => {\n    for (const instance of instances) {\n      hmrDirtyComponents.delete(\n        normalizeClassComponent(instance.type)\n      );\n    }\n  });\n}\nfunction updateComponentDef(oldComp, newComp) {\n  extend(oldComp, newComp);\n  for (const key in oldComp) {\n    if (key !== \"__file\" && !(key in newComp)) {\n      delete oldComp[key];\n    }\n  }\n}\nfunction tryWrap(fn) {\n  return (id, arg) => {\n    try {\n      return fn(id, arg);\n    } catch (e) {\n      console.error(e);\n      console.warn(\n        `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`\n      );\n    }\n  };\n}\n\nlet devtools;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n  if (devtools) {\n    devtools.emit(event, ...args);\n  } else if (!devtoolsNotInstalled) {\n    buffer.push({ event, args });\n  }\n}\nfunction setDevtoolsHook(hook, target) {\n  var _a, _b;\n  devtools = hook;\n  if (devtools) {\n    devtools.enabled = true;\n    buffer.forEach(({ event, args }) => devtools.emit(event, ...args));\n    buffer = [];\n  } else if (\n    // handle late devtools injection - only do this if we are in an actual\n    // browser environment to avoid the timer handle stalling test runner exit\n    // (#4815)\n    typeof window !== \"undefined\" && // some envs mock window but not fully\n    window.HTMLElement && // also exclude jsdom\n    !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n  ) {\n    const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n    replay.push((newHook) => {\n      setDevtoolsHook(newHook, target);\n    });\n    setTimeout(() => {\n      if (!devtools) {\n        target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n        devtoolsNotInstalled = true;\n        buffer = [];\n      }\n    }, 3e3);\n  } else {\n    devtoolsNotInstalled = true;\n    buffer = [];\n  }\n}\nfunction devtoolsInitApp(app, version) {\n  emit$1(\"app:init\" /* APP_INIT */, app, version, {\n    Fragment,\n    Text,\n    Comment,\n    Static\n  });\n}\nfunction devtoolsUnmountApp(app) {\n  emit$1(\"app:unmount\" /* APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\n  \"component:added\" /* COMPONENT_ADDED */\n);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n  \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n  if (devtools && typeof devtools.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n  !devtools.cleanupBuffer(component)) {\n    _devtoolsComponentRemoved(component);\n  }\n};\nfunction createDevtoolsComponentHook(hook) {\n  return (component) => {\n    emit$1(\n      hook,\n      component.appContext.app,\n      component.uid,\n      component.parent ? component.parent.uid : void 0,\n      component\n    );\n  };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\n  \"perf:start\" /* PERFORMANCE_START */\n);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\n  \"perf:end\" /* PERFORMANCE_END */\n);\nfunction createDevtoolsPerformanceHook(hook) {\n  return (component, type, time) => {\n    emit$1(hook, component.appContext.app, component.uid, component, type, time);\n  };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n  emit$1(\n    \"component:emit\" /* COMPONENT_EMIT */,\n    component.appContext.app,\n    component,\n    event,\n    params\n  );\n}\n\nfunction emit(instance, event, ...rawArgs) {\n  if (instance.isUnmounted)\n    return;\n  const props = instance.vnode.props || EMPTY_OBJ;\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    const {\n      emitsOptions,\n      propsOptions: [propsOptions]\n    } = instance;\n    if (emitsOptions) {\n      if (!(event in emitsOptions) && true) {\n        if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {\n          warn(\n            `Component emitted event \"${event}\" but it is neither declared in the emits option nor as an \"${toHandlerKey(event)}\" prop.`\n          );\n        }\n      } else {\n        const validator = emitsOptions[event];\n        if (isFunction(validator)) {\n          const isValid = validator(...rawArgs);\n          if (!isValid) {\n            warn(\n              `Invalid event arguments: event validation failed for event \"${event}\".`\n            );\n          }\n        }\n      }\n    }\n  }\n  let args = rawArgs;\n  const isModelListener = event.startsWith(\"update:\");\n  const modelArg = isModelListener && event.slice(7);\n  if (modelArg && modelArg in props) {\n    const modifiersKey = `${modelArg === \"modelValue\" ? \"model\" : modelArg}Modifiers`;\n    const { number, trim } = props[modifiersKey] || EMPTY_OBJ;\n    if (trim) {\n      args = rawArgs.map((a) => isString(a) ? a.trim() : a);\n    }\n    if (number) {\n      args = rawArgs.map(looseToNumber);\n    }\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n    devtoolsComponentEmit(instance, event, args);\n  }\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    const lowerCaseEvent = event.toLowerCase();\n    if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n      warn(\n        `Event \"${lowerCaseEvent}\" is emitted in component ${formatComponentName(\n          instance,\n          instance.type\n        )} but the handler is registered for \"${event}\". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use \"${hyphenate(event)}\" instead of \"${event}\".`\n      );\n    }\n  }\n  let handlerName;\n  let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)\n  props[handlerName = toHandlerKey(camelize(event))];\n  if (!handler && isModelListener) {\n    handler = props[handlerName = toHandlerKey(hyphenate(event))];\n  }\n  if (handler) {\n    callWithAsyncErrorHandling(\n      handler,\n      instance,\n      6,\n      args\n    );\n  }\n  const onceHandler = props[handlerName + `Once`];\n  if (onceHandler) {\n    if (!instance.emitted) {\n      instance.emitted = {};\n    } else if (instance.emitted[handlerName]) {\n      return;\n    }\n    instance.emitted[handlerName] = true;\n    callWithAsyncErrorHandling(\n      onceHandler,\n      instance,\n      6,\n      args\n    );\n  }\n}\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n  const cache = appContext.emitsCache;\n  const cached = cache.get(comp);\n  if (cached !== void 0) {\n    return cached;\n  }\n  const raw = comp.emits;\n  let normalized = {};\n  let hasExtends = false;\n  if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n    const extendEmits = (raw2) => {\n      const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);\n      if (normalizedFromExtend) {\n        hasExtends = true;\n        extend(normalized, normalizedFromExtend);\n      }\n    };\n    if (!asMixin && appContext.mixins.length) {\n      appContext.mixins.forEach(extendEmits);\n    }\n    if (comp.extends) {\n      extendEmits(comp.extends);\n    }\n    if (comp.mixins) {\n      comp.mixins.forEach(extendEmits);\n    }\n  }\n  if (!raw && !hasExtends) {\n    if (isObject(comp)) {\n      cache.set(comp, null);\n    }\n    return null;\n  }\n  if (isArray(raw)) {\n    raw.forEach((key) => normalized[key] = null);\n  } else {\n    extend(normalized, raw);\n  }\n  if (isObject(comp)) {\n    cache.set(comp, normalized);\n  }\n  return normalized;\n}\nfunction isEmitListener(options, key) {\n  if (!options || !isOn(key)) {\n    return false;\n  }\n  key = key.slice(2).replace(/Once$/, \"\");\n  return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n  const prev = currentRenderingInstance;\n  currentRenderingInstance = instance;\n  currentScopeId = instance && instance.type.__scopeId || null;\n  return prev;\n}\nfunction pushScopeId(id) {\n  currentScopeId = id;\n}\nfunction popScopeId() {\n  currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n  if (!ctx)\n    return fn;\n  if (fn._n) {\n    return fn;\n  }\n  const renderFnWithContext = (...args) => {\n    if (renderFnWithContext._d) {\n      setBlockTracking(-1);\n    }\n    const prevInstance = setCurrentRenderingInstance(ctx);\n    let res;\n    try {\n      res = fn(...args);\n    } finally {\n      setCurrentRenderingInstance(prevInstance);\n      if (renderFnWithContext._d) {\n        setBlockTracking(1);\n      }\n    }\n    if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n      devtoolsComponentUpdated(ctx);\n    }\n    return res;\n  };\n  renderFnWithContext._n = true;\n  renderFnWithContext._c = true;\n  renderFnWithContext._d = true;\n  return renderFnWithContext;\n}\n\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n  accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n  const {\n    type: Component,\n    vnode,\n    proxy,\n    withProxy,\n    props,\n    propsOptions: [propsOptions],\n    slots,\n    attrs,\n    emit,\n    render,\n    renderCache,\n    data,\n    setupState,\n    ctx,\n    inheritAttrs\n  } = instance;\n  let result;\n  let fallthroughAttrs;\n  const prev = setCurrentRenderingInstance(instance);\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    accessedAttrs = false;\n  }\n  try {\n    if (vnode.shapeFlag & 4) {\n      const proxyToUse = withProxy || proxy;\n      result = normalizeVNode(\n        render.call(\n          proxyToUse,\n          proxyToUse,\n          renderCache,\n          props,\n          setupState,\n          data,\n          ctx\n        )\n      );\n      fallthroughAttrs = attrs;\n    } else {\n      const render2 = Component;\n      if (!!(process.env.NODE_ENV !== \"production\") && attrs === props) {\n        markAttrsAccessed();\n      }\n      result = normalizeVNode(\n        render2.length > 1 ? render2(\n          props,\n          !!(process.env.NODE_ENV !== \"production\") ? {\n            get attrs() {\n              markAttrsAccessed();\n              return attrs;\n            },\n            slots,\n            emit\n          } : { attrs, slots, emit }\n        ) : render2(\n          props,\n          null\n          /* we know it doesn't need it */\n        )\n      );\n      fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);\n    }\n  } catch (err) {\n    blockStack.length = 0;\n    handleError(err, instance, 1);\n    result = createVNode(Comment);\n  }\n  let root = result;\n  let setRoot = void 0;\n  if (!!(process.env.NODE_ENV !== \"production\") && result.patchFlag > 0 && result.patchFlag & 2048) {\n    [root, setRoot] = getChildRoot(result);\n  }\n  if (fallthroughAttrs && inheritAttrs !== false) {\n    const keys = Object.keys(fallthroughAttrs);\n    const { shapeFlag } = root;\n    if (keys.length) {\n      if (shapeFlag & (1 | 6)) {\n        if (propsOptions && keys.some(isModelListener)) {\n          fallthroughAttrs = filterModelListeners(\n            fallthroughAttrs,\n            propsOptions\n          );\n        }\n        root = cloneVNode(root, fallthroughAttrs);\n      } else if (!!(process.env.NODE_ENV !== \"production\") && !accessedAttrs && root.type !== Comment) {\n        const allAttrs = Object.keys(attrs);\n        const eventAttrs = [];\n        const extraAttrs = [];\n        for (let i = 0, l = allAttrs.length; i < l; i++) {\n          const key = allAttrs[i];\n          if (isOn(key)) {\n            if (!isModelListener(key)) {\n              eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n            }\n          } else {\n            extraAttrs.push(key);\n          }\n        }\n        if (extraAttrs.length) {\n          warn(\n            `Extraneous non-props attributes (${extraAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.`\n          );\n        }\n        if (eventAttrs.length) {\n          warn(\n            `Extraneous non-emits event listeners (${eventAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the \"emits\" option.`\n          );\n        }\n      }\n    }\n  }\n  if (vnode.dirs) {\n    if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n      warn(\n        `Runtime directive used on component with non-element root node. The directives will not function as intended.`\n      );\n    }\n    root = cloneVNode(root);\n    root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n  }\n  if (vnode.transition) {\n    if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n      warn(\n        `Component inside <Transition> renders non-element root node that cannot be animated.`\n      );\n    }\n    root.transition = vnode.transition;\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") && setRoot) {\n    setRoot(root);\n  } else {\n    result = root;\n  }\n  setCurrentRenderingInstance(prev);\n  return result;\n}\nconst getChildRoot = (vnode) => {\n  const rawChildren = vnode.children;\n  const dynamicChildren = vnode.dynamicChildren;\n  const childRoot = filterSingleRoot(rawChildren);\n  if (!childRoot) {\n    return [vnode, void 0];\n  }\n  const index = rawChildren.indexOf(childRoot);\n  const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n  const setRoot = (updatedRoot) => {\n    rawChildren[index] = updatedRoot;\n    if (dynamicChildren) {\n      if (dynamicIndex > -1) {\n        dynamicChildren[dynamicIndex] = updatedRoot;\n      } else if (updatedRoot.patchFlag > 0) {\n        vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n      }\n    }\n  };\n  return [normalizeVNode(childRoot), setRoot];\n};\nfunction filterSingleRoot(children) {\n  let singleRoot;\n  for (let i = 0; i < children.length; i++) {\n    const child = children[i];\n    if (isVNode(child)) {\n      if (child.type !== Comment || child.children === \"v-if\") {\n        if (singleRoot) {\n          return;\n        } else {\n          singleRoot = child;\n        }\n      }\n    } else {\n      return;\n    }\n  }\n  return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n  let res;\n  for (const key in attrs) {\n    if (key === \"class\" || key === \"style\" || isOn(key)) {\n      (res || (res = {}))[key] = attrs[key];\n    }\n  }\n  return res;\n};\nconst filterModelListeners = (attrs, props) => {\n  const res = {};\n  for (const key in attrs) {\n    if (!isModelListener(key) || !(key.slice(9) in props)) {\n      res[key] = attrs[key];\n    }\n  }\n  return res;\n};\nconst isElementRoot = (vnode) => {\n  return vnode.shapeFlag & (6 | 1) || vnode.type === Comment;\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n  const { props: prevProps, children: prevChildren, component } = prevVNode;\n  const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n  const emits = component.emitsOptions;\n  if (!!(process.env.NODE_ENV !== \"production\") && (prevChildren || nextChildren) && isHmrUpdating) {\n    return true;\n  }\n  if (nextVNode.dirs || nextVNode.transition) {\n    return true;\n  }\n  if (optimized && patchFlag >= 0) {\n    if (patchFlag & 1024) {\n      return true;\n    }\n    if (patchFlag & 16) {\n      if (!prevProps) {\n        return !!nextProps;\n      }\n      return hasPropsChanged(prevProps, nextProps, emits);\n    } else if (patchFlag & 8) {\n      const dynamicProps = nextVNode.dynamicProps;\n      for (let i = 0; i < dynamicProps.length; i++) {\n        const key = dynamicProps[i];\n        if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) {\n          return true;\n        }\n      }\n    }\n  } else {\n    if (prevChildren || nextChildren) {\n      if (!nextChildren || !nextChildren.$stable) {\n        return true;\n      }\n    }\n    if (prevProps === nextProps) {\n      return false;\n    }\n    if (!prevProps) {\n      return !!nextProps;\n    }\n    if (!nextProps) {\n      return true;\n    }\n    return hasPropsChanged(prevProps, nextProps, emits);\n  }\n  return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n  const nextKeys = Object.keys(nextProps);\n  if (nextKeys.length !== Object.keys(prevProps).length) {\n    return true;\n  }\n  for (let i = 0; i < nextKeys.length; i++) {\n    const key = nextKeys[i];\n    if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el) {\n  while (parent && parent.subTree === vnode) {\n    (vnode = parent.vnode).el = el;\n    parent = parent.parent;\n  }\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nconst SuspenseImpl = {\n  name: \"Suspense\",\n  // In order to make Suspense tree-shakable, we need to avoid importing it\n  // directly in the renderer. The renderer checks for the __isSuspense flag\n  // on a vnode's type and calls the `process` method, passing in renderer\n  // internals.\n  __isSuspense: true,\n  process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) {\n    if (n1 == null) {\n      mountSuspense(\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        isSVG,\n        slotScopeIds,\n        optimized,\n        rendererInternals\n      );\n    } else {\n      patchSuspense(\n        n1,\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        isSVG,\n        slotScopeIds,\n        optimized,\n        rendererInternals\n      );\n    }\n  },\n  hydrate: hydrateSuspense,\n  create: createSuspenseBoundary,\n  normalize: normalizeSuspenseChildren\n};\nconst Suspense = SuspenseImpl ;\nfunction triggerEvent(vnode, name) {\n  const eventListener = vnode.props && vnode.props[name];\n  if (isFunction(eventListener)) {\n    eventListener();\n  }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) {\n  const {\n    p: patch,\n    o: { createElement }\n  } = rendererInternals;\n  const hiddenContainer = createElement(\"div\");\n  const suspense = vnode.suspense = createSuspenseBoundary(\n    vnode,\n    parentSuspense,\n    parentComponent,\n    container,\n    hiddenContainer,\n    anchor,\n    isSVG,\n    slotScopeIds,\n    optimized,\n    rendererInternals\n  );\n  patch(\n    null,\n    suspense.pendingBranch = vnode.ssContent,\n    hiddenContainer,\n    null,\n    parentComponent,\n    suspense,\n    isSVG,\n    slotScopeIds\n  );\n  if (suspense.deps > 0) {\n    triggerEvent(vnode, \"onPending\");\n    triggerEvent(vnode, \"onFallback\");\n    patch(\n      null,\n      vnode.ssFallback,\n      container,\n      anchor,\n      parentComponent,\n      null,\n      // fallback tree will not have suspense context\n      isSVG,\n      slotScopeIds\n    );\n    setActiveBranch(suspense, vnode.ssFallback);\n  } else {\n    suspense.resolve(false, true);\n  }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n  const suspense = n2.suspense = n1.suspense;\n  suspense.vnode = n2;\n  n2.el = n1.el;\n  const newBranch = n2.ssContent;\n  const newFallback = n2.ssFallback;\n  const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n  if (pendingBranch) {\n    suspense.pendingBranch = newBranch;\n    if (isSameVNodeType(newBranch, pendingBranch)) {\n      patch(\n        pendingBranch,\n        newBranch,\n        suspense.hiddenContainer,\n        null,\n        parentComponent,\n        suspense,\n        isSVG,\n        slotScopeIds,\n        optimized\n      );\n      if (suspense.deps <= 0) {\n        suspense.resolve();\n      } else if (isInFallback) {\n        patch(\n          activeBranch,\n          newFallback,\n          container,\n          anchor,\n          parentComponent,\n          null,\n          // fallback tree will not have suspense context\n          isSVG,\n          slotScopeIds,\n          optimized\n        );\n        setActiveBranch(suspense, newFallback);\n      }\n    } else {\n      suspense.pendingId++;\n      if (isHydrating) {\n        suspense.isHydrating = false;\n        suspense.activeBranch = pendingBranch;\n      } else {\n        unmount(pendingBranch, parentComponent, suspense);\n      }\n      suspense.deps = 0;\n      suspense.effects.length = 0;\n      suspense.hiddenContainer = createElement(\"div\");\n      if (isInFallback) {\n        patch(\n          null,\n          newBranch,\n          suspense.hiddenContainer,\n          null,\n          parentComponent,\n          suspense,\n          isSVG,\n          slotScopeIds,\n          optimized\n        );\n        if (suspense.deps <= 0) {\n          suspense.resolve();\n        } else {\n          patch(\n            activeBranch,\n            newFallback,\n            container,\n            anchor,\n            parentComponent,\n            null,\n            // fallback tree will not have suspense context\n            isSVG,\n            slotScopeIds,\n            optimized\n          );\n          setActiveBranch(suspense, newFallback);\n        }\n      } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n        patch(\n          activeBranch,\n          newBranch,\n          container,\n          anchor,\n          parentComponent,\n          suspense,\n          isSVG,\n          slotScopeIds,\n          optimized\n        );\n        suspense.resolve(true);\n      } else {\n        patch(\n          null,\n          newBranch,\n          suspense.hiddenContainer,\n          null,\n          parentComponent,\n          suspense,\n          isSVG,\n          slotScopeIds,\n          optimized\n        );\n        if (suspense.deps <= 0) {\n          suspense.resolve();\n        }\n      }\n    }\n  } else {\n    if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n      patch(\n        activeBranch,\n        newBranch,\n        container,\n        anchor,\n        parentComponent,\n        suspense,\n        isSVG,\n        slotScopeIds,\n        optimized\n      );\n      setActiveBranch(suspense, newBranch);\n    } else {\n      triggerEvent(n2, \"onPending\");\n      suspense.pendingBranch = newBranch;\n      suspense.pendingId++;\n      patch(\n        null,\n        newBranch,\n        suspense.hiddenContainer,\n        null,\n        parentComponent,\n        suspense,\n        isSVG,\n        slotScopeIds,\n        optimized\n      );\n      if (suspense.deps <= 0) {\n        suspense.resolve();\n      } else {\n        const { timeout, pendingId } = suspense;\n        if (timeout > 0) {\n          setTimeout(() => {\n            if (suspense.pendingId === pendingId) {\n              suspense.fallback(newFallback);\n            }\n          }, timeout);\n        } else if (timeout === 0) {\n          suspense.fallback(newFallback);\n        }\n      }\n    }\n  }\n}\nlet hasWarned = false;\nfunction createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n  if (!!(process.env.NODE_ENV !== \"production\") && true && !hasWarned) {\n    hasWarned = true;\n    console[console.info ? \"info\" : \"log\"](\n      `<Suspense> is an experimental feature and its API will likely change.`\n    );\n  }\n  const {\n    p: patch,\n    m: move,\n    um: unmount,\n    n: next,\n    o: { parentNode, remove }\n  } = rendererInternals;\n  let parentSuspenseId;\n  const isSuspensible = isVNodeSuspensible(vnode);\n  if (isSuspensible) {\n    if (parentSuspense == null ? void 0 : parentSuspense.pendingBranch) {\n      parentSuspenseId = parentSuspense.pendingId;\n      parentSuspense.deps++;\n    }\n  }\n  const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0;\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    assertNumber(timeout, `Suspense timeout`);\n  }\n  const suspense = {\n    vnode,\n    parent: parentSuspense,\n    parentComponent,\n    isSVG,\n    container,\n    hiddenContainer,\n    anchor,\n    deps: 0,\n    pendingId: 0,\n    timeout: typeof timeout === \"number\" ? timeout : -1,\n    activeBranch: null,\n    pendingBranch: null,\n    isInFallback: true,\n    isHydrating,\n    isUnmounted: false,\n    effects: [],\n    resolve(resume = false, sync = false) {\n      if (!!(process.env.NODE_ENV !== \"production\")) {\n        if (!resume && !suspense.pendingBranch) {\n          throw new Error(\n            `suspense.resolve() is called without a pending branch.`\n          );\n        }\n        if (suspense.isUnmounted) {\n          throw new Error(\n            `suspense.resolve() is called on an already unmounted suspense boundary.`\n          );\n        }\n      }\n      const {\n        vnode: vnode2,\n        activeBranch,\n        pendingBranch,\n        pendingId,\n        effects,\n        parentComponent: parentComponent2,\n        container: container2\n      } = suspense;\n      if (suspense.isHydrating) {\n        suspense.isHydrating = false;\n      } else if (!resume) {\n        const delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === \"out-in\";\n        if (delayEnter) {\n          activeBranch.transition.afterLeave = () => {\n            if (pendingId === suspense.pendingId) {\n              move(pendingBranch, container2, anchor2, 0);\n            }\n          };\n        }\n        let { anchor: anchor2 } = suspense;\n        if (activeBranch) {\n          anchor2 = next(activeBranch);\n          unmount(activeBranch, parentComponent2, suspense, true);\n        }\n        if (!delayEnter) {\n          move(pendingBranch, container2, anchor2, 0);\n        }\n      }\n      setActiveBranch(suspense, pendingBranch);\n      suspense.pendingBranch = null;\n      suspense.isInFallback = false;\n      let parent = suspense.parent;\n      let hasUnresolvedAncestor = false;\n      while (parent) {\n        if (parent.pendingBranch) {\n          parent.effects.push(...effects);\n          hasUnresolvedAncestor = true;\n          break;\n        }\n        parent = parent.parent;\n      }\n      if (!hasUnresolvedAncestor) {\n        queuePostFlushCb(effects);\n      }\n      suspense.effects = [];\n      if (isSuspensible) {\n        if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) {\n          parentSuspense.deps--;\n          if (parentSuspense.deps === 0 && !sync) {\n            parentSuspense.resolve();\n          }\n        }\n      }\n      triggerEvent(vnode2, \"onResolve\");\n    },\n    fallback(fallbackVNode) {\n      if (!suspense.pendingBranch) {\n        return;\n      }\n      const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, isSVG: isSVG2 } = suspense;\n      triggerEvent(vnode2, \"onFallback\");\n      const anchor2 = next(activeBranch);\n      const mountFallback = () => {\n        if (!suspense.isInFallback) {\n          return;\n        }\n        patch(\n          null,\n          fallbackVNode,\n          container2,\n          anchor2,\n          parentComponent2,\n          null,\n          // fallback tree will not have suspense context\n          isSVG2,\n          slotScopeIds,\n          optimized\n        );\n        setActiveBranch(suspense, fallbackVNode);\n      };\n      const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === \"out-in\";\n      if (delayEnter) {\n        activeBranch.transition.afterLeave = mountFallback;\n      }\n      suspense.isInFallback = true;\n      unmount(\n        activeBranch,\n        parentComponent2,\n        null,\n        // no suspense so unmount hooks fire now\n        true\n        // shouldRemove\n      );\n      if (!delayEnter) {\n        mountFallback();\n      }\n    },\n    move(container2, anchor2, type) {\n      suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type);\n      suspense.container = container2;\n    },\n    next() {\n      return suspense.activeBranch && next(suspense.activeBranch);\n    },\n    registerDep(instance, setupRenderEffect) {\n      const isInPendingSuspense = !!suspense.pendingBranch;\n      if (isInPendingSuspense) {\n        suspense.deps++;\n      }\n      const hydratedEl = instance.vnode.el;\n      instance.asyncDep.catch((err) => {\n        handleError(err, instance, 0);\n      }).then((asyncSetupResult) => {\n        if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) {\n          return;\n        }\n        instance.asyncResolved = true;\n        const { vnode: vnode2 } = instance;\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          pushWarningContext(vnode2);\n        }\n        handleSetupResult(instance, asyncSetupResult, false);\n        if (hydratedEl) {\n          vnode2.el = hydratedEl;\n        }\n        const placeholder = !hydratedEl && instance.subTree.el;\n        setupRenderEffect(\n          instance,\n          vnode2,\n          // component may have been moved before resolve.\n          // if this is not a hydration, instance.subTree will be the comment\n          // placeholder.\n          parentNode(hydratedEl || instance.subTree.el),\n          // anchor will not be used if this is hydration, so only need to\n          // consider the comment placeholder case.\n          hydratedEl ? null : next(instance.subTree),\n          suspense,\n          isSVG,\n          optimized\n        );\n        if (placeholder) {\n          remove(placeholder);\n        }\n        updateHOCHostEl(instance, vnode2.el);\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          popWarningContext();\n        }\n        if (isInPendingSuspense && --suspense.deps === 0) {\n          suspense.resolve();\n        }\n      });\n    },\n    unmount(parentSuspense2, doRemove) {\n      suspense.isUnmounted = true;\n      if (suspense.activeBranch) {\n        unmount(\n          suspense.activeBranch,\n          parentComponent,\n          parentSuspense2,\n          doRemove\n        );\n      }\n      if (suspense.pendingBranch) {\n        unmount(\n          suspense.pendingBranch,\n          parentComponent,\n          parentSuspense2,\n          doRemove\n        );\n      }\n    }\n  };\n  return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n  const suspense = vnode.suspense = createSuspenseBoundary(\n    vnode,\n    parentSuspense,\n    parentComponent,\n    node.parentNode,\n    document.createElement(\"div\"),\n    null,\n    isSVG,\n    slotScopeIds,\n    optimized,\n    rendererInternals,\n    true\n    /* hydrating */\n  );\n  const result = hydrateNode(\n    node,\n    suspense.pendingBranch = vnode.ssContent,\n    parentComponent,\n    suspense,\n    slotScopeIds,\n    optimized\n  );\n  if (suspense.deps === 0) {\n    suspense.resolve(false, true);\n  }\n  return result;\n}\nfunction normalizeSuspenseChildren(vnode) {\n  const { shapeFlag, children } = vnode;\n  const isSlotChildren = shapeFlag & 32;\n  vnode.ssContent = normalizeSuspenseSlot(\n    isSlotChildren ? children.default : children\n  );\n  vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n  let block;\n  if (isFunction(s)) {\n    const trackBlock = isBlockTreeEnabled && s._c;\n    if (trackBlock) {\n      s._d = false;\n      openBlock();\n    }\n    s = s();\n    if (trackBlock) {\n      s._d = true;\n      block = currentBlock;\n      closeBlock();\n    }\n  }\n  if (isArray(s)) {\n    const singleChild = filterSingleRoot(s);\n    if (!!(process.env.NODE_ENV !== \"production\") && !singleChild) {\n      warn(`<Suspense> slots expect a single root node.`);\n    }\n    s = singleChild;\n  }\n  s = normalizeVNode(s);\n  if (block && !s.dynamicChildren) {\n    s.dynamicChildren = block.filter((c) => c !== s);\n  }\n  return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n  if (suspense && suspense.pendingBranch) {\n    if (isArray(fn)) {\n      suspense.effects.push(...fn);\n    } else {\n      suspense.effects.push(fn);\n    }\n  } else {\n    queuePostFlushCb(fn);\n  }\n}\nfunction setActiveBranch(suspense, branch) {\n  suspense.activeBranch = branch;\n  const { vnode, parentComponent } = suspense;\n  const el = vnode.el = branch.el;\n  if (parentComponent && parentComponent.subTree === vnode) {\n    parentComponent.vnode.el = el;\n    updateHOCHostEl(parentComponent, el);\n  }\n}\nfunction isVNodeSuspensible(vnode) {\n  var _a;\n  return ((_a = vnode.props) == null ? void 0 : _a.suspensible) != null && vnode.props.suspensible !== false;\n}\n\nfunction watchEffect(effect, options) {\n  return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n  return doWatch(\n    effect,\n    null,\n    !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"post\" }) : { flush: \"post\" }\n  );\n}\nfunction watchSyncEffect(effect, options) {\n  return doWatch(\n    effect,\n    null,\n    !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"sync\" }) : { flush: \"sync\" }\n  );\n}\nconst INITIAL_WATCHER_VALUE = {};\nfunction watch(source, cb, options) {\n  if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(cb)) {\n    warn(\n      `\\`watch(fn, options?)\\` signature has been moved to a separate API. Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only supports \\`watch(source, cb, options?) signature.`\n    );\n  }\n  return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ) {\n  var _a;\n  if (!!(process.env.NODE_ENV !== \"production\") && !cb) {\n    if (immediate !== void 0) {\n      warn(\n        `watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.`\n      );\n    }\n    if (deep !== void 0) {\n      warn(\n        `watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.`\n      );\n    }\n  }\n  const warnInvalidSource = (s) => {\n    warn(\n      `Invalid watch source: `,\n      s,\n      `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n    );\n  };\n  const instance = getCurrentScope() === ((_a = currentInstance) == null ? void 0 : _a.scope) ? currentInstance : null;\n  let getter;\n  let forceTrigger = false;\n  let isMultiSource = false;\n  if (isRef(source)) {\n    getter = () => source.value;\n    forceTrigger = isShallow$1(source);\n  } else if (isReactive(source)) {\n    getter = () => source;\n    deep = true;\n  } else if (isArray(source)) {\n    isMultiSource = true;\n    forceTrigger = source.some((s) => isReactive(s) || isShallow$1(s));\n    getter = () => source.map((s) => {\n      if (isRef(s)) {\n        return s.value;\n      } else if (isReactive(s)) {\n        return traverse(s);\n      } else if (isFunction(s)) {\n        return callWithErrorHandling(s, instance, 2);\n      } else {\n        !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n      }\n    });\n  } else if (isFunction(source)) {\n    if (cb) {\n      getter = () => callWithErrorHandling(source, instance, 2);\n    } else {\n      getter = () => {\n        if (instance && instance.isUnmounted) {\n          return;\n        }\n        if (cleanup) {\n          cleanup();\n        }\n        return callWithAsyncErrorHandling(\n          source,\n          instance,\n          3,\n          [onCleanup]\n        );\n      };\n    }\n  } else {\n    getter = NOOP;\n    !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n  }\n  if (cb && deep) {\n    const baseGetter = getter;\n    getter = () => traverse(baseGetter());\n  }\n  let cleanup;\n  let onCleanup = (fn) => {\n    cleanup = effect.onStop = () => {\n      callWithErrorHandling(fn, instance, 4);\n    };\n  };\n  let ssrCleanup;\n  if (isInSSRComponentSetup) {\n    onCleanup = NOOP;\n    if (!cb) {\n      getter();\n    } else if (immediate) {\n      callWithAsyncErrorHandling(cb, instance, 3, [\n        getter(),\n        isMultiSource ? [] : void 0,\n        onCleanup\n      ]);\n    }\n    if (flush === \"sync\") {\n      const ctx = useSSRContext();\n      ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n    } else {\n      return NOOP;\n    }\n  }\n  let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n  const job = () => {\n    if (!effect.active) {\n      return;\n    }\n    if (cb) {\n      const newValue = effect.run();\n      if (deep || forceTrigger || (isMultiSource ? newValue.some(\n        (v, i) => hasChanged(v, oldValue[i])\n      ) : hasChanged(newValue, oldValue)) || false) {\n        if (cleanup) {\n          cleanup();\n        }\n        callWithAsyncErrorHandling(cb, instance, 3, [\n          newValue,\n          // pass undefined as the old value when it's changed for the first time\n          oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n          onCleanup\n        ]);\n        oldValue = newValue;\n      }\n    } else {\n      effect.run();\n    }\n  };\n  job.allowRecurse = !!cb;\n  let scheduler;\n  if (flush === \"sync\") {\n    scheduler = job;\n  } else if (flush === \"post\") {\n    scheduler = () => queuePostRenderEffect(job, instance && instance.suspense);\n  } else {\n    job.pre = true;\n    if (instance)\n      job.id = instance.uid;\n    scheduler = () => queueJob(job);\n  }\n  const effect = new ReactiveEffect(getter, scheduler);\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    effect.onTrack = onTrack;\n    effect.onTrigger = onTrigger;\n  }\n  if (cb) {\n    if (immediate) {\n      job();\n    } else {\n      oldValue = effect.run();\n    }\n  } else if (flush === \"post\") {\n    queuePostRenderEffect(\n      effect.run.bind(effect),\n      instance && instance.suspense\n    );\n  } else {\n    effect.run();\n  }\n  const unwatch = () => {\n    effect.stop();\n    if (instance && instance.scope) {\n      remove(instance.scope.effects, effect);\n    }\n  };\n  if (ssrCleanup)\n    ssrCleanup.push(unwatch);\n  return unwatch;\n}\nfunction instanceWatch(source, value, options) {\n  const publicThis = this.proxy;\n  const getter = isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n  let cb;\n  if (isFunction(value)) {\n    cb = value;\n  } else {\n    cb = value.handler;\n    options = value;\n  }\n  const cur = currentInstance;\n  setCurrentInstance(this);\n  const res = doWatch(getter, cb.bind(publicThis), options);\n  if (cur) {\n    setCurrentInstance(cur);\n  } else {\n    unsetCurrentInstance();\n  }\n  return res;\n}\nfunction createPathGetter(ctx, path) {\n  const segments = path.split(\".\");\n  return () => {\n    let cur = ctx;\n    for (let i = 0; i < segments.length && cur; i++) {\n      cur = cur[segments[i]];\n    }\n    return cur;\n  };\n}\nfunction traverse(value, seen) {\n  if (!isObject(value) || value[\"__v_skip\"]) {\n    return value;\n  }\n  seen = seen || /* @__PURE__ */ new Set();\n  if (seen.has(value)) {\n    return value;\n  }\n  seen.add(value);\n  if (isRef(value)) {\n    traverse(value.value, seen);\n  } else if (isArray(value)) {\n    for (let i = 0; i < value.length; i++) {\n      traverse(value[i], seen);\n    }\n  } else if (isSet(value) || isMap(value)) {\n    value.forEach((v) => {\n      traverse(v, seen);\n    });\n  } else if (isPlainObject(value)) {\n    for (const key in value) {\n      traverse(value[key], seen);\n    }\n  }\n  return value;\n}\n\nfunction validateDirectiveName(name) {\n  if (isBuiltInDirective(name)) {\n    warn(\"Do not use built-in directive ids as custom directive id: \" + name);\n  }\n}\nfunction withDirectives(vnode, directives) {\n  const internalInstance = currentRenderingInstance;\n  if (internalInstance === null) {\n    !!(process.env.NODE_ENV !== \"production\") && warn(`withDirectives can only be used inside render functions.`);\n    return vnode;\n  }\n  const instance = getExposeProxy(internalInstance) || internalInstance.proxy;\n  const bindings = vnode.dirs || (vnode.dirs = []);\n  for (let i = 0; i < directives.length; i++) {\n    let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n    if (dir) {\n      if (isFunction(dir)) {\n        dir = {\n          mounted: dir,\n          updated: dir\n        };\n      }\n      if (dir.deep) {\n        traverse(value);\n      }\n      bindings.push({\n        dir,\n        instance,\n        value,\n        oldValue: void 0,\n        arg,\n        modifiers\n      });\n    }\n  }\n  return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n  const bindings = vnode.dirs;\n  const oldBindings = prevVNode && prevVNode.dirs;\n  for (let i = 0; i < bindings.length; i++) {\n    const binding = bindings[i];\n    if (oldBindings) {\n      binding.oldValue = oldBindings[i].value;\n    }\n    let hook = binding.dir[name];\n    if (hook) {\n      pauseTracking();\n      callWithAsyncErrorHandling(hook, instance, 8, [\n        vnode.el,\n        binding,\n        vnode,\n        prevVNode\n      ]);\n      resetTracking();\n    }\n  }\n}\n\nfunction useTransitionState() {\n  const state = {\n    isMounted: false,\n    isLeaving: false,\n    isUnmounting: false,\n    leavingVNodes: /* @__PURE__ */ new Map()\n  };\n  onMounted(() => {\n    state.isMounted = true;\n  });\n  onBeforeUnmount(() => {\n    state.isUnmounting = true;\n  });\n  return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n  mode: String,\n  appear: Boolean,\n  persisted: Boolean,\n  // enter\n  onBeforeEnter: TransitionHookValidator,\n  onEnter: TransitionHookValidator,\n  onAfterEnter: TransitionHookValidator,\n  onEnterCancelled: TransitionHookValidator,\n  // leave\n  onBeforeLeave: TransitionHookValidator,\n  onLeave: TransitionHookValidator,\n  onAfterLeave: TransitionHookValidator,\n  onLeaveCancelled: TransitionHookValidator,\n  // appear\n  onBeforeAppear: TransitionHookValidator,\n  onAppear: TransitionHookValidator,\n  onAfterAppear: TransitionHookValidator,\n  onAppearCancelled: TransitionHookValidator\n};\nconst BaseTransitionImpl = {\n  name: `BaseTransition`,\n  props: BaseTransitionPropsValidators,\n  setup(props, { slots }) {\n    const instance = getCurrentInstance();\n    const state = useTransitionState();\n    let prevTransitionKey;\n    return () => {\n      const children = slots.default && getTransitionRawChildren(slots.default(), true);\n      if (!children || !children.length) {\n        return;\n      }\n      let child = children[0];\n      if (children.length > 1) {\n        let hasFound = false;\n        for (const c of children) {\n          if (c.type !== Comment) {\n            if (!!(process.env.NODE_ENV !== \"production\") && hasFound) {\n              warn(\n                \"<transition> can only be used on a single element or component. Use <transition-group> for lists.\"\n              );\n              break;\n            }\n            child = c;\n            hasFound = true;\n            if (!!!(process.env.NODE_ENV !== \"production\"))\n              break;\n          }\n        }\n      }\n      const rawProps = toRaw(props);\n      const { mode } = rawProps;\n      if (!!(process.env.NODE_ENV !== \"production\") && mode && mode !== \"in-out\" && mode !== \"out-in\" && mode !== \"default\") {\n        warn(`invalid <transition> mode: ${mode}`);\n      }\n      if (state.isLeaving) {\n        return emptyPlaceholder(child);\n      }\n      const innerChild = getKeepAliveChild(child);\n      if (!innerChild) {\n        return emptyPlaceholder(child);\n      }\n      const enterHooks = resolveTransitionHooks(\n        innerChild,\n        rawProps,\n        state,\n        instance\n      );\n      setTransitionHooks(innerChild, enterHooks);\n      const oldChild = instance.subTree;\n      const oldInnerChild = oldChild && getKeepAliveChild(oldChild);\n      let transitionKeyChanged = false;\n      const { getTransitionKey } = innerChild.type;\n      if (getTransitionKey) {\n        const key = getTransitionKey();\n        if (prevTransitionKey === void 0) {\n          prevTransitionKey = key;\n        } else if (key !== prevTransitionKey) {\n          prevTransitionKey = key;\n          transitionKeyChanged = true;\n        }\n      }\n      if (oldInnerChild && oldInnerChild.type !== Comment && (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged)) {\n        const leavingHooks = resolveTransitionHooks(\n          oldInnerChild,\n          rawProps,\n          state,\n          instance\n        );\n        setTransitionHooks(oldInnerChild, leavingHooks);\n        if (mode === \"out-in\") {\n          state.isLeaving = true;\n          leavingHooks.afterLeave = () => {\n            state.isLeaving = false;\n            if (instance.update.active !== false) {\n              instance.update();\n            }\n          };\n          return emptyPlaceholder(child);\n        } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n          leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n            const leavingVNodesCache = getLeavingNodesForType(\n              state,\n              oldInnerChild\n            );\n            leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n            el._leaveCb = () => {\n              earlyRemove();\n              el._leaveCb = void 0;\n              delete enterHooks.delayedLeave;\n            };\n            enterHooks.delayedLeave = delayedLeave;\n          };\n        }\n      }\n      return child;\n    };\n  }\n};\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n  const { leavingVNodes } = state;\n  let leavingVNodesCache = leavingVNodes.get(vnode.type);\n  if (!leavingVNodesCache) {\n    leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n    leavingVNodes.set(vnode.type, leavingVNodesCache);\n  }\n  return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance) {\n  const {\n    appear,\n    mode,\n    persisted = false,\n    onBeforeEnter,\n    onEnter,\n    onAfterEnter,\n    onEnterCancelled,\n    onBeforeLeave,\n    onLeave,\n    onAfterLeave,\n    onLeaveCancelled,\n    onBeforeAppear,\n    onAppear,\n    onAfterAppear,\n    onAppearCancelled\n  } = props;\n  const key = String(vnode.key);\n  const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n  const callHook = (hook, args) => {\n    hook && callWithAsyncErrorHandling(\n      hook,\n      instance,\n      9,\n      args\n    );\n  };\n  const callAsyncHook = (hook, args) => {\n    const done = args[1];\n    callHook(hook, args);\n    if (isArray(hook)) {\n      if (hook.every((hook2) => hook2.length <= 1))\n        done();\n    } else if (hook.length <= 1) {\n      done();\n    }\n  };\n  const hooks = {\n    mode,\n    persisted,\n    beforeEnter(el) {\n      let hook = onBeforeEnter;\n      if (!state.isMounted) {\n        if (appear) {\n          hook = onBeforeAppear || onBeforeEnter;\n        } else {\n          return;\n        }\n      }\n      if (el._leaveCb) {\n        el._leaveCb(\n          true\n          /* cancelled */\n        );\n      }\n      const leavingVNode = leavingVNodesCache[key];\n      if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el._leaveCb) {\n        leavingVNode.el._leaveCb();\n      }\n      callHook(hook, [el]);\n    },\n    enter(el) {\n      let hook = onEnter;\n      let afterHook = onAfterEnter;\n      let cancelHook = onEnterCancelled;\n      if (!state.isMounted) {\n        if (appear) {\n          hook = onAppear || onEnter;\n          afterHook = onAfterAppear || onAfterEnter;\n          cancelHook = onAppearCancelled || onEnterCancelled;\n        } else {\n          return;\n        }\n      }\n      let called = false;\n      const done = el._enterCb = (cancelled) => {\n        if (called)\n          return;\n        called = true;\n        if (cancelled) {\n          callHook(cancelHook, [el]);\n        } else {\n          callHook(afterHook, [el]);\n        }\n        if (hooks.delayedLeave) {\n          hooks.delayedLeave();\n        }\n        el._enterCb = void 0;\n      };\n      if (hook) {\n        callAsyncHook(hook, [el, done]);\n      } else {\n        done();\n      }\n    },\n    leave(el, remove) {\n      const key2 = String(vnode.key);\n      if (el._enterCb) {\n        el._enterCb(\n          true\n          /* cancelled */\n        );\n      }\n      if (state.isUnmounting) {\n        return remove();\n      }\n      callHook(onBeforeLeave, [el]);\n      let called = false;\n      const done = el._leaveCb = (cancelled) => {\n        if (called)\n          return;\n        called = true;\n        remove();\n        if (cancelled) {\n          callHook(onLeaveCancelled, [el]);\n        } else {\n          callHook(onAfterLeave, [el]);\n        }\n        el._leaveCb = void 0;\n        if (leavingVNodesCache[key2] === vnode) {\n          delete leavingVNodesCache[key2];\n        }\n      };\n      leavingVNodesCache[key2] = vnode;\n      if (onLeave) {\n        callAsyncHook(onLeave, [el, done]);\n      } else {\n        done();\n      }\n    },\n    clone(vnode2) {\n      return resolveTransitionHooks(vnode2, props, state, instance);\n    }\n  };\n  return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n  if (isKeepAlive(vnode)) {\n    vnode = cloneVNode(vnode);\n    vnode.children = null;\n    return vnode;\n  }\n}\nfunction getKeepAliveChild(vnode) {\n  return isKeepAlive(vnode) ? vnode.children ? vnode.children[0] : void 0 : vnode;\n}\nfunction setTransitionHooks(vnode, hooks) {\n  if (vnode.shapeFlag & 6 && vnode.component) {\n    setTransitionHooks(vnode.component.subTree, hooks);\n  } else if (vnode.shapeFlag & 128) {\n    vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n    vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n  } else {\n    vnode.transition = hooks;\n  }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n  let ret = [];\n  let keyedFragmentCount = 0;\n  for (let i = 0; i < children.length; i++) {\n    let child = children[i];\n    const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n    if (child.type === Fragment) {\n      if (child.patchFlag & 128)\n        keyedFragmentCount++;\n      ret = ret.concat(\n        getTransitionRawChildren(child.children, keepComment, key)\n      );\n    } else if (keepComment || child.type !== Comment) {\n      ret.push(key != null ? cloneVNode(child, { key }) : child);\n    }\n  }\n  if (keyedFragmentCount > 1) {\n    for (let i = 0; i < ret.length; i++) {\n      ret[i].patchFlag = -2;\n    }\n  }\n  return ret;\n}\n\nfunction defineComponent(options, extraOptions) {\n  return isFunction(options) ? (\n    // #8326: extend call and options.name access are considered side-effects\n    // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n    /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n  ) : options;\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\nfunction defineAsyncComponent(source) {\n  if (isFunction(source)) {\n    source = { loader: source };\n  }\n  const {\n    loader,\n    loadingComponent,\n    errorComponent,\n    delay = 200,\n    timeout,\n    // undefined = never times out\n    suspensible = true,\n    onError: userOnError\n  } = source;\n  let pendingRequest = null;\n  let resolvedComp;\n  let retries = 0;\n  const retry = () => {\n    retries++;\n    pendingRequest = null;\n    return load();\n  };\n  const load = () => {\n    let thisRequest;\n    return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n      err = err instanceof Error ? err : new Error(String(err));\n      if (userOnError) {\n        return new Promise((resolve, reject) => {\n          const userRetry = () => resolve(retry());\n          const userFail = () => reject(err);\n          userOnError(err, userRetry, userFail, retries + 1);\n        });\n      } else {\n        throw err;\n      }\n    }).then((comp) => {\n      if (thisRequest !== pendingRequest && pendingRequest) {\n        return pendingRequest;\n      }\n      if (!!(process.env.NODE_ENV !== \"production\") && !comp) {\n        warn(\n          `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`\n        );\n      }\n      if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n        comp = comp.default;\n      }\n      if (!!(process.env.NODE_ENV !== \"production\") && comp && !isObject(comp) && !isFunction(comp)) {\n        throw new Error(`Invalid async component load result: ${comp}`);\n      }\n      resolvedComp = comp;\n      return comp;\n    }));\n  };\n  return defineComponent({\n    name: \"AsyncComponentWrapper\",\n    __asyncLoader: load,\n    get __asyncResolved() {\n      return resolvedComp;\n    },\n    setup() {\n      const instance = currentInstance;\n      if (resolvedComp) {\n        return () => createInnerComp(resolvedComp, instance);\n      }\n      const onError = (err) => {\n        pendingRequest = null;\n        handleError(\n          err,\n          instance,\n          13,\n          !errorComponent\n          /* do not throw in dev if user provided error component */\n        );\n      };\n      if (suspensible && instance.suspense || isInSSRComponentSetup) {\n        return load().then((comp) => {\n          return () => createInnerComp(comp, instance);\n        }).catch((err) => {\n          onError(err);\n          return () => errorComponent ? createVNode(errorComponent, {\n            error: err\n          }) : null;\n        });\n      }\n      const loaded = ref(false);\n      const error = ref();\n      const delayed = ref(!!delay);\n      if (delay) {\n        setTimeout(() => {\n          delayed.value = false;\n        }, delay);\n      }\n      if (timeout != null) {\n        setTimeout(() => {\n          if (!loaded.value && !error.value) {\n            const err = new Error(\n              `Async component timed out after ${timeout}ms.`\n            );\n            onError(err);\n            error.value = err;\n          }\n        }, timeout);\n      }\n      load().then(() => {\n        loaded.value = true;\n        if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n          queueJob(instance.parent.update);\n        }\n      }).catch((err) => {\n        onError(err);\n        error.value = err;\n      });\n      return () => {\n        if (loaded.value && resolvedComp) {\n          return createInnerComp(resolvedComp, instance);\n        } else if (error.value && errorComponent) {\n          return createVNode(errorComponent, {\n            error: error.value\n          });\n        } else if (loadingComponent && !delayed.value) {\n          return createVNode(loadingComponent);\n        }\n      };\n    }\n  });\n}\nfunction createInnerComp(comp, parent) {\n  const { ref: ref2, props, children, ce } = parent.vnode;\n  const vnode = createVNode(comp, props, children);\n  vnode.ref = ref2;\n  vnode.ce = ce;\n  delete parent.vnode.ce;\n  return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n  name: `KeepAlive`,\n  // Marker for special handling inside the renderer. We are not using a ===\n  // check directly on KeepAlive in the renderer, because importing it directly\n  // would prevent it from being tree-shaken.\n  __isKeepAlive: true,\n  props: {\n    include: [String, RegExp, Array],\n    exclude: [String, RegExp, Array],\n    max: [String, Number]\n  },\n  setup(props, { slots }) {\n    const instance = getCurrentInstance();\n    const sharedContext = instance.ctx;\n    if (!sharedContext.renderer) {\n      return () => {\n        const children = slots.default && slots.default();\n        return children && children.length === 1 ? children[0] : children;\n      };\n    }\n    const cache = /* @__PURE__ */ new Map();\n    const keys = /* @__PURE__ */ new Set();\n    let current = null;\n    if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n      instance.__v_cache = cache;\n    }\n    const parentSuspense = instance.suspense;\n    const {\n      renderer: {\n        p: patch,\n        m: move,\n        um: _unmount,\n        o: { createElement }\n      }\n    } = sharedContext;\n    const storageContainer = createElement(\"div\");\n    sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => {\n      const instance2 = vnode.component;\n      move(vnode, container, anchor, 0, parentSuspense);\n      patch(\n        instance2.vnode,\n        vnode,\n        container,\n        anchor,\n        instance2,\n        parentSuspense,\n        isSVG,\n        vnode.slotScopeIds,\n        optimized\n      );\n      queuePostRenderEffect(() => {\n        instance2.isDeactivated = false;\n        if (instance2.a) {\n          invokeArrayFns(instance2.a);\n        }\n        const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n        if (vnodeHook) {\n          invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n        }\n      }, parentSuspense);\n      if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n        devtoolsComponentAdded(instance2);\n      }\n    };\n    sharedContext.deactivate = (vnode) => {\n      const instance2 = vnode.component;\n      move(vnode, storageContainer, null, 1, parentSuspense);\n      queuePostRenderEffect(() => {\n        if (instance2.da) {\n          invokeArrayFns(instance2.da);\n        }\n        const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n        if (vnodeHook) {\n          invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n        }\n        instance2.isDeactivated = true;\n      }, parentSuspense);\n      if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n        devtoolsComponentAdded(instance2);\n      }\n    };\n    function unmount(vnode) {\n      resetShapeFlag(vnode);\n      _unmount(vnode, instance, parentSuspense, true);\n    }\n    function pruneCache(filter) {\n      cache.forEach((vnode, key) => {\n        const name = getComponentName(vnode.type);\n        if (name && (!filter || !filter(name))) {\n          pruneCacheEntry(key);\n        }\n      });\n    }\n    function pruneCacheEntry(key) {\n      const cached = cache.get(key);\n      if (!current || !isSameVNodeType(cached, current)) {\n        unmount(cached);\n      } else if (current) {\n        resetShapeFlag(current);\n      }\n      cache.delete(key);\n      keys.delete(key);\n    }\n    watch(\n      () => [props.include, props.exclude],\n      ([include, exclude]) => {\n        include && pruneCache((name) => matches(include, name));\n        exclude && pruneCache((name) => !matches(exclude, name));\n      },\n      // prune post-render after `current` has been updated\n      { flush: \"post\", deep: true }\n    );\n    let pendingCacheKey = null;\n    const cacheSubtree = () => {\n      if (pendingCacheKey != null) {\n        cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n      }\n    };\n    onMounted(cacheSubtree);\n    onUpdated(cacheSubtree);\n    onBeforeUnmount(() => {\n      cache.forEach((cached) => {\n        const { subTree, suspense } = instance;\n        const vnode = getInnerChild(subTree);\n        if (cached.type === vnode.type && cached.key === vnode.key) {\n          resetShapeFlag(vnode);\n          const da = vnode.component.da;\n          da && queuePostRenderEffect(da, suspense);\n          return;\n        }\n        unmount(cached);\n      });\n    });\n    return () => {\n      pendingCacheKey = null;\n      if (!slots.default) {\n        return null;\n      }\n      const children = slots.default();\n      const rawVNode = children[0];\n      if (children.length > 1) {\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn(`KeepAlive should contain exactly one component child.`);\n        }\n        current = null;\n        return children;\n      } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n        current = null;\n        return rawVNode;\n      }\n      let vnode = getInnerChild(rawVNode);\n      const comp = vnode.type;\n      const name = getComponentName(\n        isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n      );\n      const { include, exclude, max } = props;\n      if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n        current = vnode;\n        return rawVNode;\n      }\n      const key = vnode.key == null ? comp : vnode.key;\n      const cachedVNode = cache.get(key);\n      if (vnode.el) {\n        vnode = cloneVNode(vnode);\n        if (rawVNode.shapeFlag & 128) {\n          rawVNode.ssContent = vnode;\n        }\n      }\n      pendingCacheKey = key;\n      if (cachedVNode) {\n        vnode.el = cachedVNode.el;\n        vnode.component = cachedVNode.component;\n        if (vnode.transition) {\n          setTransitionHooks(vnode, vnode.transition);\n        }\n        vnode.shapeFlag |= 512;\n        keys.delete(key);\n        keys.add(key);\n      } else {\n        keys.add(key);\n        if (max && keys.size > parseInt(max, 10)) {\n          pruneCacheEntry(keys.values().next().value);\n        }\n      }\n      vnode.shapeFlag |= 256;\n      current = vnode;\n      return isSuspense(rawVNode.type) ? rawVNode : vnode;\n    };\n  }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n  if (isArray(pattern)) {\n    return pattern.some((p) => matches(p, name));\n  } else if (isString(pattern)) {\n    return pattern.split(\",\").includes(name);\n  } else if (isRegExp(pattern)) {\n    return pattern.test(name);\n  }\n  return false;\n}\nfunction onActivated(hook, target) {\n  registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n  registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n  const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n    let current = target;\n    while (current) {\n      if (current.isDeactivated) {\n        return;\n      }\n      current = current.parent;\n    }\n    return hook();\n  });\n  injectHook(type, wrappedHook, target);\n  if (target) {\n    let current = target.parent;\n    while (current && current.parent) {\n      if (isKeepAlive(current.parent.vnode)) {\n        injectToKeepAliveRoot(wrappedHook, type, target, current);\n      }\n      current = current.parent;\n    }\n  }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n  const injected = injectHook(\n    type,\n    hook,\n    keepAliveRoot,\n    true\n    /* prepend */\n  );\n  onUnmounted(() => {\n    remove(keepAliveRoot[type], injected);\n  }, target);\n}\nfunction resetShapeFlag(vnode) {\n  vnode.shapeFlag &= ~256;\n  vnode.shapeFlag &= ~512;\n}\nfunction getInnerChild(vnode) {\n  return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n  if (target) {\n    const hooks = target[type] || (target[type] = []);\n    const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n      if (target.isUnmounted) {\n        return;\n      }\n      pauseTracking();\n      setCurrentInstance(target);\n      const res = callWithAsyncErrorHandling(hook, target, type, args);\n      unsetCurrentInstance();\n      resetTracking();\n      return res;\n    });\n    if (prepend) {\n      hooks.unshift(wrappedHook);\n    } else {\n      hooks.push(wrappedHook);\n    }\n    return wrappedHook;\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    const apiName = toHandlerKey(ErrorTypeStrings[type].replace(/ hook$/, \"\"));\n    warn(\n      `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )\n    );\n  }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => (\n  // post-create lifecycle registrations are noops during SSR (except for serverPrefetch)\n  (!isInSSRComponentSetup || lifecycle === \"sp\") && injectHook(lifecycle, (...args) => hook(...args), target)\n);\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\"bu\");\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\"bum\");\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\"sp\");\nconst onRenderTriggered = createHook(\n  \"rtg\"\n);\nconst onRenderTracked = createHook(\n  \"rtc\"\n);\nfunction onErrorCaptured(hook, target = currentInstance) {\n  injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n  return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n  if (isString(component)) {\n    return resolveAsset(COMPONENTS, component, false) || component;\n  } else {\n    return component || NULL_DYNAMIC_COMPONENT;\n  }\n}\nfunction resolveDirective(name) {\n  return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n  const instance = currentRenderingInstance || currentInstance;\n  if (instance) {\n    const Component = instance.type;\n    if (type === COMPONENTS) {\n      const selfName = getComponentName(\n        Component,\n        false\n        /* do not include inferred name to avoid breaking existing code */\n      );\n      if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n        return Component;\n      }\n    }\n    const res = (\n      // local registration\n      // check instance[type] first which is resolved for options API\n      resolve(instance[type] || Component[type], name) || // global registration\n      resolve(instance.appContext[type], name)\n    );\n    if (!res && maybeSelfReference) {\n      return Component;\n    }\n    if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n      const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n      warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n    }\n    return res;\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    warn(\n      `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n    );\n  }\n}\nfunction resolve(registry, name) {\n  return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n  let ret;\n  const cached = cache && cache[index];\n  if (isArray(source) || isString(source)) {\n    ret = new Array(source.length);\n    for (let i = 0, l = source.length; i < l; i++) {\n      ret[i] = renderItem(source[i], i, void 0, cached && cached[i]);\n    }\n  } else if (typeof source === \"number\") {\n    if (!!(process.env.NODE_ENV !== \"production\") && !Number.isInteger(source)) {\n      warn(`The v-for range expect an integer value but got ${source}.`);\n    }\n    ret = new Array(source);\n    for (let i = 0; i < source; i++) {\n      ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n    }\n  } else if (isObject(source)) {\n    if (source[Symbol.iterator]) {\n      ret = Array.from(\n        source,\n        (item, i) => renderItem(item, i, void 0, cached && cached[i])\n      );\n    } else {\n      const keys = Object.keys(source);\n      ret = new Array(keys.length);\n      for (let i = 0, l = keys.length; i < l; i++) {\n        const key = keys[i];\n        ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n      }\n    }\n  } else {\n    ret = [];\n  }\n  if (cache) {\n    cache[index] = ret;\n  }\n  return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n  for (let i = 0; i < dynamicSlots.length; i++) {\n    const slot = dynamicSlots[i];\n    if (isArray(slot)) {\n      for (let j = 0; j < slot.length; j++) {\n        slots[slot[j].name] = slot[j].fn;\n      }\n    } else if (slot) {\n      slots[slot.name] = slot.key ? (...args) => {\n        const res = slot.fn(...args);\n        if (res)\n          res.key = slot.key;\n        return res;\n      } : slot.fn;\n    }\n  }\n  return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted) {\n  if (currentRenderingInstance.isCE || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.isCE) {\n    if (name !== \"default\")\n      props.name = name;\n    return createVNode(\"slot\", props, fallback && fallback());\n  }\n  let slot = slots[name];\n  if (!!(process.env.NODE_ENV !== \"production\") && slot && slot.length > 1) {\n    warn(\n      `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`\n    );\n    slot = () => [];\n  }\n  if (slot && slot._c) {\n    slot._d = false;\n  }\n  openBlock();\n  const validSlotContent = slot && ensureValidVNode(slot(props));\n  const rendered = createBlock(\n    Fragment,\n    {\n      key: props.key || // slot content array of a dynamic conditional slot may have a branch\n      // key attached in the `createSlots` helper, respect that\n      validSlotContent && validSlotContent.key || `_${name}`\n    },\n    validSlotContent || (fallback ? fallback() : []),\n    validSlotContent && slots._ === 1 ? 64 : -2\n  );\n  if (!noSlotted && rendered.scopeId) {\n    rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n  }\n  if (slot && slot._c) {\n    slot._d = true;\n  }\n  return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n  return vnodes.some((child) => {\n    if (!isVNode(child))\n      return true;\n    if (child.type === Comment)\n      return false;\n    if (child.type === Fragment && !ensureValidVNode(child.children))\n      return false;\n    return true;\n  }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n  const ret = {};\n  if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n    warn(`v-on with no argument expects an object value.`);\n    return ret;\n  }\n  for (const key in obj) {\n    ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n  }\n  return ret;\n}\n\nconst getPublicInstance = (i) => {\n  if (!i)\n    return null;\n  if (isStatefulComponent(i))\n    return getExposeProxy(i) || i.proxy;\n  return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n  // Move PURE marker to new line to workaround compiler discarding it\n  // due to type annotation\n  /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n    $: (i) => i,\n    $el: (i) => i.vnode.el,\n    $data: (i) => i.data,\n    $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n    $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n    $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n    $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n    $parent: (i) => getPublicInstance(i.parent),\n    $root: (i) => getPublicInstance(i.root),\n    $emit: (i) => i.emit,\n    $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n    $forceUpdate: (i) => i.f || (i.f = () => queueJob(i.update)),\n    $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n    $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n  })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n  get({ _: instance }, key) {\n    const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n    if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n      return true;\n    }\n    let normalizedProps;\n    if (key[0] !== \"$\") {\n      const n = accessCache[key];\n      if (n !== void 0) {\n        switch (n) {\n          case 1 /* SETUP */:\n            return setupState[key];\n          case 2 /* DATA */:\n            return data[key];\n          case 4 /* CONTEXT */:\n            return ctx[key];\n          case 3 /* PROPS */:\n            return props[key];\n        }\n      } else if (hasSetupBinding(setupState, key)) {\n        accessCache[key] = 1 /* SETUP */;\n        return setupState[key];\n      } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n        accessCache[key] = 2 /* DATA */;\n        return data[key];\n      } else if (\n        // only cache other properties when instance has declared (thus stable)\n        // props\n        (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)\n      ) {\n        accessCache[key] = 3 /* PROPS */;\n        return props[key];\n      } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n        accessCache[key] = 4 /* CONTEXT */;\n        return ctx[key];\n      } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n        accessCache[key] = 0 /* OTHER */;\n      }\n    }\n    const publicGetter = publicPropertiesMap[key];\n    let cssModule, globalProperties;\n    if (publicGetter) {\n      if (key === \"$attrs\") {\n        track(instance, \"get\", key);\n        !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n      } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n        track(instance, \"get\", key);\n      }\n      return publicGetter(instance);\n    } else if (\n      // css module (injected by vue-loader)\n      (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n    ) {\n      return cssModule;\n    } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n      accessCache[key] = 4 /* CONTEXT */;\n      return ctx[key];\n    } else if (\n      // global properties\n      globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n    ) {\n      {\n        return globalProperties[key];\n      }\n    } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n    // to infinite warning loop\n    key.indexOf(\"__v\") !== 0)) {\n      if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n        warn(\n          `Property ${JSON.stringify(\n            key\n          )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n        );\n      } else if (instance === currentRenderingInstance) {\n        warn(\n          `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n        );\n      }\n    }\n  },\n  set({ _: instance }, key, value) {\n    const { data, setupState, ctx } = instance;\n    if (hasSetupBinding(setupState, key)) {\n      setupState[key] = value;\n      return true;\n    } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n      warn(`Cannot mutate <script setup> binding \"${key}\" from Options API.`);\n      return false;\n    } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n      data[key] = value;\n      return true;\n    } else if (hasOwn(instance.props, key)) {\n      !!(process.env.NODE_ENV !== \"production\") && warn(`Attempting to mutate prop \"${key}\". Props are readonly.`);\n      return false;\n    }\n    if (key[0] === \"$\" && key.slice(1) in instance) {\n      !!(process.env.NODE_ENV !== \"production\") && warn(\n        `Attempting to mutate public property \"${key}\". Properties starting with $ are reserved and readonly.`\n      );\n      return false;\n    } else {\n      if (!!(process.env.NODE_ENV !== \"production\") && key in instance.appContext.config.globalProperties) {\n        Object.defineProperty(ctx, key, {\n          enumerable: true,\n          configurable: true,\n          value\n        });\n      } else {\n        ctx[key] = value;\n      }\n    }\n    return true;\n  },\n  has({\n    _: { data, setupState, accessCache, ctx, appContext, propsOptions }\n  }, key) {\n    let normalizedProps;\n    return !!accessCache[key] || data !== EMPTY_OBJ && hasOwn(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key);\n  },\n  defineProperty(target, key, descriptor) {\n    if (descriptor.get != null) {\n      target._.accessCache[key] = 0;\n    } else if (hasOwn(descriptor, \"value\")) {\n      this.set(target, key, descriptor.value, null);\n    }\n    return Reflect.defineProperty(target, key, descriptor);\n  }\n};\nif (!!(process.env.NODE_ENV !== \"production\") && true) {\n  PublicInstanceProxyHandlers.ownKeys = (target) => {\n    warn(\n      `Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.`\n    );\n    return Reflect.ownKeys(target);\n  };\n}\nconst RuntimeCompiledPublicInstanceProxyHandlers = /* @__PURE__ */ extend(\n  {},\n  PublicInstanceProxyHandlers,\n  {\n    get(target, key) {\n      if (key === Symbol.unscopables) {\n        return;\n      }\n      return PublicInstanceProxyHandlers.get(target, key, target);\n    },\n    has(_, key) {\n      const has = key[0] !== \"_\" && !isGloballyWhitelisted(key);\n      if (!!(process.env.NODE_ENV !== \"production\") && !has && PublicInstanceProxyHandlers.has(_, key)) {\n        warn(\n          `Property ${JSON.stringify(\n            key\n          )} should not start with _ which is a reserved prefix for Vue internals.`\n        );\n      }\n      return has;\n    }\n  }\n);\nfunction createDevRenderContext(instance) {\n  const target = {};\n  Object.defineProperty(target, `_`, {\n    configurable: true,\n    enumerable: false,\n    get: () => instance\n  });\n  Object.keys(publicPropertiesMap).forEach((key) => {\n    Object.defineProperty(target, key, {\n      configurable: true,\n      enumerable: false,\n      get: () => publicPropertiesMap[key](instance),\n      // intercepted by the proxy so no need for implementation,\n      // but needed to prevent set errors\n      set: NOOP\n    });\n  });\n  return target;\n}\nfunction exposePropsOnRenderContext(instance) {\n  const {\n    ctx,\n    propsOptions: [propsOptions]\n  } = instance;\n  if (propsOptions) {\n    Object.keys(propsOptions).forEach((key) => {\n      Object.defineProperty(ctx, key, {\n        enumerable: true,\n        configurable: true,\n        get: () => instance.props[key],\n        set: NOOP\n      });\n    });\n  }\n}\nfunction exposeSetupStateOnRenderContext(instance) {\n  const { ctx, setupState } = instance;\n  Object.keys(toRaw(setupState)).forEach((key) => {\n    if (!setupState.__isScriptSetup) {\n      if (isReservedPrefix(key[0])) {\n        warn(\n          `setup() return property ${JSON.stringify(\n            key\n          )} should not start with \"$\" or \"_\" which are reserved prefixes for Vue internals.`\n        );\n        return;\n      }\n      Object.defineProperty(ctx, key, {\n        enumerable: true,\n        configurable: true,\n        get: () => setupState[key],\n        set: NOOP\n      });\n    }\n  });\n}\n\nconst warnRuntimeUsage = (method) => warn(\n  `${method}() is a compiler-hint helper that is only usable inside <script setup> of a single file component. Its arguments should be compiled away and passing it at runtime has no effect.`\n);\nfunction defineProps() {\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    warnRuntimeUsage(`defineProps`);\n  }\n  return null;\n}\nfunction defineEmits() {\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    warnRuntimeUsage(`defineEmits`);\n  }\n  return null;\n}\nfunction defineExpose(exposed) {\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    warnRuntimeUsage(`defineExpose`);\n  }\n}\nfunction defineOptions(options) {\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    warnRuntimeUsage(`defineOptions`);\n  }\n}\nfunction defineSlots() {\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    warnRuntimeUsage(`defineSlots`);\n  }\n  return null;\n}\nfunction defineModel() {\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    warnRuntimeUsage(\"defineModel\");\n  }\n}\nfunction withDefaults(props, defaults) {\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    warnRuntimeUsage(`withDefaults`);\n  }\n  return null;\n}\nfunction useSlots() {\n  return getContext().slots;\n}\nfunction useAttrs() {\n  return getContext().attrs;\n}\nfunction useModel(props, name, options) {\n  const i = getCurrentInstance();\n  if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n    warn(`useModel() called without active instance.`);\n    return ref();\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") && !i.propsOptions[0][name]) {\n    warn(`useModel() called with prop \"${name}\" which is not declared.`);\n    return ref();\n  }\n  if (options && options.local) {\n    const proxy = ref(props[name]);\n    watch(\n      () => props[name],\n      (v) => proxy.value = v\n    );\n    watch(proxy, (value) => {\n      if (value !== props[name]) {\n        i.emit(`update:${name}`, value);\n      }\n    });\n    return proxy;\n  } else {\n    return {\n      __v_isRef: true,\n      get value() {\n        return props[name];\n      },\n      set value(value) {\n        i.emit(`update:${name}`, value);\n      }\n    };\n  }\n}\nfunction getContext() {\n  const i = getCurrentInstance();\n  if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n    warn(`useContext() called without active instance.`);\n  }\n  return i.setupContext || (i.setupContext = createSetupContext(i));\n}\nfunction normalizePropsOrEmits(props) {\n  return isArray(props) ? props.reduce(\n    (normalized, p) => (normalized[p] = null, normalized),\n    {}\n  ) : props;\n}\nfunction mergeDefaults(raw, defaults) {\n  const props = normalizePropsOrEmits(raw);\n  for (const key in defaults) {\n    if (key.startsWith(\"__skip\"))\n      continue;\n    let opt = props[key];\n    if (opt) {\n      if (isArray(opt) || isFunction(opt)) {\n        opt = props[key] = { type: opt, default: defaults[key] };\n      } else {\n        opt.default = defaults[key];\n      }\n    } else if (opt === null) {\n      opt = props[key] = { default: defaults[key] };\n    } else if (!!(process.env.NODE_ENV !== \"production\")) {\n      warn(`props default key \"${key}\" has no corresponding declaration.`);\n    }\n    if (opt && defaults[`__skip_${key}`]) {\n      opt.skipFactory = true;\n    }\n  }\n  return props;\n}\nfunction mergeModels(a, b) {\n  if (!a || !b)\n    return a || b;\n  if (isArray(a) && isArray(b))\n    return a.concat(b);\n  return extend({}, normalizePropsOrEmits(a), normalizePropsOrEmits(b));\n}\nfunction createPropsRestProxy(props, excludedKeys) {\n  const ret = {};\n  for (const key in props) {\n    if (!excludedKeys.includes(key)) {\n      Object.defineProperty(ret, key, {\n        enumerable: true,\n        get: () => props[key]\n      });\n    }\n  }\n  return ret;\n}\nfunction withAsyncContext(getAwaitable) {\n  const ctx = getCurrentInstance();\n  if (!!(process.env.NODE_ENV !== \"production\") && !ctx) {\n    warn(\n      `withAsyncContext called without active current instance. This is likely a bug.`\n    );\n  }\n  let awaitable = getAwaitable();\n  unsetCurrentInstance();\n  if (isPromise(awaitable)) {\n    awaitable = awaitable.catch((e) => {\n      setCurrentInstance(ctx);\n      throw e;\n    });\n  }\n  return [awaitable, () => setCurrentInstance(ctx)];\n}\n\nfunction createDuplicateChecker() {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (type, key) => {\n    if (cache[key]) {\n      warn(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\n    } else {\n      cache[key] = type;\n    }\n  };\n}\nlet shouldCacheAccess = true;\nfunction applyOptions(instance) {\n  const options = resolveMergedOptions(instance);\n  const publicThis = instance.proxy;\n  const ctx = instance.ctx;\n  shouldCacheAccess = false;\n  if (options.beforeCreate) {\n    callHook(options.beforeCreate, instance, \"bc\");\n  }\n  const {\n    // state\n    data: dataOptions,\n    computed: computedOptions,\n    methods,\n    watch: watchOptions,\n    provide: provideOptions,\n    inject: injectOptions,\n    // lifecycle\n    created,\n    beforeMount,\n    mounted,\n    beforeUpdate,\n    updated,\n    activated,\n    deactivated,\n    beforeDestroy,\n    beforeUnmount,\n    destroyed,\n    unmounted,\n    render,\n    renderTracked,\n    renderTriggered,\n    errorCaptured,\n    serverPrefetch,\n    // public API\n    expose,\n    inheritAttrs,\n    // assets\n    components,\n    directives,\n    filters\n  } = options;\n  const checkDuplicateProperties = !!(process.env.NODE_ENV !== \"production\") ? createDuplicateChecker() : null;\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    const [propsOptions] = instance.propsOptions;\n    if (propsOptions) {\n      for (const key in propsOptions) {\n        checkDuplicateProperties(\"Props\" /* PROPS */, key);\n      }\n    }\n  }\n  if (injectOptions) {\n    resolveInjections(injectOptions, ctx, checkDuplicateProperties);\n  }\n  if (methods) {\n    for (const key in methods) {\n      const methodHandler = methods[key];\n      if (isFunction(methodHandler)) {\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          Object.defineProperty(ctx, key, {\n            value: methodHandler.bind(publicThis),\n            configurable: true,\n            enumerable: true,\n            writable: true\n          });\n        } else {\n          ctx[key] = methodHandler.bind(publicThis);\n        }\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          checkDuplicateProperties(\"Methods\" /* METHODS */, key);\n        }\n      } else if (!!(process.env.NODE_ENV !== \"production\")) {\n        warn(\n          `Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. Did you reference the function correctly?`\n        );\n      }\n    }\n  }\n  if (dataOptions) {\n    if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(dataOptions)) {\n      warn(\n        `The data option must be a function. Plain object usage is no longer supported.`\n      );\n    }\n    const data = dataOptions.call(publicThis, publicThis);\n    if (!!(process.env.NODE_ENV !== \"production\") && isPromise(data)) {\n      warn(\n        `data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.`\n      );\n    }\n    if (!isObject(data)) {\n      !!(process.env.NODE_ENV !== \"production\") && warn(`data() should return an object.`);\n    } else {\n      instance.data = reactive(data);\n      if (!!(process.env.NODE_ENV !== \"production\")) {\n        for (const key in data) {\n          checkDuplicateProperties(\"Data\" /* DATA */, key);\n          if (!isReservedPrefix(key[0])) {\n            Object.defineProperty(ctx, key, {\n              configurable: true,\n              enumerable: true,\n              get: () => data[key],\n              set: NOOP\n            });\n          }\n        }\n      }\n    }\n  }\n  shouldCacheAccess = true;\n  if (computedOptions) {\n    for (const key in computedOptions) {\n      const opt = computedOptions[key];\n      const get = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP;\n      if (!!(process.env.NODE_ENV !== \"production\") && get === NOOP) {\n        warn(`Computed property \"${key}\" has no getter.`);\n      }\n      const set = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : !!(process.env.NODE_ENV !== \"production\") ? () => {\n        warn(\n          `Write operation failed: computed property \"${key}\" is readonly.`\n        );\n      } : NOOP;\n      const c = computed({\n        get,\n        set\n      });\n      Object.defineProperty(ctx, key, {\n        enumerable: true,\n        configurable: true,\n        get: () => c.value,\n        set: (v) => c.value = v\n      });\n      if (!!(process.env.NODE_ENV !== \"production\")) {\n        checkDuplicateProperties(\"Computed\" /* COMPUTED */, key);\n      }\n    }\n  }\n  if (watchOptions) {\n    for (const key in watchOptions) {\n      createWatcher(watchOptions[key], ctx, publicThis, key);\n    }\n  }\n  if (provideOptions) {\n    const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions;\n    Reflect.ownKeys(provides).forEach((key) => {\n      provide(key, provides[key]);\n    });\n  }\n  if (created) {\n    callHook(created, instance, \"c\");\n  }\n  function registerLifecycleHook(register, hook) {\n    if (isArray(hook)) {\n      hook.forEach((_hook) => register(_hook.bind(publicThis)));\n    } else if (hook) {\n      register(hook.bind(publicThis));\n    }\n  }\n  registerLifecycleHook(onBeforeMount, beforeMount);\n  registerLifecycleHook(onMounted, mounted);\n  registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n  registerLifecycleHook(onUpdated, updated);\n  registerLifecycleHook(onActivated, activated);\n  registerLifecycleHook(onDeactivated, deactivated);\n  registerLifecycleHook(onErrorCaptured, errorCaptured);\n  registerLifecycleHook(onRenderTracked, renderTracked);\n  registerLifecycleHook(onRenderTriggered, renderTriggered);\n  registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n  registerLifecycleHook(onUnmounted, unmounted);\n  registerLifecycleHook(onServerPrefetch, serverPrefetch);\n  if (isArray(expose)) {\n    if (expose.length) {\n      const exposed = instance.exposed || (instance.exposed = {});\n      expose.forEach((key) => {\n        Object.defineProperty(exposed, key, {\n          get: () => publicThis[key],\n          set: (val) => publicThis[key] = val\n        });\n      });\n    } else if (!instance.exposed) {\n      instance.exposed = {};\n    }\n  }\n  if (render && instance.render === NOOP) {\n    instance.render = render;\n  }\n  if (inheritAttrs != null) {\n    instance.inheritAttrs = inheritAttrs;\n  }\n  if (components)\n    instance.components = components;\n  if (directives)\n    instance.directives = directives;\n}\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) {\n  if (isArray(injectOptions)) {\n    injectOptions = normalizeInject(injectOptions);\n  }\n  for (const key in injectOptions) {\n    const opt = injectOptions[key];\n    let injected;\n    if (isObject(opt)) {\n      if (\"default\" in opt) {\n        injected = inject(\n          opt.from || key,\n          opt.default,\n          true\n          /* treat default function as factory */\n        );\n      } else {\n        injected = inject(opt.from || key);\n      }\n    } else {\n      injected = inject(opt);\n    }\n    if (isRef(injected)) {\n      Object.defineProperty(ctx, key, {\n        enumerable: true,\n        configurable: true,\n        get: () => injected.value,\n        set: (v) => injected.value = v\n      });\n    } else {\n      ctx[key] = injected;\n    }\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      checkDuplicateProperties(\"Inject\" /* INJECT */, key);\n    }\n  }\n}\nfunction callHook(hook, instance, type) {\n  callWithAsyncErrorHandling(\n    isArray(hook) ? hook.map((h) => h.bind(instance.proxy)) : hook.bind(instance.proxy),\n    instance,\n    type\n  );\n}\nfunction createWatcher(raw, ctx, publicThis, key) {\n  const getter = key.includes(\".\") ? createPathGetter(publicThis, key) : () => publicThis[key];\n  if (isString(raw)) {\n    const handler = ctx[raw];\n    if (isFunction(handler)) {\n      watch(getter, handler);\n    } else if (!!(process.env.NODE_ENV !== \"production\")) {\n      warn(`Invalid watch handler specified by key \"${raw}\"`, handler);\n    }\n  } else if (isFunction(raw)) {\n    watch(getter, raw.bind(publicThis));\n  } else if (isObject(raw)) {\n    if (isArray(raw)) {\n      raw.forEach((r) => createWatcher(r, ctx, publicThis, key));\n    } else {\n      const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];\n      if (isFunction(handler)) {\n        watch(getter, handler, raw);\n      } else if (!!(process.env.NODE_ENV !== \"production\")) {\n        warn(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\n      }\n    }\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    warn(`Invalid watch option: \"${key}\"`, raw);\n  }\n}\nfunction resolveMergedOptions(instance) {\n  const base = instance.type;\n  const { mixins, extends: extendsOptions } = base;\n  const {\n    mixins: globalMixins,\n    optionsCache: cache,\n    config: { optionMergeStrategies }\n  } = instance.appContext;\n  const cached = cache.get(base);\n  let resolved;\n  if (cached) {\n    resolved = cached;\n  } else if (!globalMixins.length && !mixins && !extendsOptions) {\n    {\n      resolved = base;\n    }\n  } else {\n    resolved = {};\n    if (globalMixins.length) {\n      globalMixins.forEach(\n        (m) => mergeOptions(resolved, m, optionMergeStrategies, true)\n      );\n    }\n    mergeOptions(resolved, base, optionMergeStrategies);\n  }\n  if (isObject(base)) {\n    cache.set(base, resolved);\n  }\n  return resolved;\n}\nfunction mergeOptions(to, from, strats, asMixin = false) {\n  const { mixins, extends: extendsOptions } = from;\n  if (extendsOptions) {\n    mergeOptions(to, extendsOptions, strats, true);\n  }\n  if (mixins) {\n    mixins.forEach(\n      (m) => mergeOptions(to, m, strats, true)\n    );\n  }\n  for (const key in from) {\n    if (asMixin && key === \"expose\") {\n      !!(process.env.NODE_ENV !== \"production\") && warn(\n        `\"expose\" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.`\n      );\n    } else {\n      const strat = internalOptionMergeStrats[key] || strats && strats[key];\n      to[key] = strat ? strat(to[key], from[key]) : from[key];\n    }\n  }\n  return to;\n}\nconst internalOptionMergeStrats = {\n  data: mergeDataFn,\n  props: mergeEmitsOrPropsOptions,\n  emits: mergeEmitsOrPropsOptions,\n  // objects\n  methods: mergeObjectOptions,\n  computed: mergeObjectOptions,\n  // lifecycle\n  beforeCreate: mergeAsArray,\n  created: mergeAsArray,\n  beforeMount: mergeAsArray,\n  mounted: mergeAsArray,\n  beforeUpdate: mergeAsArray,\n  updated: mergeAsArray,\n  beforeDestroy: mergeAsArray,\n  beforeUnmount: mergeAsArray,\n  destroyed: mergeAsArray,\n  unmounted: mergeAsArray,\n  activated: mergeAsArray,\n  deactivated: mergeAsArray,\n  errorCaptured: mergeAsArray,\n  serverPrefetch: mergeAsArray,\n  // assets\n  components: mergeObjectOptions,\n  directives: mergeObjectOptions,\n  // watch\n  watch: mergeWatchOptions,\n  // provide / inject\n  provide: mergeDataFn,\n  inject: mergeInject\n};\nfunction mergeDataFn(to, from) {\n  if (!from) {\n    return to;\n  }\n  if (!to) {\n    return from;\n  }\n  return function mergedDataFn() {\n    return (extend)(\n      isFunction(to) ? to.call(this, this) : to,\n      isFunction(from) ? from.call(this, this) : from\n    );\n  };\n}\nfunction mergeInject(to, from) {\n  return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n}\nfunction normalizeInject(raw) {\n  if (isArray(raw)) {\n    const res = {};\n    for (let i = 0; i < raw.length; i++) {\n      res[raw[i]] = raw[i];\n    }\n    return res;\n  }\n  return raw;\n}\nfunction mergeAsArray(to, from) {\n  return to ? [...new Set([].concat(to, from))] : from;\n}\nfunction mergeObjectOptions(to, from) {\n  return to ? extend(/* @__PURE__ */ Object.create(null), to, from) : from;\n}\nfunction mergeEmitsOrPropsOptions(to, from) {\n  if (to) {\n    if (isArray(to) && isArray(from)) {\n      return [.../* @__PURE__ */ new Set([...to, ...from])];\n    }\n    return extend(\n      /* @__PURE__ */ Object.create(null),\n      normalizePropsOrEmits(to),\n      normalizePropsOrEmits(from != null ? from : {})\n    );\n  } else {\n    return from;\n  }\n}\nfunction mergeWatchOptions(to, from) {\n  if (!to)\n    return from;\n  if (!from)\n    return to;\n  const merged = extend(/* @__PURE__ */ Object.create(null), to);\n  for (const key in from) {\n    merged[key] = mergeAsArray(to[key], from[key]);\n  }\n  return merged;\n}\n\nfunction createAppContext() {\n  return {\n    app: null,\n    config: {\n      isNativeTag: NO,\n      performance: false,\n      globalProperties: {},\n      optionMergeStrategies: {},\n      errorHandler: void 0,\n      warnHandler: void 0,\n      compilerOptions: {}\n    },\n    mixins: [],\n    components: {},\n    directives: {},\n    provides: /* @__PURE__ */ Object.create(null),\n    optionsCache: /* @__PURE__ */ new WeakMap(),\n    propsCache: /* @__PURE__ */ new WeakMap(),\n    emitsCache: /* @__PURE__ */ new WeakMap()\n  };\n}\nlet uid$1 = 0;\nfunction createAppAPI(render, hydrate) {\n  return function createApp(rootComponent, rootProps = null) {\n    if (!isFunction(rootComponent)) {\n      rootComponent = extend({}, rootComponent);\n    }\n    if (rootProps != null && !isObject(rootProps)) {\n      !!(process.env.NODE_ENV !== \"production\") && warn(`root props passed to app.mount() must be an object.`);\n      rootProps = null;\n    }\n    const context = createAppContext();\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      Object.defineProperty(context.config, \"unwrapInjectedRef\", {\n        get() {\n          return true;\n        },\n        set() {\n          warn(\n            `app.config.unwrapInjectedRef has been deprecated. 3.3 now alawys unwraps injected refs in Options API.`\n          );\n        }\n      });\n    }\n    const installedPlugins = /* @__PURE__ */ new Set();\n    let isMounted = false;\n    const app = context.app = {\n      _uid: uid$1++,\n      _component: rootComponent,\n      _props: rootProps,\n      _container: null,\n      _context: context,\n      _instance: null,\n      version,\n      get config() {\n        return context.config;\n      },\n      set config(v) {\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn(\n            `app.config cannot be replaced. Modify individual options instead.`\n          );\n        }\n      },\n      use(plugin, ...options) {\n        if (installedPlugins.has(plugin)) {\n          !!(process.env.NODE_ENV !== \"production\") && warn(`Plugin has already been applied to target app.`);\n        } else if (plugin && isFunction(plugin.install)) {\n          installedPlugins.add(plugin);\n          plugin.install(app, ...options);\n        } else if (isFunction(plugin)) {\n          installedPlugins.add(plugin);\n          plugin(app, ...options);\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn(\n            `A plugin must either be a function or an object with an \"install\" function.`\n          );\n        }\n        return app;\n      },\n      mixin(mixin) {\n        if (__VUE_OPTIONS_API__) {\n          if (!context.mixins.includes(mixin)) {\n            context.mixins.push(mixin);\n          } else if (!!(process.env.NODE_ENV !== \"production\")) {\n            warn(\n              \"Mixin has already been applied to target app\" + (mixin.name ? `: ${mixin.name}` : \"\")\n            );\n          }\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn(\"Mixins are only available in builds supporting Options API\");\n        }\n        return app;\n      },\n      component(name, component) {\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          validateComponentName(name, context.config);\n        }\n        if (!component) {\n          return context.components[name];\n        }\n        if (!!(process.env.NODE_ENV !== \"production\") && context.components[name]) {\n          warn(`Component \"${name}\" has already been registered in target app.`);\n        }\n        context.components[name] = component;\n        return app;\n      },\n      directive(name, directive) {\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          validateDirectiveName(name);\n        }\n        if (!directive) {\n          return context.directives[name];\n        }\n        if (!!(process.env.NODE_ENV !== \"production\") && context.directives[name]) {\n          warn(`Directive \"${name}\" has already been registered in target app.`);\n        }\n        context.directives[name] = directive;\n        return app;\n      },\n      mount(rootContainer, isHydrate, isSVG) {\n        if (!isMounted) {\n          if (!!(process.env.NODE_ENV !== \"production\") && rootContainer.__vue_app__) {\n            warn(\n              `There is already an app instance mounted on the host container.\n If you want to mount another app on the same host container, you need to unmount the previous app by calling \\`app.unmount()\\` first.`\n            );\n          }\n          const vnode = createVNode(\n            rootComponent,\n            rootProps\n          );\n          vnode.appContext = context;\n          if (!!(process.env.NODE_ENV !== \"production\")) {\n            context.reload = () => {\n              render(cloneVNode(vnode), rootContainer, isSVG);\n            };\n          }\n          if (isHydrate && hydrate) {\n            hydrate(vnode, rootContainer);\n          } else {\n            render(vnode, rootContainer, isSVG);\n          }\n          isMounted = true;\n          app._container = rootContainer;\n          rootContainer.__vue_app__ = app;\n          if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n            app._instance = vnode.component;\n            devtoolsInitApp(app, version);\n          }\n          return getExposeProxy(vnode.component) || vnode.component.proxy;\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn(\n            `App has already been mounted.\nIf you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. \\`const createMyApp = () => createApp(App)\\``\n          );\n        }\n      },\n      unmount() {\n        if (isMounted) {\n          render(null, app._container);\n          if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n            app._instance = null;\n            devtoolsUnmountApp(app);\n          }\n          delete app._container.__vue_app__;\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn(`Cannot unmount an app that is not mounted.`);\n        }\n      },\n      provide(key, value) {\n        if (!!(process.env.NODE_ENV !== \"production\") && key in context.provides) {\n          warn(\n            `App already provides property with key \"${String(key)}\". It will be overwritten with the new value.`\n          );\n        }\n        context.provides[key] = value;\n        return app;\n      },\n      runWithContext(fn) {\n        currentApp = app;\n        try {\n          return fn();\n        } finally {\n          currentApp = null;\n        }\n      }\n    };\n    return app;\n  };\n}\nlet currentApp = null;\n\nfunction provide(key, value) {\n  if (!currentInstance) {\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      warn(`provide() can only be used inside setup().`);\n    }\n  } else {\n    let provides = currentInstance.provides;\n    const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n    if (parentProvides === provides) {\n      provides = currentInstance.provides = Object.create(parentProvides);\n    }\n    provides[key] = value;\n  }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n  const instance = currentInstance || currentRenderingInstance;\n  if (instance || currentApp) {\n    const provides = instance ? instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : currentApp._context.provides;\n    if (provides && key in provides) {\n      return provides[key];\n    } else if (arguments.length > 1) {\n      return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;\n    } else if (!!(process.env.NODE_ENV !== \"production\")) {\n      warn(`injection \"${String(key)}\" not found.`);\n    }\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    warn(`inject() can only be used inside setup() or functional components.`);\n  }\n}\nfunction hasInjectionContext() {\n  return !!(currentInstance || currentRenderingInstance || currentApp);\n}\n\nfunction initProps(instance, rawProps, isStateful, isSSR = false) {\n  const props = {};\n  const attrs = {};\n  def(attrs, InternalObjectKey, 1);\n  instance.propsDefaults = /* @__PURE__ */ Object.create(null);\n  setFullProps(instance, rawProps, props, attrs);\n  for (const key in instance.propsOptions[0]) {\n    if (!(key in props)) {\n      props[key] = void 0;\n    }\n  }\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    validateProps(rawProps || {}, props, instance);\n  }\n  if (isStateful) {\n    instance.props = isSSR ? props : shallowReactive(props);\n  } else {\n    if (!instance.type.props) {\n      instance.props = attrs;\n    } else {\n      instance.props = props;\n    }\n  }\n  instance.attrs = attrs;\n}\nfunction isInHmrContext(instance) {\n  while (instance) {\n    if (instance.type.__hmrId)\n      return true;\n    instance = instance.parent;\n  }\n}\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\n  const {\n    props,\n    attrs,\n    vnode: { patchFlag }\n  } = instance;\n  const rawCurrentProps = toRaw(props);\n  const [options] = instance.propsOptions;\n  let hasAttrsChanged = false;\n  if (\n    // always force full diff in dev\n    // - #1942 if hmr is enabled with sfc component\n    // - vite#872 non-sfc component used by sfc component\n    !(!!(process.env.NODE_ENV !== \"production\") && isInHmrContext(instance)) && (optimized || patchFlag > 0) && !(patchFlag & 16)\n  ) {\n    if (patchFlag & 8) {\n      const propsToUpdate = instance.vnode.dynamicProps;\n      for (let i = 0; i < propsToUpdate.length; i++) {\n        let key = propsToUpdate[i];\n        if (isEmitListener(instance.emitsOptions, key)) {\n          continue;\n        }\n        const value = rawProps[key];\n        if (options) {\n          if (hasOwn(attrs, key)) {\n            if (value !== attrs[key]) {\n              attrs[key] = value;\n              hasAttrsChanged = true;\n            }\n          } else {\n            const camelizedKey = camelize(key);\n            props[camelizedKey] = resolvePropValue(\n              options,\n              rawCurrentProps,\n              camelizedKey,\n              value,\n              instance,\n              false\n              /* isAbsent */\n            );\n          }\n        } else {\n          if (value !== attrs[key]) {\n            attrs[key] = value;\n            hasAttrsChanged = true;\n          }\n        }\n      }\n    }\n  } else {\n    if (setFullProps(instance, rawProps, props, attrs)) {\n      hasAttrsChanged = true;\n    }\n    let kebabKey;\n    for (const key in rawCurrentProps) {\n      if (!rawProps || // for camelCase\n      !hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case\n      // and converted to camelCase (#955)\n      ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) {\n        if (options) {\n          if (rawPrevProps && // for camelCase\n          (rawPrevProps[key] !== void 0 || // for kebab-case\n          rawPrevProps[kebabKey] !== void 0)) {\n            props[key] = resolvePropValue(\n              options,\n              rawCurrentProps,\n              key,\n              void 0,\n              instance,\n              true\n              /* isAbsent */\n            );\n          }\n        } else {\n          delete props[key];\n        }\n      }\n    }\n    if (attrs !== rawCurrentProps) {\n      for (const key in attrs) {\n        if (!rawProps || !hasOwn(rawProps, key) && true) {\n          delete attrs[key];\n          hasAttrsChanged = true;\n        }\n      }\n    }\n  }\n  if (hasAttrsChanged) {\n    trigger(instance, \"set\", \"$attrs\");\n  }\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    validateProps(rawProps || {}, props, instance);\n  }\n}\nfunction setFullProps(instance, rawProps, props, attrs) {\n  const [options, needCastKeys] = instance.propsOptions;\n  let hasAttrsChanged = false;\n  let rawCastValues;\n  if (rawProps) {\n    for (let key in rawProps) {\n      if (isReservedProp(key)) {\n        continue;\n      }\n      const value = rawProps[key];\n      let camelKey;\n      if (options && hasOwn(options, camelKey = camelize(key))) {\n        if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n          props[camelKey] = value;\n        } else {\n          (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n        }\n      } else if (!isEmitListener(instance.emitsOptions, key)) {\n        if (!(key in attrs) || value !== attrs[key]) {\n          attrs[key] = value;\n          hasAttrsChanged = true;\n        }\n      }\n    }\n  }\n  if (needCastKeys) {\n    const rawCurrentProps = toRaw(props);\n    const castValues = rawCastValues || EMPTY_OBJ;\n    for (let i = 0; i < needCastKeys.length; i++) {\n      const key = needCastKeys[i];\n      props[key] = resolvePropValue(\n        options,\n        rawCurrentProps,\n        key,\n        castValues[key],\n        instance,\n        !hasOwn(castValues, key)\n      );\n    }\n  }\n  return hasAttrsChanged;\n}\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\n  const opt = options[key];\n  if (opt != null) {\n    const hasDefault = hasOwn(opt, \"default\");\n    if (hasDefault && value === void 0) {\n      const defaultValue = opt.default;\n      if (opt.type !== Function && !opt.skipFactory && isFunction(defaultValue)) {\n        const { propsDefaults } = instance;\n        if (key in propsDefaults) {\n          value = propsDefaults[key];\n        } else {\n          setCurrentInstance(instance);\n          value = propsDefaults[key] = defaultValue.call(\n            null,\n            props\n          );\n          unsetCurrentInstance();\n        }\n      } else {\n        value = defaultValue;\n      }\n    }\n    if (opt[0 /* shouldCast */]) {\n      if (isAbsent && !hasDefault) {\n        value = false;\n      } else if (opt[1 /* shouldCastTrue */] && (value === \"\" || value === hyphenate(key))) {\n        value = true;\n      }\n    }\n  }\n  return value;\n}\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n  const cache = appContext.propsCache;\n  const cached = cache.get(comp);\n  if (cached) {\n    return cached;\n  }\n  const raw = comp.props;\n  const normalized = {};\n  const needCastKeys = [];\n  let hasExtends = false;\n  if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n    const extendProps = (raw2) => {\n      hasExtends = true;\n      const [props, keys] = normalizePropsOptions(raw2, appContext, true);\n      extend(normalized, props);\n      if (keys)\n        needCastKeys.push(...keys);\n    };\n    if (!asMixin && appContext.mixins.length) {\n      appContext.mixins.forEach(extendProps);\n    }\n    if (comp.extends) {\n      extendProps(comp.extends);\n    }\n    if (comp.mixins) {\n      comp.mixins.forEach(extendProps);\n    }\n  }\n  if (!raw && !hasExtends) {\n    if (isObject(comp)) {\n      cache.set(comp, EMPTY_ARR);\n    }\n    return EMPTY_ARR;\n  }\n  if (isArray(raw)) {\n    for (let i = 0; i < raw.length; i++) {\n      if (!!(process.env.NODE_ENV !== \"production\") && !isString(raw[i])) {\n        warn(`props must be strings when using array syntax.`, raw[i]);\n      }\n      const normalizedKey = camelize(raw[i]);\n      if (validatePropName(normalizedKey)) {\n        normalized[normalizedKey] = EMPTY_OBJ;\n      }\n    }\n  } else if (raw) {\n    if (!!(process.env.NODE_ENV !== \"production\") && !isObject(raw)) {\n      warn(`invalid props options`, raw);\n    }\n    for (const key in raw) {\n      const normalizedKey = camelize(key);\n      if (validatePropName(normalizedKey)) {\n        const opt = raw[key];\n        const prop = normalized[normalizedKey] = isArray(opt) || isFunction(opt) ? { type: opt } : extend({}, opt);\n        if (prop) {\n          const booleanIndex = getTypeIndex(Boolean, prop.type);\n          const stringIndex = getTypeIndex(String, prop.type);\n          prop[0 /* shouldCast */] = booleanIndex > -1;\n          prop[1 /* shouldCastTrue */] = stringIndex < 0 || booleanIndex < stringIndex;\n          if (booleanIndex > -1 || hasOwn(prop, \"default\")) {\n            needCastKeys.push(normalizedKey);\n          }\n        }\n      }\n    }\n  }\n  const res = [normalized, needCastKeys];\n  if (isObject(comp)) {\n    cache.set(comp, res);\n  }\n  return res;\n}\nfunction validatePropName(key) {\n  if (key[0] !== \"$\") {\n    return true;\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    warn(`Invalid prop name: \"${key}\" is a reserved property.`);\n  }\n  return false;\n}\nfunction getType(ctor) {\n  const match = ctor && ctor.toString().match(/^\\s*(function|class) (\\w+)/);\n  return match ? match[2] : ctor === null ? \"null\" : \"\";\n}\nfunction isSameType(a, b) {\n  return getType(a) === getType(b);\n}\nfunction getTypeIndex(type, expectedTypes) {\n  if (isArray(expectedTypes)) {\n    return expectedTypes.findIndex((t) => isSameType(t, type));\n  } else if (isFunction(expectedTypes)) {\n    return isSameType(expectedTypes, type) ? 0 : -1;\n  }\n  return -1;\n}\nfunction validateProps(rawProps, props, instance) {\n  const resolvedValues = toRaw(props);\n  const options = instance.propsOptions[0];\n  for (const key in options) {\n    let opt = options[key];\n    if (opt == null)\n      continue;\n    validateProp(\n      key,\n      resolvedValues[key],\n      opt,\n      !hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key))\n    );\n  }\n}\nfunction validateProp(name, value, prop, isAbsent) {\n  const { type, required, validator, skipCheck } = prop;\n  if (required && isAbsent) {\n    warn('Missing required prop: \"' + name + '\"');\n    return;\n  }\n  if (value == null && !required) {\n    return;\n  }\n  if (type != null && type !== true && !skipCheck) {\n    let isValid = false;\n    const types = isArray(type) ? type : [type];\n    const expectedTypes = [];\n    for (let i = 0; i < types.length && !isValid; i++) {\n      const { valid, expectedType } = assertType(value, types[i]);\n      expectedTypes.push(expectedType || \"\");\n      isValid = valid;\n    }\n    if (!isValid) {\n      warn(getInvalidTypeMessage(name, value, expectedTypes));\n      return;\n    }\n  }\n  if (validator && !validator(value)) {\n    warn('Invalid prop: custom validator check failed for prop \"' + name + '\".');\n  }\n}\nconst isSimpleType = /* @__PURE__ */ makeMap(\n  \"String,Number,Boolean,Function,Symbol,BigInt\"\n);\nfunction assertType(value, type) {\n  let valid;\n  const expectedType = getType(type);\n  if (isSimpleType(expectedType)) {\n    const t = typeof value;\n    valid = t === expectedType.toLowerCase();\n    if (!valid && t === \"object\") {\n      valid = value instanceof type;\n    }\n  } else if (expectedType === \"Object\") {\n    valid = isObject(value);\n  } else if (expectedType === \"Array\") {\n    valid = isArray(value);\n  } else if (expectedType === \"null\") {\n    valid = value === null;\n  } else {\n    valid = value instanceof type;\n  }\n  return {\n    valid,\n    expectedType\n  };\n}\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n  let message = `Invalid prop: type check failed for prop \"${name}\". Expected ${expectedTypes.map(capitalize).join(\" | \")}`;\n  const expectedType = expectedTypes[0];\n  const receivedType = toRawType(value);\n  const expectedValue = styleValue(value, expectedType);\n  const receivedValue = styleValue(value, receivedType);\n  if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean(expectedType, receivedType)) {\n    message += ` with value ${expectedValue}`;\n  }\n  message += `, got ${receivedType} `;\n  if (isExplicable(receivedType)) {\n    message += `with value ${receivedValue}.`;\n  }\n  return message;\n}\nfunction styleValue(value, type) {\n  if (type === \"String\") {\n    return `\"${value}\"`;\n  } else if (type === \"Number\") {\n    return `${Number(value)}`;\n  } else {\n    return `${value}`;\n  }\n}\nfunction isExplicable(type) {\n  const explicitTypes = [\"string\", \"number\", \"boolean\"];\n  return explicitTypes.some((elem) => type.toLowerCase() === elem);\n}\nfunction isBoolean(...args) {\n  return args.some((elem) => elem.toLowerCase() === \"boolean\");\n}\n\nconst isInternalKey = (key) => key[0] === \"_\" || key === \"$stable\";\nconst normalizeSlotValue = (value) => isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)];\nconst normalizeSlot = (key, rawSlot, ctx) => {\n  if (rawSlot._n) {\n    return rawSlot;\n  }\n  const normalized = withCtx((...args) => {\n    if (!!(process.env.NODE_ENV !== \"production\") && currentInstance) {\n      warn(\n        `Slot \"${key}\" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.`\n      );\n    }\n    return normalizeSlotValue(rawSlot(...args));\n  }, ctx);\n  normalized._c = false;\n  return normalized;\n};\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\n  const ctx = rawSlots._ctx;\n  for (const key in rawSlots) {\n    if (isInternalKey(key))\n      continue;\n    const value = rawSlots[key];\n    if (isFunction(value)) {\n      slots[key] = normalizeSlot(key, value, ctx);\n    } else if (value != null) {\n      if (!!(process.env.NODE_ENV !== \"production\") && true) {\n        warn(\n          `Non-function value encountered for slot \"${key}\". Prefer function slots for better performance.`\n        );\n      }\n      const normalized = normalizeSlotValue(value);\n      slots[key] = () => normalized;\n    }\n  }\n};\nconst normalizeVNodeSlots = (instance, children) => {\n  if (!!(process.env.NODE_ENV !== \"production\") && !isKeepAlive(instance.vnode) && true) {\n    warn(\n      `Non-function value encountered for default slot. Prefer function slots for better performance.`\n    );\n  }\n  const normalized = normalizeSlotValue(children);\n  instance.slots.default = () => normalized;\n};\nconst initSlots = (instance, children) => {\n  if (instance.vnode.shapeFlag & 32) {\n    const type = children._;\n    if (type) {\n      instance.slots = toRaw(children);\n      def(children, \"_\", type);\n    } else {\n      normalizeObjectSlots(\n        children,\n        instance.slots = {});\n    }\n  } else {\n    instance.slots = {};\n    if (children) {\n      normalizeVNodeSlots(instance, children);\n    }\n  }\n  def(instance.slots, InternalObjectKey, 1);\n};\nconst updateSlots = (instance, children, optimized) => {\n  const { vnode, slots } = instance;\n  let needDeletionCheck = true;\n  let deletionComparisonTarget = EMPTY_OBJ;\n  if (vnode.shapeFlag & 32) {\n    const type = children._;\n    if (type) {\n      if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n        extend(slots, children);\n        trigger(instance, \"set\", \"$slots\");\n      } else if (optimized && type === 1) {\n        needDeletionCheck = false;\n      } else {\n        extend(slots, children);\n        if (!optimized && type === 1) {\n          delete slots._;\n        }\n      }\n    } else {\n      needDeletionCheck = !children.$stable;\n      normalizeObjectSlots(children, slots);\n    }\n    deletionComparisonTarget = children;\n  } else if (children) {\n    normalizeVNodeSlots(instance, children);\n    deletionComparisonTarget = { default: 1 };\n  }\n  if (needDeletionCheck) {\n    for (const key in slots) {\n      if (!isInternalKey(key) && !(key in deletionComparisonTarget)) {\n        delete slots[key];\n      }\n    }\n  }\n};\n\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n  if (isArray(rawRef)) {\n    rawRef.forEach(\n      (r, i) => setRef(\n        r,\n        oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),\n        parentSuspense,\n        vnode,\n        isUnmount\n      )\n    );\n    return;\n  }\n  if (isAsyncWrapper(vnode) && !isUnmount) {\n    return;\n  }\n  const refValue = vnode.shapeFlag & 4 ? getExposeProxy(vnode.component) || vnode.component.proxy : vnode.el;\n  const value = isUnmount ? null : refValue;\n  const { i: owner, r: ref } = rawRef;\n  if (!!(process.env.NODE_ENV !== \"production\") && !owner) {\n    warn(\n      `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`\n    );\n    return;\n  }\n  const oldRef = oldRawRef && oldRawRef.r;\n  const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;\n  const setupState = owner.setupState;\n  if (oldRef != null && oldRef !== ref) {\n    if (isString(oldRef)) {\n      refs[oldRef] = null;\n      if (hasOwn(setupState, oldRef)) {\n        setupState[oldRef] = null;\n      }\n    } else if (isRef(oldRef)) {\n      oldRef.value = null;\n    }\n  }\n  if (isFunction(ref)) {\n    callWithErrorHandling(ref, owner, 12, [value, refs]);\n  } else {\n    const _isString = isString(ref);\n    const _isRef = isRef(ref);\n    if (_isString || _isRef) {\n      const doSet = () => {\n        if (rawRef.f) {\n          const existing = _isString ? hasOwn(setupState, ref) ? setupState[ref] : refs[ref] : ref.value;\n          if (isUnmount) {\n            isArray(existing) && remove(existing, refValue);\n          } else {\n            if (!isArray(existing)) {\n              if (_isString) {\n                refs[ref] = [refValue];\n                if (hasOwn(setupState, ref)) {\n                  setupState[ref] = refs[ref];\n                }\n              } else {\n                ref.value = [refValue];\n                if (rawRef.k)\n                  refs[rawRef.k] = ref.value;\n              }\n            } else if (!existing.includes(refValue)) {\n              existing.push(refValue);\n            }\n          }\n        } else if (_isString) {\n          refs[ref] = value;\n          if (hasOwn(setupState, ref)) {\n            setupState[ref] = value;\n          }\n        } else if (_isRef) {\n          ref.value = value;\n          if (rawRef.k)\n            refs[rawRef.k] = value;\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n        }\n      };\n      if (value) {\n        doSet.id = -1;\n        queuePostRenderEffect(doSet, parentSuspense);\n      } else {\n        doSet();\n      }\n    } else if (!!(process.env.NODE_ENV !== \"production\")) {\n      warn(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n    }\n  }\n}\n\nlet hasMismatch = false;\nconst isSVGContainer = (container) => /svg/.test(container.namespaceURI) && container.tagName !== \"foreignObject\";\nconst isComment = (node) => node.nodeType === 8 /* COMMENT */;\nfunction createHydrationFunctions(rendererInternals) {\n  const {\n    mt: mountComponent,\n    p: patch,\n    o: {\n      patchProp,\n      createText,\n      nextSibling,\n      parentNode,\n      remove,\n      insert,\n      createComment\n    }\n  } = rendererInternals;\n  const hydrate = (vnode, container) => {\n    if (!container.hasChildNodes()) {\n      !!(process.env.NODE_ENV !== \"production\") && warn(\n        `Attempting to hydrate existing markup but container is empty. Performing full mount instead.`\n      );\n      patch(null, vnode, container);\n      flushPostFlushCbs();\n      container._vnode = vnode;\n      return;\n    }\n    hasMismatch = false;\n    hydrateNode(container.firstChild, vnode, null, null, null);\n    flushPostFlushCbs();\n    container._vnode = vnode;\n    if (hasMismatch && true) {\n      console.error(`Hydration completed but contains mismatches.`);\n    }\n  };\n  const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n    const isFragmentStart = isComment(node) && node.data === \"[\";\n    const onMismatch = () => handleMismatch(\n      node,\n      vnode,\n      parentComponent,\n      parentSuspense,\n      slotScopeIds,\n      isFragmentStart\n    );\n    const { type, ref, shapeFlag, patchFlag } = vnode;\n    let domType = node.nodeType;\n    vnode.el = node;\n    if (patchFlag === -2) {\n      optimized = false;\n      vnode.dynamicChildren = null;\n    }\n    let nextNode = null;\n    switch (type) {\n      case Text:\n        if (domType !== 3 /* TEXT */) {\n          if (vnode.children === \"\") {\n            insert(vnode.el = createText(\"\"), parentNode(node), node);\n            nextNode = node;\n          } else {\n            nextNode = onMismatch();\n          }\n        } else {\n          if (node.data !== vnode.children) {\n            hasMismatch = true;\n            !!(process.env.NODE_ENV !== \"production\") && warn(\n              `Hydration text mismatch:\n- Client: ${JSON.stringify(node.data)}\n- Server: ${JSON.stringify(vnode.children)}`\n            );\n            node.data = vnode.children;\n          }\n          nextNode = nextSibling(node);\n        }\n        break;\n      case Comment:\n        if (domType !== 8 /* COMMENT */ || isFragmentStart) {\n          nextNode = onMismatch();\n        } else {\n          nextNode = nextSibling(node);\n        }\n        break;\n      case Static:\n        if (isFragmentStart) {\n          node = nextSibling(node);\n          domType = node.nodeType;\n        }\n        if (domType === 1 /* ELEMENT */ || domType === 3 /* TEXT */) {\n          nextNode = node;\n          const needToAdoptContent = !vnode.children.length;\n          for (let i = 0; i < vnode.staticCount; i++) {\n            if (needToAdoptContent)\n              vnode.children += nextNode.nodeType === 1 /* ELEMENT */ ? nextNode.outerHTML : nextNode.data;\n            if (i === vnode.staticCount - 1) {\n              vnode.anchor = nextNode;\n            }\n            nextNode = nextSibling(nextNode);\n          }\n          return isFragmentStart ? nextSibling(nextNode) : nextNode;\n        } else {\n          onMismatch();\n        }\n        break;\n      case Fragment:\n        if (!isFragmentStart) {\n          nextNode = onMismatch();\n        } else {\n          nextNode = hydrateFragment(\n            node,\n            vnode,\n            parentComponent,\n            parentSuspense,\n            slotScopeIds,\n            optimized\n          );\n        }\n        break;\n      default:\n        if (shapeFlag & 1) {\n          if (domType !== 1 /* ELEMENT */ || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) {\n            nextNode = onMismatch();\n          } else {\n            nextNode = hydrateElement(\n              node,\n              vnode,\n              parentComponent,\n              parentSuspense,\n              slotScopeIds,\n              optimized\n            );\n          }\n        } else if (shapeFlag & 6) {\n          vnode.slotScopeIds = slotScopeIds;\n          const container = parentNode(node);\n          mountComponent(\n            vnode,\n            container,\n            null,\n            parentComponent,\n            parentSuspense,\n            isSVGContainer(container),\n            optimized\n          );\n          nextNode = isFragmentStart ? locateClosingAsyncAnchor(node) : nextSibling(node);\n          if (nextNode && isComment(nextNode) && nextNode.data === \"teleport end\") {\n            nextNode = nextSibling(nextNode);\n          }\n          if (isAsyncWrapper(vnode)) {\n            let subTree;\n            if (isFragmentStart) {\n              subTree = createVNode(Fragment);\n              subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;\n            } else {\n              subTree = node.nodeType === 3 ? createTextVNode(\"\") : createVNode(\"div\");\n            }\n            subTree.el = node;\n            vnode.component.subTree = subTree;\n          }\n        } else if (shapeFlag & 64) {\n          if (domType !== 8 /* COMMENT */) {\n            nextNode = onMismatch();\n          } else {\n            nextNode = vnode.type.hydrate(\n              node,\n              vnode,\n              parentComponent,\n              parentSuspense,\n              slotScopeIds,\n              optimized,\n              rendererInternals,\n              hydrateChildren\n            );\n          }\n        } else if (shapeFlag & 128) {\n          nextNode = vnode.type.hydrate(\n            node,\n            vnode,\n            parentComponent,\n            parentSuspense,\n            isSVGContainer(parentNode(node)),\n            slotScopeIds,\n            optimized,\n            rendererInternals,\n            hydrateNode\n          );\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn(\"Invalid HostVNode type:\", type, `(${typeof type})`);\n        }\n    }\n    if (ref != null) {\n      setRef(ref, null, parentSuspense, vnode);\n    }\n    return nextNode;\n  };\n  const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n    optimized = optimized || !!vnode.dynamicChildren;\n    const { type, props, patchFlag, shapeFlag, dirs } = vnode;\n    const forcePatchValue = type === \"input\" && dirs || type === \"option\";\n    if (!!(process.env.NODE_ENV !== \"production\") || forcePatchValue || patchFlag !== -1) {\n      if (dirs) {\n        invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n      }\n      if (props) {\n        if (forcePatchValue || !optimized || patchFlag & (16 | 32)) {\n          for (const key in props) {\n            if (forcePatchValue && key.endsWith(\"value\") || isOn(key) && !isReservedProp(key)) {\n              patchProp(\n                el,\n                key,\n                null,\n                props[key],\n                false,\n                void 0,\n                parentComponent\n              );\n            }\n          }\n        } else if (props.onClick) {\n          patchProp(\n            el,\n            \"onClick\",\n            null,\n            props.onClick,\n            false,\n            void 0,\n            parentComponent\n          );\n        }\n      }\n      let vnodeHooks;\n      if (vnodeHooks = props && props.onVnodeBeforeMount) {\n        invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n      }\n      if (dirs) {\n        invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n      }\n      if ((vnodeHooks = props && props.onVnodeMounted) || dirs) {\n        queueEffectWithSuspense(() => {\n          vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n          dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n        }, parentSuspense);\n      }\n      if (shapeFlag & 16 && // skip if element has innerHTML / textContent\n      !(props && (props.innerHTML || props.textContent))) {\n        let next = hydrateChildren(\n          el.firstChild,\n          vnode,\n          el,\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n        let hasWarned = false;\n        while (next) {\n          hasMismatch = true;\n          if (!!(process.env.NODE_ENV !== \"production\") && !hasWarned) {\n            warn(\n              `Hydration children mismatch in <${vnode.type}>: server rendered element contains more child nodes than client vdom.`\n            );\n            hasWarned = true;\n          }\n          const cur = next;\n          next = next.nextSibling;\n          remove(cur);\n        }\n      } else if (shapeFlag & 8) {\n        if (el.textContent !== vnode.children) {\n          hasMismatch = true;\n          !!(process.env.NODE_ENV !== \"production\") && warn(\n            `Hydration text content mismatch in <${vnode.type}>:\n- Client: ${el.textContent}\n- Server: ${vnode.children}`\n          );\n          el.textContent = vnode.children;\n        }\n      }\n    }\n    return el.nextSibling;\n  };\n  const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n    optimized = optimized || !!parentVNode.dynamicChildren;\n    const children = parentVNode.children;\n    const l = children.length;\n    let hasWarned = false;\n    for (let i = 0; i < l; i++) {\n      const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);\n      if (node) {\n        node = hydrateNode(\n          node,\n          vnode,\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n      } else if (vnode.type === Text && !vnode.children) {\n        continue;\n      } else {\n        hasMismatch = true;\n        if (!!(process.env.NODE_ENV !== \"production\") && !hasWarned) {\n          warn(\n            `Hydration children mismatch in <${container.tagName.toLowerCase()}>: server rendered element contains fewer child nodes than client vdom.`\n          );\n          hasWarned = true;\n        }\n        patch(\n          null,\n          vnode,\n          container,\n          null,\n          parentComponent,\n          parentSuspense,\n          isSVGContainer(container),\n          slotScopeIds\n        );\n      }\n    }\n    return node;\n  };\n  const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n    const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n    if (fragmentSlotScopeIds) {\n      slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n    }\n    const container = parentNode(node);\n    const next = hydrateChildren(\n      nextSibling(node),\n      vnode,\n      container,\n      parentComponent,\n      parentSuspense,\n      slotScopeIds,\n      optimized\n    );\n    if (next && isComment(next) && next.data === \"]\") {\n      return nextSibling(vnode.anchor = next);\n    } else {\n      hasMismatch = true;\n      insert(vnode.anchor = createComment(`]`), container, next);\n      return next;\n    }\n  };\n  const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n    hasMismatch = true;\n    !!(process.env.NODE_ENV !== \"production\") && warn(\n      `Hydration node mismatch:\n- Client vnode:`,\n      vnode.type,\n      `\n- Server rendered DOM:`,\n      node,\n      node.nodeType === 3 /* TEXT */ ? `(text)` : isComment(node) && node.data === \"[\" ? `(start of fragment)` : ``\n    );\n    vnode.el = null;\n    if (isFragment) {\n      const end = locateClosingAsyncAnchor(node);\n      while (true) {\n        const next2 = nextSibling(node);\n        if (next2 && next2 !== end) {\n          remove(next2);\n        } else {\n          break;\n        }\n      }\n    }\n    const next = nextSibling(node);\n    const container = parentNode(node);\n    remove(node);\n    patch(\n      null,\n      vnode,\n      container,\n      next,\n      parentComponent,\n      parentSuspense,\n      isSVGContainer(container),\n      slotScopeIds\n    );\n    return next;\n  };\n  const locateClosingAsyncAnchor = (node) => {\n    let match = 0;\n    while (node) {\n      node = nextSibling(node);\n      if (node && isComment(node)) {\n        if (node.data === \"[\")\n          match++;\n        if (node.data === \"]\") {\n          if (match === 0) {\n            return nextSibling(node);\n          } else {\n            match--;\n          }\n        }\n      }\n    }\n    return node;\n  };\n  return [hydrate, hydrateNode];\n}\n\nlet supported;\nlet perf;\nfunction startMeasure(instance, type) {\n  if (instance.appContext.config.performance && isSupported()) {\n    perf.mark(`vue-${type}-${instance.uid}`);\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n    devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());\n  }\n}\nfunction endMeasure(instance, type) {\n  if (instance.appContext.config.performance && isSupported()) {\n    const startTag = `vue-${type}-${instance.uid}`;\n    const endTag = startTag + `:end`;\n    perf.mark(endTag);\n    perf.measure(\n      `<${formatComponentName(instance, instance.type)}> ${type}`,\n      startTag,\n      endTag\n    );\n    perf.clearMarks(startTag);\n    perf.clearMarks(endTag);\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n    devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());\n  }\n}\nfunction isSupported() {\n  if (supported !== void 0) {\n    return supported;\n  }\n  if (typeof window !== \"undefined\" && window.performance) {\n    supported = true;\n    perf = window.performance;\n  } else {\n    supported = false;\n  }\n  return supported;\n}\n\nfunction initFeatureFlags() {\n  const needWarn = [];\n  if (typeof __VUE_OPTIONS_API__ !== \"boolean\") {\n    !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_OPTIONS_API__`);\n    getGlobalThis().__VUE_OPTIONS_API__ = true;\n  }\n  if (typeof __VUE_PROD_DEVTOOLS__ !== \"boolean\") {\n    !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_DEVTOOLS__`);\n    getGlobalThis().__VUE_PROD_DEVTOOLS__ = false;\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") && needWarn.length) {\n    const multi = needWarn.length > 1;\n    console.warn(\n      `Feature flag${multi ? `s` : ``} ${needWarn.join(\", \")} ${multi ? `are` : `is`} not explicitly defined. You are running the esm-bundler build of Vue, which expects these compile-time feature flags to be globally injected via the bundler config in order to get better tree-shaking in the production bundle.\n\nFor more details, see https://link.vuejs.org/feature-flags.`\n    );\n  }\n}\n\nconst queuePostRenderEffect = queueEffectWithSuspense ;\nfunction createRenderer(options) {\n  return baseCreateRenderer(options);\n}\nfunction createHydrationRenderer(options) {\n  return baseCreateRenderer(options, createHydrationFunctions);\n}\nfunction baseCreateRenderer(options, createHydrationFns) {\n  {\n    initFeatureFlags();\n  }\n  const target = getGlobalThis();\n  target.__VUE__ = true;\n  if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n    setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);\n  }\n  const {\n    insert: hostInsert,\n    remove: hostRemove,\n    patchProp: hostPatchProp,\n    createElement: hostCreateElement,\n    createText: hostCreateText,\n    createComment: hostCreateComment,\n    setText: hostSetText,\n    setElementText: hostSetElementText,\n    parentNode: hostParentNode,\n    nextSibling: hostNextSibling,\n    setScopeId: hostSetScopeId = NOOP,\n    insertStaticContent: hostInsertStaticContent\n  } = options;\n  const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, isSVG = false, slotScopeIds = null, optimized = !!(process.env.NODE_ENV !== \"production\") && isHmrUpdating ? false : !!n2.dynamicChildren) => {\n    if (n1 === n2) {\n      return;\n    }\n    if (n1 && !isSameVNodeType(n1, n2)) {\n      anchor = getNextHostNode(n1);\n      unmount(n1, parentComponent, parentSuspense, true);\n      n1 = null;\n    }\n    if (n2.patchFlag === -2) {\n      optimized = false;\n      n2.dynamicChildren = null;\n    }\n    const { type, ref, shapeFlag } = n2;\n    switch (type) {\n      case Text:\n        processText(n1, n2, container, anchor);\n        break;\n      case Comment:\n        processCommentNode(n1, n2, container, anchor);\n        break;\n      case Static:\n        if (n1 == null) {\n          mountStaticNode(n2, container, anchor, isSVG);\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          patchStaticNode(n1, n2, container, isSVG);\n        }\n        break;\n      case Fragment:\n        processFragment(\n          n1,\n          n2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          isSVG,\n          slotScopeIds,\n          optimized\n        );\n        break;\n      default:\n        if (shapeFlag & 1) {\n          processElement(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            isSVG,\n            slotScopeIds,\n            optimized\n          );\n        } else if (shapeFlag & 6) {\n          processComponent(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            isSVG,\n            slotScopeIds,\n            optimized\n          );\n        } else if (shapeFlag & 64) {\n          type.process(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            isSVG,\n            slotScopeIds,\n            optimized,\n            internals\n          );\n        } else if (shapeFlag & 128) {\n          type.process(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            isSVG,\n            slotScopeIds,\n            optimized,\n            internals\n          );\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn(\"Invalid VNode type:\", type, `(${typeof type})`);\n        }\n    }\n    if (ref != null && parentComponent) {\n      setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n    }\n  };\n  const processText = (n1, n2, container, anchor) => {\n    if (n1 == null) {\n      hostInsert(\n        n2.el = hostCreateText(n2.children),\n        container,\n        anchor\n      );\n    } else {\n      const el = n2.el = n1.el;\n      if (n2.children !== n1.children) {\n        hostSetText(el, n2.children);\n      }\n    }\n  };\n  const processCommentNode = (n1, n2, container, anchor) => {\n    if (n1 == null) {\n      hostInsert(\n        n2.el = hostCreateComment(n2.children || \"\"),\n        container,\n        anchor\n      );\n    } else {\n      n2.el = n1.el;\n    }\n  };\n  const mountStaticNode = (n2, container, anchor, isSVG) => {\n    [n2.el, n2.anchor] = hostInsertStaticContent(\n      n2.children,\n      container,\n      anchor,\n      isSVG,\n      n2.el,\n      n2.anchor\n    );\n  };\n  const patchStaticNode = (n1, n2, container, isSVG) => {\n    if (n2.children !== n1.children) {\n      const anchor = hostNextSibling(n1.anchor);\n      removeStaticNode(n1);\n      [n2.el, n2.anchor] = hostInsertStaticContent(\n        n2.children,\n        container,\n        anchor,\n        isSVG\n      );\n    } else {\n      n2.el = n1.el;\n      n2.anchor = n1.anchor;\n    }\n  };\n  const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n    let next;\n    while (el && el !== anchor) {\n      next = hostNextSibling(el);\n      hostInsert(el, container, nextSibling);\n      el = next;\n    }\n    hostInsert(anchor, container, nextSibling);\n  };\n  const removeStaticNode = ({ el, anchor }) => {\n    let next;\n    while (el && el !== anchor) {\n      next = hostNextSibling(el);\n      hostRemove(el);\n      el = next;\n    }\n    hostRemove(anchor);\n  };\n  const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n    isSVG = isSVG || n2.type === \"svg\";\n    if (n1 == null) {\n      mountElement(\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        isSVG,\n        slotScopeIds,\n        optimized\n      );\n    } else {\n      patchElement(\n        n1,\n        n2,\n        parentComponent,\n        parentSuspense,\n        isSVG,\n        slotScopeIds,\n        optimized\n      );\n    }\n  };\n  const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n    let el;\n    let vnodeHook;\n    const { type, props, shapeFlag, transition, dirs } = vnode;\n    el = vnode.el = hostCreateElement(\n      vnode.type,\n      isSVG,\n      props && props.is,\n      props\n    );\n    if (shapeFlag & 8) {\n      hostSetElementText(el, vnode.children);\n    } else if (shapeFlag & 16) {\n      mountChildren(\n        vnode.children,\n        el,\n        null,\n        parentComponent,\n        parentSuspense,\n        isSVG && type !== \"foreignObject\",\n        slotScopeIds,\n        optimized\n      );\n    }\n    if (dirs) {\n      invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n    }\n    setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n    if (props) {\n      for (const key in props) {\n        if (key !== \"value\" && !isReservedProp(key)) {\n          hostPatchProp(\n            el,\n            key,\n            null,\n            props[key],\n            isSVG,\n            vnode.children,\n            parentComponent,\n            parentSuspense,\n            unmountChildren\n          );\n        }\n      }\n      if (\"value\" in props) {\n        hostPatchProp(el, \"value\", null, props.value);\n      }\n      if (vnodeHook = props.onVnodeBeforeMount) {\n        invokeVNodeHook(vnodeHook, parentComponent, vnode);\n      }\n    }\n    if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n      Object.defineProperty(el, \"__vnode\", {\n        value: vnode,\n        enumerable: false\n      });\n      Object.defineProperty(el, \"__vueParentComponent\", {\n        value: parentComponent,\n        enumerable: false\n      });\n    }\n    if (dirs) {\n      invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n    }\n    const needCallTransitionHooks = (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted;\n    if (needCallTransitionHooks) {\n      transition.beforeEnter(el);\n    }\n    hostInsert(el, container, anchor);\n    if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) {\n      queuePostRenderEffect(() => {\n        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n        needCallTransitionHooks && transition.enter(el);\n        dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n      }, parentSuspense);\n    }\n  };\n  const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n    if (scopeId) {\n      hostSetScopeId(el, scopeId);\n    }\n    if (slotScopeIds) {\n      for (let i = 0; i < slotScopeIds.length; i++) {\n        hostSetScopeId(el, slotScopeIds[i]);\n      }\n    }\n    if (parentComponent) {\n      let subTree = parentComponent.subTree;\n      if (!!(process.env.NODE_ENV !== \"production\") && subTree.patchFlag > 0 && subTree.patchFlag & 2048) {\n        subTree = filterSingleRoot(subTree.children) || subTree;\n      }\n      if (vnode === subTree) {\n        const parentVNode = parentComponent.vnode;\n        setScopeId(\n          el,\n          parentVNode,\n          parentVNode.scopeId,\n          parentVNode.slotScopeIds,\n          parentComponent.parent\n        );\n      }\n    }\n  };\n  const mountChildren = (children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, start = 0) => {\n    for (let i = start; i < children.length; i++) {\n      const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]);\n      patch(\n        null,\n        child,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        isSVG,\n        slotScopeIds,\n        optimized\n      );\n    }\n  };\n  const patchElement = (n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n    const el = n2.el = n1.el;\n    let { patchFlag, dynamicChildren, dirs } = n2;\n    patchFlag |= n1.patchFlag & 16;\n    const oldProps = n1.props || EMPTY_OBJ;\n    const newProps = n2.props || EMPTY_OBJ;\n    let vnodeHook;\n    parentComponent && toggleRecurse(parentComponent, false);\n    if (vnodeHook = newProps.onVnodeBeforeUpdate) {\n      invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n    }\n    if (dirs) {\n      invokeDirectiveHook(n2, n1, parentComponent, \"beforeUpdate\");\n    }\n    parentComponent && toggleRecurse(parentComponent, true);\n    if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n      patchFlag = 0;\n      optimized = false;\n      dynamicChildren = null;\n    }\n    const areChildrenSVG = isSVG && n2.type !== \"foreignObject\";\n    if (dynamicChildren) {\n      patchBlockChildren(\n        n1.dynamicChildren,\n        dynamicChildren,\n        el,\n        parentComponent,\n        parentSuspense,\n        areChildrenSVG,\n        slotScopeIds\n      );\n      if (!!(process.env.NODE_ENV !== \"production\")) {\n        traverseStaticChildren(n1, n2);\n      }\n    } else if (!optimized) {\n      patchChildren(\n        n1,\n        n2,\n        el,\n        null,\n        parentComponent,\n        parentSuspense,\n        areChildrenSVG,\n        slotScopeIds,\n        false\n      );\n    }\n    if (patchFlag > 0) {\n      if (patchFlag & 16) {\n        patchProps(\n          el,\n          n2,\n          oldProps,\n          newProps,\n          parentComponent,\n          parentSuspense,\n          isSVG\n        );\n      } else {\n        if (patchFlag & 2) {\n          if (oldProps.class !== newProps.class) {\n            hostPatchProp(el, \"class\", null, newProps.class, isSVG);\n          }\n        }\n        if (patchFlag & 4) {\n          hostPatchProp(el, \"style\", oldProps.style, newProps.style, isSVG);\n        }\n        if (patchFlag & 8) {\n          const propsToUpdate = n2.dynamicProps;\n          for (let i = 0; i < propsToUpdate.length; i++) {\n            const key = propsToUpdate[i];\n            const prev = oldProps[key];\n            const next = newProps[key];\n            if (next !== prev || key === \"value\") {\n              hostPatchProp(\n                el,\n                key,\n                prev,\n                next,\n                isSVG,\n                n1.children,\n                parentComponent,\n                parentSuspense,\n                unmountChildren\n              );\n            }\n          }\n        }\n      }\n      if (patchFlag & 1) {\n        if (n1.children !== n2.children) {\n          hostSetElementText(el, n2.children);\n        }\n      }\n    } else if (!optimized && dynamicChildren == null) {\n      patchProps(\n        el,\n        n2,\n        oldProps,\n        newProps,\n        parentComponent,\n        parentSuspense,\n        isSVG\n      );\n    }\n    if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n      queuePostRenderEffect(() => {\n        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n        dirs && invokeDirectiveHook(n2, n1, parentComponent, \"updated\");\n      }, parentSuspense);\n    }\n  };\n  const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, isSVG, slotScopeIds) => {\n    for (let i = 0; i < newChildren.length; i++) {\n      const oldVNode = oldChildren[i];\n      const newVNode = newChildren[i];\n      const container = (\n        // oldVNode may be an errored async setup() component inside Suspense\n        // which will not have a mounted element\n        oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent\n        // of the Fragment itself so it can move its children.\n        (oldVNode.type === Fragment || // - In the case of different nodes, there is going to be a replacement\n        // which also requires the correct parent container\n        !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything.\n        oldVNode.shapeFlag & (6 | 64)) ? hostParentNode(oldVNode.el) : (\n          // In other cases, the parent container is not actually used so we\n          // just pass the block element here to avoid a DOM parentNode call.\n          fallbackContainer\n        )\n      );\n      patch(\n        oldVNode,\n        newVNode,\n        container,\n        null,\n        parentComponent,\n        parentSuspense,\n        isSVG,\n        slotScopeIds,\n        true\n      );\n    }\n  };\n  const patchProps = (el, vnode, oldProps, newProps, parentComponent, parentSuspense, isSVG) => {\n    if (oldProps !== newProps) {\n      if (oldProps !== EMPTY_OBJ) {\n        for (const key in oldProps) {\n          if (!isReservedProp(key) && !(key in newProps)) {\n            hostPatchProp(\n              el,\n              key,\n              oldProps[key],\n              null,\n              isSVG,\n              vnode.children,\n              parentComponent,\n              parentSuspense,\n              unmountChildren\n            );\n          }\n        }\n      }\n      for (const key in newProps) {\n        if (isReservedProp(key))\n          continue;\n        const next = newProps[key];\n        const prev = oldProps[key];\n        if (next !== prev && key !== \"value\") {\n          hostPatchProp(\n            el,\n            key,\n            prev,\n            next,\n            isSVG,\n            vnode.children,\n            parentComponent,\n            parentSuspense,\n            unmountChildren\n          );\n        }\n      }\n      if (\"value\" in newProps) {\n        hostPatchProp(el, \"value\", oldProps.value, newProps.value);\n      }\n    }\n  };\n  const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n    const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(\"\");\n    const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(\"\");\n    let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n    if (!!(process.env.NODE_ENV !== \"production\") && // #5523 dev root fragment may inherit directives\n    (isHmrUpdating || patchFlag & 2048)) {\n      patchFlag = 0;\n      optimized = false;\n      dynamicChildren = null;\n    }\n    if (fragmentSlotScopeIds) {\n      slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n    }\n    if (n1 == null) {\n      hostInsert(fragmentStartAnchor, container, anchor);\n      hostInsert(fragmentEndAnchor, container, anchor);\n      mountChildren(\n        n2.children,\n        container,\n        fragmentEndAnchor,\n        parentComponent,\n        parentSuspense,\n        isSVG,\n        slotScopeIds,\n        optimized\n      );\n    } else {\n      if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result\n      // of renderSlot() with no valid children\n      n1.dynamicChildren) {\n        patchBlockChildren(\n          n1.dynamicChildren,\n          dynamicChildren,\n          container,\n          parentComponent,\n          parentSuspense,\n          isSVG,\n          slotScopeIds\n        );\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          traverseStaticChildren(n1, n2);\n        } else if (\n          // #2080 if the stable fragment has a key, it's a <template v-for> that may\n          //  get moved around. Make sure all root level vnodes inherit el.\n          // #2134 or if it's a component root, it may also get moved around\n          // as the component is being moved.\n          n2.key != null || parentComponent && n2 === parentComponent.subTree\n        ) {\n          traverseStaticChildren(\n            n1,\n            n2,\n            true\n            /* shallow */\n          );\n        }\n      } else {\n        patchChildren(\n          n1,\n          n2,\n          container,\n          fragmentEndAnchor,\n          parentComponent,\n          parentSuspense,\n          isSVG,\n          slotScopeIds,\n          optimized\n        );\n      }\n    }\n  };\n  const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n    n2.slotScopeIds = slotScopeIds;\n    if (n1 == null) {\n      if (n2.shapeFlag & 512) {\n        parentComponent.ctx.activate(\n          n2,\n          container,\n          anchor,\n          isSVG,\n          optimized\n        );\n      } else {\n        mountComponent(\n          n2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          isSVG,\n          optimized\n        );\n      }\n    } else {\n      updateComponent(n1, n2, optimized);\n    }\n  };\n  const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, isSVG, optimized) => {\n    const instance = (initialVNode.component = createComponentInstance(\n      initialVNode,\n      parentComponent,\n      parentSuspense\n    ));\n    if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n      registerHMR(instance);\n    }\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      pushWarningContext(initialVNode);\n      startMeasure(instance, `mount`);\n    }\n    if (isKeepAlive(initialVNode)) {\n      instance.ctx.renderer = internals;\n    }\n    {\n      if (!!(process.env.NODE_ENV !== \"production\")) {\n        startMeasure(instance, `init`);\n      }\n      setupComponent(instance);\n      if (!!(process.env.NODE_ENV !== \"production\")) {\n        endMeasure(instance, `init`);\n      }\n    }\n    if (instance.asyncDep) {\n      parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect);\n      if (!initialVNode.el) {\n        const placeholder = instance.subTree = createVNode(Comment);\n        processCommentNode(null, placeholder, container, anchor);\n      }\n      return;\n    }\n    setupRenderEffect(\n      instance,\n      initialVNode,\n      container,\n      anchor,\n      parentSuspense,\n      isSVG,\n      optimized\n    );\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      popWarningContext();\n      endMeasure(instance, `mount`);\n    }\n  };\n  const updateComponent = (n1, n2, optimized) => {\n    const instance = n2.component = n1.component;\n    if (shouldUpdateComponent(n1, n2, optimized)) {\n      if (instance.asyncDep && !instance.asyncResolved) {\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          pushWarningContext(n2);\n        }\n        updateComponentPreRender(instance, n2, optimized);\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          popWarningContext();\n        }\n        return;\n      } else {\n        instance.next = n2;\n        invalidateJob(instance.update);\n        instance.update();\n      }\n    } else {\n      n2.el = n1.el;\n      instance.vnode = n2;\n    }\n  };\n  const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized) => {\n    const componentUpdateFn = () => {\n      if (!instance.isMounted) {\n        let vnodeHook;\n        const { el, props } = initialVNode;\n        const { bm, m, parent } = instance;\n        const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n        toggleRecurse(instance, false);\n        if (bm) {\n          invokeArrayFns(bm);\n        }\n        if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) {\n          invokeVNodeHook(vnodeHook, parent, initialVNode);\n        }\n        toggleRecurse(instance, true);\n        if (el && hydrateNode) {\n          const hydrateSubTree = () => {\n            if (!!(process.env.NODE_ENV !== \"production\")) {\n              startMeasure(instance, `render`);\n            }\n            instance.subTree = renderComponentRoot(instance);\n            if (!!(process.env.NODE_ENV !== \"production\")) {\n              endMeasure(instance, `render`);\n            }\n            if (!!(process.env.NODE_ENV !== \"production\")) {\n              startMeasure(instance, `hydrate`);\n            }\n            hydrateNode(\n              el,\n              instance.subTree,\n              instance,\n              parentSuspense,\n              null\n            );\n            if (!!(process.env.NODE_ENV !== \"production\")) {\n              endMeasure(instance, `hydrate`);\n            }\n          };\n          if (isAsyncWrapperVNode) {\n            initialVNode.type.__asyncLoader().then(\n              // note: we are moving the render call into an async callback,\n              // which means it won't track dependencies - but it's ok because\n              // a server-rendered async wrapper is already in resolved state\n              // and it will never need to change.\n              () => !instance.isUnmounted && hydrateSubTree()\n            );\n          } else {\n            hydrateSubTree();\n          }\n        } else {\n          if (!!(process.env.NODE_ENV !== \"production\")) {\n            startMeasure(instance, `render`);\n          }\n          const subTree = instance.subTree = renderComponentRoot(instance);\n          if (!!(process.env.NODE_ENV !== \"production\")) {\n            endMeasure(instance, `render`);\n          }\n          if (!!(process.env.NODE_ENV !== \"production\")) {\n            startMeasure(instance, `patch`);\n          }\n          patch(\n            null,\n            subTree,\n            container,\n            anchor,\n            instance,\n            parentSuspense,\n            isSVG\n          );\n          if (!!(process.env.NODE_ENV !== \"production\")) {\n            endMeasure(instance, `patch`);\n          }\n          initialVNode.el = subTree.el;\n        }\n        if (m) {\n          queuePostRenderEffect(m, parentSuspense);\n        }\n        if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) {\n          const scopedInitialVNode = initialVNode;\n          queuePostRenderEffect(\n            () => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode),\n            parentSuspense\n          );\n        }\n        if (initialVNode.shapeFlag & 256 || parent && isAsyncWrapper(parent.vnode) && parent.vnode.shapeFlag & 256) {\n          instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n        }\n        instance.isMounted = true;\n        if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n          devtoolsComponentAdded(instance);\n        }\n        initialVNode = container = anchor = null;\n      } else {\n        let { next, bu, u, parent, vnode } = instance;\n        let originNext = next;\n        let vnodeHook;\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          pushWarningContext(next || instance.vnode);\n        }\n        toggleRecurse(instance, false);\n        if (next) {\n          next.el = vnode.el;\n          updateComponentPreRender(instance, next, optimized);\n        } else {\n          next = vnode;\n        }\n        if (bu) {\n          invokeArrayFns(bu);\n        }\n        if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) {\n          invokeVNodeHook(vnodeHook, parent, next, vnode);\n        }\n        toggleRecurse(instance, true);\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          startMeasure(instance, `render`);\n        }\n        const nextTree = renderComponentRoot(instance);\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          endMeasure(instance, `render`);\n        }\n        const prevTree = instance.subTree;\n        instance.subTree = nextTree;\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          startMeasure(instance, `patch`);\n        }\n        patch(\n          prevTree,\n          nextTree,\n          // parent may have changed if it's in a teleport\n          hostParentNode(prevTree.el),\n          // anchor may have changed if it's in a fragment\n          getNextHostNode(prevTree),\n          instance,\n          parentSuspense,\n          isSVG\n        );\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          endMeasure(instance, `patch`);\n        }\n        next.el = nextTree.el;\n        if (originNext === null) {\n          updateHOCHostEl(instance, nextTree.el);\n        }\n        if (u) {\n          queuePostRenderEffect(u, parentSuspense);\n        }\n        if (vnodeHook = next.props && next.props.onVnodeUpdated) {\n          queuePostRenderEffect(\n            () => invokeVNodeHook(vnodeHook, parent, next, vnode),\n            parentSuspense\n          );\n        }\n        if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n          devtoolsComponentUpdated(instance);\n        }\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          popWarningContext();\n        }\n      }\n    };\n    const effect = instance.effect = new ReactiveEffect(\n      componentUpdateFn,\n      () => queueJob(update),\n      instance.scope\n      // track it in component's effect scope\n    );\n    const update = instance.update = () => effect.run();\n    update.id = instance.uid;\n    toggleRecurse(instance, true);\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      effect.onTrack = instance.rtc ? (e) => invokeArrayFns(instance.rtc, e) : void 0;\n      effect.onTrigger = instance.rtg ? (e) => invokeArrayFns(instance.rtg, e) : void 0;\n      update.ownerInstance = instance;\n    }\n    update();\n  };\n  const updateComponentPreRender = (instance, nextVNode, optimized) => {\n    nextVNode.component = instance;\n    const prevProps = instance.vnode.props;\n    instance.vnode = nextVNode;\n    instance.next = null;\n    updateProps(instance, nextVNode.props, prevProps, optimized);\n    updateSlots(instance, nextVNode.children, optimized);\n    pauseTracking();\n    flushPreFlushCbs();\n    resetTracking();\n  };\n  const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized = false) => {\n    const c1 = n1 && n1.children;\n    const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n    const c2 = n2.children;\n    const { patchFlag, shapeFlag } = n2;\n    if (patchFlag > 0) {\n      if (patchFlag & 128) {\n        patchKeyedChildren(\n          c1,\n          c2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          isSVG,\n          slotScopeIds,\n          optimized\n        );\n        return;\n      } else if (patchFlag & 256) {\n        patchUnkeyedChildren(\n          c1,\n          c2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          isSVG,\n          slotScopeIds,\n          optimized\n        );\n        return;\n      }\n    }\n    if (shapeFlag & 8) {\n      if (prevShapeFlag & 16) {\n        unmountChildren(c1, parentComponent, parentSuspense);\n      }\n      if (c2 !== c1) {\n        hostSetElementText(container, c2);\n      }\n    } else {\n      if (prevShapeFlag & 16) {\n        if (shapeFlag & 16) {\n          patchKeyedChildren(\n            c1,\n            c2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            isSVG,\n            slotScopeIds,\n            optimized\n          );\n        } else {\n          unmountChildren(c1, parentComponent, parentSuspense, true);\n        }\n      } else {\n        if (prevShapeFlag & 8) {\n          hostSetElementText(container, \"\");\n        }\n        if (shapeFlag & 16) {\n          mountChildren(\n            c2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            isSVG,\n            slotScopeIds,\n            optimized\n          );\n        }\n      }\n    }\n  };\n  const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n    c1 = c1 || EMPTY_ARR;\n    c2 = c2 || EMPTY_ARR;\n    const oldLength = c1.length;\n    const newLength = c2.length;\n    const commonLength = Math.min(oldLength, newLength);\n    let i;\n    for (i = 0; i < commonLength; i++) {\n      const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n      patch(\n        c1[i],\n        nextChild,\n        container,\n        null,\n        parentComponent,\n        parentSuspense,\n        isSVG,\n        slotScopeIds,\n        optimized\n      );\n    }\n    if (oldLength > newLength) {\n      unmountChildren(\n        c1,\n        parentComponent,\n        parentSuspense,\n        true,\n        false,\n        commonLength\n      );\n    } else {\n      mountChildren(\n        c2,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        isSVG,\n        slotScopeIds,\n        optimized,\n        commonLength\n      );\n    }\n  };\n  const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n    let i = 0;\n    const l2 = c2.length;\n    let e1 = c1.length - 1;\n    let e2 = l2 - 1;\n    while (i <= e1 && i <= e2) {\n      const n1 = c1[i];\n      const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n      if (isSameVNodeType(n1, n2)) {\n        patch(\n          n1,\n          n2,\n          container,\n          null,\n          parentComponent,\n          parentSuspense,\n          isSVG,\n          slotScopeIds,\n          optimized\n        );\n      } else {\n        break;\n      }\n      i++;\n    }\n    while (i <= e1 && i <= e2) {\n      const n1 = c1[e1];\n      const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]);\n      if (isSameVNodeType(n1, n2)) {\n        patch(\n          n1,\n          n2,\n          container,\n          null,\n          parentComponent,\n          parentSuspense,\n          isSVG,\n          slotScopeIds,\n          optimized\n        );\n      } else {\n        break;\n      }\n      e1--;\n      e2--;\n    }\n    if (i > e1) {\n      if (i <= e2) {\n        const nextPos = e2 + 1;\n        const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n        while (i <= e2) {\n          patch(\n            null,\n            c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]),\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            isSVG,\n            slotScopeIds,\n            optimized\n          );\n          i++;\n        }\n      }\n    } else if (i > e2) {\n      while (i <= e1) {\n        unmount(c1[i], parentComponent, parentSuspense, true);\n        i++;\n      }\n    } else {\n      const s1 = i;\n      const s2 = i;\n      const keyToNewIndexMap = /* @__PURE__ */ new Map();\n      for (i = s2; i <= e2; i++) {\n        const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n        if (nextChild.key != null) {\n          if (!!(process.env.NODE_ENV !== \"production\") && keyToNewIndexMap.has(nextChild.key)) {\n            warn(\n              `Duplicate keys found during update:`,\n              JSON.stringify(nextChild.key),\n              `Make sure keys are unique.`\n            );\n          }\n          keyToNewIndexMap.set(nextChild.key, i);\n        }\n      }\n      let j;\n      let patched = 0;\n      const toBePatched = e2 - s2 + 1;\n      let moved = false;\n      let maxNewIndexSoFar = 0;\n      const newIndexToOldIndexMap = new Array(toBePatched);\n      for (i = 0; i < toBePatched; i++)\n        newIndexToOldIndexMap[i] = 0;\n      for (i = s1; i <= e1; i++) {\n        const prevChild = c1[i];\n        if (patched >= toBePatched) {\n          unmount(prevChild, parentComponent, parentSuspense, true);\n          continue;\n        }\n        let newIndex;\n        if (prevChild.key != null) {\n          newIndex = keyToNewIndexMap.get(prevChild.key);\n        } else {\n          for (j = s2; j <= e2; j++) {\n            if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) {\n              newIndex = j;\n              break;\n            }\n          }\n        }\n        if (newIndex === void 0) {\n          unmount(prevChild, parentComponent, parentSuspense, true);\n        } else {\n          newIndexToOldIndexMap[newIndex - s2] = i + 1;\n          if (newIndex >= maxNewIndexSoFar) {\n            maxNewIndexSoFar = newIndex;\n          } else {\n            moved = true;\n          }\n          patch(\n            prevChild,\n            c2[newIndex],\n            container,\n            null,\n            parentComponent,\n            parentSuspense,\n            isSVG,\n            slotScopeIds,\n            optimized\n          );\n          patched++;\n        }\n      }\n      const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR;\n      j = increasingNewIndexSequence.length - 1;\n      for (i = toBePatched - 1; i >= 0; i--) {\n        const nextIndex = s2 + i;\n        const nextChild = c2[nextIndex];\n        const anchor = nextIndex + 1 < l2 ? c2[nextIndex + 1].el : parentAnchor;\n        if (newIndexToOldIndexMap[i] === 0) {\n          patch(\n            null,\n            nextChild,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            isSVG,\n            slotScopeIds,\n            optimized\n          );\n        } else if (moved) {\n          if (j < 0 || i !== increasingNewIndexSequence[j]) {\n            move(nextChild, container, anchor, 2);\n          } else {\n            j--;\n          }\n        }\n      }\n    }\n  };\n  const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n    const { el, type, transition, children, shapeFlag } = vnode;\n    if (shapeFlag & 6) {\n      move(vnode.component.subTree, container, anchor, moveType);\n      return;\n    }\n    if (shapeFlag & 128) {\n      vnode.suspense.move(container, anchor, moveType);\n      return;\n    }\n    if (shapeFlag & 64) {\n      type.move(vnode, container, anchor, internals);\n      return;\n    }\n    if (type === Fragment) {\n      hostInsert(el, container, anchor);\n      for (let i = 0; i < children.length; i++) {\n        move(children[i], container, anchor, moveType);\n      }\n      hostInsert(vnode.anchor, container, anchor);\n      return;\n    }\n    if (type === Static) {\n      moveStaticNode(vnode, container, anchor);\n      return;\n    }\n    const needTransition = moveType !== 2 && shapeFlag & 1 && transition;\n    if (needTransition) {\n      if (moveType === 0) {\n        transition.beforeEnter(el);\n        hostInsert(el, container, anchor);\n        queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n      } else {\n        const { leave, delayLeave, afterLeave } = transition;\n        const remove2 = () => hostInsert(el, container, anchor);\n        const performLeave = () => {\n          leave(el, () => {\n            remove2();\n            afterLeave && afterLeave();\n          });\n        };\n        if (delayLeave) {\n          delayLeave(el, remove2, performLeave);\n        } else {\n          performLeave();\n        }\n      }\n    } else {\n      hostInsert(el, container, anchor);\n    }\n  };\n  const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n    const {\n      type,\n      props,\n      ref,\n      children,\n      dynamicChildren,\n      shapeFlag,\n      patchFlag,\n      dirs\n    } = vnode;\n    if (ref != null) {\n      setRef(ref, null, parentSuspense, vnode, true);\n    }\n    if (shapeFlag & 256) {\n      parentComponent.ctx.deactivate(vnode);\n      return;\n    }\n    const shouldInvokeDirs = shapeFlag & 1 && dirs;\n    const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n    let vnodeHook;\n    if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n      invokeVNodeHook(vnodeHook, parentComponent, vnode);\n    }\n    if (shapeFlag & 6) {\n      unmountComponent(vnode.component, parentSuspense, doRemove);\n    } else {\n      if (shapeFlag & 128) {\n        vnode.suspense.unmount(parentSuspense, doRemove);\n        return;\n      }\n      if (shouldInvokeDirs) {\n        invokeDirectiveHook(vnode, null, parentComponent, \"beforeUnmount\");\n      }\n      if (shapeFlag & 64) {\n        vnode.type.remove(\n          vnode,\n          parentComponent,\n          parentSuspense,\n          optimized,\n          internals,\n          doRemove\n        );\n      } else if (dynamicChildren && // #1153: fast path should not be taken for non-stable (v-for) fragments\n      (type !== Fragment || patchFlag > 0 && patchFlag & 64)) {\n        unmountChildren(\n          dynamicChildren,\n          parentComponent,\n          parentSuspense,\n          false,\n          true\n        );\n      } else if (type === Fragment && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) {\n        unmountChildren(children, parentComponent, parentSuspense);\n      }\n      if (doRemove) {\n        remove(vnode);\n      }\n    }\n    if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) {\n      queuePostRenderEffect(() => {\n        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n        shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, \"unmounted\");\n      }, parentSuspense);\n    }\n  };\n  const remove = (vnode) => {\n    const { type, el, anchor, transition } = vnode;\n    if (type === Fragment) {\n      if (!!(process.env.NODE_ENV !== \"production\") && vnode.patchFlag > 0 && vnode.patchFlag & 2048 && transition && !transition.persisted) {\n        vnode.children.forEach((child) => {\n          if (child.type === Comment) {\n            hostRemove(child.el);\n          } else {\n            remove(child);\n          }\n        });\n      } else {\n        removeFragment(el, anchor);\n      }\n      return;\n    }\n    if (type === Static) {\n      removeStaticNode(vnode);\n      return;\n    }\n    const performRemove = () => {\n      hostRemove(el);\n      if (transition && !transition.persisted && transition.afterLeave) {\n        transition.afterLeave();\n      }\n    };\n    if (vnode.shapeFlag & 1 && transition && !transition.persisted) {\n      const { leave, delayLeave } = transition;\n      const performLeave = () => leave(el, performRemove);\n      if (delayLeave) {\n        delayLeave(vnode.el, performRemove, performLeave);\n      } else {\n        performLeave();\n      }\n    } else {\n      performRemove();\n    }\n  };\n  const removeFragment = (cur, end) => {\n    let next;\n    while (cur !== end) {\n      next = hostNextSibling(cur);\n      hostRemove(cur);\n      cur = next;\n    }\n    hostRemove(end);\n  };\n  const unmountComponent = (instance, parentSuspense, doRemove) => {\n    if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n      unregisterHMR(instance);\n    }\n    const { bum, scope, update, subTree, um } = instance;\n    if (bum) {\n      invokeArrayFns(bum);\n    }\n    scope.stop();\n    if (update) {\n      update.active = false;\n      unmount(subTree, instance, parentSuspense, doRemove);\n    }\n    if (um) {\n      queuePostRenderEffect(um, parentSuspense);\n    }\n    queuePostRenderEffect(() => {\n      instance.isUnmounted = true;\n    }, parentSuspense);\n    if (parentSuspense && parentSuspense.pendingBranch && !parentSuspense.isUnmounted && instance.asyncDep && !instance.asyncResolved && instance.suspenseId === parentSuspense.pendingId) {\n      parentSuspense.deps--;\n      if (parentSuspense.deps === 0) {\n        parentSuspense.resolve();\n      }\n    }\n    if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n      devtoolsComponentRemoved(instance);\n    }\n  };\n  const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n    for (let i = start; i < children.length; i++) {\n      unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n    }\n  };\n  const getNextHostNode = (vnode) => {\n    if (vnode.shapeFlag & 6) {\n      return getNextHostNode(vnode.component.subTree);\n    }\n    if (vnode.shapeFlag & 128) {\n      return vnode.suspense.next();\n    }\n    return hostNextSibling(vnode.anchor || vnode.el);\n  };\n  const render = (vnode, container, isSVG) => {\n    if (vnode == null) {\n      if (container._vnode) {\n        unmount(container._vnode, null, null, true);\n      }\n    } else {\n      patch(container._vnode || null, vnode, container, null, null, null, isSVG);\n    }\n    flushPreFlushCbs();\n    flushPostFlushCbs();\n    container._vnode = vnode;\n  };\n  const internals = {\n    p: patch,\n    um: unmount,\n    m: move,\n    r: remove,\n    mt: mountComponent,\n    mc: mountChildren,\n    pc: patchChildren,\n    pbc: patchBlockChildren,\n    n: getNextHostNode,\n    o: options\n  };\n  let hydrate;\n  let hydrateNode;\n  if (createHydrationFns) {\n    [hydrate, hydrateNode] = createHydrationFns(\n      internals\n    );\n  }\n  return {\n    render,\n    hydrate,\n    createApp: createAppAPI(render, hydrate)\n  };\n}\nfunction toggleRecurse({ effect, update }, allowed) {\n  effect.allowRecurse = update.allowRecurse = allowed;\n}\nfunction traverseStaticChildren(n1, n2, shallow = false) {\n  const ch1 = n1.children;\n  const ch2 = n2.children;\n  if (isArray(ch1) && isArray(ch2)) {\n    for (let i = 0; i < ch1.length; i++) {\n      const c1 = ch1[i];\n      let c2 = ch2[i];\n      if (c2.shapeFlag & 1 && !c2.dynamicChildren) {\n        if (c2.patchFlag <= 0 || c2.patchFlag === 32) {\n          c2 = ch2[i] = cloneIfMounted(ch2[i]);\n          c2.el = c1.el;\n        }\n        if (!shallow)\n          traverseStaticChildren(c1, c2);\n      }\n      if (c2.type === Text) {\n        c2.el = c1.el;\n      }\n      if (!!(process.env.NODE_ENV !== \"production\") && c2.type === Comment && !c2.el) {\n        c2.el = c1.el;\n      }\n    }\n  }\n}\nfunction getSequence(arr) {\n  const p = arr.slice();\n  const result = [0];\n  let i, j, u, v, c;\n  const len = arr.length;\n  for (i = 0; i < len; i++) {\n    const arrI = arr[i];\n    if (arrI !== 0) {\n      j = result[result.length - 1];\n      if (arr[j] < arrI) {\n        p[i] = j;\n        result.push(i);\n        continue;\n      }\n      u = 0;\n      v = result.length - 1;\n      while (u < v) {\n        c = u + v >> 1;\n        if (arr[result[c]] < arrI) {\n          u = c + 1;\n        } else {\n          v = c;\n        }\n      }\n      if (arrI < arr[result[u]]) {\n        if (u > 0) {\n          p[i] = result[u - 1];\n        }\n        result[u] = i;\n      }\n    }\n  }\n  u = result.length;\n  v = result[u - 1];\n  while (u-- > 0) {\n    result[u] = v;\n    v = p[v];\n  }\n  return result;\n}\n\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst resolveTarget = (props, select) => {\n  const targetSelector = props && props.to;\n  if (isString(targetSelector)) {\n    if (!select) {\n      !!(process.env.NODE_ENV !== \"production\") && warn(\n        `Current renderer does not support string target for Teleports. (missing querySelector renderer option)`\n      );\n      return null;\n    } else {\n      const target = select(targetSelector);\n      if (!target) {\n        !!(process.env.NODE_ENV !== \"production\") && warn(\n          `Failed to locate Teleport target with selector \"${targetSelector}\". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`\n        );\n      }\n      return target;\n    }\n  } else {\n    if (!!(process.env.NODE_ENV !== \"production\") && !targetSelector && !isTeleportDisabled(props)) {\n      warn(`Invalid Teleport target: ${targetSelector}`);\n    }\n    return targetSelector;\n  }\n};\nconst TeleportImpl = {\n  __isTeleport: true,\n  process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals) {\n    const {\n      mc: mountChildren,\n      pc: patchChildren,\n      pbc: patchBlockChildren,\n      o: { insert, querySelector, createText, createComment }\n    } = internals;\n    const disabled = isTeleportDisabled(n2.props);\n    let { shapeFlag, children, dynamicChildren } = n2;\n    if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n      optimized = false;\n      dynamicChildren = null;\n    }\n    if (n1 == null) {\n      const placeholder = n2.el = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport start\") : createText(\"\");\n      const mainAnchor = n2.anchor = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport end\") : createText(\"\");\n      insert(placeholder, container, anchor);\n      insert(mainAnchor, container, anchor);\n      const target = n2.target = resolveTarget(n2.props, querySelector);\n      const targetAnchor = n2.targetAnchor = createText(\"\");\n      if (target) {\n        insert(targetAnchor, target);\n        isSVG = isSVG || isTargetSVG(target);\n      } else if (!!(process.env.NODE_ENV !== \"production\") && !disabled) {\n        warn(\"Invalid Teleport target on mount:\", target, `(${typeof target})`);\n      }\n      const mount = (container2, anchor2) => {\n        if (shapeFlag & 16) {\n          mountChildren(\n            children,\n            container2,\n            anchor2,\n            parentComponent,\n            parentSuspense,\n            isSVG,\n            slotScopeIds,\n            optimized\n          );\n        }\n      };\n      if (disabled) {\n        mount(container, mainAnchor);\n      } else if (target) {\n        mount(target, targetAnchor);\n      }\n    } else {\n      n2.el = n1.el;\n      const mainAnchor = n2.anchor = n1.anchor;\n      const target = n2.target = n1.target;\n      const targetAnchor = n2.targetAnchor = n1.targetAnchor;\n      const wasDisabled = isTeleportDisabled(n1.props);\n      const currentContainer = wasDisabled ? container : target;\n      const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n      isSVG = isSVG || isTargetSVG(target);\n      if (dynamicChildren) {\n        patchBlockChildren(\n          n1.dynamicChildren,\n          dynamicChildren,\n          currentContainer,\n          parentComponent,\n          parentSuspense,\n          isSVG,\n          slotScopeIds\n        );\n        traverseStaticChildren(n1, n2, true);\n      } else if (!optimized) {\n        patchChildren(\n          n1,\n          n2,\n          currentContainer,\n          currentAnchor,\n          parentComponent,\n          parentSuspense,\n          isSVG,\n          slotScopeIds,\n          false\n        );\n      }\n      if (disabled) {\n        if (!wasDisabled) {\n          moveTeleport(\n            n2,\n            container,\n            mainAnchor,\n            internals,\n            1\n          );\n        }\n      } else {\n        if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n          const nextTarget = n2.target = resolveTarget(\n            n2.props,\n            querySelector\n          );\n          if (nextTarget) {\n            moveTeleport(\n              n2,\n              nextTarget,\n              null,\n              internals,\n              0\n            );\n          } else if (!!(process.env.NODE_ENV !== \"production\")) {\n            warn(\n              \"Invalid Teleport target on update:\",\n              target,\n              `(${typeof target})`\n            );\n          }\n        } else if (wasDisabled) {\n          moveTeleport(\n            n2,\n            target,\n            targetAnchor,\n            internals,\n            1\n          );\n        }\n      }\n    }\n    updateCssVars(n2);\n  },\n  remove(vnode, parentComponent, parentSuspense, optimized, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n    const { shapeFlag, children, anchor, targetAnchor, target, props } = vnode;\n    if (target) {\n      hostRemove(targetAnchor);\n    }\n    if (doRemove || !isTeleportDisabled(props)) {\n      hostRemove(anchor);\n      if (shapeFlag & 16) {\n        for (let i = 0; i < children.length; i++) {\n          const child = children[i];\n          unmount(\n            child,\n            parentComponent,\n            parentSuspense,\n            true,\n            !!child.dynamicChildren\n          );\n        }\n      }\n    }\n  },\n  move: moveTeleport,\n  hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {\n  if (moveType === 0) {\n    insert(vnode.targetAnchor, container, parentAnchor);\n  }\n  const { el, anchor, shapeFlag, children, props } = vnode;\n  const isReorder = moveType === 2;\n  if (isReorder) {\n    insert(el, container, parentAnchor);\n  }\n  if (!isReorder || isTeleportDisabled(props)) {\n    if (shapeFlag & 16) {\n      for (let i = 0; i < children.length; i++) {\n        move(\n          children[i],\n          container,\n          parentAnchor,\n          2\n        );\n      }\n    }\n  }\n  if (isReorder) {\n    insert(anchor, container, parentAnchor);\n  }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {\n  o: { nextSibling, parentNode, querySelector }\n}, hydrateChildren) {\n  const target = vnode.target = resolveTarget(\n    vnode.props,\n    querySelector\n  );\n  if (target) {\n    const targetNode = target._lpa || target.firstChild;\n    if (vnode.shapeFlag & 16) {\n      if (isTeleportDisabled(vnode.props)) {\n        vnode.anchor = hydrateChildren(\n          nextSibling(node),\n          vnode,\n          parentNode(node),\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n        vnode.targetAnchor = targetNode;\n      } else {\n        vnode.anchor = nextSibling(node);\n        let targetAnchor = targetNode;\n        while (targetAnchor) {\n          targetAnchor = nextSibling(targetAnchor);\n          if (targetAnchor && targetAnchor.nodeType === 8 && targetAnchor.data === \"teleport anchor\") {\n            vnode.targetAnchor = targetAnchor;\n            target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n            break;\n          }\n        }\n        hydrateChildren(\n          targetNode,\n          vnode,\n          target,\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n      }\n    }\n    updateCssVars(vnode);\n  }\n  return vnode.anchor && nextSibling(vnode.anchor);\n}\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode) {\n  const ctx = vnode.ctx;\n  if (ctx && ctx.ut) {\n    let node = vnode.children[0].el;\n    while (node !== vnode.targetAnchor) {\n      if (node.nodeType === 1)\n        node.setAttribute(\"data-v-owner\", ctx.uid);\n      node = node.nextSibling;\n    }\n    ctx.ut();\n  }\n}\n\nconst Fragment = Symbol.for(\"v-fgt\");\nconst Text = Symbol.for(\"v-txt\");\nconst Comment = Symbol.for(\"v-cmt\");\nconst Static = Symbol.for(\"v-stc\");\nconst blockStack = [];\nlet currentBlock = null;\nfunction openBlock(disableTracking = false) {\n  blockStack.push(currentBlock = disableTracking ? null : []);\n}\nfunction closeBlock() {\n  blockStack.pop();\n  currentBlock = blockStack[blockStack.length - 1] || null;\n}\nlet isBlockTreeEnabled = 1;\nfunction setBlockTracking(value) {\n  isBlockTreeEnabled += value;\n}\nfunction setupBlock(vnode) {\n  vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;\n  closeBlock();\n  if (isBlockTreeEnabled > 0 && currentBlock) {\n    currentBlock.push(vnode);\n  }\n  return vnode;\n}\nfunction createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\n  return setupBlock(\n    createBaseVNode(\n      type,\n      props,\n      children,\n      patchFlag,\n      dynamicProps,\n      shapeFlag,\n      true\n      /* isBlock */\n    )\n  );\n}\nfunction createBlock(type, props, children, patchFlag, dynamicProps) {\n  return setupBlock(\n    createVNode(\n      type,\n      props,\n      children,\n      patchFlag,\n      dynamicProps,\n      true\n      /* isBlock: prevent a block from tracking itself */\n    )\n  );\n}\nfunction isVNode(value) {\n  return value ? value.__v_isVNode === true : false;\n}\nfunction isSameVNodeType(n1, n2) {\n  if (!!(process.env.NODE_ENV !== \"production\") && n2.shapeFlag & 6 && hmrDirtyComponents.has(n2.type)) {\n    n1.shapeFlag &= ~256;\n    n2.shapeFlag &= ~512;\n    return false;\n  }\n  return n1.type === n2.type && n1.key === n2.key;\n}\nlet vnodeArgsTransformer;\nfunction transformVNodeArgs(transformer) {\n  vnodeArgsTransformer = transformer;\n}\nconst createVNodeWithArgsTransform = (...args) => {\n  return _createVNode(\n    ...vnodeArgsTransformer ? vnodeArgsTransformer(args, currentRenderingInstance) : args\n  );\n};\nconst InternalObjectKey = `__vInternal`;\nconst normalizeKey = ({ key }) => key != null ? key : null;\nconst normalizeRef = ({\n  ref,\n  ref_key,\n  ref_for\n}) => {\n  if (typeof ref === \"number\") {\n    ref = \"\" + ref;\n  }\n  return ref != null ? isString(ref) || isRef(ref) || isFunction(ref) ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for } : ref : null;\n};\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1, isBlockNode = false, needFullChildrenNormalization = false) {\n  const vnode = {\n    __v_isVNode: true,\n    __v_skip: true,\n    type,\n    props,\n    key: props && normalizeKey(props),\n    ref: props && normalizeRef(props),\n    scopeId: currentScopeId,\n    slotScopeIds: null,\n    children,\n    component: null,\n    suspense: null,\n    ssContent: null,\n    ssFallback: null,\n    dirs: null,\n    transition: null,\n    el: null,\n    anchor: null,\n    target: null,\n    targetAnchor: null,\n    staticCount: 0,\n    shapeFlag,\n    patchFlag,\n    dynamicProps,\n    dynamicChildren: null,\n    appContext: null,\n    ctx: currentRenderingInstance\n  };\n  if (needFullChildrenNormalization) {\n    normalizeChildren(vnode, children);\n    if (shapeFlag & 128) {\n      type.normalize(vnode);\n    }\n  } else if (children) {\n    vnode.shapeFlag |= isString(children) ? 8 : 16;\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") && vnode.key !== vnode.key) {\n    warn(`VNode created with invalid key (NaN). VNode type:`, vnode.type);\n  }\n  if (isBlockTreeEnabled > 0 && // avoid a block node from tracking itself\n  !isBlockNode && // has current parent block\n  currentBlock && // presence of a patch flag indicates this node needs patching on updates.\n  // component nodes also should always be patched, because even if the\n  // component doesn't need to update, it needs to persist the instance on to\n  // the next vnode so that it can be properly unmounted later.\n  (vnode.patchFlag > 0 || shapeFlag & 6) && // the EVENTS flag is only for hydration and if it is the only flag, the\n  // vnode should not be considered dynamic due to handler caching.\n  vnode.patchFlag !== 32) {\n    currentBlock.push(vnode);\n  }\n  return vnode;\n}\nconst createVNode = !!(process.env.NODE_ENV !== \"production\") ? createVNodeWithArgsTransform : _createVNode;\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n  if (!type || type === NULL_DYNAMIC_COMPONENT) {\n    if (!!(process.env.NODE_ENV !== \"production\") && !type) {\n      warn(`Invalid vnode type when creating vnode: ${type}.`);\n    }\n    type = Comment;\n  }\n  if (isVNode(type)) {\n    const cloned = cloneVNode(\n      type,\n      props,\n      true\n      /* mergeRef: true */\n    );\n    if (children) {\n      normalizeChildren(cloned, children);\n    }\n    if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n      if (cloned.shapeFlag & 6) {\n        currentBlock[currentBlock.indexOf(type)] = cloned;\n      } else {\n        currentBlock.push(cloned);\n      }\n    }\n    cloned.patchFlag |= -2;\n    return cloned;\n  }\n  if (isClassComponent(type)) {\n    type = type.__vccOpts;\n  }\n  if (props) {\n    props = guardReactiveProps(props);\n    let { class: klass, style } = props;\n    if (klass && !isString(klass)) {\n      props.class = normalizeClass(klass);\n    }\n    if (isObject(style)) {\n      if (isProxy(style) && !isArray(style)) {\n        style = extend({}, style);\n      }\n      props.style = normalizeStyle(style);\n    }\n  }\n  const shapeFlag = isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : isObject(type) ? 4 : isFunction(type) ? 2 : 0;\n  if (!!(process.env.NODE_ENV !== \"production\") && shapeFlag & 4 && isProxy(type)) {\n    type = toRaw(type);\n    warn(\n      `Vue received a Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with \\`markRaw\\` or using \\`shallowRef\\` instead of \\`ref\\`.`,\n      `\nComponent that was made reactive: `,\n      type\n    );\n  }\n  return createBaseVNode(\n    type,\n    props,\n    children,\n    patchFlag,\n    dynamicProps,\n    shapeFlag,\n    isBlockNode,\n    true\n  );\n}\nfunction guardReactiveProps(props) {\n  if (!props)\n    return null;\n  return isProxy(props) || InternalObjectKey in props ? extend({}, props) : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false) {\n  const { props, ref, patchFlag, children } = vnode;\n  const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n  const cloned = {\n    __v_isVNode: true,\n    __v_skip: true,\n    type: vnode.type,\n    props: mergedProps,\n    key: mergedProps && normalizeKey(mergedProps),\n    ref: extraProps && extraProps.ref ? (\n      // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n      // if the vnode itself already has a ref, cloneVNode will need to merge\n      // the refs so the single vnode can be set on multiple refs\n      mergeRef && ref ? isArray(ref) ? ref.concat(normalizeRef(extraProps)) : [ref, normalizeRef(extraProps)] : normalizeRef(extraProps)\n    ) : ref,\n    scopeId: vnode.scopeId,\n    slotScopeIds: vnode.slotScopeIds,\n    children: !!(process.env.NODE_ENV !== \"production\") && patchFlag === -1 && isArray(children) ? children.map(deepCloneVNode) : children,\n    target: vnode.target,\n    targetAnchor: vnode.targetAnchor,\n    staticCount: vnode.staticCount,\n    shapeFlag: vnode.shapeFlag,\n    // if the vnode is cloned with extra props, we can no longer assume its\n    // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n    // note: preserve flag for fragments since they use the flag for children\n    // fast paths only.\n    patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag,\n    dynamicProps: vnode.dynamicProps,\n    dynamicChildren: vnode.dynamicChildren,\n    appContext: vnode.appContext,\n    dirs: vnode.dirs,\n    transition: vnode.transition,\n    // These should technically only be non-null on mounted VNodes. However,\n    // they *should* be copied for kept-alive vnodes. So we just always copy\n    // them since them being non-null during a mount doesn't affect the logic as\n    // they will simply be overwritten.\n    component: vnode.component,\n    suspense: vnode.suspense,\n    ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n    ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n    el: vnode.el,\n    anchor: vnode.anchor,\n    ctx: vnode.ctx,\n    ce: vnode.ce\n  };\n  return cloned;\n}\nfunction deepCloneVNode(vnode) {\n  const cloned = cloneVNode(vnode);\n  if (isArray(vnode.children)) {\n    cloned.children = vnode.children.map(deepCloneVNode);\n  }\n  return cloned;\n}\nfunction createTextVNode(text = \" \", flag = 0) {\n  return createVNode(Text, null, text, flag);\n}\nfunction createStaticVNode(content, numberOfNodes) {\n  const vnode = createVNode(Static, null, content);\n  vnode.staticCount = numberOfNodes;\n  return vnode;\n}\nfunction createCommentVNode(text = \"\", asBlock = false) {\n  return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text);\n}\nfunction normalizeVNode(child) {\n  if (child == null || typeof child === \"boolean\") {\n    return createVNode(Comment);\n  } else if (isArray(child)) {\n    return createVNode(\n      Fragment,\n      null,\n      // #3666, avoid reference pollution when reusing vnode\n      child.slice()\n    );\n  } else if (typeof child === \"object\") {\n    return cloneIfMounted(child);\n  } else {\n    return createVNode(Text, null, String(child));\n  }\n}\nfunction cloneIfMounted(child) {\n  return child.el === null && child.patchFlag !== -1 || child.memo ? child : cloneVNode(child);\n}\nfunction normalizeChildren(vnode, children) {\n  let type = 0;\n  const { shapeFlag } = vnode;\n  if (children == null) {\n    children = null;\n  } else if (isArray(children)) {\n    type = 16;\n  } else if (typeof children === \"object\") {\n    if (shapeFlag & (1 | 64)) {\n      const slot = children.default;\n      if (slot) {\n        slot._c && (slot._d = false);\n        normalizeChildren(vnode, slot());\n        slot._c && (slot._d = true);\n      }\n      return;\n    } else {\n      type = 32;\n      const slotFlag = children._;\n      if (!slotFlag && !(InternalObjectKey in children)) {\n        children._ctx = currentRenderingInstance;\n      } else if (slotFlag === 3 && currentRenderingInstance) {\n        if (currentRenderingInstance.slots._ === 1) {\n          children._ = 1;\n        } else {\n          children._ = 2;\n          vnode.patchFlag |= 1024;\n        }\n      }\n    }\n  } else if (isFunction(children)) {\n    children = { default: children, _ctx: currentRenderingInstance };\n    type = 32;\n  } else {\n    children = String(children);\n    if (shapeFlag & 64) {\n      type = 16;\n      children = [createTextVNode(children)];\n    } else {\n      type = 8;\n    }\n  }\n  vnode.children = children;\n  vnode.shapeFlag |= type;\n}\nfunction mergeProps(...args) {\n  const ret = {};\n  for (let i = 0; i < args.length; i++) {\n    const toMerge = args[i];\n    for (const key in toMerge) {\n      if (key === \"class\") {\n        if (ret.class !== toMerge.class) {\n          ret.class = normalizeClass([ret.class, toMerge.class]);\n        }\n      } else if (key === \"style\") {\n        ret.style = normalizeStyle([ret.style, toMerge.style]);\n      } else if (isOn(key)) {\n        const existing = ret[key];\n        const incoming = toMerge[key];\n        if (incoming && existing !== incoming && !(isArray(existing) && existing.includes(incoming))) {\n          ret[key] = existing ? [].concat(existing, incoming) : incoming;\n        }\n      } else if (key !== \"\") {\n        ret[key] = toMerge[key];\n      }\n    }\n  }\n  return ret;\n}\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n  callWithAsyncErrorHandling(hook, instance, 7, [\n    vnode,\n    prevVNode\n  ]);\n}\n\nconst emptyAppContext = createAppContext();\nlet uid = 0;\nfunction createComponentInstance(vnode, parent, suspense) {\n  const type = vnode.type;\n  const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n  const instance = {\n    uid: uid++,\n    vnode,\n    type,\n    parent,\n    appContext,\n    root: null,\n    // to be immediately set\n    next: null,\n    subTree: null,\n    // will be set synchronously right after creation\n    effect: null,\n    update: null,\n    // will be set synchronously right after creation\n    scope: new EffectScope(\n      true\n      /* detached */\n    ),\n    render: null,\n    proxy: null,\n    exposed: null,\n    exposeProxy: null,\n    withProxy: null,\n    provides: parent ? parent.provides : Object.create(appContext.provides),\n    accessCache: null,\n    renderCache: [],\n    // local resolved assets\n    components: null,\n    directives: null,\n    // resolved props and emits options\n    propsOptions: normalizePropsOptions(type, appContext),\n    emitsOptions: normalizeEmitsOptions(type, appContext),\n    // emit\n    emit: null,\n    // to be set immediately\n    emitted: null,\n    // props default value\n    propsDefaults: EMPTY_OBJ,\n    // inheritAttrs\n    inheritAttrs: type.inheritAttrs,\n    // state\n    ctx: EMPTY_OBJ,\n    data: EMPTY_OBJ,\n    props: EMPTY_OBJ,\n    attrs: EMPTY_OBJ,\n    slots: EMPTY_OBJ,\n    refs: EMPTY_OBJ,\n    setupState: EMPTY_OBJ,\n    setupContext: null,\n    attrsProxy: null,\n    slotsProxy: null,\n    // suspense related\n    suspense,\n    suspenseId: suspense ? suspense.pendingId : 0,\n    asyncDep: null,\n    asyncResolved: false,\n    // lifecycle hooks\n    // not using enums here because it results in computed properties\n    isMounted: false,\n    isUnmounted: false,\n    isDeactivated: false,\n    bc: null,\n    c: null,\n    bm: null,\n    m: null,\n    bu: null,\n    u: null,\n    um: null,\n    bum: null,\n    da: null,\n    a: null,\n    rtg: null,\n    rtc: null,\n    ec: null,\n    sp: null\n  };\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    instance.ctx = createDevRenderContext(instance);\n  } else {\n    instance.ctx = { _: instance };\n  }\n  instance.root = parent ? parent.root : instance;\n  instance.emit = emit.bind(null, instance);\n  if (vnode.ce) {\n    vnode.ce(instance);\n  }\n  return instance;\n}\nlet currentInstance = null;\nconst getCurrentInstance = () => currentInstance || currentRenderingInstance;\nlet internalSetCurrentInstance;\nlet globalCurrentInstanceSetters;\nlet settersKey = \"__VUE_INSTANCE_SETTERS__\";\n{\n  if (!(globalCurrentInstanceSetters = getGlobalThis()[settersKey])) {\n    globalCurrentInstanceSetters = getGlobalThis()[settersKey] = [];\n  }\n  globalCurrentInstanceSetters.push((i) => currentInstance = i);\n  internalSetCurrentInstance = (instance) => {\n    if (globalCurrentInstanceSetters.length > 1) {\n      globalCurrentInstanceSetters.forEach((s) => s(instance));\n    } else {\n      globalCurrentInstanceSetters[0](instance);\n    }\n  };\n}\nconst setCurrentInstance = (instance) => {\n  internalSetCurrentInstance(instance);\n  instance.scope.on();\n};\nconst unsetCurrentInstance = () => {\n  currentInstance && currentInstance.scope.off();\n  internalSetCurrentInstance(null);\n};\nconst isBuiltInTag = /* @__PURE__ */ makeMap(\"slot,component\");\nfunction validateComponentName(name, config) {\n  const appIsNativeTag = config.isNativeTag || NO;\n  if (isBuiltInTag(name) || appIsNativeTag(name)) {\n    warn(\n      \"Do not use built-in or reserved HTML elements as component id: \" + name\n    );\n  }\n}\nfunction isStatefulComponent(instance) {\n  return instance.vnode.shapeFlag & 4;\n}\nlet isInSSRComponentSetup = false;\nfunction setupComponent(instance, isSSR = false) {\n  isInSSRComponentSetup = isSSR;\n  const { props, children } = instance.vnode;\n  const isStateful = isStatefulComponent(instance);\n  initProps(instance, props, isStateful, isSSR);\n  initSlots(instance, children);\n  const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;\n  isInSSRComponentSetup = false;\n  return setupResult;\n}\nfunction setupStatefulComponent(instance, isSSR) {\n  var _a;\n  const Component = instance.type;\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    if (Component.name) {\n      validateComponentName(Component.name, instance.appContext.config);\n    }\n    if (Component.components) {\n      const names = Object.keys(Component.components);\n      for (let i = 0; i < names.length; i++) {\n        validateComponentName(names[i], instance.appContext.config);\n      }\n    }\n    if (Component.directives) {\n      const names = Object.keys(Component.directives);\n      for (let i = 0; i < names.length; i++) {\n        validateDirectiveName(names[i]);\n      }\n    }\n    if (Component.compilerOptions && isRuntimeOnly()) {\n      warn(\n        `\"compilerOptions\" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.`\n      );\n    }\n  }\n  instance.accessCache = /* @__PURE__ */ Object.create(null);\n  instance.proxy = markRaw(new Proxy(instance.ctx, PublicInstanceProxyHandlers));\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    exposePropsOnRenderContext(instance);\n  }\n  const { setup } = Component;\n  if (setup) {\n    const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;\n    setCurrentInstance(instance);\n    pauseTracking();\n    const setupResult = callWithErrorHandling(\n      setup,\n      instance,\n      0,\n      [!!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(instance.props) : instance.props, setupContext]\n    );\n    resetTracking();\n    unsetCurrentInstance();\n    if (isPromise(setupResult)) {\n      setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n      if (isSSR) {\n        return setupResult.then((resolvedResult) => {\n          handleSetupResult(instance, resolvedResult, isSSR);\n        }).catch((e) => {\n          handleError(e, instance, 0);\n        });\n      } else {\n        instance.asyncDep = setupResult;\n        if (!!(process.env.NODE_ENV !== \"production\") && !instance.suspense) {\n          const name = (_a = Component.name) != null ? _a : \"Anonymous\";\n          warn(\n            `Component <${name}>: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered.`\n          );\n        }\n      }\n    } else {\n      handleSetupResult(instance, setupResult, isSSR);\n    }\n  } else {\n    finishComponentSetup(instance, isSSR);\n  }\n}\nfunction handleSetupResult(instance, setupResult, isSSR) {\n  if (isFunction(setupResult)) {\n    if (instance.type.__ssrInlineRender) {\n      instance.ssrRender = setupResult;\n    } else {\n      instance.render = setupResult;\n    }\n  } else if (isObject(setupResult)) {\n    if (!!(process.env.NODE_ENV !== \"production\") && isVNode(setupResult)) {\n      warn(\n        `setup() should not return VNodes directly - return a render function instead.`\n      );\n    }\n    if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n      instance.devtoolsRawSetupState = setupResult;\n    }\n    instance.setupState = proxyRefs(setupResult);\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      exposeSetupStateOnRenderContext(instance);\n    }\n  } else if (!!(process.env.NODE_ENV !== \"production\") && setupResult !== void 0) {\n    warn(\n      `setup() should return an object. Received: ${setupResult === null ? \"null\" : typeof setupResult}`\n    );\n  }\n  finishComponentSetup(instance, isSSR);\n}\nlet compile;\nlet installWithProxy;\nfunction registerRuntimeCompiler(_compile) {\n  compile = _compile;\n  installWithProxy = (i) => {\n    if (i.render._rc) {\n      i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\n    }\n  };\n}\nconst isRuntimeOnly = () => !compile;\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\n  const Component = instance.type;\n  if (!instance.render) {\n    if (!isSSR && compile && !Component.render) {\n      const template = Component.template || resolveMergedOptions(instance).template;\n      if (template) {\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          startMeasure(instance, `compile`);\n        }\n        const { isCustomElement, compilerOptions } = instance.appContext.config;\n        const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n        const finalCompilerOptions = extend(\n          extend(\n            {\n              isCustomElement,\n              delimiters\n            },\n            compilerOptions\n          ),\n          componentCompilerOptions\n        );\n        Component.render = compile(template, finalCompilerOptions);\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          endMeasure(instance, `compile`);\n        }\n      }\n    }\n    instance.render = Component.render || NOOP;\n    if (installWithProxy) {\n      installWithProxy(instance);\n    }\n  }\n  if (__VUE_OPTIONS_API__ && true) {\n    setCurrentInstance(instance);\n    pauseTracking();\n    applyOptions(instance);\n    resetTracking();\n    unsetCurrentInstance();\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") && !Component.render && instance.render === NOOP && !isSSR) {\n    if (!compile && Component.template) {\n      warn(\n        `Component provided template option but runtime compilation is not supported in this build of Vue.` + (` Configure your bundler to alias \"vue\" to \"vue/dist/vue.esm-bundler.js\".` )\n        /* should not happen */\n      );\n    } else {\n      warn(`Component is missing template or render function.`);\n    }\n  }\n}\nfunction getAttrsProxy(instance) {\n  return instance.attrsProxy || (instance.attrsProxy = new Proxy(\n    instance.attrs,\n    !!(process.env.NODE_ENV !== \"production\") ? {\n      get(target, key) {\n        markAttrsAccessed();\n        track(instance, \"get\", \"$attrs\");\n        return target[key];\n      },\n      set() {\n        warn(`setupContext.attrs is readonly.`);\n        return false;\n      },\n      deleteProperty() {\n        warn(`setupContext.attrs is readonly.`);\n        return false;\n      }\n    } : {\n      get(target, key) {\n        track(instance, \"get\", \"$attrs\");\n        return target[key];\n      }\n    }\n  ));\n}\nfunction getSlotsProxy(instance) {\n  return instance.slotsProxy || (instance.slotsProxy = new Proxy(instance.slots, {\n    get(target, key) {\n      track(instance, \"get\", \"$slots\");\n      return target[key];\n    }\n  }));\n}\nfunction createSetupContext(instance) {\n  const expose = (exposed) => {\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      if (instance.exposed) {\n        warn(`expose() should be called only once per setup().`);\n      }\n      if (exposed != null) {\n        let exposedType = typeof exposed;\n        if (exposedType === \"object\") {\n          if (isArray(exposed)) {\n            exposedType = \"array\";\n          } else if (isRef(exposed)) {\n            exposedType = \"ref\";\n          }\n        }\n        if (exposedType !== \"object\") {\n          warn(\n            `expose() should be passed a plain object, received ${exposedType}.`\n          );\n        }\n      }\n    }\n    instance.exposed = exposed || {};\n  };\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    return Object.freeze({\n      get attrs() {\n        return getAttrsProxy(instance);\n      },\n      get slots() {\n        return getSlotsProxy(instance);\n      },\n      get emit() {\n        return (event, ...args) => instance.emit(event, ...args);\n      },\n      expose\n    });\n  } else {\n    return {\n      get attrs() {\n        return getAttrsProxy(instance);\n      },\n      slots: instance.slots,\n      emit: instance.emit,\n      expose\n    };\n  }\n}\nfunction getExposeProxy(instance) {\n  if (instance.exposed) {\n    return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {\n      get(target, key) {\n        if (key in target) {\n          return target[key];\n        } else if (key in publicPropertiesMap) {\n          return publicPropertiesMap[key](instance);\n        }\n      },\n      has(target, key) {\n        return key in target || key in publicPropertiesMap;\n      }\n    }));\n  }\n}\nconst classifyRE = /(?:^|[-_])(\\w)/g;\nconst classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, \"\");\nfunction getComponentName(Component, includeInferred = true) {\n  return isFunction(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;\n}\nfunction formatComponentName(instance, Component, isRoot = false) {\n  let name = getComponentName(Component);\n  if (!name && Component.__file) {\n    const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n    if (match) {\n      name = match[1];\n    }\n  }\n  if (!name && instance && instance.parent) {\n    const inferFromRegistry = (registry) => {\n      for (const key in registry) {\n        if (registry[key] === Component) {\n          return key;\n        }\n      }\n    };\n    name = inferFromRegistry(\n      instance.components || instance.parent.type.components\n    ) || inferFromRegistry(instance.appContext.components);\n  }\n  return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n}\nfunction isClassComponent(value) {\n  return isFunction(value) && \"__vccOpts\" in value;\n}\n\nconst computed = (getterOrOptions, debugOptions) => {\n  return computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\n};\n\nfunction h(type, propsOrChildren, children) {\n  const l = arguments.length;\n  if (l === 2) {\n    if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {\n      if (isVNode(propsOrChildren)) {\n        return createVNode(type, null, [propsOrChildren]);\n      }\n      return createVNode(type, propsOrChildren);\n    } else {\n      return createVNode(type, null, propsOrChildren);\n    }\n  } else {\n    if (l > 3) {\n      children = Array.prototype.slice.call(arguments, 2);\n    } else if (l === 3 && isVNode(children)) {\n      children = [children];\n    }\n    return createVNode(type, propsOrChildren, children);\n  }\n}\n\nconst ssrContextKey = Symbol.for(\"v-scx\");\nconst useSSRContext = () => {\n  {\n    const ctx = inject(ssrContextKey);\n    if (!ctx) {\n      !!(process.env.NODE_ENV !== \"production\") && warn(\n        `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`\n      );\n    }\n    return ctx;\n  }\n};\n\nfunction isShallow(value) {\n  return !!(value && value[\"__v_isShallow\"]);\n}\n\nfunction initCustomFormatter() {\n  if (!!!(process.env.NODE_ENV !== \"production\") || typeof window === \"undefined\") {\n    return;\n  }\n  const vueStyle = { style: \"color:#3ba776\" };\n  const numberStyle = { style: \"color:#0b1bc9\" };\n  const stringStyle = { style: \"color:#b62e24\" };\n  const keywordStyle = { style: \"color:#9d288c\" };\n  const formatter = {\n    header(obj) {\n      if (!isObject(obj)) {\n        return null;\n      }\n      if (obj.__isVue) {\n        return [\"div\", vueStyle, `VueInstance`];\n      } else if (isRef(obj)) {\n        return [\n          \"div\",\n          {},\n          [\"span\", vueStyle, genRefFlag(obj)],\n          \"<\",\n          formatValue(obj.value),\n          `>`\n        ];\n      } else if (isReactive(obj)) {\n        return [\n          \"div\",\n          {},\n          [\"span\", vueStyle, isShallow(obj) ? \"ShallowReactive\" : \"Reactive\"],\n          \"<\",\n          formatValue(obj),\n          `>${isReadonly(obj) ? ` (readonly)` : ``}`\n        ];\n      } else if (isReadonly(obj)) {\n        return [\n          \"div\",\n          {},\n          [\"span\", vueStyle, isShallow(obj) ? \"ShallowReadonly\" : \"Readonly\"],\n          \"<\",\n          formatValue(obj),\n          \">\"\n        ];\n      }\n      return null;\n    },\n    hasBody(obj) {\n      return obj && obj.__isVue;\n    },\n    body(obj) {\n      if (obj && obj.__isVue) {\n        return [\n          \"div\",\n          {},\n          ...formatInstance(obj.$)\n        ];\n      }\n    }\n  };\n  function formatInstance(instance) {\n    const blocks = [];\n    if (instance.type.props && instance.props) {\n      blocks.push(createInstanceBlock(\"props\", toRaw(instance.props)));\n    }\n    if (instance.setupState !== EMPTY_OBJ) {\n      blocks.push(createInstanceBlock(\"setup\", instance.setupState));\n    }\n    if (instance.data !== EMPTY_OBJ) {\n      blocks.push(createInstanceBlock(\"data\", toRaw(instance.data)));\n    }\n    const computed = extractKeys(instance, \"computed\");\n    if (computed) {\n      blocks.push(createInstanceBlock(\"computed\", computed));\n    }\n    const injected = extractKeys(instance, \"inject\");\n    if (injected) {\n      blocks.push(createInstanceBlock(\"injected\", injected));\n    }\n    blocks.push([\n      \"div\",\n      {},\n      [\n        \"span\",\n        {\n          style: keywordStyle.style + \";opacity:0.66\"\n        },\n        \"$ (internal): \"\n      ],\n      [\"object\", { object: instance }]\n    ]);\n    return blocks;\n  }\n  function createInstanceBlock(type, target) {\n    target = extend({}, target);\n    if (!Object.keys(target).length) {\n      return [\"span\", {}];\n    }\n    return [\n      \"div\",\n      { style: \"line-height:1.25em;margin-bottom:0.6em\" },\n      [\n        \"div\",\n        {\n          style: \"color:#476582\"\n        },\n        type\n      ],\n      [\n        \"div\",\n        {\n          style: \"padding-left:1.25em\"\n        },\n        ...Object.keys(target).map((key) => {\n          return [\n            \"div\",\n            {},\n            [\"span\", keywordStyle, key + \": \"],\n            formatValue(target[key], false)\n          ];\n        })\n      ]\n    ];\n  }\n  function formatValue(v, asRaw = true) {\n    if (typeof v === \"number\") {\n      return [\"span\", numberStyle, v];\n    } else if (typeof v === \"string\") {\n      return [\"span\", stringStyle, JSON.stringify(v)];\n    } else if (typeof v === \"boolean\") {\n      return [\"span\", keywordStyle, v];\n    } else if (isObject(v)) {\n      return [\"object\", { object: asRaw ? toRaw(v) : v }];\n    } else {\n      return [\"span\", stringStyle, String(v)];\n    }\n  }\n  function extractKeys(instance, type) {\n    const Comp = instance.type;\n    if (isFunction(Comp)) {\n      return;\n    }\n    const extracted = {};\n    for (const key in instance.ctx) {\n      if (isKeyOfType(Comp, key, type)) {\n        extracted[key] = instance.ctx[key];\n      }\n    }\n    return extracted;\n  }\n  function isKeyOfType(Comp, key, type) {\n    const opts = Comp[type];\n    if (isArray(opts) && opts.includes(key) || isObject(opts) && key in opts) {\n      return true;\n    }\n    if (Comp.extends && isKeyOfType(Comp.extends, key, type)) {\n      return true;\n    }\n    if (Comp.mixins && Comp.mixins.some((m) => isKeyOfType(m, key, type))) {\n      return true;\n    }\n  }\n  function genRefFlag(v) {\n    if (isShallow(v)) {\n      return `ShallowRef`;\n    }\n    if (v.effect) {\n      return `ComputedRef`;\n    }\n    return `Ref`;\n  }\n  if (window.devtoolsFormatters) {\n    window.devtoolsFormatters.push(formatter);\n  } else {\n    window.devtoolsFormatters = [formatter];\n  }\n}\n\nfunction withMemo(memo, render, cache, index) {\n  const cached = cache[index];\n  if (cached && isMemoSame(cached, memo)) {\n    return cached;\n  }\n  const ret = render();\n  ret.memo = memo.slice();\n  return cache[index] = ret;\n}\nfunction isMemoSame(cached, memo) {\n  const prev = cached.memo;\n  if (prev.length != memo.length) {\n    return false;\n  }\n  for (let i = 0; i < prev.length; i++) {\n    if (hasChanged(prev[i], memo[i])) {\n      return false;\n    }\n  }\n  if (isBlockTreeEnabled > 0 && currentBlock) {\n    currentBlock.push(cached);\n  }\n  return true;\n}\n\nconst version = \"3.3.4\";\nconst _ssrUtils = {\n  createComponentInstance,\n  setupComponent,\n  renderComponentRoot,\n  setCurrentRenderingInstance,\n  isVNode: isVNode,\n  normalizeVNode\n};\nconst ssrUtils = _ssrUtils ;\nconst resolveFilter = null;\nconst compatUtils = null;\n\nexport { BaseTransition, BaseTransitionPropsValidators, Comment, Fragment, KeepAlive, Static, Suspense, Teleport, Text, assertNumber, callWithAsyncErrorHandling, callWithErrorHandling, cloneVNode, compatUtils, computed, createBlock, createCommentVNode, createElementBlock, createBaseVNode as createElementVNode, createHydrationRenderer, createPropsRestProxy, createRenderer, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, defineEmits, defineExpose, defineModel, defineOptions, defineProps, defineSlots, devtools, getCurrentInstance, getTransitionRawChildren, guardReactiveProps, h, handleError, hasInjectionContext, initCustomFormatter, inject, isMemoSame, isRuntimeOnly, isVNode, mergeDefaults, mergeModels, mergeProps, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onServerPrefetch, onUnmounted, onUpdated, openBlock, popScopeId, provide, pushScopeId, queuePostFlushCb, registerRuntimeCompiler, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, resolveFilter, resolveTransitionHooks, setBlockTracking, setDevtoolsHook, setTransitionHooks, ssrContextKey, ssrUtils, toHandlers, transformVNodeArgs, useAttrs, useModel, useSSRContext, useSlots, useTransitionState, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect, withAsyncContext, withCtx, withDefaults, withDirectives, withMemo, withScopeId };\n","import { warn, camelize, callWithAsyncErrorHandling, defineComponent, nextTick, createVNode, getCurrentInstance, watchPostEffect, onMounted, onUnmounted, Fragment, Static, h, BaseTransition, BaseTransitionPropsValidators, assertNumber, useTransitionState, onUpdated, toRaw, getTransitionRawChildren, setTransitionHooks, resolveTransitionHooks, isRuntimeOnly, createRenderer, createHydrationRenderer } from '@vue/runtime-core';\nexport * from '@vue/runtime-core';\nimport { isString, isArray, hyphenate, capitalize, isSpecialBooleanAttr, includeBooleanAttr, isOn, isModelListener, isFunction, camelize as camelize$1, toNumber, extend, EMPTY_OBJ, isObject, looseToNumber, looseIndexOf, isSet, looseEqual, invokeArrayFns, isHTMLTag, isSVGTag } from '@vue/shared';\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\nconst doc = typeof document !== \"undefined\" ? document : null;\nconst templateContainer = doc && /* @__PURE__ */ doc.createElement(\"template\");\nconst nodeOps = {\n  insert: (child, parent, anchor) => {\n    parent.insertBefore(child, anchor || null);\n  },\n  remove: (child) => {\n    const parent = child.parentNode;\n    if (parent) {\n      parent.removeChild(child);\n    }\n  },\n  createElement: (tag, isSVG, is, props) => {\n    const el = isSVG ? doc.createElementNS(svgNS, tag) : doc.createElement(tag, is ? { is } : void 0);\n    if (tag === \"select\" && props && props.multiple != null) {\n      el.setAttribute(\"multiple\", props.multiple);\n    }\n    return el;\n  },\n  createText: (text) => doc.createTextNode(text),\n  createComment: (text) => doc.createComment(text),\n  setText: (node, text) => {\n    node.nodeValue = text;\n  },\n  setElementText: (el, text) => {\n    el.textContent = text;\n  },\n  parentNode: (node) => node.parentNode,\n  nextSibling: (node) => node.nextSibling,\n  querySelector: (selector) => doc.querySelector(selector),\n  setScopeId(el, id) {\n    el.setAttribute(id, \"\");\n  },\n  // __UNSAFE__\n  // Reason: innerHTML.\n  // Static content here can only come from compiled templates.\n  // As long as the user only uses trusted templates, this is safe.\n  insertStaticContent(content, parent, anchor, isSVG, start, end) {\n    const before = anchor ? anchor.previousSibling : parent.lastChild;\n    if (start && (start === end || start.nextSibling)) {\n      while (true) {\n        parent.insertBefore(start.cloneNode(true), anchor);\n        if (start === end || !(start = start.nextSibling))\n          break;\n      }\n    } else {\n      templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content;\n      const template = templateContainer.content;\n      if (isSVG) {\n        const wrapper = template.firstChild;\n        while (wrapper.firstChild) {\n          template.appendChild(wrapper.firstChild);\n        }\n        template.removeChild(wrapper);\n      }\n      parent.insertBefore(template, anchor);\n    }\n    return [\n      // first\n      before ? before.nextSibling : parent.firstChild,\n      // last\n      anchor ? anchor.previousSibling : parent.lastChild\n    ];\n  }\n};\n\nfunction patchClass(el, value, isSVG) {\n  const transitionClasses = el._vtc;\n  if (transitionClasses) {\n    value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(\" \");\n  }\n  if (value == null) {\n    el.removeAttribute(\"class\");\n  } else if (isSVG) {\n    el.setAttribute(\"class\", value);\n  } else {\n    el.className = value;\n  }\n}\n\nfunction patchStyle(el, prev, next) {\n  const style = el.style;\n  const isCssString = isString(next);\n  if (next && !isCssString) {\n    if (prev && !isString(prev)) {\n      for (const key in prev) {\n        if (next[key] == null) {\n          setStyle(style, key, \"\");\n        }\n      }\n    }\n    for (const key in next) {\n      setStyle(style, key, next[key]);\n    }\n  } else {\n    const currentDisplay = style.display;\n    if (isCssString) {\n      if (prev !== next) {\n        style.cssText = next;\n      }\n    } else if (prev) {\n      el.removeAttribute(\"style\");\n    }\n    if (\"_vod\" in el) {\n      style.display = currentDisplay;\n    }\n  }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n  if (isArray(val)) {\n    val.forEach((v) => setStyle(style, name, v));\n  } else {\n    if (val == null)\n      val = \"\";\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      if (semicolonRE.test(val)) {\n        warn(\n          `Unexpected semicolon at the end of '${name}' style value: '${val}'`\n        );\n      }\n    }\n    if (name.startsWith(\"--\")) {\n      style.setProperty(name, val);\n    } else {\n      const prefixed = autoPrefix(style, name);\n      if (importantRE.test(val)) {\n        style.setProperty(\n          hyphenate(prefixed),\n          val.replace(importantRE, \"\"),\n          \"important\"\n        );\n      } else {\n        style[prefixed] = val;\n      }\n    }\n  }\n}\nconst prefixes = [\"Webkit\", \"Moz\", \"ms\"];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n  const cached = prefixCache[rawName];\n  if (cached) {\n    return cached;\n  }\n  let name = camelize(rawName);\n  if (name !== \"filter\" && name in style) {\n    return prefixCache[rawName] = name;\n  }\n  name = capitalize(name);\n  for (let i = 0; i < prefixes.length; i++) {\n    const prefixed = prefixes[i] + name;\n    if (prefixed in style) {\n      return prefixCache[rawName] = prefixed;\n    }\n  }\n  return rawName;\n}\n\nconst xlinkNS = \"http://www.w3.org/1999/xlink\";\nfunction patchAttr(el, key, value, isSVG, instance) {\n  if (isSVG && key.startsWith(\"xlink:\")) {\n    if (value == null) {\n      el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n    } else {\n      el.setAttributeNS(xlinkNS, key, value);\n    }\n  } else {\n    const isBoolean = isSpecialBooleanAttr(key);\n    if (value == null || isBoolean && !includeBooleanAttr(value)) {\n      el.removeAttribute(key);\n    } else {\n      el.setAttribute(key, isBoolean ? \"\" : value);\n    }\n  }\n}\n\nfunction patchDOMProp(el, key, value, prevChildren, parentComponent, parentSuspense, unmountChildren) {\n  if (key === \"innerHTML\" || key === \"textContent\") {\n    if (prevChildren) {\n      unmountChildren(prevChildren, parentComponent, parentSuspense);\n    }\n    el[key] = value == null ? \"\" : value;\n    return;\n  }\n  const tag = el.tagName;\n  if (key === \"value\" && tag !== \"PROGRESS\" && // custom elements may use _value internally\n  !tag.includes(\"-\")) {\n    el._value = value;\n    const oldValue = tag === \"OPTION\" ? el.getAttribute(\"value\") : el.value;\n    const newValue = value == null ? \"\" : value;\n    if (oldValue !== newValue) {\n      el.value = newValue;\n    }\n    if (value == null) {\n      el.removeAttribute(key);\n    }\n    return;\n  }\n  let needRemove = false;\n  if (value === \"\" || value == null) {\n    const type = typeof el[key];\n    if (type === \"boolean\") {\n      value = includeBooleanAttr(value);\n    } else if (value == null && type === \"string\") {\n      value = \"\";\n      needRemove = true;\n    } else if (type === \"number\") {\n      value = 0;\n      needRemove = true;\n    }\n  }\n  try {\n    el[key] = value;\n  } catch (e) {\n    if (!!(process.env.NODE_ENV !== \"production\") && !needRemove) {\n      warn(\n        `Failed setting prop \"${key}\" on <${tag.toLowerCase()}>: value ${value} is invalid.`,\n        e\n      );\n    }\n  }\n  needRemove && el.removeAttribute(key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n  el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n  el.removeEventListener(event, handler, options);\n}\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n  const invokers = el._vei || (el._vei = {});\n  const existingInvoker = invokers[rawName];\n  if (nextValue && existingInvoker) {\n    existingInvoker.value = nextValue;\n  } else {\n    const [name, options] = parseName(rawName);\n    if (nextValue) {\n      const invoker = invokers[rawName] = createInvoker(nextValue, instance);\n      addEventListener(el, name, invoker, options);\n    } else if (existingInvoker) {\n      removeEventListener(el, name, existingInvoker, options);\n      invokers[rawName] = void 0;\n    }\n  }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n  let options;\n  if (optionsModifierRE.test(name)) {\n    options = {};\n    let m;\n    while (m = name.match(optionsModifierRE)) {\n      name = name.slice(0, name.length - m[0].length);\n      options[m[0].toLowerCase()] = true;\n    }\n  }\n  const event = name[2] === \":\" ? name.slice(3) : hyphenate(name.slice(2));\n  return [event, options];\n}\nlet cachedNow = 0;\nconst p = /* @__PURE__ */ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => cachedNow = 0), cachedNow = Date.now());\nfunction createInvoker(initialValue, instance) {\n  const invoker = (e) => {\n    if (!e._vts) {\n      e._vts = Date.now();\n    } else if (e._vts <= invoker.attached) {\n      return;\n    }\n    callWithAsyncErrorHandling(\n      patchStopImmediatePropagation(e, invoker.value),\n      instance,\n      5,\n      [e]\n    );\n  };\n  invoker.value = initialValue;\n  invoker.attached = getNow();\n  return invoker;\n}\nfunction patchStopImmediatePropagation(e, value) {\n  if (isArray(value)) {\n    const originalStop = e.stopImmediatePropagation;\n    e.stopImmediatePropagation = () => {\n      originalStop.call(e);\n      e._stopped = true;\n    };\n    return value.map((fn) => (e2) => !e2._stopped && fn && fn(e2));\n  } else {\n    return value;\n  }\n}\n\nconst nativeOnRE = /^on[a-z]/;\nconst patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => {\n  if (key === \"class\") {\n    patchClass(el, nextValue, isSVG);\n  } else if (key === \"style\") {\n    patchStyle(el, prevValue, nextValue);\n  } else if (isOn(key)) {\n    if (!isModelListener(key)) {\n      patchEvent(el, key, prevValue, nextValue, parentComponent);\n    }\n  } else if (key[0] === \".\" ? (key = key.slice(1), true) : key[0] === \"^\" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) {\n    patchDOMProp(\n      el,\n      key,\n      nextValue,\n      prevChildren,\n      parentComponent,\n      parentSuspense,\n      unmountChildren\n    );\n  } else {\n    if (key === \"true-value\") {\n      el._trueValue = nextValue;\n    } else if (key === \"false-value\") {\n      el._falseValue = nextValue;\n    }\n    patchAttr(el, key, nextValue, isSVG);\n  }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n  if (isSVG) {\n    if (key === \"innerHTML\" || key === \"textContent\") {\n      return true;\n    }\n    if (key in el && nativeOnRE.test(key) && isFunction(value)) {\n      return true;\n    }\n    return false;\n  }\n  if (key === \"spellcheck\" || key === \"draggable\" || key === \"translate\") {\n    return false;\n  }\n  if (key === \"form\") {\n    return false;\n  }\n  if (key === \"list\" && el.tagName === \"INPUT\") {\n    return false;\n  }\n  if (key === \"type\" && el.tagName === \"TEXTAREA\") {\n    return false;\n  }\n  if (nativeOnRE.test(key) && isString(value)) {\n    return false;\n  }\n  return key in el;\n}\n\nfunction defineCustomElement(options, hydrate2) {\n  const Comp = defineComponent(options);\n  class VueCustomElement extends VueElement {\n    constructor(initialProps) {\n      super(Comp, initialProps, hydrate2);\n    }\n  }\n  VueCustomElement.def = Comp;\n  return VueCustomElement;\n}\nconst defineSSRCustomElement = (options) => {\n  return defineCustomElement(options, hydrate);\n};\nconst BaseClass = typeof HTMLElement !== \"undefined\" ? HTMLElement : class {\n};\nclass VueElement extends BaseClass {\n  constructor(_def, _props = {}, hydrate2) {\n    super();\n    this._def = _def;\n    this._props = _props;\n    /**\n     * @internal\n     */\n    this._instance = null;\n    this._connected = false;\n    this._resolved = false;\n    this._numberProps = null;\n    if (this.shadowRoot && hydrate2) {\n      hydrate2(this._createVNode(), this.shadowRoot);\n    } else {\n      if (!!(process.env.NODE_ENV !== \"production\") && this.shadowRoot) {\n        warn(\n          `Custom element has pre-rendered declarative shadow root but is not defined as hydratable. Use \\`defineSSRCustomElement\\`.`\n        );\n      }\n      this.attachShadow({ mode: \"open\" });\n      if (!this._def.__asyncLoader) {\n        this._resolveProps(this._def);\n      }\n    }\n  }\n  connectedCallback() {\n    this._connected = true;\n    if (!this._instance) {\n      if (this._resolved) {\n        this._update();\n      } else {\n        this._resolveDef();\n      }\n    }\n  }\n  disconnectedCallback() {\n    this._connected = false;\n    nextTick(() => {\n      if (!this._connected) {\n        render(null, this.shadowRoot);\n        this._instance = null;\n      }\n    });\n  }\n  /**\n   * resolve inner component definition (handle possible async component)\n   */\n  _resolveDef() {\n    this._resolved = true;\n    for (let i = 0; i < this.attributes.length; i++) {\n      this._setAttr(this.attributes[i].name);\n    }\n    new MutationObserver((mutations) => {\n      for (const m of mutations) {\n        this._setAttr(m.attributeName);\n      }\n    }).observe(this, { attributes: true });\n    const resolve = (def, isAsync = false) => {\n      const { props, styles } = def;\n      let numberProps;\n      if (props && !isArray(props)) {\n        for (const key in props) {\n          const opt = props[key];\n          if (opt === Number || opt && opt.type === Number) {\n            if (key in this._props) {\n              this._props[key] = toNumber(this._props[key]);\n            }\n            (numberProps || (numberProps = /* @__PURE__ */ Object.create(null)))[camelize$1(key)] = true;\n          }\n        }\n      }\n      this._numberProps = numberProps;\n      if (isAsync) {\n        this._resolveProps(def);\n      }\n      this._applyStyles(styles);\n      this._update();\n    };\n    const asyncDef = this._def.__asyncLoader;\n    if (asyncDef) {\n      asyncDef().then((def) => resolve(def, true));\n    } else {\n      resolve(this._def);\n    }\n  }\n  _resolveProps(def) {\n    const { props } = def;\n    const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});\n    for (const key of Object.keys(this)) {\n      if (key[0] !== \"_\" && declaredPropKeys.includes(key)) {\n        this._setProp(key, this[key], true, false);\n      }\n    }\n    for (const key of declaredPropKeys.map(camelize$1)) {\n      Object.defineProperty(this, key, {\n        get() {\n          return this._getProp(key);\n        },\n        set(val) {\n          this._setProp(key, val);\n        }\n      });\n    }\n  }\n  _setAttr(key) {\n    let value = this.getAttribute(key);\n    const camelKey = camelize$1(key);\n    if (this._numberProps && this._numberProps[camelKey]) {\n      value = toNumber(value);\n    }\n    this._setProp(camelKey, value, false);\n  }\n  /**\n   * @internal\n   */\n  _getProp(key) {\n    return this._props[key];\n  }\n  /**\n   * @internal\n   */\n  _setProp(key, val, shouldReflect = true, shouldUpdate = true) {\n    if (val !== this._props[key]) {\n      this._props[key] = val;\n      if (shouldUpdate && this._instance) {\n        this._update();\n      }\n      if (shouldReflect) {\n        if (val === true) {\n          this.setAttribute(hyphenate(key), \"\");\n        } else if (typeof val === \"string\" || typeof val === \"number\") {\n          this.setAttribute(hyphenate(key), val + \"\");\n        } else if (!val) {\n          this.removeAttribute(hyphenate(key));\n        }\n      }\n    }\n  }\n  _update() {\n    render(this._createVNode(), this.shadowRoot);\n  }\n  _createVNode() {\n    const vnode = createVNode(this._def, extend({}, this._props));\n    if (!this._instance) {\n      vnode.ce = (instance) => {\n        this._instance = instance;\n        instance.isCE = true;\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          instance.ceReload = (newStyles) => {\n            if (this._styles) {\n              this._styles.forEach((s) => this.shadowRoot.removeChild(s));\n              this._styles.length = 0;\n            }\n            this._applyStyles(newStyles);\n            this._instance = null;\n            this._update();\n          };\n        }\n        const dispatch = (event, args) => {\n          this.dispatchEvent(\n            new CustomEvent(event, {\n              detail: args\n            })\n          );\n        };\n        instance.emit = (event, ...args) => {\n          dispatch(event, args);\n          if (hyphenate(event) !== event) {\n            dispatch(hyphenate(event), args);\n          }\n        };\n        let parent = this;\n        while (parent = parent && (parent.parentNode || parent.host)) {\n          if (parent instanceof VueElement) {\n            instance.parent = parent._instance;\n            instance.provides = parent._instance.provides;\n            break;\n          }\n        }\n      };\n    }\n    return vnode;\n  }\n  _applyStyles(styles) {\n    if (styles) {\n      styles.forEach((css) => {\n        const s = document.createElement(\"style\");\n        s.textContent = css;\n        this.shadowRoot.appendChild(s);\n        if (!!(process.env.NODE_ENV !== \"production\")) {\n          (this._styles || (this._styles = [])).push(s);\n        }\n      });\n    }\n  }\n}\n\nfunction useCssModule(name = \"$style\") {\n  {\n    const instance = getCurrentInstance();\n    if (!instance) {\n      !!(process.env.NODE_ENV !== \"production\") && warn(`useCssModule must be called inside setup()`);\n      return EMPTY_OBJ;\n    }\n    const modules = instance.type.__cssModules;\n    if (!modules) {\n      !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS modules injected.`);\n      return EMPTY_OBJ;\n    }\n    const mod = modules[name];\n    if (!mod) {\n      !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS module named \"${name}\".`);\n      return EMPTY_OBJ;\n    }\n    return mod;\n  }\n}\n\nfunction useCssVars(getter) {\n  const instance = getCurrentInstance();\n  if (!instance) {\n    !!(process.env.NODE_ENV !== \"production\") && warn(`useCssVars is called without current active component instance.`);\n    return;\n  }\n  const updateTeleports = instance.ut = (vars = getter(instance.proxy)) => {\n    Array.from(\n      document.querySelectorAll(`[data-v-owner=\"${instance.uid}\"]`)\n    ).forEach((node) => setVarsOnNode(node, vars));\n  };\n  const setVars = () => {\n    const vars = getter(instance.proxy);\n    setVarsOnVNode(instance.subTree, vars);\n    updateTeleports(vars);\n  };\n  watchPostEffect(setVars);\n  onMounted(() => {\n    const ob = new MutationObserver(setVars);\n    ob.observe(instance.subTree.el.parentNode, { childList: true });\n    onUnmounted(() => ob.disconnect());\n  });\n}\nfunction setVarsOnVNode(vnode, vars) {\n  if (vnode.shapeFlag & 128) {\n    const suspense = vnode.suspense;\n    vnode = suspense.activeBranch;\n    if (suspense.pendingBranch && !suspense.isHydrating) {\n      suspense.effects.push(() => {\n        setVarsOnVNode(suspense.activeBranch, vars);\n      });\n    }\n  }\n  while (vnode.component) {\n    vnode = vnode.component.subTree;\n  }\n  if (vnode.shapeFlag & 1 && vnode.el) {\n    setVarsOnNode(vnode.el, vars);\n  } else if (vnode.type === Fragment) {\n    vnode.children.forEach((c) => setVarsOnVNode(c, vars));\n  } else if (vnode.type === Static) {\n    let { el, anchor } = vnode;\n    while (el) {\n      setVarsOnNode(el, vars);\n      if (el === anchor)\n        break;\n      el = el.nextSibling;\n    }\n  }\n}\nfunction setVarsOnNode(el, vars) {\n  if (el.nodeType === 1) {\n    const style = el.style;\n    for (const key in vars) {\n      style.setProperty(`--${key}`, vars[key]);\n    }\n  }\n}\n\nconst TRANSITION = \"transition\";\nconst ANIMATION = \"animation\";\nconst Transition = (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots);\nTransition.displayName = \"Transition\";\nconst DOMTransitionPropsValidators = {\n  name: String,\n  type: String,\n  css: {\n    type: Boolean,\n    default: true\n  },\n  duration: [String, Number, Object],\n  enterFromClass: String,\n  enterActiveClass: String,\n  enterToClass: String,\n  appearFromClass: String,\n  appearActiveClass: String,\n  appearToClass: String,\n  leaveFromClass: String,\n  leaveActiveClass: String,\n  leaveToClass: String\n};\nconst TransitionPropsValidators = Transition.props = /* @__PURE__ */ extend(\n  {},\n  BaseTransitionPropsValidators,\n  DOMTransitionPropsValidators\n);\nconst callHook = (hook, args = []) => {\n  if (isArray(hook)) {\n    hook.forEach((h2) => h2(...args));\n  } else if (hook) {\n    hook(...args);\n  }\n};\nconst hasExplicitCallback = (hook) => {\n  return hook ? isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false;\n};\nfunction resolveTransitionProps(rawProps) {\n  const baseProps = {};\n  for (const key in rawProps) {\n    if (!(key in DOMTransitionPropsValidators)) {\n      baseProps[key] = rawProps[key];\n    }\n  }\n  if (rawProps.css === false) {\n    return baseProps;\n  }\n  const {\n    name = \"v\",\n    type,\n    duration,\n    enterFromClass = `${name}-enter-from`,\n    enterActiveClass = `${name}-enter-active`,\n    enterToClass = `${name}-enter-to`,\n    appearFromClass = enterFromClass,\n    appearActiveClass = enterActiveClass,\n    appearToClass = enterToClass,\n    leaveFromClass = `${name}-leave-from`,\n    leaveActiveClass = `${name}-leave-active`,\n    leaveToClass = `${name}-leave-to`\n  } = rawProps;\n  const durations = normalizeDuration(duration);\n  const enterDuration = durations && durations[0];\n  const leaveDuration = durations && durations[1];\n  const {\n    onBeforeEnter,\n    onEnter,\n    onEnterCancelled,\n    onLeave,\n    onLeaveCancelled,\n    onBeforeAppear = onBeforeEnter,\n    onAppear = onEnter,\n    onAppearCancelled = onEnterCancelled\n  } = baseProps;\n  const finishEnter = (el, isAppear, done) => {\n    removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n    removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n    done && done();\n  };\n  const finishLeave = (el, done) => {\n    el._isLeaving = false;\n    removeTransitionClass(el, leaveFromClass);\n    removeTransitionClass(el, leaveToClass);\n    removeTransitionClass(el, leaveActiveClass);\n    done && done();\n  };\n  const makeEnterHook = (isAppear) => {\n    return (el, done) => {\n      const hook = isAppear ? onAppear : onEnter;\n      const resolve = () => finishEnter(el, isAppear, done);\n      callHook(hook, [el, resolve]);\n      nextFrame(() => {\n        removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n        addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n        if (!hasExplicitCallback(hook)) {\n          whenTransitionEnds(el, type, enterDuration, resolve);\n        }\n      });\n    };\n  };\n  return extend(baseProps, {\n    onBeforeEnter(el) {\n      callHook(onBeforeEnter, [el]);\n      addTransitionClass(el, enterFromClass);\n      addTransitionClass(el, enterActiveClass);\n    },\n    onBeforeAppear(el) {\n      callHook(onBeforeAppear, [el]);\n      addTransitionClass(el, appearFromClass);\n      addTransitionClass(el, appearActiveClass);\n    },\n    onEnter: makeEnterHook(false),\n    onAppear: makeEnterHook(true),\n    onLeave(el, done) {\n      el._isLeaving = true;\n      const resolve = () => finishLeave(el, done);\n      addTransitionClass(el, leaveFromClass);\n      forceReflow();\n      addTransitionClass(el, leaveActiveClass);\n      nextFrame(() => {\n        if (!el._isLeaving) {\n          return;\n        }\n        removeTransitionClass(el, leaveFromClass);\n        addTransitionClass(el, leaveToClass);\n        if (!hasExplicitCallback(onLeave)) {\n          whenTransitionEnds(el, type, leaveDuration, resolve);\n        }\n      });\n      callHook(onLeave, [el, resolve]);\n    },\n    onEnterCancelled(el) {\n      finishEnter(el, false);\n      callHook(onEnterCancelled, [el]);\n    },\n    onAppearCancelled(el) {\n      finishEnter(el, true);\n      callHook(onAppearCancelled, [el]);\n    },\n    onLeaveCancelled(el) {\n      finishLeave(el);\n      callHook(onLeaveCancelled, [el]);\n    }\n  });\n}\nfunction normalizeDuration(duration) {\n  if (duration == null) {\n    return null;\n  } else if (isObject(duration)) {\n    return [NumberOf(duration.enter), NumberOf(duration.leave)];\n  } else {\n    const n = NumberOf(duration);\n    return [n, n];\n  }\n}\nfunction NumberOf(val) {\n  const res = toNumber(val);\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    assertNumber(res, \"<transition> explicit duration\");\n  }\n  return res;\n}\nfunction addTransitionClass(el, cls) {\n  cls.split(/\\s+/).forEach((c) => c && el.classList.add(c));\n  (el._vtc || (el._vtc = /* @__PURE__ */ new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n  cls.split(/\\s+/).forEach((c) => c && el.classList.remove(c));\n  const { _vtc } = el;\n  if (_vtc) {\n    _vtc.delete(cls);\n    if (!_vtc.size) {\n      el._vtc = void 0;\n    }\n  }\n}\nfunction nextFrame(cb) {\n  requestAnimationFrame(() => {\n    requestAnimationFrame(cb);\n  });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n  const id = el._endId = ++endId;\n  const resolveIfNotStale = () => {\n    if (id === el._endId) {\n      resolve();\n    }\n  };\n  if (explicitTimeout) {\n    return setTimeout(resolveIfNotStale, explicitTimeout);\n  }\n  const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n  if (!type) {\n    return resolve();\n  }\n  const endEvent = type + \"end\";\n  let ended = 0;\n  const end = () => {\n    el.removeEventListener(endEvent, onEnd);\n    resolveIfNotStale();\n  };\n  const onEnd = (e) => {\n    if (e.target === el && ++ended >= propCount) {\n      end();\n    }\n  };\n  setTimeout(() => {\n    if (ended < propCount) {\n      end();\n    }\n  }, timeout + 1);\n  el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n  const styles = window.getComputedStyle(el);\n  const getStyleProperties = (key) => (styles[key] || \"\").split(\", \");\n  const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n  const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n  const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n  const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n  const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n  const animationTimeout = getTimeout(animationDelays, animationDurations);\n  let type = null;\n  let timeout = 0;\n  let propCount = 0;\n  if (expectedType === TRANSITION) {\n    if (transitionTimeout > 0) {\n      type = TRANSITION;\n      timeout = transitionTimeout;\n      propCount = transitionDurations.length;\n    }\n  } else if (expectedType === ANIMATION) {\n    if (animationTimeout > 0) {\n      type = ANIMATION;\n      timeout = animationTimeout;\n      propCount = animationDurations.length;\n    }\n  } else {\n    timeout = Math.max(transitionTimeout, animationTimeout);\n    type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;\n    propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;\n  }\n  const hasTransform = type === TRANSITION && /\\b(transform|all)(,|$)/.test(\n    getStyleProperties(`${TRANSITION}Property`).toString()\n  );\n  return {\n    type,\n    timeout,\n    propCount,\n    hasTransform\n  };\n}\nfunction getTimeout(delays, durations) {\n  while (delays.length < durations.length) {\n    delays = delays.concat(delays);\n  }\n  return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\nfunction toMs(s) {\n  return Number(s.slice(0, -1).replace(\",\", \".\")) * 1e3;\n}\nfunction forceReflow() {\n  return document.body.offsetHeight;\n}\n\nconst positionMap = /* @__PURE__ */ new WeakMap();\nconst newPositionMap = /* @__PURE__ */ new WeakMap();\nconst TransitionGroupImpl = {\n  name: \"TransitionGroup\",\n  props: /* @__PURE__ */ extend({}, TransitionPropsValidators, {\n    tag: String,\n    moveClass: String\n  }),\n  setup(props, { slots }) {\n    const instance = getCurrentInstance();\n    const state = useTransitionState();\n    let prevChildren;\n    let children;\n    onUpdated(() => {\n      if (!prevChildren.length) {\n        return;\n      }\n      const moveClass = props.moveClass || `${props.name || \"v\"}-move`;\n      if (!hasCSSTransform(\n        prevChildren[0].el,\n        instance.vnode.el,\n        moveClass\n      )) {\n        return;\n      }\n      prevChildren.forEach(callPendingCbs);\n      prevChildren.forEach(recordPosition);\n      const movedChildren = prevChildren.filter(applyTranslation);\n      forceReflow();\n      movedChildren.forEach((c) => {\n        const el = c.el;\n        const style = el.style;\n        addTransitionClass(el, moveClass);\n        style.transform = style.webkitTransform = style.transitionDuration = \"\";\n        const cb = el._moveCb = (e) => {\n          if (e && e.target !== el) {\n            return;\n          }\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(\"transitionend\", cb);\n            el._moveCb = null;\n            removeTransitionClass(el, moveClass);\n          }\n        };\n        el.addEventListener(\"transitionend\", cb);\n      });\n    });\n    return () => {\n      const rawProps = toRaw(props);\n      const cssTransitionProps = resolveTransitionProps(rawProps);\n      let tag = rawProps.tag || Fragment;\n      prevChildren = children;\n      children = slots.default ? getTransitionRawChildren(slots.default()) : [];\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        if (child.key != null) {\n          setTransitionHooks(\n            child,\n            resolveTransitionHooks(child, cssTransitionProps, state, instance)\n          );\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn(`<TransitionGroup> children must be keyed.`);\n        }\n      }\n      if (prevChildren) {\n        for (let i = 0; i < prevChildren.length; i++) {\n          const child = prevChildren[i];\n          setTransitionHooks(\n            child,\n            resolveTransitionHooks(child, cssTransitionProps, state, instance)\n          );\n          positionMap.set(child, child.el.getBoundingClientRect());\n        }\n      }\n      return createVNode(tag, null, children);\n    };\n  }\n};\nconst removeMode = (props) => delete props.mode;\n/* @__PURE__ */ removeMode(TransitionGroupImpl.props);\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n  const el = c.el;\n  if (el._moveCb) {\n    el._moveCb();\n  }\n  if (el._enterCb) {\n    el._enterCb();\n  }\n}\nfunction recordPosition(c) {\n  newPositionMap.set(c, c.el.getBoundingClientRect());\n}\nfunction applyTranslation(c) {\n  const oldPos = positionMap.get(c);\n  const newPos = newPositionMap.get(c);\n  const dx = oldPos.left - newPos.left;\n  const dy = oldPos.top - newPos.top;\n  if (dx || dy) {\n    const s = c.el.style;\n    s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n    s.transitionDuration = \"0s\";\n    return c;\n  }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n  const clone = el.cloneNode();\n  if (el._vtc) {\n    el._vtc.forEach((cls) => {\n      cls.split(/\\s+/).forEach((c) => c && clone.classList.remove(c));\n    });\n  }\n  moveClass.split(/\\s+/).forEach((c) => c && clone.classList.add(c));\n  clone.style.display = \"none\";\n  const container = root.nodeType === 1 ? root : root.parentNode;\n  container.appendChild(clone);\n  const { hasTransform } = getTransitionInfo(clone);\n  container.removeChild(clone);\n  return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n  const fn = vnode.props[\"onUpdate:modelValue\"] || false;\n  return isArray(fn) ? (value) => invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n  e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n  const target = e.target;\n  if (target.composing) {\n    target.composing = false;\n    target.dispatchEvent(new Event(\"input\"));\n  }\n}\nconst vModelText = {\n  created(el, { modifiers: { lazy, trim, number } }, vnode) {\n    el._assign = getModelAssigner(vnode);\n    const castToNumber = number || vnode.props && vnode.props.type === \"number\";\n    addEventListener(el, lazy ? \"change\" : \"input\", (e) => {\n      if (e.target.composing)\n        return;\n      let domValue = el.value;\n      if (trim) {\n        domValue = domValue.trim();\n      }\n      if (castToNumber) {\n        domValue = looseToNumber(domValue);\n      }\n      el._assign(domValue);\n    });\n    if (trim) {\n      addEventListener(el, \"change\", () => {\n        el.value = el.value.trim();\n      });\n    }\n    if (!lazy) {\n      addEventListener(el, \"compositionstart\", onCompositionStart);\n      addEventListener(el, \"compositionend\", onCompositionEnd);\n      addEventListener(el, \"change\", onCompositionEnd);\n    }\n  },\n  // set value on mounted so it's after min/max for type=\"range\"\n  mounted(el, { value }) {\n    el.value = value == null ? \"\" : value;\n  },\n  beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) {\n    el._assign = getModelAssigner(vnode);\n    if (el.composing)\n      return;\n    if (document.activeElement === el && el.type !== \"range\") {\n      if (lazy) {\n        return;\n      }\n      if (trim && el.value.trim() === value) {\n        return;\n      }\n      if ((number || el.type === \"number\") && looseToNumber(el.value) === value) {\n        return;\n      }\n    }\n    const newValue = value == null ? \"\" : value;\n    if (el.value !== newValue) {\n      el.value = newValue;\n    }\n  }\n};\nconst vModelCheckbox = {\n  // #4096 array checkboxes need to be deep traversed\n  deep: true,\n  created(el, _, vnode) {\n    el._assign = getModelAssigner(vnode);\n    addEventListener(el, \"change\", () => {\n      const modelValue = el._modelValue;\n      const elementValue = getValue(el);\n      const checked = el.checked;\n      const assign = el._assign;\n      if (isArray(modelValue)) {\n        const index = looseIndexOf(modelValue, elementValue);\n        const found = index !== -1;\n        if (checked && !found) {\n          assign(modelValue.concat(elementValue));\n        } else if (!checked && found) {\n          const filtered = [...modelValue];\n          filtered.splice(index, 1);\n          assign(filtered);\n        }\n      } else if (isSet(modelValue)) {\n        const cloned = new Set(modelValue);\n        if (checked) {\n          cloned.add(elementValue);\n        } else {\n          cloned.delete(elementValue);\n        }\n        assign(cloned);\n      } else {\n        assign(getCheckboxValue(el, checked));\n      }\n    });\n  },\n  // set initial checked on mount to wait for true-value/false-value\n  mounted: setChecked,\n  beforeUpdate(el, binding, vnode) {\n    el._assign = getModelAssigner(vnode);\n    setChecked(el, binding, vnode);\n  }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n  el._modelValue = value;\n  if (isArray(value)) {\n    el.checked = looseIndexOf(value, vnode.props.value) > -1;\n  } else if (isSet(value)) {\n    el.checked = value.has(vnode.props.value);\n  } else if (value !== oldValue) {\n    el.checked = looseEqual(value, getCheckboxValue(el, true));\n  }\n}\nconst vModelRadio = {\n  created(el, { value }, vnode) {\n    el.checked = looseEqual(value, vnode.props.value);\n    el._assign = getModelAssigner(vnode);\n    addEventListener(el, \"change\", () => {\n      el._assign(getValue(el));\n    });\n  },\n  beforeUpdate(el, { value, oldValue }, vnode) {\n    el._assign = getModelAssigner(vnode);\n    if (value !== oldValue) {\n      el.checked = looseEqual(value, vnode.props.value);\n    }\n  }\n};\nconst vModelSelect = {\n  // <select multiple> value need to be deep traversed\n  deep: true,\n  created(el, { value, modifiers: { number } }, vnode) {\n    const isSetModel = isSet(value);\n    addEventListener(el, \"change\", () => {\n      const selectedVal = Array.prototype.filter.call(el.options, (o) => o.selected).map(\n        (o) => number ? looseToNumber(getValue(o)) : getValue(o)\n      );\n      el._assign(\n        el.multiple ? isSetModel ? new Set(selectedVal) : selectedVal : selectedVal[0]\n      );\n    });\n    el._assign = getModelAssigner(vnode);\n  },\n  // set value in mounted & updated because <select> relies on its children\n  // <option>s.\n  mounted(el, { value }) {\n    setSelected(el, value);\n  },\n  beforeUpdate(el, _binding, vnode) {\n    el._assign = getModelAssigner(vnode);\n  },\n  updated(el, { value }) {\n    setSelected(el, value);\n  }\n};\nfunction setSelected(el, value) {\n  const isMultiple = el.multiple;\n  if (isMultiple && !isArray(value) && !isSet(value)) {\n    !!(process.env.NODE_ENV !== \"production\") && warn(\n      `<select multiple v-model> expects an Array or Set value for its binding, but got ${Object.prototype.toString.call(value).slice(8, -1)}.`\n    );\n    return;\n  }\n  for (let i = 0, l = el.options.length; i < l; i++) {\n    const option = el.options[i];\n    const optionValue = getValue(option);\n    if (isMultiple) {\n      if (isArray(value)) {\n        option.selected = looseIndexOf(value, optionValue) > -1;\n      } else {\n        option.selected = value.has(optionValue);\n      }\n    } else {\n      if (looseEqual(getValue(option), value)) {\n        if (el.selectedIndex !== i)\n          el.selectedIndex = i;\n        return;\n      }\n    }\n  }\n  if (!isMultiple && el.selectedIndex !== -1) {\n    el.selectedIndex = -1;\n  }\n}\nfunction getValue(el) {\n  return \"_value\" in el ? el._value : el.value;\n}\nfunction getCheckboxValue(el, checked) {\n  const key = checked ? \"_trueValue\" : \"_falseValue\";\n  return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n  created(el, binding, vnode) {\n    callModelHook(el, binding, vnode, null, \"created\");\n  },\n  mounted(el, binding, vnode) {\n    callModelHook(el, binding, vnode, null, \"mounted\");\n  },\n  beforeUpdate(el, binding, vnode, prevVNode) {\n    callModelHook(el, binding, vnode, prevVNode, \"beforeUpdate\");\n  },\n  updated(el, binding, vnode, prevVNode) {\n    callModelHook(el, binding, vnode, prevVNode, \"updated\");\n  }\n};\nfunction resolveDynamicModel(tagName, type) {\n  switch (tagName) {\n    case \"SELECT\":\n      return vModelSelect;\n    case \"TEXTAREA\":\n      return vModelText;\n    default:\n      switch (type) {\n        case \"checkbox\":\n          return vModelCheckbox;\n        case \"radio\":\n          return vModelRadio;\n        default:\n          return vModelText;\n      }\n  }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n  const modelToUse = resolveDynamicModel(\n    el.tagName,\n    vnode.props && vnode.props.type\n  );\n  const fn = modelToUse[hook];\n  fn && fn(el, binding, vnode, prevVNode);\n}\nfunction initVModelForSSR() {\n  vModelText.getSSRProps = ({ value }) => ({ value });\n  vModelRadio.getSSRProps = ({ value }, vnode) => {\n    if (vnode.props && looseEqual(vnode.props.value, value)) {\n      return { checked: true };\n    }\n  };\n  vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n    if (isArray(value)) {\n      if (vnode.props && looseIndexOf(value, vnode.props.value) > -1) {\n        return { checked: true };\n      }\n    } else if (isSet(value)) {\n      if (vnode.props && value.has(vnode.props.value)) {\n        return { checked: true };\n      }\n    } else if (value) {\n      return { checked: true };\n    }\n  };\n  vModelDynamic.getSSRProps = (binding, vnode) => {\n    if (typeof vnode.type !== \"string\") {\n      return;\n    }\n    const modelToUse = resolveDynamicModel(\n      // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n      vnode.type.toUpperCase(),\n      vnode.props && vnode.props.type\n    );\n    if (modelToUse.getSSRProps) {\n      return modelToUse.getSSRProps(binding, vnode);\n    }\n  };\n}\n\nconst systemModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\"];\nconst modifierGuards = {\n  stop: (e) => e.stopPropagation(),\n  prevent: (e) => e.preventDefault(),\n  self: (e) => e.target !== e.currentTarget,\n  ctrl: (e) => !e.ctrlKey,\n  shift: (e) => !e.shiftKey,\n  alt: (e) => !e.altKey,\n  meta: (e) => !e.metaKey,\n  left: (e) => \"button\" in e && e.button !== 0,\n  middle: (e) => \"button\" in e && e.button !== 1,\n  right: (e) => \"button\" in e && e.button !== 2,\n  exact: (e, modifiers) => systemModifiers.some((m) => e[`${m}Key`] && !modifiers.includes(m))\n};\nconst withModifiers = (fn, modifiers) => {\n  return (event, ...args) => {\n    for (let i = 0; i < modifiers.length; i++) {\n      const guard = modifierGuards[modifiers[i]];\n      if (guard && guard(event, modifiers))\n        return;\n    }\n    return fn(event, ...args);\n  };\n};\nconst keyNames = {\n  esc: \"escape\",\n  space: \" \",\n  up: \"arrow-up\",\n  left: \"arrow-left\",\n  right: \"arrow-right\",\n  down: \"arrow-down\",\n  delete: \"backspace\"\n};\nconst withKeys = (fn, modifiers) => {\n  return (event) => {\n    if (!(\"key\" in event)) {\n      return;\n    }\n    const eventKey = hyphenate(event.key);\n    if (modifiers.some((k) => k === eventKey || keyNames[k] === eventKey)) {\n      return fn(event);\n    }\n  };\n};\n\nconst vShow = {\n  beforeMount(el, { value }, { transition }) {\n    el._vod = el.style.display === \"none\" ? \"\" : el.style.display;\n    if (transition && value) {\n      transition.beforeEnter(el);\n    } else {\n      setDisplay(el, value);\n    }\n  },\n  mounted(el, { value }, { transition }) {\n    if (transition && value) {\n      transition.enter(el);\n    }\n  },\n  updated(el, { value, oldValue }, { transition }) {\n    if (!value === !oldValue)\n      return;\n    if (transition) {\n      if (value) {\n        transition.beforeEnter(el);\n        setDisplay(el, true);\n        transition.enter(el);\n      } else {\n        transition.leave(el, () => {\n          setDisplay(el, false);\n        });\n      }\n    } else {\n      setDisplay(el, value);\n    }\n  },\n  beforeUnmount(el, { value }) {\n    setDisplay(el, value);\n  }\n};\nfunction setDisplay(el, value) {\n  el.style.display = value ? el._vod : \"none\";\n}\nfunction initVShowForSSR() {\n  vShow.getSSRProps = ({ value }) => {\n    if (!value) {\n      return { style: { display: \"none\" } };\n    }\n  };\n}\n\nconst rendererOptions = /* @__PURE__ */ extend({ patchProp }, nodeOps);\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n  return renderer || (renderer = createRenderer(rendererOptions));\n}\nfunction ensureHydrationRenderer() {\n  renderer = enabledHydration ? renderer : createHydrationRenderer(rendererOptions);\n  enabledHydration = true;\n  return renderer;\n}\nconst render = (...args) => {\n  ensureRenderer().render(...args);\n};\nconst hydrate = (...args) => {\n  ensureHydrationRenderer().hydrate(...args);\n};\nconst createApp = (...args) => {\n  const app = ensureRenderer().createApp(...args);\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    injectNativeTagCheck(app);\n    injectCompilerOptionsCheck(app);\n  }\n  const { mount } = app;\n  app.mount = (containerOrSelector) => {\n    const container = normalizeContainer(containerOrSelector);\n    if (!container)\n      return;\n    const component = app._component;\n    if (!isFunction(component) && !component.render && !component.template) {\n      component.template = container.innerHTML;\n    }\n    container.innerHTML = \"\";\n    const proxy = mount(container, false, container instanceof SVGElement);\n    if (container instanceof Element) {\n      container.removeAttribute(\"v-cloak\");\n      container.setAttribute(\"data-v-app\", \"\");\n    }\n    return proxy;\n  };\n  return app;\n};\nconst createSSRApp = (...args) => {\n  const app = ensureHydrationRenderer().createApp(...args);\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    injectNativeTagCheck(app);\n    injectCompilerOptionsCheck(app);\n  }\n  const { mount } = app;\n  app.mount = (containerOrSelector) => {\n    const container = normalizeContainer(containerOrSelector);\n    if (container) {\n      return mount(container, true, container instanceof SVGElement);\n    }\n  };\n  return app;\n};\nfunction injectNativeTagCheck(app) {\n  Object.defineProperty(app.config, \"isNativeTag\", {\n    value: (tag) => isHTMLTag(tag) || isSVGTag(tag),\n    writable: false\n  });\n}\nfunction injectCompilerOptionsCheck(app) {\n  if (isRuntimeOnly()) {\n    const isCustomElement = app.config.isCustomElement;\n    Object.defineProperty(app.config, \"isCustomElement\", {\n      get() {\n        return isCustomElement;\n      },\n      set() {\n        warn(\n          `The \\`isCustomElement\\` config option is deprecated. Use \\`compilerOptions.isCustomElement\\` instead.`\n        );\n      }\n    });\n    const compilerOptions = app.config.compilerOptions;\n    const msg = `The \\`compilerOptions\\` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka \"full build\"). Since you are using the runtime-only build, \\`compilerOptions\\` must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\n- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\n- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\n- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc`;\n    Object.defineProperty(app.config, \"compilerOptions\", {\n      get() {\n        warn(msg);\n        return compilerOptions;\n      },\n      set() {\n        warn(msg);\n      }\n    });\n  }\n}\nfunction normalizeContainer(container) {\n  if (isString(container)) {\n    const res = document.querySelector(container);\n    if (!!(process.env.NODE_ENV !== \"production\") && !res) {\n      warn(\n        `Failed to mount app: mount target selector \"${container}\" returned null.`\n      );\n    }\n    return res;\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") && window.ShadowRoot && container instanceof window.ShadowRoot && container.mode === \"closed\") {\n    warn(\n      `mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`\n    );\n  }\n  return container;\n}\nlet ssrDirectiveInitialized = false;\nconst initDirectivesForSSR = () => {\n  if (!ssrDirectiveInitialized) {\n    ssrDirectiveInitialized = true;\n    initVModelForSSR();\n    initVShowForSSR();\n  }\n} ;\n\nexport { Transition, TransitionGroup, VueElement, createApp, createSSRApp, defineCustomElement, defineSSRCustomElement, hydrate, initDirectivesForSSR, render, useCssModule, useCssVars, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, withKeys, withModifiers };\n","/*!\n  * shared v9.2.2\n  * (c) 2022 kazuya kawaguchi\n  * Released under the MIT License.\n  */\n/**\r\n * Original Utilities\r\n * written by kazuya kawaguchi\r\n */\r\nconst inBrowser = typeof window !== 'undefined';\r\nlet mark;\r\nlet measure;\r\nif ((process.env.NODE_ENV !== 'production')) {\r\n    const perf = inBrowser && window.performance;\r\n    if (perf &&\r\n        perf.mark &&\r\n        perf.measure &&\r\n        perf.clearMarks &&\r\n        perf.clearMeasures) {\r\n        mark = (tag) => perf.mark(tag);\r\n        measure = (name, startTag, endTag) => {\r\n            perf.measure(name, startTag, endTag);\r\n            perf.clearMarks(startTag);\r\n            perf.clearMarks(endTag);\r\n        };\r\n    }\r\n}\r\nconst RE_ARGS = /\\{([0-9a-zA-Z]+)\\}/g;\r\n/* eslint-disable */\r\nfunction format(message, ...args) {\r\n    if (args.length === 1 && isObject(args[0])) {\r\n        args = args[0];\r\n    }\r\n    if (!args || !args.hasOwnProperty) {\r\n        args = {};\r\n    }\r\n    return message.replace(RE_ARGS, (match, identifier) => {\r\n        return args.hasOwnProperty(identifier) ? args[identifier] : '';\r\n    });\r\n}\r\nconst hasSymbol = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\r\nconst makeSymbol = (name) => hasSymbol ? Symbol(name) : name;\r\nconst generateFormatCacheKey = (locale, key, source) => friendlyJSONstringify({ l: locale, k: key, s: source });\r\nconst friendlyJSONstringify = (json) => JSON.stringify(json)\r\n    .replace(/\\u2028/g, '\\\\u2028')\r\n    .replace(/\\u2029/g, '\\\\u2029')\r\n    .replace(/\\u0027/g, '\\\\u0027');\r\nconst isNumber = (val) => typeof val === 'number' && isFinite(val);\r\nconst isDate = (val) => toTypeString(val) === '[object Date]';\r\nconst isRegExp = (val) => toTypeString(val) === '[object RegExp]';\r\nconst isEmptyObject = (val) => isPlainObject(val) && Object.keys(val).length === 0;\r\nfunction warn(msg, err) {\r\n    if (typeof console !== 'undefined') {\r\n        console.warn(`[intlify] ` + msg);\r\n        /* istanbul ignore if */\r\n        if (err) {\r\n            console.warn(err.stack);\r\n        }\r\n    }\r\n}\r\nconst assign = Object.assign;\r\nlet _globalThis;\r\nconst getGlobalThis = () => {\r\n    // prettier-ignore\r\n    return (_globalThis ||\r\n        (_globalThis =\r\n            typeof globalThis !== 'undefined'\r\n                ? globalThis\r\n                : typeof self !== 'undefined'\r\n                    ? self\r\n                    : typeof window !== 'undefined'\r\n                        ? window\r\n                        : typeof global !== 'undefined'\r\n                            ? global\r\n                            : {}));\r\n};\r\nfunction escapeHtml(rawText) {\r\n    return rawText\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/'/g, '&apos;');\r\n}\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\nfunction hasOwn(obj, key) {\r\n    return hasOwnProperty.call(obj, key);\r\n}\r\n/* eslint-enable */\r\n/**\r\n * Useful Utilities By Evan you\r\n * Modified by kazuya kawaguchi\r\n * MIT License\r\n * https://github.com/vuejs/vue-next/blob/master/packages/shared/src/index.ts\r\n * https://github.com/vuejs/vue-next/blob/master/packages/shared/src/codeframe.ts\r\n */\r\nconst isArray = Array.isArray;\r\nconst isFunction = (val) => typeof val === 'function';\r\nconst isString = (val) => typeof val === 'string';\r\nconst isBoolean = (val) => typeof val === 'boolean';\r\nconst isSymbol = (val) => typeof val === 'symbol';\r\nconst isObject = (val) => // eslint-disable-line\r\n val !== null && typeof val === 'object';\r\nconst isPromise = (val) => {\r\n    return isObject(val) && isFunction(val.then) && isFunction(val.catch);\r\n};\r\nconst objectToString = Object.prototype.toString;\r\nconst toTypeString = (value) => objectToString.call(value);\r\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\r\n// for converting list and named values to displayed strings.\r\nconst toDisplayString = (val) => {\r\n    return val == null\r\n        ? ''\r\n        : isArray(val) || (isPlainObject(val) && val.toString === objectToString)\r\n            ? JSON.stringify(val, null, 2)\r\n            : String(val);\r\n};\r\nconst RANGE = 2;\r\nfunction generateCodeFrame(source, start = 0, end = source.length) {\r\n    const lines = source.split(/\\r?\\n/);\r\n    let count = 0;\r\n    const res = [];\r\n    for (let i = 0; i < lines.length; i++) {\r\n        count += lines[i].length + 1;\r\n        if (count >= start) {\r\n            for (let j = i - RANGE; j <= i + RANGE || end > count; j++) {\r\n                if (j < 0 || j >= lines.length)\r\n                    continue;\r\n                const line = j + 1;\r\n                res.push(`${line}${' '.repeat(3 - String(line).length)}|  ${lines[j]}`);\r\n                const lineLength = lines[j].length;\r\n                if (j === i) {\r\n                    // push underline\r\n                    const pad = start - (count - lineLength) + 1;\r\n                    const length = Math.max(1, end > count ? lineLength - pad : end - start);\r\n                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));\r\n                }\r\n                else if (j > i) {\r\n                    if (end > count) {\r\n                        const length = Math.max(Math.min(end - count, lineLength), 1);\r\n                        res.push(`   |  ` + '^'.repeat(length));\r\n                    }\r\n                    count += lineLength + 1;\r\n                }\r\n            }\r\n            break;\r\n        }\r\n    }\r\n    return res.join('\\n');\r\n}\n\n/**\r\n * Event emitter, forked from the below:\r\n * - original repository url: https://github.com/developit/mitt\r\n * - code url: https://github.com/developit/mitt/blob/master/src/index.ts\r\n * - author: Jason Miller (https://github.com/developit)\r\n * - license: MIT\r\n */\r\n/**\r\n * Create a event emitter\r\n *\r\n * @returns An event emitter\r\n */\r\nfunction createEmitter() {\r\n    const events = new Map();\r\n    const emitter = {\r\n        events,\r\n        on(event, handler) {\r\n            const handlers = events.get(event);\r\n            const added = handlers && handlers.push(handler);\r\n            if (!added) {\r\n                events.set(event, [handler]);\r\n            }\r\n        },\r\n        off(event, handler) {\r\n            const handlers = events.get(event);\r\n            if (handlers) {\r\n                handlers.splice(handlers.indexOf(handler) >>> 0, 1);\r\n            }\r\n        },\r\n        emit(event, payload) {\r\n            (events.get(event) || [])\r\n                .slice()\r\n                .map(handler => handler(payload));\r\n            (events.get('*') || [])\r\n                .slice()\r\n                .map(handler => handler(event, payload));\r\n        }\r\n    };\r\n    return emitter;\r\n}\n\nexport { assign, createEmitter, escapeHtml, format, friendlyJSONstringify, generateCodeFrame, generateFormatCacheKey, getGlobalThis, hasOwn, inBrowser, isArray, isBoolean, isDate, isEmptyObject, isFunction, isNumber, isObject, isPlainObject, isPromise, isRegExp, isString, isSymbol, makeSymbol, mark, measure, objectToString, toDisplayString, toTypeString, warn };\n","/*!\n  * message-compiler v9.2.2\n  * (c) 2022 kazuya kawaguchi\n  * Released under the MIT License.\n  */\nimport { format, assign, isString } from '@intlify/shared';\n\nconst CompileErrorCodes = {\r\n    // tokenizer error codes\r\n    EXPECTED_TOKEN: 1,\r\n    INVALID_TOKEN_IN_PLACEHOLDER: 2,\r\n    UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER: 3,\r\n    UNKNOWN_ESCAPE_SEQUENCE: 4,\r\n    INVALID_UNICODE_ESCAPE_SEQUENCE: 5,\r\n    UNBALANCED_CLOSING_BRACE: 6,\r\n    UNTERMINATED_CLOSING_BRACE: 7,\r\n    EMPTY_PLACEHOLDER: 8,\r\n    NOT_ALLOW_NEST_PLACEHOLDER: 9,\r\n    INVALID_LINKED_FORMAT: 10,\r\n    // parser error codes\r\n    MUST_HAVE_MESSAGES_IN_PLURAL: 11,\r\n    UNEXPECTED_EMPTY_LINKED_MODIFIER: 12,\r\n    UNEXPECTED_EMPTY_LINKED_KEY: 13,\r\n    UNEXPECTED_LEXICAL_ANALYSIS: 14,\r\n    // Special value for higher-order compilers to pick up the last code\r\n    // to avoid collision of error codes. This should always be kept as the last\r\n    // item.\r\n    __EXTEND_POINT__: 15\r\n};\r\n/** @internal */\r\nconst errorMessages = {\r\n    // tokenizer error messages\r\n    [CompileErrorCodes.EXPECTED_TOKEN]: `Expected token: '{0}'`,\r\n    [CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER]: `Invalid token in placeholder: '{0}'`,\r\n    [CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]: `Unterminated single quote in placeholder`,\r\n    [CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE]: `Unknown escape sequence: \\\\{0}`,\r\n    [CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE]: `Invalid unicode escape sequence: {0}`,\r\n    [CompileErrorCodes.UNBALANCED_CLOSING_BRACE]: `Unbalanced closing brace`,\r\n    [CompileErrorCodes.UNTERMINATED_CLOSING_BRACE]: `Unterminated closing brace`,\r\n    [CompileErrorCodes.EMPTY_PLACEHOLDER]: `Empty placeholder`,\r\n    [CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER]: `Not allowed nest placeholder`,\r\n    [CompileErrorCodes.INVALID_LINKED_FORMAT]: `Invalid linked format`,\r\n    // parser error messages\r\n    [CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL]: `Plural must have messages`,\r\n    [CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER]: `Unexpected empty linked modifier`,\r\n    [CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY]: `Unexpected empty linked key`,\r\n    [CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS]: `Unexpected lexical analysis in token: '{0}'`\r\n};\r\nfunction createCompileError(code, loc, options = {}) {\r\n    const { domain, messages, args } = options;\r\n    const msg = (process.env.NODE_ENV !== 'production')\r\n        ? format((messages || errorMessages)[code] || '', ...(args || []))\r\n        : code;\r\n    const error = new SyntaxError(String(msg));\r\n    error.code = code;\r\n    if (loc) {\r\n        error.location = loc;\r\n    }\r\n    error.domain = domain;\r\n    return error;\r\n}\r\n/** @internal */\r\nfunction defaultOnError(error) {\r\n    throw error;\r\n}\n\nconst LocationStub = {\r\n    start: { line: 1, column: 1, offset: 0 },\r\n    end: { line: 1, column: 1, offset: 0 }\r\n};\r\nfunction createPosition(line, column, offset) {\r\n    return { line, column, offset };\r\n}\r\nfunction createLocation(start, end, source) {\r\n    const loc = { start, end };\r\n    if (source != null) {\r\n        loc.source = source;\r\n    }\r\n    return loc;\r\n}\n\nconst CHAR_SP = ' ';\r\nconst CHAR_CR = '\\r';\r\nconst CHAR_LF = '\\n';\r\nconst CHAR_LS = String.fromCharCode(0x2028);\r\nconst CHAR_PS = String.fromCharCode(0x2029);\r\nfunction createScanner(str) {\r\n    const _buf = str;\r\n    let _index = 0;\r\n    let _line = 1;\r\n    let _column = 1;\r\n    let _peekOffset = 0;\r\n    const isCRLF = (index) => _buf[index] === CHAR_CR && _buf[index + 1] === CHAR_LF;\r\n    const isLF = (index) => _buf[index] === CHAR_LF;\r\n    const isPS = (index) => _buf[index] === CHAR_PS;\r\n    const isLS = (index) => _buf[index] === CHAR_LS;\r\n    const isLineEnd = (index) => isCRLF(index) || isLF(index) || isPS(index) || isLS(index);\r\n    const index = () => _index;\r\n    const line = () => _line;\r\n    const column = () => _column;\r\n    const peekOffset = () => _peekOffset;\r\n    const charAt = (offset) => isCRLF(offset) || isPS(offset) || isLS(offset) ? CHAR_LF : _buf[offset];\r\n    const currentChar = () => charAt(_index);\r\n    const currentPeek = () => charAt(_index + _peekOffset);\r\n    function next() {\r\n        _peekOffset = 0;\r\n        if (isLineEnd(_index)) {\r\n            _line++;\r\n            _column = 0;\r\n        }\r\n        if (isCRLF(_index)) {\r\n            _index++;\r\n        }\r\n        _index++;\r\n        _column++;\r\n        return _buf[_index];\r\n    }\r\n    function peek() {\r\n        if (isCRLF(_index + _peekOffset)) {\r\n            _peekOffset++;\r\n        }\r\n        _peekOffset++;\r\n        return _buf[_index + _peekOffset];\r\n    }\r\n    function reset() {\r\n        _index = 0;\r\n        _line = 1;\r\n        _column = 1;\r\n        _peekOffset = 0;\r\n    }\r\n    function resetPeek(offset = 0) {\r\n        _peekOffset = offset;\r\n    }\r\n    function skipToPeek() {\r\n        const target = _index + _peekOffset;\r\n        // eslint-disable-next-line no-unmodified-loop-condition\r\n        while (target !== _index) {\r\n            next();\r\n        }\r\n        _peekOffset = 0;\r\n    }\r\n    return {\r\n        index,\r\n        line,\r\n        column,\r\n        peekOffset,\r\n        charAt,\r\n        currentChar,\r\n        currentPeek,\r\n        next,\r\n        peek,\r\n        reset,\r\n        resetPeek,\r\n        skipToPeek\r\n    };\r\n}\n\nconst EOF = undefined;\r\nconst LITERAL_DELIMITER = \"'\";\r\nconst ERROR_DOMAIN$1 = 'tokenizer';\r\nfunction createTokenizer(source, options = {}) {\r\n    const location = options.location !== false;\r\n    const _scnr = createScanner(source);\r\n    const currentOffset = () => _scnr.index();\r\n    const currentPosition = () => createPosition(_scnr.line(), _scnr.column(), _scnr.index());\r\n    const _initLoc = currentPosition();\r\n    const _initOffset = currentOffset();\r\n    const _context = {\r\n        currentType: 14 /* EOF */,\r\n        offset: _initOffset,\r\n        startLoc: _initLoc,\r\n        endLoc: _initLoc,\r\n        lastType: 14 /* EOF */,\r\n        lastOffset: _initOffset,\r\n        lastStartLoc: _initLoc,\r\n        lastEndLoc: _initLoc,\r\n        braceNest: 0,\r\n        inLinked: false,\r\n        text: ''\r\n    };\r\n    const context = () => _context;\r\n    const { onError } = options;\r\n    function emitError(code, pos, offset, ...args) {\r\n        const ctx = context();\r\n        pos.column += offset;\r\n        pos.offset += offset;\r\n        if (onError) {\r\n            const loc = createLocation(ctx.startLoc, pos);\r\n            const err = createCompileError(code, loc, {\r\n                domain: ERROR_DOMAIN$1,\r\n                args\r\n            });\r\n            onError(err);\r\n        }\r\n    }\r\n    function getToken(context, type, value) {\r\n        context.endLoc = currentPosition();\r\n        context.currentType = type;\r\n        const token = { type };\r\n        if (location) {\r\n            token.loc = createLocation(context.startLoc, context.endLoc);\r\n        }\r\n        if (value != null) {\r\n            token.value = value;\r\n        }\r\n        return token;\r\n    }\r\n    const getEndToken = (context) => getToken(context, 14 /* EOF */);\r\n    function eat(scnr, ch) {\r\n        if (scnr.currentChar() === ch) {\r\n            scnr.next();\r\n            return ch;\r\n        }\r\n        else {\r\n            emitError(CompileErrorCodes.EXPECTED_TOKEN, currentPosition(), 0, ch);\r\n            return '';\r\n        }\r\n    }\r\n    function peekSpaces(scnr) {\r\n        let buf = '';\r\n        while (scnr.currentPeek() === CHAR_SP || scnr.currentPeek() === CHAR_LF) {\r\n            buf += scnr.currentPeek();\r\n            scnr.peek();\r\n        }\r\n        return buf;\r\n    }\r\n    function skipSpaces(scnr) {\r\n        const buf = peekSpaces(scnr);\r\n        scnr.skipToPeek();\r\n        return buf;\r\n    }\r\n    function isIdentifierStart(ch) {\r\n        if (ch === EOF) {\r\n            return false;\r\n        }\r\n        const cc = ch.charCodeAt(0);\r\n        return ((cc >= 97 && cc <= 122) || // a-z\r\n            (cc >= 65 && cc <= 90) || // A-Z\r\n            cc === 95 // _\r\n        );\r\n    }\r\n    function isNumberStart(ch) {\r\n        if (ch === EOF) {\r\n            return false;\r\n        }\r\n        const cc = ch.charCodeAt(0);\r\n        return cc >= 48 && cc <= 57; // 0-9\r\n    }\r\n    function isNamedIdentifierStart(scnr, context) {\r\n        const { currentType } = context;\r\n        if (currentType !== 2 /* BraceLeft */) {\r\n            return false;\r\n        }\r\n        peekSpaces(scnr);\r\n        const ret = isIdentifierStart(scnr.currentPeek());\r\n        scnr.resetPeek();\r\n        return ret;\r\n    }\r\n    function isListIdentifierStart(scnr, context) {\r\n        const { currentType } = context;\r\n        if (currentType !== 2 /* BraceLeft */) {\r\n            return false;\r\n        }\r\n        peekSpaces(scnr);\r\n        const ch = scnr.currentPeek() === '-' ? scnr.peek() : scnr.currentPeek();\r\n        const ret = isNumberStart(ch);\r\n        scnr.resetPeek();\r\n        return ret;\r\n    }\r\n    function isLiteralStart(scnr, context) {\r\n        const { currentType } = context;\r\n        if (currentType !== 2 /* BraceLeft */) {\r\n            return false;\r\n        }\r\n        peekSpaces(scnr);\r\n        const ret = scnr.currentPeek() === LITERAL_DELIMITER;\r\n        scnr.resetPeek();\r\n        return ret;\r\n    }\r\n    function isLinkedDotStart(scnr, context) {\r\n        const { currentType } = context;\r\n        if (currentType !== 8 /* LinkedAlias */) {\r\n            return false;\r\n        }\r\n        peekSpaces(scnr);\r\n        const ret = scnr.currentPeek() === \".\" /* LinkedDot */;\r\n        scnr.resetPeek();\r\n        return ret;\r\n    }\r\n    function isLinkedModifierStart(scnr, context) {\r\n        const { currentType } = context;\r\n        if (currentType !== 9 /* LinkedDot */) {\r\n            return false;\r\n        }\r\n        peekSpaces(scnr);\r\n        const ret = isIdentifierStart(scnr.currentPeek());\r\n        scnr.resetPeek();\r\n        return ret;\r\n    }\r\n    function isLinkedDelimiterStart(scnr, context) {\r\n        const { currentType } = context;\r\n        if (!(currentType === 8 /* LinkedAlias */ ||\r\n            currentType === 12 /* LinkedModifier */)) {\r\n            return false;\r\n        }\r\n        peekSpaces(scnr);\r\n        const ret = scnr.currentPeek() === \":\" /* LinkedDelimiter */;\r\n        scnr.resetPeek();\r\n        return ret;\r\n    }\r\n    function isLinkedReferStart(scnr, context) {\r\n        const { currentType } = context;\r\n        if (currentType !== 10 /* LinkedDelimiter */) {\r\n            return false;\r\n        }\r\n        const fn = () => {\r\n            const ch = scnr.currentPeek();\r\n            if (ch === \"{\" /* BraceLeft */) {\r\n                return isIdentifierStart(scnr.peek());\r\n            }\r\n            else if (ch === \"@\" /* LinkedAlias */ ||\r\n                ch === \"%\" /* Modulo */ ||\r\n                ch === \"|\" /* Pipe */ ||\r\n                ch === \":\" /* LinkedDelimiter */ ||\r\n                ch === \".\" /* LinkedDot */ ||\r\n                ch === CHAR_SP ||\r\n                !ch) {\r\n                return false;\r\n            }\r\n            else if (ch === CHAR_LF) {\r\n                scnr.peek();\r\n                return fn();\r\n            }\r\n            else {\r\n                // other characters\r\n                return isIdentifierStart(ch);\r\n            }\r\n        };\r\n        const ret = fn();\r\n        scnr.resetPeek();\r\n        return ret;\r\n    }\r\n    function isPluralStart(scnr) {\r\n        peekSpaces(scnr);\r\n        const ret = scnr.currentPeek() === \"|\" /* Pipe */;\r\n        scnr.resetPeek();\r\n        return ret;\r\n    }\r\n    function detectModuloStart(scnr) {\r\n        const spaces = peekSpaces(scnr);\r\n        const ret = scnr.currentPeek() === \"%\" /* Modulo */ &&\r\n            scnr.peek() === \"{\" /* BraceLeft */;\r\n        scnr.resetPeek();\r\n        return {\r\n            isModulo: ret,\r\n            hasSpace: spaces.length > 0\r\n        };\r\n    }\r\n    function isTextStart(scnr, reset = true) {\r\n        const fn = (hasSpace = false, prev = '', detectModulo = false) => {\r\n            const ch = scnr.currentPeek();\r\n            if (ch === \"{\" /* BraceLeft */) {\r\n                return prev === \"%\" /* Modulo */ ? false : hasSpace;\r\n            }\r\n            else if (ch === \"@\" /* LinkedAlias */ || !ch) {\r\n                return prev === \"%\" /* Modulo */ ? true : hasSpace;\r\n            }\r\n            else if (ch === \"%\" /* Modulo */) {\r\n                scnr.peek();\r\n                return fn(hasSpace, \"%\" /* Modulo */, true);\r\n            }\r\n            else if (ch === \"|\" /* Pipe */) {\r\n                return prev === \"%\" /* Modulo */ || detectModulo\r\n                    ? true\r\n                    : !(prev === CHAR_SP || prev === CHAR_LF);\r\n            }\r\n            else if (ch === CHAR_SP) {\r\n                scnr.peek();\r\n                return fn(true, CHAR_SP, detectModulo);\r\n            }\r\n            else if (ch === CHAR_LF) {\r\n                scnr.peek();\r\n                return fn(true, CHAR_LF, detectModulo);\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        };\r\n        const ret = fn();\r\n        reset && scnr.resetPeek();\r\n        return ret;\r\n    }\r\n    function takeChar(scnr, fn) {\r\n        const ch = scnr.currentChar();\r\n        if (ch === EOF) {\r\n            return EOF;\r\n        }\r\n        if (fn(ch)) {\r\n            scnr.next();\r\n            return ch;\r\n        }\r\n        return null;\r\n    }\r\n    function takeIdentifierChar(scnr) {\r\n        const closure = (ch) => {\r\n            const cc = ch.charCodeAt(0);\r\n            return ((cc >= 97 && cc <= 122) || // a-z\r\n                (cc >= 65 && cc <= 90) || // A-Z\r\n                (cc >= 48 && cc <= 57) || // 0-9\r\n                cc === 95 || // _\r\n                cc === 36 // $\r\n            );\r\n        };\r\n        return takeChar(scnr, closure);\r\n    }\r\n    function takeDigit(scnr) {\r\n        const closure = (ch) => {\r\n            const cc = ch.charCodeAt(0);\r\n            return cc >= 48 && cc <= 57; // 0-9\r\n        };\r\n        return takeChar(scnr, closure);\r\n    }\r\n    function takeHexDigit(scnr) {\r\n        const closure = (ch) => {\r\n            const cc = ch.charCodeAt(0);\r\n            return ((cc >= 48 && cc <= 57) || // 0-9\r\n                (cc >= 65 && cc <= 70) || // A-F\r\n                (cc >= 97 && cc <= 102)); // a-f\r\n        };\r\n        return takeChar(scnr, closure);\r\n    }\r\n    function getDigits(scnr) {\r\n        let ch = '';\r\n        let num = '';\r\n        while ((ch = takeDigit(scnr))) {\r\n            num += ch;\r\n        }\r\n        return num;\r\n    }\r\n    function readModulo(scnr) {\r\n        skipSpaces(scnr);\r\n        const ch = scnr.currentChar();\r\n        if (ch !== \"%\" /* Modulo */) {\r\n            emitError(CompileErrorCodes.EXPECTED_TOKEN, currentPosition(), 0, ch);\r\n        }\r\n        scnr.next();\r\n        return \"%\" /* Modulo */;\r\n    }\r\n    function readText(scnr) {\r\n        let buf = '';\r\n        while (true) {\r\n            const ch = scnr.currentChar();\r\n            if (ch === \"{\" /* BraceLeft */ ||\r\n                ch === \"}\" /* BraceRight */ ||\r\n                ch === \"@\" /* LinkedAlias */ ||\r\n                ch === \"|\" /* Pipe */ ||\r\n                !ch) {\r\n                break;\r\n            }\r\n            else if (ch === \"%\" /* Modulo */) {\r\n                if (isTextStart(scnr)) {\r\n                    buf += ch;\r\n                    scnr.next();\r\n                }\r\n                else {\r\n                    break;\r\n                }\r\n            }\r\n            else if (ch === CHAR_SP || ch === CHAR_LF) {\r\n                if (isTextStart(scnr)) {\r\n                    buf += ch;\r\n                    scnr.next();\r\n                }\r\n                else if (isPluralStart(scnr)) {\r\n                    break;\r\n                }\r\n                else {\r\n                    buf += ch;\r\n                    scnr.next();\r\n                }\r\n            }\r\n            else {\r\n                buf += ch;\r\n                scnr.next();\r\n            }\r\n        }\r\n        return buf;\r\n    }\r\n    function readNamedIdentifier(scnr) {\r\n        skipSpaces(scnr);\r\n        let ch = '';\r\n        let name = '';\r\n        while ((ch = takeIdentifierChar(scnr))) {\r\n            name += ch;\r\n        }\r\n        if (scnr.currentChar() === EOF) {\r\n            emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\r\n        }\r\n        return name;\r\n    }\r\n    function readListIdentifier(scnr) {\r\n        skipSpaces(scnr);\r\n        let value = '';\r\n        if (scnr.currentChar() === '-') {\r\n            scnr.next();\r\n            value += `-${getDigits(scnr)}`;\r\n        }\r\n        else {\r\n            value += getDigits(scnr);\r\n        }\r\n        if (scnr.currentChar() === EOF) {\r\n            emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\r\n        }\r\n        return value;\r\n    }\r\n    function readLiteral(scnr) {\r\n        skipSpaces(scnr);\r\n        eat(scnr, `\\'`);\r\n        let ch = '';\r\n        let literal = '';\r\n        const fn = (x) => x !== LITERAL_DELIMITER && x !== CHAR_LF;\r\n        while ((ch = takeChar(scnr, fn))) {\r\n            if (ch === '\\\\') {\r\n                literal += readEscapeSequence(scnr);\r\n            }\r\n            else {\r\n                literal += ch;\r\n            }\r\n        }\r\n        const current = scnr.currentChar();\r\n        if (current === CHAR_LF || current === EOF) {\r\n            emitError(CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER, currentPosition(), 0);\r\n            // TODO: Is it correct really?\r\n            if (current === CHAR_LF) {\r\n                scnr.next();\r\n                eat(scnr, `\\'`);\r\n            }\r\n            return literal;\r\n        }\r\n        eat(scnr, `\\'`);\r\n        return literal;\r\n    }\r\n    function readEscapeSequence(scnr) {\r\n        const ch = scnr.currentChar();\r\n        switch (ch) {\r\n            case '\\\\':\r\n            case `\\'`:\r\n                scnr.next();\r\n                return `\\\\${ch}`;\r\n            case 'u':\r\n                return readUnicodeEscapeSequence(scnr, ch, 4);\r\n            case 'U':\r\n                return readUnicodeEscapeSequence(scnr, ch, 6);\r\n            default:\r\n                emitError(CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE, currentPosition(), 0, ch);\r\n                return '';\r\n        }\r\n    }\r\n    function readUnicodeEscapeSequence(scnr, unicode, digits) {\r\n        eat(scnr, unicode);\r\n        let sequence = '';\r\n        for (let i = 0; i < digits; i++) {\r\n            const ch = takeHexDigit(scnr);\r\n            if (!ch) {\r\n                emitError(CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE, currentPosition(), 0, `\\\\${unicode}${sequence}${scnr.currentChar()}`);\r\n                break;\r\n            }\r\n            sequence += ch;\r\n        }\r\n        return `\\\\${unicode}${sequence}`;\r\n    }\r\n    function readInvalidIdentifier(scnr) {\r\n        skipSpaces(scnr);\r\n        let ch = '';\r\n        let identifiers = '';\r\n        const closure = (ch) => ch !== \"{\" /* BraceLeft */ &&\r\n            ch !== \"}\" /* BraceRight */ &&\r\n            ch !== CHAR_SP &&\r\n            ch !== CHAR_LF;\r\n        while ((ch = takeChar(scnr, closure))) {\r\n            identifiers += ch;\r\n        }\r\n        return identifiers;\r\n    }\r\n    function readLinkedModifier(scnr) {\r\n        let ch = '';\r\n        let name = '';\r\n        while ((ch = takeIdentifierChar(scnr))) {\r\n            name += ch;\r\n        }\r\n        return name;\r\n    }\r\n    function readLinkedRefer(scnr) {\r\n        const fn = (detect = false, buf) => {\r\n            const ch = scnr.currentChar();\r\n            if (ch === \"{\" /* BraceLeft */ ||\r\n                ch === \"%\" /* Modulo */ ||\r\n                ch === \"@\" /* LinkedAlias */ ||\r\n                ch === \"|\" /* Pipe */ ||\r\n                !ch) {\r\n                return buf;\r\n            }\r\n            else if (ch === CHAR_SP) {\r\n                return buf;\r\n            }\r\n            else if (ch === CHAR_LF) {\r\n                buf += ch;\r\n                scnr.next();\r\n                return fn(detect, buf);\r\n            }\r\n            else {\r\n                buf += ch;\r\n                scnr.next();\r\n                return fn(true, buf);\r\n            }\r\n        };\r\n        return fn(false, '');\r\n    }\r\n    function readPlural(scnr) {\r\n        skipSpaces(scnr);\r\n        const plural = eat(scnr, \"|\" /* Pipe */);\r\n        skipSpaces(scnr);\r\n        return plural;\r\n    }\r\n    // TODO: We need refactoring of token parsing ...\r\n    function readTokenInPlaceholder(scnr, context) {\r\n        let token = null;\r\n        const ch = scnr.currentChar();\r\n        switch (ch) {\r\n            case \"{\" /* BraceLeft */:\r\n                if (context.braceNest >= 1) {\r\n                    emitError(CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER, currentPosition(), 0);\r\n                }\r\n                scnr.next();\r\n                token = getToken(context, 2 /* BraceLeft */, \"{\" /* BraceLeft */);\r\n                skipSpaces(scnr);\r\n                context.braceNest++;\r\n                return token;\r\n            case \"}\" /* BraceRight */:\r\n                if (context.braceNest > 0 &&\r\n                    context.currentType === 2 /* BraceLeft */) {\r\n                    emitError(CompileErrorCodes.EMPTY_PLACEHOLDER, currentPosition(), 0);\r\n                }\r\n                scnr.next();\r\n                token = getToken(context, 3 /* BraceRight */, \"}\" /* BraceRight */);\r\n                context.braceNest--;\r\n                context.braceNest > 0 && skipSpaces(scnr);\r\n                if (context.inLinked && context.braceNest === 0) {\r\n                    context.inLinked = false;\r\n                }\r\n                return token;\r\n            case \"@\" /* LinkedAlias */:\r\n                if (context.braceNest > 0) {\r\n                    emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\r\n                }\r\n                token = readTokenInLinked(scnr, context) || getEndToken(context);\r\n                context.braceNest = 0;\r\n                return token;\r\n            default:\r\n                let validNamedIdentifier = true;\r\n                let validListIdentifier = true;\r\n                let validLiteral = true;\r\n                if (isPluralStart(scnr)) {\r\n                    if (context.braceNest > 0) {\r\n                        emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\r\n                    }\r\n                    token = getToken(context, 1 /* Pipe */, readPlural(scnr));\r\n                    // reset\r\n                    context.braceNest = 0;\r\n                    context.inLinked = false;\r\n                    return token;\r\n                }\r\n                if (context.braceNest > 0 &&\r\n                    (context.currentType === 5 /* Named */ ||\r\n                        context.currentType === 6 /* List */ ||\r\n                        context.currentType === 7 /* Literal */)) {\r\n                    emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\r\n                    context.braceNest = 0;\r\n                    return readToken(scnr, context);\r\n                }\r\n                if ((validNamedIdentifier = isNamedIdentifierStart(scnr, context))) {\r\n                    token = getToken(context, 5 /* Named */, readNamedIdentifier(scnr));\r\n                    skipSpaces(scnr);\r\n                    return token;\r\n                }\r\n                if ((validListIdentifier = isListIdentifierStart(scnr, context))) {\r\n                    token = getToken(context, 6 /* List */, readListIdentifier(scnr));\r\n                    skipSpaces(scnr);\r\n                    return token;\r\n                }\r\n                if ((validLiteral = isLiteralStart(scnr, context))) {\r\n                    token = getToken(context, 7 /* Literal */, readLiteral(scnr));\r\n                    skipSpaces(scnr);\r\n                    return token;\r\n                }\r\n                if (!validNamedIdentifier && !validListIdentifier && !validLiteral) {\r\n                    // TODO: we should be re-designed invalid cases, when we will extend message syntax near the future ...\r\n                    token = getToken(context, 13 /* InvalidPlace */, readInvalidIdentifier(scnr));\r\n                    emitError(CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER, currentPosition(), 0, token.value);\r\n                    skipSpaces(scnr);\r\n                    return token;\r\n                }\r\n                break;\r\n        }\r\n        return token;\r\n    }\r\n    // TODO: We need refactoring of token parsing ...\r\n    function readTokenInLinked(scnr, context) {\r\n        const { currentType } = context;\r\n        let token = null;\r\n        const ch = scnr.currentChar();\r\n        if ((currentType === 8 /* LinkedAlias */ ||\r\n            currentType === 9 /* LinkedDot */ ||\r\n            currentType === 12 /* LinkedModifier */ ||\r\n            currentType === 10 /* LinkedDelimiter */) &&\r\n            (ch === CHAR_LF || ch === CHAR_SP)) {\r\n            emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0);\r\n        }\r\n        switch (ch) {\r\n            case \"@\" /* LinkedAlias */:\r\n                scnr.next();\r\n                token = getToken(context, 8 /* LinkedAlias */, \"@\" /* LinkedAlias */);\r\n                context.inLinked = true;\r\n                return token;\r\n            case \".\" /* LinkedDot */:\r\n                skipSpaces(scnr);\r\n                scnr.next();\r\n                return getToken(context, 9 /* LinkedDot */, \".\" /* LinkedDot */);\r\n            case \":\" /* LinkedDelimiter */:\r\n                skipSpaces(scnr);\r\n                scnr.next();\r\n                return getToken(context, 10 /* LinkedDelimiter */, \":\" /* LinkedDelimiter */);\r\n            default:\r\n                if (isPluralStart(scnr)) {\r\n                    token = getToken(context, 1 /* Pipe */, readPlural(scnr));\r\n                    // reset\r\n                    context.braceNest = 0;\r\n                    context.inLinked = false;\r\n                    return token;\r\n                }\r\n                if (isLinkedDotStart(scnr, context) ||\r\n                    isLinkedDelimiterStart(scnr, context)) {\r\n                    skipSpaces(scnr);\r\n                    return readTokenInLinked(scnr, context);\r\n                }\r\n                if (isLinkedModifierStart(scnr, context)) {\r\n                    skipSpaces(scnr);\r\n                    return getToken(context, 12 /* LinkedModifier */, readLinkedModifier(scnr));\r\n                }\r\n                if (isLinkedReferStart(scnr, context)) {\r\n                    skipSpaces(scnr);\r\n                    if (ch === \"{\" /* BraceLeft */) {\r\n                        // scan the placeholder\r\n                        return readTokenInPlaceholder(scnr, context) || token;\r\n                    }\r\n                    else {\r\n                        return getToken(context, 11 /* LinkedKey */, readLinkedRefer(scnr));\r\n                    }\r\n                }\r\n                if (currentType === 8 /* LinkedAlias */) {\r\n                    emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0);\r\n                }\r\n                context.braceNest = 0;\r\n                context.inLinked = false;\r\n                return readToken(scnr, context);\r\n        }\r\n    }\r\n    // TODO: We need refactoring of token parsing ...\r\n    function readToken(scnr, context) {\r\n        let token = { type: 14 /* EOF */ };\r\n        if (context.braceNest > 0) {\r\n            return readTokenInPlaceholder(scnr, context) || getEndToken(context);\r\n        }\r\n        if (context.inLinked) {\r\n            return readTokenInLinked(scnr, context) || getEndToken(context);\r\n        }\r\n        const ch = scnr.currentChar();\r\n        switch (ch) {\r\n            case \"{\" /* BraceLeft */:\r\n                return readTokenInPlaceholder(scnr, context) || getEndToken(context);\r\n            case \"}\" /* BraceRight */:\r\n                emitError(CompileErrorCodes.UNBALANCED_CLOSING_BRACE, currentPosition(), 0);\r\n                scnr.next();\r\n                return getToken(context, 3 /* BraceRight */, \"}\" /* BraceRight */);\r\n            case \"@\" /* LinkedAlias */:\r\n                return readTokenInLinked(scnr, context) || getEndToken(context);\r\n            default:\r\n                if (isPluralStart(scnr)) {\r\n                    token = getToken(context, 1 /* Pipe */, readPlural(scnr));\r\n                    // reset\r\n                    context.braceNest = 0;\r\n                    context.inLinked = false;\r\n                    return token;\r\n                }\r\n                const { isModulo, hasSpace } = detectModuloStart(scnr);\r\n                if (isModulo) {\r\n                    return hasSpace\r\n                        ? getToken(context, 0 /* Text */, readText(scnr))\r\n                        : getToken(context, 4 /* Modulo */, readModulo(scnr));\r\n                }\r\n                if (isTextStart(scnr)) {\r\n                    return getToken(context, 0 /* Text */, readText(scnr));\r\n                }\r\n                break;\r\n        }\r\n        return token;\r\n    }\r\n    function nextToken() {\r\n        const { currentType, offset, startLoc, endLoc } = _context;\r\n        _context.lastType = currentType;\r\n        _context.lastOffset = offset;\r\n        _context.lastStartLoc = startLoc;\r\n        _context.lastEndLoc = endLoc;\r\n        _context.offset = currentOffset();\r\n        _context.startLoc = currentPosition();\r\n        if (_scnr.currentChar() === EOF) {\r\n            return getToken(_context, 14 /* EOF */);\r\n        }\r\n        return readToken(_scnr, _context);\r\n    }\r\n    return {\r\n        nextToken,\r\n        currentOffset,\r\n        currentPosition,\r\n        context\r\n    };\r\n}\n\nconst ERROR_DOMAIN = 'parser';\r\n// Backslash backslash, backslash quote, uHHHH, UHHHHHH.\r\nconst KNOWN_ESCAPES = /(?:\\\\\\\\|\\\\'|\\\\u([0-9a-fA-F]{4})|\\\\U([0-9a-fA-F]{6}))/g;\r\nfunction fromEscapeSequence(match, codePoint4, codePoint6) {\r\n    switch (match) {\r\n        case `\\\\\\\\`:\r\n            return `\\\\`;\r\n        case `\\\\\\'`:\r\n            return `\\'`;\r\n        default: {\r\n            const codePoint = parseInt(codePoint4 || codePoint6, 16);\r\n            if (codePoint <= 0xd7ff || codePoint >= 0xe000) {\r\n                return String.fromCodePoint(codePoint);\r\n            }\r\n            // invalid ...\r\n            // Replace them with U+FFFD REPLACEMENT CHARACTER.\r\n            return '�';\r\n        }\r\n    }\r\n}\r\nfunction createParser(options = {}) {\r\n    const location = options.location !== false;\r\n    const { onError } = options;\r\n    function emitError(tokenzer, code, start, offset, ...args) {\r\n        const end = tokenzer.currentPosition();\r\n        end.offset += offset;\r\n        end.column += offset;\r\n        if (onError) {\r\n            const loc = createLocation(start, end);\r\n            const err = createCompileError(code, loc, {\r\n                domain: ERROR_DOMAIN,\r\n                args\r\n            });\r\n            onError(err);\r\n        }\r\n    }\r\n    function startNode(type, offset, loc) {\r\n        const node = {\r\n            type,\r\n            start: offset,\r\n            end: offset\r\n        };\r\n        if (location) {\r\n            node.loc = { start: loc, end: loc };\r\n        }\r\n        return node;\r\n    }\r\n    function endNode(node, offset, pos, type) {\r\n        node.end = offset;\r\n        if (type) {\r\n            node.type = type;\r\n        }\r\n        if (location && node.loc) {\r\n            node.loc.end = pos;\r\n        }\r\n    }\r\n    function parseText(tokenizer, value) {\r\n        const context = tokenizer.context();\r\n        const node = startNode(3 /* Text */, context.offset, context.startLoc);\r\n        node.value = value;\r\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n        return node;\r\n    }\r\n    function parseList(tokenizer, index) {\r\n        const context = tokenizer.context();\r\n        const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\r\n        const node = startNode(5 /* List */, offset, loc);\r\n        node.index = parseInt(index, 10);\r\n        tokenizer.nextToken(); // skip brach right\r\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n        return node;\r\n    }\r\n    function parseNamed(tokenizer, key) {\r\n        const context = tokenizer.context();\r\n        const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\r\n        const node = startNode(4 /* Named */, offset, loc);\r\n        node.key = key;\r\n        tokenizer.nextToken(); // skip brach right\r\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n        return node;\r\n    }\r\n    function parseLiteral(tokenizer, value) {\r\n        const context = tokenizer.context();\r\n        const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\r\n        const node = startNode(9 /* Literal */, offset, loc);\r\n        node.value = value.replace(KNOWN_ESCAPES, fromEscapeSequence);\r\n        tokenizer.nextToken(); // skip brach right\r\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n        return node;\r\n    }\r\n    function parseLinkedModifier(tokenizer) {\r\n        const token = tokenizer.nextToken();\r\n        const context = tokenizer.context();\r\n        const { lastOffset: offset, lastStartLoc: loc } = context; // get linked dot loc\r\n        const node = startNode(8 /* LinkedModifier */, offset, loc);\r\n        if (token.type !== 12 /* LinkedModifier */) {\r\n            // empty modifier\r\n            emitError(tokenizer, CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER, context.lastStartLoc, 0);\r\n            node.value = '';\r\n            endNode(node, offset, loc);\r\n            return {\r\n                nextConsumeToken: token,\r\n                node\r\n            };\r\n        }\r\n        // check token\r\n        if (token.value == null) {\r\n            emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n        }\r\n        node.value = token.value || '';\r\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n        return {\r\n            node\r\n        };\r\n    }\r\n    function parseLinkedKey(tokenizer, value) {\r\n        const context = tokenizer.context();\r\n        const node = startNode(7 /* LinkedKey */, context.offset, context.startLoc);\r\n        node.value = value;\r\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n        return node;\r\n    }\r\n    function parseLinked(tokenizer) {\r\n        const context = tokenizer.context();\r\n        const linkedNode = startNode(6 /* Linked */, context.offset, context.startLoc);\r\n        let token = tokenizer.nextToken();\r\n        if (token.type === 9 /* LinkedDot */) {\r\n            const parsed = parseLinkedModifier(tokenizer);\r\n            linkedNode.modifier = parsed.node;\r\n            token = parsed.nextConsumeToken || tokenizer.nextToken();\r\n        }\r\n        // asset check token\r\n        if (token.type !== 10 /* LinkedDelimiter */) {\r\n            emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n        }\r\n        token = tokenizer.nextToken();\r\n        // skip brace left\r\n        if (token.type === 2 /* BraceLeft */) {\r\n            token = tokenizer.nextToken();\r\n        }\r\n        switch (token.type) {\r\n            case 11 /* LinkedKey */:\r\n                if (token.value == null) {\r\n                    emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n                }\r\n                linkedNode.key = parseLinkedKey(tokenizer, token.value || '');\r\n                break;\r\n            case 5 /* Named */:\r\n                if (token.value == null) {\r\n                    emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n                }\r\n                linkedNode.key = parseNamed(tokenizer, token.value || '');\r\n                break;\r\n            case 6 /* List */:\r\n                if (token.value == null) {\r\n                    emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n                }\r\n                linkedNode.key = parseList(tokenizer, token.value || '');\r\n                break;\r\n            case 7 /* Literal */:\r\n                if (token.value == null) {\r\n                    emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n                }\r\n                linkedNode.key = parseLiteral(tokenizer, token.value || '');\r\n                break;\r\n            default:\r\n                // empty key\r\n                emitError(tokenizer, CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY, context.lastStartLoc, 0);\r\n                const nextContext = tokenizer.context();\r\n                const emptyLinkedKeyNode = startNode(7 /* LinkedKey */, nextContext.offset, nextContext.startLoc);\r\n                emptyLinkedKeyNode.value = '';\r\n                endNode(emptyLinkedKeyNode, nextContext.offset, nextContext.startLoc);\r\n                linkedNode.key = emptyLinkedKeyNode;\r\n                endNode(linkedNode, nextContext.offset, nextContext.startLoc);\r\n                return {\r\n                    nextConsumeToken: token,\r\n                    node: linkedNode\r\n                };\r\n        }\r\n        endNode(linkedNode, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n        return {\r\n            node: linkedNode\r\n        };\r\n    }\r\n    function parseMessage(tokenizer) {\r\n        const context = tokenizer.context();\r\n        const startOffset = context.currentType === 1 /* Pipe */\r\n            ? tokenizer.currentOffset()\r\n            : context.offset;\r\n        const startLoc = context.currentType === 1 /* Pipe */\r\n            ? context.endLoc\r\n            : context.startLoc;\r\n        const node = startNode(2 /* Message */, startOffset, startLoc);\r\n        node.items = [];\r\n        let nextToken = null;\r\n        do {\r\n            const token = nextToken || tokenizer.nextToken();\r\n            nextToken = null;\r\n            switch (token.type) {\r\n                case 0 /* Text */:\r\n                    if (token.value == null) {\r\n                        emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n                    }\r\n                    node.items.push(parseText(tokenizer, token.value || ''));\r\n                    break;\r\n                case 6 /* List */:\r\n                    if (token.value == null) {\r\n                        emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n                    }\r\n                    node.items.push(parseList(tokenizer, token.value || ''));\r\n                    break;\r\n                case 5 /* Named */:\r\n                    if (token.value == null) {\r\n                        emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n                    }\r\n                    node.items.push(parseNamed(tokenizer, token.value || ''));\r\n                    break;\r\n                case 7 /* Literal */:\r\n                    if (token.value == null) {\r\n                        emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n                    }\r\n                    node.items.push(parseLiteral(tokenizer, token.value || ''));\r\n                    break;\r\n                case 8 /* LinkedAlias */:\r\n                    const parsed = parseLinked(tokenizer);\r\n                    node.items.push(parsed.node);\r\n                    nextToken = parsed.nextConsumeToken || null;\r\n                    break;\r\n            }\r\n        } while (context.currentType !== 14 /* EOF */ &&\r\n            context.currentType !== 1 /* Pipe */);\r\n        // adjust message node loc\r\n        const endOffset = context.currentType === 1 /* Pipe */\r\n            ? context.lastOffset\r\n            : tokenizer.currentOffset();\r\n        const endLoc = context.currentType === 1 /* Pipe */\r\n            ? context.lastEndLoc\r\n            : tokenizer.currentPosition();\r\n        endNode(node, endOffset, endLoc);\r\n        return node;\r\n    }\r\n    function parsePlural(tokenizer, offset, loc, msgNode) {\r\n        const context = tokenizer.context();\r\n        let hasEmptyMessage = msgNode.items.length === 0;\r\n        const node = startNode(1 /* Plural */, offset, loc);\r\n        node.cases = [];\r\n        node.cases.push(msgNode);\r\n        do {\r\n            const msg = parseMessage(tokenizer);\r\n            if (!hasEmptyMessage) {\r\n                hasEmptyMessage = msg.items.length === 0;\r\n            }\r\n            node.cases.push(msg);\r\n        } while (context.currentType !== 14 /* EOF */);\r\n        if (hasEmptyMessage) {\r\n            emitError(tokenizer, CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL, loc, 0);\r\n        }\r\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n        return node;\r\n    }\r\n    function parseResource(tokenizer) {\r\n        const context = tokenizer.context();\r\n        const { offset, startLoc } = context;\r\n        const msgNode = parseMessage(tokenizer);\r\n        if (context.currentType === 14 /* EOF */) {\r\n            return msgNode;\r\n        }\r\n        else {\r\n            return parsePlural(tokenizer, offset, startLoc, msgNode);\r\n        }\r\n    }\r\n    function parse(source) {\r\n        const tokenizer = createTokenizer(source, assign({}, options));\r\n        const context = tokenizer.context();\r\n        const node = startNode(0 /* Resource */, context.offset, context.startLoc);\r\n        if (location && node.loc) {\r\n            node.loc.source = source;\r\n        }\r\n        node.body = parseResource(tokenizer);\r\n        // assert whether achieved to EOF\r\n        if (context.currentType !== 14 /* EOF */) {\r\n            emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, source[context.offset] || '');\r\n        }\r\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n        return node;\r\n    }\r\n    return { parse };\r\n}\r\nfunction getTokenCaption(token) {\r\n    if (token.type === 14 /* EOF */) {\r\n        return 'EOF';\r\n    }\r\n    const name = (token.value || '').replace(/\\r?\\n/gu, '\\\\n');\r\n    return name.length > 10 ? name.slice(0, 9) + '…' : name;\r\n}\n\nfunction createTransformer(ast, options = {} // eslint-disable-line\r\n) {\r\n    const _context = {\r\n        ast,\r\n        helpers: new Set()\r\n    };\r\n    const context = () => _context;\r\n    const helper = (name) => {\r\n        _context.helpers.add(name);\r\n        return name;\r\n    };\r\n    return { context, helper };\r\n}\r\nfunction traverseNodes(nodes, transformer) {\r\n    for (let i = 0; i < nodes.length; i++) {\r\n        traverseNode(nodes[i], transformer);\r\n    }\r\n}\r\nfunction traverseNode(node, transformer) {\r\n    // TODO: if we need pre-hook of transform, should be implemented to here\r\n    switch (node.type) {\r\n        case 1 /* Plural */:\r\n            traverseNodes(node.cases, transformer);\r\n            transformer.helper(\"plural\" /* PLURAL */);\r\n            break;\r\n        case 2 /* Message */:\r\n            traverseNodes(node.items, transformer);\r\n            break;\r\n        case 6 /* Linked */:\r\n            const linked = node;\r\n            traverseNode(linked.key, transformer);\r\n            transformer.helper(\"linked\" /* LINKED */);\r\n            transformer.helper(\"type\" /* TYPE */);\r\n            break;\r\n        case 5 /* List */:\r\n            transformer.helper(\"interpolate\" /* INTERPOLATE */);\r\n            transformer.helper(\"list\" /* LIST */);\r\n            break;\r\n        case 4 /* Named */:\r\n            transformer.helper(\"interpolate\" /* INTERPOLATE */);\r\n            transformer.helper(\"named\" /* NAMED */);\r\n            break;\r\n    }\r\n    // TODO: if we need post-hook of transform, should be implemented to here\r\n}\r\n// transform AST\r\nfunction transform(ast, options = {} // eslint-disable-line\r\n) {\r\n    const transformer = createTransformer(ast);\r\n    transformer.helper(\"normalize\" /* NORMALIZE */);\r\n    // traverse\r\n    ast.body && traverseNode(ast.body, transformer);\r\n    // set meta information\r\n    const context = transformer.context();\r\n    ast.helpers = Array.from(context.helpers);\r\n}\n\nfunction createCodeGenerator(ast, options) {\r\n    const { sourceMap, filename, breakLineCode, needIndent: _needIndent } = options;\r\n    const _context = {\r\n        source: ast.loc.source,\r\n        filename,\r\n        code: '',\r\n        column: 1,\r\n        line: 1,\r\n        offset: 0,\r\n        map: undefined,\r\n        breakLineCode,\r\n        needIndent: _needIndent,\r\n        indentLevel: 0\r\n    };\r\n    const context = () => _context;\r\n    function push(code, node) {\r\n        _context.code += code;\r\n    }\r\n    function _newline(n, withBreakLine = true) {\r\n        const _breakLineCode = withBreakLine ? breakLineCode : '';\r\n        push(_needIndent ? _breakLineCode + `  `.repeat(n) : _breakLineCode);\r\n    }\r\n    function indent(withNewLine = true) {\r\n        const level = ++_context.indentLevel;\r\n        withNewLine && _newline(level);\r\n    }\r\n    function deindent(withNewLine = true) {\r\n        const level = --_context.indentLevel;\r\n        withNewLine && _newline(level);\r\n    }\r\n    function newline() {\r\n        _newline(_context.indentLevel);\r\n    }\r\n    const helper = (key) => `_${key}`;\r\n    const needIndent = () => _context.needIndent;\r\n    return {\r\n        context,\r\n        push,\r\n        indent,\r\n        deindent,\r\n        newline,\r\n        helper,\r\n        needIndent\r\n    };\r\n}\r\nfunction generateLinkedNode(generator, node) {\r\n    const { helper } = generator;\r\n    generator.push(`${helper(\"linked\" /* LINKED */)}(`);\r\n    generateNode(generator, node.key);\r\n    if (node.modifier) {\r\n        generator.push(`, `);\r\n        generateNode(generator, node.modifier);\r\n        generator.push(`, _type`);\r\n    }\r\n    else {\r\n        generator.push(`, undefined, _type`);\r\n    }\r\n    generator.push(`)`);\r\n}\r\nfunction generateMessageNode(generator, node) {\r\n    const { helper, needIndent } = generator;\r\n    generator.push(`${helper(\"normalize\" /* NORMALIZE */)}([`);\r\n    generator.indent(needIndent());\r\n    const length = node.items.length;\r\n    for (let i = 0; i < length; i++) {\r\n        generateNode(generator, node.items[i]);\r\n        if (i === length - 1) {\r\n            break;\r\n        }\r\n        generator.push(', ');\r\n    }\r\n    generator.deindent(needIndent());\r\n    generator.push('])');\r\n}\r\nfunction generatePluralNode(generator, node) {\r\n    const { helper, needIndent } = generator;\r\n    if (node.cases.length > 1) {\r\n        generator.push(`${helper(\"plural\" /* PLURAL */)}([`);\r\n        generator.indent(needIndent());\r\n        const length = node.cases.length;\r\n        for (let i = 0; i < length; i++) {\r\n            generateNode(generator, node.cases[i]);\r\n            if (i === length - 1) {\r\n                break;\r\n            }\r\n            generator.push(', ');\r\n        }\r\n        generator.deindent(needIndent());\r\n        generator.push(`])`);\r\n    }\r\n}\r\nfunction generateResource(generator, node) {\r\n    if (node.body) {\r\n        generateNode(generator, node.body);\r\n    }\r\n    else {\r\n        generator.push('null');\r\n    }\r\n}\r\nfunction generateNode(generator, node) {\r\n    const { helper } = generator;\r\n    switch (node.type) {\r\n        case 0 /* Resource */:\r\n            generateResource(generator, node);\r\n            break;\r\n        case 1 /* Plural */:\r\n            generatePluralNode(generator, node);\r\n            break;\r\n        case 2 /* Message */:\r\n            generateMessageNode(generator, node);\r\n            break;\r\n        case 6 /* Linked */:\r\n            generateLinkedNode(generator, node);\r\n            break;\r\n        case 8 /* LinkedModifier */:\r\n            generator.push(JSON.stringify(node.value), node);\r\n            break;\r\n        case 7 /* LinkedKey */:\r\n            generator.push(JSON.stringify(node.value), node);\r\n            break;\r\n        case 5 /* List */:\r\n            generator.push(`${helper(\"interpolate\" /* INTERPOLATE */)}(${helper(\"list\" /* LIST */)}(${node.index}))`, node);\r\n            break;\r\n        case 4 /* Named */:\r\n            generator.push(`${helper(\"interpolate\" /* INTERPOLATE */)}(${helper(\"named\" /* NAMED */)}(${JSON.stringify(node.key)}))`, node);\r\n            break;\r\n        case 9 /* Literal */:\r\n            generator.push(JSON.stringify(node.value), node);\r\n            break;\r\n        case 3 /* Text */:\r\n            generator.push(JSON.stringify(node.value), node);\r\n            break;\r\n        default:\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                throw new Error(`unhandled codegen node type: ${node.type}`);\r\n            }\r\n    }\r\n}\r\n// generate code from AST\r\nconst generate = (ast, options = {} // eslint-disable-line\r\n) => {\r\n    const mode = isString(options.mode) ? options.mode : 'normal';\r\n    const filename = isString(options.filename)\r\n        ? options.filename\r\n        : 'message.intl';\r\n    const sourceMap = !!options.sourceMap;\r\n    // prettier-ignore\r\n    const breakLineCode = options.breakLineCode != null\r\n        ? options.breakLineCode\r\n        : mode === 'arrow'\r\n            ? ';'\r\n            : '\\n';\r\n    const needIndent = options.needIndent ? options.needIndent : mode !== 'arrow';\r\n    const helpers = ast.helpers || [];\r\n    const generator = createCodeGenerator(ast, {\r\n        mode,\r\n        filename,\r\n        sourceMap,\r\n        breakLineCode,\r\n        needIndent\r\n    });\r\n    generator.push(mode === 'normal' ? `function __msg__ (ctx) {` : `(ctx) => {`);\r\n    generator.indent(needIndent);\r\n    if (helpers.length > 0) {\r\n        generator.push(`const { ${helpers.map(s => `${s}: _${s}`).join(', ')} } = ctx`);\r\n        generator.newline();\r\n    }\r\n    generator.push(`return `);\r\n    generateNode(generator, ast);\r\n    generator.deindent(needIndent);\r\n    generator.push(`}`);\r\n    const { code, map } = generator.context();\r\n    return {\r\n        ast,\r\n        code,\r\n        map: map ? map.toJSON() : undefined // eslint-disable-line @typescript-eslint/no-explicit-any\r\n    };\r\n};\n\nfunction baseCompile(source, options = {}) {\r\n    const assignedOptions = assign({}, options);\r\n    // parse source codes\r\n    const parser = createParser(assignedOptions);\r\n    const ast = parser.parse(source);\r\n    // transform ASTs\r\n    transform(ast, assignedOptions);\r\n    // generate javascript codes\r\n    return generate(ast, assignedOptions);\r\n}\n\nexport { CompileErrorCodes, ERROR_DOMAIN, LocationStub, baseCompile, createCompileError, createLocation, createParser, createPosition, defaultOnError, errorMessages };\n","/*!\n  * core-base v9.2.2\n  * (c) 2022 kazuya kawaguchi\n  * Released under the MIT License.\n  */\nimport { isObject, isString, isFunction, isNumber, isPlainObject, toDisplayString, isArray, format, isBoolean, assign, isRegExp, warn, escapeHtml, inBrowser, mark, measure, isEmptyObject, generateCodeFrame, generateFormatCacheKey, isDate, getGlobalThis } from '@intlify/shared';\nimport { defaultOnError, baseCompile, CompileErrorCodes, createCompileError } from '@intlify/message-compiler';\nexport { CompileErrorCodes, createCompileError } from '@intlify/message-compiler';\nimport { IntlifyDevToolsHooks } from '@intlify/devtools-if';\n\nconst pathStateMachine =  [];\r\npathStateMachine[0 /* BEFORE_PATH */] = {\r\n    [\"w\" /* WORKSPACE */]: [0 /* BEFORE_PATH */],\r\n    [\"i\" /* IDENT */]: [3 /* IN_IDENT */, 0 /* APPEND */],\r\n    [\"[\" /* LEFT_BRACKET */]: [4 /* IN_SUB_PATH */],\r\n    [\"o\" /* END_OF_FAIL */]: [7 /* AFTER_PATH */]\r\n};\r\npathStateMachine[1 /* IN_PATH */] = {\r\n    [\"w\" /* WORKSPACE */]: [1 /* IN_PATH */],\r\n    [\".\" /* DOT */]: [2 /* BEFORE_IDENT */],\r\n    [\"[\" /* LEFT_BRACKET */]: [4 /* IN_SUB_PATH */],\r\n    [\"o\" /* END_OF_FAIL */]: [7 /* AFTER_PATH */]\r\n};\r\npathStateMachine[2 /* BEFORE_IDENT */] = {\r\n    [\"w\" /* WORKSPACE */]: [2 /* BEFORE_IDENT */],\r\n    [\"i\" /* IDENT */]: [3 /* IN_IDENT */, 0 /* APPEND */],\r\n    [\"0\" /* ZERO */]: [3 /* IN_IDENT */, 0 /* APPEND */]\r\n};\r\npathStateMachine[3 /* IN_IDENT */] = {\r\n    [\"i\" /* IDENT */]: [3 /* IN_IDENT */, 0 /* APPEND */],\r\n    [\"0\" /* ZERO */]: [3 /* IN_IDENT */, 0 /* APPEND */],\r\n    [\"w\" /* WORKSPACE */]: [1 /* IN_PATH */, 1 /* PUSH */],\r\n    [\".\" /* DOT */]: [2 /* BEFORE_IDENT */, 1 /* PUSH */],\r\n    [\"[\" /* LEFT_BRACKET */]: [4 /* IN_SUB_PATH */, 1 /* PUSH */],\r\n    [\"o\" /* END_OF_FAIL */]: [7 /* AFTER_PATH */, 1 /* PUSH */]\r\n};\r\npathStateMachine[4 /* IN_SUB_PATH */] = {\r\n    [\"'\" /* SINGLE_QUOTE */]: [5 /* IN_SINGLE_QUOTE */, 0 /* APPEND */],\r\n    [\"\\\"\" /* DOUBLE_QUOTE */]: [6 /* IN_DOUBLE_QUOTE */, 0 /* APPEND */],\r\n    [\"[\" /* LEFT_BRACKET */]: [\r\n        4 /* IN_SUB_PATH */,\r\n        2 /* INC_SUB_PATH_DEPTH */\r\n    ],\r\n    [\"]\" /* RIGHT_BRACKET */]: [1 /* IN_PATH */, 3 /* PUSH_SUB_PATH */],\r\n    [\"o\" /* END_OF_FAIL */]: 8 /* ERROR */,\r\n    [\"l\" /* ELSE */]: [4 /* IN_SUB_PATH */, 0 /* APPEND */]\r\n};\r\npathStateMachine[5 /* IN_SINGLE_QUOTE */] = {\r\n    [\"'\" /* SINGLE_QUOTE */]: [4 /* IN_SUB_PATH */, 0 /* APPEND */],\r\n    [\"o\" /* END_OF_FAIL */]: 8 /* ERROR */,\r\n    [\"l\" /* ELSE */]: [5 /* IN_SINGLE_QUOTE */, 0 /* APPEND */]\r\n};\r\npathStateMachine[6 /* IN_DOUBLE_QUOTE */] = {\r\n    [\"\\\"\" /* DOUBLE_QUOTE */]: [4 /* IN_SUB_PATH */, 0 /* APPEND */],\r\n    [\"o\" /* END_OF_FAIL */]: 8 /* ERROR */,\r\n    [\"l\" /* ELSE */]: [6 /* IN_DOUBLE_QUOTE */, 0 /* APPEND */]\r\n};\r\n/**\r\n * Check if an expression is a literal value.\r\n */\r\nconst literalValueRE = /^\\s?(?:true|false|-?[\\d.]+|'[^']*'|\"[^\"]*\")\\s?$/;\r\nfunction isLiteral(exp) {\r\n    return literalValueRE.test(exp);\r\n}\r\n/**\r\n * Strip quotes from a string\r\n */\r\nfunction stripQuotes(str) {\r\n    const a = str.charCodeAt(0);\r\n    const b = str.charCodeAt(str.length - 1);\r\n    return a === b && (a === 0x22 || a === 0x27) ? str.slice(1, -1) : str;\r\n}\r\n/**\r\n * Determine the type of a character in a keypath.\r\n */\r\nfunction getPathCharType(ch) {\r\n    if (ch === undefined || ch === null) {\r\n        return \"o\" /* END_OF_FAIL */;\r\n    }\r\n    const code = ch.charCodeAt(0);\r\n    switch (code) {\r\n        case 0x5b: // [\r\n        case 0x5d: // ]\r\n        case 0x2e: // .\r\n        case 0x22: // \"\r\n        case 0x27: // '\r\n            return ch;\r\n        case 0x5f: // _\r\n        case 0x24: // $\r\n        case 0x2d: // -\r\n            return \"i\" /* IDENT */;\r\n        case 0x09: // Tab (HT)\r\n        case 0x0a: // Newline (LF)\r\n        case 0x0d: // Return (CR)\r\n        case 0xa0: // No-break space (NBSP)\r\n        case 0xfeff: // Byte Order Mark (BOM)\r\n        case 0x2028: // Line Separator (LS)\r\n        case 0x2029: // Paragraph Separator (PS)\r\n            return \"w\" /* WORKSPACE */;\r\n    }\r\n    return \"i\" /* IDENT */;\r\n}\r\n/**\r\n * Format a subPath, return its plain form if it is\r\n * a literal string or number. Otherwise prepend the\r\n * dynamic indicator (*).\r\n */\r\nfunction formatSubPath(path) {\r\n    const trimmed = path.trim();\r\n    // invalid leading 0\r\n    if (path.charAt(0) === '0' && isNaN(parseInt(path))) {\r\n        return false;\r\n    }\r\n    return isLiteral(trimmed)\r\n        ? stripQuotes(trimmed)\r\n        : \"*\" /* ASTARISK */ + trimmed;\r\n}\r\n/**\r\n * Parse a string path into an array of segments\r\n */\r\nfunction parse(path) {\r\n    const keys = [];\r\n    let index = -1;\r\n    let mode = 0 /* BEFORE_PATH */;\r\n    let subPathDepth = 0;\r\n    let c;\r\n    let key; // eslint-disable-line\r\n    let newChar;\r\n    let type;\r\n    let transition;\r\n    let action;\r\n    let typeMap;\r\n    const actions = [];\r\n    actions[0 /* APPEND */] = () => {\r\n        if (key === undefined) {\r\n            key = newChar;\r\n        }\r\n        else {\r\n            key += newChar;\r\n        }\r\n    };\r\n    actions[1 /* PUSH */] = () => {\r\n        if (key !== undefined) {\r\n            keys.push(key);\r\n            key = undefined;\r\n        }\r\n    };\r\n    actions[2 /* INC_SUB_PATH_DEPTH */] = () => {\r\n        actions[0 /* APPEND */]();\r\n        subPathDepth++;\r\n    };\r\n    actions[3 /* PUSH_SUB_PATH */] = () => {\r\n        if (subPathDepth > 0) {\r\n            subPathDepth--;\r\n            mode = 4 /* IN_SUB_PATH */;\r\n            actions[0 /* APPEND */]();\r\n        }\r\n        else {\r\n            subPathDepth = 0;\r\n            if (key === undefined) {\r\n                return false;\r\n            }\r\n            key = formatSubPath(key);\r\n            if (key === false) {\r\n                return false;\r\n            }\r\n            else {\r\n                actions[1 /* PUSH */]();\r\n            }\r\n        }\r\n    };\r\n    function maybeUnescapeQuote() {\r\n        const nextChar = path[index + 1];\r\n        if ((mode === 5 /* IN_SINGLE_QUOTE */ &&\r\n            nextChar === \"'\" /* SINGLE_QUOTE */) ||\r\n            (mode === 6 /* IN_DOUBLE_QUOTE */ &&\r\n                nextChar === \"\\\"\" /* DOUBLE_QUOTE */)) {\r\n            index++;\r\n            newChar = '\\\\' + nextChar;\r\n            actions[0 /* APPEND */]();\r\n            return true;\r\n        }\r\n    }\r\n    while (mode !== null) {\r\n        index++;\r\n        c = path[index];\r\n        if (c === '\\\\' && maybeUnescapeQuote()) {\r\n            continue;\r\n        }\r\n        type = getPathCharType(c);\r\n        typeMap = pathStateMachine[mode];\r\n        transition = typeMap[type] || typeMap[\"l\" /* ELSE */] || 8 /* ERROR */;\r\n        // check parse error\r\n        if (transition === 8 /* ERROR */) {\r\n            return;\r\n        }\r\n        mode = transition[0];\r\n        if (transition[1] !== undefined) {\r\n            action = actions[transition[1]];\r\n            if (action) {\r\n                newChar = c;\r\n                if (action() === false) {\r\n                    return;\r\n                }\r\n            }\r\n        }\r\n        // check parse finish\r\n        if (mode === 7 /* AFTER_PATH */) {\r\n            return keys;\r\n        }\r\n    }\r\n}\r\n// path token cache\r\nconst cache = new Map();\r\n/**\r\n * key-value message resolver\r\n *\r\n * @remarks\r\n * Resolves messages with the key-value structure. Note that messages with a hierarchical structure such as objects cannot be resolved\r\n *\r\n * @param obj - A target object to be resolved with path\r\n * @param path - A {@link Path | path} to resolve the value of message\r\n *\r\n * @returns A resolved {@link PathValue | path value}\r\n *\r\n * @VueI18nGeneral\r\n */\r\nfunction resolveWithKeyValue(obj, path) {\r\n    return isObject(obj) ? obj[path] : null;\r\n}\r\n/**\r\n * message resolver\r\n *\r\n * @remarks\r\n * Resolves messages. messages with a hierarchical structure such as objects can be resolved. This resolver is used in VueI18n as default.\r\n *\r\n * @param obj - A target object to be resolved with path\r\n * @param path - A {@link Path | path} to resolve the value of message\r\n *\r\n * @returns A resolved {@link PathValue | path value}\r\n *\r\n * @VueI18nGeneral\r\n */\r\nfunction resolveValue(obj, path) {\r\n    // check object\r\n    if (!isObject(obj)) {\r\n        return null;\r\n    }\r\n    // parse path\r\n    let hit = cache.get(path);\r\n    if (!hit) {\r\n        hit = parse(path);\r\n        if (hit) {\r\n            cache.set(path, hit);\r\n        }\r\n    }\r\n    // check hit\r\n    if (!hit) {\r\n        return null;\r\n    }\r\n    // resolve path value\r\n    const len = hit.length;\r\n    let last = obj;\r\n    let i = 0;\r\n    while (i < len) {\r\n        const val = last[hit[i]];\r\n        if (val === undefined) {\r\n            return null;\r\n        }\r\n        last = val;\r\n        i++;\r\n    }\r\n    return last;\r\n}\n\nconst DEFAULT_MODIFIER = (str) => str;\r\nconst DEFAULT_MESSAGE = (ctx) => ''; // eslint-disable-line\r\nconst DEFAULT_MESSAGE_DATA_TYPE = 'text';\r\nconst DEFAULT_NORMALIZE = (values) => values.length === 0 ? '' : values.join('');\r\nconst DEFAULT_INTERPOLATE = toDisplayString;\r\nfunction pluralDefault(choice, choicesLength) {\r\n    choice = Math.abs(choice);\r\n    if (choicesLength === 2) {\r\n        // prettier-ignore\r\n        return choice\r\n            ? choice > 1\r\n                ? 1\r\n                : 0\r\n            : 1;\r\n    }\r\n    return choice ? Math.min(choice, 2) : 0;\r\n}\r\nfunction getPluralIndex(options) {\r\n    // prettier-ignore\r\n    const index = isNumber(options.pluralIndex)\r\n        ? options.pluralIndex\r\n        : -1;\r\n    // prettier-ignore\r\n    return options.named && (isNumber(options.named.count) || isNumber(options.named.n))\r\n        ? isNumber(options.named.count)\r\n            ? options.named.count\r\n            : isNumber(options.named.n)\r\n                ? options.named.n\r\n                : index\r\n        : index;\r\n}\r\nfunction normalizeNamed(pluralIndex, props) {\r\n    if (!props.count) {\r\n        props.count = pluralIndex;\r\n    }\r\n    if (!props.n) {\r\n        props.n = pluralIndex;\r\n    }\r\n}\r\nfunction createMessageContext(options = {}) {\r\n    const locale = options.locale;\r\n    const pluralIndex = getPluralIndex(options);\r\n    const pluralRule = isObject(options.pluralRules) &&\r\n        isString(locale) &&\r\n        isFunction(options.pluralRules[locale])\r\n        ? options.pluralRules[locale]\r\n        : pluralDefault;\r\n    const orgPluralRule = isObject(options.pluralRules) &&\r\n        isString(locale) &&\r\n        isFunction(options.pluralRules[locale])\r\n        ? pluralDefault\r\n        : undefined;\r\n    const plural = (messages) => {\r\n        return messages[pluralRule(pluralIndex, messages.length, orgPluralRule)];\r\n    };\r\n    const _list = options.list || [];\r\n    const list = (index) => _list[index];\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    const _named = options.named || {};\r\n    isNumber(options.pluralIndex) && normalizeNamed(pluralIndex, _named);\r\n    const named = (key) => _named[key];\r\n    function message(key) {\r\n        // prettier-ignore\r\n        const msg = isFunction(options.messages)\r\n            ? options.messages(key)\r\n            : isObject(options.messages)\r\n                ? options.messages[key]\r\n                : false;\r\n        return !msg\r\n            ? options.parent\r\n                ? options.parent.message(key) // resolve from parent messages\r\n                : DEFAULT_MESSAGE\r\n            : msg;\r\n    }\r\n    const _modifier = (name) => options.modifiers\r\n        ? options.modifiers[name]\r\n        : DEFAULT_MODIFIER;\r\n    const normalize = isPlainObject(options.processor) && isFunction(options.processor.normalize)\r\n        ? options.processor.normalize\r\n        : DEFAULT_NORMALIZE;\r\n    const interpolate = isPlainObject(options.processor) &&\r\n        isFunction(options.processor.interpolate)\r\n        ? options.processor.interpolate\r\n        : DEFAULT_INTERPOLATE;\r\n    const type = isPlainObject(options.processor) && isString(options.processor.type)\r\n        ? options.processor.type\r\n        : DEFAULT_MESSAGE_DATA_TYPE;\r\n    const linked = (key, ...args) => {\r\n        const [arg1, arg2] = args;\r\n        let type = 'text';\r\n        let modifier = '';\r\n        if (args.length === 1) {\r\n            if (isObject(arg1)) {\r\n                modifier = arg1.modifier || modifier;\r\n                type = arg1.type || type;\r\n            }\r\n            else if (isString(arg1)) {\r\n                modifier = arg1 || modifier;\r\n            }\r\n        }\r\n        else if (args.length === 2) {\r\n            if (isString(arg1)) {\r\n                modifier = arg1 || modifier;\r\n            }\r\n            if (isString(arg2)) {\r\n                type = arg2 || type;\r\n            }\r\n        }\r\n        let msg = message(key)(ctx);\r\n        // The message in vnode resolved with linked are returned as an array by processor.nomalize\r\n        if (type === 'vnode' && isArray(msg) && modifier) {\r\n            msg = msg[0];\r\n        }\r\n        return modifier ? _modifier(modifier)(msg, type) : msg;\r\n    };\r\n    const ctx = {\r\n        [\"list\" /* LIST */]: list,\r\n        [\"named\" /* NAMED */]: named,\r\n        [\"plural\" /* PLURAL */]: plural,\r\n        [\"linked\" /* LINKED */]: linked,\r\n        [\"message\" /* MESSAGE */]: message,\r\n        [\"type\" /* TYPE */]: type,\r\n        [\"interpolate\" /* INTERPOLATE */]: interpolate,\r\n        [\"normalize\" /* NORMALIZE */]: normalize\r\n    };\r\n    return ctx;\r\n}\n\nlet devtools = null;\r\nfunction setDevToolsHook(hook) {\r\n    devtools = hook;\r\n}\r\nfunction getDevToolsHook() {\r\n    return devtools;\r\n}\r\nfunction initI18nDevTools(i18n, version, meta) {\r\n    // TODO: queue if devtools is undefined\r\n    devtools &&\r\n        devtools.emit(IntlifyDevToolsHooks.I18nInit, {\r\n            timestamp: Date.now(),\r\n            i18n,\r\n            version,\r\n            meta\r\n        });\r\n}\r\nconst translateDevTools = /* #__PURE__*/ createDevToolsHook(IntlifyDevToolsHooks.FunctionTranslate);\r\nfunction createDevToolsHook(hook) {\r\n    return (payloads) => devtools && devtools.emit(hook, payloads);\r\n}\n\nconst CoreWarnCodes = {\r\n    NOT_FOUND_KEY: 1,\r\n    FALLBACK_TO_TRANSLATE: 2,\r\n    CANNOT_FORMAT_NUMBER: 3,\r\n    FALLBACK_TO_NUMBER_FORMAT: 4,\r\n    CANNOT_FORMAT_DATE: 5,\r\n    FALLBACK_TO_DATE_FORMAT: 6,\r\n    __EXTEND_POINT__: 7\r\n};\r\n/** @internal */\r\nconst warnMessages = {\r\n    [CoreWarnCodes.NOT_FOUND_KEY]: `Not found '{key}' key in '{locale}' locale messages.`,\r\n    [CoreWarnCodes.FALLBACK_TO_TRANSLATE]: `Fall back to translate '{key}' key with '{target}' locale.`,\r\n    [CoreWarnCodes.CANNOT_FORMAT_NUMBER]: `Cannot format a number value due to not supported Intl.NumberFormat.`,\r\n    [CoreWarnCodes.FALLBACK_TO_NUMBER_FORMAT]: `Fall back to number format '{key}' key with '{target}' locale.`,\r\n    [CoreWarnCodes.CANNOT_FORMAT_DATE]: `Cannot format a date value due to not supported Intl.DateTimeFormat.`,\r\n    [CoreWarnCodes.FALLBACK_TO_DATE_FORMAT]: `Fall back to datetime format '{key}' key with '{target}' locale.`\r\n};\r\nfunction getWarnMessage(code, ...args) {\r\n    return format(warnMessages[code], ...args);\r\n}\n\n/**\r\n * Fallback with simple implemenation\r\n *\r\n * @remarks\r\n * A fallback locale function implemented with a simple fallback algorithm.\r\n *\r\n * Basically, it returns the value as specified in the `fallbackLocale` props, and is processed with the fallback inside intlify.\r\n *\r\n * @param ctx - A {@link CoreContext | context}\r\n * @param fallback - A {@link FallbackLocale | fallback locale}\r\n * @param start - A starting {@link Locale | locale}\r\n *\r\n * @returns Fallback locales\r\n *\r\n * @VueI18nGeneral\r\n */\r\nfunction fallbackWithSimple(ctx, fallback, start // eslint-disable-line @typescript-eslint/no-unused-vars\r\n) {\r\n    // prettier-ignore\r\n    return [...new Set([\r\n            start,\r\n            ...(isArray(fallback)\r\n                ? fallback\r\n                : isObject(fallback)\r\n                    ? Object.keys(fallback)\r\n                    : isString(fallback)\r\n                        ? [fallback]\r\n                        : [start])\r\n        ])];\r\n}\r\n/**\r\n * Fallback with locale chain\r\n *\r\n * @remarks\r\n * A fallback locale function implemented with a fallback chain algorithm. It's used in VueI18n as default.\r\n *\r\n * @param ctx - A {@link CoreContext | context}\r\n * @param fallback - A {@link FallbackLocale | fallback locale}\r\n * @param start - A starting {@link Locale | locale}\r\n *\r\n * @returns Fallback locales\r\n *\r\n * @VueI18nSee [Fallbacking](../guide/essentials/fallback)\r\n *\r\n * @VueI18nGeneral\r\n */\r\nfunction fallbackWithLocaleChain(ctx, fallback, start) {\r\n    const startLocale = isString(start) ? start : DEFAULT_LOCALE;\r\n    const context = ctx;\r\n    if (!context.__localeChainCache) {\r\n        context.__localeChainCache = new Map();\r\n    }\r\n    let chain = context.__localeChainCache.get(startLocale);\r\n    if (!chain) {\r\n        chain = [];\r\n        // first block defined by start\r\n        let block = [start];\r\n        // while any intervening block found\r\n        while (isArray(block)) {\r\n            block = appendBlockToChain(chain, block, fallback);\r\n        }\r\n        // prettier-ignore\r\n        // last block defined by default\r\n        const defaults = isArray(fallback) || !isPlainObject(fallback)\r\n            ? fallback\r\n            : fallback['default']\r\n                ? fallback['default']\r\n                : null;\r\n        // convert defaults to array\r\n        block = isString(defaults) ? [defaults] : defaults;\r\n        if (isArray(block)) {\r\n            appendBlockToChain(chain, block, false);\r\n        }\r\n        context.__localeChainCache.set(startLocale, chain);\r\n    }\r\n    return chain;\r\n}\r\nfunction appendBlockToChain(chain, block, blocks) {\r\n    let follow = true;\r\n    for (let i = 0; i < block.length && isBoolean(follow); i++) {\r\n        const locale = block[i];\r\n        if (isString(locale)) {\r\n            follow = appendLocaleToChain(chain, block[i], blocks);\r\n        }\r\n    }\r\n    return follow;\r\n}\r\nfunction appendLocaleToChain(chain, locale, blocks) {\r\n    let follow;\r\n    const tokens = locale.split('-');\r\n    do {\r\n        const target = tokens.join('-');\r\n        follow = appendItemToChain(chain, target, blocks);\r\n        tokens.splice(-1, 1);\r\n    } while (tokens.length && follow === true);\r\n    return follow;\r\n}\r\nfunction appendItemToChain(chain, target, blocks) {\r\n    let follow = false;\r\n    if (!chain.includes(target)) {\r\n        follow = true;\r\n        if (target) {\r\n            follow = target[target.length - 1] !== '!';\r\n            const locale = target.replace(/!/g, '');\r\n            chain.push(locale);\r\n            if ((isArray(blocks) || isPlainObject(blocks)) &&\r\n                blocks[locale] // eslint-disable-line @typescript-eslint/no-explicit-any\r\n            ) {\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                follow = blocks[locale];\r\n            }\r\n        }\r\n    }\r\n    return follow;\r\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/**\r\n * Intlify core-base version\r\n * @internal\r\n */\r\nconst VERSION = '9.2.2';\r\nconst NOT_REOSLVED = -1;\r\nconst DEFAULT_LOCALE = 'en-US';\r\nconst MISSING_RESOLVE_VALUE = '';\r\nconst capitalize = (str) => `${str.charAt(0).toLocaleUpperCase()}${str.substr(1)}`;\r\nfunction getDefaultLinkedModifiers() {\r\n    return {\r\n        upper: (val, type) => {\r\n            // prettier-ignore\r\n            return type === 'text' && isString(val)\r\n                ? val.toUpperCase()\r\n                : type === 'vnode' && isObject(val) && '__v_isVNode' in val\r\n                    ? val.children.toUpperCase()\r\n                    : val;\r\n        },\r\n        lower: (val, type) => {\r\n            // prettier-ignore\r\n            return type === 'text' && isString(val)\r\n                ? val.toLowerCase()\r\n                : type === 'vnode' && isObject(val) && '__v_isVNode' in val\r\n                    ? val.children.toLowerCase()\r\n                    : val;\r\n        },\r\n        capitalize: (val, type) => {\r\n            // prettier-ignore\r\n            return (type === 'text' && isString(val)\r\n                ? capitalize(val)\r\n                : type === 'vnode' && isObject(val) && '__v_isVNode' in val\r\n                    ? capitalize(val.children)\r\n                    : val);\r\n        }\r\n    };\r\n}\r\nlet _compiler;\r\nfunction registerMessageCompiler(compiler) {\r\n    _compiler = compiler;\r\n}\r\nlet _resolver;\r\n/**\r\n * Register the message resolver\r\n *\r\n * @param resolver - A {@link MessageResolver} function\r\n *\r\n * @VueI18nGeneral\r\n */\r\nfunction registerMessageResolver(resolver) {\r\n    _resolver = resolver;\r\n}\r\nlet _fallbacker;\r\n/**\r\n * Register the locale fallbacker\r\n *\r\n * @param fallbacker - A {@link LocaleFallbacker} function\r\n *\r\n * @VueI18nGeneral\r\n */\r\nfunction registerLocaleFallbacker(fallbacker) {\r\n    _fallbacker = fallbacker;\r\n}\r\n// Additional Meta for Intlify DevTools\r\nlet _additionalMeta = null;\r\nconst setAdditionalMeta =  (meta) => {\r\n    _additionalMeta = meta;\r\n};\r\nconst getAdditionalMeta =  () => _additionalMeta;\r\nlet _fallbackContext = null;\r\nconst setFallbackContext = (context) => {\r\n    _fallbackContext = context;\r\n};\r\nconst getFallbackContext = () => _fallbackContext;\r\n// ID for CoreContext\r\nlet _cid = 0;\r\nfunction createCoreContext(options = {}) {\r\n    // setup options\r\n    const version = isString(options.version) ? options.version : VERSION;\r\n    const locale = isString(options.locale) ? options.locale : DEFAULT_LOCALE;\r\n    const fallbackLocale = isArray(options.fallbackLocale) ||\r\n        isPlainObject(options.fallbackLocale) ||\r\n        isString(options.fallbackLocale) ||\r\n        options.fallbackLocale === false\r\n        ? options.fallbackLocale\r\n        : locale;\r\n    const messages = isPlainObject(options.messages)\r\n        ? options.messages\r\n        : { [locale]: {} };\r\n    const datetimeFormats = isPlainObject(options.datetimeFormats)\r\n            ? options.datetimeFormats\r\n            : { [locale]: {} }\r\n        ;\r\n    const numberFormats = isPlainObject(options.numberFormats)\r\n            ? options.numberFormats\r\n            : { [locale]: {} }\r\n        ;\r\n    const modifiers = assign({}, options.modifiers || {}, getDefaultLinkedModifiers());\r\n    const pluralRules = options.pluralRules || {};\r\n    const missing = isFunction(options.missing) ? options.missing : null;\r\n    const missingWarn = isBoolean(options.missingWarn) || isRegExp(options.missingWarn)\r\n        ? options.missingWarn\r\n        : true;\r\n    const fallbackWarn = isBoolean(options.fallbackWarn) || isRegExp(options.fallbackWarn)\r\n        ? options.fallbackWarn\r\n        : true;\r\n    const fallbackFormat = !!options.fallbackFormat;\r\n    const unresolving = !!options.unresolving;\r\n    const postTranslation = isFunction(options.postTranslation)\r\n        ? options.postTranslation\r\n        : null;\r\n    const processor = isPlainObject(options.processor) ? options.processor : null;\r\n    const warnHtmlMessage = isBoolean(options.warnHtmlMessage)\r\n        ? options.warnHtmlMessage\r\n        : true;\r\n    const escapeParameter = !!options.escapeParameter;\r\n    const messageCompiler = isFunction(options.messageCompiler)\r\n        ? options.messageCompiler\r\n        : _compiler;\r\n    const messageResolver = isFunction(options.messageResolver)\r\n        ? options.messageResolver\r\n        : _resolver || resolveWithKeyValue;\r\n    const localeFallbacker = isFunction(options.localeFallbacker)\r\n        ? options.localeFallbacker\r\n        : _fallbacker || fallbackWithSimple;\r\n    const fallbackContext = isObject(options.fallbackContext)\r\n        ? options.fallbackContext\r\n        : undefined;\r\n    const onWarn = isFunction(options.onWarn) ? options.onWarn : warn;\r\n    // setup internal options\r\n    const internalOptions = options;\r\n    const __datetimeFormatters = isObject(internalOptions.__datetimeFormatters)\r\n            ? internalOptions.__datetimeFormatters\r\n            : new Map()\r\n        ;\r\n    const __numberFormatters = isObject(internalOptions.__numberFormatters)\r\n            ? internalOptions.__numberFormatters\r\n            : new Map()\r\n        ;\r\n    const __meta = isObject(internalOptions.__meta) ? internalOptions.__meta : {};\r\n    _cid++;\r\n    const context = {\r\n        version,\r\n        cid: _cid,\r\n        locale,\r\n        fallbackLocale,\r\n        messages,\r\n        modifiers,\r\n        pluralRules,\r\n        missing,\r\n        missingWarn,\r\n        fallbackWarn,\r\n        fallbackFormat,\r\n        unresolving,\r\n        postTranslation,\r\n        processor,\r\n        warnHtmlMessage,\r\n        escapeParameter,\r\n        messageCompiler,\r\n        messageResolver,\r\n        localeFallbacker,\r\n        fallbackContext,\r\n        onWarn,\r\n        __meta\r\n    };\r\n    {\r\n        context.datetimeFormats = datetimeFormats;\r\n        context.numberFormats = numberFormats;\r\n        context.__datetimeFormatters = __datetimeFormatters;\r\n        context.__numberFormatters = __numberFormatters;\r\n    }\r\n    // for vue-devtools timeline event\r\n    if ((process.env.NODE_ENV !== 'production')) {\r\n        context.__v_emitter =\r\n            internalOptions.__v_emitter != null\r\n                ? internalOptions.__v_emitter\r\n                : undefined;\r\n    }\r\n    // NOTE: experimental !!\r\n    if ((process.env.NODE_ENV !== 'production') || __INTLIFY_PROD_DEVTOOLS__) {\r\n        initI18nDevTools(context, version, __meta);\r\n    }\r\n    return context;\r\n}\r\n/** @internal */\r\nfunction isTranslateFallbackWarn(fallback, key) {\r\n    return fallback instanceof RegExp ? fallback.test(key) : fallback;\r\n}\r\n/** @internal */\r\nfunction isTranslateMissingWarn(missing, key) {\r\n    return missing instanceof RegExp ? missing.test(key) : missing;\r\n}\r\n/** @internal */\r\nfunction handleMissing(context, key, locale, missingWarn, type) {\r\n    const { missing, onWarn } = context;\r\n    // for vue-devtools timeline event\r\n    if ((process.env.NODE_ENV !== 'production')) {\r\n        const emitter = context.__v_emitter;\r\n        if (emitter) {\r\n            emitter.emit(\"missing\" /* MISSING */, {\r\n                locale,\r\n                key,\r\n                type,\r\n                groupId: `${type}:${key}`\r\n            });\r\n        }\r\n    }\r\n    if (missing !== null) {\r\n        const ret = missing(context, locale, key, type);\r\n        return isString(ret) ? ret : key;\r\n    }\r\n    else {\r\n        if ((process.env.NODE_ENV !== 'production') && isTranslateMissingWarn(missingWarn, key)) {\r\n            onWarn(getWarnMessage(CoreWarnCodes.NOT_FOUND_KEY, { key, locale }));\r\n        }\r\n        return key;\r\n    }\r\n}\r\n/** @internal */\r\nfunction updateFallbackLocale(ctx, locale, fallback) {\r\n    const context = ctx;\r\n    context.__localeChainCache = new Map();\r\n    ctx.localeFallbacker(ctx, fallback, locale);\r\n}\r\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nconst RE_HTML_TAG = /<\\/?[\\w\\s=\"/.':;#-\\/]+>/;\r\nconst WARN_MESSAGE = `Detected HTML in '{source}' message. Recommend not using HTML messages to avoid XSS.`;\r\nfunction checkHtmlMessage(source, options) {\r\n    const warnHtmlMessage = isBoolean(options.warnHtmlMessage)\r\n        ? options.warnHtmlMessage\r\n        : true;\r\n    if (warnHtmlMessage && RE_HTML_TAG.test(source)) {\r\n        warn(format(WARN_MESSAGE, { source }));\r\n    }\r\n}\r\nconst defaultOnCacheKey = (source) => source;\r\nlet compileCache = Object.create(null);\r\nfunction clearCompileCache() {\r\n    compileCache = Object.create(null);\r\n}\r\nfunction compileToFunction(source, options = {}) {\r\n    {\r\n        // check HTML message\r\n        (process.env.NODE_ENV !== 'production') && checkHtmlMessage(source, options);\r\n        // check caches\r\n        const onCacheKey = options.onCacheKey || defaultOnCacheKey;\r\n        const key = onCacheKey(source);\r\n        const cached = compileCache[key];\r\n        if (cached) {\r\n            return cached;\r\n        }\r\n        // compile error detecting\r\n        let occurred = false;\r\n        const onError = options.onError || defaultOnError;\r\n        options.onError = (err) => {\r\n            occurred = true;\r\n            onError(err);\r\n        };\r\n        // compile\r\n        const { code } = baseCompile(source, options);\r\n        // evaluate function\r\n        const msg = new Function(`return ${code}`)();\r\n        // if occurred compile error, don't cache\r\n        return !occurred ? (compileCache[key] = msg) : msg;\r\n    }\r\n}\n\nlet code = CompileErrorCodes.__EXTEND_POINT__;\r\nconst inc = () => ++code;\r\nconst CoreErrorCodes = {\r\n    INVALID_ARGUMENT: code,\r\n    INVALID_DATE_ARGUMENT: inc(),\r\n    INVALID_ISO_DATE_ARGUMENT: inc(),\r\n    __EXTEND_POINT__: inc() // 18\r\n};\r\nfunction createCoreError(code) {\r\n    return createCompileError(code, null, (process.env.NODE_ENV !== 'production') ? { messages: errorMessages } : undefined);\r\n}\r\n/** @internal */\r\nconst errorMessages = {\r\n    [CoreErrorCodes.INVALID_ARGUMENT]: 'Invalid arguments',\r\n    [CoreErrorCodes.INVALID_DATE_ARGUMENT]: 'The date provided is an invalid Date object.' +\r\n        'Make sure your Date represents a valid date.',\r\n    [CoreErrorCodes.INVALID_ISO_DATE_ARGUMENT]: 'The argument provided is not a valid ISO date string'\r\n};\n\nconst NOOP_MESSAGE_FUNCTION = () => '';\r\nconst isMessageFunction = (val) => isFunction(val);\r\n// implementation of `translate` function\r\nfunction translate(context, ...args) {\r\n    const { fallbackFormat, postTranslation, unresolving, messageCompiler, fallbackLocale, messages } = context;\r\n    const [key, options] = parseTranslateArgs(...args);\r\n    const missingWarn = isBoolean(options.missingWarn)\r\n        ? options.missingWarn\r\n        : context.missingWarn;\r\n    const fallbackWarn = isBoolean(options.fallbackWarn)\r\n        ? options.fallbackWarn\r\n        : context.fallbackWarn;\r\n    const escapeParameter = isBoolean(options.escapeParameter)\r\n        ? options.escapeParameter\r\n        : context.escapeParameter;\r\n    const resolvedMessage = !!options.resolvedMessage;\r\n    // prettier-ignore\r\n    const defaultMsgOrKey = isString(options.default) || isBoolean(options.default) // default by function option\r\n        ? !isBoolean(options.default)\r\n            ? options.default\r\n            : (!messageCompiler ? () => key : key)\r\n        : fallbackFormat // default by `fallbackFormat` option\r\n            ? (!messageCompiler ? () => key : key)\r\n            : '';\r\n    const enableDefaultMsg = fallbackFormat || defaultMsgOrKey !== '';\r\n    const locale = isString(options.locale) ? options.locale : context.locale;\r\n    // escape params\r\n    escapeParameter && escapeParams(options);\r\n    // resolve message format\r\n    // eslint-disable-next-line prefer-const\r\n    let [formatScope, targetLocale, message] = !resolvedMessage\r\n        ? resolveMessageFormat(context, key, locale, fallbackLocale, fallbackWarn, missingWarn)\r\n        : [\r\n            key,\r\n            locale,\r\n            messages[locale] || {}\r\n        ];\r\n    // NOTE:\r\n    //  Fix to work around `ssrTransfrom` bug in Vite.\r\n    //  https://github.com/vitejs/vite/issues/4306\r\n    //  To get around this, use temporary variables.\r\n    //  https://github.com/nuxt/framework/issues/1461#issuecomment-954606243\r\n    let format = formatScope;\r\n    // if you use default message, set it as message format!\r\n    let cacheBaseKey = key;\r\n    if (!resolvedMessage &&\r\n        !(isString(format) || isMessageFunction(format))) {\r\n        if (enableDefaultMsg) {\r\n            format = defaultMsgOrKey;\r\n            cacheBaseKey = format;\r\n        }\r\n    }\r\n    // checking message format and target locale\r\n    if (!resolvedMessage &&\r\n        (!(isString(format) || isMessageFunction(format)) ||\r\n            !isString(targetLocale))) {\r\n        return unresolving ? NOT_REOSLVED : key;\r\n    }\r\n    if ((process.env.NODE_ENV !== 'production') && isString(format) && context.messageCompiler == null) {\r\n        warn(`The message format compilation is not supported in this build. ` +\r\n            `Because message compiler isn't included. ` +\r\n            `You need to pre-compilation all message format. ` +\r\n            `So translate function return '${key}'.`);\r\n        return key;\r\n    }\r\n    // setup compile error detecting\r\n    let occurred = false;\r\n    const errorDetector = () => {\r\n        occurred = true;\r\n    };\r\n    // compile message format\r\n    const msg = !isMessageFunction(format)\r\n        ? compileMessageFormat(context, key, targetLocale, format, cacheBaseKey, errorDetector)\r\n        : format;\r\n    // if occurred compile error, return the message format\r\n    if (occurred) {\r\n        return format;\r\n    }\r\n    // evaluate message with context\r\n    const ctxOptions = getMessageContextOptions(context, targetLocale, message, options);\r\n    const msgContext = createMessageContext(ctxOptions);\r\n    const messaged = evaluateMessage(context, msg, msgContext);\r\n    // if use post translation option, proceed it with handler\r\n    const ret = postTranslation\r\n        ? postTranslation(messaged, key)\r\n        : messaged;\r\n    // NOTE: experimental !!\r\n    if ((process.env.NODE_ENV !== 'production') || __INTLIFY_PROD_DEVTOOLS__) {\r\n        // prettier-ignore\r\n        const payloads = {\r\n            timestamp: Date.now(),\r\n            key: isString(key)\r\n                ? key\r\n                : isMessageFunction(format)\r\n                    ? format.key\r\n                    : '',\r\n            locale: targetLocale || (isMessageFunction(format)\r\n                ? format.locale\r\n                : ''),\r\n            format: isString(format)\r\n                ? format\r\n                : isMessageFunction(format)\r\n                    ? format.source\r\n                    : '',\r\n            message: ret\r\n        };\r\n        payloads.meta = assign({}, context.__meta, getAdditionalMeta() || {});\r\n        translateDevTools(payloads);\r\n    }\r\n    return ret;\r\n}\r\nfunction escapeParams(options) {\r\n    if (isArray(options.list)) {\r\n        options.list = options.list.map(item => isString(item) ? escapeHtml(item) : item);\r\n    }\r\n    else if (isObject(options.named)) {\r\n        Object.keys(options.named).forEach(key => {\r\n            if (isString(options.named[key])) {\r\n                options.named[key] = escapeHtml(options.named[key]);\r\n            }\r\n        });\r\n    }\r\n}\r\nfunction resolveMessageFormat(context, key, locale, fallbackLocale, fallbackWarn, missingWarn) {\r\n    const { messages, onWarn, messageResolver: resolveValue, localeFallbacker } = context;\r\n    const locales = localeFallbacker(context, fallbackLocale, locale); // eslint-disable-line @typescript-eslint/no-explicit-any\r\n    let message = {};\r\n    let targetLocale;\r\n    let format = null;\r\n    let from = locale;\r\n    let to = null;\r\n    const type = 'translate';\r\n    for (let i = 0; i < locales.length; i++) {\r\n        targetLocale = to = locales[i];\r\n        if ((process.env.NODE_ENV !== 'production') &&\r\n            locale !== targetLocale &&\r\n            isTranslateFallbackWarn(fallbackWarn, key)) {\r\n            onWarn(getWarnMessage(CoreWarnCodes.FALLBACK_TO_TRANSLATE, {\r\n                key,\r\n                target: targetLocale\r\n            }));\r\n        }\r\n        // for vue-devtools timeline event\r\n        if ((process.env.NODE_ENV !== 'production') && locale !== targetLocale) {\r\n            const emitter = context.__v_emitter;\r\n            if (emitter) {\r\n                emitter.emit(\"fallback\" /* FALBACK */, {\r\n                    type,\r\n                    key,\r\n                    from,\r\n                    to,\r\n                    groupId: `${type}:${key}`\r\n                });\r\n            }\r\n        }\r\n        message =\r\n            messages[targetLocale] || {};\r\n        // for vue-devtools timeline event\r\n        let start = null;\r\n        let startTag;\r\n        let endTag;\r\n        if ((process.env.NODE_ENV !== 'production') && inBrowser) {\r\n            start = window.performance.now();\r\n            startTag = 'intlify-message-resolve-start';\r\n            endTag = 'intlify-message-resolve-end';\r\n            mark && mark(startTag);\r\n        }\r\n        if ((format = resolveValue(message, key)) === null) {\r\n            // if null, resolve with object key path\r\n            format = message[key]; // eslint-disable-line @typescript-eslint/no-explicit-any\r\n        }\r\n        // for vue-devtools timeline event\r\n        if ((process.env.NODE_ENV !== 'production') && inBrowser) {\r\n            const end = window.performance.now();\r\n            const emitter = context.__v_emitter;\r\n            if (emitter && start && format) {\r\n                emitter.emit(\"message-resolve\" /* MESSAGE_RESOLVE */, {\r\n                    type: \"message-resolve\" /* MESSAGE_RESOLVE */,\r\n                    key,\r\n                    message: format,\r\n                    time: end - start,\r\n                    groupId: `${type}:${key}`\r\n                });\r\n            }\r\n            if (startTag && endTag && mark && measure) {\r\n                mark(endTag);\r\n                measure('intlify message resolve', startTag, endTag);\r\n            }\r\n        }\r\n        if (isString(format) || isFunction(format))\r\n            break;\r\n        const missingRet = handleMissing(context, // eslint-disable-line @typescript-eslint/no-explicit-any\r\n        key, targetLocale, missingWarn, type);\r\n        if (missingRet !== key) {\r\n            format = missingRet;\r\n        }\r\n        from = to;\r\n    }\r\n    return [format, targetLocale, message];\r\n}\r\nfunction compileMessageFormat(context, key, targetLocale, format, cacheBaseKey, errorDetector) {\r\n    const { messageCompiler, warnHtmlMessage } = context;\r\n    if (isMessageFunction(format)) {\r\n        const msg = format;\r\n        msg.locale = msg.locale || targetLocale;\r\n        msg.key = msg.key || key;\r\n        return msg;\r\n    }\r\n    if (messageCompiler == null) {\r\n        const msg = (() => format);\r\n        msg.locale = targetLocale;\r\n        msg.key = key;\r\n        return msg;\r\n    }\r\n    // for vue-devtools timeline event\r\n    let start = null;\r\n    let startTag;\r\n    let endTag;\r\n    if ((process.env.NODE_ENV !== 'production') && inBrowser) {\r\n        start = window.performance.now();\r\n        startTag = 'intlify-message-compilation-start';\r\n        endTag = 'intlify-message-compilation-end';\r\n        mark && mark(startTag);\r\n    }\r\n    const msg = messageCompiler(format, getCompileOptions(context, targetLocale, cacheBaseKey, format, warnHtmlMessage, errorDetector));\r\n    // for vue-devtools timeline event\r\n    if ((process.env.NODE_ENV !== 'production') && inBrowser) {\r\n        const end = window.performance.now();\r\n        const emitter = context.__v_emitter;\r\n        if (emitter && start) {\r\n            emitter.emit(\"message-compilation\" /* MESSAGE_COMPILATION */, {\r\n                type: \"message-compilation\" /* MESSAGE_COMPILATION */,\r\n                message: format,\r\n                time: end - start,\r\n                groupId: `${'translate'}:${key}`\r\n            });\r\n        }\r\n        if (startTag && endTag && mark && measure) {\r\n            mark(endTag);\r\n            measure('intlify message compilation', startTag, endTag);\r\n        }\r\n    }\r\n    msg.locale = targetLocale;\r\n    msg.key = key;\r\n    msg.source = format;\r\n    return msg;\r\n}\r\nfunction evaluateMessage(context, msg, msgCtx) {\r\n    // for vue-devtools timeline event\r\n    let start = null;\r\n    let startTag;\r\n    let endTag;\r\n    if ((process.env.NODE_ENV !== 'production') && inBrowser) {\r\n        start = window.performance.now();\r\n        startTag = 'intlify-message-evaluation-start';\r\n        endTag = 'intlify-message-evaluation-end';\r\n        mark && mark(startTag);\r\n    }\r\n    const messaged = msg(msgCtx);\r\n    // for vue-devtools timeline event\r\n    if ((process.env.NODE_ENV !== 'production') && inBrowser) {\r\n        const end = window.performance.now();\r\n        const emitter = context.__v_emitter;\r\n        if (emitter && start) {\r\n            emitter.emit(\"message-evaluation\" /* MESSAGE_EVALUATION */, {\r\n                type: \"message-evaluation\" /* MESSAGE_EVALUATION */,\r\n                value: messaged,\r\n                time: end - start,\r\n                groupId: `${'translate'}:${msg.key}`\r\n            });\r\n        }\r\n        if (startTag && endTag && mark && measure) {\r\n            mark(endTag);\r\n            measure('intlify message evaluation', startTag, endTag);\r\n        }\r\n    }\r\n    return messaged;\r\n}\r\n/** @internal */\r\nfunction parseTranslateArgs(...args) {\r\n    const [arg1, arg2, arg3] = args;\r\n    const options = {};\r\n    if (!isString(arg1) && !isNumber(arg1) && !isMessageFunction(arg1)) {\r\n        throw createCoreError(CoreErrorCodes.INVALID_ARGUMENT);\r\n    }\r\n    // prettier-ignore\r\n    const key = isNumber(arg1)\r\n        ? String(arg1)\r\n        : isMessageFunction(arg1)\r\n            ? arg1\r\n            : arg1;\r\n    if (isNumber(arg2)) {\r\n        options.plural = arg2;\r\n    }\r\n    else if (isString(arg2)) {\r\n        options.default = arg2;\r\n    }\r\n    else if (isPlainObject(arg2) && !isEmptyObject(arg2)) {\r\n        options.named = arg2;\r\n    }\r\n    else if (isArray(arg2)) {\r\n        options.list = arg2;\r\n    }\r\n    if (isNumber(arg3)) {\r\n        options.plural = arg3;\r\n    }\r\n    else if (isString(arg3)) {\r\n        options.default = arg3;\r\n    }\r\n    else if (isPlainObject(arg3)) {\r\n        assign(options, arg3);\r\n    }\r\n    return [key, options];\r\n}\r\nfunction getCompileOptions(context, locale, key, source, warnHtmlMessage, errorDetector) {\r\n    return {\r\n        warnHtmlMessage,\r\n        onError: (err) => {\r\n            errorDetector && errorDetector(err);\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                const message = `Message compilation error: ${err.message}`;\r\n                const codeFrame = err.location &&\r\n                    generateCodeFrame(source, err.location.start.offset, err.location.end.offset);\r\n                const emitter = context.__v_emitter;\r\n                if (emitter) {\r\n                    emitter.emit(\"compile-error\" /* COMPILE_ERROR */, {\r\n                        message: source,\r\n                        error: err.message,\r\n                        start: err.location && err.location.start.offset,\r\n                        end: err.location && err.location.end.offset,\r\n                        groupId: `${'translate'}:${key}`\r\n                    });\r\n                }\r\n                console.error(codeFrame ? `${message}\\n${codeFrame}` : message);\r\n            }\r\n            else {\r\n                throw err;\r\n            }\r\n        },\r\n        onCacheKey: (source) => generateFormatCacheKey(locale, key, source)\r\n    };\r\n}\r\nfunction getMessageContextOptions(context, locale, message, options) {\r\n    const { modifiers, pluralRules, messageResolver: resolveValue, fallbackLocale, fallbackWarn, missingWarn, fallbackContext } = context;\r\n    const resolveMessage = (key) => {\r\n        let val = resolveValue(message, key);\r\n        // fallback to root context\r\n        if (val == null && fallbackContext) {\r\n            const [, , message] = resolveMessageFormat(fallbackContext, key, locale, fallbackLocale, fallbackWarn, missingWarn);\r\n            val = resolveValue(message, key);\r\n        }\r\n        if (isString(val)) {\r\n            let occurred = false;\r\n            const errorDetector = () => {\r\n                occurred = true;\r\n            };\r\n            const msg = compileMessageFormat(context, key, locale, val, key, errorDetector);\r\n            return !occurred\r\n                ? msg\r\n                : NOOP_MESSAGE_FUNCTION;\r\n        }\r\n        else if (isMessageFunction(val)) {\r\n            return val;\r\n        }\r\n        else {\r\n            // TODO: should be implemented warning message\r\n            return NOOP_MESSAGE_FUNCTION;\r\n        }\r\n    };\r\n    const ctxOptions = {\r\n        locale,\r\n        modifiers,\r\n        pluralRules,\r\n        messages: resolveMessage\r\n    };\r\n    if (context.processor) {\r\n        ctxOptions.processor = context.processor;\r\n    }\r\n    if (options.list) {\r\n        ctxOptions.list = options.list;\r\n    }\r\n    if (options.named) {\r\n        ctxOptions.named = options.named;\r\n    }\r\n    if (isNumber(options.plural)) {\r\n        ctxOptions.pluralIndex = options.plural;\r\n    }\r\n    return ctxOptions;\r\n}\n\nconst intlDefined = typeof Intl !== 'undefined';\r\nconst Availabilities = {\r\n    dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined',\r\n    numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined'\r\n};\n\n// implementation of `datetime` function\r\nfunction datetime(context, ...args) {\r\n    const { datetimeFormats, unresolving, fallbackLocale, onWarn, localeFallbacker } = context;\r\n    const { __datetimeFormatters } = context;\r\n    if ((process.env.NODE_ENV !== 'production') && !Availabilities.dateTimeFormat) {\r\n        onWarn(getWarnMessage(CoreWarnCodes.CANNOT_FORMAT_DATE));\r\n        return MISSING_RESOLVE_VALUE;\r\n    }\r\n    const [key, value, options, overrides] = parseDateTimeArgs(...args);\r\n    const missingWarn = isBoolean(options.missingWarn)\r\n        ? options.missingWarn\r\n        : context.missingWarn;\r\n    const fallbackWarn = isBoolean(options.fallbackWarn)\r\n        ? options.fallbackWarn\r\n        : context.fallbackWarn;\r\n    const part = !!options.part;\r\n    const locale = isString(options.locale) ? options.locale : context.locale;\r\n    const locales = localeFallbacker(context, // eslint-disable-line @typescript-eslint/no-explicit-any\r\n    fallbackLocale, locale);\r\n    if (!isString(key) || key === '') {\r\n        return new Intl.DateTimeFormat(locale, overrides).format(value);\r\n    }\r\n    // resolve format\r\n    let datetimeFormat = {};\r\n    let targetLocale;\r\n    let format = null;\r\n    let from = locale;\r\n    let to = null;\r\n    const type = 'datetime format';\r\n    for (let i = 0; i < locales.length; i++) {\r\n        targetLocale = to = locales[i];\r\n        if ((process.env.NODE_ENV !== 'production') &&\r\n            locale !== targetLocale &&\r\n            isTranslateFallbackWarn(fallbackWarn, key)) {\r\n            onWarn(getWarnMessage(CoreWarnCodes.FALLBACK_TO_DATE_FORMAT, {\r\n                key,\r\n                target: targetLocale\r\n            }));\r\n        }\r\n        // for vue-devtools timeline event\r\n        if ((process.env.NODE_ENV !== 'production') && locale !== targetLocale) {\r\n            const emitter = context.__v_emitter;\r\n            if (emitter) {\r\n                emitter.emit(\"fallback\" /* FALBACK */, {\r\n                    type,\r\n                    key,\r\n                    from,\r\n                    to,\r\n                    groupId: `${type}:${key}`\r\n                });\r\n            }\r\n        }\r\n        datetimeFormat =\r\n            datetimeFormats[targetLocale] || {};\r\n        format = datetimeFormat[key];\r\n        if (isPlainObject(format))\r\n            break;\r\n        handleMissing(context, key, targetLocale, missingWarn, type); // eslint-disable-line @typescript-eslint/no-explicit-any\r\n        from = to;\r\n    }\r\n    // checking format and target locale\r\n    if (!isPlainObject(format) || !isString(targetLocale)) {\r\n        return unresolving ? NOT_REOSLVED : key;\r\n    }\r\n    let id = `${targetLocale}__${key}`;\r\n    if (!isEmptyObject(overrides)) {\r\n        id = `${id}__${JSON.stringify(overrides)}`;\r\n    }\r\n    let formatter = __datetimeFormatters.get(id);\r\n    if (!formatter) {\r\n        formatter = new Intl.DateTimeFormat(targetLocale, assign({}, format, overrides));\r\n        __datetimeFormatters.set(id, formatter);\r\n    }\r\n    return !part ? formatter.format(value) : formatter.formatToParts(value);\r\n}\r\n/** @internal */\r\nconst DATETIME_FORMAT_OPTIONS_KEYS = [\r\n    'localeMatcher',\r\n    'weekday',\r\n    'era',\r\n    'year',\r\n    'month',\r\n    'day',\r\n    'hour',\r\n    'minute',\r\n    'second',\r\n    'timeZoneName',\r\n    'formatMatcher',\r\n    'hour12',\r\n    'timeZone',\r\n    'dateStyle',\r\n    'timeStyle',\r\n    'calendar',\r\n    'dayPeriod',\r\n    'numberingSystem',\r\n    'hourCycle',\r\n    'fractionalSecondDigits'\r\n];\r\n/** @internal */\r\nfunction parseDateTimeArgs(...args) {\r\n    const [arg1, arg2, arg3, arg4] = args;\r\n    const options = {};\r\n    let overrides = {};\r\n    let value;\r\n    if (isString(arg1)) {\r\n        // Only allow ISO strings - other date formats are often supported,\r\n        // but may cause different results in different browsers.\r\n        const matches = arg1.match(/(\\d{4}-\\d{2}-\\d{2})(T|\\s)?(.*)/);\r\n        if (!matches) {\r\n            throw createCoreError(CoreErrorCodes.INVALID_ISO_DATE_ARGUMENT);\r\n        }\r\n        // Some browsers can not parse the iso datetime separated by space,\r\n        // this is a compromise solution by replace the 'T'/' ' with 'T'\r\n        const dateTime = matches[3]\r\n            ? matches[3].trim().startsWith('T')\r\n                ? `${matches[1].trim()}${matches[3].trim()}`\r\n                : `${matches[1].trim()}T${matches[3].trim()}`\r\n            : matches[1].trim();\r\n        value = new Date(dateTime);\r\n        try {\r\n            // This will fail if the date is not valid\r\n            value.toISOString();\r\n        }\r\n        catch (e) {\r\n            throw createCoreError(CoreErrorCodes.INVALID_ISO_DATE_ARGUMENT);\r\n        }\r\n    }\r\n    else if (isDate(arg1)) {\r\n        if (isNaN(arg1.getTime())) {\r\n            throw createCoreError(CoreErrorCodes.INVALID_DATE_ARGUMENT);\r\n        }\r\n        value = arg1;\r\n    }\r\n    else if (isNumber(arg1)) {\r\n        value = arg1;\r\n    }\r\n    else {\r\n        throw createCoreError(CoreErrorCodes.INVALID_ARGUMENT);\r\n    }\r\n    if (isString(arg2)) {\r\n        options.key = arg2;\r\n    }\r\n    else if (isPlainObject(arg2)) {\r\n        Object.keys(arg2).forEach(key => {\r\n            if (DATETIME_FORMAT_OPTIONS_KEYS.includes(key)) {\r\n                overrides[key] = arg2[key];\r\n            }\r\n            else {\r\n                options[key] = arg2[key];\r\n            }\r\n        });\r\n    }\r\n    if (isString(arg3)) {\r\n        options.locale = arg3;\r\n    }\r\n    else if (isPlainObject(arg3)) {\r\n        overrides = arg3;\r\n    }\r\n    if (isPlainObject(arg4)) {\r\n        overrides = arg4;\r\n    }\r\n    return [options.key || '', value, options, overrides];\r\n}\r\n/** @internal */\r\nfunction clearDateTimeFormat(ctx, locale, format) {\r\n    const context = ctx;\r\n    for (const key in format) {\r\n        const id = `${locale}__${key}`;\r\n        if (!context.__datetimeFormatters.has(id)) {\r\n            continue;\r\n        }\r\n        context.__datetimeFormatters.delete(id);\r\n    }\r\n}\n\n// implementation of `number` function\r\nfunction number(context, ...args) {\r\n    const { numberFormats, unresolving, fallbackLocale, onWarn, localeFallbacker } = context;\r\n    const { __numberFormatters } = context;\r\n    if ((process.env.NODE_ENV !== 'production') && !Availabilities.numberFormat) {\r\n        onWarn(getWarnMessage(CoreWarnCodes.CANNOT_FORMAT_NUMBER));\r\n        return MISSING_RESOLVE_VALUE;\r\n    }\r\n    const [key, value, options, overrides] = parseNumberArgs(...args);\r\n    const missingWarn = isBoolean(options.missingWarn)\r\n        ? options.missingWarn\r\n        : context.missingWarn;\r\n    const fallbackWarn = isBoolean(options.fallbackWarn)\r\n        ? options.fallbackWarn\r\n        : context.fallbackWarn;\r\n    const part = !!options.part;\r\n    const locale = isString(options.locale) ? options.locale : context.locale;\r\n    const locales = localeFallbacker(context, // eslint-disable-line @typescript-eslint/no-explicit-any\r\n    fallbackLocale, locale);\r\n    if (!isString(key) || key === '') {\r\n        return new Intl.NumberFormat(locale, overrides).format(value);\r\n    }\r\n    // resolve format\r\n    let numberFormat = {};\r\n    let targetLocale;\r\n    let format = null;\r\n    let from = locale;\r\n    let to = null;\r\n    const type = 'number format';\r\n    for (let i = 0; i < locales.length; i++) {\r\n        targetLocale = to = locales[i];\r\n        if ((process.env.NODE_ENV !== 'production') &&\r\n            locale !== targetLocale &&\r\n            isTranslateFallbackWarn(fallbackWarn, key)) {\r\n            onWarn(getWarnMessage(CoreWarnCodes.FALLBACK_TO_NUMBER_FORMAT, {\r\n                key,\r\n                target: targetLocale\r\n            }));\r\n        }\r\n        // for vue-devtools timeline event\r\n        if ((process.env.NODE_ENV !== 'production') && locale !== targetLocale) {\r\n            const emitter = context.__v_emitter;\r\n            if (emitter) {\r\n                emitter.emit(\"fallback\" /* FALBACK */, {\r\n                    type,\r\n                    key,\r\n                    from,\r\n                    to,\r\n                    groupId: `${type}:${key}`\r\n                });\r\n            }\r\n        }\r\n        numberFormat =\r\n            numberFormats[targetLocale] || {};\r\n        format = numberFormat[key];\r\n        if (isPlainObject(format))\r\n            break;\r\n        handleMissing(context, key, targetLocale, missingWarn, type); // eslint-disable-line @typescript-eslint/no-explicit-any\r\n        from = to;\r\n    }\r\n    // checking format and target locale\r\n    if (!isPlainObject(format) || !isString(targetLocale)) {\r\n        return unresolving ? NOT_REOSLVED : key;\r\n    }\r\n    let id = `${targetLocale}__${key}`;\r\n    if (!isEmptyObject(overrides)) {\r\n        id = `${id}__${JSON.stringify(overrides)}`;\r\n    }\r\n    let formatter = __numberFormatters.get(id);\r\n    if (!formatter) {\r\n        formatter = new Intl.NumberFormat(targetLocale, assign({}, format, overrides));\r\n        __numberFormatters.set(id, formatter);\r\n    }\r\n    return !part ? formatter.format(value) : formatter.formatToParts(value);\r\n}\r\n/** @internal */\r\nconst NUMBER_FORMAT_OPTIONS_KEYS = [\r\n    'localeMatcher',\r\n    'style',\r\n    'currency',\r\n    'currencyDisplay',\r\n    'currencySign',\r\n    'useGrouping',\r\n    'minimumIntegerDigits',\r\n    'minimumFractionDigits',\r\n    'maximumFractionDigits',\r\n    'minimumSignificantDigits',\r\n    'maximumSignificantDigits',\r\n    'compactDisplay',\r\n    'notation',\r\n    'signDisplay',\r\n    'unit',\r\n    'unitDisplay',\r\n    'roundingMode',\r\n    'roundingPriority',\r\n    'roundingIncrement',\r\n    'trailingZeroDisplay'\r\n];\r\n/** @internal */\r\nfunction parseNumberArgs(...args) {\r\n    const [arg1, arg2, arg3, arg4] = args;\r\n    const options = {};\r\n    let overrides = {};\r\n    if (!isNumber(arg1)) {\r\n        throw createCoreError(CoreErrorCodes.INVALID_ARGUMENT);\r\n    }\r\n    const value = arg1;\r\n    if (isString(arg2)) {\r\n        options.key = arg2;\r\n    }\r\n    else if (isPlainObject(arg2)) {\r\n        Object.keys(arg2).forEach(key => {\r\n            if (NUMBER_FORMAT_OPTIONS_KEYS.includes(key)) {\r\n                overrides[key] = arg2[key];\r\n            }\r\n            else {\r\n                options[key] = arg2[key];\r\n            }\r\n        });\r\n    }\r\n    if (isString(arg3)) {\r\n        options.locale = arg3;\r\n    }\r\n    else if (isPlainObject(arg3)) {\r\n        overrides = arg3;\r\n    }\r\n    if (isPlainObject(arg4)) {\r\n        overrides = arg4;\r\n    }\r\n    return [options.key || '', value, options, overrides];\r\n}\r\n/** @internal */\r\nfunction clearNumberFormat(ctx, locale, format) {\r\n    const context = ctx;\r\n    for (const key in format) {\r\n        const id = `${locale}__${key}`;\r\n        if (!context.__numberFormatters.has(id)) {\r\n            continue;\r\n        }\r\n        context.__numberFormatters.delete(id);\r\n    }\r\n}\n\n// TODO: we could not exports for Node native ES Moudles yet...\r\n{\r\n    if (typeof __INTLIFY_PROD_DEVTOOLS__ !== 'boolean') {\r\n        getGlobalThis().__INTLIFY_PROD_DEVTOOLS__ = false;\r\n    }\r\n}\n\nexport { CoreErrorCodes, CoreWarnCodes, DATETIME_FORMAT_OPTIONS_KEYS, DEFAULT_LOCALE, DEFAULT_MESSAGE_DATA_TYPE, MISSING_RESOLVE_VALUE, NOT_REOSLVED, NUMBER_FORMAT_OPTIONS_KEYS, VERSION, clearCompileCache, clearDateTimeFormat, clearNumberFormat, compileToFunction, createCoreContext, createCoreError, createMessageContext, datetime, fallbackWithLocaleChain, fallbackWithSimple, getAdditionalMeta, getDevToolsHook, getFallbackContext, getWarnMessage, handleMissing, initI18nDevTools, isMessageFunction, isTranslateFallbackWarn, isTranslateMissingWarn, number, parse, parseDateTimeArgs, parseNumberArgs, parseTranslateArgs, registerLocaleFallbacker, registerMessageCompiler, registerMessageResolver, resolveValue, resolveWithKeyValue, setAdditionalMeta, setDevToolsHook, setFallbackContext, translate, translateDevTools, updateFallbackLocale };\n","/*!\n  * vue-i18n v9.2.2\n  * (c) 2022 kazuya kawaguchi\n  * Released under the MIT License.\n  */\nimport { getGlobalThis, format, makeSymbol, isPlainObject, isArray, isString, hasOwn, isObject, isBoolean, isRegExp, isFunction, inBrowser, assign, isNumber, warn, createEmitter, isEmptyObject } from '@intlify/shared';\nimport { CoreWarnCodes, CompileErrorCodes, createCompileError, DEFAULT_LOCALE, updateFallbackLocale, setFallbackContext, createCoreContext, clearDateTimeFormat, clearNumberFormat, setAdditionalMeta, getFallbackContext, NOT_REOSLVED, isTranslateFallbackWarn, isTranslateMissingWarn, parseTranslateArgs, translate, MISSING_RESOLVE_VALUE, parseDateTimeArgs, datetime, parseNumberArgs, number, fallbackWithLocaleChain, NUMBER_FORMAT_OPTIONS_KEYS, DATETIME_FORMAT_OPTIONS_KEYS, registerMessageResolver, resolveValue, registerLocaleFallbacker, setDevToolsHook } from '@intlify/core-base';\nimport { createVNode, Text, ref, computed, watch, getCurrentInstance, Fragment, h, effectScope, inject, onMounted, onUnmounted, shallowRef, onBeforeMount, isRef } from 'vue';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\nimport { VueDevToolsLabels, VueDevToolsPlaceholders, VueDevToolsTimelineColors } from '@intlify/vue-devtools';\n\n/**\r\n * Vue I18n Version\r\n *\r\n * @remarks\r\n * Semver format. Same format as the package.json `version` field.\r\n *\r\n * @VueI18nGeneral\r\n */\r\nconst VERSION = '9.2.2';\r\n/**\r\n * This is only called in esm-bundler builds.\r\n * istanbul-ignore-next\r\n */\r\nfunction initFeatureFlags() {\r\n    let needWarn = false;\r\n    if (typeof __VUE_I18N_FULL_INSTALL__ !== 'boolean') {\r\n        needWarn = true;\r\n        getGlobalThis().__VUE_I18N_FULL_INSTALL__ = true;\r\n    }\r\n    if (typeof __VUE_I18N_LEGACY_API__ !== 'boolean') {\r\n        needWarn = true;\r\n        getGlobalThis().__VUE_I18N_LEGACY_API__ = true;\r\n    }\r\n    if (typeof __INTLIFY_PROD_DEVTOOLS__ !== 'boolean') {\r\n        getGlobalThis().__INTLIFY_PROD_DEVTOOLS__ = false;\r\n    }\r\n    if ((process.env.NODE_ENV !== 'production') && needWarn) {\r\n        console.warn(`You are running the esm-bundler build of vue-i18n. It is recommended to ` +\r\n            `configure your bundler to explicitly replace feature flag globals ` +\r\n            `with boolean literals to get proper tree-shaking in the final bundle.`);\r\n    }\r\n}\n\nlet code$1 = CoreWarnCodes.__EXTEND_POINT__;\r\nconst inc$1 = () => ++code$1;\r\nconst I18nWarnCodes = {\r\n    FALLBACK_TO_ROOT: code$1,\r\n    NOT_SUPPORTED_PRESERVE: inc$1(),\r\n    NOT_SUPPORTED_FORMATTER: inc$1(),\r\n    NOT_SUPPORTED_PRESERVE_DIRECTIVE: inc$1(),\r\n    NOT_SUPPORTED_GET_CHOICE_INDEX: inc$1(),\r\n    COMPONENT_NAME_LEGACY_COMPATIBLE: inc$1(),\r\n    NOT_FOUND_PARENT_SCOPE: inc$1() // 13\r\n};\r\nconst warnMessages = {\r\n    [I18nWarnCodes.FALLBACK_TO_ROOT]: `Fall back to {type} '{key}' with root locale.`,\r\n    [I18nWarnCodes.NOT_SUPPORTED_PRESERVE]: `Not supported 'preserve'.`,\r\n    [I18nWarnCodes.NOT_SUPPORTED_FORMATTER]: `Not supported 'formatter'.`,\r\n    [I18nWarnCodes.NOT_SUPPORTED_PRESERVE_DIRECTIVE]: `Not supported 'preserveDirectiveContent'.`,\r\n    [I18nWarnCodes.NOT_SUPPORTED_GET_CHOICE_INDEX]: `Not supported 'getChoiceIndex'.`,\r\n    [I18nWarnCodes.COMPONENT_NAME_LEGACY_COMPATIBLE]: `Component name legacy compatible: '{name}' -> 'i18n'`,\r\n    [I18nWarnCodes.NOT_FOUND_PARENT_SCOPE]: `Not found parent scope. use the global scope.`\r\n};\r\nfunction getWarnMessage(code, ...args) {\r\n    return format(warnMessages[code], ...args);\r\n}\n\nlet code = CompileErrorCodes.__EXTEND_POINT__;\r\nconst inc = () => ++code;\r\nconst I18nErrorCodes = {\r\n    // composer module errors\r\n    UNEXPECTED_RETURN_TYPE: code,\r\n    // legacy module errors\r\n    INVALID_ARGUMENT: inc(),\r\n    // i18n module errors\r\n    MUST_BE_CALL_SETUP_TOP: inc(),\r\n    NOT_INSLALLED: inc(),\r\n    NOT_AVAILABLE_IN_LEGACY_MODE: inc(),\r\n    // directive module errors\r\n    REQUIRED_VALUE: inc(),\r\n    INVALID_VALUE: inc(),\r\n    // vue-devtools errors\r\n    CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN: inc(),\r\n    NOT_INSLALLED_WITH_PROVIDE: inc(),\r\n    // unexpected error\r\n    UNEXPECTED_ERROR: inc(),\r\n    // not compatible legacy vue-i18n constructor\r\n    NOT_COMPATIBLE_LEGACY_VUE_I18N: inc(),\r\n    // bridge support vue 2.x only\r\n    BRIDGE_SUPPORT_VUE_2_ONLY: inc(),\r\n    // need to define `i18n` option in `allowComposition: true` and `useScope: 'local' at `useI18n``\r\n    MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION: inc(),\r\n    // Not available Compostion API in Legacy API mode. Please make sure that the legacy API mode is working properly\r\n    NOT_AVAILABLE_COMPOSITION_IN_LEGACY: inc(),\r\n    // for enhancement\r\n    __EXTEND_POINT__: inc() // 29\r\n};\r\nfunction createI18nError(code, ...args) {\r\n    return createCompileError(code, null, (process.env.NODE_ENV !== 'production') ? { messages: errorMessages, args } : undefined);\r\n}\r\nconst errorMessages = {\r\n    [I18nErrorCodes.UNEXPECTED_RETURN_TYPE]: 'Unexpected return type in composer',\r\n    [I18nErrorCodes.INVALID_ARGUMENT]: 'Invalid argument',\r\n    [I18nErrorCodes.MUST_BE_CALL_SETUP_TOP]: 'Must be called at the top of a `setup` function',\r\n    [I18nErrorCodes.NOT_INSLALLED]: 'Need to install with `app.use` function',\r\n    [I18nErrorCodes.UNEXPECTED_ERROR]: 'Unexpected error',\r\n    [I18nErrorCodes.NOT_AVAILABLE_IN_LEGACY_MODE]: 'Not available in legacy mode',\r\n    [I18nErrorCodes.REQUIRED_VALUE]: `Required in value: {0}`,\r\n    [I18nErrorCodes.INVALID_VALUE]: `Invalid value`,\r\n    [I18nErrorCodes.CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN]: `Cannot setup vue-devtools plugin`,\r\n    [I18nErrorCodes.NOT_INSLALLED_WITH_PROVIDE]: 'Need to install with `provide` function',\r\n    [I18nErrorCodes.NOT_COMPATIBLE_LEGACY_VUE_I18N]: 'Not compatible legacy VueI18n.',\r\n    [I18nErrorCodes.BRIDGE_SUPPORT_VUE_2_ONLY]: 'vue-i18n-bridge support Vue 2.x only',\r\n    [I18nErrorCodes.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION]: 'Must define ‘i18n’ option or custom block in Composition API with using local scope in Legacy API mode',\r\n    [I18nErrorCodes.NOT_AVAILABLE_COMPOSITION_IN_LEGACY]: 'Not available Compostion API in Legacy API mode. Please make sure that the legacy API mode is working properly'\r\n};\n\nconst TransrateVNodeSymbol = \r\n/* #__PURE__*/ makeSymbol('__transrateVNode');\r\nconst DatetimePartsSymbol = /* #__PURE__*/ makeSymbol('__datetimeParts');\r\nconst NumberPartsSymbol = /* #__PURE__*/ makeSymbol('__numberParts');\r\nconst EnableEmitter = /* #__PURE__*/ makeSymbol('__enableEmitter');\r\nconst DisableEmitter = /* #__PURE__*/ makeSymbol('__disableEmitter');\r\nconst SetPluralRulesSymbol = makeSymbol('__setPluralRules');\r\nmakeSymbol('__intlifyMeta');\r\nconst InejctWithOption = /* #__PURE__*/ makeSymbol('__injectWithOption');\r\nconst __VUE_I18N_BRIDGE__ =  '__VUE_I18N_BRIDGE__';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/**\r\n * Transform flat json in obj to normal json in obj\r\n */\r\nfunction handleFlatJson(obj) {\r\n    // check obj\r\n    if (!isObject(obj)) {\r\n        return obj;\r\n    }\r\n    for (const key in obj) {\r\n        // check key\r\n        if (!hasOwn(obj, key)) {\r\n            continue;\r\n        }\r\n        // handle for normal json\r\n        if (!key.includes('.')) {\r\n            // recursive process value if value is also a object\r\n            if (isObject(obj[key])) {\r\n                handleFlatJson(obj[key]);\r\n            }\r\n        }\r\n        // handle for flat json, transform to normal json\r\n        else {\r\n            // go to the last object\r\n            const subKeys = key.split('.');\r\n            const lastIndex = subKeys.length - 1;\r\n            let currentObj = obj;\r\n            for (let i = 0; i < lastIndex; i++) {\r\n                if (!(subKeys[i] in currentObj)) {\r\n                    currentObj[subKeys[i]] = {};\r\n                }\r\n                currentObj = currentObj[subKeys[i]];\r\n            }\r\n            // update last object value, delete old property\r\n            currentObj[subKeys[lastIndex]] = obj[key];\r\n            delete obj[key];\r\n            // recursive process value if value is also a object\r\n            if (isObject(currentObj[subKeys[lastIndex]])) {\r\n                handleFlatJson(currentObj[subKeys[lastIndex]]);\r\n            }\r\n        }\r\n    }\r\n    return obj;\r\n}\r\nfunction getLocaleMessages(locale, options) {\r\n    const { messages, __i18n, messageResolver, flatJson } = options;\r\n    // prettier-ignore\r\n    const ret = isPlainObject(messages)\r\n        ? messages\r\n        : isArray(__i18n)\r\n            ? {}\r\n            : { [locale]: {} };\r\n    // merge locale messages of i18n custom block\r\n    if (isArray(__i18n)) {\r\n        __i18n.forEach(custom => {\r\n            if ('locale' in custom && 'resource' in custom) {\r\n                const { locale, resource } = custom;\r\n                if (locale) {\r\n                    ret[locale] = ret[locale] || {};\r\n                    deepCopy(resource, ret[locale]);\r\n                }\r\n                else {\r\n                    deepCopy(resource, ret);\r\n                }\r\n            }\r\n            else {\r\n                isString(custom) && deepCopy(JSON.parse(custom), ret);\r\n            }\r\n        });\r\n    }\r\n    // handle messages for flat json\r\n    if (messageResolver == null && flatJson) {\r\n        for (const key in ret) {\r\n            if (hasOwn(ret, key)) {\r\n                handleFlatJson(ret[key]);\r\n            }\r\n        }\r\n    }\r\n    return ret;\r\n}\r\nconst isNotObjectOrIsArray = (val) => !isObject(val) || isArray(val);\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\nfunction deepCopy(src, des) {\r\n    // src and des should both be objects, and non of then can be a array\r\n    if (isNotObjectOrIsArray(src) || isNotObjectOrIsArray(des)) {\r\n        throw createI18nError(I18nErrorCodes.INVALID_VALUE);\r\n    }\r\n    for (const key in src) {\r\n        if (hasOwn(src, key)) {\r\n            if (isNotObjectOrIsArray(src[key]) || isNotObjectOrIsArray(des[key])) {\r\n                // replace with src[key] when:\r\n                // src[key] or des[key] is not a object, or\r\n                // src[key] or des[key] is a array\r\n                des[key] = src[key];\r\n            }\r\n            else {\r\n                // src[key] and des[key] are both object, merge them\r\n                deepCopy(src[key], des[key]);\r\n            }\r\n        }\r\n    }\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction getComponentOptions(instance) {\r\n    return instance.type ;\r\n}\r\nfunction adjustI18nResources(global, options, componentOptions // eslint-disable-line @typescript-eslint/no-explicit-any\r\n) {\r\n    let messages = isObject(options.messages) ? options.messages : {};\r\n    if ('__i18nGlobal' in componentOptions) {\r\n        messages = getLocaleMessages(global.locale.value, {\r\n            messages,\r\n            __i18n: componentOptions.__i18nGlobal\r\n        });\r\n    }\r\n    // merge locale messages\r\n    const locales = Object.keys(messages);\r\n    if (locales.length) {\r\n        locales.forEach(locale => {\r\n            global.mergeLocaleMessage(locale, messages[locale]);\r\n        });\r\n    }\r\n    {\r\n        // merge datetime formats\r\n        if (isObject(options.datetimeFormats)) {\r\n            const locales = Object.keys(options.datetimeFormats);\r\n            if (locales.length) {\r\n                locales.forEach(locale => {\r\n                    global.mergeDateTimeFormat(locale, options.datetimeFormats[locale]);\r\n                });\r\n            }\r\n        }\r\n        // merge number formats\r\n        if (isObject(options.numberFormats)) {\r\n            const locales = Object.keys(options.numberFormats);\r\n            if (locales.length) {\r\n                locales.forEach(locale => {\r\n                    global.mergeNumberFormat(locale, options.numberFormats[locale]);\r\n                });\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction createTextNode(key) {\r\n    return createVNode(Text, null, key, 0)\r\n        ;\r\n}\r\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// extend VNode interface\r\nconst DEVTOOLS_META = '__INTLIFY_META__';\r\nlet composerID = 0;\r\nfunction defineCoreMissingHandler(missing) {\r\n    return ((ctx, locale, key, type) => {\r\n        return missing(locale, key, getCurrentInstance() || undefined, type);\r\n    });\r\n}\r\n// for Intlify DevTools\r\nconst getMetaInfo =  () => {\r\n    const instance = getCurrentInstance();\r\n    let meta = null; // eslint-disable-line @typescript-eslint/no-explicit-any\r\n    return instance && (meta = getComponentOptions(instance)[DEVTOOLS_META])\r\n        ? { [DEVTOOLS_META]: meta } // eslint-disable-line @typescript-eslint/no-explicit-any\r\n        : null;\r\n};\r\n/**\r\n * Create composer interface factory\r\n *\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nfunction createComposer(options = {}, VueI18nLegacy) {\r\n    const { __root } = options;\r\n    const _isGlobal = __root === undefined;\r\n    let _inheritLocale = isBoolean(options.inheritLocale)\r\n        ? options.inheritLocale\r\n        : true;\r\n    const _locale = ref(\r\n    // prettier-ignore\r\n    __root && _inheritLocale\r\n        ? __root.locale.value\r\n        : isString(options.locale)\r\n            ? options.locale\r\n            : DEFAULT_LOCALE);\r\n    const _fallbackLocale = ref(\r\n    // prettier-ignore\r\n    __root && _inheritLocale\r\n        ? __root.fallbackLocale.value\r\n        : isString(options.fallbackLocale) ||\r\n            isArray(options.fallbackLocale) ||\r\n            isPlainObject(options.fallbackLocale) ||\r\n            options.fallbackLocale === false\r\n            ? options.fallbackLocale\r\n            : _locale.value);\r\n    const _messages = ref(getLocaleMessages(_locale.value, options));\r\n    // prettier-ignore\r\n    const _datetimeFormats = ref(isPlainObject(options.datetimeFormats)\r\n            ? options.datetimeFormats\r\n            : { [_locale.value]: {} })\r\n        ;\r\n    // prettier-ignore\r\n    const _numberFormats = ref(isPlainObject(options.numberFormats)\r\n            ? options.numberFormats\r\n            : { [_locale.value]: {} })\r\n        ;\r\n    // warning suppress options\r\n    // prettier-ignore\r\n    let _missingWarn = __root\r\n        ? __root.missingWarn\r\n        : isBoolean(options.missingWarn) || isRegExp(options.missingWarn)\r\n            ? options.missingWarn\r\n            : true;\r\n    // prettier-ignore\r\n    let _fallbackWarn = __root\r\n        ? __root.fallbackWarn\r\n        : isBoolean(options.fallbackWarn) || isRegExp(options.fallbackWarn)\r\n            ? options.fallbackWarn\r\n            : true;\r\n    // prettier-ignore\r\n    let _fallbackRoot = __root\r\n        ? __root.fallbackRoot\r\n        : isBoolean(options.fallbackRoot)\r\n            ? options.fallbackRoot\r\n            : true;\r\n    // configure fall back to root\r\n    let _fallbackFormat = !!options.fallbackFormat;\r\n    // runtime missing\r\n    let _missing = isFunction(options.missing) ? options.missing : null;\r\n    let _runtimeMissing = isFunction(options.missing)\r\n        ? defineCoreMissingHandler(options.missing)\r\n        : null;\r\n    // postTranslation handler\r\n    let _postTranslation = isFunction(options.postTranslation)\r\n        ? options.postTranslation\r\n        : null;\r\n    // prettier-ignore\r\n    let _warnHtmlMessage = __root\r\n        ? __root.warnHtmlMessage\r\n        : isBoolean(options.warnHtmlMessage)\r\n            ? options.warnHtmlMessage\r\n            : true;\r\n    let _escapeParameter = !!options.escapeParameter;\r\n    // custom linked modifiers\r\n    // prettier-ignore\r\n    const _modifiers = __root\r\n        ? __root.modifiers\r\n        : isPlainObject(options.modifiers)\r\n            ? options.modifiers\r\n            : {};\r\n    // pluralRules\r\n    let _pluralRules = options.pluralRules || (__root && __root.pluralRules);\r\n    // runtime context\r\n    // eslint-disable-next-line prefer-const\r\n    let _context;\r\n    const getCoreContext = () => {\r\n        _isGlobal && setFallbackContext(null);\r\n        const ctxOptions = {\r\n            version: VERSION,\r\n            locale: _locale.value,\r\n            fallbackLocale: _fallbackLocale.value,\r\n            messages: _messages.value,\r\n            modifiers: _modifiers,\r\n            pluralRules: _pluralRules,\r\n            missing: _runtimeMissing === null ? undefined : _runtimeMissing,\r\n            missingWarn: _missingWarn,\r\n            fallbackWarn: _fallbackWarn,\r\n            fallbackFormat: _fallbackFormat,\r\n            unresolving: true,\r\n            postTranslation: _postTranslation === null ? undefined : _postTranslation,\r\n            warnHtmlMessage: _warnHtmlMessage,\r\n            escapeParameter: _escapeParameter,\r\n            messageResolver: options.messageResolver,\r\n            __meta: { framework: 'vue' }\r\n        };\r\n        {\r\n            ctxOptions.datetimeFormats = _datetimeFormats.value;\r\n            ctxOptions.numberFormats = _numberFormats.value;\r\n            ctxOptions.__datetimeFormatters = isPlainObject(_context)\r\n                ? _context.__datetimeFormatters\r\n                : undefined;\r\n            ctxOptions.__numberFormatters = isPlainObject(_context)\r\n                ? _context.__numberFormatters\r\n                : undefined;\r\n        }\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            ctxOptions.__v_emitter = isPlainObject(_context)\r\n                ? _context.__v_emitter\r\n                : undefined;\r\n        }\r\n        const ctx = createCoreContext(ctxOptions);\r\n        _isGlobal && setFallbackContext(ctx);\r\n        return ctx;\r\n    };\r\n    _context = getCoreContext();\r\n    updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);\r\n    // track reactivity\r\n    function trackReactivityValues() {\r\n        return [\r\n                _locale.value,\r\n                _fallbackLocale.value,\r\n                _messages.value,\r\n                _datetimeFormats.value,\r\n                _numberFormats.value\r\n            ]\r\n            ;\r\n    }\r\n    // locale\r\n    const locale = computed({\r\n        get: () => _locale.value,\r\n        set: val => {\r\n            _locale.value = val;\r\n            _context.locale = _locale.value;\r\n        }\r\n    });\r\n    // fallbackLocale\r\n    const fallbackLocale = computed({\r\n        get: () => _fallbackLocale.value,\r\n        set: val => {\r\n            _fallbackLocale.value = val;\r\n            _context.fallbackLocale = _fallbackLocale.value;\r\n            updateFallbackLocale(_context, _locale.value, val);\r\n        }\r\n    });\r\n    // messages\r\n    const messages = computed(() => _messages.value);\r\n    // datetimeFormats\r\n    const datetimeFormats = /* #__PURE__*/ computed(() => _datetimeFormats.value);\r\n    // numberFormats\r\n    const numberFormats = /* #__PURE__*/ computed(() => _numberFormats.value);\r\n    // getPostTranslationHandler\r\n    function getPostTranslationHandler() {\r\n        return isFunction(_postTranslation) ? _postTranslation : null;\r\n    }\r\n    // setPostTranslationHandler\r\n    function setPostTranslationHandler(handler) {\r\n        _postTranslation = handler;\r\n        _context.postTranslation = handler;\r\n    }\r\n    // getMissingHandler\r\n    function getMissingHandler() {\r\n        return _missing;\r\n    }\r\n    // setMissingHandler\r\n    function setMissingHandler(handler) {\r\n        if (handler !== null) {\r\n            _runtimeMissing = defineCoreMissingHandler(handler);\r\n        }\r\n        _missing = handler;\r\n        _context.missing = _runtimeMissing;\r\n    }\r\n    function isResolvedTranslateMessage(type, arg // eslint-disable-line @typescript-eslint/no-explicit-any\r\n    ) {\r\n        return type !== 'translate' || !arg.resolvedMessage;\r\n    }\r\n    const wrapWithDeps = (fn, argumentParser, warnType, fallbackSuccess, fallbackFail, successCondition) => {\r\n        trackReactivityValues(); // track reactive dependency\r\n        // NOTE: experimental !!\r\n        let ret;\r\n        if ((process.env.NODE_ENV !== 'production') || __INTLIFY_PROD_DEVTOOLS__) {\r\n            try {\r\n                setAdditionalMeta(getMetaInfo());\r\n                if (!_isGlobal) {\r\n                    _context.fallbackContext = __root\r\n                        ? getFallbackContext()\r\n                        : undefined;\r\n                }\r\n                ret = fn(_context);\r\n            }\r\n            finally {\r\n                setAdditionalMeta(null);\r\n                if (!_isGlobal) {\r\n                    _context.fallbackContext = undefined;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            ret = fn(_context);\r\n        }\r\n        if (isNumber(ret) && ret === NOT_REOSLVED) {\r\n            const [key, arg2] = argumentParser();\r\n            if ((process.env.NODE_ENV !== 'production') &&\r\n                __root &&\r\n                isString(key) &&\r\n                isResolvedTranslateMessage(warnType, arg2)) {\r\n                if (_fallbackRoot &&\r\n                    (isTranslateFallbackWarn(_fallbackWarn, key) ||\r\n                        isTranslateMissingWarn(_missingWarn, key))) {\r\n                    warn(getWarnMessage(I18nWarnCodes.FALLBACK_TO_ROOT, {\r\n                        key,\r\n                        type: warnType\r\n                    }));\r\n                }\r\n                // for vue-devtools timeline event\r\n                if ((process.env.NODE_ENV !== 'production')) {\r\n                    const { __v_emitter: emitter } = _context;\r\n                    if (emitter && _fallbackRoot) {\r\n                        emitter.emit(\"fallback\" /* FALBACK */, {\r\n                            type: warnType,\r\n                            key,\r\n                            to: 'global',\r\n                            groupId: `${warnType}:${key}`\r\n                        });\r\n                    }\r\n                }\r\n            }\r\n            return __root && _fallbackRoot\r\n                ? fallbackSuccess(__root)\r\n                : fallbackFail(key);\r\n        }\r\n        else if (successCondition(ret)) {\r\n            return ret;\r\n        }\r\n        else {\r\n            /* istanbul ignore next */\r\n            throw createI18nError(I18nErrorCodes.UNEXPECTED_RETURN_TYPE);\r\n        }\r\n    };\r\n    // t\r\n    function t(...args) {\r\n        return wrapWithDeps(context => Reflect.apply(translate, null, [context, ...args]), () => parseTranslateArgs(...args), 'translate', root => Reflect.apply(root.t, root, [...args]), key => key, val => isString(val));\r\n    }\r\n    // rt\r\n    function rt(...args) {\r\n        const [arg1, arg2, arg3] = args;\r\n        if (arg3 && !isObject(arg3)) {\r\n            throw createI18nError(I18nErrorCodes.INVALID_ARGUMENT);\r\n        }\r\n        return t(...[arg1, arg2, assign({ resolvedMessage: true }, arg3 || {})]);\r\n    }\r\n    // d\r\n    function d(...args) {\r\n        return wrapWithDeps(context => Reflect.apply(datetime, null, [context, ...args]), () => parseDateTimeArgs(...args), 'datetime format', root => Reflect.apply(root.d, root, [...args]), () => MISSING_RESOLVE_VALUE, val => isString(val));\r\n    }\r\n    // n\r\n    function n(...args) {\r\n        return wrapWithDeps(context => Reflect.apply(number, null, [context, ...args]), () => parseNumberArgs(...args), 'number format', root => Reflect.apply(root.n, root, [...args]), () => MISSING_RESOLVE_VALUE, val => isString(val));\r\n    }\r\n    // for custom processor\r\n    function normalize(values) {\r\n        return values.map(val => isString(val) || isNumber(val) || isBoolean(val)\r\n            ? createTextNode(String(val))\r\n            : val);\r\n    }\r\n    const interpolate = (val) => val;\r\n    const processor = {\r\n        normalize,\r\n        interpolate,\r\n        type: 'vnode'\r\n    };\r\n    // transrateVNode, using for `i18n-t` component\r\n    function transrateVNode(...args) {\r\n        return wrapWithDeps(context => {\r\n            let ret;\r\n            const _context = context;\r\n            try {\r\n                _context.processor = processor;\r\n                ret = Reflect.apply(translate, null, [_context, ...args]);\r\n            }\r\n            finally {\r\n                _context.processor = null;\r\n            }\r\n            return ret;\r\n        }, () => parseTranslateArgs(...args), 'translate', \r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        root => root[TransrateVNodeSymbol](...args), key => [createTextNode(key)], val => isArray(val));\r\n    }\r\n    // numberParts, using for `i18n-n` component\r\n    function numberParts(...args) {\r\n        return wrapWithDeps(context => Reflect.apply(number, null, [context, ...args]), () => parseNumberArgs(...args), 'number format', \r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        root => root[NumberPartsSymbol](...args), () => [], val => isString(val) || isArray(val));\r\n    }\r\n    // datetimeParts, using for `i18n-d` component\r\n    function datetimeParts(...args) {\r\n        return wrapWithDeps(context => Reflect.apply(datetime, null, [context, ...args]), () => parseDateTimeArgs(...args), 'datetime format', \r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        root => root[DatetimePartsSymbol](...args), () => [], val => isString(val) || isArray(val));\r\n    }\r\n    function setPluralRules(rules) {\r\n        _pluralRules = rules;\r\n        _context.pluralRules = _pluralRules;\r\n    }\r\n    // te\r\n    function te(key, locale) {\r\n        const targetLocale = isString(locale) ? locale : _locale.value;\r\n        const message = getLocaleMessage(targetLocale);\r\n        return _context.messageResolver(message, key) !== null;\r\n    }\r\n    function resolveMessages(key) {\r\n        let messages = null;\r\n        const locales = fallbackWithLocaleChain(_context, _fallbackLocale.value, _locale.value);\r\n        for (let i = 0; i < locales.length; i++) {\r\n            const targetLocaleMessages = _messages.value[locales[i]] || {};\r\n            const messageValue = _context.messageResolver(targetLocaleMessages, key);\r\n            if (messageValue != null) {\r\n                messages = messageValue;\r\n                break;\r\n            }\r\n        }\r\n        return messages;\r\n    }\r\n    // tm\r\n    function tm(key) {\r\n        const messages = resolveMessages(key);\r\n        // prettier-ignore\r\n        return messages != null\r\n            ? messages\r\n            : __root\r\n                ? __root.tm(key) || {}\r\n                : {};\r\n    }\r\n    // getLocaleMessage\r\n    function getLocaleMessage(locale) {\r\n        return (_messages.value[locale] || {});\r\n    }\r\n    // setLocaleMessage\r\n    function setLocaleMessage(locale, message) {\r\n        _messages.value[locale] = message;\r\n        _context.messages = _messages.value;\r\n    }\r\n    // mergeLocaleMessage\r\n    function mergeLocaleMessage(locale, message) {\r\n        _messages.value[locale] = _messages.value[locale] || {};\r\n        deepCopy(message, _messages.value[locale]);\r\n        _context.messages = _messages.value;\r\n    }\r\n    // getDateTimeFormat\r\n    function getDateTimeFormat(locale) {\r\n        return _datetimeFormats.value[locale] || {};\r\n    }\r\n    // setDateTimeFormat\r\n    function setDateTimeFormat(locale, format) {\r\n        _datetimeFormats.value[locale] = format;\r\n        _context.datetimeFormats = _datetimeFormats.value;\r\n        clearDateTimeFormat(_context, locale, format);\r\n    }\r\n    // mergeDateTimeFormat\r\n    function mergeDateTimeFormat(locale, format) {\r\n        _datetimeFormats.value[locale] = assign(_datetimeFormats.value[locale] || {}, format);\r\n        _context.datetimeFormats = _datetimeFormats.value;\r\n        clearDateTimeFormat(_context, locale, format);\r\n    }\r\n    // getNumberFormat\r\n    function getNumberFormat(locale) {\r\n        return _numberFormats.value[locale] || {};\r\n    }\r\n    // setNumberFormat\r\n    function setNumberFormat(locale, format) {\r\n        _numberFormats.value[locale] = format;\r\n        _context.numberFormats = _numberFormats.value;\r\n        clearNumberFormat(_context, locale, format);\r\n    }\r\n    // mergeNumberFormat\r\n    function mergeNumberFormat(locale, format) {\r\n        _numberFormats.value[locale] = assign(_numberFormats.value[locale] || {}, format);\r\n        _context.numberFormats = _numberFormats.value;\r\n        clearNumberFormat(_context, locale, format);\r\n    }\r\n    // for debug\r\n    composerID++;\r\n    // watch root locale & fallbackLocale\r\n    if (__root && inBrowser) {\r\n        watch(__root.locale, (val) => {\r\n            if (_inheritLocale) {\r\n                _locale.value = val;\r\n                _context.locale = val;\r\n                updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);\r\n            }\r\n        });\r\n        watch(__root.fallbackLocale, (val) => {\r\n            if (_inheritLocale) {\r\n                _fallbackLocale.value = val;\r\n                _context.fallbackLocale = val;\r\n                updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);\r\n            }\r\n        });\r\n    }\r\n    // define basic composition API!\r\n    const composer = {\r\n        id: composerID,\r\n        locale,\r\n        fallbackLocale,\r\n        get inheritLocale() {\r\n            return _inheritLocale;\r\n        },\r\n        set inheritLocale(val) {\r\n            _inheritLocale = val;\r\n            if (val && __root) {\r\n                _locale.value = __root.locale.value;\r\n                _fallbackLocale.value = __root.fallbackLocale.value;\r\n                updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);\r\n            }\r\n        },\r\n        get availableLocales() {\r\n            return Object.keys(_messages.value).sort();\r\n        },\r\n        messages,\r\n        get modifiers() {\r\n            return _modifiers;\r\n        },\r\n        get pluralRules() {\r\n            return _pluralRules || {};\r\n        },\r\n        get isGlobal() {\r\n            return _isGlobal;\r\n        },\r\n        get missingWarn() {\r\n            return _missingWarn;\r\n        },\r\n        set missingWarn(val) {\r\n            _missingWarn = val;\r\n            _context.missingWarn = _missingWarn;\r\n        },\r\n        get fallbackWarn() {\r\n            return _fallbackWarn;\r\n        },\r\n        set fallbackWarn(val) {\r\n            _fallbackWarn = val;\r\n            _context.fallbackWarn = _fallbackWarn;\r\n        },\r\n        get fallbackRoot() {\r\n            return _fallbackRoot;\r\n        },\r\n        set fallbackRoot(val) {\r\n            _fallbackRoot = val;\r\n        },\r\n        get fallbackFormat() {\r\n            return _fallbackFormat;\r\n        },\r\n        set fallbackFormat(val) {\r\n            _fallbackFormat = val;\r\n            _context.fallbackFormat = _fallbackFormat;\r\n        },\r\n        get warnHtmlMessage() {\r\n            return _warnHtmlMessage;\r\n        },\r\n        set warnHtmlMessage(val) {\r\n            _warnHtmlMessage = val;\r\n            _context.warnHtmlMessage = val;\r\n        },\r\n        get escapeParameter() {\r\n            return _escapeParameter;\r\n        },\r\n        set escapeParameter(val) {\r\n            _escapeParameter = val;\r\n            _context.escapeParameter = val;\r\n        },\r\n        t,\r\n        getLocaleMessage,\r\n        setLocaleMessage,\r\n        mergeLocaleMessage,\r\n        getPostTranslationHandler,\r\n        setPostTranslationHandler,\r\n        getMissingHandler,\r\n        setMissingHandler,\r\n        [SetPluralRulesSymbol]: setPluralRules\r\n    };\r\n    {\r\n        composer.datetimeFormats = datetimeFormats;\r\n        composer.numberFormats = numberFormats;\r\n        composer.rt = rt;\r\n        composer.te = te;\r\n        composer.tm = tm;\r\n        composer.d = d;\r\n        composer.n = n;\r\n        composer.getDateTimeFormat = getDateTimeFormat;\r\n        composer.setDateTimeFormat = setDateTimeFormat;\r\n        composer.mergeDateTimeFormat = mergeDateTimeFormat;\r\n        composer.getNumberFormat = getNumberFormat;\r\n        composer.setNumberFormat = setNumberFormat;\r\n        composer.mergeNumberFormat = mergeNumberFormat;\r\n        composer[InejctWithOption] = options.__injectWithOption;\r\n        composer[TransrateVNodeSymbol] = transrateVNode;\r\n        composer[DatetimePartsSymbol] = datetimeParts;\r\n        composer[NumberPartsSymbol] = numberParts;\r\n    }\r\n    // for vue-devtools timeline event\r\n    if ((process.env.NODE_ENV !== 'production')) {\r\n        composer[EnableEmitter] = (emitter) => {\r\n            _context.__v_emitter = emitter;\r\n        };\r\n        composer[DisableEmitter] = () => {\r\n            _context.__v_emitter = undefined;\r\n        };\r\n    }\r\n    return composer;\r\n}\r\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/**\r\n * Convert to I18n Composer Options from VueI18n Options\r\n *\r\n * @internal\r\n */\r\nfunction convertComposerOptions(options) {\r\n    const locale = isString(options.locale) ? options.locale : DEFAULT_LOCALE;\r\n    const fallbackLocale = isString(options.fallbackLocale) ||\r\n        isArray(options.fallbackLocale) ||\r\n        isPlainObject(options.fallbackLocale) ||\r\n        options.fallbackLocale === false\r\n        ? options.fallbackLocale\r\n        : locale;\r\n    const missing = isFunction(options.missing) ? options.missing : undefined;\r\n    const missingWarn = isBoolean(options.silentTranslationWarn) ||\r\n        isRegExp(options.silentTranslationWarn)\r\n        ? !options.silentTranslationWarn\r\n        : true;\r\n    const fallbackWarn = isBoolean(options.silentFallbackWarn) ||\r\n        isRegExp(options.silentFallbackWarn)\r\n        ? !options.silentFallbackWarn\r\n        : true;\r\n    const fallbackRoot = isBoolean(options.fallbackRoot)\r\n        ? options.fallbackRoot\r\n        : true;\r\n    const fallbackFormat = !!options.formatFallbackMessages;\r\n    const modifiers = isPlainObject(options.modifiers) ? options.modifiers : {};\r\n    const pluralizationRules = options.pluralizationRules;\r\n    const postTranslation = isFunction(options.postTranslation)\r\n        ? options.postTranslation\r\n        : undefined;\r\n    const warnHtmlMessage = isString(options.warnHtmlInMessage)\r\n        ? options.warnHtmlInMessage !== 'off'\r\n        : true;\r\n    const escapeParameter = !!options.escapeParameterHtml;\r\n    const inheritLocale = isBoolean(options.sync) ? options.sync : true;\r\n    if ((process.env.NODE_ENV !== 'production') && options.formatter) {\r\n        warn(getWarnMessage(I18nWarnCodes.NOT_SUPPORTED_FORMATTER));\r\n    }\r\n    if ((process.env.NODE_ENV !== 'production') && options.preserveDirectiveContent) {\r\n        warn(getWarnMessage(I18nWarnCodes.NOT_SUPPORTED_PRESERVE_DIRECTIVE));\r\n    }\r\n    let messages = options.messages;\r\n    if (isPlainObject(options.sharedMessages)) {\r\n        const sharedMessages = options.sharedMessages;\r\n        const locales = Object.keys(sharedMessages);\r\n        messages = locales.reduce((messages, locale) => {\r\n            const message = messages[locale] || (messages[locale] = {});\r\n            assign(message, sharedMessages[locale]);\r\n            return messages;\r\n        }, (messages || {}));\r\n    }\r\n    const { __i18n, __root, __injectWithOption } = options;\r\n    const datetimeFormats = options.datetimeFormats;\r\n    const numberFormats = options.numberFormats;\r\n    const flatJson = options.flatJson;\r\n    return {\r\n        locale,\r\n        fallbackLocale,\r\n        messages,\r\n        flatJson,\r\n        datetimeFormats,\r\n        numberFormats,\r\n        missing,\r\n        missingWarn,\r\n        fallbackWarn,\r\n        fallbackRoot,\r\n        fallbackFormat,\r\n        modifiers,\r\n        pluralRules: pluralizationRules,\r\n        postTranslation,\r\n        warnHtmlMessage,\r\n        escapeParameter,\r\n        messageResolver: options.messageResolver,\r\n        inheritLocale,\r\n        __i18n,\r\n        __root,\r\n        __injectWithOption\r\n    };\r\n}\r\n/**\r\n * create VueI18n interface factory\r\n *\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nfunction createVueI18n(options = {}, VueI18nLegacy) {\r\n    {\r\n        const composer = createComposer(convertComposerOptions(options));\r\n        // defines VueI18n\r\n        const vueI18n = {\r\n            // id\r\n            id: composer.id,\r\n            // locale\r\n            get locale() {\r\n                return composer.locale.value;\r\n            },\r\n            set locale(val) {\r\n                composer.locale.value = val;\r\n            },\r\n            // fallbackLocale\r\n            get fallbackLocale() {\r\n                return composer.fallbackLocale.value;\r\n            },\r\n            set fallbackLocale(val) {\r\n                composer.fallbackLocale.value = val;\r\n            },\r\n            // messages\r\n            get messages() {\r\n                return composer.messages.value;\r\n            },\r\n            // datetimeFormats\r\n            get datetimeFormats() {\r\n                return composer.datetimeFormats.value;\r\n            },\r\n            // numberFormats\r\n            get numberFormats() {\r\n                return composer.numberFormats.value;\r\n            },\r\n            // availableLocales\r\n            get availableLocales() {\r\n                return composer.availableLocales;\r\n            },\r\n            // formatter\r\n            get formatter() {\r\n                (process.env.NODE_ENV !== 'production') && warn(getWarnMessage(I18nWarnCodes.NOT_SUPPORTED_FORMATTER));\r\n                // dummy\r\n                return {\r\n                    interpolate() {\r\n                        return [];\r\n                    }\r\n                };\r\n            },\r\n            set formatter(val) {\r\n                (process.env.NODE_ENV !== 'production') && warn(getWarnMessage(I18nWarnCodes.NOT_SUPPORTED_FORMATTER));\r\n            },\r\n            // missing\r\n            get missing() {\r\n                return composer.getMissingHandler();\r\n            },\r\n            set missing(handler) {\r\n                composer.setMissingHandler(handler);\r\n            },\r\n            // silentTranslationWarn\r\n            get silentTranslationWarn() {\r\n                return isBoolean(composer.missingWarn)\r\n                    ? !composer.missingWarn\r\n                    : composer.missingWarn;\r\n            },\r\n            set silentTranslationWarn(val) {\r\n                composer.missingWarn = isBoolean(val) ? !val : val;\r\n            },\r\n            // silentFallbackWarn\r\n            get silentFallbackWarn() {\r\n                return isBoolean(composer.fallbackWarn)\r\n                    ? !composer.fallbackWarn\r\n                    : composer.fallbackWarn;\r\n            },\r\n            set silentFallbackWarn(val) {\r\n                composer.fallbackWarn = isBoolean(val) ? !val : val;\r\n            },\r\n            // modifiers\r\n            get modifiers() {\r\n                return composer.modifiers;\r\n            },\r\n            // formatFallbackMessages\r\n            get formatFallbackMessages() {\r\n                return composer.fallbackFormat;\r\n            },\r\n            set formatFallbackMessages(val) {\r\n                composer.fallbackFormat = val;\r\n            },\r\n            // postTranslation\r\n            get postTranslation() {\r\n                return composer.getPostTranslationHandler();\r\n            },\r\n            set postTranslation(handler) {\r\n                composer.setPostTranslationHandler(handler);\r\n            },\r\n            // sync\r\n            get sync() {\r\n                return composer.inheritLocale;\r\n            },\r\n            set sync(val) {\r\n                composer.inheritLocale = val;\r\n            },\r\n            // warnInHtmlMessage\r\n            get warnHtmlInMessage() {\r\n                return composer.warnHtmlMessage ? 'warn' : 'off';\r\n            },\r\n            set warnHtmlInMessage(val) {\r\n                composer.warnHtmlMessage = val !== 'off';\r\n            },\r\n            // escapeParameterHtml\r\n            get escapeParameterHtml() {\r\n                return composer.escapeParameter;\r\n            },\r\n            set escapeParameterHtml(val) {\r\n                composer.escapeParameter = val;\r\n            },\r\n            // preserveDirectiveContent\r\n            get preserveDirectiveContent() {\r\n                (process.env.NODE_ENV !== 'production') &&\r\n                    warn(getWarnMessage(I18nWarnCodes.NOT_SUPPORTED_PRESERVE_DIRECTIVE));\r\n                return true;\r\n            },\r\n            set preserveDirectiveContent(val) {\r\n                (process.env.NODE_ENV !== 'production') &&\r\n                    warn(getWarnMessage(I18nWarnCodes.NOT_SUPPORTED_PRESERVE_DIRECTIVE));\r\n            },\r\n            // pluralizationRules\r\n            get pluralizationRules() {\r\n                return composer.pluralRules || {};\r\n            },\r\n            // for internal\r\n            __composer: composer,\r\n            // t\r\n            t(...args) {\r\n                const [arg1, arg2, arg3] = args;\r\n                const options = {};\r\n                let list = null;\r\n                let named = null;\r\n                if (!isString(arg1)) {\r\n                    throw createI18nError(I18nErrorCodes.INVALID_ARGUMENT);\r\n                }\r\n                const key = arg1;\r\n                if (isString(arg2)) {\r\n                    options.locale = arg2;\r\n                }\r\n                else if (isArray(arg2)) {\r\n                    list = arg2;\r\n                }\r\n                else if (isPlainObject(arg2)) {\r\n                    named = arg2;\r\n                }\r\n                if (isArray(arg3)) {\r\n                    list = arg3;\r\n                }\r\n                else if (isPlainObject(arg3)) {\r\n                    named = arg3;\r\n                }\r\n                // return composer.t(key, (list || named || {}) as any, options)\r\n                return Reflect.apply(composer.t, composer, [\r\n                    key,\r\n                    (list || named || {}),\r\n                    options\r\n                ]);\r\n            },\r\n            rt(...args) {\r\n                return Reflect.apply(composer.rt, composer, [...args]);\r\n            },\r\n            // tc\r\n            tc(...args) {\r\n                const [arg1, arg2, arg3] = args;\r\n                const options = { plural: 1 };\r\n                let list = null;\r\n                let named = null;\r\n                if (!isString(arg1)) {\r\n                    throw createI18nError(I18nErrorCodes.INVALID_ARGUMENT);\r\n                }\r\n                const key = arg1;\r\n                if (isString(arg2)) {\r\n                    options.locale = arg2;\r\n                }\r\n                else if (isNumber(arg2)) {\r\n                    options.plural = arg2;\r\n                }\r\n                else if (isArray(arg2)) {\r\n                    list = arg2;\r\n                }\r\n                else if (isPlainObject(arg2)) {\r\n                    named = arg2;\r\n                }\r\n                if (isString(arg3)) {\r\n                    options.locale = arg3;\r\n                }\r\n                else if (isArray(arg3)) {\r\n                    list = arg3;\r\n                }\r\n                else if (isPlainObject(arg3)) {\r\n                    named = arg3;\r\n                }\r\n                // return composer.t(key, (list || named || {}) as any, options)\r\n                return Reflect.apply(composer.t, composer, [\r\n                    key,\r\n                    (list || named || {}),\r\n                    options\r\n                ]);\r\n            },\r\n            // te\r\n            te(key, locale) {\r\n                return composer.te(key, locale);\r\n            },\r\n            // tm\r\n            tm(key) {\r\n                return composer.tm(key);\r\n            },\r\n            // getLocaleMessage\r\n            getLocaleMessage(locale) {\r\n                return composer.getLocaleMessage(locale);\r\n            },\r\n            // setLocaleMessage\r\n            setLocaleMessage(locale, message) {\r\n                composer.setLocaleMessage(locale, message);\r\n            },\r\n            // mergeLocaleMessage\r\n            mergeLocaleMessage(locale, message) {\r\n                composer.mergeLocaleMessage(locale, message);\r\n            },\r\n            // d\r\n            d(...args) {\r\n                return Reflect.apply(composer.d, composer, [...args]);\r\n            },\r\n            // getDateTimeFormat\r\n            getDateTimeFormat(locale) {\r\n                return composer.getDateTimeFormat(locale);\r\n            },\r\n            // setDateTimeFormat\r\n            setDateTimeFormat(locale, format) {\r\n                composer.setDateTimeFormat(locale, format);\r\n            },\r\n            // mergeDateTimeFormat\r\n            mergeDateTimeFormat(locale, format) {\r\n                composer.mergeDateTimeFormat(locale, format);\r\n            },\r\n            // n\r\n            n(...args) {\r\n                return Reflect.apply(composer.n, composer, [...args]);\r\n            },\r\n            // getNumberFormat\r\n            getNumberFormat(locale) {\r\n                return composer.getNumberFormat(locale);\r\n            },\r\n            // setNumberFormat\r\n            setNumberFormat(locale, format) {\r\n                composer.setNumberFormat(locale, format);\r\n            },\r\n            // mergeNumberFormat\r\n            mergeNumberFormat(locale, format) {\r\n                composer.mergeNumberFormat(locale, format);\r\n            },\r\n            // getChoiceIndex\r\n            // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n            getChoiceIndex(choice, choicesLength) {\r\n                (process.env.NODE_ENV !== 'production') &&\r\n                    warn(getWarnMessage(I18nWarnCodes.NOT_SUPPORTED_GET_CHOICE_INDEX));\r\n                return -1;\r\n            },\r\n            // for internal\r\n            __onComponentInstanceCreated(target) {\r\n                const { componentInstanceCreatedListener } = options;\r\n                if (componentInstanceCreatedListener) {\r\n                    componentInstanceCreatedListener(target, vueI18n);\r\n                }\r\n            }\r\n        };\r\n        // for vue-devtools timeline event\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            vueI18n.__enableEmitter = (emitter) => {\r\n                const __composer = composer;\r\n                __composer[EnableEmitter] && __composer[EnableEmitter](emitter);\r\n            };\r\n            vueI18n.__disableEmitter = () => {\r\n                const __composer = composer;\r\n                __composer[DisableEmitter] && __composer[DisableEmitter]();\r\n            };\r\n        }\r\n        return vueI18n;\r\n    }\r\n}\r\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nconst baseFormatProps = {\r\n    tag: {\r\n        type: [String, Object]\r\n    },\r\n    locale: {\r\n        type: String\r\n    },\r\n    scope: {\r\n        type: String,\r\n        // NOTE: avoid https://github.com/microsoft/rushstack/issues/1050\r\n        validator: (val /* ComponetI18nScope */) => val === 'parent' || val === 'global',\r\n        default: 'parent' /* ComponetI18nScope */\r\n    },\r\n    i18n: {\r\n        type: Object\r\n    }\r\n};\n\nfunction getInterpolateArg(\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n{ slots }, // SetupContext,\r\nkeys) {\r\n    if (keys.length === 1 && keys[0] === 'default') {\r\n        // default slot with list\r\n        const ret = slots.default ? slots.default() : [];\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        return ret.reduce((slot, current) => {\r\n            return (slot = [\r\n                ...slot,\r\n                ...(isArray(current.children) ? current.children : [current])\r\n            ]);\r\n        }, []);\r\n    }\r\n    else {\r\n        // named slots\r\n        return keys.reduce((arg, key) => {\r\n            const slot = slots[key];\r\n            if (slot) {\r\n                arg[key] = slot();\r\n            }\r\n            return arg;\r\n        }, {});\r\n    }\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction getFragmentableTag(tag) {\r\n    return Fragment ;\r\n}\n\n/**\r\n * Translation Component\r\n *\r\n * @remarks\r\n * See the following items for property about details\r\n *\r\n * @VueI18nSee [TranslationProps](component#translationprops)\r\n * @VueI18nSee [BaseFormatProps](component#baseformatprops)\r\n * @VueI18nSee [Component Interpolation](../guide/advanced/component)\r\n *\r\n * @example\r\n * ```html\r\n * <div id=\"app\">\r\n *   <!-- ... -->\r\n *   <i18n path=\"term\" tag=\"label\" for=\"tos\">\r\n *     <a :href=\"url\" target=\"_blank\">{{ $t('tos') }}</a>\r\n *   </i18n>\r\n *   <!-- ... -->\r\n * </div>\r\n * ```\r\n * ```js\r\n * import { createApp } from 'vue'\r\n * import { createI18n } from 'vue-i18n'\r\n *\r\n * const messages = {\r\n *   en: {\r\n *     tos: 'Term of Service',\r\n *     term: 'I accept xxx {0}.'\r\n *   },\r\n *   ja: {\r\n *     tos: '利用規約',\r\n *     term: '私は xxx の{0}に同意します。'\r\n *   }\r\n * }\r\n *\r\n * const i18n = createI18n({\r\n *   locale: 'en',\r\n *   messages\r\n * })\r\n *\r\n * const app = createApp({\r\n *   data: {\r\n *     url: '/term'\r\n *   }\r\n * }).use(i18n).mount('#app')\r\n * ```\r\n *\r\n * @VueI18nComponent\r\n */\r\nconst Translation =  /* defineComponent */ {\r\n    /* eslint-disable */\r\n    name: 'i18n-t',\r\n    props: assign({\r\n        keypath: {\r\n            type: String,\r\n            required: true\r\n        },\r\n        plural: {\r\n            type: [Number, String],\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            validator: (val) => isNumber(val) || !isNaN(val)\r\n        }\r\n    }, baseFormatProps),\r\n    /* eslint-enable */\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    setup(props, context) {\r\n        const { slots, attrs } = context;\r\n        // NOTE: avoid https://github.com/microsoft/rushstack/issues/1050\r\n        const i18n = props.i18n ||\r\n            useI18n({\r\n                useScope: props.scope,\r\n                __useComponent: true\r\n            });\r\n        return () => {\r\n            const keys = Object.keys(slots).filter(key => key !== '_');\r\n            const options = {};\r\n            if (props.locale) {\r\n                options.locale = props.locale;\r\n            }\r\n            if (props.plural !== undefined) {\r\n                options.plural = isString(props.plural) ? +props.plural : props.plural;\r\n            }\r\n            const arg = getInterpolateArg(context, keys);\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            const children = i18n[TransrateVNodeSymbol](props.keypath, arg, options);\r\n            const assignedAttrs = assign({}, attrs);\r\n            const tag = isString(props.tag) || isObject(props.tag)\r\n                ? props.tag\r\n                : getFragmentableTag();\r\n            return h(tag, assignedAttrs, children);\r\n        };\r\n    }\r\n};\n\nfunction isVNode(target) {\r\n    return isArray(target) && !isString(target[0]);\r\n}\r\nfunction renderFormatter(props, context, slotKeys, partFormatter) {\r\n    const { slots, attrs } = context;\r\n    return () => {\r\n        const options = { part: true };\r\n        let overrides = {};\r\n        if (props.locale) {\r\n            options.locale = props.locale;\r\n        }\r\n        if (isString(props.format)) {\r\n            options.key = props.format;\r\n        }\r\n        else if (isObject(props.format)) {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            if (isString(props.format.key)) {\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                options.key = props.format.key;\r\n            }\r\n            // Filter out number format options only\r\n            overrides = Object.keys(props.format).reduce((options, prop) => {\r\n                return slotKeys.includes(prop)\r\n                    ? assign({}, options, { [prop]: props.format[prop] }) // eslint-disable-line @typescript-eslint/no-explicit-any\r\n                    : options;\r\n            }, {});\r\n        }\r\n        const parts = partFormatter(...[props.value, options, overrides]);\r\n        let children = [options.key];\r\n        if (isArray(parts)) {\r\n            children = parts.map((part, index) => {\r\n                const slot = slots[part.type];\r\n                const node = slot\r\n                    ? slot({ [part.type]: part.value, index, parts })\r\n                    : [part.value];\r\n                if (isVNode(node)) {\r\n                    node[0].key = `${part.type}-${index}`;\r\n                }\r\n                return node;\r\n            });\r\n        }\r\n        else if (isString(parts)) {\r\n            children = [parts];\r\n        }\r\n        const assignedAttrs = assign({}, attrs);\r\n        const tag = isString(props.tag) || isObject(props.tag)\r\n            ? props.tag\r\n            : getFragmentableTag();\r\n        return h(tag, assignedAttrs, children);\r\n    };\r\n}\n\n/**\r\n * Number Format Component\r\n *\r\n * @remarks\r\n * See the following items for property about details\r\n *\r\n * @VueI18nSee [FormattableProps](component#formattableprops)\r\n * @VueI18nSee [BaseFormatProps](component#baseformatprops)\r\n * @VueI18nSee [Custom Formatting](../guide/essentials/number#custom-formatting)\r\n *\r\n * @VueI18nDanger\r\n * Not supported IE, due to no support `Intl.NumberFormat#formatToParts` in [IE](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/formatToParts)\r\n *\r\n * If you want to use it, you need to use [polyfill](https://github.com/formatjs/formatjs/tree/main/packages/intl-numberformat)\r\n *\r\n * @VueI18nComponent\r\n */\r\nconst NumberFormat =  /* defineComponent */ {\r\n    /* eslint-disable */\r\n    name: 'i18n-n',\r\n    props: assign({\r\n        value: {\r\n            type: Number,\r\n            required: true\r\n        },\r\n        format: {\r\n            type: [String, Object]\r\n        }\r\n    }, baseFormatProps),\r\n    /* eslint-enable */\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    setup(props, context) {\r\n        const i18n = props.i18n ||\r\n            useI18n({ useScope: 'parent', __useComponent: true });\r\n        return renderFormatter(props, context, NUMBER_FORMAT_OPTIONS_KEYS, (...args) => \r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        i18n[NumberPartsSymbol](...args));\r\n    }\r\n};\n\n/**\r\n * Datetime Format Component\r\n *\r\n * @remarks\r\n * See the following items for property about details\r\n *\r\n * @VueI18nSee [FormattableProps](component#formattableprops)\r\n * @VueI18nSee [BaseFormatProps](component#baseformatprops)\r\n * @VueI18nSee [Custom Formatting](../guide/essentials/datetime#custom-formatting)\r\n *\r\n * @VueI18nDanger\r\n * Not supported IE, due to no support `Intl.DateTimeFormat#formatToParts` in [IE](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts)\r\n *\r\n * If you want to use it, you need to use [polyfill](https://github.com/formatjs/formatjs/tree/main/packages/intl-datetimeformat)\r\n *\r\n * @VueI18nComponent\r\n */\r\nconst DatetimeFormat =  /*defineComponent */ {\r\n    /* eslint-disable */\r\n    name: 'i18n-d',\r\n    props: assign({\r\n        value: {\r\n            type: [Number, Date],\r\n            required: true\r\n        },\r\n        format: {\r\n            type: [String, Object]\r\n        }\r\n    }, baseFormatProps),\r\n    /* eslint-enable */\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    setup(props, context) {\r\n        const i18n = props.i18n ||\r\n            useI18n({ useScope: 'parent', __useComponent: true });\r\n        return renderFormatter(props, context, DATETIME_FORMAT_OPTIONS_KEYS, (...args) => \r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        i18n[DatetimePartsSymbol](...args));\r\n    }\r\n};\n\nfunction getComposer$2(i18n, instance) {\r\n    const i18nInternal = i18n;\r\n    if (i18n.mode === 'composition') {\r\n        return (i18nInternal.__getInstance(instance) || i18n.global);\r\n    }\r\n    else {\r\n        const vueI18n = i18nInternal.__getInstance(instance);\r\n        return vueI18n != null\r\n            ? vueI18n.__composer\r\n            : i18n.global.__composer;\r\n    }\r\n}\r\nfunction vTDirective(i18n) {\r\n    const _process = (binding) => {\r\n        const { instance, modifiers, value } = binding;\r\n        /* istanbul ignore if */\r\n        if (!instance || !instance.$) {\r\n            throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\r\n        }\r\n        const composer = getComposer$2(i18n, instance.$);\r\n        if ((process.env.NODE_ENV !== 'production') && modifiers.preserve) {\r\n            warn(getWarnMessage(I18nWarnCodes.NOT_SUPPORTED_PRESERVE));\r\n        }\r\n        const parsedValue = parseValue(value);\r\n        return [\r\n            Reflect.apply(composer.t, composer, [...makeParams(parsedValue)]),\r\n            composer\r\n        ];\r\n    };\r\n    const register = (el, binding) => {\r\n        const [textContent, composer] = _process(binding);\r\n        if (inBrowser && i18n.global === composer) {\r\n            // global scope only\r\n            el.__i18nWatcher = watch(composer.locale, () => {\r\n                binding.instance && binding.instance.$forceUpdate();\r\n            });\r\n        }\r\n        el.__composer = composer;\r\n        el.textContent = textContent;\r\n    };\r\n    const unregister = (el) => {\r\n        if (inBrowser && el.__i18nWatcher) {\r\n            el.__i18nWatcher();\r\n            el.__i18nWatcher = undefined;\r\n            delete el.__i18nWatcher;\r\n        }\r\n        if (el.__composer) {\r\n            el.__composer = undefined;\r\n            delete el.__composer;\r\n        }\r\n    };\r\n    const update = (el, { value }) => {\r\n        if (el.__composer) {\r\n            const composer = el.__composer;\r\n            const parsedValue = parseValue(value);\r\n            el.textContent = Reflect.apply(composer.t, composer, [\r\n                ...makeParams(parsedValue)\r\n            ]);\r\n        }\r\n    };\r\n    const getSSRProps = (binding) => {\r\n        const [textContent] = _process(binding);\r\n        return { textContent };\r\n    };\r\n    return {\r\n        created: register,\r\n        unmounted: unregister,\r\n        beforeUpdate: update,\r\n        getSSRProps\r\n    };\r\n}\r\nfunction parseValue(value) {\r\n    if (isString(value)) {\r\n        return { path: value };\r\n    }\r\n    else if (isPlainObject(value)) {\r\n        if (!('path' in value)) {\r\n            throw createI18nError(I18nErrorCodes.REQUIRED_VALUE, 'path');\r\n        }\r\n        return value;\r\n    }\r\n    else {\r\n        throw createI18nError(I18nErrorCodes.INVALID_VALUE);\r\n    }\r\n}\r\nfunction makeParams(value) {\r\n    const { path, locale, args, choice, plural } = value;\r\n    const options = {};\r\n    const named = args || {};\r\n    if (isString(locale)) {\r\n        options.locale = locale;\r\n    }\r\n    if (isNumber(choice)) {\r\n        options.plural = choice;\r\n    }\r\n    if (isNumber(plural)) {\r\n        options.plural = plural;\r\n    }\r\n    return [path, named, options];\r\n}\n\nfunction apply(app, i18n, ...options) {\r\n    const pluginOptions = isPlainObject(options[0])\r\n        ? options[0]\r\n        : {};\r\n    const useI18nComponentName = !!pluginOptions.useI18nComponentName;\r\n    const globalInstall = isBoolean(pluginOptions.globalInstall)\r\n        ? pluginOptions.globalInstall\r\n        : true;\r\n    if ((process.env.NODE_ENV !== 'production') && globalInstall && useI18nComponentName) {\r\n        warn(getWarnMessage(I18nWarnCodes.COMPONENT_NAME_LEGACY_COMPATIBLE, {\r\n            name: Translation.name\r\n        }));\r\n    }\r\n    if (globalInstall) {\r\n        // install components\r\n        app.component(!useI18nComponentName ? Translation.name : 'i18n', Translation);\r\n        app.component(NumberFormat.name, NumberFormat);\r\n        app.component(DatetimeFormat.name, DatetimeFormat);\r\n    }\r\n    // install directive\r\n    {\r\n        app.directive('t', vTDirective(i18n));\r\n    }\r\n}\n\nconst VUE_I18N_COMPONENT_TYPES = 'vue-i18n: composer properties';\r\nlet devtoolsApi;\r\nasync function enableDevTools(app, i18n) {\r\n    return new Promise((resolve, reject) => {\r\n        try {\r\n            setupDevtoolsPlugin({\r\n                id: \"vue-devtools-plugin-vue-i18n\" /* PLUGIN */,\r\n                label: VueDevToolsLabels[\"vue-devtools-plugin-vue-i18n\" /* PLUGIN */],\r\n                packageName: 'vue-i18n',\r\n                homepage: 'https://vue-i18n.intlify.dev',\r\n                logo: 'https://vue-i18n.intlify.dev/vue-i18n-devtools-logo.png',\r\n                componentStateTypes: [VUE_I18N_COMPONENT_TYPES],\r\n                app: app // eslint-disable-line @typescript-eslint/no-explicit-any\r\n            }, api => {\r\n                devtoolsApi = api;\r\n                api.on.visitComponentTree(({ componentInstance, treeNode }) => {\r\n                    updateComponentTreeTags(componentInstance, treeNode, i18n);\r\n                });\r\n                api.on.inspectComponent(({ componentInstance, instanceData }) => {\r\n                    if (componentInstance.vnode.el &&\r\n                        componentInstance.vnode.el.__VUE_I18N__ &&\r\n                        instanceData) {\r\n                        if (i18n.mode === 'legacy') {\r\n                            // ignore global scope on legacy mode\r\n                            if (componentInstance.vnode.el.__VUE_I18N__ !==\r\n                                i18n.global.__composer) {\r\n                                inspectComposer(instanceData, componentInstance.vnode.el.__VUE_I18N__);\r\n                            }\r\n                        }\r\n                        else {\r\n                            inspectComposer(instanceData, componentInstance.vnode.el.__VUE_I18N__);\r\n                        }\r\n                    }\r\n                });\r\n                api.addInspector({\r\n                    id: \"vue-i18n-resource-inspector\" /* CUSTOM_INSPECTOR */,\r\n                    label: VueDevToolsLabels[\"vue-i18n-resource-inspector\" /* CUSTOM_INSPECTOR */],\r\n                    icon: 'language',\r\n                    treeFilterPlaceholder: VueDevToolsPlaceholders[\"vue-i18n-resource-inspector\" /* CUSTOM_INSPECTOR */]\r\n                });\r\n                api.on.getInspectorTree(payload => {\r\n                    if (payload.app === app &&\r\n                        payload.inspectorId === \"vue-i18n-resource-inspector\" /* CUSTOM_INSPECTOR */) {\r\n                        registerScope(payload, i18n);\r\n                    }\r\n                });\r\n                const roots = new Map();\r\n                api.on.getInspectorState(async (payload) => {\r\n                    if (payload.app === app &&\r\n                        payload.inspectorId === \"vue-i18n-resource-inspector\" /* CUSTOM_INSPECTOR */) {\r\n                        api.unhighlightElement();\r\n                        inspectScope(payload, i18n);\r\n                        if (payload.nodeId === 'global') {\r\n                            if (!roots.has(payload.app)) {\r\n                                const [root] = await api.getComponentInstances(payload.app);\r\n                                roots.set(payload.app, root);\r\n                            }\r\n                            api.highlightElement(roots.get(payload.app));\r\n                        }\r\n                        else {\r\n                            const instance = getComponentInstance(payload.nodeId, i18n);\r\n                            instance && api.highlightElement(instance);\r\n                        }\r\n                    }\r\n                });\r\n                api.on.editInspectorState(payload => {\r\n                    if (payload.app === app &&\r\n                        payload.inspectorId === \"vue-i18n-resource-inspector\" /* CUSTOM_INSPECTOR */) {\r\n                        editScope(payload, i18n);\r\n                    }\r\n                });\r\n                api.addTimelineLayer({\r\n                    id: \"vue-i18n-timeline\" /* TIMELINE */,\r\n                    label: VueDevToolsLabels[\"vue-i18n-timeline\" /* TIMELINE */],\r\n                    color: VueDevToolsTimelineColors[\"vue-i18n-timeline\" /* TIMELINE */]\r\n                });\r\n                resolve(true);\r\n            });\r\n        }\r\n        catch (e) {\r\n            console.error(e);\r\n            reject(false);\r\n        }\r\n    });\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction getI18nScopeLable(instance) {\r\n    return (instance.type.name ||\r\n        instance.type.displayName ||\r\n        instance.type.__file ||\r\n        'Anonymous');\r\n}\r\nfunction updateComponentTreeTags(instance, // eslint-disable-line @typescript-eslint/no-explicit-any\r\ntreeNode, i18n) {\r\n    // prettier-ignore\r\n    const global = i18n.mode === 'composition'\r\n        ? i18n.global\r\n        : i18n.global.__composer;\r\n    if (instance && instance.vnode.el && instance.vnode.el.__VUE_I18N__) {\r\n        // add custom tags local scope only\r\n        if (instance.vnode.el.__VUE_I18N__ !== global) {\r\n            const tag = {\r\n                label: `i18n (${getI18nScopeLable(instance)} Scope)`,\r\n                textColor: 0x000000,\r\n                backgroundColor: 0xffcd19\r\n            };\r\n            treeNode.tags.push(tag);\r\n        }\r\n    }\r\n}\r\nfunction inspectComposer(instanceData, composer) {\r\n    const type = VUE_I18N_COMPONENT_TYPES;\r\n    instanceData.state.push({\r\n        type,\r\n        key: 'locale',\r\n        editable: true,\r\n        value: composer.locale.value\r\n    });\r\n    instanceData.state.push({\r\n        type,\r\n        key: 'availableLocales',\r\n        editable: false,\r\n        value: composer.availableLocales\r\n    });\r\n    instanceData.state.push({\r\n        type,\r\n        key: 'fallbackLocale',\r\n        editable: true,\r\n        value: composer.fallbackLocale.value\r\n    });\r\n    instanceData.state.push({\r\n        type,\r\n        key: 'inheritLocale',\r\n        editable: true,\r\n        value: composer.inheritLocale\r\n    });\r\n    instanceData.state.push({\r\n        type,\r\n        key: 'messages',\r\n        editable: false,\r\n        value: getLocaleMessageValue(composer.messages.value)\r\n    });\r\n    {\r\n        instanceData.state.push({\r\n            type,\r\n            key: 'datetimeFormats',\r\n            editable: false,\r\n            value: composer.datetimeFormats.value\r\n        });\r\n        instanceData.state.push({\r\n            type,\r\n            key: 'numberFormats',\r\n            editable: false,\r\n            value: composer.numberFormats.value\r\n        });\r\n    }\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction getLocaleMessageValue(messages) {\r\n    const value = {};\r\n    Object.keys(messages).forEach((key) => {\r\n        const v = messages[key];\r\n        if (isFunction(v) && 'source' in v) {\r\n            value[key] = getMessageFunctionDetails(v);\r\n        }\r\n        else if (isObject(v)) {\r\n            value[key] = getLocaleMessageValue(v);\r\n        }\r\n        else {\r\n            value[key] = v;\r\n        }\r\n    });\r\n    return value;\r\n}\r\nconst ESC = {\r\n    '<': '&lt;',\r\n    '>': '&gt;',\r\n    '\"': '&quot;',\r\n    '&': '&amp;'\r\n};\r\nfunction escape(s) {\r\n    return s.replace(/[<>\"&]/g, escapeChar);\r\n}\r\nfunction escapeChar(a) {\r\n    return ESC[a] || a;\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction getMessageFunctionDetails(func) {\r\n    const argString = func.source ? `(\"${escape(func.source)}\")` : `(?)`;\r\n    return {\r\n        _custom: {\r\n            type: 'function',\r\n            display: `<span>ƒ</span> ${argString}`\r\n        }\r\n    };\r\n}\r\nfunction registerScope(payload, i18n) {\r\n    payload.rootNodes.push({\r\n        id: 'global',\r\n        label: 'Global Scope'\r\n    });\r\n    // prettier-ignore\r\n    const global = i18n.mode === 'composition'\r\n        ? i18n.global\r\n        : i18n.global.__composer;\r\n    for (const [keyInstance, instance] of i18n.__instances) {\r\n        // prettier-ignore\r\n        const composer = i18n.mode === 'composition'\r\n            ? instance\r\n            : instance.__composer;\r\n        if (global === composer) {\r\n            continue;\r\n        }\r\n        payload.rootNodes.push({\r\n            id: composer.id.toString(),\r\n            label: `${getI18nScopeLable(keyInstance)} Scope`\r\n        });\r\n    }\r\n}\r\nfunction getComponentInstance(nodeId, i18n) {\r\n    let instance = null;\r\n    if (nodeId !== 'global') {\r\n        for (const [component, composer] of i18n.__instances.entries()) {\r\n            if (composer.id.toString() === nodeId) {\r\n                instance = component;\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    return instance;\r\n}\r\nfunction getComposer$1(nodeId, i18n) {\r\n    if (nodeId === 'global') {\r\n        return i18n.mode === 'composition'\r\n            ? i18n.global\r\n            : i18n.global.__composer;\r\n    }\r\n    else {\r\n        const instance = Array.from(i18n.__instances.values()).find(item => item.id.toString() === nodeId);\r\n        if (instance) {\r\n            return i18n.mode === 'composition'\r\n                ? instance\r\n                : instance.__composer;\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    }\r\n}\r\nfunction inspectScope(payload, i18n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n) {\r\n    const composer = getComposer$1(payload.nodeId, i18n);\r\n    if (composer) {\r\n        // TODO:\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        payload.state = makeScopeInspectState(composer);\r\n    }\r\n    return null;\r\n}\r\nfunction makeScopeInspectState(composer) {\r\n    const state = {};\r\n    const localeType = 'Locale related info';\r\n    const localeStates = [\r\n        {\r\n            type: localeType,\r\n            key: 'locale',\r\n            editable: true,\r\n            value: composer.locale.value\r\n        },\r\n        {\r\n            type: localeType,\r\n            key: 'fallbackLocale',\r\n            editable: true,\r\n            value: composer.fallbackLocale.value\r\n        },\r\n        {\r\n            type: localeType,\r\n            key: 'availableLocales',\r\n            editable: false,\r\n            value: composer.availableLocales\r\n        },\r\n        {\r\n            type: localeType,\r\n            key: 'inheritLocale',\r\n            editable: true,\r\n            value: composer.inheritLocale\r\n        }\r\n    ];\r\n    state[localeType] = localeStates;\r\n    const localeMessagesType = 'Locale messages info';\r\n    const localeMessagesStates = [\r\n        {\r\n            type: localeMessagesType,\r\n            key: 'messages',\r\n            editable: false,\r\n            value: getLocaleMessageValue(composer.messages.value)\r\n        }\r\n    ];\r\n    state[localeMessagesType] = localeMessagesStates;\r\n    {\r\n        const datetimeFormatsType = 'Datetime formats info';\r\n        const datetimeFormatsStates = [\r\n            {\r\n                type: datetimeFormatsType,\r\n                key: 'datetimeFormats',\r\n                editable: false,\r\n                value: composer.datetimeFormats.value\r\n            }\r\n        ];\r\n        state[datetimeFormatsType] = datetimeFormatsStates;\r\n        const numberFormatsType = 'Datetime formats info';\r\n        const numberFormatsStates = [\r\n            {\r\n                type: numberFormatsType,\r\n                key: 'numberFormats',\r\n                editable: false,\r\n                value: composer.numberFormats.value\r\n            }\r\n        ];\r\n        state[numberFormatsType] = numberFormatsStates;\r\n    }\r\n    return state;\r\n}\r\nfunction addTimelineEvent(event, payload) {\r\n    if (devtoolsApi) {\r\n        let groupId;\r\n        if (payload && 'groupId' in payload) {\r\n            groupId = payload.groupId;\r\n            delete payload.groupId;\r\n        }\r\n        devtoolsApi.addTimelineEvent({\r\n            layerId: \"vue-i18n-timeline\" /* TIMELINE */,\r\n            event: {\r\n                title: event,\r\n                groupId,\r\n                time: Date.now(),\r\n                meta: {},\r\n                data: payload || {},\r\n                logType: event === \"compile-error\" /* COMPILE_ERROR */\r\n                    ? 'error'\r\n                    : event === \"fallback\" /* FALBACK */ ||\r\n                        event === \"missing\" /* MISSING */\r\n                        ? 'warning'\r\n                        : 'default'\r\n            }\r\n        });\r\n    }\r\n}\r\nfunction editScope(payload, i18n) {\r\n    const composer = getComposer$1(payload.nodeId, i18n);\r\n    if (composer) {\r\n        const [field] = payload.path;\r\n        if (field === 'locale' && isString(payload.state.value)) {\r\n            composer.locale.value = payload.state.value;\r\n        }\r\n        else if (field === 'fallbackLocale' &&\r\n            (isString(payload.state.value) ||\r\n                isArray(payload.state.value) ||\r\n                isObject(payload.state.value))) {\r\n            composer.fallbackLocale.value = payload.state.value;\r\n        }\r\n        else if (field === 'inheritLocale' && isBoolean(payload.state.value)) {\r\n            composer.inheritLocale = payload.state.value;\r\n        }\r\n    }\r\n}\n\n/**\r\n * Supports compatibility for legacy vue-i18n APIs\r\n * This mixin is used when we use vue-i18n@v9.x or later\r\n */\r\nfunction defineMixin(vuei18n, composer, i18n) {\r\n    return {\r\n        beforeCreate() {\r\n            const instance = getCurrentInstance();\r\n            /* istanbul ignore if */\r\n            if (!instance) {\r\n                throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\r\n            }\r\n            const options = this.$options;\r\n            if (options.i18n) {\r\n                const optionsI18n = options.i18n;\r\n                if (options.__i18n) {\r\n                    optionsI18n.__i18n = options.__i18n;\r\n                }\r\n                optionsI18n.__root = composer;\r\n                if (this === this.$root) {\r\n                    this.$i18n = mergeToRoot(vuei18n, optionsI18n);\r\n                }\r\n                else {\r\n                    optionsI18n.__injectWithOption = true;\r\n                    this.$i18n = createVueI18n(optionsI18n);\r\n                }\r\n            }\r\n            else if (options.__i18n) {\r\n                if (this === this.$root) {\r\n                    this.$i18n = mergeToRoot(vuei18n, options);\r\n                }\r\n                else {\r\n                    this.$i18n = createVueI18n({\r\n                        __i18n: options.__i18n,\r\n                        __injectWithOption: true,\r\n                        __root: composer\r\n                    });\r\n                }\r\n            }\r\n            else {\r\n                // set global\r\n                this.$i18n = vuei18n;\r\n            }\r\n            if (options.__i18nGlobal) {\r\n                adjustI18nResources(composer, options, options);\r\n            }\r\n            vuei18n.__onComponentInstanceCreated(this.$i18n);\r\n            i18n.__setInstance(instance, this.$i18n);\r\n            // defines vue-i18n legacy APIs\r\n            this.$t = (...args) => this.$i18n.t(...args);\r\n            this.$rt = (...args) => this.$i18n.rt(...args);\r\n            this.$tc = (...args) => this.$i18n.tc(...args);\r\n            this.$te = (key, locale) => this.$i18n.te(key, locale);\r\n            this.$d = (...args) => this.$i18n.d(...args);\r\n            this.$n = (...args) => this.$i18n.n(...args);\r\n            this.$tm = (key) => this.$i18n.tm(key);\r\n        },\r\n        mounted() {\r\n            /* istanbul ignore if */\r\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\r\n                !false &&\r\n                this.$el &&\r\n                this.$i18n) {\r\n                this.$el.__VUE_I18N__ = this.$i18n.__composer;\r\n                const emitter = (this.__v_emitter =\r\n                    createEmitter());\r\n                const _vueI18n = this.$i18n;\r\n                _vueI18n.__enableEmitter && _vueI18n.__enableEmitter(emitter);\r\n                emitter.on('*', addTimelineEvent);\r\n            }\r\n        },\r\n        unmounted() {\r\n            const instance = getCurrentInstance();\r\n            /* istanbul ignore if */\r\n            if (!instance) {\r\n                throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\r\n            }\r\n            /* istanbul ignore if */\r\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\r\n                !false &&\r\n                this.$el &&\r\n                this.$el.__VUE_I18N__) {\r\n                if (this.__v_emitter) {\r\n                    this.__v_emitter.off('*', addTimelineEvent);\r\n                    delete this.__v_emitter;\r\n                }\r\n                if (this.$i18n) {\r\n                    const _vueI18n = this.$i18n;\r\n                    _vueI18n.__disableEmitter && _vueI18n.__disableEmitter();\r\n                    delete this.$el.__VUE_I18N__;\r\n                }\r\n            }\r\n            delete this.$t;\r\n            delete this.$rt;\r\n            delete this.$tc;\r\n            delete this.$te;\r\n            delete this.$d;\r\n            delete this.$n;\r\n            delete this.$tm;\r\n            i18n.__deleteInstance(instance);\r\n            delete this.$i18n;\r\n        }\r\n    };\r\n}\r\nfunction mergeToRoot(root, options) {\r\n    root.locale = options.locale || root.locale;\r\n    root.fallbackLocale = options.fallbackLocale || root.fallbackLocale;\r\n    root.missing = options.missing || root.missing;\r\n    root.silentTranslationWarn =\r\n        options.silentTranslationWarn || root.silentFallbackWarn;\r\n    root.silentFallbackWarn =\r\n        options.silentFallbackWarn || root.silentFallbackWarn;\r\n    root.formatFallbackMessages =\r\n        options.formatFallbackMessages || root.formatFallbackMessages;\r\n    root.postTranslation = options.postTranslation || root.postTranslation;\r\n    root.warnHtmlInMessage = options.warnHtmlInMessage || root.warnHtmlInMessage;\r\n    root.escapeParameterHtml =\r\n        options.escapeParameterHtml || root.escapeParameterHtml;\r\n    root.sync = options.sync || root.sync;\r\n    root.__composer[SetPluralRulesSymbol](options.pluralizationRules || root.pluralizationRules);\r\n    const messages = getLocaleMessages(root.locale, {\r\n        messages: options.messages,\r\n        __i18n: options.__i18n\r\n    });\r\n    Object.keys(messages).forEach(locale => root.mergeLocaleMessage(locale, messages[locale]));\r\n    if (options.datetimeFormats) {\r\n        Object.keys(options.datetimeFormats).forEach(locale => root.mergeDateTimeFormat(locale, options.datetimeFormats[locale]));\r\n    }\r\n    if (options.numberFormats) {\r\n        Object.keys(options.numberFormats).forEach(locale => root.mergeNumberFormat(locale, options.numberFormats[locale]));\r\n    }\r\n    return root;\r\n}\n\n/**\r\n * Injection key for {@link useI18n}\r\n *\r\n * @remarks\r\n * The global injection key for I18n instances with `useI18n`. this injection key is used in Web Components.\r\n * Specify the i18n instance created by {@link createI18n} together with `provide` function.\r\n *\r\n * @VueI18nGeneral\r\n */\r\nconst I18nInjectionKey = \r\n/* #__PURE__*/ makeSymbol('global-vue-i18n');\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\nfunction createI18n(options = {}, VueI18nLegacy) {\r\n    // prettier-ignore\r\n    const __legacyMode = __VUE_I18N_LEGACY_API__ && isBoolean(options.legacy)\r\n            ? options.legacy\r\n            : __VUE_I18N_LEGACY_API__;\r\n    // prettier-ignore\r\n    const __globalInjection = isBoolean(options.globalInjection)\r\n        ? options.globalInjection\r\n        : true;\r\n    // prettier-ignore\r\n    const __allowComposition = __VUE_I18N_LEGACY_API__ && __legacyMode\r\n            ? !!options.allowComposition\r\n            : true;\r\n    const __instances = new Map();\r\n    const [globalScope, __global] = createGlobal(options, __legacyMode);\r\n    const symbol = makeSymbol((process.env.NODE_ENV !== 'production') ? 'vue-i18n' : '');\r\n    function __getInstance(component) {\r\n        return __instances.get(component) || null;\r\n    }\r\n    function __setInstance(component, instance) {\r\n        __instances.set(component, instance);\r\n    }\r\n    function __deleteInstance(component) {\r\n        __instances.delete(component);\r\n    }\r\n    {\r\n        const i18n = {\r\n            // mode\r\n            get mode() {\r\n                return __VUE_I18N_LEGACY_API__ && __legacyMode\r\n                    ? 'legacy'\r\n                    : 'composition';\r\n            },\r\n            // allowComposition\r\n            get allowComposition() {\r\n                return __allowComposition;\r\n            },\r\n            // install plugin\r\n            async install(app, ...options) {\r\n                if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\r\n                    !false) {\r\n                    app.__VUE_I18N__ = i18n;\r\n                }\r\n                // setup global provider\r\n                app.__VUE_I18N_SYMBOL__ = symbol;\r\n                app.provide(app.__VUE_I18N_SYMBOL__, i18n);\r\n                // global method and properties injection for Composition API\r\n                if (!__legacyMode && __globalInjection) {\r\n                    injectGlobalFields(app, i18n.global);\r\n                }\r\n                // install built-in components and directive\r\n                if (__VUE_I18N_FULL_INSTALL__) {\r\n                    apply(app, i18n, ...options);\r\n                }\r\n                // setup mixin for Legacy API\r\n                if (__VUE_I18N_LEGACY_API__ && __legacyMode) {\r\n                    app.mixin(defineMixin(__global, __global.__composer, i18n));\r\n                }\r\n                // release global scope\r\n                const unmountApp = app.unmount;\r\n                app.unmount = () => {\r\n                    i18n.dispose();\r\n                    unmountApp();\r\n                };\r\n                // setup vue-devtools plugin\r\n                if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && !false) {\r\n                    const ret = await enableDevTools(app, i18n);\r\n                    if (!ret) {\r\n                        throw createI18nError(I18nErrorCodes.CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN);\r\n                    }\r\n                    const emitter = createEmitter();\r\n                    if (__legacyMode) {\r\n                        const _vueI18n = __global;\r\n                        _vueI18n.__enableEmitter && _vueI18n.__enableEmitter(emitter);\r\n                    }\r\n                    else {\r\n                        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                        const _composer = __global;\r\n                        _composer[EnableEmitter] && _composer[EnableEmitter](emitter);\r\n                    }\r\n                    emitter.on('*', addTimelineEvent);\r\n                }\r\n            },\r\n            // global accessor\r\n            get global() {\r\n                return __global;\r\n            },\r\n            dispose() {\r\n                globalScope.stop();\r\n            },\r\n            // @internal\r\n            __instances,\r\n            // @internal\r\n            __getInstance,\r\n            // @internal\r\n            __setInstance,\r\n            // @internal\r\n            __deleteInstance\r\n        };\r\n        return i18n;\r\n    }\r\n}\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nfunction useI18n(options = {}) {\r\n    const instance = getCurrentInstance();\r\n    if (instance == null) {\r\n        throw createI18nError(I18nErrorCodes.MUST_BE_CALL_SETUP_TOP);\r\n    }\r\n    if (!instance.isCE &&\r\n        instance.appContext.app != null &&\r\n        !instance.appContext.app.__VUE_I18N_SYMBOL__) {\r\n        throw createI18nError(I18nErrorCodes.NOT_INSLALLED);\r\n    }\r\n    const i18n = getI18nInstance(instance);\r\n    const global = getGlobalComposer(i18n);\r\n    const componentOptions = getComponentOptions(instance);\r\n    const scope = getScope(options, componentOptions);\r\n    if (__VUE_I18N_LEGACY_API__) {\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        if (i18n.mode === 'legacy' && !options.__useComponent) {\r\n            if (!i18n.allowComposition) {\r\n                throw createI18nError(I18nErrorCodes.NOT_AVAILABLE_IN_LEGACY_MODE);\r\n            }\r\n            return useI18nForLegacy(instance, scope, global, options);\r\n        }\r\n    }\r\n    if (scope === 'global') {\r\n        adjustI18nResources(global, options, componentOptions);\r\n        return global;\r\n    }\r\n    if (scope === 'parent') {\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        let composer = getComposer(i18n, instance, options.__useComponent);\r\n        if (composer == null) {\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                warn(getWarnMessage(I18nWarnCodes.NOT_FOUND_PARENT_SCOPE));\r\n            }\r\n            composer = global;\r\n        }\r\n        return composer;\r\n    }\r\n    const i18nInternal = i18n;\r\n    let composer = i18nInternal.__getInstance(instance);\r\n    if (composer == null) {\r\n        const composerOptions = assign({}, options);\r\n        if ('__i18n' in componentOptions) {\r\n            composerOptions.__i18n = componentOptions.__i18n;\r\n        }\r\n        if (global) {\r\n            composerOptions.__root = global;\r\n        }\r\n        composer = createComposer(composerOptions);\r\n        setupLifeCycle(i18nInternal, instance, composer);\r\n        i18nInternal.__setInstance(instance, composer);\r\n    }\r\n    return composer;\r\n}\r\n/**\r\n * Cast to VueI18n legacy compatible type\r\n *\r\n * @remarks\r\n * This API is provided only with [vue-i18n-bridge](https://vue-i18n.intlify.dev/guide/migration/ways.html#what-is-vue-i18n-bridge).\r\n *\r\n * The purpose of this function is to convert an {@link I18n} instance created with {@link createI18n | createI18n(legacy: true)} into a `vue-i18n@v8.x` compatible instance of `new VueI18n` in a TypeScript environment.\r\n *\r\n * @param i18n - An instance of {@link I18n}\r\n * @returns A i18n instance which is casted to {@link VueI18n} type\r\n *\r\n * @VueI18nTip\r\n * :new: provided by **vue-i18n-bridge only**\r\n *\r\n * @VueI18nGeneral\r\n */\r\nconst castToVueI18n =  (i18n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n) => {\r\n    if (!(__VUE_I18N_BRIDGE__ in i18n)) {\r\n        throw createI18nError(I18nErrorCodes.NOT_COMPATIBLE_LEGACY_VUE_I18N);\r\n    }\r\n    return i18n;\r\n};\r\nfunction createGlobal(options, legacyMode, VueI18nLegacy // eslint-disable-line @typescript-eslint/no-explicit-any\r\n) {\r\n    const scope = effectScope();\r\n    {\r\n        const obj = __VUE_I18N_LEGACY_API__ && legacyMode\r\n            ? scope.run(() => createVueI18n(options))\r\n            : scope.run(() => createComposer(options));\r\n        if (obj == null) {\r\n            throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\r\n        }\r\n        return [scope, obj];\r\n    }\r\n}\r\nfunction getI18nInstance(instance) {\r\n    {\r\n        const i18n = inject(!instance.isCE\r\n            ? instance.appContext.app.__VUE_I18N_SYMBOL__\r\n            : I18nInjectionKey);\r\n        /* istanbul ignore if */\r\n        if (!i18n) {\r\n            throw createI18nError(!instance.isCE\r\n                ? I18nErrorCodes.UNEXPECTED_ERROR\r\n                : I18nErrorCodes.NOT_INSLALLED_WITH_PROVIDE);\r\n        }\r\n        return i18n;\r\n    }\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction getScope(options, componentOptions) {\r\n    // prettier-ignore\r\n    return isEmptyObject(options)\r\n        ? ('__i18n' in componentOptions)\r\n            ? 'local'\r\n            : 'global'\r\n        : !options.useScope\r\n            ? 'local'\r\n            : options.useScope;\r\n}\r\nfunction getGlobalComposer(i18n) {\r\n    // prettier-ignore\r\n    return i18n.mode === 'composition'\r\n            ? i18n.global\r\n            : i18n.global.__composer\r\n        ;\r\n}\r\nfunction getComposer(i18n, target, useComponent = false) {\r\n    let composer = null;\r\n    const root = target.root;\r\n    let current = target.parent;\r\n    while (current != null) {\r\n        const i18nInternal = i18n;\r\n        if (i18n.mode === 'composition') {\r\n            composer = i18nInternal.__getInstance(current);\r\n        }\r\n        else {\r\n            if (__VUE_I18N_LEGACY_API__) {\r\n                const vueI18n = i18nInternal.__getInstance(current);\r\n                if (vueI18n != null) {\r\n                    composer = vueI18n\r\n                        .__composer;\r\n                    if (useComponent &&\r\n                        composer &&\r\n                        !composer[InejctWithOption] // eslint-disable-line @typescript-eslint/no-explicit-any\r\n                    ) {\r\n                        composer = null;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        if (composer != null) {\r\n            break;\r\n        }\r\n        if (root === current) {\r\n            break;\r\n        }\r\n        current = current.parent;\r\n    }\r\n    return composer;\r\n}\r\nfunction setupLifeCycle(i18n, target, composer) {\r\n    let emitter = null;\r\n    {\r\n        onMounted(() => {\r\n            // inject composer instance to DOM for intlify-devtools\r\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\r\n                !false &&\r\n                target.vnode.el) {\r\n                target.vnode.el.__VUE_I18N__ = composer;\r\n                emitter = createEmitter();\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                const _composer = composer;\r\n                _composer[EnableEmitter] && _composer[EnableEmitter](emitter);\r\n                emitter.on('*', addTimelineEvent);\r\n            }\r\n        }, target);\r\n        onUnmounted(() => {\r\n            // remove composer instance from DOM for intlify-devtools\r\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\r\n                !false &&\r\n                target.vnode.el &&\r\n                target.vnode.el.__VUE_I18N__) {\r\n                emitter && emitter.off('*', addTimelineEvent);\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                const _composer = composer;\r\n                _composer[DisableEmitter] && _composer[DisableEmitter]();\r\n                delete target.vnode.el.__VUE_I18N__;\r\n            }\r\n            i18n.__deleteInstance(target);\r\n        }, target);\r\n    }\r\n}\r\nfunction useI18nForLegacy(instance, scope, root, options = {} // eslint-disable-line @typescript-eslint/no-explicit-any\r\n) {\r\n    const isLocale = scope === 'local';\r\n    const _composer = shallowRef(null);\r\n    if (isLocale &&\r\n        instance.proxy &&\r\n        !(instance.proxy.$options.i18n || instance.proxy.$options.__i18n)) {\r\n        throw createI18nError(I18nErrorCodes.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);\r\n    }\r\n    const _inheritLocale = isBoolean(options.inheritLocale)\r\n        ? options.inheritLocale\r\n        : true;\r\n    const _locale = ref(\r\n    // prettier-ignore\r\n    isLocale && _inheritLocale\r\n        ? root.locale.value\r\n        : isString(options.locale)\r\n            ? options.locale\r\n            : DEFAULT_LOCALE);\r\n    const _fallbackLocale = ref(\r\n    // prettier-ignore\r\n    isLocale && _inheritLocale\r\n        ? root.fallbackLocale.value\r\n        : isString(options.fallbackLocale) ||\r\n            isArray(options.fallbackLocale) ||\r\n            isPlainObject(options.fallbackLocale) ||\r\n            options.fallbackLocale === false\r\n            ? options.fallbackLocale\r\n            : _locale.value);\r\n    const _messages = ref(getLocaleMessages(_locale.value, options));\r\n    // prettier-ignore\r\n    const _datetimeFormats = ref(isPlainObject(options.datetimeFormats)\r\n        ? options.datetimeFormats\r\n        : { [_locale.value]: {} });\r\n    // prettier-ignore\r\n    const _numberFormats = ref(isPlainObject(options.numberFormats)\r\n        ? options.numberFormats\r\n        : { [_locale.value]: {} });\r\n    // prettier-ignore\r\n    const _missingWarn = isLocale\r\n        ? root.missingWarn\r\n        : isBoolean(options.missingWarn) || isRegExp(options.missingWarn)\r\n            ? options.missingWarn\r\n            : true;\r\n    // prettier-ignore\r\n    const _fallbackWarn = isLocale\r\n        ? root.fallbackWarn\r\n        : isBoolean(options.fallbackWarn) || isRegExp(options.fallbackWarn)\r\n            ? options.fallbackWarn\r\n            : true;\r\n    // prettier-ignore\r\n    const _fallbackRoot = isLocale\r\n        ? root.fallbackRoot\r\n        : isBoolean(options.fallbackRoot)\r\n            ? options.fallbackRoot\r\n            : true;\r\n    // configure fall back to root\r\n    const _fallbackFormat = !!options.fallbackFormat;\r\n    // runtime missing\r\n    const _missing = isFunction(options.missing) ? options.missing : null;\r\n    // postTranslation handler\r\n    const _postTranslation = isFunction(options.postTranslation)\r\n        ? options.postTranslation\r\n        : null;\r\n    // prettier-ignore\r\n    const _warnHtmlMessage = isLocale\r\n        ? root.warnHtmlMessage\r\n        : isBoolean(options.warnHtmlMessage)\r\n            ? options.warnHtmlMessage\r\n            : true;\r\n    const _escapeParameter = !!options.escapeParameter;\r\n    // prettier-ignore\r\n    const _modifiers = isLocale\r\n        ? root.modifiers\r\n        : isPlainObject(options.modifiers)\r\n            ? options.modifiers\r\n            : {};\r\n    // pluralRules\r\n    const _pluralRules = options.pluralRules || (isLocale && root.pluralRules);\r\n    // track reactivity\r\n    function trackReactivityValues() {\r\n        return [\r\n            _locale.value,\r\n            _fallbackLocale.value,\r\n            _messages.value,\r\n            _datetimeFormats.value,\r\n            _numberFormats.value\r\n        ];\r\n    }\r\n    // locale\r\n    const locale = computed({\r\n        get: () => {\r\n            return _composer.value ? _composer.value.locale.value : _locale.value;\r\n        },\r\n        set: val => {\r\n            if (_composer.value) {\r\n                _composer.value.locale.value = val;\r\n            }\r\n            _locale.value = val;\r\n        }\r\n    });\r\n    // fallbackLocale\r\n    const fallbackLocale = computed({\r\n        get: () => {\r\n            return _composer.value\r\n                ? _composer.value.fallbackLocale.value\r\n                : _fallbackLocale.value;\r\n        },\r\n        set: val => {\r\n            if (_composer.value) {\r\n                _composer.value.fallbackLocale.value = val;\r\n            }\r\n            _fallbackLocale.value = val;\r\n        }\r\n    });\r\n    // messages\r\n    const messages = computed(() => {\r\n        if (_composer.value) {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            return _composer.value.messages.value;\r\n        }\r\n        else {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            return _messages.value;\r\n        }\r\n    });\r\n    const datetimeFormats = computed(() => _datetimeFormats.value);\r\n    const numberFormats = computed(() => _numberFormats.value);\r\n    function getPostTranslationHandler() {\r\n        return _composer.value\r\n            ? _composer.value.getPostTranslationHandler()\r\n            : _postTranslation;\r\n    }\r\n    function setPostTranslationHandler(handler) {\r\n        if (_composer.value) {\r\n            _composer.value.setPostTranslationHandler(handler);\r\n        }\r\n    }\r\n    function getMissingHandler() {\r\n        return _composer.value ? _composer.value.getMissingHandler() : _missing;\r\n    }\r\n    function setMissingHandler(handler) {\r\n        if (_composer.value) {\r\n            _composer.value.setMissingHandler(handler);\r\n        }\r\n    }\r\n    function warpWithDeps(fn) {\r\n        trackReactivityValues();\r\n        return fn();\r\n    }\r\n    function t(...args) {\r\n        return _composer.value\r\n            ? warpWithDeps(() => Reflect.apply(_composer.value.t, null, [...args]))\r\n            : warpWithDeps(() => '');\r\n    }\r\n    function rt(...args) {\r\n        return _composer.value\r\n            ? Reflect.apply(_composer.value.rt, null, [...args])\r\n            : '';\r\n    }\r\n    function d(...args) {\r\n        return _composer.value\r\n            ? warpWithDeps(() => Reflect.apply(_composer.value.d, null, [...args]))\r\n            : warpWithDeps(() => '');\r\n    }\r\n    function n(...args) {\r\n        return _composer.value\r\n            ? warpWithDeps(() => Reflect.apply(_composer.value.n, null, [...args]))\r\n            : warpWithDeps(() => '');\r\n    }\r\n    function tm(key) {\r\n        return _composer.value ? _composer.value.tm(key) : {};\r\n    }\r\n    function te(key, locale) {\r\n        return _composer.value ? _composer.value.te(key, locale) : false;\r\n    }\r\n    function getLocaleMessage(locale) {\r\n        return _composer.value ? _composer.value.getLocaleMessage(locale) : {};\r\n    }\r\n    function setLocaleMessage(locale, message) {\r\n        if (_composer.value) {\r\n            _composer.value.setLocaleMessage(locale, message);\r\n            _messages.value[locale] = message;\r\n        }\r\n    }\r\n    function mergeLocaleMessage(locale, message) {\r\n        if (_composer.value) {\r\n            _composer.value.mergeLocaleMessage(locale, message);\r\n        }\r\n    }\r\n    function getDateTimeFormat(locale) {\r\n        return _composer.value ? _composer.value.getDateTimeFormat(locale) : {};\r\n    }\r\n    function setDateTimeFormat(locale, format) {\r\n        if (_composer.value) {\r\n            _composer.value.setDateTimeFormat(locale, format);\r\n            _datetimeFormats.value[locale] = format;\r\n        }\r\n    }\r\n    function mergeDateTimeFormat(locale, format) {\r\n        if (_composer.value) {\r\n            _composer.value.mergeDateTimeFormat(locale, format);\r\n        }\r\n    }\r\n    function getNumberFormat(locale) {\r\n        return _composer.value ? _composer.value.getNumberFormat(locale) : {};\r\n    }\r\n    function setNumberFormat(locale, format) {\r\n        if (_composer.value) {\r\n            _composer.value.setNumberFormat(locale, format);\r\n            _numberFormats.value[locale] = format;\r\n        }\r\n    }\r\n    function mergeNumberFormat(locale, format) {\r\n        if (_composer.value) {\r\n            _composer.value.mergeNumberFormat(locale, format);\r\n        }\r\n    }\r\n    const wrapper = {\r\n        get id() {\r\n            return _composer.value ? _composer.value.id : -1;\r\n        },\r\n        locale,\r\n        fallbackLocale,\r\n        messages,\r\n        datetimeFormats,\r\n        numberFormats,\r\n        get inheritLocale() {\r\n            return _composer.value ? _composer.value.inheritLocale : _inheritLocale;\r\n        },\r\n        set inheritLocale(val) {\r\n            if (_composer.value) {\r\n                _composer.value.inheritLocale = val;\r\n            }\r\n        },\r\n        get availableLocales() {\r\n            return _composer.value\r\n                ? _composer.value.availableLocales\r\n                : Object.keys(_messages.value);\r\n        },\r\n        get modifiers() {\r\n            return (_composer.value ? _composer.value.modifiers : _modifiers);\r\n        },\r\n        get pluralRules() {\r\n            return (_composer.value ? _composer.value.pluralRules : _pluralRules);\r\n        },\r\n        get isGlobal() {\r\n            return _composer.value ? _composer.value.isGlobal : false;\r\n        },\r\n        get missingWarn() {\r\n            return _composer.value ? _composer.value.missingWarn : _missingWarn;\r\n        },\r\n        set missingWarn(val) {\r\n            if (_composer.value) {\r\n                _composer.value.missingWarn = val;\r\n            }\r\n        },\r\n        get fallbackWarn() {\r\n            return _composer.value ? _composer.value.fallbackWarn : _fallbackWarn;\r\n        },\r\n        set fallbackWarn(val) {\r\n            if (_composer.value) {\r\n                _composer.value.missingWarn = val;\r\n            }\r\n        },\r\n        get fallbackRoot() {\r\n            return _composer.value ? _composer.value.fallbackRoot : _fallbackRoot;\r\n        },\r\n        set fallbackRoot(val) {\r\n            if (_composer.value) {\r\n                _composer.value.fallbackRoot = val;\r\n            }\r\n        },\r\n        get fallbackFormat() {\r\n            return _composer.value ? _composer.value.fallbackFormat : _fallbackFormat;\r\n        },\r\n        set fallbackFormat(val) {\r\n            if (_composer.value) {\r\n                _composer.value.fallbackFormat = val;\r\n            }\r\n        },\r\n        get warnHtmlMessage() {\r\n            return _composer.value\r\n                ? _composer.value.warnHtmlMessage\r\n                : _warnHtmlMessage;\r\n        },\r\n        set warnHtmlMessage(val) {\r\n            if (_composer.value) {\r\n                _composer.value.warnHtmlMessage = val;\r\n            }\r\n        },\r\n        get escapeParameter() {\r\n            return _composer.value\r\n                ? _composer.value.escapeParameter\r\n                : _escapeParameter;\r\n        },\r\n        set escapeParameter(val) {\r\n            if (_composer.value) {\r\n                _composer.value.escapeParameter = val;\r\n            }\r\n        },\r\n        t,\r\n        getPostTranslationHandler,\r\n        setPostTranslationHandler,\r\n        getMissingHandler,\r\n        setMissingHandler,\r\n        rt,\r\n        d,\r\n        n,\r\n        tm,\r\n        te,\r\n        getLocaleMessage,\r\n        setLocaleMessage,\r\n        mergeLocaleMessage,\r\n        getDateTimeFormat,\r\n        setDateTimeFormat,\r\n        mergeDateTimeFormat,\r\n        getNumberFormat,\r\n        setNumberFormat,\r\n        mergeNumberFormat\r\n    };\r\n    function sync(composer) {\r\n        composer.locale.value = _locale.value;\r\n        composer.fallbackLocale.value = _fallbackLocale.value;\r\n        Object.keys(_messages.value).forEach(locale => {\r\n            composer.mergeLocaleMessage(locale, _messages.value[locale]);\r\n        });\r\n        Object.keys(_datetimeFormats.value).forEach(locale => {\r\n            composer.mergeDateTimeFormat(locale, _datetimeFormats.value[locale]);\r\n        });\r\n        Object.keys(_numberFormats.value).forEach(locale => {\r\n            composer.mergeNumberFormat(locale, _numberFormats.value[locale]);\r\n        });\r\n        composer.escapeParameter = _escapeParameter;\r\n        composer.fallbackFormat = _fallbackFormat;\r\n        composer.fallbackRoot = _fallbackRoot;\r\n        composer.fallbackWarn = _fallbackWarn;\r\n        composer.missingWarn = _missingWarn;\r\n        composer.warnHtmlMessage = _warnHtmlMessage;\r\n    }\r\n    onBeforeMount(() => {\r\n        if (instance.proxy == null || instance.proxy.$i18n == null) {\r\n            throw createI18nError(I18nErrorCodes.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);\r\n        }\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        const composer = (_composer.value = instance.proxy.$i18n\r\n            .__composer);\r\n        if (scope === 'global') {\r\n            _locale.value = composer.locale.value;\r\n            _fallbackLocale.value = composer.fallbackLocale.value;\r\n            _messages.value = composer.messages.value;\r\n            _datetimeFormats.value = composer.datetimeFormats.value;\r\n            _numberFormats.value = composer.numberFormats.value;\r\n        }\r\n        else if (isLocale) {\r\n            sync(composer);\r\n        }\r\n    });\r\n    return wrapper;\r\n}\r\nconst globalExportProps = [\r\n    'locale',\r\n    'fallbackLocale',\r\n    'availableLocales'\r\n];\r\nconst globalExportMethods = ['t', 'rt', 'd', 'n', 'tm'] ;\r\nfunction injectGlobalFields(app, composer) {\r\n    const i18n = Object.create(null);\r\n    globalExportProps.forEach(prop => {\r\n        const desc = Object.getOwnPropertyDescriptor(composer, prop);\r\n        if (!desc) {\r\n            throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\r\n        }\r\n        const wrap = isRef(desc.value) // check computed props\r\n            ? {\r\n                get() {\r\n                    return desc.value.value;\r\n                },\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                set(val) {\r\n                    desc.value.value = val;\r\n                }\r\n            }\r\n            : {\r\n                get() {\r\n                    return desc.get && desc.get();\r\n                }\r\n            };\r\n        Object.defineProperty(i18n, prop, wrap);\r\n    });\r\n    app.config.globalProperties.$i18n = i18n;\r\n    globalExportMethods.forEach(method => {\r\n        const desc = Object.getOwnPropertyDescriptor(composer, method);\r\n        if (!desc || !desc.value) {\r\n            throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\r\n        }\r\n        Object.defineProperty(app.config.globalProperties, `$${method}`, desc);\r\n    });\r\n}\n\n// register message resolver at vue-i18n\r\nregisterMessageResolver(resolveValue);\r\n// register fallback locale at vue-i18n\r\nregisterLocaleFallbacker(fallbackWithLocaleChain);\r\n{\r\n    initFeatureFlags();\r\n}\r\n// NOTE: experimental !!\r\nif ((process.env.NODE_ENV !== 'production') || __INTLIFY_PROD_DEVTOOLS__) {\r\n    const target = getGlobalThis();\r\n    target.__INTLIFY__ = true;\r\n    setDevToolsHook(target.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__);\r\n}\r\nif ((process.env.NODE_ENV !== 'production')) ;\n\nexport { DatetimeFormat, I18nInjectionKey, NumberFormat, Translation, VERSION, castToVueI18n, createI18n, useI18n, vTDirective };\n","/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n    \"use strict\";\n    if (typeof define === 'function' && define.amd) {\n        define(definition);\n    } else if (typeof module === 'object' && module.exports) {\n        module.exports = definition();\n    } else {\n        root.log = definition();\n    }\n}(this, function () {\n    \"use strict\";\n\n    // Slightly dubious tricks to cut down minimized file size\n    var noop = function() {};\n    var undefinedType = \"undefined\";\n    var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n        /Trident\\/|MSIE /.test(window.navigator.userAgent)\n    );\n\n    var logMethods = [\n        \"trace\",\n        \"debug\",\n        \"info\",\n        \"warn\",\n        \"error\"\n    ];\n\n    // Cross-browser bind equivalent that works at least back to IE6\n    function bindMethod(obj, methodName) {\n        var method = obj[methodName];\n        if (typeof method.bind === 'function') {\n            return method.bind(obj);\n        } else {\n            try {\n                return Function.prototype.bind.call(method, obj);\n            } catch (e) {\n                // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n                return function() {\n                    return Function.prototype.apply.apply(method, [obj, arguments]);\n                };\n            }\n        }\n    }\n\n    // Trace() doesn't print the message in IE, so for that case we need to wrap it\n    function traceForIE() {\n        if (console.log) {\n            if (console.log.apply) {\n                console.log.apply(console, arguments);\n            } else {\n                // In old IE, native console methods themselves don't have apply().\n                Function.prototype.apply.apply(console.log, [console, arguments]);\n            }\n        }\n        if (console.trace) console.trace();\n    }\n\n    // Build the best logging method possible for this env\n    // Wherever possible we want to bind, not wrap, to preserve stack traces\n    function realMethod(methodName) {\n        if (methodName === 'debug') {\n            methodName = 'log';\n        }\n\n        if (typeof console === undefinedType) {\n            return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n        } else if (methodName === 'trace' && isIE) {\n            return traceForIE;\n        } else if (console[methodName] !== undefined) {\n            return bindMethod(console, methodName);\n        } else if (console.log !== undefined) {\n            return bindMethod(console, 'log');\n        } else {\n            return noop;\n        }\n    }\n\n    // These private functions always need `this` to be set properly\n\n    function replaceLoggingMethods(level, loggerName) {\n        /*jshint validthis:true */\n        for (var i = 0; i < logMethods.length; i++) {\n            var methodName = logMethods[i];\n            this[methodName] = (i < level) ?\n                noop :\n                this.methodFactory(methodName, level, loggerName);\n        }\n\n        // Define log.log as an alias for log.debug\n        this.log = this.debug;\n    }\n\n    // In old IE versions, the console isn't present until you first open it.\n    // We build realMethod() replacements here that regenerate logging methods\n    function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n        return function () {\n            if (typeof console !== undefinedType) {\n                replaceLoggingMethods.call(this, level, loggerName);\n                this[methodName].apply(this, arguments);\n            }\n        };\n    }\n\n    // By default, we use closely bound real methods wherever possible, and\n    // otherwise we wait for a console to appear, and then try again.\n    function defaultMethodFactory(methodName, level, loggerName) {\n        /*jshint validthis:true */\n        return realMethod(methodName) ||\n               enableLoggingWhenConsoleArrives.apply(this, arguments);\n    }\n\n    function Logger(name, defaultLevel, factory) {\n      var self = this;\n      var currentLevel;\n      defaultLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n\n      var storageKey = \"loglevel\";\n      if (typeof name === \"string\") {\n        storageKey += \":\" + name;\n      } else if (typeof name === \"symbol\") {\n        storageKey = undefined;\n      }\n\n      function persistLevelIfPossible(levelNum) {\n          var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n          if (typeof window === undefinedType || !storageKey) return;\n\n          // Use localStorage if available\n          try {\n              window.localStorage[storageKey] = levelName;\n              return;\n          } catch (ignore) {}\n\n          // Use session cookie as fallback\n          try {\n              window.document.cookie =\n                encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n          } catch (ignore) {}\n      }\n\n      function getPersistedLevel() {\n          var storedLevel;\n\n          if (typeof window === undefinedType || !storageKey) return;\n\n          try {\n              storedLevel = window.localStorage[storageKey];\n          } catch (ignore) {}\n\n          // Fallback to cookies if local storage gives us nothing\n          if (typeof storedLevel === undefinedType) {\n              try {\n                  var cookie = window.document.cookie;\n                  var location = cookie.indexOf(\n                      encodeURIComponent(storageKey) + \"=\");\n                  if (location !== -1) {\n                      storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n                  }\n              } catch (ignore) {}\n          }\n\n          // If the stored level is not valid, treat it as if nothing was stored.\n          if (self.levels[storedLevel] === undefined) {\n              storedLevel = undefined;\n          }\n\n          return storedLevel;\n      }\n\n      function clearPersistedLevel() {\n          if (typeof window === undefinedType || !storageKey) return;\n\n          // Use localStorage if available\n          try {\n              window.localStorage.removeItem(storageKey);\n              return;\n          } catch (ignore) {}\n\n          // Use session cookie as fallback\n          try {\n              window.document.cookie =\n                encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n          } catch (ignore) {}\n      }\n\n      /*\n       *\n       * Public logger API - see https://github.com/pimterry/loglevel for details\n       *\n       */\n\n      self.name = name;\n\n      self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n          \"ERROR\": 4, \"SILENT\": 5};\n\n      self.methodFactory = factory || defaultMethodFactory;\n\n      self.getLevel = function () {\n          return currentLevel;\n      };\n\n      self.setLevel = function (level, persist) {\n          if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n              level = self.levels[level.toUpperCase()];\n          }\n          if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n              currentLevel = level;\n              if (persist !== false) {  // defaults to true\n                  persistLevelIfPossible(level);\n              }\n              replaceLoggingMethods.call(self, level, name);\n              if (typeof console === undefinedType && level < self.levels.SILENT) {\n                  return \"No console available for logging\";\n              }\n          } else {\n              throw \"log.setLevel() called with invalid level: \" + level;\n          }\n      };\n\n      self.setDefaultLevel = function (level) {\n          defaultLevel = level;\n          if (!getPersistedLevel()) {\n              self.setLevel(level, false);\n          }\n      };\n\n      self.resetLevel = function () {\n          self.setLevel(defaultLevel, false);\n          clearPersistedLevel();\n      };\n\n      self.enableAll = function(persist) {\n          self.setLevel(self.levels.TRACE, persist);\n      };\n\n      self.disableAll = function(persist) {\n          self.setLevel(self.levels.SILENT, persist);\n      };\n\n      // Initialize with the right level\n      var initialLevel = getPersistedLevel();\n      if (initialLevel == null) {\n          initialLevel = defaultLevel;\n      }\n      self.setLevel(initialLevel, false);\n    }\n\n    /*\n     *\n     * Top-level API\n     *\n     */\n\n    var defaultLogger = new Logger();\n\n    var _loggersByName = {};\n    defaultLogger.getLogger = function getLogger(name) {\n        if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n          throw new TypeError(\"You must supply a name when creating a logger.\");\n        }\n\n        var logger = _loggersByName[name];\n        if (!logger) {\n          logger = _loggersByName[name] = new Logger(\n            name, defaultLogger.getLevel(), defaultLogger.methodFactory);\n        }\n        return logger;\n    };\n\n    // Grab the current global log variable in case of overwrite\n    var _log = (typeof window !== undefinedType) ? window.log : undefined;\n    defaultLogger.noConflict = function() {\n        if (typeof window !== undefinedType &&\n               window.log === defaultLogger) {\n            window.log = _log;\n        }\n\n        return defaultLogger;\n    };\n\n    defaultLogger.getLoggers = function getLoggers() {\n        return _loggersByName;\n    };\n\n    // ES6 default export, for compatibility\n    defaultLogger['default'] = defaultLogger;\n\n    return defaultLogger;\n}));\n","class t{t;o=0;i=[];u(t){if(t.hadRecentInput)return;const e=this.i[0],n=this.i.at(-1);this.o&&e&&n&&t.startTime-n.startTime<1e3&&t.startTime-e.startTime<5e3?(this.o+=t.value,this.i.push(t)):(this.o=t.value,this.i=[t]),this.t?.(t)}}const e=()=>{const t=performance.getEntriesByType(\"navigation\")[0];if(t&&t.responseStart>0&&t.responseStart<performance.now())return t},n=t=>{if(\"loading\"===document.readyState)return\"loading\";{const n=e();if(n){if(t<n.domInteractive)return\"loading\";if(0===n.domContentLoadedEventStart||t<n.domContentLoadedEventStart)return\"dom-interactive\";if(0===n.domComplete||t<n.domComplete)return\"dom-content-loaded\"}}return\"complete\"},o=t=>{const e=t.nodeName;return 1===t.nodeType?e.toLowerCase():e.toUpperCase().replace(/^#/,\"\")},i=t=>{let e=\"\";try{for(;9!==t?.nodeType;){const n=t,i=n.id?\"#\"+n.id:[o(n),...Array.from(n.classList).sort()].join(\".\");if(e.length+i.length>99)return e||i;if(e=e?i+\">\"+e:i,n.id)break;t=n.parentNode}}catch{}return e},r=new WeakMap;function s(t,e){return r.get(t)||r.set(t,new e),r.get(t)}let a=-1;const c=()=>a,u=t=>{addEventListener(\"pageshow\",(e=>{e.persisted&&(a=e.timeStamp,t(e))}),!0)},d=(t,e,n,o)=>{let i,r;return s=>{e.value>=0&&(s||o)&&(r=e.value-(i??0),(r||void 0===i)&&(i=e.value,e.delta=r,e.rating=((t,e)=>t>e[1]?\"poor\":t>e[0]?\"needs-improvement\":\"good\")(e.value,n),t(e)))}},f=t=>{requestAnimationFrame((()=>requestAnimationFrame((()=>t()))))},l=()=>{const t=e();return t?.activationStart??0},h=(t,n=-1)=>{const o=e();let i=\"navigate\";c()>=0?i=\"back-forward-cache\":o&&(document.prerendering||l()>0?i=\"prerender\":document.wasDiscarded?i=\"restore\":o.type&&(i=o.type.replace(/_/g,\"-\")));return{name:t,value:n,rating:\"good\",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:i}},m=(t,e,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(t)){const o=new PerformanceObserver((t=>{Promise.resolve().then((()=>{e(t.getEntries())}))}));return o.observe({type:t,buffered:!0,...n}),o}}catch{}},g=t=>{let e=!1;return()=>{e||(t(),e=!0)}};let p=-1;const y=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,v=t=>{\"hidden\"===document.visibilityState&&p>-1&&(p=\"visibilitychange\"===t.type?t.timeStamp:0,M())},b=()=>{addEventListener(\"visibilitychange\",v,!0),addEventListener(\"prerenderingchange\",v,!0)},M=()=>{removeEventListener(\"visibilitychange\",v,!0),removeEventListener(\"prerenderingchange\",v,!0)},T=()=>{if(p<0){const t=l(),e=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").filter((e=>\"hidden\"===e.name&&e.startTime>t))[0]?.startTime;p=e??y(),b(),u((()=>{setTimeout((()=>{p=y(),b()}))}))}return{get firstHiddenTime(){return p}}},D=t=>{document.prerendering?addEventListener(\"prerenderingchange\",(()=>t()),!0):t()},E=[1800,3e3],P=(t,e={})=>{D((()=>{const n=T();let o,i=h(\"FCP\");const r=m(\"paint\",(t=>{for(const e of t)\"first-contentful-paint\"===e.name&&(r.disconnect(),e.startTime<n.firstHiddenTime&&(i.value=Math.max(e.startTime-l(),0),i.entries.push(e),o(!0)))}));r&&(o=d(t,i,E,e.reportAllChanges),u((n=>{i=h(\"FCP\"),o=d(t,i,E,e.reportAllChanges),f((()=>{i.value=performance.now()-n.timeStamp,o(!0)}))})))}))},L=[.1,.25],S=t=>t.find((t=>1===t.node?.nodeType))||t[0],_=(e,o={})=>{const r=s(o=Object.assign({},o),t),a=new WeakMap;r.t=t=>{if(t?.sources?.length){const e=S(t.sources);if(e){const t=(o.generateTarget??i)(e.node);a.set(e,t)}}};((e,n={})=>{P(g((()=>{let o,i=h(\"CLS\",0);const r=s(n,t),a=t=>{for(const e of t)r.u(e);r.o>i.value&&(i.value=r.o,i.entries=r.i,o())},c=m(\"layout-shift\",a);c&&(o=d(e,i,L,n.reportAllChanges),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(a(c.takeRecords()),o(!0))})),u((()=>{r.o=0,i=h(\"CLS\",0),o=d(e,i,L,n.reportAllChanges),f((()=>o()))})),setTimeout(o))})))})((t=>{const o=(t=>{let e={};if(t.entries.length){const o=t.entries.reduce(((t,e)=>t.value>e.value?t:e));if(o?.sources?.length){const t=S(o.sources);t&&(e={largestShiftTarget:a.get(t),largestShiftTime:o.startTime,largestShiftValue:o.value,largestShiftSource:t,largestShiftEntry:o,loadState:n(o.startTime)})}}return Object.assign(t,{attribution:e})})(t);e(o)}),o)},w=(t,o={})=>{P((o=>{const i=(t=>{let o={timeToFirstByte:0,firstByteToFCP:t.value,loadState:n(c())};if(t.entries.length){const i=e(),r=t.entries.at(-1);if(i){const e=i.activationStart||0,s=Math.max(0,i.responseStart-e);o={timeToFirstByte:s,firstByteToFCP:t.value-s,loadState:n(t.entries[0].startTime),navigationEntry:i,fcpEntry:r}}}return Object.assign(t,{attribution:o})})(o);t(i)}),o)};let k=0,F=1/0,B=0;const C=t=>{for(const e of t)e.interactionId&&(F=Math.min(F,e.interactionId),B=Math.max(B,e.interactionId),k=B?(B-F)/7+1:0)};let O;const j=()=>O?k:performance.interactionCount??0,I=()=>{\"interactionCount\"in performance||O||(O=m(\"event\",C,{type:\"event\",buffered:!0,durationThreshold:0}))};let A=0;class W{l=[];h=new Map;m;p;v(){A=j(),this.l.length=0,this.h.clear()}M(){const t=Math.min(this.l.length-1,Math.floor((j()-A)/50));return this.l[t]}u(t){if(this.m?.(t),!t.interactionId&&\"first-input\"!==t.entryType)return;const e=this.l.at(-1);let n=this.h.get(t.interactionId);if(n||this.l.length<10||t.duration>e.T){if(n?t.duration>n.T?(n.entries=[t],n.T=t.duration):t.duration===n.T&&t.startTime===n.entries[0].startTime&&n.entries.push(t):(n={id:t.interactionId,entries:[t],T:t.duration},this.h.set(n.id,n),this.l.push(n)),this.l.sort(((t,e)=>e.T-t.T)),this.l.length>10){const t=this.l.splice(10);for(const e of t)this.h.delete(e.id)}this.p?.(n)}}}const q=t=>{const e=globalThis.requestIdleCallback||setTimeout;\"hidden\"===document.visibilityState?t():(e(t=g(t)),document.addEventListener(\"visibilitychange\",t,{once:!0}))},x=[200,500],N=(t,e={})=>{const o=s(e=Object.assign({},e),W);let r=[],a=[],c=0;const f=new WeakMap,l=new WeakMap;let g=!1;const p=()=>{g||(q(y),g=!0)},y=()=>{const t=o.l.map((t=>f.get(t.entries[0]))),e=a.length-50;a=a.filter(((n,o)=>o>=e||t.includes(n)));const n=new Set;for(const t of a){const e=v(t.startTime,t.processingEnd);for(const t of e)n.add(t)}const i=r.length-1-50;r=r.filter(((t,e)=>t.startTime>c&&e>i||n.has(t))),g=!1};o.m=t=>{const e=t.startTime+t.duration;let n;c=Math.max(c,t.processingEnd);for(let o=a.length-1;o>=0;o--){const i=a[o];if(Math.abs(e-i.renderTime)<=8){n=i,n.startTime=Math.min(t.startTime,n.startTime),n.processingStart=Math.min(t.processingStart,n.processingStart),n.processingEnd=Math.max(t.processingEnd,n.processingEnd),n.entries.push(t);break}}n||(n={startTime:t.startTime,processingStart:t.processingStart,processingEnd:t.processingEnd,renderTime:e,entries:[t]},a.push(n)),(t.interactionId||\"first-input\"===t.entryType)&&f.set(t,n),p()},o.p=t=>{if(!l.get(t)){const n=(e.generateTarget??i)(t.entries[0].target);l.set(t,n)}};const v=(t,e)=>{const n=[];for(const o of r)if(!(o.startTime+o.duration<t)){if(o.startTime>e)break;n.push(o)}return n},b=t=>{const e=t.entries[0],i=f.get(e),r=e.processingStart,s=Math.max(e.startTime+e.duration,r),a=Math.min(i.processingEnd,s),c=i.entries.sort(((t,e)=>t.processingStart-e.processingStart)),u=v(e.startTime,a),d=o.h.get(e.interactionId),h={interactionTarget:l.get(d),interactionType:e.name.startsWith(\"key\")?\"keyboard\":\"pointer\",interactionTime:e.startTime,nextPaintTime:s,processedEventEntries:c,longAnimationFrameEntries:u,inputDelay:r-e.startTime,processingDuration:a-r,presentationDelay:s-a,loadState:n(e.startTime),longestScript:void 0,totalScriptDuration:void 0,totalStyleAndLayoutDuration:void 0,totalPaintDuration:void 0,totalUnattributedDuration:void 0};(t=>{if(!t.longAnimationFrameEntries?.length)return;const e=t.interactionTime,n=t.inputDelay,o=t.processingDuration;let i,r,s=0,a=0,c=0,u=0;for(const c of t.longAnimationFrameEntries){a=a+c.startTime+c.duration-c.styleAndLayoutStart;for(const t of c.scripts){const c=t.startTime+t.duration;if(c<e)continue;const d=c-Math.max(e,t.startTime),f=t.duration?d/t.duration*t.forcedStyleAndLayoutDuration:0;s+=d-f,a+=f,d>u&&(r=t.startTime<e+n?\"input-delay\":t.startTime>=e+n+o?\"presentation-delay\":\"processing-duration\",i=t,u=d)}}const d=t.longAnimationFrameEntries.at(-1),f=d?d.startTime+d.duration:0;f>=e+n+o&&(c=t.nextPaintTime-f),i&&r&&(t.longestScript={entry:i,subpart:r,intersectingDuration:u}),t.totalScriptDuration=s,t.totalStyleAndLayoutDuration=a,t.totalPaintDuration=c,t.totalUnattributedDuration=t.nextPaintTime-e-s-a-c})(h);return Object.assign(t,{attribution:h})};m(\"long-animation-frame\",(t=>{r=r.concat(t),p()})),((t,e={})=>{globalThis.PerformanceEventTiming&&\"interactionId\"in PerformanceEventTiming.prototype&&D((()=>{I();let n,o=h(\"INP\");const i=s(e,W),r=t=>{q((()=>{for(const e of t)i.u(e);const e=i.M();e&&e.T!==o.value&&(o.value=e.T,o.entries=e.entries,n())}))},a=m(\"event\",r,{durationThreshold:e.durationThreshold??40});n=d(t,o,x,e.reportAllChanges),a&&(a.observe({type:\"first-input\",buffered:!0}),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(r(a.takeRecords()),n(!0))})),u((()=>{i.v(),o=h(\"INP\"),n=d(t,o,x,e.reportAllChanges)})))}))})((e=>{const n=b(e);t(n)}),e)};class R{m;u(t){this.m?.(t)}}const U=[2500,4e3],V=(t,n={})=>{const o=s(n=Object.assign({},n),R),r=new WeakMap;o.m=t=>{if(t.element){const e=(n.generateTarget??i)(t.element);r.set(t,e)}};((t,e={})=>{D((()=>{const n=T();let o,i=h(\"LCP\");const r=s(e,R),a=t=>{e.reportAllChanges||(t=t.slice(-1));for(const e of t)r.u(e),e.startTime<n.firstHiddenTime&&(i.value=Math.max(e.startTime-l(),0),i.entries=[e],o())},c=m(\"largest-contentful-paint\",a);if(c){o=d(t,i,U,e.reportAllChanges);const n=g((()=>{a(c.takeRecords()),c.disconnect(),o(!0)}));for(const t of[\"keydown\",\"click\",\"visibilitychange\"])addEventListener(t,(()=>q(n)),{capture:!0,once:!0});u((n=>{i=h(\"LCP\"),o=d(t,i,U,e.reportAllChanges),f((()=>{i.value=performance.now()-n.timeStamp,o(!0)}))}))}}))})((n=>{const o=(t=>{let n={timeToFirstByte:0,resourceLoadDelay:0,resourceLoadDuration:0,elementRenderDelay:t.value};if(t.entries.length){const o=e();if(o){const e=o.activationStart||0,i=t.entries.at(-1),s=i.url&&performance.getEntriesByType(\"resource\").filter((t=>t.name===i.url))[0],a=Math.max(0,o.responseStart-e),c=Math.max(a,s?(s.requestStart||s.startTime)-e:0),u=Math.min(t.value,Math.max(c,s?s.responseEnd-e:0));n={target:r.get(i),timeToFirstByte:a,resourceLoadDelay:c-a,resourceLoadDuration:u-c,elementRenderDelay:t.value-u,navigationEntry:o,lcpEntry:i},i.url&&(n.url=i.url),s&&(n.lcpResourceEntry=s)}}return Object.assign(t,{attribution:n})})(n);t(o)}),n)},$=[800,1800],H=t=>{document.prerendering?D((()=>H(t))):\"complete\"!==document.readyState?addEventListener(\"load\",(()=>H(t)),!0):setTimeout(t)},z=(t,n={})=>{((t,n={})=>{let o=h(\"TTFB\"),i=d(t,o,$,n.reportAllChanges);H((()=>{const r=e();r&&(o.value=Math.max(r.responseStart-l(),0),o.entries=[r],i(!0),u((()=>{o=h(\"TTFB\",0),i=d(t,o,$,n.reportAllChanges),i(!0)})))}))})((e=>{const n=(t=>{let e={waitingDuration:0,cacheDuration:0,dnsDuration:0,connectionDuration:0,requestDuration:0};if(t.entries.length){const n=t.entries[0],o=n.activationStart||0,i=Math.max((n.workerStart||n.fetchStart)-o,0),r=Math.max(n.domainLookupStart-o,0),s=Math.max(n.connectStart-o,0),a=Math.max(n.connectEnd-o,0);e={waitingDuration:i,cacheDuration:r-i,dnsDuration:s-r,connectionDuration:a-s,requestDuration:t.value-a,navigationEntry:n}}return Object.assign(t,{attribution:e})})(e);t(n)}),n)};export{L as CLSThresholds,E as FCPThresholds,x as INPThresholds,U as LCPThresholds,$ as TTFBThresholds,_ as onCLS,w as onFCP,N as onINP,V as onLCP,z as onTTFB};\n","import * as Vue from 'vue'\n\nvar isVue2 = false\nvar isVue3 = true\nvar Vue2 = undefined\n\nfunction install() {}\n\nexport function set(target, key, val) {\n  if (Array.isArray(target)) {\n    target.length = Math.max(target.length, key)\n    target.splice(key, 1, val)\n    return val\n  }\n  target[key] = val\n  return val\n}\n\nexport function del(target, key) {\n  if (Array.isArray(target)) {\n    target.splice(key, 1)\n    return\n  }\n  delete target[key]\n}\n\nexport * from 'vue'\nexport {\n  Vue,\n  Vue2,\n  isVue2,\n  isVue3,\n  install,\n}\n","/*!\n  * pinia v2.0.33\n  * (c) 2023 Eduardo San Martin Morote\n  * @license MIT\n  */\nimport { getCurrentInstance, inject, toRaw, watch, unref, markRaw, effectScope, ref, isVue2, isRef, isReactive, set, getCurrentScope, onScopeDispose, reactive, toRef, del, nextTick, computed, toRefs } from 'vue-demi';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\n/**\r\n * setActivePinia must be called to handle SSR at the top of functions like\r\n * `fetch`, `setup`, `serverPrefetch` and others\r\n */\r\nlet activePinia;\r\n/**\r\n * Sets or unsets the active pinia. Used in SSR and internally when calling\r\n * actions and getters\r\n *\r\n * @param pinia - Pinia instance\r\n */\r\nconst setActivePinia = (pinia) => (activePinia = pinia);\r\n/**\r\n * Get the currently active pinia if there is any.\r\n */\r\nconst getActivePinia = () => (getCurrentInstance() && inject(piniaSymbol)) || activePinia;\r\nconst piniaSymbol = ((process.env.NODE_ENV !== 'production') ? Symbol('pinia') : /* istanbul ignore next */ Symbol());\n\nfunction isPlainObject(\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\no) {\r\n    return (o &&\r\n        typeof o === 'object' &&\r\n        Object.prototype.toString.call(o) === '[object Object]' &&\r\n        typeof o.toJSON !== 'function');\r\n}\r\n// type DeepReadonly<T> = { readonly [P in keyof T]: DeepReadonly<T[P]> }\r\n// TODO: can we change these to numbers?\r\n/**\r\n * Possible types for SubscriptionCallback\r\n */\r\nvar MutationType;\r\n(function (MutationType) {\r\n    /**\r\n     * Direct mutation of the state:\r\n     *\r\n     * - `store.name = 'new name'`\r\n     * - `store.$state.name = 'new name'`\r\n     * - `store.list.push('new item')`\r\n     */\r\n    MutationType[\"direct\"] = \"direct\";\r\n    /**\r\n     * Mutated the state with `$patch` and an object\r\n     *\r\n     * - `store.$patch({ name: 'newName' })`\r\n     */\r\n    MutationType[\"patchObject\"] = \"patch object\";\r\n    /**\r\n     * Mutated the state with `$patch` and a function\r\n     *\r\n     * - `store.$patch(state => state.name = 'newName')`\r\n     */\r\n    MutationType[\"patchFunction\"] = \"patch function\";\r\n    // maybe reset? for $state = {} and $reset\r\n})(MutationType || (MutationType = {}));\n\nconst IS_CLIENT = typeof window !== 'undefined';\r\n/**\r\n * Should we add the devtools plugins.\r\n * - only if dev mode or forced through the prod devtools flag\r\n * - not in test\r\n * - only if window exists (could change in the future)\r\n */\r\nconst USE_DEVTOOLS = ((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test') && IS_CLIENT;\n\n/*\r\n * FileSaver.js A saveAs() FileSaver implementation.\r\n *\r\n * Originally by Eli Grey, adapted as an ESM module by Eduardo San Martin\r\n * Morote.\r\n *\r\n * License : MIT\r\n */\r\n// The one and only way of getting global scope in all environments\r\n// https://stackoverflow.com/q/3277182/1008999\r\nconst _global = /*#__PURE__*/ (() => typeof window === 'object' && window.window === window\r\n    ? window\r\n    : typeof self === 'object' && self.self === self\r\n        ? self\r\n        : typeof global === 'object' && global.global === global\r\n            ? global\r\n            : typeof globalThis === 'object'\r\n                ? globalThis\r\n                : { HTMLElement: null })();\r\nfunction bom(blob, { autoBom = false } = {}) {\r\n    // prepend BOM for UTF-8 XML and text/* types (including HTML)\r\n    // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\r\n    if (autoBom &&\r\n        /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\r\n        return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\r\n    }\r\n    return blob;\r\n}\r\nfunction download(url, name, opts) {\r\n    const xhr = new XMLHttpRequest();\r\n    xhr.open('GET', url);\r\n    xhr.responseType = 'blob';\r\n    xhr.onload = function () {\r\n        saveAs(xhr.response, name, opts);\r\n    };\r\n    xhr.onerror = function () {\r\n        console.error('could not download file');\r\n    };\r\n    xhr.send();\r\n}\r\nfunction corsEnabled(url) {\r\n    const xhr = new XMLHttpRequest();\r\n    // use sync to avoid popup blocker\r\n    xhr.open('HEAD', url, false);\r\n    try {\r\n        xhr.send();\r\n    }\r\n    catch (e) { }\r\n    return xhr.status >= 200 && xhr.status <= 299;\r\n}\r\n// `a.click()` doesn't work for all browsers (#465)\r\nfunction click(node) {\r\n    try {\r\n        node.dispatchEvent(new MouseEvent('click'));\r\n    }\r\n    catch (e) {\r\n        const evt = document.createEvent('MouseEvents');\r\n        evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);\r\n        node.dispatchEvent(evt);\r\n    }\r\n}\r\nconst _navigator = \r\n typeof navigator === 'object' ? navigator : { userAgent: '' };\r\n// Detect WebView inside a native macOS app by ruling out all browsers\r\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\r\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\r\nconst isMacOSWebView = /*#__PURE__*/ (() => /Macintosh/.test(_navigator.userAgent) &&\r\n    /AppleWebKit/.test(_navigator.userAgent) &&\r\n    !/Safari/.test(_navigator.userAgent))();\r\nconst saveAs = !IS_CLIENT\r\n    ? () => { } // noop\r\n    : // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program\r\n        typeof HTMLAnchorElement !== 'undefined' &&\r\n            'download' in HTMLAnchorElement.prototype &&\r\n            !isMacOSWebView\r\n            ? downloadSaveAs\r\n            : // Use msSaveOrOpenBlob as a second approach\r\n                'msSaveOrOpenBlob' in _navigator\r\n                    ? msSaveAs\r\n                    : // Fallback to using FileReader and a popup\r\n                        fileSaverSaveAs;\r\nfunction downloadSaveAs(blob, name = 'download', opts) {\r\n    const a = document.createElement('a');\r\n    a.download = name;\r\n    a.rel = 'noopener'; // tabnabbing\r\n    // TODO: detect chrome extensions & packaged apps\r\n    // a.target = '_blank'\r\n    if (typeof blob === 'string') {\r\n        // Support regular links\r\n        a.href = blob;\r\n        if (a.origin !== location.origin) {\r\n            if (corsEnabled(a.href)) {\r\n                download(blob, name, opts);\r\n            }\r\n            else {\r\n                a.target = '_blank';\r\n                click(a);\r\n            }\r\n        }\r\n        else {\r\n            click(a);\r\n        }\r\n    }\r\n    else {\r\n        // Support blobs\r\n        a.href = URL.createObjectURL(blob);\r\n        setTimeout(function () {\r\n            URL.revokeObjectURL(a.href);\r\n        }, 4e4); // 40s\r\n        setTimeout(function () {\r\n            click(a);\r\n        }, 0);\r\n    }\r\n}\r\nfunction msSaveAs(blob, name = 'download', opts) {\r\n    if (typeof blob === 'string') {\r\n        if (corsEnabled(blob)) {\r\n            download(blob, name, opts);\r\n        }\r\n        else {\r\n            const a = document.createElement('a');\r\n            a.href = blob;\r\n            a.target = '_blank';\r\n            setTimeout(function () {\r\n                click(a);\r\n            });\r\n        }\r\n    }\r\n    else {\r\n        // @ts-ignore: works on windows\r\n        navigator.msSaveOrOpenBlob(bom(blob, opts), name);\r\n    }\r\n}\r\nfunction fileSaverSaveAs(blob, name, opts, popup) {\r\n    // Open a popup immediately do go around popup blocker\r\n    // Mostly only available on user interaction and the fileReader is async so...\r\n    popup = popup || open('', '_blank');\r\n    if (popup) {\r\n        popup.document.title = popup.document.body.innerText = 'downloading...';\r\n    }\r\n    if (typeof blob === 'string')\r\n        return download(blob, name, opts);\r\n    const force = blob.type === 'application/octet-stream';\r\n    const isSafari = /constructor/i.test(String(_global.HTMLElement)) || 'safari' in _global;\r\n    const isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\r\n    if ((isChromeIOS || (force && isSafari) || isMacOSWebView) &&\r\n        typeof FileReader !== 'undefined') {\r\n        // Safari doesn't allow downloading of blob URLs\r\n        const reader = new FileReader();\r\n        reader.onloadend = function () {\r\n            let url = reader.result;\r\n            if (typeof url !== 'string') {\r\n                popup = null;\r\n                throw new Error('Wrong reader.result type');\r\n            }\r\n            url = isChromeIOS\r\n                ? url\r\n                : url.replace(/^data:[^;]*;/, 'data:attachment/file;');\r\n            if (popup) {\r\n                popup.location.href = url;\r\n            }\r\n            else {\r\n                location.assign(url);\r\n            }\r\n            popup = null; // reverse-tabnabbing #460\r\n        };\r\n        reader.readAsDataURL(blob);\r\n    }\r\n    else {\r\n        const url = URL.createObjectURL(blob);\r\n        if (popup)\r\n            popup.location.assign(url);\r\n        else\r\n            location.href = url;\r\n        popup = null; // reverse-tabnabbing #460\r\n        setTimeout(function () {\r\n            URL.revokeObjectURL(url);\r\n        }, 4e4); // 40s\r\n    }\r\n}\n\n/**\r\n * Shows a toast or console.log\r\n *\r\n * @param message - message to log\r\n * @param type - different color of the tooltip\r\n */\r\nfunction toastMessage(message, type) {\r\n    const piniaMessage = '🍍 ' + message;\r\n    if (typeof __VUE_DEVTOOLS_TOAST__ === 'function') {\r\n        __VUE_DEVTOOLS_TOAST__(piniaMessage, type);\r\n    }\r\n    else if (type === 'error') {\r\n        console.error(piniaMessage);\r\n    }\r\n    else if (type === 'warn') {\r\n        console.warn(piniaMessage);\r\n    }\r\n    else {\r\n        console.log(piniaMessage);\r\n    }\r\n}\r\nfunction isPinia(o) {\r\n    return '_a' in o && 'install' in o;\r\n}\n\nfunction checkClipboardAccess() {\r\n    if (!('clipboard' in navigator)) {\r\n        toastMessage(`Your browser doesn't support the Clipboard API`, 'error');\r\n        return true;\r\n    }\r\n}\r\nfunction checkNotFocusedError(error) {\r\n    if (error instanceof Error &&\r\n        error.message.toLowerCase().includes('document is not focused')) {\r\n        toastMessage('You need to activate the \"Emulate a focused page\" setting in the \"Rendering\" panel of devtools.', 'warn');\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\nasync function actionGlobalCopyState(pinia) {\r\n    if (checkClipboardAccess())\r\n        return;\r\n    try {\r\n        await navigator.clipboard.writeText(JSON.stringify(pinia.state.value));\r\n        toastMessage('Global state copied to clipboard.');\r\n    }\r\n    catch (error) {\r\n        if (checkNotFocusedError(error))\r\n            return;\r\n        toastMessage(`Failed to serialize the state. Check the console for more details.`, 'error');\r\n        console.error(error);\r\n    }\r\n}\r\nasync function actionGlobalPasteState(pinia) {\r\n    if (checkClipboardAccess())\r\n        return;\r\n    try {\r\n        pinia.state.value = JSON.parse(await navigator.clipboard.readText());\r\n        toastMessage('Global state pasted from clipboard.');\r\n    }\r\n    catch (error) {\r\n        if (checkNotFocusedError(error))\r\n            return;\r\n        toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, 'error');\r\n        console.error(error);\r\n    }\r\n}\r\nasync function actionGlobalSaveState(pinia) {\r\n    try {\r\n        saveAs(new Blob([JSON.stringify(pinia.state.value)], {\r\n            type: 'text/plain;charset=utf-8',\r\n        }), 'pinia-state.json');\r\n    }\r\n    catch (error) {\r\n        toastMessage(`Failed to export the state as JSON. Check the console for more details.`, 'error');\r\n        console.error(error);\r\n    }\r\n}\r\nlet fileInput;\r\nfunction getFileOpener() {\r\n    if (!fileInput) {\r\n        fileInput = document.createElement('input');\r\n        fileInput.type = 'file';\r\n        fileInput.accept = '.json';\r\n    }\r\n    function openFile() {\r\n        return new Promise((resolve, reject) => {\r\n            fileInput.onchange = async () => {\r\n                const files = fileInput.files;\r\n                if (!files)\r\n                    return resolve(null);\r\n                const file = files.item(0);\r\n                if (!file)\r\n                    return resolve(null);\r\n                return resolve({ text: await file.text(), file });\r\n            };\r\n            // @ts-ignore: TODO: changed from 4.3 to 4.4\r\n            fileInput.oncancel = () => resolve(null);\r\n            fileInput.onerror = reject;\r\n            fileInput.click();\r\n        });\r\n    }\r\n    return openFile;\r\n}\r\nasync function actionGlobalOpenStateFile(pinia) {\r\n    try {\r\n        const open = await getFileOpener();\r\n        const result = await open();\r\n        if (!result)\r\n            return;\r\n        const { text, file } = result;\r\n        pinia.state.value = JSON.parse(text);\r\n        toastMessage(`Global state imported from \"${file.name}\".`);\r\n    }\r\n    catch (error) {\r\n        toastMessage(`Failed to export the state as JSON. Check the console for more details.`, 'error');\r\n        console.error(error);\r\n    }\r\n}\n\nfunction formatDisplay(display) {\r\n    return {\r\n        _custom: {\r\n            display,\r\n        },\r\n    };\r\n}\r\nconst PINIA_ROOT_LABEL = '🍍 Pinia (root)';\r\nconst PINIA_ROOT_ID = '_root';\r\nfunction formatStoreForInspectorTree(store) {\r\n    return isPinia(store)\r\n        ? {\r\n            id: PINIA_ROOT_ID,\r\n            label: PINIA_ROOT_LABEL,\r\n        }\r\n        : {\r\n            id: store.$id,\r\n            label: store.$id,\r\n        };\r\n}\r\nfunction formatStoreForInspectorState(store) {\r\n    if (isPinia(store)) {\r\n        const storeNames = Array.from(store._s.keys());\r\n        const storeMap = store._s;\r\n        const state = {\r\n            state: storeNames.map((storeId) => ({\r\n                editable: true,\r\n                key: storeId,\r\n                value: store.state.value[storeId],\r\n            })),\r\n            getters: storeNames\r\n                .filter((id) => storeMap.get(id)._getters)\r\n                .map((id) => {\r\n                const store = storeMap.get(id);\r\n                return {\r\n                    editable: false,\r\n                    key: id,\r\n                    value: store._getters.reduce((getters, key) => {\r\n                        getters[key] = store[key];\r\n                        return getters;\r\n                    }, {}),\r\n                };\r\n            }),\r\n        };\r\n        return state;\r\n    }\r\n    const state = {\r\n        state: Object.keys(store.$state).map((key) => ({\r\n            editable: true,\r\n            key,\r\n            value: store.$state[key],\r\n        })),\r\n    };\r\n    // avoid adding empty getters\r\n    if (store._getters && store._getters.length) {\r\n        state.getters = store._getters.map((getterName) => ({\r\n            editable: false,\r\n            key: getterName,\r\n            value: store[getterName],\r\n        }));\r\n    }\r\n    if (store._customProperties.size) {\r\n        state.customProperties = Array.from(store._customProperties).map((key) => ({\r\n            editable: true,\r\n            key,\r\n            value: store[key],\r\n        }));\r\n    }\r\n    return state;\r\n}\r\nfunction formatEventData(events) {\r\n    if (!events)\r\n        return {};\r\n    if (Array.isArray(events)) {\r\n        // TODO: handle add and delete for arrays and objects\r\n        return events.reduce((data, event) => {\r\n            data.keys.push(event.key);\r\n            data.operations.push(event.type);\r\n            data.oldValue[event.key] = event.oldValue;\r\n            data.newValue[event.key] = event.newValue;\r\n            return data;\r\n        }, {\r\n            oldValue: {},\r\n            keys: [],\r\n            operations: [],\r\n            newValue: {},\r\n        });\r\n    }\r\n    else {\r\n        return {\r\n            operation: formatDisplay(events.type),\r\n            key: formatDisplay(events.key),\r\n            oldValue: events.oldValue,\r\n            newValue: events.newValue,\r\n        };\r\n    }\r\n}\r\nfunction formatMutationType(type) {\r\n    switch (type) {\r\n        case MutationType.direct:\r\n            return 'mutation';\r\n        case MutationType.patchFunction:\r\n            return '$patch';\r\n        case MutationType.patchObject:\r\n            return '$patch';\r\n        default:\r\n            return 'unknown';\r\n    }\r\n}\n\n// timeline can be paused when directly changing the state\r\nlet isTimelineActive = true;\r\nconst componentStateTypes = [];\r\nconst MUTATIONS_LAYER_ID = 'pinia:mutations';\r\nconst INSPECTOR_ID = 'pinia';\r\nconst { assign: assign$1 } = Object;\r\n/**\r\n * Gets the displayed name of a store in devtools\r\n *\r\n * @param id - id of the store\r\n * @returns a formatted string\r\n */\r\nconst getStoreType = (id) => '🍍 ' + id;\r\n/**\r\n * Add the pinia plugin without any store. Allows displaying a Pinia plugin tab\r\n * as soon as it is added to the application.\r\n *\r\n * @param app - Vue application\r\n * @param pinia - pinia instance\r\n */\r\nfunction registerPiniaDevtools(app, pinia) {\r\n    setupDevtoolsPlugin({\r\n        id: 'dev.esm.pinia',\r\n        label: 'Pinia 🍍',\r\n        logo: 'https://pinia.vuejs.org/logo.svg',\r\n        packageName: 'pinia',\r\n        homepage: 'https://pinia.vuejs.org',\r\n        componentStateTypes,\r\n        app,\r\n    }, (api) => {\r\n        if (typeof api.now !== 'function') {\r\n            toastMessage('You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.');\r\n        }\r\n        api.addTimelineLayer({\r\n            id: MUTATIONS_LAYER_ID,\r\n            label: `Pinia 🍍`,\r\n            color: 0xe5df88,\r\n        });\r\n        api.addInspector({\r\n            id: INSPECTOR_ID,\r\n            label: 'Pinia 🍍',\r\n            icon: 'storage',\r\n            treeFilterPlaceholder: 'Search stores',\r\n            actions: [\r\n                {\r\n                    icon: 'content_copy',\r\n                    action: () => {\r\n                        actionGlobalCopyState(pinia);\r\n                    },\r\n                    tooltip: 'Serialize and copy the state',\r\n                },\r\n                {\r\n                    icon: 'content_paste',\r\n                    action: async () => {\r\n                        await actionGlobalPasteState(pinia);\r\n                        api.sendInspectorTree(INSPECTOR_ID);\r\n                        api.sendInspectorState(INSPECTOR_ID);\r\n                    },\r\n                    tooltip: 'Replace the state with the content of your clipboard',\r\n                },\r\n                {\r\n                    icon: 'save',\r\n                    action: () => {\r\n                        actionGlobalSaveState(pinia);\r\n                    },\r\n                    tooltip: 'Save the state as a JSON file',\r\n                },\r\n                {\r\n                    icon: 'folder_open',\r\n                    action: async () => {\r\n                        await actionGlobalOpenStateFile(pinia);\r\n                        api.sendInspectorTree(INSPECTOR_ID);\r\n                        api.sendInspectorState(INSPECTOR_ID);\r\n                    },\r\n                    tooltip: 'Import the state from a JSON file',\r\n                },\r\n            ],\r\n            nodeActions: [\r\n                {\r\n                    icon: 'restore',\r\n                    tooltip: 'Reset the state (option store only)',\r\n                    action: (nodeId) => {\r\n                        const store = pinia._s.get(nodeId);\r\n                        if (!store) {\r\n                            toastMessage(`Cannot reset \"${nodeId}\" store because it wasn't found.`, 'warn');\r\n                        }\r\n                        else if (!store._isOptionsAPI) {\r\n                            toastMessage(`Cannot reset \"${nodeId}\" store because it's a setup store.`, 'warn');\r\n                        }\r\n                        else {\r\n                            store.$reset();\r\n                            toastMessage(`Store \"${nodeId}\" reset.`);\r\n                        }\r\n                    },\r\n                },\r\n            ],\r\n        });\r\n        api.on.inspectComponent((payload, ctx) => {\r\n            const proxy = (payload.componentInstance &&\r\n                payload.componentInstance.proxy);\r\n            if (proxy && proxy._pStores) {\r\n                const piniaStores = payload.componentInstance.proxy._pStores;\r\n                Object.values(piniaStores).forEach((store) => {\r\n                    payload.instanceData.state.push({\r\n                        type: getStoreType(store.$id),\r\n                        key: 'state',\r\n                        editable: true,\r\n                        value: store._isOptionsAPI\r\n                            ? {\r\n                                _custom: {\r\n                                    value: toRaw(store.$state),\r\n                                    actions: [\r\n                                        {\r\n                                            icon: 'restore',\r\n                                            tooltip: 'Reset the state of this store',\r\n                                            action: () => store.$reset(),\r\n                                        },\r\n                                    ],\r\n                                },\r\n                            }\r\n                            : // NOTE: workaround to unwrap transferred refs\r\n                                Object.keys(store.$state).reduce((state, key) => {\r\n                                    state[key] = store.$state[key];\r\n                                    return state;\r\n                                }, {}),\r\n                    });\r\n                    if (store._getters && store._getters.length) {\r\n                        payload.instanceData.state.push({\r\n                            type: getStoreType(store.$id),\r\n                            key: 'getters',\r\n                            editable: false,\r\n                            value: store._getters.reduce((getters, key) => {\r\n                                try {\r\n                                    getters[key] = store[key];\r\n                                }\r\n                                catch (error) {\r\n                                    // @ts-expect-error: we just want to show it in devtools\r\n                                    getters[key] = error;\r\n                                }\r\n                                return getters;\r\n                            }, {}),\r\n                        });\r\n                    }\r\n                });\r\n            }\r\n        });\r\n        api.on.getInspectorTree((payload) => {\r\n            if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\r\n                let stores = [pinia];\r\n                stores = stores.concat(Array.from(pinia._s.values()));\r\n                payload.rootNodes = (payload.filter\r\n                    ? stores.filter((store) => '$id' in store\r\n                        ? store.$id\r\n                            .toLowerCase()\r\n                            .includes(payload.filter.toLowerCase())\r\n                        : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase()))\r\n                    : stores).map(formatStoreForInspectorTree);\r\n            }\r\n        });\r\n        api.on.getInspectorState((payload) => {\r\n            if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\r\n                const inspectedStore = payload.nodeId === PINIA_ROOT_ID\r\n                    ? pinia\r\n                    : pinia._s.get(payload.nodeId);\r\n                if (!inspectedStore) {\r\n                    // this could be the selected store restored for a different project\r\n                    // so it's better not to say anything here\r\n                    return;\r\n                }\r\n                if (inspectedStore) {\r\n                    payload.state = formatStoreForInspectorState(inspectedStore);\r\n                }\r\n            }\r\n        });\r\n        api.on.editInspectorState((payload, ctx) => {\r\n            if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\r\n                const inspectedStore = payload.nodeId === PINIA_ROOT_ID\r\n                    ? pinia\r\n                    : pinia._s.get(payload.nodeId);\r\n                if (!inspectedStore) {\r\n                    return toastMessage(`store \"${payload.nodeId}\" not found`, 'error');\r\n                }\r\n                const { path } = payload;\r\n                if (!isPinia(inspectedStore)) {\r\n                    // access only the state\r\n                    if (path.length !== 1 ||\r\n                        !inspectedStore._customProperties.has(path[0]) ||\r\n                        path[0] in inspectedStore.$state) {\r\n                        path.unshift('$state');\r\n                    }\r\n                }\r\n                else {\r\n                    // Root access, we can omit the `.value` because the devtools API does it for us\r\n                    path.unshift('state');\r\n                }\r\n                isTimelineActive = false;\r\n                payload.set(inspectedStore, path, payload.state.value);\r\n                isTimelineActive = true;\r\n            }\r\n        });\r\n        api.on.editComponentState((payload) => {\r\n            if (payload.type.startsWith('🍍')) {\r\n                const storeId = payload.type.replace(/^🍍\\s*/, '');\r\n                const store = pinia._s.get(storeId);\r\n                if (!store) {\r\n                    return toastMessage(`store \"${storeId}\" not found`, 'error');\r\n                }\r\n                const { path } = payload;\r\n                if (path[0] !== 'state') {\r\n                    return toastMessage(`Invalid path for store \"${storeId}\":\\n${path}\\nOnly state can be modified.`);\r\n                }\r\n                // rewrite the first entry to be able to directly set the state as\r\n                // well as any other path\r\n                path[0] = '$state';\r\n                isTimelineActive = false;\r\n                payload.set(store, path, payload.state.value);\r\n                isTimelineActive = true;\r\n            }\r\n        });\r\n    });\r\n}\r\nfunction addStoreToDevtools(app, store) {\r\n    if (!componentStateTypes.includes(getStoreType(store.$id))) {\r\n        componentStateTypes.push(getStoreType(store.$id));\r\n    }\r\n    setupDevtoolsPlugin({\r\n        id: 'dev.esm.pinia',\r\n        label: 'Pinia 🍍',\r\n        logo: 'https://pinia.vuejs.org/logo.svg',\r\n        packageName: 'pinia',\r\n        homepage: 'https://pinia.vuejs.org',\r\n        componentStateTypes,\r\n        app,\r\n        settings: {\r\n            logStoreChanges: {\r\n                label: 'Notify about new/deleted stores',\r\n                type: 'boolean',\r\n                defaultValue: true,\r\n            },\r\n            // useEmojis: {\r\n            //   label: 'Use emojis in messages ⚡️',\r\n            //   type: 'boolean',\r\n            //   defaultValue: true,\r\n            // },\r\n        },\r\n    }, (api) => {\r\n        // gracefully handle errors\r\n        const now = typeof api.now === 'function' ? api.now.bind(api) : Date.now;\r\n        store.$onAction(({ after, onError, name, args }) => {\r\n            const groupId = runningActionId++;\r\n            api.addTimelineEvent({\r\n                layerId: MUTATIONS_LAYER_ID,\r\n                event: {\r\n                    time: now(),\r\n                    title: '🛫 ' + name,\r\n                    subtitle: 'start',\r\n                    data: {\r\n                        store: formatDisplay(store.$id),\r\n                        action: formatDisplay(name),\r\n                        args,\r\n                    },\r\n                    groupId,\r\n                },\r\n            });\r\n            after((result) => {\r\n                activeAction = undefined;\r\n                api.addTimelineEvent({\r\n                    layerId: MUTATIONS_LAYER_ID,\r\n                    event: {\r\n                        time: now(),\r\n                        title: '🛬 ' + name,\r\n                        subtitle: 'end',\r\n                        data: {\r\n                            store: formatDisplay(store.$id),\r\n                            action: formatDisplay(name),\r\n                            args,\r\n                            result,\r\n                        },\r\n                        groupId,\r\n                    },\r\n                });\r\n            });\r\n            onError((error) => {\r\n                activeAction = undefined;\r\n                api.addTimelineEvent({\r\n                    layerId: MUTATIONS_LAYER_ID,\r\n                    event: {\r\n                        time: now(),\r\n                        logType: 'error',\r\n                        title: '💥 ' + name,\r\n                        subtitle: 'end',\r\n                        data: {\r\n                            store: formatDisplay(store.$id),\r\n                            action: formatDisplay(name),\r\n                            args,\r\n                            error,\r\n                        },\r\n                        groupId,\r\n                    },\r\n                });\r\n            });\r\n        }, true);\r\n        store._customProperties.forEach((name) => {\r\n            watch(() => unref(store[name]), (newValue, oldValue) => {\r\n                api.notifyComponentUpdate();\r\n                api.sendInspectorState(INSPECTOR_ID);\r\n                if (isTimelineActive) {\r\n                    api.addTimelineEvent({\r\n                        layerId: MUTATIONS_LAYER_ID,\r\n                        event: {\r\n                            time: now(),\r\n                            title: 'Change',\r\n                            subtitle: name,\r\n                            data: {\r\n                                newValue,\r\n                                oldValue,\r\n                            },\r\n                            groupId: activeAction,\r\n                        },\r\n                    });\r\n                }\r\n            }, { deep: true });\r\n        });\r\n        store.$subscribe(({ events, type }, state) => {\r\n            api.notifyComponentUpdate();\r\n            api.sendInspectorState(INSPECTOR_ID);\r\n            if (!isTimelineActive)\r\n                return;\r\n            // rootStore.state[store.id] = state\r\n            const eventData = {\r\n                time: now(),\r\n                title: formatMutationType(type),\r\n                data: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)),\r\n                groupId: activeAction,\r\n            };\r\n            // reset for the next mutation\r\n            activeAction = undefined;\r\n            if (type === MutationType.patchFunction) {\r\n                eventData.subtitle = '⤵️';\r\n            }\r\n            else if (type === MutationType.patchObject) {\r\n                eventData.subtitle = '🧩';\r\n            }\r\n            else if (events && !Array.isArray(events)) {\r\n                eventData.subtitle = events.type;\r\n            }\r\n            if (events) {\r\n                eventData.data['rawEvent(s)'] = {\r\n                    _custom: {\r\n                        display: 'DebuggerEvent',\r\n                        type: 'object',\r\n                        tooltip: 'raw DebuggerEvent[]',\r\n                        value: events,\r\n                    },\r\n                };\r\n            }\r\n            api.addTimelineEvent({\r\n                layerId: MUTATIONS_LAYER_ID,\r\n                event: eventData,\r\n            });\r\n        }, { detached: true, flush: 'sync' });\r\n        const hotUpdate = store._hotUpdate;\r\n        store._hotUpdate = markRaw((newStore) => {\r\n            hotUpdate(newStore);\r\n            api.addTimelineEvent({\r\n                layerId: MUTATIONS_LAYER_ID,\r\n                event: {\r\n                    time: now(),\r\n                    title: '🔥 ' + store.$id,\r\n                    subtitle: 'HMR update',\r\n                    data: {\r\n                        store: formatDisplay(store.$id),\r\n                        info: formatDisplay(`HMR update`),\r\n                    },\r\n                },\r\n            });\r\n            // update the devtools too\r\n            api.notifyComponentUpdate();\r\n            api.sendInspectorTree(INSPECTOR_ID);\r\n            api.sendInspectorState(INSPECTOR_ID);\r\n        });\r\n        const { $dispose } = store;\r\n        store.$dispose = () => {\r\n            $dispose();\r\n            api.notifyComponentUpdate();\r\n            api.sendInspectorTree(INSPECTOR_ID);\r\n            api.sendInspectorState(INSPECTOR_ID);\r\n            api.getSettings().logStoreChanges &&\r\n                toastMessage(`Disposed \"${store.$id}\" store 🗑`);\r\n        };\r\n        // trigger an update so it can display new registered stores\r\n        api.notifyComponentUpdate();\r\n        api.sendInspectorTree(INSPECTOR_ID);\r\n        api.sendInspectorState(INSPECTOR_ID);\r\n        api.getSettings().logStoreChanges &&\r\n            toastMessage(`\"${store.$id}\" store installed 🆕`);\r\n    });\r\n}\r\nlet runningActionId = 0;\r\nlet activeAction;\r\n/**\r\n * Patches a store to enable action grouping in devtools by wrapping the store with a Proxy that is passed as the\r\n * context of all actions, allowing us to set `runningAction` on each access and effectively associating any state\r\n * mutation to the action.\r\n *\r\n * @param store - store to patch\r\n * @param actionNames - list of actionst to patch\r\n */\r\nfunction patchActionForGrouping(store, actionNames) {\r\n    // original actions of the store as they are given by pinia. We are going to override them\r\n    const actions = actionNames.reduce((storeActions, actionName) => {\r\n        // use toRaw to avoid tracking #541\r\n        storeActions[actionName] = toRaw(store)[actionName];\r\n        return storeActions;\r\n    }, {});\r\n    for (const actionName in actions) {\r\n        store[actionName] = function () {\r\n            // setActivePinia(store._p)\r\n            // the running action id is incremented in a before action hook\r\n            const _actionId = runningActionId;\r\n            const trackedStore = new Proxy(store, {\r\n                get(...args) {\r\n                    activeAction = _actionId;\r\n                    return Reflect.get(...args);\r\n                },\r\n                set(...args) {\r\n                    activeAction = _actionId;\r\n                    return Reflect.set(...args);\r\n                },\r\n            });\r\n            return actions[actionName].apply(trackedStore, arguments);\r\n        };\r\n    }\r\n}\r\n/**\r\n * pinia.use(devtoolsPlugin)\r\n */\r\nfunction devtoolsPlugin({ app, store, options }) {\r\n    // HMR module\r\n    if (store.$id.startsWith('__hot:')) {\r\n        return;\r\n    }\r\n    // detect option api vs setup api\r\n    if (options.state) {\r\n        store._isOptionsAPI = true;\r\n    }\r\n    // only wrap actions in option-defined stores as this technique relies on\r\n    // wrapping the context of the action with a proxy\r\n    if (typeof options.state === 'function') {\r\n        patchActionForGrouping(\r\n        // @ts-expect-error: can cast the store...\r\n        store, Object.keys(options.actions));\r\n        const originalHotUpdate = store._hotUpdate;\r\n        // Upgrade the HMR to also update the new actions\r\n        toRaw(store)._hotUpdate = function (newStore) {\r\n            originalHotUpdate.apply(this, arguments);\r\n            patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions));\r\n        };\r\n    }\r\n    addStoreToDevtools(app, \r\n    // FIXME: is there a way to allow the assignment from Store<Id, S, G, A> to StoreGeneric?\r\n    store);\r\n}\n\n/**\r\n * Creates a Pinia instance to be used by the application\r\n */\r\nfunction createPinia() {\r\n    const scope = effectScope(true);\r\n    // NOTE: here we could check the window object for a state and directly set it\r\n    // if there is anything like it with Vue 3 SSR\r\n    const state = scope.run(() => ref({}));\r\n    let _p = [];\r\n    // plugins added before calling app.use(pinia)\r\n    let toBeInstalled = [];\r\n    const pinia = markRaw({\r\n        install(app) {\r\n            // this allows calling useStore() outside of a component setup after\r\n            // installing pinia's plugin\r\n            setActivePinia(pinia);\r\n            if (!isVue2) {\r\n                pinia._a = app;\r\n                app.provide(piniaSymbol, pinia);\r\n                app.config.globalProperties.$pinia = pinia;\r\n                /* istanbul ignore else */\r\n                if (USE_DEVTOOLS) {\r\n                    registerPiniaDevtools(app, pinia);\r\n                }\r\n                toBeInstalled.forEach((plugin) => _p.push(plugin));\r\n                toBeInstalled = [];\r\n            }\r\n        },\r\n        use(plugin) {\r\n            if (!this._a && !isVue2) {\r\n                toBeInstalled.push(plugin);\r\n            }\r\n            else {\r\n                _p.push(plugin);\r\n            }\r\n            return this;\r\n        },\r\n        _p,\r\n        // it's actually undefined here\r\n        // @ts-expect-error\r\n        _a: null,\r\n        _e: scope,\r\n        _s: new Map(),\r\n        state,\r\n    });\r\n    // pinia devtools rely on dev only features so they cannot be forced unless\r\n    // the dev build of Vue is used. Avoid old browsers like IE11.\r\n    if (USE_DEVTOOLS && typeof Proxy !== 'undefined') {\r\n        pinia.use(devtoolsPlugin);\r\n    }\r\n    return pinia;\r\n}\n\n/**\r\n * Checks if a function is a `StoreDefinition`.\r\n *\r\n * @param fn - object to test\r\n * @returns true if `fn` is a StoreDefinition\r\n */\r\nconst isUseStore = (fn) => {\r\n    return typeof fn === 'function' && typeof fn.$id === 'string';\r\n};\r\n/**\r\n * Mutates in place `newState` with `oldState` to _hot update_ it. It will\r\n * remove any key not existing in `newState` and recursively merge plain\r\n * objects.\r\n *\r\n * @param newState - new state object to be patched\r\n * @param oldState - old state that should be used to patch newState\r\n * @returns - newState\r\n */\r\nfunction patchObject(newState, oldState) {\r\n    // no need to go through symbols because they cannot be serialized anyway\r\n    for (const key in oldState) {\r\n        const subPatch = oldState[key];\r\n        // skip the whole sub tree\r\n        if (!(key in newState)) {\r\n            continue;\r\n        }\r\n        const targetValue = newState[key];\r\n        if (isPlainObject(targetValue) &&\r\n            isPlainObject(subPatch) &&\r\n            !isRef(subPatch) &&\r\n            !isReactive(subPatch)) {\r\n            newState[key] = patchObject(targetValue, subPatch);\r\n        }\r\n        else {\r\n            // objects are either a bit more complex (e.g. refs) or primitives, so we\r\n            // just set the whole thing\r\n            if (isVue2) {\r\n                set(newState, key, subPatch);\r\n            }\r\n            else {\r\n                newState[key] = subPatch;\r\n            }\r\n        }\r\n    }\r\n    return newState;\r\n}\r\n/**\r\n * Creates an _accept_ function to pass to `import.meta.hot` in Vite applications.\r\n *\r\n * @example\r\n * ```js\r\n * const useUser = defineStore(...)\r\n * if (import.meta.hot) {\r\n *   import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot))\r\n * }\r\n * ```\r\n *\r\n * @param initialUseStore - return of the defineStore to hot update\r\n * @param hot - `import.meta.hot`\r\n */\r\nfunction acceptHMRUpdate(initialUseStore, hot) {\r\n    // strip as much as possible from iife.prod\r\n    if (!(process.env.NODE_ENV !== 'production')) {\r\n        return () => { };\r\n    }\r\n    return (newModule) => {\r\n        const pinia = hot.data.pinia || initialUseStore._pinia;\r\n        if (!pinia) {\r\n            // this store is still not used\r\n            return;\r\n        }\r\n        // preserve the pinia instance across loads\r\n        hot.data.pinia = pinia;\r\n        // console.log('got data', newStore)\r\n        for (const exportName in newModule) {\r\n            const useStore = newModule[exportName];\r\n            // console.log('checking for', exportName)\r\n            if (isUseStore(useStore) && pinia._s.has(useStore.$id)) {\r\n                // console.log('Accepting update for', useStore.$id)\r\n                const id = useStore.$id;\r\n                if (id !== initialUseStore.$id) {\r\n                    console.warn(`The id of the store changed from \"${initialUseStore.$id}\" to \"${id}\". Reloading.`);\r\n                    // return import.meta.hot.invalidate()\r\n                    return hot.invalidate();\r\n                }\r\n                const existingStore = pinia._s.get(id);\r\n                if (!existingStore) {\r\n                    console.log(`[Pinia]: skipping hmr because store doesn't exist yet`);\r\n                    return;\r\n                }\r\n                useStore(pinia, existingStore);\r\n            }\r\n        }\r\n    };\r\n}\n\nconst noop = () => { };\r\nfunction addSubscription(subscriptions, callback, detached, onCleanup = noop) {\r\n    subscriptions.push(callback);\r\n    const removeSubscription = () => {\r\n        const idx = subscriptions.indexOf(callback);\r\n        if (idx > -1) {\r\n            subscriptions.splice(idx, 1);\r\n            onCleanup();\r\n        }\r\n    };\r\n    if (!detached && getCurrentScope()) {\r\n        onScopeDispose(removeSubscription);\r\n    }\r\n    return removeSubscription;\r\n}\r\nfunction triggerSubscriptions(subscriptions, ...args) {\r\n    subscriptions.slice().forEach((callback) => {\r\n        callback(...args);\r\n    });\r\n}\n\nfunction mergeReactiveObjects(target, patchToApply) {\r\n    // Handle Map instances\r\n    if (target instanceof Map && patchToApply instanceof Map) {\r\n        patchToApply.forEach((value, key) => target.set(key, value));\r\n    }\r\n    // Handle Set instances\r\n    if (target instanceof Set && patchToApply instanceof Set) {\r\n        patchToApply.forEach(target.add, target);\r\n    }\r\n    // no need to go through symbols because they cannot be serialized anyway\r\n    for (const key in patchToApply) {\r\n        if (!patchToApply.hasOwnProperty(key))\r\n            continue;\r\n        const subPatch = patchToApply[key];\r\n        const targetValue = target[key];\r\n        if (isPlainObject(targetValue) &&\r\n            isPlainObject(subPatch) &&\r\n            target.hasOwnProperty(key) &&\r\n            !isRef(subPatch) &&\r\n            !isReactive(subPatch)) {\r\n            // NOTE: here I wanted to warn about inconsistent types but it's not possible because in setup stores one might\r\n            // start the value of a property as a certain type e.g. a Map, and then for some reason, during SSR, change that\r\n            // to `undefined`. When trying to hydrate, we want to override the Map with `undefined`.\r\n            target[key] = mergeReactiveObjects(targetValue, subPatch);\r\n        }\r\n        else {\r\n            // @ts-expect-error: subPatch is a valid value\r\n            target[key] = subPatch;\r\n        }\r\n    }\r\n    return target;\r\n}\r\nconst skipHydrateSymbol = (process.env.NODE_ENV !== 'production')\r\n    ? Symbol('pinia:skipHydration')\r\n    : /* istanbul ignore next */ Symbol();\r\nconst skipHydrateMap = /*#__PURE__*/ new WeakMap();\r\n/**\r\n * Tells Pinia to skip the hydration process of a given object. This is useful in setup stores (only) when you return a\r\n * stateful object in the store but it isn't really state. e.g. returning a router instance in a setup store.\r\n *\r\n * @param obj - target object\r\n * @returns obj\r\n */\r\nfunction skipHydrate(obj) {\r\n    return isVue2\r\n        ? // in @vue/composition-api, the refs are sealed so defineProperty doesn't work...\r\n            /* istanbul ignore next */ skipHydrateMap.set(obj, 1) && obj\r\n        : Object.defineProperty(obj, skipHydrateSymbol, {});\r\n}\r\n/**\r\n * Returns whether a value should be hydrated\r\n *\r\n * @param obj - target variable\r\n * @returns true if `obj` should be hydrated\r\n */\r\nfunction shouldHydrate(obj) {\r\n    return isVue2\r\n        ? /* istanbul ignore next */ !skipHydrateMap.has(obj)\r\n        : !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);\r\n}\r\nconst { assign } = Object;\r\nfunction isComputed(o) {\r\n    return !!(isRef(o) && o.effect);\r\n}\r\nfunction createOptionsStore(id, options, pinia, hot) {\r\n    const { state, actions, getters } = options;\r\n    const initialState = pinia.state.value[id];\r\n    let store;\r\n    function setup() {\r\n        if (!initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\r\n            /* istanbul ignore if */\r\n            if (isVue2) {\r\n                set(pinia.state.value, id, state ? state() : {});\r\n            }\r\n            else {\r\n                pinia.state.value[id] = state ? state() : {};\r\n            }\r\n        }\r\n        // avoid creating a state in pinia.state.value\r\n        const localState = (process.env.NODE_ENV !== 'production') && hot\r\n            ? // use ref() to unwrap refs inside state TODO: check if this is still necessary\r\n                toRefs(ref(state ? state() : {}).value)\r\n            : toRefs(pinia.state.value[id]);\r\n        return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {\r\n            if ((process.env.NODE_ENV !== 'production') && name in localState) {\r\n                console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with \"${name}\" in store \"${id}\".`);\r\n            }\r\n            computedGetters[name] = markRaw(computed(() => {\r\n                setActivePinia(pinia);\r\n                // it was created just before\r\n                const store = pinia._s.get(id);\r\n                // allow cross using stores\r\n                /* istanbul ignore next */\r\n                if (isVue2 && !store._r)\r\n                    return;\r\n                // @ts-expect-error\r\n                // return getters![name].call(context, context)\r\n                // TODO: avoid reading the getter while assigning with a global variable\r\n                return getters[name].call(store, store);\r\n            }));\r\n            return computedGetters;\r\n        }, {}));\r\n    }\r\n    store = createSetupStore(id, setup, options, pinia, hot, true);\r\n    return store;\r\n}\r\nfunction createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {\r\n    let scope;\r\n    const optionsForPlugin = assign({ actions: {} }, options);\r\n    /* istanbul ignore if */\r\n    if ((process.env.NODE_ENV !== 'production') && !pinia._e.active) {\r\n        throw new Error('Pinia destroyed');\r\n    }\r\n    // watcher options for $subscribe\r\n    const $subscribeOptions = {\r\n        deep: true,\r\n        // flush: 'post',\r\n    };\r\n    /* istanbul ignore else */\r\n    if ((process.env.NODE_ENV !== 'production') && !isVue2) {\r\n        $subscribeOptions.onTrigger = (event) => {\r\n            /* istanbul ignore else */\r\n            if (isListening) {\r\n                debuggerEvents = event;\r\n                // avoid triggering this while the store is being built and the state is being set in pinia\r\n            }\r\n            else if (isListening == false && !store._hotUpdating) {\r\n                // let patch send all the events together later\r\n                /* istanbul ignore else */\r\n                if (Array.isArray(debuggerEvents)) {\r\n                    debuggerEvents.push(event);\r\n                }\r\n                else {\r\n                    console.error('🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.');\r\n                }\r\n            }\r\n        };\r\n    }\r\n    // internal state\r\n    let isListening; // set to true at the end\r\n    let isSyncListening; // set to true at the end\r\n    let subscriptions = markRaw([]);\r\n    let actionSubscriptions = markRaw([]);\r\n    let debuggerEvents;\r\n    const initialState = pinia.state.value[$id];\r\n    // avoid setting the state for option stores if it is set\r\n    // by the setup\r\n    if (!isOptionsStore && !initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\r\n        /* istanbul ignore if */\r\n        if (isVue2) {\r\n            set(pinia.state.value, $id, {});\r\n        }\r\n        else {\r\n            pinia.state.value[$id] = {};\r\n        }\r\n    }\r\n    const hotState = ref({});\r\n    // avoid triggering too many listeners\r\n    // https://github.com/vuejs/pinia/issues/1129\r\n    let activeListener;\r\n    function $patch(partialStateOrMutator) {\r\n        let subscriptionMutation;\r\n        isListening = isSyncListening = false;\r\n        // reset the debugger events since patches are sync\r\n        /* istanbul ignore else */\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            debuggerEvents = [];\r\n        }\r\n        if (typeof partialStateOrMutator === 'function') {\r\n            partialStateOrMutator(pinia.state.value[$id]);\r\n            subscriptionMutation = {\r\n                type: MutationType.patchFunction,\r\n                storeId: $id,\r\n                events: debuggerEvents,\r\n            };\r\n        }\r\n        else {\r\n            mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);\r\n            subscriptionMutation = {\r\n                type: MutationType.patchObject,\r\n                payload: partialStateOrMutator,\r\n                storeId: $id,\r\n                events: debuggerEvents,\r\n            };\r\n        }\r\n        const myListenerId = (activeListener = Symbol());\r\n        nextTick().then(() => {\r\n            if (activeListener === myListenerId) {\r\n                isListening = true;\r\n            }\r\n        });\r\n        isSyncListening = true;\r\n        // because we paused the watcher, we need to manually call the subscriptions\r\n        triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);\r\n    }\r\n    const $reset = isOptionsStore\r\n        ? function $reset() {\r\n            const { state } = options;\r\n            const newState = state ? state() : {};\r\n            // we use a patch to group all changes into one single subscription\r\n            this.$patch(($state) => {\r\n                assign($state, newState);\r\n            });\r\n        }\r\n        : /* istanbul ignore next */\r\n            (process.env.NODE_ENV !== 'production')\r\n                ? () => {\r\n                    throw new Error(`🍍: Store \"${$id}\" is built using the setup syntax and does not implement $reset().`);\r\n                }\r\n                : noop;\r\n    function $dispose() {\r\n        scope.stop();\r\n        subscriptions = [];\r\n        actionSubscriptions = [];\r\n        pinia._s.delete($id);\r\n    }\r\n    /**\r\n     * Wraps an action to handle subscriptions.\r\n     *\r\n     * @param name - name of the action\r\n     * @param action - action to wrap\r\n     * @returns a wrapped action to handle subscriptions\r\n     */\r\n    function wrapAction(name, action) {\r\n        return function () {\r\n            setActivePinia(pinia);\r\n            const args = Array.from(arguments);\r\n            const afterCallbackList = [];\r\n            const onErrorCallbackList = [];\r\n            function after(callback) {\r\n                afterCallbackList.push(callback);\r\n            }\r\n            function onError(callback) {\r\n                onErrorCallbackList.push(callback);\r\n            }\r\n            // @ts-expect-error\r\n            triggerSubscriptions(actionSubscriptions, {\r\n                args,\r\n                name,\r\n                store,\r\n                after,\r\n                onError,\r\n            });\r\n            let ret;\r\n            try {\r\n                ret = action.apply(this && this.$id === $id ? this : store, args);\r\n                // handle sync errors\r\n            }\r\n            catch (error) {\r\n                triggerSubscriptions(onErrorCallbackList, error);\r\n                throw error;\r\n            }\r\n            if (ret instanceof Promise) {\r\n                return ret\r\n                    .then((value) => {\r\n                    triggerSubscriptions(afterCallbackList, value);\r\n                    return value;\r\n                })\r\n                    .catch((error) => {\r\n                    triggerSubscriptions(onErrorCallbackList, error);\r\n                    return Promise.reject(error);\r\n                });\r\n            }\r\n            // trigger after callbacks\r\n            triggerSubscriptions(afterCallbackList, ret);\r\n            return ret;\r\n        };\r\n    }\r\n    const _hmrPayload = /*#__PURE__*/ markRaw({\r\n        actions: {},\r\n        getters: {},\r\n        state: [],\r\n        hotState,\r\n    });\r\n    const partialStore = {\r\n        _p: pinia,\r\n        // _s: scope,\r\n        $id,\r\n        $onAction: addSubscription.bind(null, actionSubscriptions),\r\n        $patch,\r\n        $reset,\r\n        $subscribe(callback, options = {}) {\r\n            const removeSubscription = addSubscription(subscriptions, callback, options.detached, () => stopWatcher());\r\n            const stopWatcher = scope.run(() => watch(() => pinia.state.value[$id], (state) => {\r\n                if (options.flush === 'sync' ? isSyncListening : isListening) {\r\n                    callback({\r\n                        storeId: $id,\r\n                        type: MutationType.direct,\r\n                        events: debuggerEvents,\r\n                    }, state);\r\n                }\r\n            }, assign({}, $subscribeOptions, options)));\r\n            return removeSubscription;\r\n        },\r\n        $dispose,\r\n    };\r\n    /* istanbul ignore if */\r\n    if (isVue2) {\r\n        // start as non ready\r\n        partialStore._r = false;\r\n    }\r\n    const store = reactive((process.env.NODE_ENV !== 'production') || USE_DEVTOOLS\r\n        ? assign({\r\n            _hmrPayload,\r\n            _customProperties: markRaw(new Set()), // devtools custom properties\r\n        }, partialStore\r\n        // must be added later\r\n        // setupStore\r\n        )\r\n        : partialStore);\r\n    // store the partial store now so the setup of stores can instantiate each other before they are finished without\r\n    // creating infinite loops.\r\n    pinia._s.set($id, store);\r\n    // TODO: idea create skipSerialize that marks properties as non serializable and they are skipped\r\n    const setupStore = pinia._e.run(() => {\r\n        scope = effectScope();\r\n        return scope.run(() => setup());\r\n    });\r\n    // overwrite existing actions to support $onAction\r\n    for (const key in setupStore) {\r\n        const prop = setupStore[key];\r\n        if ((isRef(prop) && !isComputed(prop)) || isReactive(prop)) {\r\n            // mark it as a piece of state to be serialized\r\n            if ((process.env.NODE_ENV !== 'production') && hot) {\r\n                set(hotState.value, key, toRef(setupStore, key));\r\n                // createOptionStore directly sets the state in pinia.state.value so we\r\n                // can just skip that\r\n            }\r\n            else if (!isOptionsStore) {\r\n                // in setup stores we must hydrate the state and sync pinia state tree with the refs the user just created\r\n                if (initialState && shouldHydrate(prop)) {\r\n                    if (isRef(prop)) {\r\n                        prop.value = initialState[key];\r\n                    }\r\n                    else {\r\n                        // probably a reactive object, lets recursively assign\r\n                        // @ts-expect-error: prop is unknown\r\n                        mergeReactiveObjects(prop, initialState[key]);\r\n                    }\r\n                }\r\n                // transfer the ref to the pinia state to keep everything in sync\r\n                /* istanbul ignore if */\r\n                if (isVue2) {\r\n                    set(pinia.state.value[$id], key, prop);\r\n                }\r\n                else {\r\n                    pinia.state.value[$id][key] = prop;\r\n                }\r\n            }\r\n            /* istanbul ignore else */\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                _hmrPayload.state.push(key);\r\n            }\r\n            // action\r\n        }\r\n        else if (typeof prop === 'function') {\r\n            // @ts-expect-error: we are overriding the function we avoid wrapping if\r\n            const actionValue = (process.env.NODE_ENV !== 'production') && hot ? prop : wrapAction(key, prop);\r\n            // this a hot module replacement store because the hotUpdate method needs\r\n            // to do it with the right context\r\n            /* istanbul ignore if */\r\n            if (isVue2) {\r\n                set(setupStore, key, actionValue);\r\n            }\r\n            else {\r\n                // @ts-expect-error\r\n                setupStore[key] = actionValue;\r\n            }\r\n            /* istanbul ignore else */\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                _hmrPayload.actions[key] = prop;\r\n            }\r\n            // list actions so they can be used in plugins\r\n            // @ts-expect-error\r\n            optionsForPlugin.actions[key] = prop;\r\n        }\r\n        else if ((process.env.NODE_ENV !== 'production')) {\r\n            // add getters for devtools\r\n            if (isComputed(prop)) {\r\n                _hmrPayload.getters[key] = isOptionsStore\r\n                    ? // @ts-expect-error\r\n                        options.getters[key]\r\n                    : prop;\r\n                if (IS_CLIENT) {\r\n                    const getters = setupStore._getters ||\r\n                        // @ts-expect-error: same\r\n                        (setupStore._getters = markRaw([]));\r\n                    getters.push(key);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    // add the state, getters, and action properties\r\n    /* istanbul ignore if */\r\n    if (isVue2) {\r\n        Object.keys(setupStore).forEach((key) => {\r\n            set(store, key, setupStore[key]);\r\n        });\r\n    }\r\n    else {\r\n        assign(store, setupStore);\r\n        // allows retrieving reactive objects with `storeToRefs()`. Must be called after assigning to the reactive object.\r\n        // Make `storeToRefs()` work with `reactive()` #799\r\n        assign(toRaw(store), setupStore);\r\n    }\r\n    // use this instead of a computed with setter to be able to create it anywhere\r\n    // without linking the computed lifespan to wherever the store is first\r\n    // created.\r\n    Object.defineProperty(store, '$state', {\r\n        get: () => ((process.env.NODE_ENV !== 'production') && hot ? hotState.value : pinia.state.value[$id]),\r\n        set: (state) => {\r\n            /* istanbul ignore if */\r\n            if ((process.env.NODE_ENV !== 'production') && hot) {\r\n                throw new Error('cannot set hotState');\r\n            }\r\n            $patch(($state) => {\r\n                assign($state, state);\r\n            });\r\n        },\r\n    });\r\n    // add the hotUpdate before plugins to allow them to override it\r\n    /* istanbul ignore else */\r\n    if ((process.env.NODE_ENV !== 'production')) {\r\n        store._hotUpdate = markRaw((newStore) => {\r\n            store._hotUpdating = true;\r\n            newStore._hmrPayload.state.forEach((stateKey) => {\r\n                if (stateKey in store.$state) {\r\n                    const newStateTarget = newStore.$state[stateKey];\r\n                    const oldStateSource = store.$state[stateKey];\r\n                    if (typeof newStateTarget === 'object' &&\r\n                        isPlainObject(newStateTarget) &&\r\n                        isPlainObject(oldStateSource)) {\r\n                        patchObject(newStateTarget, oldStateSource);\r\n                    }\r\n                    else {\r\n                        // transfer the ref\r\n                        newStore.$state[stateKey] = oldStateSource;\r\n                    }\r\n                }\r\n                // patch direct access properties to allow store.stateProperty to work as\r\n                // store.$state.stateProperty\r\n                set(store, stateKey, toRef(newStore.$state, stateKey));\r\n            });\r\n            // remove deleted state properties\r\n            Object.keys(store.$state).forEach((stateKey) => {\r\n                if (!(stateKey in newStore.$state)) {\r\n                    del(store, stateKey);\r\n                }\r\n            });\r\n            // avoid devtools logging this as a mutation\r\n            isListening = false;\r\n            isSyncListening = false;\r\n            pinia.state.value[$id] = toRef(newStore._hmrPayload, 'hotState');\r\n            isSyncListening = true;\r\n            nextTick().then(() => {\r\n                isListening = true;\r\n            });\r\n            for (const actionName in newStore._hmrPayload.actions) {\r\n                const action = newStore[actionName];\r\n                set(store, actionName, wrapAction(actionName, action));\r\n            }\r\n            // TODO: does this work in both setup and option store?\r\n            for (const getterName in newStore._hmrPayload.getters) {\r\n                const getter = newStore._hmrPayload.getters[getterName];\r\n                const getterValue = isOptionsStore\r\n                    ? // special handling of options api\r\n                        computed(() => {\r\n                            setActivePinia(pinia);\r\n                            return getter.call(store, store);\r\n                        })\r\n                    : getter;\r\n                set(store, getterName, getterValue);\r\n            }\r\n            // remove deleted getters\r\n            Object.keys(store._hmrPayload.getters).forEach((key) => {\r\n                if (!(key in newStore._hmrPayload.getters)) {\r\n                    del(store, key);\r\n                }\r\n            });\r\n            // remove old actions\r\n            Object.keys(store._hmrPayload.actions).forEach((key) => {\r\n                if (!(key in newStore._hmrPayload.actions)) {\r\n                    del(store, key);\r\n                }\r\n            });\r\n            // update the values used in devtools and to allow deleting new properties later on\r\n            store._hmrPayload = newStore._hmrPayload;\r\n            store._getters = newStore._getters;\r\n            store._hotUpdating = false;\r\n        });\r\n    }\r\n    if (USE_DEVTOOLS) {\r\n        const nonEnumerable = {\r\n            writable: true,\r\n            configurable: true,\r\n            // avoid warning on devtools trying to display this property\r\n            enumerable: false,\r\n        };\r\n        ['_p', '_hmrPayload', '_getters', '_customProperties'].forEach((p) => {\r\n            Object.defineProperty(store, p, assign({ value: store[p] }, nonEnumerable));\r\n        });\r\n    }\r\n    /* istanbul ignore if */\r\n    if (isVue2) {\r\n        // mark the store as ready before plugins\r\n        store._r = true;\r\n    }\r\n    // apply all plugins\r\n    pinia._p.forEach((extender) => {\r\n        /* istanbul ignore else */\r\n        if (USE_DEVTOOLS) {\r\n            const extensions = scope.run(() => extender({\r\n                store,\r\n                app: pinia._a,\r\n                pinia,\r\n                options: optionsForPlugin,\r\n            }));\r\n            Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));\r\n            assign(store, extensions);\r\n        }\r\n        else {\r\n            assign(store, scope.run(() => extender({\r\n                store,\r\n                app: pinia._a,\r\n                pinia,\r\n                options: optionsForPlugin,\r\n            })));\r\n        }\r\n    });\r\n    if ((process.env.NODE_ENV !== 'production') &&\r\n        store.$state &&\r\n        typeof store.$state === 'object' &&\r\n        typeof store.$state.constructor === 'function' &&\r\n        !store.$state.constructor.toString().includes('[native code]')) {\r\n        console.warn(`[🍍]: The \"state\" must be a plain object. It cannot be\\n` +\r\n            `\\tstate: () => new MyClass()\\n` +\r\n            `Found in store \"${store.$id}\".`);\r\n    }\r\n    // only apply hydrate to option stores with an initial state in pinia\r\n    if (initialState &&\r\n        isOptionsStore &&\r\n        options.hydrate) {\r\n        options.hydrate(store.$state, initialState);\r\n    }\r\n    isListening = true;\r\n    isSyncListening = true;\r\n    return store;\r\n}\r\nfunction defineStore(\r\n// TODO: add proper types from above\r\nidOrOptions, setup, setupOptions) {\r\n    let id;\r\n    let options;\r\n    const isSetupStore = typeof setup === 'function';\r\n    if (typeof idOrOptions === 'string') {\r\n        id = idOrOptions;\r\n        // the option store setup will contain the actual options in this case\r\n        options = isSetupStore ? setupOptions : setup;\r\n    }\r\n    else {\r\n        options = idOrOptions;\r\n        id = idOrOptions.id;\r\n    }\r\n    function useStore(pinia, hot) {\r\n        const currentInstance = getCurrentInstance();\r\n        pinia =\r\n            // in test mode, ignore the argument provided as we can always retrieve a\r\n            // pinia instance with getActivePinia()\r\n            ((process.env.NODE_ENV === 'test') && activePinia && activePinia._testing ? null : pinia) ||\r\n                (currentInstance && inject(piniaSymbol, null));\r\n        if (pinia)\r\n            setActivePinia(pinia);\r\n        if ((process.env.NODE_ENV !== 'production') && !activePinia) {\r\n            throw new Error(`[🍍]: getActivePinia was called with no active Pinia. Did you forget to install pinia?\\n` +\r\n                `\\tconst pinia = createPinia()\\n` +\r\n                `\\tapp.use(pinia)\\n` +\r\n                `This will fail in production.`);\r\n        }\r\n        pinia = activePinia;\r\n        if (!pinia._s.has(id)) {\r\n            // creating the store registers it in `pinia._s`\r\n            if (isSetupStore) {\r\n                createSetupStore(id, setup, options, pinia);\r\n            }\r\n            else {\r\n                createOptionsStore(id, options, pinia);\r\n            }\r\n            /* istanbul ignore else */\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                // @ts-expect-error: not the right inferred type\r\n                useStore._pinia = pinia;\r\n            }\r\n        }\r\n        const store = pinia._s.get(id);\r\n        if ((process.env.NODE_ENV !== 'production') && hot) {\r\n            const hotId = '__hot:' + id;\r\n            const newStore = isSetupStore\r\n                ? createSetupStore(hotId, setup, options, pinia, true)\r\n                : createOptionsStore(hotId, assign({}, options), pinia, true);\r\n            hot._hotUpdate(newStore);\r\n            // cleanup the state properties and the store from the cache\r\n            delete pinia.state.value[hotId];\r\n            pinia._s.delete(hotId);\r\n        }\r\n        // save stores in instances to access them devtools\r\n        if ((process.env.NODE_ENV !== 'production') &&\r\n            IS_CLIENT &&\r\n            currentInstance &&\r\n            currentInstance.proxy &&\r\n            // avoid adding stores that are just built for hot module replacement\r\n            !hot) {\r\n            const vm = currentInstance.proxy;\r\n            const cache = '_pStores' in vm ? vm._pStores : (vm._pStores = {});\r\n            cache[id] = store;\r\n        }\r\n        // StoreGeneric cannot be casted towards Store\r\n        return store;\r\n    }\r\n    useStore.$id = id;\r\n    return useStore;\r\n}\n\nlet mapStoreSuffix = 'Store';\r\n/**\r\n * Changes the suffix added by `mapStores()`. Can be set to an empty string.\r\n * Defaults to `\"Store\"`. Make sure to extend the MapStoresCustomization\r\n * interface if you are using TypeScript.\r\n *\r\n * @param suffix - new suffix\r\n */\r\nfunction setMapStoreSuffix(suffix // could be 'Store' but that would be annoying for JS\r\n) {\r\n    mapStoreSuffix = suffix;\r\n}\r\n/**\r\n * Allows using stores without the composition API (`setup()`) by generating an\r\n * object to be spread in the `computed` field of a component. It accepts a list\r\n * of store definitions.\r\n *\r\n * @example\r\n * ```js\r\n * export default {\r\n *   computed: {\r\n *     // other computed properties\r\n *     ...mapStores(useUserStore, useCartStore)\r\n *   },\r\n *\r\n *   created() {\r\n *     this.userStore // store with id \"user\"\r\n *     this.cartStore // store with id \"cart\"\r\n *   }\r\n * }\r\n * ```\r\n *\r\n * @param stores - list of stores to map to an object\r\n */\r\nfunction mapStores(...stores) {\r\n    if ((process.env.NODE_ENV !== 'production') && Array.isArray(stores[0])) {\r\n        console.warn(`[🍍]: Directly pass all stores to \"mapStores()\" without putting them in an array:\\n` +\r\n            `Replace\\n` +\r\n            `\\tmapStores([useAuthStore, useCartStore])\\n` +\r\n            `with\\n` +\r\n            `\\tmapStores(useAuthStore, useCartStore)\\n` +\r\n            `This will fail in production if not fixed.`);\r\n        stores = stores[0];\r\n    }\r\n    return stores.reduce((reduced, useStore) => {\r\n        // @ts-expect-error: $id is added by defineStore\r\n        reduced[useStore.$id + mapStoreSuffix] = function () {\r\n            return useStore(this.$pinia);\r\n        };\r\n        return reduced;\r\n    }, {});\r\n}\r\n/**\r\n * Allows using state and getters from one store without using the composition\r\n * API (`setup()`) by generating an object to be spread in the `computed` field\r\n * of a component.\r\n *\r\n * @param useStore - store to map from\r\n * @param keysOrMapper - array or object\r\n */\r\nfunction mapState(useStore, keysOrMapper) {\r\n    return Array.isArray(keysOrMapper)\r\n        ? keysOrMapper.reduce((reduced, key) => {\r\n            reduced[key] = function () {\r\n                return useStore(this.$pinia)[key];\r\n            };\r\n            return reduced;\r\n        }, {})\r\n        : Object.keys(keysOrMapper).reduce((reduced, key) => {\r\n            // @ts-expect-error\r\n            reduced[key] = function () {\r\n                const store = useStore(this.$pinia);\r\n                const storeKey = keysOrMapper[key];\r\n                // for some reason TS is unable to infer the type of storeKey to be a\r\n                // function\r\n                return typeof storeKey === 'function'\r\n                    ? storeKey.call(this, store)\r\n                    : store[storeKey];\r\n            };\r\n            return reduced;\r\n        }, {});\r\n}\r\n/**\r\n * Alias for `mapState()`. You should use `mapState()` instead.\r\n * @deprecated use `mapState()` instead.\r\n */\r\nconst mapGetters = mapState;\r\n/**\r\n * Allows directly using actions from your store without using the composition\r\n * API (`setup()`) by generating an object to be spread in the `methods` field\r\n * of a component.\r\n *\r\n * @param useStore - store to map from\r\n * @param keysOrMapper - array or object\r\n */\r\nfunction mapActions(useStore, keysOrMapper) {\r\n    return Array.isArray(keysOrMapper)\r\n        ? keysOrMapper.reduce((reduced, key) => {\r\n            // @ts-expect-error\r\n            reduced[key] = function (...args) {\r\n                return useStore(this.$pinia)[key](...args);\r\n            };\r\n            return reduced;\r\n        }, {})\r\n        : Object.keys(keysOrMapper).reduce((reduced, key) => {\r\n            // @ts-expect-error\r\n            reduced[key] = function (...args) {\r\n                return useStore(this.$pinia)[keysOrMapper[key]](...args);\r\n            };\r\n            return reduced;\r\n        }, {});\r\n}\r\n/**\r\n * Allows using state and getters from one store without using the composition\r\n * API (`setup()`) by generating an object to be spread in the `computed` field\r\n * of a component.\r\n *\r\n * @param useStore - store to map from\r\n * @param keysOrMapper - array or object\r\n */\r\nfunction mapWritableState(useStore, keysOrMapper) {\r\n    return Array.isArray(keysOrMapper)\r\n        ? keysOrMapper.reduce((reduced, key) => {\r\n            // @ts-ignore\r\n            reduced[key] = {\r\n                get() {\r\n                    return useStore(this.$pinia)[key];\r\n                },\r\n                set(value) {\r\n                    // it's easier to type it here as any\r\n                    return (useStore(this.$pinia)[key] = value);\r\n                },\r\n            };\r\n            return reduced;\r\n        }, {})\r\n        : Object.keys(keysOrMapper).reduce((reduced, key) => {\r\n            // @ts-ignore\r\n            reduced[key] = {\r\n                get() {\r\n                    return useStore(this.$pinia)[keysOrMapper[key]];\r\n                },\r\n                set(value) {\r\n                    // it's easier to type it here as any\r\n                    return (useStore(this.$pinia)[keysOrMapper[key]] = value);\r\n                },\r\n            };\r\n            return reduced;\r\n        }, {});\r\n}\n\n/**\r\n * Creates an object of references with all the state, getters, and plugin-added\r\n * state properties of the store. Similar to `toRefs()` but specifically\r\n * designed for Pinia stores so methods and non reactive properties are\r\n * completely ignored.\r\n *\r\n * @param store - store to extract the refs from\r\n */\r\nfunction storeToRefs(store) {\r\n    // See https://github.com/vuejs/pinia/issues/852\r\n    // It's easier to just use toRefs() even if it includes more stuff\r\n    if (isVue2) {\r\n        // @ts-expect-error: toRefs include methods and others\r\n        return toRefs(store);\r\n    }\r\n    else {\r\n        store = toRaw(store);\r\n        const refs = {};\r\n        for (const key in store) {\r\n            const value = store[key];\r\n            if (isRef(value) || isReactive(value)) {\r\n                // @ts-expect-error: the key is state or getter\r\n                refs[key] =\r\n                    // ---\r\n                    toRef(store, key);\r\n            }\r\n        }\r\n        return refs;\r\n    }\r\n}\n\n/**\r\n * Vue 2 Plugin that must be installed for pinia to work. Note **you don't need\r\n * this plugin if you are using Nuxt.js**. Use the `buildModule` instead:\r\n * https://pinia.vuejs.org/ssr/nuxt.html.\r\n *\r\n * @example\r\n * ```js\r\n * import Vue from 'vue'\r\n * import { PiniaVuePlugin, createPinia } from 'pinia'\r\n *\r\n * Vue.use(PiniaVuePlugin)\r\n * const pinia = createPinia()\r\n *\r\n * new Vue({\r\n *   el: '#app',\r\n *   // ...\r\n *   pinia,\r\n * })\r\n * ```\r\n *\r\n * @param _Vue - `Vue` imported from 'vue'.\r\n */\r\nconst PiniaVuePlugin = function (_Vue) {\r\n    // Equivalent of\r\n    // app.config.globalProperties.$pinia = pinia\r\n    _Vue.mixin({\r\n        beforeCreate() {\r\n            const options = this.$options;\r\n            if (options.pinia) {\r\n                const pinia = options.pinia;\r\n                // HACK: taken from provide(): https://github.com/vuejs/composition-api/blob/main/src/apis/inject.ts#L31\r\n                /* istanbul ignore else */\r\n                if (!this._provided) {\r\n                    const provideCache = {};\r\n                    Object.defineProperty(this, '_provided', {\r\n                        get: () => provideCache,\r\n                        set: (v) => Object.assign(provideCache, v),\r\n                    });\r\n                }\r\n                this._provided[piniaSymbol] = pinia;\r\n                // propagate the pinia instance in an SSR friendly way\r\n                // avoid adding it to nuxt twice\r\n                /* istanbul ignore else */\r\n                if (!this.$pinia) {\r\n                    this.$pinia = pinia;\r\n                }\r\n                pinia._a = this;\r\n                if (IS_CLIENT) {\r\n                    // this allows calling useStore() outside of a component setup after\r\n                    // installing pinia's plugin\r\n                    setActivePinia(pinia);\r\n                }\r\n                if (USE_DEVTOOLS) {\r\n                    registerPiniaDevtools(pinia._a, pinia);\r\n                }\r\n            }\r\n            else if (!this.$pinia && options.parent && options.parent.$pinia) {\r\n                this.$pinia = options.parent.$pinia;\r\n            }\r\n        },\r\n        destroyed() {\r\n            delete this._pStores;\r\n        },\r\n    });\r\n};\n\nexport { MutationType, PiniaVuePlugin, acceptHMRUpdate, createPinia, defineStore, getActivePinia, mapActions, mapGetters, mapState, mapStores, mapWritableState, setActivePinia, setMapStoreSuffix, skipHydrate, storeToRefs };\n","// src/normalize.ts\nfunction isObject(v) {\n  return typeof v === \"object\" && v !== null;\n}\nfunction normalizeOptions(options, factoryOptions) {\n  options = isObject(options) ? options : /* @__PURE__ */ Object.create(null);\n  return new Proxy(options, {\n    get(target, key, receiver) {\n      if (key === \"key\")\n        return Reflect.get(target, key, receiver);\n      return Reflect.get(target, key, receiver) || Reflect.get(factoryOptions, key, receiver);\n    }\n  });\n}\n\n// src/pick.ts\nfunction get(state, path) {\n  return path.reduce((obj, p) => {\n    return obj == null ? void 0 : obj[p];\n  }, state);\n}\nfunction set(state, path, val) {\n  return path.slice(0, -1).reduce((obj, p) => {\n    if (/^(__proto__)$/.test(p))\n      return {};\n    else\n      return obj[p] = obj[p] || {};\n  }, state)[path[path.length - 1]] = val, state;\n}\nfunction pick(baseState, paths) {\n  return paths.reduce((substate, path) => {\n    const pathArray = path.split(\".\");\n    return set(substate, pathArray, get(baseState, pathArray));\n  }, {});\n}\n\n// src/plugin.ts\nfunction hydrateStore(store, { storage, serializer, key, debug }) {\n  try {\n    const fromStorage = storage == null ? void 0 : storage.getItem(key);\n    if (fromStorage)\n      store.$patch(serializer == null ? void 0 : serializer.deserialize(fromStorage));\n  } catch (error) {\n    if (debug)\n      console.error(error);\n  }\n}\nfunction persistState(state, { storage, serializer, key, paths, debug }) {\n  try {\n    const toStore = Array.isArray(paths) ? pick(state, paths) : state;\n    storage.setItem(key, serializer.serialize(toStore));\n  } catch (error) {\n    if (debug)\n      console.error(error);\n  }\n}\nfunction createPersistedState(factoryOptions = {}) {\n  return (context) => {\n    const { auto = false } = factoryOptions;\n    const {\n      options: { persist = auto },\n      store\n    } = context;\n    if (!persist)\n      return;\n    const persistences = (Array.isArray(persist) ? persist.map((p) => normalizeOptions(p, factoryOptions)) : [normalizeOptions(persist, factoryOptions)]).map(\n      ({\n        storage = localStorage,\n        beforeRestore = null,\n        afterRestore = null,\n        serializer = {\n          serialize: JSON.stringify,\n          deserialize: JSON.parse\n        },\n        key = store.$id,\n        paths = null,\n        debug = false\n      }) => {\n        var _a;\n        return {\n          storage,\n          beforeRestore,\n          afterRestore,\n          serializer,\n          key: ((_a = factoryOptions.key) != null ? _a : (k) => k)(key),\n          paths,\n          debug\n        };\n      }\n    );\n    store.$persist = () => {\n      persistences.forEach((persistence) => {\n        persistState(store.$state, persistence);\n      });\n    };\n    store.$hydrate = ({ runHooks = true } = {}) => {\n      persistences.forEach((persistence) => {\n        const { beforeRestore, afterRestore } = persistence;\n        if (runHooks)\n          beforeRestore == null ? void 0 : beforeRestore(context);\n        hydrateStore(store, persistence);\n        if (runHooks)\n          afterRestore == null ? void 0 : afterRestore(context);\n      });\n    };\n    persistences.forEach((persistence) => {\n      const { beforeRestore, afterRestore } = persistence;\n      beforeRestore == null ? void 0 : beforeRestore(context);\n      hydrateStore(store, persistence);\n      afterRestore == null ? void 0 : afterRestore(context);\n      store.$subscribe(\n        (_mutation, state) => {\n          persistState(state, persistence);\n        },\n        {\n          detached: true\n        }\n      );\n    });\n  };\n}\n\n// src/index.ts\nvar src_default = createPersistedState();\nexport {\n  createPersistedState,\n  src_default as default\n};\n","broadcast:\n  ct:\n    editor: Editor*in | Editor*innen\ncatalog:\n  ct:\n    mood: Stimmung | Stimmungen\n    media: Track | Tracks\n    artist: Künstler*in | Künstler*innen\n    release: Album | Alben\n    playlist: Show | Shows\n    numMedia: 1 Track | {count} Tracks\n  list:\n    playAllTracks: Alle Tracks spielen | Alle {count} Tracks spielen\nmenu:\n  accountSettings: Konto Einstellungen\n  admin: Admin\n  userVouchers: Gutschein Codes\n  home: Radio\n#  discover: Discover\n  discover: Erkunden\n  collection: Favoriten\n  program: Programm\n  reception: Empfang\n  shop: Shop\n  faq: FAQ\n  about: Über uns\n  contact: Kontakt\n  donate: Spenden\n  developers: Entwickler*innen\n  imprint: Impressum\n  dpp: Datenschutzerklärung\n  terms: Nutzungsbedingungen\n  login: Anmelden\n  logout: Abmelden\nnavigation:\n  search:\n    title: Suche\n    noResults: Sorry! Keine Einträge gefunden.\n    cta: Durchsuche das open broadcast Archiv.\n    info: Du kannst nach Tracks, Releases oder Namen von Künstler*innen suchen.\nsearch:\n  search: Suche\nprogram:\n  timeInFuture:\n    lead: Delorean error.\n    cta: Back to {0}!\n    ctaText: now\ntext:\n  duration: Dauer\n  airtime: Airtime\ndatetime:\n  today: heute\nplayer:\n  enqueueNext: Als nächstes spielen\n  enqueueEnd: Ans Ende der Warteschlange\n  favoritesAdd: Zu meinen Favoriten\n  favoritesRemove: Aus Favoriten entfernen\n  bannedAdd: Mag ich nicht\n  bannedRemove: Mag ich doch\n  share: Teilen\nrating:\n#  downvoteTitle: Was stört dich?\n  downvoteTitle: Feedback\n  downvoteLead: \"Wir feilen ständig am Programm – und deine Rückmeldung macht unser Radio noch besser.\\n\n                 Was können wir noch feiner abstimmen?\"\n  downvoteScope:\n    track: Dieser Titel gefällt mir einfach nicht\n    genre: Diese Musikrichtung ist nicht mein Geschmack\n    emission: Diese Sendung spricht mich nicht an\n    daytime: Die Musikrichtung oder Sendung passt nicht zur Tageszeit\n    repetition: Ich habe diesen Titel schon zu oft gehört\n  downvoteComment: Magst du uns noch etwas dazu sagen?\n  downvoteThankYou: Vielen Dank für dein feedback!\npullToRefresh:\n  pull: Pull down to refresh\n  release: Release to refresh\n  refreshing: Refreshing\nloading:\n  noResults:\n    lead: Keine Resultate.\n    cta: Please refine or {0} your search.\n    ctaText: clear\n  noFavorites:\n    lead: Du hast noch keine Favoriten.\n    cta: Go ahead and {0} some!\n    ctaText: discover\nformActions:\n  save: Speichern\n  send: Senden\naccount:\n  title: Konto\n  auth:\n    login: Anmelden\n    register: Konto erstellen\n    password: Passwort\n    sendToken: Code senden\n    socialAccount: Mit einem bestehenden Konto\n    usingEmail: Mit deiner E-Mail Adresse\n    forgotPassword: Passwort vergessen?\n    resetPassword: Login mit E-Mail-Bestätigung\n    accountExists: Konto bereits vorhanden. Klicke auf \"Code senden\"\n    loginToken: Login-Code\n    loginEmailSent:\n      title: Eine E-Mail mit einem Login-Code wurde an {0} geschickt.\n      note: Falls du keine Nachricht erhalten hast, prüfe deinen Spam-Ordner.\n    loginEmailSendAgain: E-Mail erneut senden\n    social:\n      continueWith: Weiter mit {0}\n  legal:\n    terms:\n      term: Mit deiner Anmeldung stimmst du den {0} und der {1} zu.\n      tos: Nutzungsbedingungen\n      pp: Datenschutzerklärung\n    availability:\n      note: \"{0}Derzeit können wir unseren On-Demand-Service nur für Menschen mit Wohnsitz in der Schweiz zugänglich machen.\n            Mehr dazu unter {1}.\"\n      faq: FAQ\n  qrcode:\n    title: Mobile Login\n    info: Scanne den QR-Code mit deinem Mobiltelefon\n  serviceInfoAside:\n    title: Get eclectic!\n    bullet1: Streaming in bester Qualität\n    bullet2: Immer informiert\n    bullet3: Höre unseren ganzen Katalog – wann und wo{0} du willst\n  settings:\n    subscription:\n      title: Guthaben für kostenpflichtige Inhalte\n    stream:\n      title: Streaming Qualität / Umweltbelastung\n      infoLong: \"Per \\\"default\\\" liefern wir dir unseren Content in der bestmöglichen Qualität.\\n\n                 Die Übertragungsrate wird laufend an die Qualität deiner Internetverbindung angepasst.\"\n      infoShort: \"Zur Minimierung deines Datenvolumens / der Umweltbelastung kannst du eine maximale\n                  Übertragungsrate festlegen:\"\n    email:\n      title: E-Mail\n      labelEmail: E-Mail Adresse\n    password:\n      title: Passwort\n      labelPassword: Neues Passwort\n      placeholderPassword: Passwort\n      labelPasswordConfirm: Passwort bestătigen\n      placeholderPasswordConfirm: Passwort\n    address:\n      title: Adresse\n      labelLine1: Adresse\n      labelLine2: Zusatz\n      labelPostalCode: PLZ\n      labelCity: Ort\n      labelCountry: Land\n    personal:\n      title: Persönliche Angaben\n      labelName: Name\n      labelSurname: Nachname\n      labelYearOfBirth: Jahrgang\n      labelFavoriteVenue: Lieblingsclub\n      gender:\n        label: Pronomen\n        options:\n          female: sie/ihr\n          male: er/sein\n          other: they/their\n    newsletter:\n      title: Newsletter\n    social:\n      title: Verbundene Konten\n      info: Verbundene Logins\n      connect: verbinden\n      disconnect: trennen\n      loginAccounts:\n        title: Login-Konten\n      streamingAccounts:\n        title: Streaming-Konten\n        info: \"Verbinde deine streaming-Konten:\\n\n         Deine Library wird automatisch synchronisiert und deine Likes werden als  \n         Playliste \\\"open broadcast\\\" gespeichert.\"\n    donations:\n      title: Spenden\n      info: Montaliche Spenden helfen uns, den Betrieb von open broadcast zu finanzieren.\nsubscription:\n  credits: Guthaben\n  # temporary\n  noCredits: Kein Guthaben\n#  noCreditsNote: Aus rechtlichen Gründen ist im Moment kein Kauf von Guthaben möglich. TV-EH-VU\n  noCreditsNote: \"Aus rechtlichen Gründen ist im Moment kein Kauf von Guthaben möglich.\\n\n         Du kannst jedoch einen Gratis-Code einlösen, um Guthaben zu erhalten.\"\n  #\n  creditsExpired: Guthaben abgelaufen\n  numDaysRemaining: 1 Tag | {count} Tage\n  creditsUntilDate: Guthaben bis am {0}\n  validNumDays: 1 Tag | {count} Tage\n  validUntilDate: Gültig bis am {0}\n  numUsedAndTotal: \"eingelöst: {0}/{1}\"\n  voucher:\n    code: Gratis-Code\n    redeemCode: Gratis-Code Einlösen\n    invalidCode: Ungültiger Gutschein-Code\n    redeem: Jetzt Einlösen\n    authenticateAndRedeem: Anmelden und einlösen\n  subscribe:\n    title: Guthaben\n    lead: \"Keine Abos - dafür Prepaid-Guthaben!\\n\n           Die von uns gespielten Inhalte jederzeit hören für {0} pro Monat.\"\n    ctaVoucher:\n      text: Hast du einen {0}?\n      button: Gratis-Code\n    ctaBuy:\n      text: Du hast keinen Code? {0}\n      button: Guthaben kaufen.\n    # SubscribePlan.vue\n    legalRestrictionInfo: |\n        Momentan kannst du dich nicht für unseren On-Demand-Service anmelden.\n        Wir warten auf rechtliche Klärungen damit wir vollen Zugang anbieten können.\n    total:\n      legal: Total inkl. aller Steuern und Gebühren\n    payNow: Jetzt Bezahlen\n    # SubscribeVoucher.vue\n    redeemNow: Jetzt Einlösen\ngeolocation:\n  availability:\n    note: Derzeit können wir unseren On-Demand-Dienst nur für Personen mit Wohnsitz in der Schweiz anbieten.\n    faqNote: Mehr dazu im unter {0}.\n    faqLabel: FAQ\nbrowserCompatibility:\n  notSupported:\n    note: Es scheint, dass dein Browser ({0}) nicht offiziell unterstützt wird.\n    faqNote: Informationen dazu unter {0}\n    faqLabel: FAQ\npages:\n  pageNotFound: Seite nicht gefunden\ndonate:\n  cta:\n    title: Spende noch heute\n    lead: Deine Unterstützung zählt!\n    confirm: Spenden\n    dismiss: Jetzt nicht\n  panel:\n    title: Unterstütze unsere Arbeit\n    lead: Deine Beiträge helfen uns, das Projekt am Leben zu erhalten!\n    kindSingle: Einmalig\n    kindRecurring: Monatlich\n    success:\n      title: Vielen Dank!\n      lead: Deine Spende hilft uns, ein unabhängiges und vielfältiges Radioprogramm am Leben zu\n            erhalten.\n      lead2: ❤️❤️❤️❤️❤️❤️\n      lead3: Mit deinem Beitrag ermöglichst du die fortlaufende, sorgfältige Musikkuration jenseits\n             des Mainstreams – handverlesen, überraschend und frei von kommerziellen Interessen.\n    activeDonation:\n      title: Vielen Dank!\n      lead: Du hast bereits eine wiederkehrende Spende eingerichtet.\n      lead2: Wenn du deine regelmäßige Spende ändern oder kündigen möchtest, \n             findest du alles Nötige in deinem Konto.\n  flow:\n    continue: Weiter\n    back: Zurück\n    single:\n      customAmount: Individueller Betrag\n    recurring:\n      title: Möchtest du monatlich spenden?\n      lead: \"Bitte melde dich zuerst an oder erstelle ein Konto — \n             das hilft dir, falls du deine Spende später einmal kündigen möchtest. 😉\"","broadcast:\n  ct:\n    editor: Editor | Editors\ncatalog:\n  ct:\n    mood: Mood | Moods\n    media: Track | Tracks\n    artist: Artist | Artists\n    release: Album | Albums\n    playlist: Show | Shows\n    numMedia: 1 Track | {count} Tracks\n  list:\n#    playAllTracks: Track spielen | Alle {count} Tracks spielen\n    playAllTracks: Play all tracks | Play all {count} tracks\nmenu:\n  accountSettings: Account Settings\n  admin: Admin\n  userVouchers: Coupon Codes\n  home: Radio\n  discover: Discover\n  collection: Favourites\n  program: Programme\n  reception: Reception\n  shop: Shop\n  faq: FAQ\n  about: About\n  contact: Contact\n  donate: Donate\n  developers: Developers\n  imprint: Imprint\n  dpp: Privacy Policy\n  terms: Terms & Conditions\n  login: Sign in\n  logout: Sign out\nnavigation:\n  search:\n    title: Search\n    noResults: Sorry! No entries found.\n    cta: Search the open broadcast archive.\n    info: You can search by track, release or artist name.\nsearch:\n  search: Search\nprogram:\n  timeInFuture:\n    lead: Delorean error.\n    cta: Back to {0}!\n    ctaText: now\ntext:\n  duration: Duration\n  airtime: Airtime\ndatetime:\n  today: Today\nplayer:\n  enqueueNext: Play next\n  enqueueEnd: At the end of the queue\n  favoritesAdd: To my favourites\n  favoritesRemove: Remove from favorites\n  bannedAdd: I do not like it\n  bannedRemove: I like it\n  share: Share\nrating:\n  downvoteTitle: What bothers you?\n  downvoteLead: In order to constantly improve the radio programme, we need your feedback!\n  downvoteScope:\n    track: I don't like this title\n    genre: I don't like this kind of music\n    emission: I don't like this show\n    daytime: The track or show does not match the time of day\n    repetition: I've heard this track too many times\n  downvoteComment: Comment\n  downvoteThankYou: Thank you for your feedback!\npullToRefresh:\n  pull: Pull down to refresh\n  release: Release to refresh\n  refreshing: refreshing\nloading:\n  noResults:\n    lead: No results.\n    cta: Please refine or {0} your search.\n    ctaText: clear\n  noFavorites:\n    lead: You don't have any favorites yet.\n    cta: Go ahead and {0} some!\n    ctaText: discover\nformActions:\n  save: Save\n  send: Send\naccount:\n  title: Account\n  auth:\n    login: Sign in\n    register: Create account\n    password: Password\n    sendToken: Send code\n    socialAccount: With an existing account\n    usingEmail: With your email address\n    forgotPassword: Forgot Password?\n    resetPassword: Login with email confirmation\n    accountExists: Account already exists. Click on \"Send code\"\n    loginToken: Login code\n    loginEmailSent:\n      title: An email with a login code was sent to {0}.\n      note: If you haven't received a message, check your spam folder.\n    loginEmailSendAgain: Resend email\n    social:\n      continueWith: Continue with {0}\n  legal:\n    terms:\n      term: By signing up you agree to the {0} and {1}.\n      tos: Terms of Service\n      pp: Privacy Policy\n    availability:\n      note: \"{0} Currently we can only provide access to our on-demand service for people living in Switzerland. More about in the {1} section.\"\n      faq: FAQ\n  qrcode:\n    title: Mobile login\n    info: Scan the QR code with your mobile phone\n  serviceInfoAside:\n    title: Get eclectic!\n    bullet1: High-Quality Streaming\n    bullet2: Always up to date\n    bullet3: Listen to the whole catalog when & where{0} you want\n  settings:\n    subscription:\n      title: Credit for Paid Content\n    stream:\n      title: Streaming quality / environmental impact\n      infoLong: \"By \\\"default\\\" we deliver our content in the best possible quality.\\n The transfer rate is continuously adjusted to the quality of your internet connection.\"\n      infoShort: \"To minimize your data volume / environmental impact, you can set a maximum transfer rate:\"\n    email:\n      title: E-mail\n      labelEmail: E-mail address\n    password:\n      title: Password\n      labelPassword: New Password\n      placeholderPassword: Password\n      labelPasswordConfirm: Confirm Password\n      placeholderPasswordConfirm: Password\n    address:\n      title: address\n      labelLine1: address\n      labelLine2: additive\n      labelPostalCode: Postcode\n      labelCity: location\n      labelCountry: country\n    personal:\n      title: Personal Information\n      labelName: Name\n      labelSurname: Surname\n      labelYearOfBirth: Year of birth\n      labelFavoriteVenue: Favorite club or venue\n      gender:\n        label: Pronoun\n        options:\n          female: she/her\n          male: he/his\n          other: they/them\n    newsletter:\n      title: Newsletter\n    social:\n      title: Connected accounts\n      info: Connected login accounts  # TODO: Text needed\n      connect: Connect\n      disconnect: Disconnect\n      loginAccounts:\n        title: Login accounts\n      streamingAccounts:\n        title: Streaming accounts\n        info: Connect your streaming accounts  # TODO: Text needed\n    donations:\n      title: Donations\nsubscription:\n  credits: Credits\n  # temporary\n  noCredits: No Credits\n  noCreditsNote: For legal reasons it is currently not possible to buy credits.\n  #\n  creditsExpired: Credit expired\n  numDaysRemaining: 1 day | {count} days\n  creditsUntilDate: Balance until {0}\n  validNumDays: 1 day | {count} days\n  validUntilDate: Valid until {0}\n  numUsedAndTotal: \"redeemed: {0}/{1}\"\n  voucher:\n    code: Voucher code\n    redeemCode: Redeem Voucher\n    invalidCode: Invalid Coupon Code\n    redeem: Redeem now\n    authenticateAndRedeem: Sign up and redeem\n  subscribe:\n    title: Credits\n    lead: \"No subscriptions - but prepaid credit!\\n Listen to the content we play anytime for {0} per month.\"\n    ctaVoucher:\n      text: Do you have a {0}?\n      button: Voucher code\n    ctaBuy:\n      text: Don't have a code? {0}\n      button: Buy credits.\n    # SubscribePlan.vue\n    legalRestrictionInfo: |\n        We're sorry to say that you can't subscribe to our on-demand service at the moment.\n        We're waiting for some legal clarification before we can offer full access.\n    total:\n      legal: Total including all taxes and fees\n    payNow: Pay now\n    # SubscribeVoucher.vue\n    redeemNow: Redeem Now\ngeolocation:\n  availability:\n    note: Currently we can only provide access to our on-demand service for people living in Switzerland.\n    faqNote: More about in the {0} section.\n    faqLabel: FAQ\nbrowserCompatibility:\n  notSupported:\n    note: It looks like your browser ({0}) is not officially supported.\n    faqNote: Read more in our {0} section.\n    faqLabel: FAQ\npages:\n  pageNotFound: Page not found\ndonate:\n  cta:\n    title: Donate today\n    lead: Your support matters!\n    confirm: Donate\n    dismiss: Not now\n  panel:\n    title: Support our work\n    lead: Your contributions help us keep the project alive!\n    kindSingle: One-time\n    kindRecurring: Monthly\n    success:\n      title: Thank you!\n      lead: Your donation helps us keep an independent and diverse radio program alive.\n      lead2: ❤️❤️❤️❤️❤️❤️\n      lead3: With your contribution you make ongoing, carefully curated music possible —\n             beyond the mainstream, handpicked, surprising, and free from commercial interests.\n    activeDonation:\n      title: Thank you!\n      lead: You’ve already set up a recurring donation.\n      lead2: If you’d like to change or cancel your regular donation, \n             you’ll find everything you need in your account.\n  flow:\n    continue: Continue\n    back: Back\n    single:\n      customAmount: Custom amount\n    recurring:\n      title: Would you like to donate monthly?\n      lead: \"Please log in or create an account first —\n             this helps if you ever want to cancel your donation later. 😉\"\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, provide, inject, isVue3, version, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, isVue2, set as set$1, getCurrentInstance, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nvar __defProp$b = Object.defineProperty;\nvar __defProps$8 = Object.defineProperties;\nvar __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$d = Object.getOwnPropertySymbols;\nvar __hasOwnProp$d = Object.prototype.hasOwnProperty;\nvar __propIsEnum$d = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$b = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$d.call(b, prop))\n      __defNormalProp$b(a, prop, b[prop]);\n  if (__getOwnPropSymbols$d)\n    for (var prop of __getOwnPropSymbols$d(b)) {\n      if (__propIsEnum$d.call(b, prop))\n        __defNormalProp$b(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));\nfunction computedEager(fn, options) {\n  var _a;\n  const result = shallowRef();\n  watchEffect(() => {\n    result.value = fn();\n  }, __spreadProps$8(__spreadValues$b({}, options), {\n    flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n  }));\n  return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n  let v = void 0;\n  let track;\n  let trigger;\n  const dirty = ref(true);\n  const update = () => {\n    dirty.value = true;\n    trigger();\n  };\n  watch(source, update, { flush: \"sync\" });\n  const get = typeof fn === \"function\" ? fn : fn.get;\n  const set = typeof fn === \"function\" ? void 0 : fn.set;\n  const result = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        if (dirty.value) {\n          v = get();\n          dirty.value = false;\n        }\n        track();\n        return v;\n      },\n      set(v2) {\n        set == null ? void 0 : set(v2);\n      }\n    };\n  });\n  if (Object.isExtensible(result))\n    result.trigger = update;\n  return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n  if (getCurrentScope()) {\n    onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nfunction createEventHook() {\n  const fns = /* @__PURE__ */ new Set();\n  const off = (fn) => {\n    fns.delete(fn);\n  };\n  const on = (fn) => {\n    fns.add(fn);\n    const offFn = () => off(fn);\n    tryOnScopeDispose(offFn);\n    return {\n      off: offFn\n    };\n  };\n  const trigger = (param) => {\n    return Promise.all(Array.from(fns).map((fn) => fn(param)));\n  };\n  return {\n    on,\n    off,\n    trigger\n  };\n}\n\nfunction createGlobalState(stateFactory) {\n  let initialized = false;\n  let state;\n  const scope = effectScope(true);\n  return (...args) => {\n    if (!initialized) {\n      state = scope.run(() => stateFactory(...args));\n      initialized = true;\n    }\n    return state;\n  };\n}\n\nfunction createInjectionState(composable) {\n  const key = Symbol(\"InjectionState\");\n  const useProvidingState = (...args) => {\n    const state = composable(...args);\n    provide(key, state);\n    return state;\n  };\n  const useInjectedState = () => inject(key);\n  return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n  let subscribers = 0;\n  let state;\n  let scope;\n  const dispose = () => {\n    subscribers -= 1;\n    if (scope && subscribers <= 0) {\n      scope.stop();\n      state = void 0;\n      scope = void 0;\n    }\n  };\n  return (...args) => {\n    subscribers += 1;\n    if (!state) {\n      scope = effectScope(true);\n      state = scope.run(() => composable(...args));\n    }\n    tryOnScopeDispose(dispose);\n    return state;\n  };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n  if (!isVue3 && !version.startsWith(\"2.7.\")) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] extendRef only works in Vue 2.7 or above.\");\n    return;\n  }\n  for (const [key, value] of Object.entries(extend)) {\n    if (key === \"value\")\n      continue;\n    if (isRef(value) && unwrap) {\n      Object.defineProperty(ref, key, {\n        get() {\n          return value.value;\n        },\n        set(v) {\n          value.value = v;\n        },\n        enumerable\n      });\n    } else {\n      Object.defineProperty(ref, key, { value, enumerable });\n    }\n  }\n  return ref;\n}\n\nfunction get(obj, key) {\n  if (key == null)\n    return unref(obj);\n  return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n  return unref(v) != null;\n}\n\nvar __defProp$a = Object.defineProperty;\nvar __getOwnPropSymbols$c = Object.getOwnPropertySymbols;\nvar __hasOwnProp$c = Object.prototype.hasOwnProperty;\nvar __propIsEnum$c = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$a = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$c.call(b, prop))\n      __defNormalProp$a(a, prop, b[prop]);\n  if (__getOwnPropSymbols$c)\n    for (var prop of __getOwnPropSymbols$c(b)) {\n      if (__propIsEnum$c.call(b, prop))\n        __defNormalProp$a(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = __spreadValues$a({}, obj);\n    Object.defineProperty(clone, Symbol.iterator, {\n      enumerable: false,\n      value() {\n        let index = 0;\n        return {\n          next: () => ({\n            value: arr[index++],\n            done: index > arr.length\n          })\n        };\n      }\n    });\n    return clone;\n  } else {\n    return Object.assign([...arr], obj);\n  }\n}\n\nfunction toValue(r) {\n  return typeof r === \"function\" ? r() : unref(r);\n}\nconst resolveUnref = toValue;\n\nfunction reactify(fn, options) {\n  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue;\n  return function(...args) {\n    return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n  };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n  let keys = [];\n  let options;\n  if (Array.isArray(optionsOrKeys)) {\n    keys = optionsOrKeys;\n  } else {\n    options = optionsOrKeys;\n    const { includeOwnProperties = true } = optionsOrKeys;\n    keys.push(...Object.keys(obj));\n    if (includeOwnProperties)\n      keys.push(...Object.getOwnPropertyNames(obj));\n  }\n  return Object.fromEntries(\n    keys.map((key) => {\n      const value = obj[key];\n      return [\n        key,\n        typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n      ];\n    })\n  );\n}\n\nfunction toReactive(objectRef) {\n  if (!isRef(objectRef))\n    return reactive(objectRef);\n  const proxy = new Proxy({}, {\n    get(_, p, receiver) {\n      return unref(Reflect.get(objectRef.value, p, receiver));\n    },\n    set(_, p, value) {\n      if (isRef(objectRef.value[p]) && !isRef(value))\n        objectRef.value[p].value = value;\n      else\n        objectRef.value[p] = value;\n      return true;\n    },\n    deleteProperty(_, p) {\n      return Reflect.deleteProperty(objectRef.value, p);\n    },\n    has(_, p) {\n      return Reflect.has(objectRef.value, p);\n    },\n    ownKeys() {\n      return Object.keys(objectRef.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    }\n  });\n  return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n  return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(\n    () => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0])))\n  );\n}\n\nconst isClient = typeof window !== \"undefined\";\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n  if (!condition)\n    console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n  var _a;\n  return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /* @__PURE__ */ /iP(ad|hone|od)/.test(window.navigator.userAgent);\n}\n\nfunction createFilterWrapper(filter, fn) {\n  function wrapper(...args) {\n    return new Promise((resolve, reject) => {\n      Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n    });\n  }\n  return wrapper;\n}\nconst bypassFilter = (invoke) => {\n  return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n  let timer;\n  let maxTimer;\n  let lastRejector = noop;\n  const _clearTimeout = (timer2) => {\n    clearTimeout(timer2);\n    lastRejector();\n    lastRejector = noop;\n  };\n  const filter = (invoke) => {\n    const duration = toValue(ms);\n    const maxDuration = toValue(options.maxWait);\n    if (timer)\n      _clearTimeout(timer);\n    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n      if (maxTimer) {\n        _clearTimeout(maxTimer);\n        maxTimer = null;\n      }\n      return Promise.resolve(invoke());\n    }\n    return new Promise((resolve, reject) => {\n      lastRejector = options.rejectOnCancel ? reject : resolve;\n      if (maxDuration && !maxTimer) {\n        maxTimer = setTimeout(() => {\n          if (timer)\n            _clearTimeout(timer);\n          maxTimer = null;\n          resolve(invoke());\n        }, maxDuration);\n      }\n      timer = setTimeout(() => {\n        if (maxTimer)\n          _clearTimeout(maxTimer);\n        maxTimer = null;\n        resolve(invoke());\n      }, duration);\n    });\n  };\n  return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true, rejectOnCancel = false) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  let lastRejector = noop;\n  let lastValue;\n  const clear = () => {\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n      lastRejector();\n      lastRejector = noop;\n    }\n  };\n  const filter = (_invoke) => {\n    const duration = toValue(ms);\n    const elapsed = Date.now() - lastExec;\n    const invoke = () => {\n      return lastValue = _invoke();\n    };\n    clear();\n    if (duration <= 0) {\n      lastExec = Date.now();\n      return invoke();\n    }\n    if (elapsed > duration && (leading || !isLeading)) {\n      lastExec = Date.now();\n      invoke();\n    } else if (trailing) {\n      lastValue = new Promise((resolve, reject) => {\n        lastRejector = rejectOnCancel ? reject : resolve;\n        timer = setTimeout(() => {\n          lastExec = Date.now();\n          isLeading = true;\n          resolve(invoke());\n          clear();\n        }, Math.max(0, duration - elapsed));\n      });\n    }\n    if (!leading && !timer)\n      timer = setTimeout(() => isLeading = true, duration);\n    isLeading = false;\n    return lastValue;\n  };\n  return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n  const isActive = ref(true);\n  function pause() {\n    isActive.value = false;\n  }\n  function resume() {\n    isActive.value = true;\n  }\n  const eventFilter = (...args) => {\n    if (isActive.value)\n      extendFilter(...args);\n  };\n  return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nconst directiveHooks = {\n  mounted: isVue3 ? \"mounted\" : \"inserted\",\n  updated: isVue3 ? \"updated\" : \"componentUpdated\",\n  unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n  return new Promise((resolve, reject) => {\n    if (throwOnTimeout)\n      setTimeout(() => reject(reason), ms);\n    else\n      setTimeout(resolve, ms);\n  });\n}\nfunction identity(arg) {\n  return arg;\n}\nfunction createSingletonPromise(fn) {\n  let _promise;\n  function wrapper() {\n    if (!_promise)\n      _promise = fn();\n    return _promise;\n  }\n  wrapper.reset = async () => {\n    const _prev = _promise;\n    _promise = void 0;\n    if (_prev)\n      await _prev;\n  };\n  return wrapper;\n}\nfunction invoke(fn) {\n  return fn();\n}\nfunction containsProp(obj, ...props) {\n  return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n  var _a;\n  if (typeof target === \"number\")\n    return target + delta;\n  const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = parseFloat(value) + delta;\n  if (Number.isNaN(result))\n    return target;\n  return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n  return keys.reduce((n, k) => {\n    if (k in obj) {\n      if (!omitUndefined || obj[k] !== void 0)\n        n[k] = obj[k];\n    }\n    return n;\n  }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n  return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n    return (!omitUndefined || value !== void 0) && !keys.includes(key);\n  }));\n}\nfunction objectEntries(obj) {\n  return Object.entries(obj);\n}\n\nfunction toRef(...args) {\n  if (args.length !== 1)\n    return toRef$1(...args);\n  const r = args[0];\n  return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n  return customRef((track, trigger) => {\n    let value = defaultValue;\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = defaultValue;\n      trigger();\n    }, toValue(afterMs));\n    tryOnScopeDispose(() => {\n      clearTimeout(timer);\n    });\n    return {\n      get() {\n        track();\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n        trigger();\n        clearTimeout(timer);\n        timer = resetAfter();\n      }\n    };\n  });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n  return createFilterWrapper(\n    debounceFilter(ms, options),\n    fn\n  );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n  const debounced = ref(value.value);\n  const updater = useDebounceFn(() => {\n    debounced.value = value.value;\n  }, ms, options);\n  watch(value, () => updater());\n  return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n  return computed({\n    get() {\n      var _a;\n      return (_a = source.value) != null ? _a : defaultValue;\n    },\n    set(value) {\n      source.value = value;\n    }\n  });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n  return createFilterWrapper(\n    throttleFilter(ms, trailing, leading, rejectOnCancel),\n    fn\n  );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n  if (delay <= 0)\n    return value;\n  const throttled = ref(value.value);\n  const updater = useThrottleFn(() => {\n    throttled.value = value.value;\n  }, delay, trailing, leading);\n  watch(value, () => updater());\n  return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n  let source = initial;\n  let track;\n  let trigger;\n  const ref = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        return get();\n      },\n      set(v) {\n        set(v);\n      }\n    };\n  });\n  function get(tracking = true) {\n    if (tracking)\n      track();\n    return source;\n  }\n  function set(value, triggering = true) {\n    var _a, _b;\n    if (value === source)\n      return;\n    const old = source;\n    if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n      return;\n    source = value;\n    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n    if (triggering)\n      trigger();\n  }\n  const untrackedGet = () => get(false);\n  const silentSet = (v) => set(v, false);\n  const peek = () => get(false);\n  const lay = (v) => set(v, false);\n  return extendRef(\n    ref,\n    {\n      get,\n      set,\n      untrackedGet,\n      silentSet,\n      peek,\n      lay\n    },\n    { enumerable: true }\n  );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n  if (args.length === 2) {\n    const [ref, value] = args;\n    ref.value = value;\n  }\n  if (args.length === 3) {\n    if (isVue2) {\n      set$1(...args);\n    } else {\n      const [target, key, value] = args;\n      target[key] = value;\n    }\n  }\n}\n\nfunction syncRef(left, right, options = {}) {\n  var _a, _b;\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options;\n  let watchLeft;\n  let watchRight;\n  const transformLTR = (_a = transform.ltr) != null ? _a : (v) => v;\n  const transformRTL = (_b = transform.rtl) != null ? _b : (v) => v;\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchLeft = watch(\n      left,\n      (newValue) => right.value = transformLTR(newValue),\n      { flush, deep, immediate }\n    );\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchRight = watch(\n      right,\n      (newValue) => left.value = transformRTL(newValue),\n      { flush, deep, immediate }\n    );\n  }\n  return () => {\n    watchLeft == null ? void 0 : watchLeft();\n    watchRight == null ? void 0 : watchRight();\n  };\n}\n\nfunction syncRefs(source, targets, options = {}) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true\n  } = options;\n  if (!Array.isArray(targets))\n    targets = [targets];\n  return watch(\n    source,\n    (newValue) => targets.forEach((target) => target.value = newValue),\n    { flush, deep, immediate }\n  );\n}\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$7 = Object.defineProperties;\nvar __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$b.call(b, prop))\n      __defNormalProp$9(a, prop, b[prop]);\n  if (__getOwnPropSymbols$b)\n    for (var prop of __getOwnPropSymbols$b(b)) {\n      if (__propIsEnum$b.call(b, prop))\n        __defNormalProp$9(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));\nfunction toRefs(objectRef) {\n  if (!isRef(objectRef))\n    return toRefs$1(objectRef);\n  const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {};\n  for (const key in objectRef.value) {\n    result[key] = customRef(() => ({\n      get() {\n        return objectRef.value[key];\n      },\n      set(v) {\n        if (Array.isArray(objectRef.value)) {\n          const copy = [...objectRef.value];\n          copy[key] = v;\n          objectRef.value = copy;\n        } else {\n          const newObject = __spreadProps$7(__spreadValues$9({}, objectRef.value), { [key]: v });\n          Object.setPrototypeOf(newObject, objectRef.value);\n          objectRef.value = newObject;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true) {\n  if (getCurrentInstance())\n    onBeforeMount(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn) {\n  if (getCurrentInstance())\n    onBeforeUnmount(fn);\n}\n\nfunction tryOnMounted(fn, sync = true) {\n  if (getCurrentInstance())\n    onMounted(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn) {\n  if (getCurrentInstance())\n    onUnmounted(fn);\n}\n\nfunction createUntil(r, isNot = false) {\n  function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        r,\n        (v) => {\n          if (condition(v) !== isNot) {\n            stop == null ? void 0 : stop();\n            resolve(v);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop())\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBe(value, options) {\n    if (!isRef(value))\n      return toMatch((v) => v === value, options);\n    const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        [r, value],\n        ([v1, v2]) => {\n          if (isNot !== (v1 === v2)) {\n            stop == null ? void 0 : stop();\n            resolve(v1);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n          stop == null ? void 0 : stop();\n          return toValue(r);\n        })\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBeTruthy(options) {\n    return toMatch((v) => Boolean(v), options);\n  }\n  function toBeNull(options) {\n    return toBe(null, options);\n  }\n  function toBeUndefined(options) {\n    return toBe(void 0, options);\n  }\n  function toBeNaN(options) {\n    return toMatch(Number.isNaN, options);\n  }\n  function toContains(value, options) {\n    return toMatch((v) => {\n      const array = Array.from(v);\n      return array.includes(value) || array.includes(toValue(value));\n    }, options);\n  }\n  function changed(options) {\n    return changedTimes(1, options);\n  }\n  function changedTimes(n = 1, options) {\n    let count = -1;\n    return toMatch(() => {\n      count += 1;\n      return count >= n;\n    }, options);\n  }\n  if (Array.isArray(toValue(r))) {\n    const instance = {\n      toMatch,\n      toContains,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  } else {\n    const instance = {\n      toMatch,\n      toBe,\n      toBeTruthy,\n      toBeNull,\n      toBeNaN,\n      toBeUndefined,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  }\n}\nfunction until(r) {\n  return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n  return value === othVal;\n}\nfunction useArrayDifference(...args) {\n  var _a;\n  const list = args[0];\n  const values = args[1];\n  let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n  if (typeof compareFn === \"string\") {\n    const key = compareFn;\n    compareFn = (value, othVal) => value[key] === othVal[key];\n  }\n  return computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n}\n\nfunction useArrayEvery(list, fn) {\n  return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n  return computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n  return computed(\n    () => toValue(\n      toValue(list).find((element, index, array) => fn(toValue(element), index, array))\n    )\n  );\n}\n\nfunction useArrayFindIndex(list, fn) {\n  return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n  let index = arr.length;\n  while (index-- > 0) {\n    if (cb(arr[index], index, arr))\n      return arr[index];\n  }\n  return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n  return computed(\n    () => toValue(\n      !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))\n    )\n  );\n}\n\nfunction isArrayIncludesOptions(obj) {\n  return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n  var _a;\n  const list = args[0];\n  const value = args[1];\n  let comparator = args[2];\n  let formIndex = 0;\n  if (isArrayIncludesOptions(comparator)) {\n    formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n    comparator = comparator.comparator;\n  }\n  if (typeof comparator === \"string\") {\n    const key = comparator;\n    comparator = (element, value2) => element[key] === toValue(value2);\n  }\n  comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2);\n  return computed(\n    () => toValue(list).slice(formIndex).some(\n      (element, index, array) => comparator(toValue(element), toValue(value), index, toValue(array))\n    )\n  );\n}\n\nfunction useArrayJoin(list, separator) {\n  return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n  return computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n  const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n  return computed(() => {\n    const resolved = toValue(list);\n    return args.length ? resolved.reduce(reduceCallback, toValue(args[0])) : resolved.reduce(reduceCallback);\n  });\n}\n\nfunction useArraySome(list, fn) {\n  return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction uniq(array) {\n  return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n  return array.reduce((acc, v) => {\n    if (!acc.some((x) => fn(v, x, array)))\n      acc.push(v);\n    return acc;\n  }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n  return computed(() => {\n    const resolvedList = toValue(list).map((element) => toValue(element));\n    return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n  });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n  const count = ref(initialValue);\n  const {\n    max = Infinity,\n    min = -Infinity\n  } = options;\n  const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n  const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n  const get = () => count.value;\n  const set = (val) => count.value = Math.max(min, Math.min(max, val));\n  const reset = (val = initialValue) => {\n    initialValue = val;\n    return set(val);\n  };\n  return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n  let m = hours < 12 ? \"AM\" : \"PM\";\n  if (hasPeriod)\n    m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n  return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatDate(date, formatStr, options = {}) {\n  var _a;\n  const years = date.getFullYear();\n  const month = date.getMonth();\n  const days = date.getDate();\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n  const milliseconds = date.getMilliseconds();\n  const day = date.getDay();\n  const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n  const matches = {\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    MM: () => `${month + 1}`.padStart(2, \"0\"),\n    MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n    MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n    D: () => String(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    ss: () => `${seconds}`.padStart(2, \"0\"),\n    SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n    d: () => day,\n    dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n    ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n    dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n    A: () => meridiem(hours, minutes),\n    AA: () => meridiem(hours, minutes, false, true),\n    a: () => meridiem(hours, minutes, true),\n    aa: () => meridiem(hours, minutes, true, true)\n  };\n  return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n    var _a2;\n    return $1 || ((_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) || match;\n  });\n}\nfunction normalizeDate(date) {\n  if (date === null)\n    return /* @__PURE__ */ new Date(NaN);\n  if (date === void 0)\n    return /* @__PURE__ */ new Date();\n  if (date instanceof Date)\n    return new Date(date);\n  if (typeof date === \"string\" && !/Z$/i.test(date)) {\n    const d = date.match(REGEX_PARSE);\n    if (d) {\n      const m = d[2] - 1 || 0;\n      const ms = (d[7] || \"0\").substring(0, 3);\n      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n    }\n  }\n  return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n  return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  let timer = null;\n  const isActive = ref(false);\n  function clean() {\n    if (timer) {\n      clearInterval(timer);\n      timer = null;\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    clean();\n  }\n  function resume() {\n    const intervalValue = toValue(interval);\n    if (intervalValue <= 0)\n      return;\n    isActive.value = true;\n    if (immediateCallback)\n      cb();\n    clean();\n    timer = setInterval(cb, intervalValue);\n  }\n  if (immediate && isClient)\n    resume();\n  if (isRef(interval) || typeof interval === \"function\") {\n    const stopWatch = watch(interval, () => {\n      if (isActive.value && isClient)\n        resume();\n    });\n    tryOnScopeDispose(stopWatch);\n  }\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$a.call(b, prop))\n      __defNormalProp$8(a, prop, b[prop]);\n  if (__getOwnPropSymbols$a)\n    for (var prop of __getOwnPropSymbols$a(b)) {\n      if (__propIsEnum$a.call(b, prop))\n        __defNormalProp$8(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useInterval(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    immediate = true,\n    callback\n  } = options;\n  const counter = ref(0);\n  const update = () => counter.value += 1;\n  const reset = () => {\n    counter.value = 0;\n  };\n  const controls = useIntervalFn(\n    callback ? () => {\n      update();\n      callback(counter.value);\n    } : update,\n    interval,\n    { immediate }\n  );\n  if (exposeControls) {\n    return __spreadValues$8({\n      counter,\n      reset\n    }, controls);\n  } else {\n    return counter;\n  }\n}\n\nfunction useLastChanged(source, options = {}) {\n  var _a;\n  const ms = ref((_a = options.initialValue) != null ? _a : null);\n  watch(\n    source,\n    () => ms.value = timestamp(),\n    options\n  );\n  return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n  const {\n    immediate = true\n  } = options;\n  const isPending = ref(false);\n  let timer = null;\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function stop() {\n    isPending.value = false;\n    clear();\n  }\n  function start(...args) {\n    clear();\n    isPending.value = true;\n    timer = setTimeout(() => {\n      isPending.value = false;\n      timer = null;\n      cb(...args);\n    }, toValue(interval));\n  }\n  if (immediate) {\n    isPending.value = true;\n    if (isClient)\n      start();\n  }\n  tryOnScopeDispose(stop);\n  return {\n    isPending: readonly(isPending),\n    start,\n    stop\n  };\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$9.call(b, prop))\n      __defNormalProp$7(a, prop, b[prop]);\n  if (__getOwnPropSymbols$9)\n    for (var prop of __getOwnPropSymbols$9(b)) {\n      if (__propIsEnum$9.call(b, prop))\n        __defNormalProp$7(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useTimeout(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    callback\n  } = options;\n  const controls = useTimeoutFn(\n    callback != null ? callback : noop,\n    interval,\n    options\n  );\n  const ready = computed(() => !controls.isPending.value);\n  if (exposeControls) {\n    return __spreadValues$7({\n      ready\n    }, controls);\n  } else {\n    return ready;\n  }\n}\n\nfunction useToNumber(value, options = {}) {\n  const {\n    method = \"parseFloat\",\n    radix,\n    nanToZero\n  } = options;\n  return computed(() => {\n    let resolved = toValue(value);\n    if (typeof resolved === \"string\")\n      resolved = Number[method](resolved, radix);\n    if (nanToZero && isNaN(resolved))\n      resolved = 0;\n    return resolved;\n  });\n}\n\nfunction useToString(value) {\n  return computed(() => `${toValue(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n  const {\n    truthyValue = true,\n    falsyValue = false\n  } = options;\n  const valueIsRef = isRef(initialValue);\n  const _value = ref(initialValue);\n  function toggle(value) {\n    if (arguments.length) {\n      _value.value = value;\n      return _value.value;\n    } else {\n      const truthy = toValue(truthyValue);\n      _value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n      return _value.value;\n    }\n  }\n  if (valueIsRef)\n    return toggle;\n  else\n    return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n  let oldList = (options == null ? void 0 : options.immediate) ? [] : [\n    ...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)\n  ];\n  return watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = new Array(oldList.length);\n    const added = [];\n    for (const obj of newList) {\n      let found = false;\n      for (let i = 0; i < oldList.length; i++) {\n        if (!oldListRemains[i] && obj === oldList[i]) {\n          oldListRemains[i] = true;\n          found = true;\n          break;\n        }\n      }\n      if (!found)\n        added.push(obj);\n    }\n    const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n    cb(newList, oldList, added, removed, onCleanup);\n    oldList = [...newList];\n  }, options);\n}\n\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __objRest$5 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$8)\n    for (var prop of __getOwnPropSymbols$8(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchWithFilter(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$5(_a, [\n    \"eventFilter\"\n  ]);\n  return watch(\n    source,\n    createFilterWrapper(\n      eventFilter,\n      cb\n    ),\n    watchOptions\n  );\n}\n\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __objRest$4 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$7)\n    for (var prop of __getOwnPropSymbols$7(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchAtMost(source, cb, options) {\n  const _a = options, {\n    count\n  } = _a, watchOptions = __objRest$4(_a, [\n    \"count\"\n  ]);\n  const current = ref(0);\n  const stop = watchWithFilter(\n    source,\n    (...args) => {\n      current.value += 1;\n      if (current.value >= toValue(count))\n        nextTick(() => stop());\n      cb(...args);\n    },\n    watchOptions\n  );\n  return { count: current, stop };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$6.call(b, prop))\n      __defNormalProp$6(a, prop, b[prop]);\n  if (__getOwnPropSymbols$6)\n    for (var prop of __getOwnPropSymbols$6(b)) {\n      if (__propIsEnum$6.call(b, prop))\n        __defNormalProp$6(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nvar __objRest$3 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$6)\n    for (var prop of __getOwnPropSymbols$6(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchDebounced(source, cb, options = {}) {\n  const _a = options, {\n    debounce = 0,\n    maxWait = void 0\n  } = _a, watchOptions = __objRest$3(_a, [\n    \"debounce\",\n    \"maxWait\"\n  ]);\n  return watchWithFilter(\n    source,\n    cb,\n    __spreadProps$6(__spreadValues$6({}, watchOptions), {\n      eventFilter: debounceFilter(debounce, { maxWait })\n    })\n  );\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$5.call(b, prop))\n      __defNormalProp$5(a, prop, b[prop]);\n  if (__getOwnPropSymbols$5)\n    for (var prop of __getOwnPropSymbols$5(b)) {\n      if (__propIsEnum$5.call(b, prop))\n        __defNormalProp$5(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction watchDeep(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    __spreadProps$5(__spreadValues$5({}, options), {\n      deep: true\n    })\n  );\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$4.call(b, prop))\n      __defNormalProp$4(a, prop, b[prop]);\n  if (__getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(b)) {\n      if (__propIsEnum$4.call(b, prop))\n        __defNormalProp$4(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nvar __objRest$2 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchIgnorable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$2(_a, [\n    \"eventFilter\"\n  ]);\n  const filteredCb = createFilterWrapper(\n    eventFilter,\n    cb\n  );\n  let ignoreUpdates;\n  let ignorePrevAsyncUpdates;\n  let stop;\n  if (watchOptions.flush === \"sync\") {\n    const ignore = ref(false);\n    ignorePrevAsyncUpdates = () => {\n    };\n    ignoreUpdates = (updater) => {\n      ignore.value = true;\n      updater();\n      ignore.value = false;\n    };\n    stop = watch(\n      source,\n      (...args) => {\n        if (!ignore.value)\n          filteredCb(...args);\n      },\n      watchOptions\n    );\n  } else {\n    const disposables = [];\n    const ignoreCounter = ref(0);\n    const syncCounter = ref(0);\n    ignorePrevAsyncUpdates = () => {\n      ignoreCounter.value = syncCounter.value;\n    };\n    disposables.push(\n      watch(\n        source,\n        () => {\n          syncCounter.value++;\n        },\n        __spreadProps$4(__spreadValues$4({}, watchOptions), { flush: \"sync\" })\n      )\n    );\n    ignoreUpdates = (updater) => {\n      const syncCounterPrev = syncCounter.value;\n      updater();\n      ignoreCounter.value += syncCounter.value - syncCounterPrev;\n    };\n    disposables.push(\n      watch(\n        source,\n        (...args) => {\n          const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n          ignoreCounter.value = 0;\n          syncCounter.value = 0;\n          if (ignore)\n            return;\n          filteredCb(...args);\n        },\n        watchOptions\n      )\n    );\n    stop = () => {\n      disposables.forEach((fn) => fn());\n    };\n  }\n  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$3.call(b, prop))\n      __defNormalProp$3(a, prop, b[prop]);\n  if (__getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(b)) {\n      if (__propIsEnum$3.call(b, prop))\n        __defNormalProp$3(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nfunction watchImmediate(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    __spreadProps$3(__spreadValues$3({}, options), {\n      immediate: true\n    })\n  );\n}\n\nfunction watchOnce(source, cb, options) {\n  const stop = watch(source, (...args) => {\n    nextTick(() => stop());\n    return cb(...args);\n  }, options);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$2.call(b, prop))\n      __defNormalProp$2(a, prop, b[prop]);\n  if (__getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(b)) {\n      if (__propIsEnum$2.call(b, prop))\n        __defNormalProp$2(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nvar __objRest$1 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchPausable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter: filter\n  } = _a, watchOptions = __objRest$1(_a, [\n    \"eventFilter\"\n  ]);\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n  const stop = watchWithFilter(\n    source,\n    cb,\n    __spreadProps$2(__spreadValues$2({}, watchOptions), {\n      eventFilter\n    })\n  );\n  return { stop, pause, resume, isActive };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchThrottled(source, cb, options = {}) {\n  const _a = options, {\n    throttle = 0,\n    trailing = true,\n    leading = true\n  } = _a, watchOptions = __objRest(_a, [\n    \"throttle\",\n    \"trailing\",\n    \"leading\"\n  ]);\n  return watchWithFilter(\n    source,\n    cb,\n    __spreadProps$1(__spreadValues$1({}, watchOptions), {\n      eventFilter: throttleFilter(throttle, trailing, leading)\n    })\n  );\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction watchTriggerable(source, cb, options = {}) {\n  let cleanupFn;\n  function onEffect() {\n    if (!cleanupFn)\n      return;\n    const fn = cleanupFn;\n    cleanupFn = void 0;\n    fn();\n  }\n  function onCleanup(callback) {\n    cleanupFn = callback;\n  }\n  const _cb = (value, oldValue) => {\n    onEffect();\n    return cb(value, oldValue, onCleanup);\n  };\n  const res = watchIgnorable(source, _cb, options);\n  const { ignoreUpdates } = res;\n  const trigger = () => {\n    let res2;\n    ignoreUpdates(() => {\n      res2 = _cb(getWatchSources(source), getOldValue(source));\n    });\n    return res2;\n  };\n  return __spreadProps(__spreadValues({}, res), {\n    trigger\n  });\n}\nfunction getWatchSources(sources) {\n  if (isReactive(sources))\n    return sources;\n  if (Array.isArray(sources))\n    return sources.map((item) => toValue(item));\n  return toValue(sources);\n}\nfunction getOldValue(source) {\n  return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n  return watch(\n    source,\n    (v, ov, onInvalidate) => {\n      if (v)\n        cb(v, ov, onInvalidate);\n    },\n    options\n  );\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, hasOwn, identity, watchIgnorable as ignorableWatch, increaseWithUnit, invoke, isClient, isDef, isDefined, isIOS, isObject, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, makeDestructurable, toValue, isClient, tryOnScopeDispose, isIOS, tryOnMounted, computedWithControl, isObject, objectOmit, promiseTimeout, until, toRef, increaseWithUnit, objectEntries, useTimeoutFn, pausableWatch, createEventHook, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, createSingletonPromise, toRefs, notNullish, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, useIntervalFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, identity, isDef } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, isVue3, version, defineComponent, h, TransitionGroup, shallowReactive, Fragment, watch, getCurrentInstance, customRef, onUpdated, onMounted, readonly, nextTick, reactive, markRaw, getCurrentScope, isVue2, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n  let options;\n  if (isRef(optionsOrRef)) {\n    options = {\n      evaluating: optionsOrRef\n    };\n  } else {\n    options = optionsOrRef || {};\n  }\n  const {\n    lazy = false,\n    evaluating = void 0,\n    shallow = true,\n    onError = noop\n  } = options;\n  const started = ref(!lazy);\n  const current = shallow ? shallowRef(initialState) : ref(initialState);\n  let counter = 0;\n  watchEffect(async (onInvalidate) => {\n    if (!started.value)\n      return;\n    counter++;\n    const counterAtBeginning = counter;\n    let hasFinished = false;\n    if (evaluating) {\n      Promise.resolve().then(() => {\n        evaluating.value = true;\n      });\n    }\n    try {\n      const result = await evaluationCallback((cancelCallback) => {\n        onInvalidate(() => {\n          if (evaluating)\n            evaluating.value = false;\n          if (!hasFinished)\n            cancelCallback();\n        });\n      });\n      if (counterAtBeginning === counter)\n        current.value = result;\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (evaluating && counterAtBeginning === counter)\n        evaluating.value = false;\n      hasFinished = true;\n    }\n  });\n  if (lazy) {\n    return computed(() => {\n      started.value = true;\n      return current.value;\n    });\n  } else {\n    return current;\n  }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n  let source = inject(key);\n  if (defaultSource)\n    source = inject(key, defaultSource);\n  if (treatDefaultAsFactory)\n    source = inject(key, defaultSource, treatDefaultAsFactory);\n  if (typeof options === \"function\") {\n    return computed((ctx) => options(source, ctx));\n  } else {\n    return computed({\n      get: (ctx) => options.get(source, ctx),\n      set: options.set\n    });\n  }\n}\n\nvar __defProp$p = Object.defineProperty;\nvar __defProps$c = Object.defineProperties;\nvar __getOwnPropDescs$c = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$s = Object.getOwnPropertySymbols;\nvar __hasOwnProp$s = Object.prototype.hasOwnProperty;\nvar __propIsEnum$s = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$p = (obj, key, value) => key in obj ? __defProp$p(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$p = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$s.call(b, prop))\n      __defNormalProp$p(a, prop, b[prop]);\n  if (__getOwnPropSymbols$s)\n    for (var prop of __getOwnPropSymbols$s(b)) {\n      if (__propIsEnum$s.call(b, prop))\n        __defNormalProp$p(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$c = (a, b) => __defProps$c(a, __getOwnPropDescs$c(b));\nfunction createReusableTemplate() {\n  if (!isVue3 && !version.startsWith(\"2.7.\")) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] createReusableTemplate only works in Vue 2.7 or above.\");\n    return;\n  }\n  const render = shallowRef();\n  const define = /* #__PURE__ */ defineComponent({\n    setup(_, { slots }) {\n      return () => {\n        render.value = slots.default;\n      };\n    }\n  });\n  const reuse = /* #__PURE__ */ defineComponent({\n    inheritAttrs: false,\n    setup(_, { attrs, slots }) {\n      return () => {\n        var _a;\n        if (!render.value && process.env.NODE_ENV !== \"production\")\n          throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n        return (_a = render.value) == null ? void 0 : _a.call(render, __spreadProps$c(__spreadValues$p({}, attrs), { $slots: slots }));\n      };\n    }\n  });\n  return makeDestructurable(\n    { define, reuse },\n    [define, reuse]\n  );\n}\n\nfunction createTemplatePromise(options = {}) {\n  if (!isVue3) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] createTemplatePromise only works in Vue 3 or above.\");\n    return;\n  }\n  let index = 0;\n  const instances = ref([]);\n  function create(...args) {\n    const props = shallowReactive({\n      key: index++,\n      args,\n      promise: void 0,\n      resolve: () => {\n      },\n      reject: () => {\n      },\n      isResolving: false,\n      options\n    });\n    instances.value.push(props);\n    props.promise = new Promise((_resolve, _reject) => {\n      props.resolve = (v) => {\n        props.isResolving = true;\n        return _resolve(v);\n      };\n      props.reject = _reject;\n    }).finally(() => {\n      props.promise = void 0;\n      const index2 = instances.value.indexOf(props);\n      if (index2 !== -1)\n        instances.value.splice(index2, 1);\n    });\n    return props.promise;\n  }\n  function start(...args) {\n    if (options.singleton && instances.value.length > 0)\n      return instances.value[0].promise;\n    return create(...args);\n  }\n  const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n    const renderList = () => instances.value.map((props) => {\n      var _a;\n      return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n    });\n    if (options.transition)\n      return () => h(TransitionGroup, options.transition, renderList);\n    return renderList;\n  });\n  component.start = start;\n  return component;\n}\n\nfunction createUnrefFn(fn) {\n  return function(...args) {\n    return fn.apply(this, args.map((i) => toValue(i)));\n  };\n}\n\nfunction unrefElement(elRef) {\n  var _a;\n  const plain = toValue(elRef);\n  return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n  let target;\n  let events;\n  let listeners;\n  let options;\n  if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n    [events, listeners, options] = args;\n    target = defaultWindow;\n  } else {\n    [target, events, listeners, options] = args;\n  }\n  if (!target)\n    return noop;\n  if (!Array.isArray(events))\n    events = [events];\n  if (!Array.isArray(listeners))\n    listeners = [listeners];\n  const cleanups = [];\n  const cleanup = () => {\n    cleanups.forEach((fn) => fn());\n    cleanups.length = 0;\n  };\n  const register = (el, event, listener, options2) => {\n    el.addEventListener(event, listener, options2);\n    return () => el.removeEventListener(event, listener, options2);\n  };\n  const stopWatch = watch(\n    () => [unrefElement(target), toValue(options)],\n    ([el, options2]) => {\n      cleanup();\n      if (!el)\n        return;\n      cleanups.push(\n        ...events.flatMap((event) => {\n          return listeners.map((listener) => register(el, event, listener, options2));\n        })\n      );\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const stop = () => {\n    stopWatch();\n    cleanup();\n  };\n  tryOnScopeDispose(stop);\n  return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n  const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n  if (!window)\n    return;\n  if (isIOS && !_iOSWorkaround) {\n    _iOSWorkaround = true;\n    Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n  }\n  let shouldListen = true;\n  const shouldIgnore = (event) => {\n    return ignore.some((target2) => {\n      if (typeof target2 === \"string\") {\n        return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n      } else {\n        const el = unrefElement(target2);\n        return el && (event.target === el || event.composedPath().includes(el));\n      }\n    });\n  };\n  const listener = (event) => {\n    const el = unrefElement(target);\n    if (!el || el === event.target || event.composedPath().includes(el))\n      return;\n    if (event.detail === 0)\n      shouldListen = !shouldIgnore(event);\n    if (!shouldListen) {\n      shouldListen = true;\n      return;\n    }\n    handler(event);\n  };\n  const cleanup = [\n    useEventListener(window, \"click\", listener, { passive: true, capture }),\n    useEventListener(window, \"pointerdown\", (e) => {\n      const el = unrefElement(target);\n      if (el)\n        shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e);\n    }, { passive: true }),\n    detectIframe && useEventListener(window, \"blur\", (event) => {\n      var _a;\n      const el = unrefElement(target);\n      if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement)))\n        handler(event);\n    })\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nvar __defProp$o = Object.defineProperty;\nvar __defProps$b = Object.defineProperties;\nvar __getOwnPropDescs$b = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$r = Object.getOwnPropertySymbols;\nvar __hasOwnProp$r = Object.prototype.hasOwnProperty;\nvar __propIsEnum$r = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$o = (obj, key, value) => key in obj ? __defProp$o(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$o = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$r.call(b, prop))\n      __defNormalProp$o(a, prop, b[prop]);\n  if (__getOwnPropSymbols$r)\n    for (var prop of __getOwnPropSymbols$r(b)) {\n      if (__propIsEnum$r.call(b, prop))\n        __defNormalProp$o(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$b = (a, b) => __defProps$b(a, __getOwnPropDescs$b(b));\nfunction createKeyPredicate(keyFilter) {\n  if (typeof keyFilter === \"function\")\n    return keyFilter;\n  else if (typeof keyFilter === \"string\")\n    return (event) => event.key === keyFilter;\n  else if (Array.isArray(keyFilter))\n    return (event) => keyFilter.includes(event.key);\n  return () => true;\n}\nfunction onKeyStroke(...args) {\n  let key;\n  let handler;\n  let options = {};\n  if (args.length === 3) {\n    key = args[0];\n    handler = args[1];\n    options = args[2];\n  } else if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      key = true;\n      handler = args[0];\n      options = args[1];\n    } else {\n      key = args[0];\n      handler = args[1];\n    }\n  } else {\n    key = true;\n    handler = args[0];\n  }\n  const {\n    target = defaultWindow,\n    eventName = \"keydown\",\n    passive = false,\n    dedupe = false\n  } = options;\n  const predicate = createKeyPredicate(key);\n  const listener = (e) => {\n    if (e.repeat && toValue(dedupe))\n      return;\n    if (predicate(e))\n      handler(e);\n  };\n  return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n  return onKeyStroke(key, handler, __spreadProps$b(__spreadValues$o({}, options), { eventName: \"keydown\" }));\n}\nfunction onKeyPressed(key, handler, options = {}) {\n  return onKeyStroke(key, handler, __spreadProps$b(__spreadValues$o({}, options), { eventName: \"keypress\" }));\n}\nfunction onKeyUp(key, handler, options = {}) {\n  return onKeyStroke(key, handler, __spreadProps$b(__spreadValues$o({}, options), { eventName: \"keyup\" }));\n}\n\nconst DEFAULT_DELAY = 500;\nfunction onLongPress(target, handler, options) {\n  var _a, _b;\n  const elementRef = computed(() => unrefElement(target));\n  let timeout;\n  function clear() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = void 0;\n    }\n  }\n  function onDown(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    clear();\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    timeout = setTimeout(\n      () => handler(ev),\n      (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n    );\n  }\n  const listenerOptions = {\n    capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n    once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n  };\n  useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions);\n  useEventListener(elementRef, \"pointerup\", clear, listenerOptions);\n  useEventListener(elementRef, \"pointerleave\", clear, listenerOptions);\n}\n\nfunction isFocusedElementEditable() {\n  const { activeElement, body } = document;\n  if (!activeElement)\n    return false;\n  if (activeElement === body)\n    return false;\n  switch (activeElement.tagName) {\n    case \"INPUT\":\n    case \"TEXTAREA\":\n      return true;\n  }\n  return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n  keyCode,\n  metaKey,\n  ctrlKey,\n  altKey\n}) {\n  if (metaKey || ctrlKey || altKey)\n    return false;\n  if (keyCode >= 48 && keyCode <= 57)\n    return true;\n  if (keyCode >= 65 && keyCode <= 90)\n    return true;\n  if (keyCode >= 97 && keyCode <= 122)\n    return true;\n  return false;\n}\nfunction onStartTyping(callback, options = {}) {\n  const { document: document2 = defaultDocument } = options;\n  const keydown = (event) => {\n    !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n  };\n  if (document2)\n    useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n  const instance = getCurrentInstance();\n  let _trigger = () => {\n  };\n  const element = customRef((track, trigger) => {\n    _trigger = trigger;\n    return {\n      get() {\n        var _a, _b;\n        track();\n        return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n      },\n      set() {\n      }\n    };\n  });\n  tryOnMounted(_trigger);\n  onUpdated(_trigger);\n  return element;\n}\n\nfunction useActiveElement(options = {}) {\n  var _a;\n  const { window = defaultWindow } = options;\n  const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n  const activeElement = computedWithControl(\n    () => null,\n    () => document == null ? void 0 : document.activeElement\n  );\n  if (window) {\n    useEventListener(window, \"blur\", (event) => {\n      if (event.relatedTarget !== null)\n        return;\n      activeElement.trigger();\n    }, true);\n    useEventListener(window, \"focus\", activeElement.trigger, true);\n  }\n  return activeElement;\n}\n\nfunction useMounted() {\n  const isMounted = ref(false);\n  if (getCurrentInstance()) {\n    onMounted(() => {\n      isMounted.value = true;\n    });\n  }\n  return isMounted;\n}\n\nfunction useSupported(callback) {\n  const isMounted = useMounted();\n  return computed(() => {\n    isMounted.value;\n    return Boolean(callback());\n  });\n}\n\nfunction useRafFn(fn, options = {}) {\n  const {\n    immediate = true,\n    window = defaultWindow\n  } = options;\n  const isActive = ref(false);\n  let previousFrameTimestamp = 0;\n  let rafId = null;\n  function loop(timestamp) {\n    if (!isActive.value || !window)\n      return;\n    const delta = timestamp - previousFrameTimestamp;\n    fn({ delta, timestamp });\n    previousFrameTimestamp = timestamp;\n    rafId = window.requestAnimationFrame(loop);\n  }\n  function resume() {\n    if (!isActive.value && window) {\n      isActive.value = true;\n      rafId = window.requestAnimationFrame(loop);\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    if (rafId != null && window) {\n      window.cancelAnimationFrame(rafId);\n      rafId = null;\n    }\n  }\n  if (immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive: readonly(isActive),\n    pause,\n    resume\n  };\n}\n\nfunction useAnimate(target, keyframes, options) {\n  let config;\n  let animateOptions;\n  if (isObject(options)) {\n    config = options;\n    animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n  } else {\n    config = { duration: options };\n    animateOptions = options;\n  }\n  const {\n    window = defaultWindow,\n    immediate = true,\n    commitStyles,\n    persist,\n    playbackRate: _playbackRate = 1,\n    onReady,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = config;\n  const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n  const animate = shallowRef(void 0);\n  const store = shallowReactive({\n    startTime: null,\n    currentTime: null,\n    timeline: null,\n    playbackRate: _playbackRate,\n    pending: false,\n    playState: immediate ? \"idle\" : \"paused\",\n    replaceState: \"active\"\n  });\n  const pending = computed(() => store.pending);\n  const playState = computed(() => store.playState);\n  const replaceState = computed(() => store.replaceState);\n  const startTime = computed({\n    get() {\n      return store.startTime;\n    },\n    set(value) {\n      store.startTime = value;\n      if (animate.value)\n        animate.value.startTime = value;\n    }\n  });\n  const currentTime = computed({\n    get() {\n      return store.currentTime;\n    },\n    set(value) {\n      store.currentTime = value;\n      if (animate.value) {\n        animate.value.currentTime = value;\n        syncResume();\n      }\n    }\n  });\n  const timeline = computed({\n    get() {\n      return store.timeline;\n    },\n    set(value) {\n      store.timeline = value;\n      if (animate.value)\n        animate.value.timeline = value;\n    }\n  });\n  const playbackRate = computed({\n    get() {\n      return store.playbackRate;\n    },\n    set(value) {\n      store.playbackRate = value;\n      if (animate.value)\n        animate.value.playbackRate = value;\n    }\n  });\n  const play = () => {\n    if (animate.value) {\n      try {\n        animate.value.play();\n        syncResume();\n      } catch (e) {\n        syncPause();\n        onError(e);\n      }\n    } else {\n      update();\n    }\n  };\n  const pause = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.pause();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  const reverse = () => {\n    var _a;\n    !animate.value && update();\n    try {\n      (_a = animate.value) == null ? void 0 : _a.reverse();\n      syncResume();\n    } catch (e) {\n      syncPause();\n      onError(e);\n    }\n  };\n  const finish = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.finish();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  const cancel = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.cancel();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  watch(() => unrefElement(target), (el) => {\n    el && update();\n  });\n  watch(() => keyframes, (value) => {\n    !animate.value && update();\n    if (!unrefElement(target) && animate.value) {\n      animate.value.effect = new KeyframeEffect(\n        unrefElement(target),\n        toValue(value),\n        animateOptions\n      );\n    }\n  }, { deep: true });\n  tryOnMounted(() => {\n    nextTick(() => update(true));\n  });\n  tryOnScopeDispose(cancel);\n  function update(init) {\n    const el = unrefElement(target);\n    if (!isSupported.value || !el)\n      return;\n    animate.value = el.animate(toValue(keyframes), animateOptions);\n    if (commitStyles)\n      animate.value.commitStyles();\n    if (persist)\n      animate.value.persist();\n    if (_playbackRate !== 1)\n      animate.value.playbackRate = _playbackRate;\n    if (init && !immediate)\n      animate.value.pause();\n    else\n      syncResume();\n    onReady == null ? void 0 : onReady(animate.value);\n  }\n  useEventListener(animate, \"cancel\", syncPause);\n  useEventListener(animate, \"finish\", syncPause);\n  useEventListener(animate, \"remove\", syncPause);\n  const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n    if (!animate.value)\n      return;\n    store.pending = animate.value.pending;\n    store.playState = animate.value.playState;\n    store.replaceState = animate.value.replaceState;\n    store.startTime = animate.value.startTime;\n    store.currentTime = animate.value.currentTime;\n    store.timeline = animate.value.timeline;\n    store.playbackRate = animate.value.playbackRate;\n  }, { immediate: false });\n  function syncResume() {\n    if (isSupported.value)\n      resumeRef();\n  }\n  function syncPause() {\n    if (isSupported.value && window)\n      window.requestAnimationFrame(pauseRef);\n  }\n  return {\n    isSupported,\n    animate,\n    // actions\n    play,\n    pause,\n    reverse,\n    finish,\n    cancel,\n    // state\n    pending,\n    playState,\n    replaceState,\n    startTime,\n    currentTime,\n    timeline,\n    playbackRate\n  };\n}\n\nfunction useAsyncQueue(tasks, options = {}) {\n  const {\n    interrupt = true,\n    onError = noop,\n    onFinished = noop\n  } = options;\n  const promiseState = {\n    pending: \"pending\",\n    rejected: \"rejected\",\n    fulfilled: \"fulfilled\"\n  };\n  const initialResult = Array.from(new Array(tasks.length), () => ({ state: promiseState.pending, data: null }));\n  const result = reactive(initialResult);\n  const activeIndex = ref(-1);\n  if (!tasks || tasks.length === 0) {\n    onFinished();\n    return {\n      activeIndex,\n      result\n    };\n  }\n  function updateResult(state, res) {\n    activeIndex.value++;\n    result[activeIndex.value].data = res;\n    result[activeIndex.value].state = state;\n  }\n  tasks.reduce((prev, curr) => {\n    return prev.then((prevRes) => {\n      var _a;\n      if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n        onFinished();\n        return;\n      }\n      return curr(prevRes).then((currentRes) => {\n        updateResult(promiseState.fulfilled, currentRes);\n        activeIndex.value === tasks.length - 1 && onFinished();\n        return currentRes;\n      });\n    }).catch((e) => {\n      updateResult(promiseState.rejected, e);\n      onError();\n      return e;\n    });\n  }, Promise.resolve());\n  return {\n    activeIndex,\n    result\n  };\n}\n\nvar __defProp$n = Object.defineProperty;\nvar __defProps$a = Object.defineProperties;\nvar __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$q = Object.getOwnPropertySymbols;\nvar __hasOwnProp$q = Object.prototype.hasOwnProperty;\nvar __propIsEnum$q = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$n = (obj, key, value) => key in obj ? __defProp$n(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$n = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$q.call(b, prop))\n      __defNormalProp$n(a, prop, b[prop]);\n  if (__getOwnPropSymbols$q)\n    for (var prop of __getOwnPropSymbols$q(b)) {\n      if (__propIsEnum$q.call(b, prop))\n        __defNormalProp$n(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));\nfunction useAsyncState(promise, initialState, options) {\n  const {\n    immediate = true,\n    delay = 0,\n    onError = noop,\n    onSuccess = noop,\n    resetOnExecute = true,\n    shallow = true,\n    throwError\n  } = options != null ? options : {};\n  const state = shallow ? shallowRef(initialState) : ref(initialState);\n  const isReady = ref(false);\n  const isLoading = ref(false);\n  const error = shallowRef(void 0);\n  async function execute(delay2 = 0, ...args) {\n    if (resetOnExecute)\n      state.value = initialState;\n    error.value = void 0;\n    isReady.value = false;\n    isLoading.value = true;\n    if (delay2 > 0)\n      await promiseTimeout(delay2);\n    const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n    try {\n      const data = await _promise;\n      state.value = data;\n      isReady.value = true;\n      onSuccess(data);\n    } catch (e) {\n      error.value = e;\n      onError(e);\n      if (throwError)\n        throw e;\n    } finally {\n      isLoading.value = false;\n    }\n    return state.value;\n  }\n  if (immediate)\n    execute(delay);\n  const shell = {\n    state,\n    isReady,\n    isLoading,\n    error,\n    execute\n  };\n  function waitUntilIsLoaded() {\n    return new Promise((resolve, reject) => {\n      until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n    });\n  }\n  return __spreadProps$a(__spreadValues$n({}, shell), {\n    then(onFulfilled, onRejected) {\n      return waitUntilIsLoaded().then(onFulfilled, onRejected);\n    }\n  });\n}\n\nconst defaults = {\n  array: (v) => JSON.stringify(v),\n  object: (v) => JSON.stringify(v),\n  set: (v) => JSON.stringify(Array.from(v)),\n  map: (v) => JSON.stringify(Object.fromEntries(v)),\n  null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n  if (!target)\n    return defaults.null;\n  if (target instanceof Map)\n    return defaults.map;\n  else if (target instanceof Set)\n    return defaults.set;\n  else if (Array.isArray(target))\n    return defaults.array;\n  else\n    return defaults.object;\n}\n\nfunction useBase64(target, options) {\n  const base64 = ref(\"\");\n  const promise = ref();\n  function execute() {\n    if (!isClient)\n      return;\n    promise.value = new Promise((resolve, reject) => {\n      try {\n        const _target = toValue(target);\n        if (_target == null) {\n          resolve(\"\");\n        } else if (typeof _target === \"string\") {\n          resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n        } else if (_target instanceof Blob) {\n          resolve(blobToBase64(_target));\n        } else if (_target instanceof ArrayBuffer) {\n          resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n        } else if (_target instanceof HTMLCanvasElement) {\n          resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n        } else if (_target instanceof HTMLImageElement) {\n          const img = _target.cloneNode(false);\n          img.crossOrigin = \"Anonymous\";\n          imgLoaded(img).then(() => {\n            const canvas = document.createElement(\"canvas\");\n            const ctx = canvas.getContext(\"2d\");\n            canvas.width = img.width;\n            canvas.height = img.height;\n            ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n            resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n          }).catch(reject);\n        } else if (typeof _target === \"object\") {\n          const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n          const serialized = _serializeFn(_target);\n          return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n        } else {\n          reject(new Error(\"target is unsupported types\"));\n        }\n      } catch (error) {\n        reject(error);\n      }\n    });\n    promise.value.then((res) => base64.value = res);\n    return promise.value;\n  }\n  if (isRef(target) || typeof target === \"function\")\n    watch(target, execute, { immediate: true });\n  else\n    execute();\n  return {\n    base64,\n    promise,\n    execute\n  };\n}\nfunction imgLoaded(img) {\n  return new Promise((resolve, reject) => {\n    if (!img.complete) {\n      img.onload = () => {\n        resolve();\n      };\n      img.onerror = reject;\n    } else {\n      resolve();\n    }\n  });\n}\nfunction blobToBase64(blob) {\n  return new Promise((resolve, reject) => {\n    const fr = new FileReader();\n    fr.onload = (e) => {\n      resolve(e.target.result);\n    };\n    fr.onerror = reject;\n    fr.readAsDataURL(blob);\n  });\n}\n\nfunction useBattery({ navigator = defaultNavigator } = {}) {\n  const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n  const isSupported = useSupported(() => navigator && \"getBattery\" in navigator);\n  const charging = ref(false);\n  const chargingTime = ref(0);\n  const dischargingTime = ref(0);\n  const level = ref(1);\n  let battery;\n  function updateBatteryInfo() {\n    charging.value = this.charging;\n    chargingTime.value = this.chargingTime || 0;\n    dischargingTime.value = this.dischargingTime || 0;\n    level.value = this.level;\n  }\n  if (isSupported.value) {\n    navigator.getBattery().then((_battery) => {\n      battery = _battery;\n      updateBatteryInfo.call(battery);\n      for (const event of events)\n        useEventListener(battery, event, updateBatteryInfo, { passive: true });\n    });\n  }\n  return {\n    isSupported,\n    charging,\n    chargingTime,\n    dischargingTime,\n    level\n  };\n}\n\nfunction useBluetooth(options) {\n  let {\n    acceptAllDevices = false\n  } = options || {};\n  const {\n    filters = void 0,\n    optionalServices = void 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n  const device = shallowRef(void 0);\n  const error = shallowRef(null);\n  watch(device, () => {\n    connectToBluetoothGATTServer();\n  });\n  async function requestDevice() {\n    if (!isSupported.value)\n      return;\n    error.value = null;\n    if (filters && filters.length > 0)\n      acceptAllDevices = false;\n    try {\n      device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n        acceptAllDevices,\n        filters,\n        optionalServices\n      }));\n    } catch (err) {\n      error.value = err;\n    }\n  }\n  const server = ref();\n  const isConnected = computed(() => {\n    var _a;\n    return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n  });\n  async function connectToBluetoothGATTServer() {\n    error.value = null;\n    if (device.value && device.value.gatt) {\n      device.value.addEventListener(\"gattserverdisconnected\", () => {\n      });\n      try {\n        server.value = await device.value.gatt.connect();\n      } catch (err) {\n        error.value = err;\n      }\n    }\n  }\n  tryOnMounted(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.connect();\n  });\n  tryOnScopeDispose(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n  });\n  return {\n    isSupported,\n    isConnected,\n    // Device:\n    device,\n    requestDevice,\n    // Server:\n    server,\n    // Errors:\n    error\n  };\n}\n\nfunction useMediaQuery(query, options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n  let mediaQuery;\n  const matches = ref(false);\n  const cleanup = () => {\n    if (!mediaQuery)\n      return;\n    if (\"removeEventListener\" in mediaQuery)\n      mediaQuery.removeEventListener(\"change\", update);\n    else\n      mediaQuery.removeListener(update);\n  };\n  const update = () => {\n    if (!isSupported.value)\n      return;\n    cleanup();\n    mediaQuery = window.matchMedia(toRef(query).value);\n    matches.value = !!(mediaQuery == null ? void 0 : mediaQuery.matches);\n    if (!mediaQuery)\n      return;\n    if (\"addEventListener\" in mediaQuery)\n      mediaQuery.addEventListener(\"change\", update);\n    else\n      mediaQuery.addListener(update);\n  };\n  watchEffect(update);\n  tryOnScopeDispose(() => cleanup());\n  return matches;\n}\n\nconst breakpointsTailwind = {\n  \"sm\": 640,\n  \"md\": 768,\n  \"lg\": 1024,\n  \"xl\": 1280,\n  \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1400\n};\nconst breakpointsVuetify = {\n  xs: 600,\n  sm: 960,\n  md: 1264,\n  lg: 1904\n};\nconst breakpointsAntDesign = {\n  xs: 480,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1600\n};\nconst breakpointsQuasar = {\n  xs: 600,\n  sm: 1024,\n  md: 1440,\n  lg: 1920\n};\nconst breakpointsSematic = {\n  mobileS: 320,\n  mobileM: 375,\n  mobileL: 425,\n  tablet: 768,\n  laptop: 1024,\n  laptopL: 1440,\n  desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n  \"3xs\": 360,\n  \"2xs\": 480,\n  \"xs\": 600,\n  \"sm\": 768,\n  \"md\": 1024,\n  \"lg\": 1280,\n  \"xl\": 1440,\n  \"2xl\": 1600,\n  \"3xl\": 1920,\n  \"4xl\": 2560\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n  function getValue(k, delta) {\n    let v = breakpoints[k];\n    if (delta != null)\n      v = increaseWithUnit(v, delta);\n    if (typeof v === \"number\")\n      v = `${v}px`;\n    return v;\n  }\n  const { window = defaultWindow } = options;\n  function match(query) {\n    if (!window)\n      return false;\n    return window.matchMedia(query).matches;\n  }\n  const greaterOrEqual = (k) => {\n    return useMediaQuery(`(min-width: ${getValue(k)})`, options);\n  };\n  const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n    Object.defineProperty(shortcuts, k, {\n      get: () => greaterOrEqual(k),\n      enumerable: true,\n      configurable: true\n    });\n    return shortcuts;\n  }, {});\n  return Object.assign(shortcutMethods, {\n    greater(k) {\n      return useMediaQuery(`(min-width: ${getValue(k, 0.1)})`, options);\n    },\n    greaterOrEqual,\n    smaller(k) {\n      return useMediaQuery(`(max-width: ${getValue(k, -0.1)})`, options);\n    },\n    smallerOrEqual(k) {\n      return useMediaQuery(`(max-width: ${getValue(k)})`, options);\n    },\n    between(a, b) {\n      return useMediaQuery(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n    },\n    isGreater(k) {\n      return match(`(min-width: ${getValue(k, 0.1)})`);\n    },\n    isGreaterOrEqual(k) {\n      return match(`(min-width: ${getValue(k)})`);\n    },\n    isSmaller(k) {\n      return match(`(max-width: ${getValue(k, -0.1)})`);\n    },\n    isSmallerOrEqual(k) {\n      return match(`(max-width: ${getValue(k)})`);\n    },\n    isInBetween(a, b) {\n      return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n    },\n    current() {\n      const points = Object.keys(breakpoints).map((i) => [i, greaterOrEqual(i)]);\n      return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n    }\n  });\n}\n\nfunction useBroadcastChannel(options) {\n  const {\n    name,\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n  const isClosed = ref(false);\n  const channel = ref();\n  const data = ref();\n  const error = shallowRef(null);\n  const post = (data2) => {\n    if (channel.value)\n      channel.value.postMessage(data2);\n  };\n  const close = () => {\n    if (channel.value)\n      channel.value.close();\n    isClosed.value = true;\n  };\n  if (isSupported.value) {\n    tryOnMounted(() => {\n      error.value = null;\n      channel.value = new BroadcastChannel(name);\n      channel.value.addEventListener(\"message\", (e) => {\n        data.value = e.data;\n      }, { passive: true });\n      channel.value.addEventListener(\"messageerror\", (e) => {\n        error.value = e;\n      }, { passive: true });\n      channel.value.addEventListener(\"close\", () => {\n        isClosed.value = true;\n      });\n    });\n  }\n  tryOnScopeDispose(() => {\n    close();\n  });\n  return {\n    isSupported,\n    channel,\n    data,\n    post,\n    close,\n    error,\n    isClosed\n  };\n}\n\nvar __defProp$m = Object.defineProperty;\nvar __getOwnPropSymbols$p = Object.getOwnPropertySymbols;\nvar __hasOwnProp$p = Object.prototype.hasOwnProperty;\nvar __propIsEnum$p = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$m = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$p.call(b, prop))\n      __defNormalProp$m(a, prop, b[prop]);\n  if (__getOwnPropSymbols$p)\n    for (var prop of __getOwnPropSymbols$p(b)) {\n      if (__propIsEnum$p.call(b, prop))\n        __defNormalProp$m(a, prop, b[prop]);\n    }\n  return a;\n};\nconst WRITABLE_PROPERTIES = [\n  \"hash\",\n  \"host\",\n  \"hostname\",\n  \"href\",\n  \"pathname\",\n  \"port\",\n  \"protocol\",\n  \"search\"\n];\nfunction useBrowserLocation({ window = defaultWindow } = {}) {\n  const refs = Object.fromEntries(\n    WRITABLE_PROPERTIES.map((key) => [key, ref()])\n  );\n  for (const [key, ref2] of objectEntries(refs)) {\n    watch(ref2, (value) => {\n      if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n        return;\n      window.location[key] = value;\n    });\n  }\n  const buildState = (trigger) => {\n    var _a;\n    const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n    const { origin } = (window == null ? void 0 : window.location) || {};\n    for (const key of WRITABLE_PROPERTIES)\n      refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n    return reactive(__spreadValues$m({\n      trigger,\n      state: state2,\n      length,\n      origin\n    }, refs));\n  };\n  const state = ref(buildState(\"load\"));\n  if (window) {\n    useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n    useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n  }\n  return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n  const cachedValue = ref(refValue.value);\n  watch(() => refValue.value, (value) => {\n    if (!comparator(value, cachedValue.value))\n      cachedValue.value = value;\n  }, watchOptions);\n  return cachedValue;\n}\n\nfunction useClipboard(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500,\n    legacy = false\n  } = options;\n  const events = [\"copy\", \"cut\"];\n  const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n  const text = ref(\"\");\n  const copied = ref(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n  function updateText() {\n    if (isClipboardApiSupported.value) {\n      navigator.clipboard.readText().then((value) => {\n        text.value = value;\n      });\n    } else {\n      text.value = legacyRead();\n    }\n  }\n  if (isSupported.value && read) {\n    for (const event of events)\n      useEventListener(event, updateText);\n  }\n  async function copy(value = toValue(source)) {\n    if (isSupported.value && value != null) {\n      if (isClipboardApiSupported.value)\n        await navigator.clipboard.writeText(value);\n      else\n        legacyCopy(value);\n      text.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  function legacyCopy(value) {\n    const ta = document.createElement(\"textarea\");\n    ta.value = value != null ? value : \"\";\n    ta.style.position = \"absolute\";\n    ta.style.opacity = \"0\";\n    document.body.appendChild(ta);\n    ta.select();\n    document.execCommand(\"copy\");\n    ta.remove();\n  }\n  function legacyRead() {\n    var _a, _b, _c;\n    return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n  }\n  return {\n    isSupported,\n    text,\n    copied,\n    copy\n  };\n}\n\nvar __defProp$l = Object.defineProperty;\nvar __defProps$9 = Object.defineProperties;\nvar __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$o = Object.getOwnPropertySymbols;\nvar __hasOwnProp$o = Object.prototype.hasOwnProperty;\nvar __propIsEnum$o = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$l = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$o.call(b, prop))\n      __defNormalProp$l(a, prop, b[prop]);\n  if (__getOwnPropSymbols$o)\n    for (var prop of __getOwnPropSymbols$o(b)) {\n      if (__propIsEnum$o.call(b, prop))\n        __defNormalProp$l(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));\nfunction cloneFnJSON(source) {\n  return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n  const cloned = ref({});\n  const {\n    manual,\n    clone = cloneFnJSON,\n    // watch options\n    deep = true,\n    immediate = true\n  } = options;\n  function sync() {\n    cloned.value = clone(toValue(source));\n  }\n  if (!manual && isRef(source)) {\n    watch(source, sync, __spreadProps$9(__spreadValues$l({}, options), {\n      deep,\n      immediate\n    }));\n  } else {\n    sync();\n  }\n  return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n  if (!(globalKey in _global))\n    _global[globalKey] = _global[globalKey] || {};\n  return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n  return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n  handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n  return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nvar __defProp$k = Object.defineProperty;\nvar __getOwnPropSymbols$n = Object.getOwnPropertySymbols;\nvar __hasOwnProp$n = Object.prototype.hasOwnProperty;\nvar __propIsEnum$n = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$k = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$n.call(b, prop))\n      __defNormalProp$k(a, prop, b[prop]);\n  if (__getOwnPropSymbols$n)\n    for (var prop of __getOwnPropSymbols$n(b)) {\n      if (__propIsEnum$n.call(b, prop))\n        __defNormalProp$k(a, prop, b[prop]);\n    }\n  return a;\n};\nconst StorageSerializers = {\n  boolean: {\n    read: (v) => v === \"true\",\n    write: (v) => String(v)\n  },\n  object: {\n    read: (v) => JSON.parse(v),\n    write: (v) => JSON.stringify(v)\n  },\n  number: {\n    read: (v) => Number.parseFloat(v),\n    write: (v) => String(v)\n  },\n  any: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  string: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  map: {\n    read: (v) => new Map(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v.entries()))\n  },\n  set: {\n    read: (v) => new Set(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v))\n  },\n  date: {\n    read: (v) => new Date(v),\n    write: (v) => v.toISOString()\n  }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const data = (shallow ? shallowRef : ref)(defaults);\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  if (!storage)\n    return data;\n  const rawInit = toValue(defaults);\n  const type = guessSerializerType(rawInit);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n    data,\n    () => write(data.value),\n    { flush, deep, eventFilter }\n  );\n  if (window && listenToStorageChanges) {\n    useEventListener(window, \"storage\", update);\n    useEventListener(window, customStorageEventName, updateFromCustomEvent);\n  }\n  update();\n  return data;\n  function write(v) {\n    try {\n      if (v == null) {\n        storage.removeItem(key);\n      } else {\n        const serialized = serializer.write(v);\n        const oldValue = storage.getItem(key);\n        if (oldValue !== serialized) {\n          storage.setItem(key, serialized);\n          if (window) {\n            window.dispatchEvent(new CustomEvent(customStorageEventName, {\n              detail: {\n                key,\n                oldValue,\n                newValue: serialized,\n                storageArea: storage\n              }\n            }));\n          }\n        }\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  function read(event) {\n    const rawValue = event ? event.newValue : storage.getItem(key);\n    if (rawValue == null) {\n      if (writeDefaults && rawInit !== null)\n        storage.setItem(key, serializer.write(rawInit));\n      return rawInit;\n    } else if (!event && mergeDefaults) {\n      const value = serializer.read(rawValue);\n      if (typeof mergeDefaults === \"function\")\n        return mergeDefaults(value, rawInit);\n      else if (type === \"object\" && !Array.isArray(value))\n        return __spreadValues$k(__spreadValues$k({}, rawInit), value);\n      return value;\n    } else if (typeof rawValue !== \"string\") {\n      return rawValue;\n    } else {\n      return serializer.read(rawValue);\n    }\n  }\n  function updateFromCustomEvent(event) {\n    update(event.detail);\n  }\n  function update(event) {\n    if (event && event.storageArea !== storage)\n      return;\n    if (event && event.key == null) {\n      data.value = rawInit;\n      return;\n    }\n    if (event && event.key !== key)\n      return;\n    pauseWatch();\n    try {\n      data.value = read(event);\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (event)\n        nextTick(resumeWatch);\n      else\n        resumeWatch();\n    }\n  }\n}\n\nfunction usePreferredDark(options) {\n  return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nvar __defProp$j = Object.defineProperty;\nvar __getOwnPropSymbols$m = Object.getOwnPropertySymbols;\nvar __hasOwnProp$m = Object.prototype.hasOwnProperty;\nvar __propIsEnum$m = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$j = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$m.call(b, prop))\n      __defNormalProp$j(a, prop, b[prop]);\n  if (__getOwnPropSymbols$m)\n    for (var prop of __getOwnPropSymbols$m(b)) {\n      if (__propIsEnum$m.call(b, prop))\n        __defNormalProp$j(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useColorMode(options = {}) {\n  const {\n    selector = \"html\",\n    attribute = \"class\",\n    initialValue = \"auto\",\n    window = defaultWindow,\n    storage,\n    storageKey = \"vueuse-color-scheme\",\n    listenToStorageChanges = true,\n    storageRef,\n    emitAuto,\n    disableTransition = true\n  } = options;\n  const modes = __spreadValues$j({\n    auto: \"\",\n    light: \"light\",\n    dark: \"dark\"\n  }, options.modes || {});\n  const preferredDark = usePreferredDark({ window });\n  const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n  const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n  const state = computed(\n    () => store.value === \"auto\" ? system.value : store.value\n  );\n  const updateHTMLAttrs = getSSRHandler(\n    \"updateHTMLAttrs\",\n    (selector2, attribute2, value) => {\n      const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n      if (!el)\n        return;\n      let style;\n      if (disableTransition) {\n        style = window.document.createElement(\"style\");\n        style.appendChild(document.createTextNode(\"*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\"));\n        window.document.head.appendChild(style);\n      }\n      if (attribute2 === \"class\") {\n        const current = value.split(/\\s/g);\n        Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n          if (current.includes(v))\n            el.classList.add(v);\n          else\n            el.classList.remove(v);\n        });\n      } else {\n        el.setAttribute(attribute2, value);\n      }\n      if (disableTransition) {\n        window.getComputedStyle(style).opacity;\n        document.head.removeChild(style);\n      }\n    }\n  );\n  function defaultOnChanged(mode) {\n    var _a;\n    updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n  }\n  function onChanged(mode) {\n    if (options.onChanged)\n      options.onChanged(mode, defaultOnChanged);\n    else\n      defaultOnChanged(mode);\n  }\n  watch(state, onChanged, { flush: \"post\", immediate: true });\n  tryOnMounted(() => onChanged(state.value));\n  const auto = computed({\n    get() {\n      return emitAuto ? store.value : state.value;\n    },\n    set(v) {\n      store.value = v;\n    }\n  });\n  try {\n    return Object.assign(auto, { store, system, state });\n  } catch (e) {\n    return auto;\n  }\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n  const confirmHook = createEventHook();\n  const cancelHook = createEventHook();\n  const revealHook = createEventHook();\n  let _resolve = noop;\n  const reveal = (data) => {\n    revealHook.trigger(data);\n    revealed.value = true;\n    return new Promise((resolve) => {\n      _resolve = resolve;\n    });\n  };\n  const confirm = (data) => {\n    revealed.value = false;\n    confirmHook.trigger(data);\n    _resolve({ data, isCanceled: false });\n  };\n  const cancel = (data) => {\n    revealed.value = false;\n    cancelHook.trigger(data);\n    _resolve({ data, isCanceled: true });\n  };\n  return {\n    isRevealed: computed(() => revealed.value),\n    reveal,\n    confirm,\n    cancel,\n    onReveal: revealHook.on,\n    onConfirm: confirmHook.on,\n    onCancel: cancelHook.on\n  };\n}\n\nvar __getOwnPropSymbols$l = Object.getOwnPropertySymbols;\nvar __hasOwnProp$l = Object.prototype.hasOwnProperty;\nvar __propIsEnum$l = Object.prototype.propertyIsEnumerable;\nvar __objRest$3 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$l.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$l)\n    for (var prop of __getOwnPropSymbols$l(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$l.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction useMutationObserver(target, callback, options = {}) {\n  const _a = options, { window = defaultWindow } = _a, mutationOptions = __objRest$3(_a, [\"window\"]);\n  let observer;\n  const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const stopWatch = watch(\n    () => unrefElement(target),\n    (el) => {\n      cleanup();\n      if (isSupported.value && window && el) {\n        observer = new MutationObserver(callback);\n        observer.observe(el, mutationOptions);\n      }\n    },\n    { immediate: true }\n  );\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n  const { window = defaultWindow, initialValue = \"\", observe = false } = options;\n  const variable = ref(initialValue);\n  const elRef = computed(() => {\n    var _a;\n    return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n  });\n  function updateCssVar() {\n    var _a;\n    const key = toValue(prop);\n    const el = toValue(elRef);\n    if (el && window) {\n      const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n      variable.value = value || initialValue;\n    }\n  }\n  if (observe) {\n    useMutationObserver(elRef, updateCssVar, {\n      attributes: true,\n      window\n    });\n  }\n  watch(\n    [elRef, () => toValue(prop)],\n    updateCssVar,\n    { immediate: true }\n  );\n  watch(\n    variable,\n    (val) => {\n      var _a;\n      if ((_a = elRef.value) == null ? void 0 : _a.style)\n        elRef.value.style.setProperty(toValue(prop), val);\n    }\n  );\n  return variable;\n}\n\nfunction useCurrentElement() {\n  const vm = getCurrentInstance();\n  const currentElement = computedWithControl(\n    () => null,\n    () => vm.proxy.$el\n  );\n  onUpdated(currentElement.trigger);\n  onMounted(currentElement.trigger);\n  return currentElement;\n}\n\nfunction useCycleList(list, options) {\n  const state = shallowRef(getInitialValue());\n  const listRef = toRef(list);\n  const index = computed({\n    get() {\n      var _a;\n      const targetList = listRef.value;\n      let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n      if (index2 < 0)\n        index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n      return index2;\n    },\n    set(v) {\n      set(v);\n    }\n  });\n  function set(i) {\n    const targetList = listRef.value;\n    const length = targetList.length;\n    const index2 = (i % length + length) % length;\n    const value = targetList[index2];\n    state.value = value;\n    return value;\n  }\n  function shift(delta = 1) {\n    return set(index.value + delta);\n  }\n  function next(n = 1) {\n    return shift(n);\n  }\n  function prev(n = 1) {\n    return shift(-n);\n  }\n  function getInitialValue() {\n    var _a, _b;\n    return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n  }\n  watch(listRef, () => set(index.value));\n  return {\n    state,\n    index,\n    next,\n    prev\n  };\n}\n\nvar __defProp$i = Object.defineProperty;\nvar __defProps$8 = Object.defineProperties;\nvar __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$k = Object.getOwnPropertySymbols;\nvar __hasOwnProp$k = Object.prototype.hasOwnProperty;\nvar __propIsEnum$k = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$i = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$k.call(b, prop))\n      __defNormalProp$i(a, prop, b[prop]);\n  if (__getOwnPropSymbols$k)\n    for (var prop of __getOwnPropSymbols$k(b)) {\n      if (__propIsEnum$k.call(b, prop))\n        __defNormalProp$i(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));\nfunction useDark(options = {}) {\n  const {\n    valueDark = \"dark\",\n    valueLight = \"\"\n  } = options;\n  const mode = useColorMode(__spreadProps$8(__spreadValues$i({}, options), {\n    onChanged: (mode2, defaultHandler) => {\n      var _a;\n      if (options.onChanged)\n        (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n      else\n        defaultHandler(mode2);\n    },\n    modes: {\n      dark: valueDark,\n      light: valueLight\n    }\n  }));\n  const isDark = computed({\n    get() {\n      return mode.value === \"dark\";\n    },\n    set(v) {\n      const modeVal = v ? \"dark\" : \"light\";\n      if (mode.system.value === modeVal)\n        mode.value = \"auto\";\n      else\n        mode.value = modeVal;\n    }\n  });\n  return isDark;\n}\n\nfunction fnBypass(v) {\n  return v;\n}\nfunction fnSetSource(source, value) {\n  return source.value = value;\n}\nfunction defaultDump(clone) {\n  return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n  return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n  const {\n    clone = false,\n    dump = defaultDump(clone),\n    parse = defaultParse(clone),\n    setSource = fnSetSource\n  } = options;\n  function _createHistoryRecord() {\n    return markRaw({\n      snapshot: dump(source.value),\n      timestamp: timestamp()\n    });\n  }\n  const last = ref(_createHistoryRecord());\n  const undoStack = ref([]);\n  const redoStack = ref([]);\n  const _setSource = (record) => {\n    setSource(source, parse(record.snapshot));\n    last.value = record;\n  };\n  const commit = () => {\n    undoStack.value.unshift(last.value);\n    last.value = _createHistoryRecord();\n    if (options.capacity && undoStack.value.length > options.capacity)\n      undoStack.value.splice(options.capacity, Infinity);\n    if (redoStack.value.length)\n      redoStack.value.splice(0, redoStack.value.length);\n  };\n  const clear = () => {\n    undoStack.value.splice(0, undoStack.value.length);\n    redoStack.value.splice(0, redoStack.value.length);\n  };\n  const undo = () => {\n    const state = undoStack.value.shift();\n    if (state) {\n      redoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const redo = () => {\n    const state = redoStack.value.shift();\n    if (state) {\n      undoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const reset = () => {\n    _setSource(last.value);\n  };\n  const history = computed(() => [last.value, ...undoStack.value]);\n  const canUndo = computed(() => undoStack.value.length > 0);\n  const canRedo = computed(() => redoStack.value.length > 0);\n  return {\n    source,\n    undoStack,\n    redoStack,\n    last,\n    history,\n    canUndo,\n    canRedo,\n    clear,\n    commit,\n    reset,\n    undo,\n    redo\n  };\n}\n\nvar __defProp$h = Object.defineProperty;\nvar __defProps$7 = Object.defineProperties;\nvar __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$j = Object.getOwnPropertySymbols;\nvar __hasOwnProp$j = Object.prototype.hasOwnProperty;\nvar __propIsEnum$j = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$h = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$j.call(b, prop))\n      __defNormalProp$h(a, prop, b[prop]);\n  if (__getOwnPropSymbols$j)\n    for (var prop of __getOwnPropSymbols$j(b)) {\n      if (__propIsEnum$j.call(b, prop))\n        __defNormalProp$h(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));\nfunction useRefHistory(source, options = {}) {\n  const {\n    deep = false,\n    flush = \"pre\",\n    eventFilter\n  } = options;\n  const {\n    eventFilter: composedFilter,\n    pause,\n    resume: resumeTracking,\n    isActive: isTracking\n  } = pausableFilter(eventFilter);\n  const {\n    ignoreUpdates,\n    ignorePrevAsyncUpdates,\n    stop\n  } = watchIgnorable(\n    source,\n    commit,\n    { deep, flush, eventFilter: composedFilter }\n  );\n  function setSource(source2, value) {\n    ignorePrevAsyncUpdates();\n    ignoreUpdates(() => {\n      source2.value = value;\n    });\n  }\n  const manualHistory = useManualRefHistory(source, __spreadProps$7(__spreadValues$h({}, options), { clone: options.clone || deep, setSource }));\n  const { clear, commit: manualCommit } = manualHistory;\n  function commit() {\n    ignorePrevAsyncUpdates();\n    manualCommit();\n  }\n  function resume(commitNow) {\n    resumeTracking();\n    if (commitNow)\n      commit();\n  }\n  function batch(fn) {\n    let canceled = false;\n    const cancel = () => canceled = true;\n    ignoreUpdates(() => {\n      fn(cancel);\n    });\n    if (!canceled)\n      commit();\n  }\n  function dispose() {\n    stop();\n    clear();\n  }\n  return __spreadProps$7(__spreadValues$h({}, manualHistory), {\n    isTracking,\n    pause,\n    resume,\n    commit,\n    batch,\n    dispose\n  });\n}\n\nvar __defProp$g = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$i = Object.getOwnPropertySymbols;\nvar __hasOwnProp$i = Object.prototype.hasOwnProperty;\nvar __propIsEnum$i = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$g = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$i.call(b, prop))\n      __defNormalProp$g(a, prop, b[prop]);\n  if (__getOwnPropSymbols$i)\n    for (var prop of __getOwnPropSymbols$i(b)) {\n      if (__propIsEnum$i.call(b, prop))\n        __defNormalProp$g(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction useDebouncedRefHistory(source, options = {}) {\n  const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n  const history = useRefHistory(source, __spreadProps$6(__spreadValues$g({}, options), { eventFilter: filter }));\n  return __spreadValues$g({}, history);\n}\n\nfunction useDeviceMotion(options = {}) {\n  const {\n    window = defaultWindow,\n    eventFilter = bypassFilter\n  } = options;\n  const acceleration = ref({ x: null, y: null, z: null });\n  const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n  const interval = ref(0);\n  const accelerationIncludingGravity = ref({\n    x: null,\n    y: null,\n    z: null\n  });\n  if (window) {\n    const onDeviceMotion = createFilterWrapper(\n      eventFilter,\n      (event) => {\n        acceleration.value = event.acceleration;\n        accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n        rotationRate.value = event.rotationRate;\n        interval.value = event.interval;\n      }\n    );\n    useEventListener(window, \"devicemotion\", onDeviceMotion);\n  }\n  return {\n    acceleration,\n    accelerationIncludingGravity,\n    rotationRate,\n    interval\n  };\n}\n\nfunction useDeviceOrientation(options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n  const isAbsolute = ref(false);\n  const alpha = ref(null);\n  const beta = ref(null);\n  const gamma = ref(null);\n  if (window && isSupported.value) {\n    useEventListener(window, \"deviceorientation\", (event) => {\n      isAbsolute.value = event.absolute;\n      alpha.value = event.alpha;\n      beta.value = event.beta;\n      gamma.value = event.gamma;\n    });\n  }\n  return {\n    isSupported,\n    isAbsolute,\n    alpha,\n    beta,\n    gamma\n  };\n}\n\nfunction useDevicePixelRatio({\n  window = defaultWindow\n} = {}) {\n  const pixelRatio = ref(1);\n  if (window) {\n    let observe = function() {\n      pixelRatio.value = window.devicePixelRatio;\n      cleanup();\n      media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n      media.addEventListener(\"change\", observe, { once: true });\n    }, cleanup = function() {\n      media == null ? void 0 : media.removeEventListener(\"change\", observe);\n    };\n    let media;\n    observe();\n    tryOnScopeDispose(cleanup);\n  }\n  return { pixelRatio };\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n  const {\n    controls = false,\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n  let permissionStatus;\n  const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n  const state = ref();\n  const onChange = () => {\n    if (permissionStatus)\n      state.value = permissionStatus.state;\n  };\n  const query = createSingletonPromise(async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionStatus) {\n      try {\n        permissionStatus = await navigator.permissions.query(desc);\n        useEventListener(permissionStatus, \"change\", onChange);\n        onChange();\n      } catch (e) {\n        state.value = \"prompt\";\n      }\n    }\n    return permissionStatus;\n  });\n  query();\n  if (controls) {\n    return {\n      state,\n      isSupported,\n      query\n    };\n  } else {\n    return state;\n  }\n}\n\nfunction useDevicesList(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    requestPermissions = false,\n    constraints = { audio: true, video: true },\n    onUpdated\n  } = options;\n  const devices = ref([]);\n  const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n  const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n  const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n  const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n  const permissionGranted = ref(false);\n  let stream;\n  async function update() {\n    if (!isSupported.value)\n      return;\n    devices.value = await navigator.mediaDevices.enumerateDevices();\n    onUpdated == null ? void 0 : onUpdated(devices.value);\n    if (stream) {\n      stream.getTracks().forEach((t) => t.stop());\n      stream = null;\n    }\n  }\n  async function ensurePermissions() {\n    if (!isSupported.value)\n      return false;\n    if (permissionGranted.value)\n      return true;\n    const { state, query } = usePermission(\"camera\", { controls: true });\n    await query();\n    if (state.value !== \"granted\") {\n      stream = await navigator.mediaDevices.getUserMedia(constraints);\n      update();\n      permissionGranted.value = true;\n    } else {\n      permissionGranted.value = true;\n    }\n    return permissionGranted.value;\n  }\n  if (isSupported.value) {\n    if (requestPermissions)\n      ensurePermissions();\n    useEventListener(navigator.mediaDevices, \"devicechange\", update);\n    update();\n  }\n  return {\n    devices,\n    ensurePermissions,\n    permissionGranted,\n    videoInputs,\n    audioInputs,\n    audioOutputs,\n    isSupported\n  };\n}\n\nfunction useDisplayMedia(options = {}) {\n  var _a;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const video = options.video;\n  const audio = options.audio;\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n  });\n  const constraint = { audio, video };\n  const stream = shallowRef();\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n    return stream.value;\n  }\n  async function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  watch(\n    enabled,\n    (v) => {\n      if (v)\n        _start();\n      else\n        _stop();\n    },\n    { immediate: true }\n  );\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    enabled\n  };\n}\n\nfunction useDocumentVisibility({ document = defaultDocument } = {}) {\n  if (!document)\n    return ref(\"visible\");\n  const visibility = ref(document.visibilityState);\n  useEventListener(document, \"visibilitychange\", () => {\n    visibility.value = document.visibilityState;\n  });\n  return visibility;\n}\n\nvar __defProp$f = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$h = Object.getOwnPropertySymbols;\nvar __hasOwnProp$h = Object.prototype.hasOwnProperty;\nvar __propIsEnum$h = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$f = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$h.call(b, prop))\n      __defNormalProp$f(a, prop, b[prop]);\n  if (__getOwnPropSymbols$h)\n    for (var prop of __getOwnPropSymbols$h(b)) {\n      if (__propIsEnum$h.call(b, prop))\n        __defNormalProp$f(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction useDraggable(target, options = {}) {\n  var _a, _b;\n  const {\n    pointerTypes,\n    preventDefault,\n    stopPropagation,\n    exact,\n    onMove,\n    onEnd,\n    onStart,\n    initialValue,\n    axis = \"both\",\n    draggingElement = defaultWindow,\n    handle: draggingHandle = target\n  } = options;\n  const position = ref(\n    (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n  );\n  const pressedDelta = ref();\n  const filterEvent = (e) => {\n    if (pointerTypes)\n      return pointerTypes.includes(e.pointerType);\n    return true;\n  };\n  const handleEvent = (e) => {\n    if (toValue(preventDefault))\n      e.preventDefault();\n    if (toValue(stopPropagation))\n      e.stopPropagation();\n  };\n  const start = (e) => {\n    if (!filterEvent(e))\n      return;\n    if (toValue(exact) && e.target !== toValue(target))\n      return;\n    const rect = toValue(target).getBoundingClientRect();\n    const pos = {\n      x: e.clientX - rect.left,\n      y: e.clientY - rect.top\n    };\n    if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n      return;\n    pressedDelta.value = pos;\n    handleEvent(e);\n  };\n  const move = (e) => {\n    if (!filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    let { x, y } = position.value;\n    if (axis === \"x\" || axis === \"both\")\n      x = e.clientX - pressedDelta.value.x;\n    if (axis === \"y\" || axis === \"both\")\n      y = e.clientY - pressedDelta.value.y;\n    position.value = {\n      x,\n      y\n    };\n    onMove == null ? void 0 : onMove(position.value, e);\n    handleEvent(e);\n  };\n  const end = (e) => {\n    if (!filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    pressedDelta.value = void 0;\n    onEnd == null ? void 0 : onEnd(position.value, e);\n    handleEvent(e);\n  };\n  if (isClient) {\n    const config = { capture: (_b = options.capture) != null ? _b : true };\n    useEventListener(draggingHandle, \"pointerdown\", start, config);\n    useEventListener(draggingElement, \"pointermove\", move, config);\n    useEventListener(draggingElement, \"pointerup\", end, config);\n  }\n  return __spreadProps$5(__spreadValues$f({}, toRefs(position)), {\n    position,\n    isDragging: computed(() => !!pressedDelta.value),\n    style: computed(\n      () => `left:${position.value.x}px;top:${position.value.y}px;`\n    )\n  });\n}\n\nfunction useDropZone(target, onDrop) {\n  const isOverDropZone = ref(false);\n  let counter = 0;\n  if (isClient) {\n    useEventListener(target, \"dragenter\", (event) => {\n      event.preventDefault();\n      counter += 1;\n      isOverDropZone.value = true;\n    });\n    useEventListener(target, \"dragover\", (event) => {\n      event.preventDefault();\n    });\n    useEventListener(target, \"dragleave\", (event) => {\n      event.preventDefault();\n      counter -= 1;\n      if (counter === 0)\n        isOverDropZone.value = false;\n    });\n    useEventListener(target, \"drop\", (event) => {\n      var _a, _b;\n      event.preventDefault();\n      counter = 0;\n      isOverDropZone.value = false;\n      const files = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n      onDrop == null ? void 0 : onDrop(files.length === 0 ? null : files);\n    });\n  }\n  return {\n    isOverDropZone\n  };\n}\n\nvar __getOwnPropSymbols$g = Object.getOwnPropertySymbols;\nvar __hasOwnProp$g = Object.prototype.hasOwnProperty;\nvar __propIsEnum$g = Object.prototype.propertyIsEnumerable;\nvar __objRest$2 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$g.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$g)\n    for (var prop of __getOwnPropSymbols$g(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$g.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction useResizeObserver(target, callback, options = {}) {\n  const _a = options, { window = defaultWindow } = _a, observerOptions = __objRest$2(_a, [\"window\"]);\n  let observer;\n  const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(\n    () => Array.isArray(target) ? target.map((el) => unrefElement(el)) : [unrefElement(target)]\n  );\n  const stopWatch = watch(\n    targets,\n    (els) => {\n      cleanup();\n      if (isSupported.value && window) {\n        observer = new ResizeObserver(callback);\n        for (const _el of els)\n          _el && observer.observe(_el, observerOptions);\n      }\n    },\n    { immediate: true, flush: \"post\", deep: true }\n  );\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nfunction useElementBounding(target, options = {}) {\n  const {\n    reset = true,\n    windowResize = true,\n    windowScroll = true,\n    immediate = true\n  } = options;\n  const height = ref(0);\n  const bottom = ref(0);\n  const left = ref(0);\n  const right = ref(0);\n  const top = ref(0);\n  const width = ref(0);\n  const x = ref(0);\n  const y = ref(0);\n  function update() {\n    const el = unrefElement(target);\n    if (!el) {\n      if (reset) {\n        height.value = 0;\n        bottom.value = 0;\n        left.value = 0;\n        right.value = 0;\n        top.value = 0;\n        width.value = 0;\n        x.value = 0;\n        y.value = 0;\n      }\n      return;\n    }\n    const rect = el.getBoundingClientRect();\n    height.value = rect.height;\n    bottom.value = rect.bottom;\n    left.value = rect.left;\n    right.value = rect.right;\n    top.value = rect.top;\n    width.value = rect.width;\n    x.value = rect.x;\n    y.value = rect.y;\n  }\n  useResizeObserver(target, update);\n  watch(() => unrefElement(target), (ele) => !ele && update());\n  if (windowScroll)\n    useEventListener(\"scroll\", update, { capture: true, passive: true });\n  if (windowResize)\n    useEventListener(\"resize\", update, { passive: true });\n  tryOnMounted(() => {\n    if (immediate)\n      update();\n  });\n  return {\n    height,\n    bottom,\n    left,\n    right,\n    top,\n    width,\n    x,\n    y,\n    update\n  };\n}\n\nvar __defProp$e = Object.defineProperty;\nvar __getOwnPropSymbols$f = Object.getOwnPropertySymbols;\nvar __hasOwnProp$f = Object.prototype.hasOwnProperty;\nvar __propIsEnum$f = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$e = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$f.call(b, prop))\n      __defNormalProp$e(a, prop, b[prop]);\n  if (__getOwnPropSymbols$f)\n    for (var prop of __getOwnPropSymbols$f(b)) {\n      if (__propIsEnum$f.call(b, prop))\n        __defNormalProp$e(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useElementByPoint(options) {\n  const element = ref(null);\n  const { x, y, document = defaultDocument } = options;\n  const controls = useRafFn(() => {\n    element.value = (document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) || null;\n  });\n  return __spreadValues$e({\n    element\n  }, controls);\n}\n\nfunction useElementHover(el, options = {}) {\n  const {\n    delayEnter = 0,\n    delayLeave = 0,\n    window = defaultWindow\n  } = options;\n  const isHovered = ref(false);\n  let timer;\n  const toggle = (entering) => {\n    const delay = entering ? delayEnter : delayLeave;\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n    }\n    if (delay)\n      timer = setTimeout(() => isHovered.value = entering, delay);\n    else\n      isHovered.value = entering;\n  };\n  if (!window)\n    return isHovered;\n  useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n  useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n  return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n  const { window = defaultWindow, box = \"content-box\" } = options;\n  const isSVG = computed(() => {\n    var _a, _b;\n    return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n  });\n  const width = ref(initialSize.width);\n  const height = ref(initialSize.height);\n  useResizeObserver(\n    target,\n    ([entry]) => {\n      const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n      if (window && isSVG.value) {\n        const $elem = unrefElement(target);\n        if ($elem) {\n          const styles = window.getComputedStyle($elem);\n          width.value = parseFloat(styles.width);\n          height.value = parseFloat(styles.height);\n        }\n      } else {\n        if (boxSize) {\n          const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n          width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n          height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n        } else {\n          width.value = entry.contentRect.width;\n          height.value = entry.contentRect.height;\n        }\n      }\n    },\n    options\n  );\n  watch(\n    () => unrefElement(target),\n    (ele) => {\n      width.value = ele ? initialSize.width : 0;\n      height.value = ele ? initialSize.height : 0;\n    }\n  );\n  return {\n    width,\n    height\n  };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n  const {\n    root,\n    rootMargin = \"0px\",\n    threshold = 0.1,\n    window = defaultWindow,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n  const targets = computed(() => {\n    const _target = toValue(target);\n    return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n  });\n  let cleanup = noop;\n  const isActive = ref(immediate);\n  const stopWatch = isSupported.value ? watch(\n    () => [targets.value, unrefElement(root), isActive.value],\n    ([targets2, root2]) => {\n      cleanup();\n      if (!isActive.value)\n        return;\n      if (!targets2.length)\n        return;\n      const observer = new IntersectionObserver(\n        callback,\n        {\n          root: unrefElement(root2),\n          rootMargin,\n          threshold\n        }\n      );\n      targets2.forEach((el) => el && observer.observe(el));\n      cleanup = () => {\n        observer.disconnect();\n        cleanup = noop;\n      };\n    },\n    { immediate, flush: \"post\" }\n  ) : noop;\n  const stop = () => {\n    cleanup();\n    stopWatch();\n    isActive.value = false;\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    isActive,\n    pause() {\n      cleanup();\n      isActive.value = false;\n    },\n    resume() {\n      isActive.value = true;\n    },\n    stop\n  };\n}\n\nfunction useElementVisibility(element, { window = defaultWindow, scrollTarget } = {}) {\n  const elementIsVisible = ref(false);\n  useIntersectionObserver(\n    element,\n    ([{ isIntersecting }]) => {\n      elementIsVisible.value = isIntersecting;\n    },\n    {\n      root: scrollTarget,\n      window\n    }\n  );\n  return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n  const scope = getCurrentScope();\n  function on(listener) {\n    var _a;\n    const listeners = events.get(key) || /* @__PURE__ */ new Set();\n    listeners.add(listener);\n    events.set(key, listeners);\n    const _off = () => off(listener);\n    (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n    return _off;\n  }\n  function once(listener) {\n    function _listener(...args) {\n      off(_listener);\n      listener(...args);\n    }\n    return on(_listener);\n  }\n  function off(listener) {\n    const listeners = events.get(key);\n    if (!listeners)\n      return;\n    listeners.delete(listener);\n    if (!listeners.size)\n      reset();\n  }\n  function reset() {\n    events.delete(key);\n  }\n  function emit(event, payload) {\n    var _a;\n    (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n  }\n  return { on, once, off, emit, reset };\n}\n\nfunction useEventSource(url, events = [], options = {}) {\n  const event = ref(null);\n  const data = ref(null);\n  const status = ref(\"CONNECTING\");\n  const eventSource = ref(null);\n  const error = shallowRef(null);\n  const {\n    withCredentials = false\n  } = options;\n  const close = () => {\n    if (eventSource.value) {\n      eventSource.value.close();\n      eventSource.value = null;\n      status.value = \"CLOSED\";\n    }\n  };\n  const es = new EventSource(url, { withCredentials });\n  eventSource.value = es;\n  es.onopen = () => {\n    status.value = \"OPEN\";\n    error.value = null;\n  };\n  es.onerror = (e) => {\n    status.value = \"CLOSED\";\n    error.value = e;\n  };\n  es.onmessage = (e) => {\n    event.value = null;\n    data.value = e.data;\n  };\n  for (const event_name of events) {\n    useEventListener(es, event_name, (e) => {\n      event.value = event_name;\n      data.value = e.data || null;\n    });\n  }\n  tryOnScopeDispose(() => {\n    close();\n  });\n  return {\n    eventSource,\n    event,\n    data,\n    status,\n    error,\n    close\n  };\n}\n\nfunction useEyeDropper(options = {}) {\n  const { initialValue = \"\" } = options;\n  const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n  const sRGBHex = ref(initialValue);\n  async function open(openOptions) {\n    if (!isSupported.value)\n      return;\n    const eyeDropper = new window.EyeDropper();\n    const result = await eyeDropper.open(openOptions);\n    sRGBHex.value = result.sRGBHex;\n    return result;\n  }\n  return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n  const {\n    baseUrl = \"\",\n    rel = \"icon\",\n    document = defaultDocument\n  } = options;\n  const favicon = toRef(newIcon);\n  const applyIcon = (icon) => {\n    document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`).forEach((el) => el.href = `${baseUrl}${icon}`);\n  };\n  watch(\n    favicon,\n    (i, o) => {\n      if (typeof i === \"string\" && i !== o)\n        applyIcon(i);\n    },\n    { immediate: true }\n  );\n  return favicon;\n}\n\nvar __defProp$d = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$e = Object.getOwnPropertySymbols;\nvar __hasOwnProp$e = Object.prototype.hasOwnProperty;\nvar __propIsEnum$e = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$d = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$e.call(b, prop))\n      __defNormalProp$d(a, prop, b[prop]);\n  if (__getOwnPropSymbols$e)\n    for (var prop of __getOwnPropSymbols$e(b)) {\n      if (__propIsEnum$e.call(b, prop))\n        __defNormalProp$d(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nconst payloadMapping = {\n  json: \"application/json\",\n  text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n  return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\");\n}\nfunction isAbsoluteURL(url) {\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\nfunction headersToObject(headers) {\n  if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n    return Object.fromEntries([...headers.entries()]);\n  return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n  if (combination === \"overwrite\") {\n    return async (ctx) => {\n      const callback = callbacks[callbacks.length - 1];\n      if (callback)\n        return __spreadValues$d(__spreadValues$d({}, ctx), await callback(ctx));\n      return ctx;\n    };\n  } else {\n    return async (ctx) => {\n      for (const callback of callbacks) {\n        if (callback)\n          ctx = __spreadValues$d(__spreadValues$d({}, ctx), await callback(ctx));\n      }\n      return ctx;\n    };\n  }\n}\nfunction createFetch(config = {}) {\n  const _combination = config.combination || \"chain\";\n  const _options = config.options || {};\n  const _fetchOptions = config.fetchOptions || {};\n  function useFactoryFetch(url, ...args) {\n    const computedUrl = computed(() => {\n      const baseUrl = toValue(config.baseUrl);\n      const targetUrl = toValue(url);\n      return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n    });\n    let options = _options;\n    let fetchOptions = _fetchOptions;\n    if (args.length > 0) {\n      if (isFetchOptions(args[0])) {\n        options = __spreadProps$4(__spreadValues$d(__spreadValues$d({}, options), args[0]), {\n          beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n          afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n          onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n        });\n      } else {\n        fetchOptions = __spreadProps$4(__spreadValues$d(__spreadValues$d({}, fetchOptions), args[0]), {\n          headers: __spreadValues$d(__spreadValues$d({}, headersToObject(fetchOptions.headers) || {}), headersToObject(args[0].headers) || {})\n        });\n      }\n    }\n    if (args.length > 1 && isFetchOptions(args[1])) {\n      options = __spreadProps$4(__spreadValues$d(__spreadValues$d({}, options), args[1]), {\n        beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n        afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n        onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n      });\n    }\n    return useFetch(computedUrl, fetchOptions, options);\n  }\n  return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n  var _a;\n  const supportsAbort = typeof AbortController === \"function\";\n  let fetchOptions = {};\n  let options = { immediate: true, refetch: false, timeout: 0 };\n  const config = {\n    method: \"GET\",\n    type: \"text\",\n    payload: void 0\n  };\n  if (args.length > 0) {\n    if (isFetchOptions(args[0]))\n      options = __spreadValues$d(__spreadValues$d({}, options), args[0]);\n    else\n      fetchOptions = args[0];\n  }\n  if (args.length > 1) {\n    if (isFetchOptions(args[1]))\n      options = __spreadValues$d(__spreadValues$d({}, options), args[1]);\n  }\n  const {\n    fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n    initialData,\n    timeout\n  } = options;\n  const responseEvent = createEventHook();\n  const errorEvent = createEventHook();\n  const finallyEvent = createEventHook();\n  const isFinished = ref(false);\n  const isFetching = ref(false);\n  const aborted = ref(false);\n  const statusCode = ref(null);\n  const response = shallowRef(null);\n  const error = shallowRef(null);\n  const data = shallowRef(initialData || null);\n  const canAbort = computed(() => supportsAbort && isFetching.value);\n  let controller;\n  let timer;\n  const abort = () => {\n    if (supportsAbort) {\n      controller == null ? void 0 : controller.abort();\n      controller = new AbortController();\n      controller.signal.onabort = () => aborted.value = true;\n      fetchOptions = __spreadProps$4(__spreadValues$d({}, fetchOptions), {\n        signal: controller.signal\n      });\n    }\n  };\n  const loading = (isLoading) => {\n    isFetching.value = isLoading;\n    isFinished.value = !isLoading;\n  };\n  if (timeout)\n    timer = useTimeoutFn(abort, timeout, { immediate: false });\n  const execute = async (throwOnFailed = false) => {\n    var _a2;\n    abort();\n    loading(true);\n    error.value = null;\n    statusCode.value = null;\n    aborted.value = false;\n    const defaultFetchOptions = {\n      method: config.method,\n      headers: {}\n    };\n    if (config.payload) {\n      const headers = headersToObject(defaultFetchOptions.headers);\n      if (config.payloadType)\n        headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n      const payload = toValue(config.payload);\n      defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n    }\n    let isCanceled = false;\n    const context = {\n      url: toValue(url),\n      options: __spreadValues$d(__spreadValues$d({}, defaultFetchOptions), fetchOptions),\n      cancel: () => {\n        isCanceled = true;\n      }\n    };\n    if (options.beforeFetch)\n      Object.assign(context, await options.beforeFetch(context));\n    if (isCanceled || !fetch) {\n      loading(false);\n      return Promise.resolve(null);\n    }\n    let responseData = null;\n    if (timer)\n      timer.start();\n    return new Promise((resolve, reject) => {\n      var _a3;\n      fetch(\n        context.url,\n        __spreadProps$4(__spreadValues$d(__spreadValues$d({}, defaultFetchOptions), context.options), {\n          headers: __spreadValues$d(__spreadValues$d({}, headersToObject(defaultFetchOptions.headers)), headersToObject((_a3 = context.options) == null ? void 0 : _a3.headers))\n        })\n      ).then(async (fetchResponse) => {\n        response.value = fetchResponse;\n        statusCode.value = fetchResponse.status;\n        responseData = await fetchResponse[config.type]();\n        if (!fetchResponse.ok) {\n          data.value = initialData || null;\n          throw new Error(fetchResponse.statusText);\n        }\n        if (options.afterFetch)\n          ({ data: responseData } = await options.afterFetch({ data: responseData, response: fetchResponse }));\n        data.value = responseData;\n        responseEvent.trigger(fetchResponse);\n        return resolve(fetchResponse);\n      }).catch(async (fetchError) => {\n        let errorData = fetchError.message || fetchError.name;\n        if (options.onFetchError)\n          ({ error: errorData } = await options.onFetchError({ data: responseData, error: fetchError, response: response.value }));\n        error.value = errorData;\n        errorEvent.trigger(fetchError);\n        if (throwOnFailed)\n          return reject(fetchError);\n        return resolve(null);\n      }).finally(() => {\n        loading(false);\n        if (timer)\n          timer.stop();\n        finallyEvent.trigger(null);\n      });\n    });\n  };\n  const refetch = toRef(options.refetch);\n  watch(\n    [\n      refetch,\n      toRef(url)\n    ],\n    ([refetch2]) => refetch2 && execute(),\n    { deep: true }\n  );\n  const shell = {\n    isFinished,\n    statusCode,\n    response,\n    error,\n    data,\n    isFetching,\n    canAbort,\n    aborted,\n    abort,\n    execute,\n    onFetchResponse: responseEvent.on,\n    onFetchError: errorEvent.on,\n    onFetchFinally: finallyEvent.on,\n    // method\n    get: setMethod(\"GET\"),\n    put: setMethod(\"PUT\"),\n    post: setMethod(\"POST\"),\n    delete: setMethod(\"DELETE\"),\n    patch: setMethod(\"PATCH\"),\n    head: setMethod(\"HEAD\"),\n    options: setMethod(\"OPTIONS\"),\n    // type\n    json: setType(\"json\"),\n    text: setType(\"text\"),\n    blob: setType(\"blob\"),\n    arrayBuffer: setType(\"arrayBuffer\"),\n    formData: setType(\"formData\")\n  };\n  function setMethod(method) {\n    return (payload, payloadType) => {\n      if (!isFetching.value) {\n        config.method = method;\n        config.payload = payload;\n        config.payloadType = payloadType;\n        if (isRef(config.payload)) {\n          watch(\n            [\n              refetch,\n              toRef(config.payload)\n            ],\n            ([refetch2]) => refetch2 && execute(),\n            { deep: true }\n          );\n        }\n        const rawPayload = toValue(config.payload);\n        if (!payloadType && rawPayload && Object.getPrototypeOf(rawPayload) === Object.prototype && !(rawPayload instanceof FormData))\n          config.payloadType = \"json\";\n        return __spreadProps$4(__spreadValues$d({}, shell), {\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        });\n      }\n      return void 0;\n    };\n  }\n  function waitUntilFinished() {\n    return new Promise((resolve, reject) => {\n      until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n    });\n  }\n  function setType(type) {\n    return () => {\n      if (!isFetching.value) {\n        config.type = type;\n        return __spreadProps$4(__spreadValues$d({}, shell), {\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        });\n      }\n      return void 0;\n    };\n  }\n  if (options.immediate)\n    Promise.resolve().then(() => execute());\n  return __spreadProps$4(__spreadValues$d({}, shell), {\n    then(onFulfilled, onRejected) {\n      return waitUntilFinished().then(onFulfilled, onRejected);\n    }\n  });\n}\nfunction joinPaths(start, end) {\n  if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n    return `${start}/${end}`;\n  return `${start}${end}`;\n}\n\nvar __defProp$c = Object.defineProperty;\nvar __getOwnPropSymbols$d = Object.getOwnPropertySymbols;\nvar __hasOwnProp$d = Object.prototype.hasOwnProperty;\nvar __propIsEnum$d = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$c = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$d.call(b, prop))\n      __defNormalProp$c(a, prop, b[prop]);\n  if (__getOwnPropSymbols$d)\n    for (var prop of __getOwnPropSymbols$d(b)) {\n      if (__propIsEnum$d.call(b, prop))\n        __defNormalProp$c(a, prop, b[prop]);\n    }\n  return a;\n};\nconst DEFAULT_OPTIONS = {\n  multiple: true,\n  accept: \"*\"\n};\nfunction useFileDialog(options = {}) {\n  const {\n    document = defaultDocument\n  } = options;\n  const files = ref(null);\n  const { on: onChange, trigger } = createEventHook();\n  let input;\n  if (document) {\n    input = document.createElement(\"input\");\n    input.type = \"file\";\n    input.onchange = (event) => {\n      const result = event.target;\n      files.value = result.files;\n      trigger(files.value);\n    };\n  }\n  const open = (localOptions) => {\n    if (!input)\n      return;\n    const _options = __spreadValues$c(__spreadValues$c(__spreadValues$c({}, DEFAULT_OPTIONS), options), localOptions);\n    input.multiple = _options.multiple;\n    input.accept = _options.accept;\n    if (hasOwn(_options, \"capture\"))\n      input.capture = _options.capture;\n    input.click();\n  };\n  const reset = () => {\n    files.value = null;\n    if (input)\n      input.value = \"\";\n  };\n  return {\n    files: readonly(files),\n    open,\n    reset,\n    onChange\n  };\n}\n\nvar __defProp$b = Object.defineProperty;\nvar __getOwnPropSymbols$c = Object.getOwnPropertySymbols;\nvar __hasOwnProp$c = Object.prototype.hasOwnProperty;\nvar __propIsEnum$c = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$b = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$c.call(b, prop))\n      __defNormalProp$b(a, prop, b[prop]);\n  if (__getOwnPropSymbols$c)\n    for (var prop of __getOwnPropSymbols$c(b)) {\n      if (__propIsEnum$c.call(b, prop))\n        __defNormalProp$b(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useFileSystemAccess(options = {}) {\n  const {\n    window: _window = defaultWindow,\n    dataType = \"Text\"\n  } = options;\n  const window = _window;\n  const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n  const fileHandle = ref();\n  const data = ref();\n  const file = ref();\n  const fileName = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n  });\n  const fileMIME = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n  });\n  const fileSize = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n  });\n  const fileLastModified = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n  });\n  async function open(_options = {}) {\n    if (!isSupported.value)\n      return;\n    const [handle] = await window.showOpenFilePicker(__spreadValues$b(__spreadValues$b({}, toValue(options)), _options));\n    fileHandle.value = handle;\n    await updateFile();\n    await updateData();\n  }\n  async function create(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker(__spreadValues$b(__spreadValues$b({}, options), _options));\n    data.value = void 0;\n    await updateFile();\n    await updateData();\n  }\n  async function save(_options = {}) {\n    if (!isSupported.value)\n      return;\n    if (!fileHandle.value)\n      return saveAs(_options);\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function saveAs(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker(__spreadValues$b(__spreadValues$b({}, options), _options));\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function updateFile() {\n    var _a;\n    file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n  }\n  async function updateData() {\n    var _a, _b;\n    const type = toValue(dataType);\n    if (type === \"Text\")\n      data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n    else if (type === \"ArrayBuffer\")\n      data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n    else if (type === \"Blob\")\n      data.value = file.value;\n  }\n  watch(() => toValue(dataType), updateData);\n  return {\n    isSupported,\n    data,\n    file,\n    fileName,\n    fileMIME,\n    fileSize,\n    fileLastModified,\n    open,\n    create,\n    save,\n    saveAs,\n    updateData\n  };\n}\n\nfunction useFocus(target, options = {}) {\n  const { initialValue = false } = options;\n  const innerFocused = ref(false);\n  const targetElement = computed(() => unrefElement(target));\n  useEventListener(targetElement, \"focus\", () => innerFocused.value = true);\n  useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n  const focused = computed({\n    get: () => innerFocused.value,\n    set(value) {\n      var _a, _b;\n      if (!value && innerFocused.value)\n        (_a = targetElement.value) == null ? void 0 : _a.blur();\n      else if (value && !innerFocused.value)\n        (_b = targetElement.value) == null ? void 0 : _b.focus();\n    }\n  });\n  watch(\n    targetElement,\n    () => {\n      focused.value = initialValue;\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n  const activeElement = useActiveElement(options);\n  const targetElement = computed(() => unrefElement(target));\n  const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n  return { focused };\n}\n\nfunction useFps(options) {\n  var _a;\n  const fps = ref(0);\n  if (typeof performance === \"undefined\")\n    return fps;\n  const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n  let last = performance.now();\n  let ticks = 0;\n  useRafFn(() => {\n    ticks += 1;\n    if (ticks >= every) {\n      const now = performance.now();\n      const diff = now - last;\n      fps.value = Math.round(1e3 / (diff / ticks));\n      last = now;\n      ticks = 0;\n    }\n  });\n  return fps;\n}\n\nconst eventHandlers = [\n  \"fullscreenchange\",\n  \"webkitfullscreenchange\",\n  \"webkitendfullscreen\",\n  \"mozfullscreenchange\",\n  \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n  const {\n    document = defaultDocument,\n    autoExit = false\n  } = options;\n  const targetRef = computed(() => {\n    var _a;\n    return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.querySelector(\"html\");\n  });\n  const isFullscreen = ref(false);\n  const requestMethod = computed(() => {\n    return [\n      \"requestFullscreen\",\n      \"webkitRequestFullscreen\",\n      \"webkitEnterFullscreen\",\n      \"webkitEnterFullScreen\",\n      \"webkitRequestFullScreen\",\n      \"mozRequestFullScreen\",\n      \"msRequestFullscreen\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const exitMethod = computed(() => {\n    return [\n      \"exitFullscreen\",\n      \"webkitExitFullscreen\",\n      \"webkitExitFullScreen\",\n      \"webkitCancelFullScreen\",\n      \"mozCancelFullScreen\",\n      \"msExitFullscreen\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const fullscreenEnabled = computed(() => {\n    return [\n      \"fullScreen\",\n      \"webkitIsFullScreen\",\n      \"webkitDisplayingFullscreen\",\n      \"mozFullScreen\",\n      \"msFullscreenElement\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const fullscreenElementMethod = [\n    \"fullscreenElement\",\n    \"webkitFullscreenElement\",\n    \"mozFullScreenElement\",\n    \"msFullscreenElement\"\n  ].find((m) => document && m in document);\n  const isSupported = useSupported(\n    () => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0\n  );\n  const isCurrentElementFullScreen = () => {\n    if (fullscreenElementMethod)\n      return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n    return false;\n  };\n  const isElementFullScreen = () => {\n    if (fullscreenEnabled.value) {\n      if (document && document[fullscreenEnabled.value] != null) {\n        return document[fullscreenEnabled.value];\n      } else {\n        const target2 = targetRef.value;\n        if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n          return Boolean(target2[fullscreenEnabled.value]);\n        }\n      }\n    }\n    return false;\n  };\n  async function exit() {\n    if (!isSupported.value)\n      return;\n    if (exitMethod.value) {\n      if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n        await document[exitMethod.value]();\n      } else {\n        const target2 = targetRef.value;\n        if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n          await target2[exitMethod.value]();\n      }\n    }\n    isFullscreen.value = false;\n  }\n  async function enter() {\n    if (!isSupported.value)\n      return;\n    if (isElementFullScreen())\n      await exit();\n    const target2 = targetRef.value;\n    if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n      await target2[requestMethod.value]();\n      isFullscreen.value = true;\n    }\n  }\n  async function toggle() {\n    await (isFullscreen.value ? exit() : enter());\n  }\n  const handlerCallback = () => {\n    const isElementFullScreenValue = isElementFullScreen();\n    if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n      isFullscreen.value = isElementFullScreenValue;\n  };\n  useEventListener(document, eventHandlers, handlerCallback, false);\n  useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, false);\n  if (autoExit)\n    tryOnScopeDispose(exit);\n  return {\n    isSupported,\n    isFullscreen,\n    enter,\n    exit,\n    toggle\n  };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n  return computed(() => {\n    if (gamepad.value) {\n      return {\n        buttons: {\n          a: gamepad.value.buttons[0],\n          b: gamepad.value.buttons[1],\n          x: gamepad.value.buttons[2],\n          y: gamepad.value.buttons[3]\n        },\n        bumper: {\n          left: gamepad.value.buttons[4],\n          right: gamepad.value.buttons[5]\n        },\n        triggers: {\n          left: gamepad.value.buttons[6],\n          right: gamepad.value.buttons[7]\n        },\n        stick: {\n          left: {\n            horizontal: gamepad.value.axes[0],\n            vertical: gamepad.value.axes[1],\n            button: gamepad.value.buttons[10]\n          },\n          right: {\n            horizontal: gamepad.value.axes[2],\n            vertical: gamepad.value.axes[3],\n            button: gamepad.value.buttons[11]\n          }\n        },\n        dpad: {\n          up: gamepad.value.buttons[12],\n          down: gamepad.value.buttons[13],\n          left: gamepad.value.buttons[14],\n          right: gamepad.value.buttons[15]\n        },\n        back: gamepad.value.buttons[8],\n        start: gamepad.value.buttons[9]\n      };\n    }\n    return null;\n  });\n}\nfunction useGamepad(options = {}) {\n  const {\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n  const gamepads = ref([]);\n  const onConnectedHook = createEventHook();\n  const onDisconnectedHook = createEventHook();\n  const stateFromGamepad = (gamepad) => {\n    const hapticActuators = [];\n    const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n    if (vibrationActuator)\n      hapticActuators.push(vibrationActuator);\n    if (gamepad.hapticActuators)\n      hapticActuators.push(...gamepad.hapticActuators);\n    return {\n      id: gamepad.id,\n      hapticActuators,\n      index: gamepad.index,\n      mapping: gamepad.mapping,\n      connected: gamepad.connected,\n      timestamp: gamepad.timestamp,\n      axes: gamepad.axes.map((axes) => axes),\n      buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n    };\n  };\n  const updateGamepadState = () => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    for (let i = 0; i < _gamepads.length; ++i) {\n      const gamepad = _gamepads[i];\n      if (gamepad) {\n        const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index);\n        if (index > -1)\n          gamepads.value[index] = stateFromGamepad(gamepad);\n      }\n    }\n  };\n  const { isActive, pause, resume } = useRafFn(updateGamepadState);\n  const onGamepadConnected = (gamepad) => {\n    if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n      gamepads.value.push(stateFromGamepad(gamepad));\n      onConnectedHook.trigger(gamepad.index);\n    }\n    resume();\n  };\n  const onGamepadDisconnected = (gamepad) => {\n    gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n    onDisconnectedHook.trigger(gamepad.index);\n  };\n  useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n  useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n  tryOnMounted(() => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    if (_gamepads) {\n      for (let i = 0; i < _gamepads.length; ++i) {\n        const gamepad = _gamepads[i];\n        if (gamepad)\n          onGamepadConnected(gamepad);\n      }\n    }\n  });\n  pause();\n  return {\n    isSupported,\n    onConnected: onConnectedHook.on,\n    onDisconnected: onDisconnectedHook.on,\n    gamepads,\n    pause,\n    resume,\n    isActive\n  };\n}\n\nfunction useGeolocation(options = {}) {\n  const {\n    enableHighAccuracy = true,\n    maximumAge = 3e4,\n    timeout = 27e3,\n    navigator = defaultNavigator,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n  const locatedAt = ref(null);\n  const error = shallowRef(null);\n  const coords = ref({\n    accuracy: 0,\n    latitude: Infinity,\n    longitude: Infinity,\n    altitude: null,\n    altitudeAccuracy: null,\n    heading: null,\n    speed: null\n  });\n  function updatePosition(position) {\n    locatedAt.value = position.timestamp;\n    coords.value = position.coords;\n    error.value = null;\n  }\n  let watcher;\n  function resume() {\n    if (isSupported.value) {\n      watcher = navigator.geolocation.watchPosition(\n        updatePosition,\n        (err) => error.value = err,\n        {\n          enableHighAccuracy,\n          maximumAge,\n          timeout\n        }\n      );\n    }\n  }\n  if (immediate)\n    resume();\n  function pause() {\n    if (watcher && navigator)\n      navigator.geolocation.clearWatch(watcher);\n  }\n  tryOnScopeDispose(() => {\n    pause();\n  });\n  return {\n    isSupported,\n    coords,\n    locatedAt,\n    error,\n    resume,\n    pause\n  };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n  const {\n    initialState = false,\n    listenForVisibilityChange = true,\n    events = defaultEvents$1,\n    window = defaultWindow,\n    eventFilter = throttleFilter(50)\n  } = options;\n  const idle = ref(initialState);\n  const lastActive = ref(timestamp());\n  let timer;\n  const reset = () => {\n    idle.value = false;\n    clearTimeout(timer);\n    timer = setTimeout(() => idle.value = true, timeout);\n  };\n  const onEvent = createFilterWrapper(\n    eventFilter,\n    () => {\n      lastActive.value = timestamp();\n      reset();\n    }\n  );\n  if (window) {\n    const document = window.document;\n    for (const event of events)\n      useEventListener(window, event, onEvent, { passive: true });\n    if (listenForVisibilityChange) {\n      useEventListener(document, \"visibilitychange\", () => {\n        if (!document.hidden)\n          onEvent();\n      });\n    }\n    reset();\n  }\n  return {\n    idle,\n    lastActive,\n    reset\n  };\n}\n\nvar __defProp$a = Object.defineProperty;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$a = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$b.call(b, prop))\n      __defNormalProp$a(a, prop, b[prop]);\n  if (__getOwnPropSymbols$b)\n    for (var prop of __getOwnPropSymbols$b(b)) {\n      if (__propIsEnum$b.call(b, prop))\n        __defNormalProp$a(a, prop, b[prop]);\n    }\n  return a;\n};\nasync function loadImage(options) {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    const { src, srcset, sizes, class: clazz, loading, crossorigin } = options;\n    img.src = src;\n    if (srcset)\n      img.srcset = srcset;\n    if (sizes)\n      img.sizes = sizes;\n    if (clazz)\n      img.className = clazz;\n    if (loading)\n      img.loading = loading;\n    if (crossorigin)\n      img.crossOrigin = crossorigin;\n    img.onload = () => resolve(img);\n    img.onerror = reject;\n  });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n  const state = useAsyncState(\n    () => loadImage(toValue(options)),\n    void 0,\n    __spreadValues$a({\n      resetOnExecute: true\n    }, asyncStateOptions)\n  );\n  watch(\n    () => toValue(options),\n    () => state.execute(asyncStateOptions.delay),\n    { deep: true }\n  );\n  return state;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n  const {\n    throttle = 0,\n    idle = 200,\n    onStop = noop,\n    onScroll = noop,\n    offset = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    },\n    eventListenerOptions = {\n      capture: false,\n      passive: true\n    },\n    behavior = \"auto\"\n  } = options;\n  const internalX = ref(0);\n  const internalY = ref(0);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo(x2, void 0);\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo(void 0, y2);\n    }\n  });\n  function scrollTo(_x, _y) {\n    var _a, _b, _c;\n    const _element = toValue(element);\n    if (!_element)\n      return;\n    (_c = _element instanceof Document ? document.body : _element) == null ? void 0 : _c.scrollTo({\n      top: (_a = toValue(_y)) != null ? _a : y.value,\n      left: (_b = toValue(_x)) != null ? _b : x.value,\n      behavior: toValue(behavior)\n    });\n  }\n  const isScrolling = ref(false);\n  const arrivedState = reactive({\n    left: true,\n    right: false,\n    top: true,\n    bottom: false\n  });\n  const directions = reactive({\n    left: false,\n    right: false,\n    top: false,\n    bottom: false\n  });\n  const onScrollEnd = (e) => {\n    if (!isScrolling.value)\n      return;\n    isScrolling.value = false;\n    directions.left = false;\n    directions.right = false;\n    directions.top = false;\n    directions.bottom = false;\n    onStop(e);\n  };\n  const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n  const setArrivedState = (target) => {\n    const el = target === document ? target.documentElement : target;\n    const { display, flexDirection } = getComputedStyle(el);\n    const scrollLeft = el.scrollLeft;\n    directions.left = scrollLeft < internalX.value;\n    directions.right = scrollLeft > internalX.value;\n    const left = Math.abs(scrollLeft) <= 0 + (offset.left || 0);\n    const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"row-reverse\") {\n      arrivedState.left = right;\n      arrivedState.right = left;\n    } else {\n      arrivedState.left = left;\n      arrivedState.right = right;\n    }\n    internalX.value = scrollLeft;\n    let scrollTop = el.scrollTop;\n    if (target === document && !scrollTop)\n      scrollTop = document.body.scrollTop;\n    directions.top = scrollTop < internalY.value;\n    directions.bottom = scrollTop > internalY.value;\n    const top = Math.abs(scrollTop) <= 0 + (offset.top || 0);\n    const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"column-reverse\") {\n      arrivedState.top = bottom;\n      arrivedState.bottom = top;\n    } else {\n      arrivedState.top = top;\n      arrivedState.bottom = bottom;\n    }\n    internalY.value = scrollTop;\n  };\n  const onScrollHandler = (e) => {\n    const eventTarget = e.target === document ? e.target.documentElement : e.target;\n    setArrivedState(eventTarget);\n    isScrolling.value = true;\n    onScrollEndDebounced(e);\n    onScroll(e);\n  };\n  useEventListener(\n    element,\n    \"scroll\",\n    throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n    eventListenerOptions\n  );\n  useEventListener(\n    element,\n    \"scrollend\",\n    onScrollEnd,\n    eventListenerOptions\n  );\n  return {\n    x,\n    y,\n    isScrolling,\n    arrivedState,\n    directions,\n    measure() {\n      const _element = toValue(element);\n      if (_element)\n        setArrivedState(_element);\n    }\n  };\n}\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$a.call(b, prop))\n      __defNormalProp$9(a, prop, b[prop]);\n  if (__getOwnPropSymbols$a)\n    for (var prop of __getOwnPropSymbols$a(b)) {\n      if (__propIsEnum$a.call(b, prop))\n        __defNormalProp$9(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n  var _a;\n  const {\n    direction = \"bottom\",\n    interval = 100\n  } = options;\n  const state = reactive(useScroll(\n    element,\n    __spreadProps$3(__spreadValues$9({}, options), {\n      offset: __spreadValues$9({\n        [direction]: (_a = options.distance) != null ? _a : 0\n      }, options.offset)\n    })\n  ));\n  const promise = ref();\n  const isLoading = computed(() => !!promise.value);\n  function checkAndLoad() {\n    state.measure();\n    const el = toValue(element);\n    if (!el)\n      return;\n    const isNarrower = direction === \"bottom\" || direction === \"top\" ? el.scrollHeight <= el.clientHeight : el.scrollWidth <= el.clientWidth;\n    if (state.arrivedState[direction] || isNarrower) {\n      if (!promise.value) {\n        promise.value = Promise.all([\n          onLoadMore(state),\n          new Promise((resolve) => setTimeout(resolve, interval))\n        ]).finally(() => {\n          promise.value = null;\n          nextTick(() => checkAndLoad());\n        });\n      }\n    }\n  }\n  watch(\n    () => [state.arrivedState[direction], toValue(element)],\n    checkAndLoad,\n    { immediate: true }\n  );\n  return {\n    isLoading\n  };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n  const {\n    events = defaultEvents,\n    document = defaultDocument,\n    initial = null\n  } = options;\n  const state = ref(initial);\n  if (document) {\n    events.forEach((listenerEvent) => {\n      useEventListener(document, listenerEvent, (evt) => {\n        if (typeof evt.getModifierState === \"function\")\n          state.value = evt.getModifierState(modifier);\n      });\n    });\n  }\n  return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n  ctrl: \"control\",\n  command: \"meta\",\n  cmd: \"meta\",\n  option: \"alt\",\n  up: \"arrowup\",\n  down: \"arrowdown\",\n  left: \"arrowleft\",\n  right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n  const {\n    reactive: useReactive = false,\n    target = defaultWindow,\n    aliasMap = DefaultMagicKeysAliasMap,\n    passive = true,\n    onEventFired = noop\n  } = options;\n  const current = reactive(/* @__PURE__ */ new Set());\n  const obj = {\n    toJSON() {\n      return {};\n    },\n    current\n  };\n  const refs = useReactive ? reactive(obj) : obj;\n  const metaDeps = /* @__PURE__ */ new Set();\n  const usedKeys = /* @__PURE__ */ new Set();\n  function setRefs(key, value) {\n    if (key in refs) {\n      if (useReactive)\n        refs[key] = value;\n      else\n        refs[key].value = value;\n    }\n  }\n  function reset() {\n    current.clear();\n    for (const key of usedKeys)\n      setRefs(key, false);\n  }\n  function updateRefs(e, value) {\n    var _a, _b;\n    const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n    const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n    const values = [code, key].filter(Boolean);\n    if (key) {\n      if (value)\n        current.add(key);\n      else\n        current.delete(key);\n    }\n    for (const key2 of values) {\n      usedKeys.add(key2);\n      setRefs(key2, value);\n    }\n    if (key === \"meta\" && !value) {\n      metaDeps.forEach((key2) => {\n        current.delete(key2);\n        setRefs(key2, false);\n      });\n      metaDeps.clear();\n    } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n      [...current, ...values].forEach((key2) => metaDeps.add(key2));\n    }\n  }\n  useEventListener(target, \"keydown\", (e) => {\n    updateRefs(e, true);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(target, \"keyup\", (e) => {\n    updateRefs(e, false);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(\"blur\", reset, { passive: true });\n  useEventListener(\"focus\", reset, { passive: true });\n  const proxy = new Proxy(\n    refs,\n    {\n      get(target2, prop, rec) {\n        if (typeof prop !== \"string\")\n          return Reflect.get(target2, prop, rec);\n        prop = prop.toLowerCase();\n        if (prop in aliasMap)\n          prop = aliasMap[prop];\n        if (!(prop in refs)) {\n          if (/[+_-]/.test(prop)) {\n            const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n            refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n          } else {\n            refs[prop] = ref(false);\n          }\n        }\n        const r = Reflect.get(target2, prop, rec);\n        return useReactive ? toValue(r) : r;\n      }\n    }\n  );\n  return proxy;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$9.call(b, prop))\n      __defNormalProp$8(a, prop, b[prop]);\n  if (__getOwnPropSymbols$9)\n    for (var prop of __getOwnPropSymbols$9(b)) {\n      if (__propIsEnum$9.call(b, prop))\n        __defNormalProp$8(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction usingElRef(source, cb) {\n  if (toValue(source))\n    cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n  let ranges = [];\n  for (let i = 0; i < timeRanges.length; ++i)\n    ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n  return ranges;\n}\nfunction tracksToArray(tracks) {\n  return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n  src: \"\",\n  tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n  options = __spreadValues$8(__spreadValues$8({}, defaultOptions), options);\n  const {\n    document = defaultDocument\n  } = options;\n  const currentTime = ref(0);\n  const duration = ref(0);\n  const seeking = ref(false);\n  const volume = ref(1);\n  const waiting = ref(false);\n  const ended = ref(false);\n  const playing = ref(false);\n  const rate = ref(1);\n  const stalled = ref(false);\n  const buffered = ref([]);\n  const tracks = ref([]);\n  const selectedTrack = ref(-1);\n  const isPictureInPicture = ref(false);\n  const muted = ref(false);\n  const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n  const sourceErrorEvent = createEventHook();\n  const disableTrack = (track) => {\n    usingElRef(target, (el) => {\n      if (track) {\n        const id = typeof track === \"number\" ? track : track.id;\n        el.textTracks[id].mode = \"disabled\";\n      } else {\n        for (let i = 0; i < el.textTracks.length; ++i)\n          el.textTracks[i].mode = \"disabled\";\n      }\n      selectedTrack.value = -1;\n    });\n  };\n  const enableTrack = (track, disableTracks = true) => {\n    usingElRef(target, (el) => {\n      const id = typeof track === \"number\" ? track : track.id;\n      if (disableTracks)\n        disableTrack();\n      el.textTracks[id].mode = \"showing\";\n      selectedTrack.value = id;\n    });\n  };\n  const togglePictureInPicture = () => {\n    return new Promise((resolve, reject) => {\n      usingElRef(target, async (el) => {\n        if (supportsPictureInPicture) {\n          if (!isPictureInPicture.value) {\n            el.requestPictureInPicture().then(resolve).catch(reject);\n          } else {\n            document.exitPictureInPicture().then(resolve).catch(reject);\n          }\n        }\n      });\n    });\n  };\n  watchEffect(() => {\n    if (!document)\n      return;\n    const el = toValue(target);\n    if (!el)\n      return;\n    const src = toValue(options.src);\n    let sources = [];\n    if (!src)\n      return;\n    if (typeof src === \"string\")\n      sources = [{ src }];\n    else if (Array.isArray(src))\n      sources = src;\n    else if (isObject(src))\n      sources = [src];\n    el.querySelectorAll(\"source\").forEach((e) => {\n      e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n      e.remove();\n    });\n    sources.forEach(({ src: src2, type }) => {\n      const source = document.createElement(\"source\");\n      source.setAttribute(\"src\", src2);\n      source.setAttribute(\"type\", type || \"\");\n      source.addEventListener(\"error\", sourceErrorEvent.trigger);\n      el.appendChild(source);\n    });\n    el.load();\n  });\n  tryOnScopeDispose(() => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n  });\n  watch([target, volume], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.volume = volume.value;\n  });\n  watch([target, muted], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.muted = muted.value;\n  });\n  watch([target, rate], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.playbackRate = rate.value;\n  });\n  watchEffect(() => {\n    if (!document)\n      return;\n    const textTracks = toValue(options.tracks);\n    const el = toValue(target);\n    if (!textTracks || !textTracks.length || !el)\n      return;\n    el.querySelectorAll(\"track\").forEach((e) => e.remove());\n    textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n      const track = document.createElement(\"track\");\n      track.default = isDefault || false;\n      track.kind = kind;\n      track.label = label;\n      track.src = src;\n      track.srclang = srcLang;\n      if (track.default)\n        selectedTrack.value = i;\n      el.appendChild(track);\n    });\n  });\n  const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.currentTime = time;\n  });\n  const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    isPlaying ? el.play() : el.pause();\n  });\n  useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime));\n  useEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration);\n  useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered));\n  useEventListener(target, \"seeking\", () => seeking.value = true);\n  useEventListener(target, \"seeked\", () => seeking.value = false);\n  useEventListener(target, \"waiting\", () => waiting.value = true);\n  useEventListener(target, \"playing\", () => {\n    waiting.value = false;\n    ended.value = false;\n  });\n  useEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate);\n  useEventListener(target, \"stalled\", () => stalled.value = true);\n  useEventListener(target, \"ended\", () => ended.value = true);\n  useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n  useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n  useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n  useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n  useEventListener(target, \"volumechange\", () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    volume.value = el.volume;\n    muted.value = el.muted;\n  });\n  const listeners = [];\n  const stop = watch([target], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    stop();\n    listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n  });\n  tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n  return {\n    currentTime,\n    duration,\n    waiting,\n    seeking,\n    ended,\n    stalled,\n    buffered,\n    playing,\n    rate,\n    // Volume\n    volume,\n    muted,\n    // Tracks\n    tracks,\n    selectedTrack,\n    enableTrack,\n    disableTrack,\n    // Picture in Picture\n    supportsPictureInPicture,\n    togglePictureInPicture,\n    isPictureInPicture,\n    // Events\n    onSourceError: sourceErrorEvent.on\n  };\n}\n\nfunction getMapVue2Compat() {\n  const data = reactive({});\n  return {\n    get: (key) => data[key],\n    set: (key, value) => set(data, key, value),\n    has: (key) => hasOwn(data, key),\n    delete: (key) => del(data, key),\n    clear: () => {\n      Object.keys(data).forEach((key) => {\n        del(data, key);\n      });\n    }\n  };\n}\nfunction useMemoize(resolver, options) {\n  const initCache = () => {\n    if (options == null ? void 0 : options.cache)\n      return reactive(options.cache);\n    if (isVue2)\n      return getMapVue2Compat();\n    return reactive(/* @__PURE__ */ new Map());\n  };\n  const cache = initCache();\n  const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n  const _loadData = (key, ...args) => {\n    cache.set(key, resolver(...args));\n    return cache.get(key);\n  };\n  const loadData = (...args) => _loadData(generateKey(...args), ...args);\n  const deleteData = (...args) => {\n    cache.delete(generateKey(...args));\n  };\n  const clearData = () => {\n    cache.clear();\n  };\n  const memoized = (...args) => {\n    const key = generateKey(...args);\n    if (cache.has(key))\n      return cache.get(key);\n    return _loadData(key, ...args);\n  };\n  memoized.load = loadData;\n  memoized.delete = deleteData;\n  memoized.clear = clearData;\n  memoized.generateKey = generateKey;\n  memoized.cache = cache;\n  return memoized;\n}\n\nfunction useMemory(options = {}) {\n  const memory = ref();\n  const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n  if (isSupported.value) {\n    const { interval = 1e3 } = options;\n    useIntervalFn(() => {\n      memory.value = performance.memory;\n    }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n  }\n  return { isSupported, memory };\n}\n\nconst BuiltinExtractors = {\n  page: (event) => [event.pageX, event.pageY],\n  client: (event) => [event.clientX, event.clientY],\n  screen: (event) => [event.screenX, event.screenY],\n  movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n  const {\n    type = \"page\",\n    touch = true,\n    resetOnTouchEnds = false,\n    initialValue = { x: 0, y: 0 },\n    window = defaultWindow,\n    target = window,\n    eventFilter\n  } = options;\n  const x = ref(initialValue.x);\n  const y = ref(initialValue.y);\n  const sourceType = ref(null);\n  const extractor = typeof type === \"function\" ? type : BuiltinExtractors[type];\n  const mouseHandler = (event) => {\n    const result = extractor(event);\n    if (result) {\n      [x.value, y.value] = result;\n      sourceType.value = \"mouse\";\n    }\n  };\n  const touchHandler = (event) => {\n    if (event.touches.length > 0) {\n      const result = extractor(event.touches[0]);\n      if (result) {\n        [x.value, y.value] = result;\n        sourceType.value = \"touch\";\n      }\n    }\n  };\n  const reset = () => {\n    x.value = initialValue.x;\n    y.value = initialValue.y;\n  };\n  const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n  const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n  if (target) {\n    useEventListener(target, \"mousemove\", mouseHandlerWrapper, { passive: true });\n    useEventListener(target, \"dragover\", mouseHandlerWrapper, { passive: true });\n    if (touch && type !== \"movement\") {\n      useEventListener(target, \"touchstart\", touchHandlerWrapper, { passive: true });\n      useEventListener(target, \"touchmove\", touchHandlerWrapper, { passive: true });\n      if (resetOnTouchEnds)\n        useEventListener(target, \"touchend\", reset, { passive: true });\n    }\n  }\n  return {\n    x,\n    y,\n    sourceType\n  };\n}\n\nfunction useMouseInElement(target, options = {}) {\n  const {\n    handleOutside = true,\n    window = defaultWindow\n  } = options;\n  const { x, y, sourceType } = useMouse(options);\n  const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n  const elementX = ref(0);\n  const elementY = ref(0);\n  const elementPositionX = ref(0);\n  const elementPositionY = ref(0);\n  const elementHeight = ref(0);\n  const elementWidth = ref(0);\n  const isOutside = ref(true);\n  let stop = () => {\n  };\n  if (window) {\n    stop = watch(\n      [targetRef, x, y],\n      () => {\n        const el = unrefElement(targetRef);\n        if (!el)\n          return;\n        const {\n          left,\n          top,\n          width,\n          height\n        } = el.getBoundingClientRect();\n        elementPositionX.value = left + window.pageXOffset;\n        elementPositionY.value = top + window.pageYOffset;\n        elementHeight.value = height;\n        elementWidth.value = width;\n        const elX = x.value - elementPositionX.value;\n        const elY = y.value - elementPositionY.value;\n        isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n        if (handleOutside || !isOutside.value) {\n          elementX.value = elX;\n          elementY.value = elY;\n        }\n      },\n      { immediate: true }\n    );\n    useEventListener(document, \"mouseleave\", () => {\n      isOutside.value = true;\n    });\n  }\n  return {\n    x,\n    y,\n    sourceType,\n    elementX,\n    elementY,\n    elementPositionX,\n    elementPositionY,\n    elementHeight,\n    elementWidth,\n    isOutside,\n    stop\n  };\n}\n\nfunction useMousePressed(options = {}) {\n  const {\n    touch = true,\n    drag = true,\n    initialValue = false,\n    window = defaultWindow\n  } = options;\n  const pressed = ref(initialValue);\n  const sourceType = ref(null);\n  if (!window) {\n    return {\n      pressed,\n      sourceType\n    };\n  }\n  const onPressed = (srcType) => () => {\n    pressed.value = true;\n    sourceType.value = srcType;\n  };\n  const onReleased = () => {\n    pressed.value = false;\n    sourceType.value = null;\n  };\n  const target = computed(() => unrefElement(options.target) || window);\n  useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true });\n  useEventListener(window, \"mouseleave\", onReleased, { passive: true });\n  useEventListener(window, \"mouseup\", onReleased, { passive: true });\n  if (drag) {\n    useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true });\n    useEventListener(window, \"drop\", onReleased, { passive: true });\n    useEventListener(window, \"dragend\", onReleased, { passive: true });\n  }\n  if (touch) {\n    useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true });\n    useEventListener(window, \"touchend\", onReleased, { passive: true });\n    useEventListener(window, \"touchcancel\", onReleased, { passive: true });\n  }\n  return {\n    pressed,\n    sourceType\n  };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"language\" in navigator);\n  const language = ref(navigator == null ? void 0 : navigator.language);\n  useEventListener(window, \"languagechange\", () => {\n    if (navigator)\n      language.value = navigator.language;\n  });\n  return {\n    isSupported,\n    language\n  };\n}\n\nfunction useNetwork(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n  const isOnline = ref(true);\n  const saveData = ref(false);\n  const offlineAt = ref(void 0);\n  const onlineAt = ref(void 0);\n  const downlink = ref(void 0);\n  const downlinkMax = ref(void 0);\n  const rtt = ref(void 0);\n  const effectiveType = ref(void 0);\n  const type = ref(\"unknown\");\n  const connection = isSupported.value && navigator.connection;\n  function updateNetworkInformation() {\n    if (!navigator)\n      return;\n    isOnline.value = navigator.onLine;\n    offlineAt.value = isOnline.value ? void 0 : Date.now();\n    onlineAt.value = isOnline.value ? Date.now() : void 0;\n    if (connection) {\n      downlink.value = connection.downlink;\n      downlinkMax.value = connection.downlinkMax;\n      effectiveType.value = connection.effectiveType;\n      rtt.value = connection.rtt;\n      saveData.value = connection.saveData;\n      type.value = connection.type;\n    }\n  }\n  if (window) {\n    useEventListener(window, \"offline\", () => {\n      isOnline.value = false;\n      offlineAt.value = Date.now();\n    });\n    useEventListener(window, \"online\", () => {\n      isOnline.value = true;\n      onlineAt.value = Date.now();\n    });\n  }\n  if (connection)\n    useEventListener(connection, \"change\", updateNetworkInformation, false);\n  updateNetworkInformation();\n  return {\n    isSupported,\n    isOnline,\n    saveData,\n    offlineAt,\n    onlineAt,\n    downlink,\n    downlinkMax,\n    effectiveType,\n    rtt,\n    type\n  };\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$8.call(b, prop))\n      __defNormalProp$7(a, prop, b[prop]);\n  if (__getOwnPropSymbols$8)\n    for (var prop of __getOwnPropSymbols$8(b)) {\n      if (__propIsEnum$8.call(b, prop))\n        __defNormalProp$7(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useNow(options = {}) {\n  const {\n    controls: exposeControls = false,\n    interval = \"requestAnimationFrame\"\n  } = options;\n  const now = ref(/* @__PURE__ */ new Date());\n  const update = () => now.value = /* @__PURE__ */ new Date();\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n  if (exposeControls) {\n    return __spreadValues$7({\n      now\n    }, controls);\n  } else {\n    return now;\n  }\n}\n\nfunction useObjectUrl(object) {\n  const url = ref();\n  const release = () => {\n    if (url.value)\n      URL.revokeObjectURL(url.value);\n    url.value = void 0;\n  };\n  watch(\n    () => toValue(object),\n    (newObject) => {\n      release();\n      if (newObject)\n        url.value = URL.createObjectURL(newObject);\n    },\n    { immediate: true }\n  );\n  tryOnScopeDispose(release);\n  return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n  if (typeof value === \"function\" || isReadonly(value))\n    return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n  const _value = ref(value);\n  return computed({\n    get() {\n      return _value.value = clamp(_value.value, toValue(min), toValue(max));\n    },\n    set(value2) {\n      _value.value = clamp(value2, toValue(min), toValue(max));\n    }\n  });\n}\n\nfunction useOffsetPagination(options) {\n  const {\n    total = Infinity,\n    pageSize = 10,\n    page = 1,\n    onPageChange = noop,\n    onPageSizeChange = noop,\n    onPageCountChange = noop\n  } = options;\n  const currentPageSize = useClamp(pageSize, 1, Infinity);\n  const pageCount = computed(() => Math.max(\n    1,\n    Math.ceil(toValue(total) / toValue(currentPageSize))\n  ));\n  const currentPage = useClamp(page, 1, pageCount);\n  const isFirstPage = computed(() => currentPage.value === 1);\n  const isLastPage = computed(() => currentPage.value === pageCount.value);\n  if (isRef(page))\n    syncRef(page, currentPage);\n  if (isRef(pageSize))\n    syncRef(pageSize, currentPageSize);\n  function prev() {\n    currentPage.value--;\n  }\n  function next() {\n    currentPage.value++;\n  }\n  const returnValue = {\n    currentPage,\n    currentPageSize,\n    pageCount,\n    isFirstPage,\n    isLastPage,\n    prev,\n    next\n  };\n  watch(currentPage, () => {\n    onPageChange(reactive(returnValue));\n  });\n  watch(currentPageSize, () => {\n    onPageSizeChange(reactive(returnValue));\n  });\n  watch(pageCount, () => {\n    onPageCountChange(reactive(returnValue));\n  });\n  return returnValue;\n}\n\nfunction useOnline(options = {}) {\n  const { isOnline } = useNetwork(options);\n  return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n  const { window = defaultWindow } = options;\n  const isLeft = ref(false);\n  const handler = (event) => {\n    if (!window)\n      return;\n    event = event || window.event;\n    const from = event.relatedTarget || event.toElement;\n    isLeft.value = !from;\n  };\n  if (window) {\n    useEventListener(window, \"mouseout\", handler, { passive: true });\n    useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n    useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n  }\n  return isLeft;\n}\n\nfunction useParallax(target, options = {}) {\n  const {\n    deviceOrientationTiltAdjust = (i) => i,\n    deviceOrientationRollAdjust = (i) => i,\n    mouseTiltAdjust = (i) => i,\n    mouseRollAdjust = (i) => i,\n    window = defaultWindow\n  } = options;\n  const orientation = reactive(useDeviceOrientation({ window }));\n  const {\n    elementX: x,\n    elementY: y,\n    elementWidth: width,\n    elementHeight: height\n  } = useMouseInElement(target, { handleOutside: false, window });\n  const source = computed(() => {\n    if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))\n      return \"deviceOrientation\";\n    return \"mouse\";\n  });\n  const roll = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      const value = -orientation.beta / 90;\n      return deviceOrientationRollAdjust(value);\n    } else {\n      const value = -(y.value - height.value / 2) / height.value;\n      return mouseRollAdjust(value);\n    }\n  });\n  const tilt = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      const value = orientation.gamma / 90;\n      return deviceOrientationTiltAdjust(value);\n    } else {\n      const value = (x.value - width.value / 2) / width.value;\n      return mouseTiltAdjust(value);\n    }\n  });\n  return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n  const parentElement = shallowRef();\n  const update = () => {\n    const el = unrefElement(element);\n    if (el)\n      parentElement.value = el.parentElement;\n  };\n  tryOnMounted(update);\n  watch(() => toValue(element), update);\n  return parentElement;\n}\n\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __objRest$1 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$7)\n    for (var prop of __getOwnPropSymbols$7(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction usePerformanceObserver(options, callback) {\n  const _a = options, {\n    window = defaultWindow,\n    immediate = true\n  } = _a, performanceOptions = __objRest$1(_a, [\n    \"window\",\n    \"immediate\"\n  ]);\n  const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n  let observer;\n  const stop = () => {\n    observer == null ? void 0 : observer.disconnect();\n  };\n  const start = () => {\n    if (isSupported.value) {\n      stop();\n      observer = new PerformanceObserver(callback);\n      observer.observe(performanceOptions);\n    }\n  };\n  tryOnScopeDispose(stop);\n  if (immediate)\n    start();\n  return {\n    isSupported,\n    start,\n    stop\n  };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$6.call(b, prop))\n      __defNormalProp$6(a, prop, b[prop]);\n  if (__getOwnPropSymbols$6)\n    for (var prop of __getOwnPropSymbols$6(b)) {\n      if (__propIsEnum$6.call(b, prop))\n        __defNormalProp$6(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nconst defaultState = {\n  x: 0,\n  y: 0,\n  pointerId: 0,\n  pressure: 0,\n  tiltX: 0,\n  tiltY: 0,\n  width: 0,\n  height: 0,\n  twist: 0,\n  pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n  const {\n    target = defaultWindow\n  } = options;\n  const isInside = ref(false);\n  const state = ref(options.initialValue || {});\n  Object.assign(state.value, defaultState, state.value);\n  const handler = (event) => {\n    isInside.value = true;\n    if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n      return;\n    state.value = objectPick(event, keys, false);\n  };\n  if (target) {\n    useEventListener(target, \"pointerdown\", handler, { passive: true });\n    useEventListener(target, \"pointermove\", handler, { passive: true });\n    useEventListener(target, \"pointerleave\", () => isInside.value = false, { passive: true });\n  }\n  return __spreadProps$2(__spreadValues$6({}, toRefs(state)), {\n    isInside\n  });\n}\n\nfunction usePointerLock(target, options = {}) {\n  const { document = defaultDocument, pointerLockOptions } = options;\n  const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n  const element = ref();\n  const triggerElement = ref();\n  let targetElement;\n  if (isSupported.value) {\n    useEventListener(document, \"pointerlockchange\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        element.value = document.pointerLockElement;\n        if (!element.value)\n          targetElement = triggerElement.value = null;\n      }\n    });\n    useEventListener(document, \"pointerlockerror\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        const action = document.pointerLockElement ? \"release\" : \"acquire\";\n        throw new Error(`Failed to ${action} pointer lock.`);\n      }\n    });\n  }\n  async function lock(e, options2) {\n    var _a;\n    if (!isSupported.value)\n      throw new Error(\"Pointer Lock API is not supported by your browser.\");\n    triggerElement.value = e instanceof Event ? e.currentTarget : null;\n    targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n    if (!targetElement)\n      throw new Error(\"Target element undefined.\");\n    targetElement.requestPointerLock(options2 != null ? options2 : pointerLockOptions);\n    return await until(element).toBe(targetElement);\n  }\n  async function unlock() {\n    if (!element.value)\n      return false;\n    document.exitPointerLock();\n    await until(element).toBeNull();\n    return true;\n  }\n  return {\n    isSupported,\n    element,\n    triggerElement,\n    lock,\n    unlock\n  };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n  const targetRef = toRef(target);\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart\n  } = options;\n  const posStart = reactive({ x: 0, y: 0 });\n  const updatePosStart = (x, y) => {\n    posStart.x = x;\n    posStart.y = y;\n  };\n  const posEnd = reactive({ x: 0, y: 0 });\n  const updatePosEnd = (x, y) => {\n    posEnd.x = x;\n    posEnd.y = y;\n  };\n  const distanceX = computed(() => posStart.x - posEnd.x);\n  const distanceY = computed(() => posStart.y - posEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const isPointerDown = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return \"none\";\n    if (abs(distanceX.value) > abs(distanceY.value)) {\n      return distanceX.value > 0 ? \"left\" : \"right\";\n    } else {\n      return distanceY.value > 0 ? \"up\" : \"down\";\n    }\n  });\n  const eventIsAllowed = (e) => {\n    var _a, _b, _c;\n    const isReleasingButton = e.buttons === 0;\n    const isPrimaryButton = e.buttons === 1;\n    return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n  };\n  const stops = [\n    useEventListener(target, \"pointerdown\", (e) => {\n      var _a, _b;\n      if (!eventIsAllowed(e))\n        return;\n      isPointerDown.value = true;\n      (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n      const eventTarget = e.target;\n      eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n      const { clientX: x, clientY: y } = e;\n      updatePosStart(x, y);\n      updatePosEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }),\n    useEventListener(target, \"pointermove\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      if (!isPointerDown.value)\n        return;\n      const { clientX: x, clientY: y } = e;\n      updatePosEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }),\n    useEventListener(target, \"pointerup\", (e) => {\n      var _a, _b;\n      if (!eventIsAllowed(e))\n        return;\n      if (isSwiping.value)\n        onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n      isPointerDown.value = false;\n      isSwiping.value = false;\n      (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"initial\");\n    })\n  ];\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isSwiping: readonly(isSwiping),\n    direction: readonly(direction),\n    posStart: readonly(posStart),\n    posEnd: readonly(posEnd),\n    distanceX,\n    distanceY,\n    stop\n  };\n}\n\nfunction usePreferredColorScheme(options) {\n  const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n  const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n  return computed(() => {\n    if (isDark.value)\n      return \"dark\";\n    if (isLight.value)\n      return \"light\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredContrast(options) {\n  const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n  const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n  const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n  return computed(() => {\n    if (isMore.value)\n      return \"more\";\n    if (isLess.value)\n      return \"less\";\n    if (isCustom.value)\n      return \"custom\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredLanguages(options = {}) {\n  const { window = defaultWindow } = options;\n  if (!window)\n    return ref([\"en\"]);\n  const navigator = window.navigator;\n  const value = ref(navigator.languages);\n  useEventListener(window, \"languagechange\", () => {\n    value.value = navigator.languages;\n  });\n  return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n  const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n  return computed(() => {\n    if (isReduced.value)\n      return \"reduce\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePrevious(value, initialValue) {\n  const previous = shallowRef(initialValue);\n  watch(\n    toRef(value),\n    (_, oldValue) => {\n      previous.value = oldValue;\n    },\n    { flush: \"sync\" }\n  );\n  return readonly(previous);\n}\n\nfunction useScreenOrientation(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n  const screenOrientation = isSupported.value ? window.screen.orientation : {};\n  const orientation = ref(screenOrientation.type);\n  const angle = ref(screenOrientation.angle || 0);\n  if (isSupported.value) {\n    useEventListener(window, \"orientationchange\", () => {\n      orientation.value = screenOrientation.type;\n      angle.value = screenOrientation.angle;\n    });\n  }\n  const lockOrientation = (type) => {\n    if (!isSupported.value)\n      return Promise.reject(new Error(\"Not supported\"));\n    return screenOrientation.lock(type);\n  };\n  const unlockOrientation = () => {\n    if (isSupported.value)\n      screenOrientation.unlock();\n  };\n  return {\n    isSupported,\n    orientation,\n    angle,\n    lockOrientation,\n    unlockOrientation\n  };\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n  const top = ref(\"\");\n  const right = ref(\"\");\n  const bottom = ref(\"\");\n  const left = ref(\"\");\n  if (isClient) {\n    const topCssVar = useCssVar(topVarName);\n    const rightCssVar = useCssVar(rightVarName);\n    const bottomCssVar = useCssVar(bottomVarName);\n    const leftCssVar = useCssVar(leftVarName);\n    topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n    rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n    bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n    leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n    update();\n    useEventListener(\"resize\", useDebounceFn(update));\n  }\n  function update() {\n    top.value = getValue(topVarName);\n    right.value = getValue(rightVarName);\n    bottom.value = getValue(bottomVarName);\n    left.value = getValue(leftVarName);\n  }\n  return {\n    top,\n    right,\n    bottom,\n    left,\n    update\n  };\n}\nfunction getValue(position) {\n  return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n  const {\n    immediate = true,\n    manual = false,\n    type = \"text/javascript\",\n    async = true,\n    crossOrigin,\n    referrerPolicy,\n    noModule,\n    defer,\n    document = defaultDocument,\n    attrs = {}\n  } = options;\n  const scriptTag = ref(null);\n  let _promise = null;\n  const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n    const resolveWithElement = (el2) => {\n      scriptTag.value = el2;\n      resolve(el2);\n      return el2;\n    };\n    if (!document) {\n      resolve(false);\n      return;\n    }\n    let shouldAppend = false;\n    let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n    if (!el) {\n      el = document.createElement(\"script\");\n      el.type = type;\n      el.async = async;\n      el.src = toValue(src);\n      if (defer)\n        el.defer = defer;\n      if (crossOrigin)\n        el.crossOrigin = crossOrigin;\n      if (noModule)\n        el.noModule = noModule;\n      if (referrerPolicy)\n        el.referrerPolicy = referrerPolicy;\n      Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n      shouldAppend = true;\n    } else if (el.hasAttribute(\"data-loaded\")) {\n      resolveWithElement(el);\n    }\n    el.addEventListener(\"error\", (event) => reject(event));\n    el.addEventListener(\"abort\", (event) => reject(event));\n    el.addEventListener(\"load\", () => {\n      el.setAttribute(\"data-loaded\", \"true\");\n      onLoaded(el);\n      resolveWithElement(el);\n    });\n    if (shouldAppend)\n      el = document.head.appendChild(el);\n    if (!waitForScriptLoad)\n      resolveWithElement(el);\n  });\n  const load = (waitForScriptLoad = true) => {\n    if (!_promise)\n      _promise = loadScript(waitForScriptLoad);\n    return _promise;\n  };\n  const unload = () => {\n    if (!document)\n      return;\n    _promise = null;\n    if (scriptTag.value)\n      scriptTag.value = null;\n    const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n    if (el)\n      document.head.removeChild(el);\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnUnmounted(unload);\n  return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n  const style = window.getComputedStyle(ele);\n  if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientHeight < ele.scrollHeight || style.overflowY === \"auto\" && ele.clientWidth < ele.scrollWidth) {\n    return true;\n  } else {\n    const parent = ele.parentNode;\n    if (!parent || parent.tagName === \"BODY\")\n      return false;\n    return checkOverflowScroll(parent);\n  }\n}\nfunction preventDefault(rawEvent) {\n  const e = rawEvent || window.event;\n  const _target = e.target;\n  if (checkOverflowScroll(_target))\n    return false;\n  if (e.touches.length > 1)\n    return true;\n  if (e.preventDefault)\n    e.preventDefault();\n  return false;\n}\nfunction useScrollLock(element, initialState = false) {\n  const isLocked = ref(initialState);\n  let stopTouchMoveListener = null;\n  let initialOverflow;\n  watch(toRef(element), (el) => {\n    if (el) {\n      const ele = el;\n      initialOverflow = ele.style.overflow;\n      if (isLocked.value)\n        ele.style.overflow = \"hidden\";\n    }\n  }, {\n    immediate: true\n  });\n  const lock = () => {\n    const ele = toValue(element);\n    if (!ele || isLocked.value)\n      return;\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(\n        ele,\n        \"touchmove\",\n        (e) => {\n          preventDefault(e);\n        },\n        { passive: false }\n      );\n    }\n    ele.style.overflow = \"hidden\";\n    isLocked.value = true;\n  };\n  const unlock = () => {\n    const ele = toValue(element);\n    if (!ele || !isLocked.value)\n      return;\n    isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n    ele.style.overflow = initialOverflow;\n    isLocked.value = false;\n  };\n  tryOnScopeDispose(unlock);\n  return computed({\n    get() {\n      return isLocked.value;\n    },\n    set(v) {\n      if (v)\n        lock();\n      else\n        unlock();\n    }\n  });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$5.call(b, prop))\n      __defNormalProp$5(a, prop, b[prop]);\n  if (__getOwnPropSymbols$5)\n    for (var prop of __getOwnPropSymbols$5(b)) {\n      if (__propIsEnum$5.call(b, prop))\n        __defNormalProp$5(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useShare(shareOptions = {}, options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const _navigator = navigator;\n  const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n  const share = async (overrideOptions = {}) => {\n    if (isSupported.value) {\n      const data = __spreadValues$5(__spreadValues$5({}, toValue(shareOptions)), toValue(overrideOptions));\n      let granted = true;\n      if (data.files && _navigator.canShare)\n        granted = _navigator.canShare({ files: data.files });\n      if (granted)\n        return _navigator.share(data);\n    }\n  };\n  return {\n    isSupported,\n    share\n  };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n  var _a, _b, _c, _d;\n  const [source] = args;\n  let compareFn = defaultCompare;\n  let options = {};\n  if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      options = args[1];\n      compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n    } else {\n      compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n    }\n  } else if (args.length > 2) {\n    compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n    options = (_d = args[2]) != null ? _d : {};\n  }\n  const {\n    dirty = false,\n    sortFn = defaultSortFn\n  } = options;\n  if (!dirty)\n    return computed(() => sortFn([...toValue(source)], compareFn));\n  watchEffect(() => {\n    const result = sortFn(toValue(source), compareFn);\n    if (isRef(source))\n      source.value = result;\n    else\n      source.splice(0, source.length, ...result);\n  });\n  return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n  const {\n    interimResults = true,\n    continuous = true,\n    window = defaultWindow\n  } = options;\n  const lang = toRef(options.lang || \"en-US\");\n  const isListening = ref(false);\n  const isFinal = ref(false);\n  const result = ref(\"\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isListening.value) => {\n    isListening.value = value;\n  };\n  const start = () => {\n    isListening.value = true;\n  };\n  const stop = () => {\n    isListening.value = false;\n  };\n  const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n  const isSupported = useSupported(() => SpeechRecognition);\n  let recognition;\n  if (isSupported.value) {\n    recognition = new SpeechRecognition();\n    recognition.continuous = continuous;\n    recognition.interimResults = interimResults;\n    recognition.lang = toValue(lang);\n    recognition.onstart = () => {\n      isFinal.value = false;\n    };\n    watch(lang, (lang2) => {\n      if (recognition && !isListening.value)\n        recognition.lang = lang2;\n    });\n    recognition.onresult = (event) => {\n      const transcript = Array.from(event.results).map((result2) => {\n        isFinal.value = result2.isFinal;\n        return result2[0];\n      }).map((result2) => result2.transcript).join(\"\");\n      result.value = transcript;\n      error.value = void 0;\n    };\n    recognition.onerror = (event) => {\n      error.value = event;\n    };\n    recognition.onend = () => {\n      isListening.value = false;\n      recognition.lang = toValue(lang);\n    };\n    watch(isListening, () => {\n      if (isListening.value)\n        recognition.start();\n      else\n        recognition.stop();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isListening.value = false;\n  });\n  return {\n    isSupported,\n    isListening,\n    isFinal,\n    recognition,\n    result,\n    error,\n    toggle,\n    start,\n    stop\n  };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n  const {\n    pitch = 1,\n    rate = 1,\n    volume = 1,\n    window = defaultWindow\n  } = options;\n  const synth = window && window.speechSynthesis;\n  const isSupported = useSupported(() => synth);\n  const isPlaying = ref(false);\n  const status = ref(\"init\");\n  const spokenText = toRef(text || \"\");\n  const lang = toRef(options.lang || \"en-US\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isPlaying.value) => {\n    isPlaying.value = value;\n  };\n  const bindEventsForUtterance = (utterance2) => {\n    utterance2.lang = toValue(lang);\n    utterance2.voice = toValue(options.voice) || null;\n    utterance2.pitch = pitch;\n    utterance2.rate = rate;\n    utterance2.volume = volume;\n    utterance2.onstart = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onpause = () => {\n      isPlaying.value = false;\n      status.value = \"pause\";\n    };\n    utterance2.onresume = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onend = () => {\n      isPlaying.value = false;\n      status.value = \"end\";\n    };\n    utterance2.onerror = (event) => {\n      error.value = event;\n    };\n  };\n  const utterance = computed(() => {\n    isPlaying.value = false;\n    status.value = \"init\";\n    const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n    bindEventsForUtterance(newUtterance);\n    return newUtterance;\n  });\n  const speak = () => {\n    synth.cancel();\n    utterance && synth.speak(utterance.value);\n  };\n  const stop = () => {\n    synth.cancel();\n    isPlaying.value = false;\n  };\n  if (isSupported.value) {\n    bindEventsForUtterance(utterance.value);\n    watch(lang, (lang2) => {\n      if (utterance.value && !isPlaying.value)\n        utterance.value.lang = lang2;\n    });\n    if (options.voice) {\n      watch(options.voice, () => {\n        synth.cancel();\n      });\n    }\n    watch(isPlaying, () => {\n      if (isPlaying.value)\n        synth.resume();\n      else\n        synth.pause();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isPlaying.value = false;\n  });\n  return {\n    isSupported,\n    isPlaying,\n    status,\n    utterance,\n    error,\n    stop,\n    toggle,\n    speak\n  };\n}\n\nfunction useStepper(steps, initialStep) {\n  const stepsRef = ref(steps);\n  const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n  const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n  const current = computed(() => at(index.value));\n  const isFirst = computed(() => index.value === 0);\n  const isLast = computed(() => index.value === stepNames.value.length - 1);\n  const next = computed(() => stepNames.value[index.value + 1]);\n  const previous = computed(() => stepNames.value[index.value - 1]);\n  function at(index2) {\n    if (Array.isArray(stepsRef.value))\n      return stepsRef.value[index2];\n    return stepsRef.value[stepNames.value[index2]];\n  }\n  function get(step) {\n    if (!stepNames.value.includes(step))\n      return;\n    return at(stepNames.value.indexOf(step));\n  }\n  function goTo(step) {\n    if (stepNames.value.includes(step))\n      index.value = stepNames.value.indexOf(step);\n  }\n  function goToNext() {\n    if (isLast.value)\n      return;\n    index.value++;\n  }\n  function goToPrevious() {\n    if (isFirst.value)\n      return;\n    index.value--;\n  }\n  function goBackTo(step) {\n    if (isAfter(step))\n      goTo(step);\n  }\n  function isNext(step) {\n    return stepNames.value.indexOf(step) === index.value + 1;\n  }\n  function isPrevious(step) {\n    return stepNames.value.indexOf(step) === index.value - 1;\n  }\n  function isCurrent(step) {\n    return stepNames.value.indexOf(step) === index.value;\n  }\n  function isBefore(step) {\n    return index.value < stepNames.value.indexOf(step);\n  }\n  function isAfter(step) {\n    return index.value > stepNames.value.indexOf(step);\n  }\n  return {\n    steps: stepsRef,\n    stepNames,\n    index,\n    current,\n    next,\n    previous,\n    isFirst,\n    isLast,\n    at,\n    get,\n    goTo,\n    goToNext,\n    goToPrevious,\n    goBackTo,\n    isNext,\n    isPrevious,\n    isCurrent,\n    isBefore,\n    isAfter\n  };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$4.call(b, prop))\n      __defNormalProp$4(a, prop, b[prop]);\n  if (__getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(b)) {\n      if (__propIsEnum$4.call(b, prop))\n        __defNormalProp$4(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const rawInit = toValue(initialValue);\n  const type = guessSerializerType(rawInit);\n  const data = (shallow ? shallowRef : ref)(initialValue);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  async function read(event) {\n    if (!storage || event && event.key !== key)\n      return;\n    try {\n      const rawValue = event ? event.newValue : await storage.getItem(key);\n      if (rawValue == null) {\n        data.value = rawInit;\n        if (writeDefaults && rawInit !== null)\n          await storage.setItem(key, await serializer.write(rawInit));\n      } else if (mergeDefaults) {\n        const value = await serializer.read(rawValue);\n        if (typeof mergeDefaults === \"function\")\n          data.value = mergeDefaults(value, rawInit);\n        else if (type === \"object\" && !Array.isArray(value))\n          data.value = __spreadValues$4(__spreadValues$4({}, rawInit), value);\n        else\n          data.value = value;\n      } else {\n        data.value = await serializer.read(rawValue);\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  read();\n  if (window && listenToStorageChanges)\n    useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)));\n  if (storage) {\n    watchWithFilter(\n      data,\n      async () => {\n        try {\n          if (data.value == null)\n            await storage.removeItem(key);\n          else\n            await storage.setItem(key, await serializer.write(data.value));\n        } catch (e) {\n          onError(e);\n        }\n      },\n      {\n        flush,\n        deep,\n        eventFilter\n      }\n    );\n  }\n  return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n  const isLoaded = ref(false);\n  const {\n    document = defaultDocument,\n    immediate = true,\n    manual = false,\n    id = `vueuse_styletag_${++_id}`\n  } = options;\n  const cssRef = ref(css);\n  let stop = () => {\n  };\n  const load = () => {\n    if (!document)\n      return;\n    const el = document.getElementById(id) || document.createElement(\"style\");\n    if (!el.isConnected) {\n      el.type = \"text/css\";\n      el.id = id;\n      if (options.media)\n        el.media = options.media;\n      document.head.appendChild(el);\n    }\n    if (isLoaded.value)\n      return;\n    stop = watch(\n      cssRef,\n      (value) => {\n        el.textContent = value;\n      },\n      { immediate: true }\n    );\n    isLoaded.value = true;\n  };\n  const unload = () => {\n    if (!document || !isLoaded.value)\n      return;\n    stop();\n    document.head.removeChild(document.getElementById(id));\n    isLoaded.value = false;\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnScopeDispose(unload);\n  return {\n    id,\n    css: cssRef,\n    unload,\n    load,\n    isLoaded: readonly(isLoaded)\n  };\n}\n\nfunction useSwipe(target, options = {}) {\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart,\n    passive = true,\n    window = defaultWindow\n  } = options;\n  const coordsStart = reactive({ x: 0, y: 0 });\n  const coordsEnd = reactive({ x: 0, y: 0 });\n  const diffX = computed(() => coordsStart.x - coordsEnd.x);\n  const diffY = computed(() => coordsStart.y - coordsEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return \"none\";\n    if (abs(diffX.value) > abs(diffY.value)) {\n      return diffX.value > 0 ? \"left\" : \"right\";\n    } else {\n      return diffY.value > 0 ? \"up\" : \"down\";\n    }\n  });\n  const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n  const updateCoordsStart = (x, y) => {\n    coordsStart.x = x;\n    coordsStart.y = y;\n  };\n  const updateCoordsEnd = (x, y) => {\n    coordsEnd.x = x;\n    coordsEnd.y = y;\n  };\n  let listenerOptions;\n  const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n  if (!passive)\n    listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n  else\n    listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n  const onTouchEnd = (e) => {\n    if (isSwiping.value)\n      onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n    isSwiping.value = false;\n  };\n  const stops = [\n    useEventListener(target, \"touchstart\", (e) => {\n      if (e.touches.length !== 1)\n        return;\n      if (listenerOptions.capture && !listenerOptions.passive)\n        e.preventDefault();\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsStart(x, y);\n      updateCoordsEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }, listenerOptions),\n    useEventListener(target, \"touchmove\", (e) => {\n      if (e.touches.length !== 1)\n        return;\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }, listenerOptions),\n    useEventListener(target, \"touchend\", onTouchEnd, listenerOptions),\n    useEventListener(target, \"touchcancel\", onTouchEnd, listenerOptions)\n  ];\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isPassiveEventSupported,\n    isSwiping,\n    direction,\n    coordsStart,\n    coordsEnd,\n    lengthX: diffX,\n    lengthY: diffY,\n    stop\n  };\n}\nfunction checkPassiveEventSupport(document) {\n  if (!document)\n    return false;\n  let supportsPassive = false;\n  const optionsBlock = {\n    get passive() {\n      supportsPassive = true;\n      return false;\n    }\n  };\n  document.addEventListener(\"x\", noop, optionsBlock);\n  document.removeEventListener(\"x\", noop);\n  return supportsPassive;\n}\n\nfunction useTemplateRefsList() {\n  const refs = ref([]);\n  refs.value.set = (el) => {\n    if (el)\n      refs.value.push(el);\n  };\n  onBeforeUpdate(() => {\n    refs.value.length = 0;\n  });\n  return refs;\n}\n\nfunction useTextDirection(options = {}) {\n  const {\n    document = defaultDocument,\n    selector = \"html\",\n    observe = false,\n    initialValue = \"ltr\"\n  } = options;\n  function getValue() {\n    var _a, _b;\n    return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n  }\n  const dir = ref(getValue());\n  tryOnMounted(() => dir.value = getValue());\n  if (observe && document) {\n    useMutationObserver(\n      document.querySelector(selector),\n      () => dir.value = getValue(),\n      { attributes: true }\n    );\n  }\n  return computed({\n    get() {\n      return dir.value;\n    },\n    set(v) {\n      var _a, _b;\n      dir.value = v;\n      if (!document)\n        return;\n      if (dir.value)\n        (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n      else\n        (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n    }\n  });\n}\n\nfunction getRangesFromSelection(selection) {\n  var _a;\n  const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n  const ranges = new Array(rangeCount);\n  for (let i = 0; i < rangeCount; i++) {\n    const range = selection.getRangeAt(i);\n    ranges[i] = range;\n  }\n  return ranges;\n}\nfunction useTextSelection(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const selection = ref(null);\n  const text = computed(() => {\n    var _a, _b;\n    return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n  });\n  const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n  const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n  function onSelectionChange() {\n    selection.value = null;\n    if (window)\n      selection.value = window.getSelection();\n  }\n  if (window)\n    useEventListener(window.document, \"selectionchange\", onSelectionChange);\n  return {\n    text,\n    rects,\n    ranges,\n    selection\n  };\n}\n\nfunction useTextareaAutosize(options) {\n  const textarea = ref(options == null ? void 0 : options.element);\n  const input = ref(options == null ? void 0 : options.input);\n  const textareaScrollHeight = ref(1);\n  function triggerResize() {\n    var _a, _b;\n    if (!textarea.value)\n      return;\n    let height = \"\";\n    textarea.value.style.height = \"1px\";\n    textareaScrollHeight.value = (_a = textarea.value) == null ? void 0 : _a.scrollHeight;\n    if (options == null ? void 0 : options.styleTarget)\n      toValue(options.styleTarget).style.height = `${textareaScrollHeight.value}px`;\n    else\n      height = `${textareaScrollHeight.value}px`;\n    textarea.value.style.height = height;\n    (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);\n  }\n  watch([input, textarea], triggerResize, { immediate: true });\n  useResizeObserver(textarea, () => triggerResize());\n  if (options == null ? void 0 : options.watch)\n    watch(options.watch, triggerResize, { immediate: true, deep: true });\n  return {\n    textarea,\n    input,\n    triggerResize\n  };\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$3.call(b, prop))\n      __defNormalProp$3(a, prop, b[prop]);\n  if (__getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(b)) {\n      if (__propIsEnum$3.call(b, prop))\n        __defNormalProp$3(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nfunction useThrottledRefHistory(source, options = {}) {\n  const { throttle = 200, trailing = true } = options;\n  const filter = throttleFilter(throttle, trailing);\n  const history = useRefHistory(source, __spreadProps$1(__spreadValues$3({}, options), { eventFilter: filter }));\n  return __spreadValues$3({}, history);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$2.call(b, prop))\n      __defNormalProp$2(a, prop, b[prop]);\n  if (__getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(b)) {\n      if (__propIsEnum$2.call(b, prop))\n        __defNormalProp$2(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nconst DEFAULT_UNITS = [\n  { max: 6e4, value: 1e3, name: \"second\" },\n  { max: 276e4, value: 6e4, name: \"minute\" },\n  { max: 72e6, value: 36e5, name: \"hour\" },\n  { max: 5184e5, value: 864e5, name: \"day\" },\n  { max: 24192e5, value: 6048e5, name: \"week\" },\n  { max: 28512e6, value: 2592e6, name: \"month\" },\n  { max: Infinity, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n  justNow: \"just now\",\n  past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n  future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n  month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n  year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n  day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n  week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n  hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n  minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n  second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n  invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n  return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n  const {\n    controls: exposeControls = false,\n    updateInterval = 3e4\n  } = options;\n  const _a = useNow({ interval: updateInterval, controls: true }), { now } = _a, controls = __objRest(_a, [\"now\"]);\n  const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now.value)));\n  if (exposeControls) {\n    return __spreadValues$2({\n      timeAgo\n    }, controls);\n  } else {\n    return timeAgo;\n  }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n  var _a;\n  const {\n    max,\n    messages = DEFAULT_MESSAGES,\n    fullDateFormatter = DEFAULT_FORMATTER,\n    units = DEFAULT_UNITS,\n    showSecond = false,\n    rounding = \"round\"\n  } = options;\n  const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n  const diff = +now - +from;\n  const absDiff = Math.abs(diff);\n  function getValue(diff2, unit) {\n    return roundFn(Math.abs(diff2) / unit.value);\n  }\n  function format(diff2, unit) {\n    const val = getValue(diff2, unit);\n    const past = diff2 > 0;\n    const str = applyFormat(unit.name, val, past);\n    return applyFormat(past ? \"past\" : \"future\", str, past);\n  }\n  function applyFormat(name, val, isPast) {\n    const formatter = messages[name];\n    if (typeof formatter === \"function\")\n      return formatter(val, isPast);\n    return formatter.replace(\"{0}\", val.toString());\n  }\n  if (absDiff < 6e4 && !showSecond)\n    return messages.justNow;\n  if (typeof max === \"number\" && absDiff > max)\n    return fullDateFormatter(new Date(from));\n  if (typeof max === \"string\") {\n    const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n    if (unitMax && absDiff > unitMax)\n      return fullDateFormatter(new Date(from));\n  }\n  for (const [idx, unit] of units.entries()) {\n    const val = getValue(diff, unit);\n    if (val <= 0 && units[idx - 1])\n      return format(diff, units[idx - 1]);\n    if (absDiff < unit.max)\n      return format(diff, unit);\n  }\n  return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n  const { start } = useTimeoutFn(loop, interval);\n  const isActive = ref(false);\n  async function loop() {\n    if (!isActive.value)\n      return;\n    await fn();\n    start();\n  }\n  function resume() {\n    if (!isActive.value) {\n      isActive.value = true;\n      loop();\n    }\n  }\n  function pause() {\n    isActive.value = false;\n  }\n  if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useTimestamp(options = {}) {\n  const {\n    controls: exposeControls = false,\n    offset = 0,\n    immediate = true,\n    interval = \"requestAnimationFrame\",\n    callback\n  } = options;\n  const ts = ref(timestamp() + offset);\n  const update = () => ts.value = timestamp() + offset;\n  const cb = callback ? () => {\n    update();\n    callback(ts.value);\n  } : update;\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  if (exposeControls) {\n    return __spreadValues$1({\n      timestamp: ts\n    }, controls);\n  } else {\n    return ts;\n  }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n  var _a, _b;\n  const {\n    document = defaultDocument\n  } = options;\n  const title = toRef((_a = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _a : null);\n  const isReadonly = newTitle && typeof newTitle === \"function\";\n  function format(t) {\n    if (!(\"titleTemplate\" in options))\n      return t;\n    const template = options.titleTemplate || \"%s\";\n    return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n  }\n  watch(\n    title,\n    (t, o) => {\n      if (t !== o && document)\n        document.title = format(typeof t === \"string\" ? t : \"\");\n    },\n    { immediate: true }\n  );\n  if (options.observe && !options.titleTemplate && document && !isReadonly) {\n    useMutationObserver(\n      (_b = document.head) == null ? void 0 : _b.querySelector(\"title\"),\n      () => {\n        if (document && document.title !== title.value)\n          title.value = format(document.title);\n      },\n      { childList: true }\n    );\n  }\n  return title;\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nconst _TransitionPresets = {\n  easeInSine: [0.12, 0, 0.39, 0],\n  easeOutSine: [0.61, 1, 0.88, 1],\n  easeInOutSine: [0.37, 0, 0.63, 1],\n  easeInQuad: [0.11, 0, 0.5, 0],\n  easeOutQuad: [0.5, 1, 0.89, 1],\n  easeInOutQuad: [0.45, 0, 0.55, 1],\n  easeInCubic: [0.32, 0, 0.67, 0],\n  easeOutCubic: [0.33, 1, 0.68, 1],\n  easeInOutCubic: [0.65, 0, 0.35, 1],\n  easeInQuart: [0.5, 0, 0.75, 0],\n  easeOutQuart: [0.25, 1, 0.5, 1],\n  easeInOutQuart: [0.76, 0, 0.24, 1],\n  easeInQuint: [0.64, 0, 0.78, 0],\n  easeOutQuint: [0.22, 1, 0.36, 1],\n  easeInOutQuint: [0.83, 0, 0.17, 1],\n  easeInExpo: [0.7, 0, 0.84, 0],\n  easeOutExpo: [0.16, 1, 0.3, 1],\n  easeInOutExpo: [0.87, 0, 0.13, 1],\n  easeInCirc: [0.55, 0, 1, 0.45],\n  easeOutCirc: [0, 0.55, 0.45, 1],\n  easeInOutCirc: [0.85, 0, 0.15, 1],\n  easeInBack: [0.36, 0, 0.66, -0.56],\n  easeOutBack: [0.34, 1.56, 0.64, 1],\n  easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n  const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n  const b = (a1, a2) => 3 * a2 - 6 * a1;\n  const c = (a1) => 3 * a1;\n  const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n  const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n  const getTforX = (x) => {\n    let aGuessT = x;\n    for (let i = 0; i < 4; ++i) {\n      const currentSlope = getSlope(aGuessT, p0, p2);\n      if (currentSlope === 0)\n        return aGuessT;\n      const currentX = calcBezier(aGuessT, p0, p2) - x;\n      aGuessT -= currentX / currentSlope;\n    }\n    return aGuessT;\n  };\n  return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n  return a + alpha * (b - a);\n}\nfunction toVec(t) {\n  return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n  var _a, _b;\n  const fromVal = toValue(from);\n  const toVal = toValue(to);\n  const v1 = toVec(fromVal);\n  const v2 = toVec(toVal);\n  const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n  const startedAt = Date.now();\n  const endAt = Date.now() + duration;\n  const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n  const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n  return new Promise((resolve) => {\n    source.value = fromVal;\n    const tick = () => {\n      var _a2;\n      if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n        resolve();\n        return;\n      }\n      const now = Date.now();\n      const alpha = ease((now - startedAt) / duration);\n      const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n      if (Array.isArray(source.value))\n        source.value = arr.map((n, i) => {\n          var _a3, _b2;\n          return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n        });\n      else if (typeof source.value === \"number\")\n        source.value = arr[0];\n      if (now < endAt) {\n        requestAnimationFrame(tick);\n      } else {\n        source.value = toVal;\n        resolve();\n      }\n    };\n    tick();\n  });\n}\nfunction useTransition(source, options = {}) {\n  let currentId = 0;\n  const sourceVal = () => {\n    const v = toValue(source);\n    return typeof v === \"number\" ? v : v.map(toValue);\n  };\n  const outputRef = ref(sourceVal());\n  watch(sourceVal, async (to) => {\n    var _a, _b;\n    if (toValue(options.disabled))\n      return;\n    const id = ++currentId;\n    if (options.delay)\n      await promiseTimeout(toValue(options.delay));\n    if (id !== currentId)\n      return;\n    const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n    (_a = options.onStarted) == null ? void 0 : _a.call(options);\n    await executeTransition(outputRef, outputRef.value, toVal, __spreadProps(__spreadValues({}, options), {\n      abort: () => {\n        var _a2;\n        return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n      }\n    }));\n    (_b = options.onFinished) == null ? void 0 : _b.call(options);\n  }, { deep: true });\n  watch(() => toValue(options.disabled), (disabled) => {\n    if (disabled) {\n      currentId++;\n      outputRef.value = sourceVal();\n    }\n  });\n  tryOnScopeDispose(() => {\n    currentId++;\n  });\n  return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n  const {\n    initialValue = {},\n    removeNullishValues = true,\n    removeFalsyValues = false,\n    write: enableWrite = true,\n    window = defaultWindow\n  } = options;\n  if (!window)\n    return reactive(initialValue);\n  const state = reactive({});\n  function getRawParams() {\n    if (mode === \"history\") {\n      return window.location.search || \"\";\n    } else if (mode === \"hash\") {\n      const hash = window.location.hash || \"\";\n      const index = hash.indexOf(\"?\");\n      return index > 0 ? hash.slice(index) : \"\";\n    } else {\n      return (window.location.hash || \"\").replace(/^#/, \"\");\n    }\n  }\n  function constructQuery(params) {\n    const stringified = params.toString();\n    if (mode === \"history\")\n      return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n    if (mode === \"hash-params\")\n      return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n    const hash = window.location.hash || \"#\";\n    const index = hash.indexOf(\"?\");\n    if (index > 0)\n      return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n    return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n  }\n  function read() {\n    return new URLSearchParams(getRawParams());\n  }\n  function updateState(params) {\n    const unusedKeys = new Set(Object.keys(state));\n    for (const key of params.keys()) {\n      const paramsForKey = params.getAll(key);\n      state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n      unusedKeys.delete(key);\n    }\n    Array.from(unusedKeys).forEach((key) => delete state[key]);\n  }\n  const { pause, resume } = pausableWatch(\n    state,\n    () => {\n      const params = new URLSearchParams(\"\");\n      Object.keys(state).forEach((key) => {\n        const mapEntry = state[key];\n        if (Array.isArray(mapEntry))\n          mapEntry.forEach((value) => params.append(key, value));\n        else if (removeNullishValues && mapEntry == null)\n          params.delete(key);\n        else if (removeFalsyValues && !mapEntry)\n          params.delete(key);\n        else\n          params.set(key, mapEntry);\n      });\n      write(params);\n    },\n    { deep: true }\n  );\n  function write(params, shouldUpdate) {\n    pause();\n    if (shouldUpdate)\n      updateState(params);\n    window.history.replaceState(\n      window.history.state,\n      window.document.title,\n      window.location.pathname + constructQuery(params)\n    );\n    resume();\n  }\n  function onChanged() {\n    if (!enableWrite)\n      return;\n    write(read(), true);\n  }\n  useEventListener(window, \"popstate\", onChanged, false);\n  if (mode !== \"history\")\n    useEventListener(window, \"hashchange\", onChanged, false);\n  const initial = read();\n  if (initial.keys().next().value)\n    updateState(initial);\n  else\n    Object.assign(state, initialValue);\n  return state;\n}\n\nfunction useUserMedia(options = {}) {\n  var _a, _b;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n  const constraints = ref(options.constraints);\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n  });\n  const stream = shallowRef();\n  function getDeviceOptions(type) {\n    switch (type) {\n      case \"video\": {\n        if (constraints.value)\n          return constraints.value.video || false;\n        break;\n      }\n      case \"audio\": {\n        if (constraints.value)\n          return constraints.value.audio || false;\n        break;\n      }\n    }\n  }\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getUserMedia({\n      video: getDeviceOptions(\"video\"),\n      audio: getDeviceOptions(\"audio\")\n    });\n    return stream.value;\n  }\n  function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  async function restart() {\n    _stop();\n    return await start();\n  }\n  watch(\n    enabled,\n    (v) => {\n      if (v)\n        _start();\n      else\n        _stop();\n    },\n    { immediate: true }\n  );\n  watch(\n    constraints,\n    () => {\n      if (autoSwitch.value && stream.value)\n        restart();\n    },\n    { immediate: true }\n  );\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    restart,\n    constraints,\n    enabled,\n    autoSwitch\n  };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n  var _a, _b, _c, _d, _e;\n  const {\n    clone = false,\n    passive = false,\n    eventName,\n    deep = false,\n    defaultValue,\n    shouldEmit\n  } = options;\n  const vm = getCurrentInstance();\n  const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n  let event = eventName;\n  if (!key) {\n    if (isVue2) {\n      const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n      key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n      if (!eventName)\n        event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n    } else {\n      key = \"modelValue\";\n    }\n  }\n  event = eventName || event || `update:${key.toString()}`;\n  const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n  const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n  const triggerEmit = (value) => {\n    if (shouldEmit) {\n      if (shouldEmit(value))\n        _emit(event, value);\n    } else {\n      _emit(event, value);\n    }\n  };\n  if (passive) {\n    const initialValue = getValue();\n    const proxy = ref(initialValue);\n    watch(\n      () => props[key],\n      (v) => proxy.value = cloneFn(v)\n    );\n    watch(\n      proxy,\n      (v) => {\n        if (v !== props[key] || deep)\n          triggerEmit(v);\n      },\n      { deep }\n    );\n    return proxy;\n  } else {\n    return computed({\n      get() {\n        return getValue();\n      },\n      set(value) {\n        triggerEmit(value);\n      }\n    });\n  }\n}\n\nfunction useVModels(props, emit, options = {}) {\n  const ret = {};\n  for (const key in props)\n    ret[key] = useVModel(props, key, emit, options);\n  return ret;\n}\n\nfunction useVibrate(options) {\n  const {\n    pattern = [],\n    interval = 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n  const patternRef = toRef(pattern);\n  let intervalControls;\n  const vibrate = (pattern2 = patternRef.value) => {\n    if (isSupported.value)\n      navigator.vibrate(pattern2);\n  };\n  const stop = () => {\n    if (isSupported.value)\n      navigator.vibrate(0);\n    intervalControls == null ? void 0 : intervalControls.pause();\n  };\n  if (interval > 0) {\n    intervalControls = useIntervalFn(\n      vibrate,\n      interval,\n      {\n        immediate: false,\n        immediateCallback: false\n      }\n    );\n  }\n  return {\n    isSupported,\n    pattern,\n    intervalControls,\n    vibrate,\n    stop\n  };\n}\n\nfunction useVirtualList(list, options) {\n  const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n  return {\n    list: currentList,\n    scrollTo,\n    containerProps: {\n      ref: containerRef,\n      onScroll: () => {\n        calculateRange();\n      },\n      style: containerStyle\n    },\n    wrapperProps\n  };\n}\nfunction useVirtualListResources(list) {\n  const containerRef = ref(null);\n  const size = useElementSize(containerRef);\n  const currentList = ref([]);\n  const source = shallowRef(list);\n  const state = ref({ start: 0, end: 10 });\n  return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n  return (containerSize) => {\n    if (typeof itemSize === \"number\")\n      return Math.ceil(containerSize / itemSize);\n    const { start = 0 } = state.value;\n    let sum = 0;\n    let capacity = 0;\n    for (let i = start; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      capacity = i;\n      if (sum > containerSize)\n        break;\n    }\n    return capacity - start;\n  };\n}\nfunction createGetOffset(source, itemSize) {\n  return (scrollDirection) => {\n    if (typeof itemSize === \"number\")\n      return Math.floor(scrollDirection / itemSize) + 1;\n    let sum = 0;\n    let offset = 0;\n    for (let i = 0; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      if (sum >= scrollDirection) {\n        offset = i;\n        break;\n      }\n    }\n    return offset + 1;\n  };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n  return () => {\n    const element = containerRef.value;\n    if (element) {\n      const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n      const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n      const from = offset - overscan;\n      const to = offset + viewCapacity + overscan;\n      state.value = {\n        start: from < 0 ? 0 : from,\n        end: to > source.value.length ? source.value.length : to\n      };\n      currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n        data: ele,\n        index: index + state.value.start\n      }));\n    }\n  };\n}\nfunction createGetDistance(itemSize, source) {\n  return (index) => {\n    if (typeof itemSize === \"number\") {\n      const size2 = index * itemSize;\n      return size2;\n    }\n    const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n    return size;\n  };\n}\nfunction useWatchForSizes(size, list, calculateRange) {\n  watch([size.width, size.height, list], () => {\n    calculateRange();\n  });\n}\nfunction createComputedTotalSize(itemSize, source) {\n  return computed(() => {\n    if (typeof itemSize === \"number\")\n      return source.value.length * itemSize;\n    return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n  });\n}\nconst scrollToDictionaryForElementScrollKey = {\n  horizontal: \"scrollLeft\",\n  vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n  return (index) => {\n    if (containerRef.value) {\n      containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n      calculateRange();\n    }\n  };\n}\nfunction useHorizontalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowX: \"auto\" };\n  const { itemWidth, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n  const getOffset = createGetOffset(source, itemWidth);\n  const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceLeft = createGetDistance(itemWidth, source);\n  const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n  const totalWidth = createComputedTotalSize(itemWidth, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        height: \"100%\",\n        width: `${totalWidth.value - offsetLeft.value}px`,\n        marginLeft: `${offsetLeft.value}px`,\n        display: \"flex\"\n      }\n    };\n  });\n  return {\n    scrollTo,\n    calculateRange,\n    wrapperProps,\n    containerStyle,\n    currentList,\n    containerRef\n  };\n}\nfunction useVerticalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowY: \"auto\" };\n  const { itemHeight, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n  const getOffset = createGetOffset(source, itemHeight);\n  const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceTop = createGetDistance(itemHeight, source);\n  const offsetTop = computed(() => getDistanceTop(state.value.start));\n  const totalHeight = createComputedTotalSize(itemHeight, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        width: \"100%\",\n        height: `${totalHeight.value - offsetTop.value}px`,\n        marginTop: `${offsetTop.value}px`\n      }\n    };\n  });\n  return {\n    calculateRange,\n    scrollTo,\n    containerStyle,\n    wrapperProps,\n    currentList,\n    containerRef\n  };\n}\n\nfunction useWakeLock(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    document = defaultDocument\n  } = options;\n  let wakeLock;\n  const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n  const isActive = ref(false);\n  async function onVisibilityChange() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    if (document && document.visibilityState === \"visible\")\n      wakeLock = await navigator.wakeLock.request(\"screen\");\n    isActive.value = !wakeLock.released;\n  }\n  if (document)\n    useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n  async function request(type) {\n    if (!isSupported.value)\n      return;\n    wakeLock = await navigator.wakeLock.request(type);\n    isActive.value = !wakeLock.released;\n  }\n  async function release() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    await wakeLock.release();\n    isActive.value = !wakeLock.released;\n    wakeLock = null;\n  }\n  return {\n    isSupported,\n    isActive,\n    request,\n    release\n  };\n}\n\nfunction useWebNotification(defaultOptions = {}) {\n  const {\n    window = defaultWindow\n  } = defaultOptions;\n  const isSupported = useSupported(() => !!window && \"Notification\" in window);\n  const notification = ref(null);\n  const requestPermission = async () => {\n    if (!isSupported.value)\n      return;\n    if (\"permission\" in Notification && Notification.permission !== \"denied\")\n      await Notification.requestPermission();\n  };\n  const { on: onClick, trigger: clickTrigger } = createEventHook();\n  const { on: onShow, trigger: showTrigger } = createEventHook();\n  const { on: onError, trigger: errorTrigger } = createEventHook();\n  const { on: onClose, trigger: closeTrigger } = createEventHook();\n  const show = async (overrides) => {\n    if (!isSupported.value)\n      return;\n    await requestPermission();\n    const options = Object.assign({}, defaultOptions, overrides);\n    notification.value = new Notification(options.title || \"\", options);\n    notification.value.onclick = clickTrigger;\n    notification.value.onshow = showTrigger;\n    notification.value.onerror = errorTrigger;\n    notification.value.onclose = closeTrigger;\n    return notification.value;\n  };\n  const close = () => {\n    if (notification.value)\n      notification.value.close();\n    notification.value = null;\n  };\n  tryOnMounted(async () => {\n    if (isSupported.value)\n      await requestPermission();\n  });\n  tryOnScopeDispose(close);\n  if (isSupported.value && window) {\n    const document = window.document;\n    useEventListener(document, \"visibilitychange\", (e) => {\n      e.preventDefault();\n      if (document.visibilityState === \"visible\") {\n        close();\n      }\n    });\n  }\n  return {\n    isSupported,\n    notification,\n    show,\n    close,\n    onClick,\n    onShow,\n    onError,\n    onClose\n  };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n  if (options === true)\n    return {};\n  return options;\n}\nfunction useWebSocket(url, options = {}) {\n  const {\n    onConnected,\n    onDisconnected,\n    onError,\n    onMessage,\n    immediate = true,\n    autoClose = true,\n    protocols = []\n  } = options;\n  const data = ref(null);\n  const status = ref(\"CLOSED\");\n  const wsRef = ref();\n  const urlRef = toRef(url);\n  let heartbeatPause;\n  let heartbeatResume;\n  let explicitlyClosed = false;\n  let retried = 0;\n  let bufferedData = [];\n  let pongTimeoutWait;\n  const close = (code = 1e3, reason) => {\n    if (!wsRef.value)\n      return;\n    explicitlyClosed = true;\n    heartbeatPause == null ? void 0 : heartbeatPause();\n    wsRef.value.close(code, reason);\n  };\n  const _sendBuffer = () => {\n    if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n      for (const buffer of bufferedData)\n        wsRef.value.send(buffer);\n      bufferedData = [];\n    }\n  };\n  const resetHeartbeat = () => {\n    clearTimeout(pongTimeoutWait);\n    pongTimeoutWait = void 0;\n  };\n  const send = (data2, useBuffer = true) => {\n    if (!wsRef.value || status.value !== \"OPEN\") {\n      if (useBuffer)\n        bufferedData.push(data2);\n      return false;\n    }\n    _sendBuffer();\n    wsRef.value.send(data2);\n    return true;\n  };\n  const _init = () => {\n    if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n      return;\n    const ws = new WebSocket(urlRef.value, protocols);\n    wsRef.value = ws;\n    status.value = \"CONNECTING\";\n    ws.onopen = () => {\n      status.value = \"OPEN\";\n      onConnected == null ? void 0 : onConnected(ws);\n      heartbeatResume == null ? void 0 : heartbeatResume();\n      _sendBuffer();\n    };\n    ws.onclose = (ev) => {\n      status.value = \"CLOSED\";\n      wsRef.value = void 0;\n      onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n      if (!explicitlyClosed && options.autoReconnect) {\n        const {\n          retries = -1,\n          delay = 1e3,\n          onFailed\n        } = resolveNestedOptions(options.autoReconnect);\n        retried += 1;\n        if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n          setTimeout(_init, delay);\n        else if (typeof retries === \"function\" && retries())\n          setTimeout(_init, delay);\n        else\n          onFailed == null ? void 0 : onFailed();\n      }\n    };\n    ws.onerror = (e) => {\n      onError == null ? void 0 : onError(ws, e);\n    };\n    ws.onmessage = (e) => {\n      if (options.heartbeat) {\n        resetHeartbeat();\n        const {\n          message = DEFAULT_PING_MESSAGE\n        } = resolveNestedOptions(options.heartbeat);\n        if (e.data === message)\n          return;\n      }\n      data.value = e.data;\n      onMessage == null ? void 0 : onMessage(ws, e);\n    };\n  };\n  if (options.heartbeat) {\n    const {\n      message = DEFAULT_PING_MESSAGE,\n      interval = 1e3,\n      pongTimeout = 1e3\n    } = resolveNestedOptions(options.heartbeat);\n    const { pause, resume } = useIntervalFn(\n      () => {\n        send(message, false);\n        if (pongTimeoutWait != null)\n          return;\n        pongTimeoutWait = setTimeout(() => {\n          close();\n        }, pongTimeout);\n      },\n      interval,\n      { immediate: false }\n    );\n    heartbeatPause = pause;\n    heartbeatResume = resume;\n  }\n  if (autoClose) {\n    useEventListener(window, \"beforeunload\", () => close());\n    tryOnScopeDispose(close);\n  }\n  const open = () => {\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    watch(urlRef, open, { immediate: true });\n  return {\n    data,\n    status,\n    close,\n    send,\n    open,\n    ws: wsRef\n  };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n  const {\n    window = defaultWindow\n  } = options != null ? options : {};\n  const data = ref(null);\n  const worker = shallowRef();\n  const post = function post2(val) {\n    if (!worker.value)\n      return;\n    worker.value.postMessage(val);\n  };\n  const terminate = function terminate2() {\n    if (!worker.value)\n      return;\n    worker.value.terminate();\n  };\n  if (window) {\n    if (typeof arg0 === \"string\")\n      worker.value = new Worker(arg0, workerOptions);\n    else if (typeof arg0 === \"function\")\n      worker.value = arg0();\n    else\n      worker.value = arg0;\n    worker.value.onmessage = (e) => {\n      data.value = e.data;\n    };\n    tryOnScopeDispose(() => {\n      if (worker.value)\n        worker.value.terminate();\n    });\n  }\n  return {\n    data,\n    post,\n    terminate,\n    worker\n  };\n}\n\nfunction jobRunner(userFunc) {\n  return (e) => {\n    const userFuncArgs = e.data[0];\n    return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n      postMessage([\"SUCCESS\", result]);\n    }).catch((error) => {\n      postMessage([\"ERROR\", error]);\n    });\n  };\n}\n\nfunction depsParser(deps) {\n  if (deps.length === 0)\n    return \"\";\n  const depsString = deps.map((dep) => `'${dep}'`).toString();\n  return `importScripts(${depsString})`;\n}\n\nfunction createWorkerBlobUrl(fn, deps) {\n  const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;\n  const blob = new Blob([blobCode], { type: \"text/javascript\" });\n  const url = URL.createObjectURL(blob);\n  return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n  const {\n    dependencies = [],\n    timeout,\n    window = defaultWindow\n  } = options;\n  const worker = ref();\n  const workerStatus = ref(\"PENDING\");\n  const promise = ref({});\n  const timeoutId = ref();\n  const workerTerminate = (status = \"PENDING\") => {\n    if (worker.value && worker.value._url && window) {\n      worker.value.terminate();\n      URL.revokeObjectURL(worker.value._url);\n      promise.value = {};\n      worker.value = void 0;\n      window.clearTimeout(timeoutId.value);\n      workerStatus.value = status;\n    }\n  };\n  workerTerminate();\n  tryOnScopeDispose(workerTerminate);\n  const generateWorker = () => {\n    const blobUrl = createWorkerBlobUrl(fn, dependencies);\n    const newWorker = new Worker(blobUrl);\n    newWorker._url = blobUrl;\n    newWorker.onmessage = (e) => {\n      const { resolve = () => {\n      }, reject = () => {\n      } } = promise.value;\n      const [status, result] = e.data;\n      switch (status) {\n        case \"SUCCESS\":\n          resolve(result);\n          workerTerminate(status);\n          break;\n        default:\n          reject(result);\n          workerTerminate(\"ERROR\");\n          break;\n      }\n    };\n    newWorker.onerror = (e) => {\n      const { reject = () => {\n      } } = promise.value;\n      reject(e);\n      workerTerminate(\"ERROR\");\n    };\n    if (timeout) {\n      timeoutId.value = setTimeout(\n        () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n        timeout\n      );\n    }\n    return newWorker;\n  };\n  const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n    promise.value = {\n      resolve,\n      reject\n    };\n    worker.value && worker.value.postMessage([[...fnArgs]]);\n    workerStatus.value = \"RUNNING\";\n  });\n  const workerFn = (...fnArgs) => {\n    if (workerStatus.value === \"RUNNING\") {\n      console.error(\n        \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n      );\n      return Promise.reject();\n    }\n    worker.value = generateWorker();\n    return callWorker(...fnArgs);\n  };\n  return {\n    workerFn,\n    workerStatus,\n    workerTerminate\n  };\n}\n\nfunction useWindowFocus({ window = defaultWindow } = {}) {\n  if (!window)\n    return ref(false);\n  const focused = ref(window.document.hasFocus());\n  useEventListener(window, \"blur\", () => {\n    focused.value = false;\n  });\n  useEventListener(window, \"focus\", () => {\n    focused.value = true;\n  });\n  return focused;\n}\n\nfunction useWindowScroll({ window = defaultWindow } = {}) {\n  if (!window) {\n    return {\n      x: ref(0),\n      y: ref(0)\n    };\n  }\n  const x = ref(window.scrollX);\n  const y = ref(window.scrollY);\n  useEventListener(\n    window,\n    \"scroll\",\n    () => {\n      x.value = window.scrollX;\n      y.value = window.scrollY;\n    },\n    {\n      capture: false,\n      passive: true\n    }\n  );\n  return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n  const {\n    window = defaultWindow,\n    initialWidth = Infinity,\n    initialHeight = Infinity,\n    listenOrientation = true,\n    includeScrollbar = true\n  } = options;\n  const width = ref(initialWidth);\n  const height = ref(initialHeight);\n  const update = () => {\n    if (window) {\n      if (includeScrollbar) {\n        width.value = window.innerWidth;\n        height.value = window.innerHeight;\n      } else {\n        width.value = window.document.documentElement.clientWidth;\n        height.value = window.document.documentElement.clientHeight;\n      }\n    }\n  };\n  update();\n  tryOnMounted(update);\n  useEventListener(\"resize\", update, { passive: true });\n  if (listenOrientation) {\n    const matches = useMediaQuery(\"(orientation: portrait)\");\n    watch(matches, () => update());\n  }\n  return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","// NOTE: this list must be up-to-date with browsers listed in\n// test/acceptance/useragentstrings.yml\nexport const BROWSER_ALIASES_MAP = {\n  'Amazon Silk': 'amazon_silk',\n  'Android Browser': 'android',\n  Bada: 'bada',\n  BlackBerry: 'blackberry',\n  Chrome: 'chrome',\n  Chromium: 'chromium',\n  Electron: 'electron',\n  Epiphany: 'epiphany',\n  Firefox: 'firefox',\n  Focus: 'focus',\n  Generic: 'generic',\n  'Google Search': 'google_search',\n  Googlebot: 'googlebot',\n  'Internet Explorer': 'ie',\n  'K-Meleon': 'k_meleon',\n  Maxthon: 'maxthon',\n  'Microsoft Edge': 'edge',\n  'MZ Browser': 'mz',\n  'NAVER Whale Browser': 'naver',\n  Opera: 'opera',\n  'Opera Coast': 'opera_coast',\n  PhantomJS: 'phantomjs',\n  Puffin: 'puffin',\n  QupZilla: 'qupzilla',\n  QQ: 'qq',\n  QQLite: 'qqlite',\n  Safari: 'safari',\n  Sailfish: 'sailfish',\n  'Samsung Internet for Android': 'samsung_internet',\n  SeaMonkey: 'seamonkey',\n  Sleipnir: 'sleipnir',\n  Swing: 'swing',\n  Tizen: 'tizen',\n  'UC Browser': 'uc',\n  Vivaldi: 'vivaldi',\n  'WebOS Browser': 'webos',\n  WeChat: 'wechat',\n  'Yandex Browser': 'yandex',\n  Roku: 'roku',\n};\n\nexport const BROWSER_MAP = {\n  amazon_silk: 'Amazon Silk',\n  android: 'Android Browser',\n  bada: 'Bada',\n  blackberry: 'BlackBerry',\n  chrome: 'Chrome',\n  chromium: 'Chromium',\n  electron: 'Electron',\n  epiphany: 'Epiphany',\n  firefox: 'Firefox',\n  focus: 'Focus',\n  generic: 'Generic',\n  googlebot: 'Googlebot',\n  google_search: 'Google Search',\n  ie: 'Internet Explorer',\n  k_meleon: 'K-Meleon',\n  maxthon: 'Maxthon',\n  edge: 'Microsoft Edge',\n  mz: 'MZ Browser',\n  naver: 'NAVER Whale Browser',\n  opera: 'Opera',\n  opera_coast: 'Opera Coast',\n  phantomjs: 'PhantomJS',\n  puffin: 'Puffin',\n  qupzilla: 'QupZilla',\n  qq: 'QQ Browser',\n  qqlite: 'QQ Browser Lite',\n  safari: 'Safari',\n  sailfish: 'Sailfish',\n  samsung_internet: 'Samsung Internet for Android',\n  seamonkey: 'SeaMonkey',\n  sleipnir: 'Sleipnir',\n  swing: 'Swing',\n  tizen: 'Tizen',\n  uc: 'UC Browser',\n  vivaldi: 'Vivaldi',\n  webos: 'WebOS Browser',\n  wechat: 'WeChat',\n  yandex: 'Yandex Browser',\n};\n\nexport const PLATFORMS_MAP = {\n  tablet: 'tablet',\n  mobile: 'mobile',\n  desktop: 'desktop',\n  tv: 'tv',\n};\n\nexport const OS_MAP = {\n  WindowsPhone: 'Windows Phone',\n  Windows: 'Windows',\n  MacOS: 'macOS',\n  iOS: 'iOS',\n  Android: 'Android',\n  WebOS: 'WebOS',\n  BlackBerry: 'BlackBerry',\n  Bada: 'Bada',\n  Tizen: 'Tizen',\n  Linux: 'Linux',\n  ChromeOS: 'Chrome OS',\n  PlayStation4: 'PlayStation 4',\n  Roku: 'Roku',\n};\n\nexport const ENGINE_MAP = {\n  EdgeHTML: 'EdgeHTML',\n  Blink: 'Blink',\n  Trident: 'Trident',\n  Presto: 'Presto',\n  Gecko: 'Gecko',\n  WebKit: 'WebKit',\n};\n","import { BROWSER_MAP, BROWSER_ALIASES_MAP } from './constants.js';\n\nexport default class Utils {\n  /**\n   * Get first matched item for a string\n   * @param {RegExp} regexp\n   * @param {String} ua\n   * @return {Array|{index: number, input: string}|*|boolean|string}\n   */\n  static getFirstMatch(regexp, ua) {\n    const match = ua.match(regexp);\n    return (match && match.length > 0 && match[1]) || '';\n  }\n\n  /**\n   * Get second matched item for a string\n   * @param regexp\n   * @param {String} ua\n   * @return {Array|{index: number, input: string}|*|boolean|string}\n   */\n  static getSecondMatch(regexp, ua) {\n    const match = ua.match(regexp);\n    return (match && match.length > 1 && match[2]) || '';\n  }\n\n  /**\n   * Match a regexp and return a constant or undefined\n   * @param {RegExp} regexp\n   * @param {String} ua\n   * @param {*} _const Any const that will be returned if regexp matches the string\n   * @return {*}\n   */\n  static matchAndReturnConst(regexp, ua, _const) {\n    if (regexp.test(ua)) {\n      return _const;\n    }\n    return void (0);\n  }\n\n  static getWindowsVersionName(version) {\n    switch (version) {\n      case 'NT': return 'NT';\n      case 'XP': return 'XP';\n      case 'NT 5.0': return '2000';\n      case 'NT 5.1': return 'XP';\n      case 'NT 5.2': return '2003';\n      case 'NT 6.0': return 'Vista';\n      case 'NT 6.1': return '7';\n      case 'NT 6.2': return '8';\n      case 'NT 6.3': return '8.1';\n      case 'NT 10.0': return '10';\n      default: return undefined;\n    }\n  }\n\n  /**\n   * Get macOS version name\n   *    10.5 - Leopard\n   *    10.6 - Snow Leopard\n   *    10.7 - Lion\n   *    10.8 - Mountain Lion\n   *    10.9 - Mavericks\n   *    10.10 - Yosemite\n   *    10.11 - El Capitan\n   *    10.12 - Sierra\n   *    10.13 - High Sierra\n   *    10.14 - Mojave\n   *    10.15 - Catalina\n   *\n   * @example\n   *   getMacOSVersionName(\"10.14\") // 'Mojave'\n   *\n   * @param  {string} version\n   * @return {string} versionName\n   */\n  static getMacOSVersionName(version) {\n    const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n    v.push(0);\n    if (v[0] !== 10) return undefined;\n    switch (v[1]) {\n      case 5: return 'Leopard';\n      case 6: return 'Snow Leopard';\n      case 7: return 'Lion';\n      case 8: return 'Mountain Lion';\n      case 9: return 'Mavericks';\n      case 10: return 'Yosemite';\n      case 11: return 'El Capitan';\n      case 12: return 'Sierra';\n      case 13: return 'High Sierra';\n      case 14: return 'Mojave';\n      case 15: return 'Catalina';\n      default: return undefined;\n    }\n  }\n\n  /**\n   * Get Android version name\n   *    1.5 - Cupcake\n   *    1.6 - Donut\n   *    2.0 - Eclair\n   *    2.1 - Eclair\n   *    2.2 - Froyo\n   *    2.x - Gingerbread\n   *    3.x - Honeycomb\n   *    4.0 - Ice Cream Sandwich\n   *    4.1 - Jelly Bean\n   *    4.4 - KitKat\n   *    5.x - Lollipop\n   *    6.x - Marshmallow\n   *    7.x - Nougat\n   *    8.x - Oreo\n   *    9.x - Pie\n   *\n   * @example\n   *   getAndroidVersionName(\"7.0\") // 'Nougat'\n   *\n   * @param  {string} version\n   * @return {string} versionName\n   */\n  static getAndroidVersionName(version) {\n    const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n    v.push(0);\n    if (v[0] === 1 && v[1] < 5) return undefined;\n    if (v[0] === 1 && v[1] < 6) return 'Cupcake';\n    if (v[0] === 1 && v[1] >= 6) return 'Donut';\n    if (v[0] === 2 && v[1] < 2) return 'Eclair';\n    if (v[0] === 2 && v[1] === 2) return 'Froyo';\n    if (v[0] === 2 && v[1] > 2) return 'Gingerbread';\n    if (v[0] === 3) return 'Honeycomb';\n    if (v[0] === 4 && v[1] < 1) return 'Ice Cream Sandwich';\n    if (v[0] === 4 && v[1] < 4) return 'Jelly Bean';\n    if (v[0] === 4 && v[1] >= 4) return 'KitKat';\n    if (v[0] === 5) return 'Lollipop';\n    if (v[0] === 6) return 'Marshmallow';\n    if (v[0] === 7) return 'Nougat';\n    if (v[0] === 8) return 'Oreo';\n    if (v[0] === 9) return 'Pie';\n    return undefined;\n  }\n\n  /**\n   * Get version precisions count\n   *\n   * @example\n   *   getVersionPrecision(\"1.10.3\") // 3\n   *\n   * @param  {string} version\n   * @return {number}\n   */\n  static getVersionPrecision(version) {\n    return version.split('.').length;\n  }\n\n  /**\n   * Calculate browser version weight\n   *\n   * @example\n   *   compareVersions('1.10.2.1',  '1.8.2.1.90')    // 1\n   *   compareVersions('1.010.2.1', '1.09.2.1.90');  // 1\n   *   compareVersions('1.10.2.1',  '1.10.2.1');     // 0\n   *   compareVersions('1.10.2.1',  '1.0800.2');     // -1\n   *   compareVersions('1.10.2.1',  '1.10',  true);  // 0\n   *\n   * @param {String} versionA versions versions to compare\n   * @param {String} versionB versions versions to compare\n   * @param {boolean} [isLoose] enable loose comparison\n   * @return {Number} comparison result: -1 when versionA is lower,\n   * 1 when versionA is bigger, 0 when both equal\n   */\n  /* eslint consistent-return: 1 */\n  static compareVersions(versionA, versionB, isLoose = false) {\n    // 1) get common precision for both versions, for example for \"10.0\" and \"9\" it should be 2\n    const versionAPrecision = Utils.getVersionPrecision(versionA);\n    const versionBPrecision = Utils.getVersionPrecision(versionB);\n\n    let precision = Math.max(versionAPrecision, versionBPrecision);\n    let lastPrecision = 0;\n\n    const chunks = Utils.map([versionA, versionB], (version) => {\n      const delta = precision - Utils.getVersionPrecision(version);\n\n      // 2) \"9\" -> \"9.0\" (for precision = 2)\n      const _version = version + new Array(delta + 1).join('.0');\n\n      // 3) \"9.0\" -> [\"000000000\"\", \"000000009\"]\n      return Utils.map(_version.split('.'), chunk => new Array(20 - chunk.length).join('0') + chunk).reverse();\n    });\n\n    // adjust precision for loose comparison\n    if (isLoose) {\n      lastPrecision = precision - Math.min(versionAPrecision, versionBPrecision);\n    }\n\n    // iterate in reverse order by reversed chunks array\n    precision -= 1;\n    while (precision >= lastPrecision) {\n      // 4) compare: \"000000009\" > \"000000010\" = false (but \"9\" > \"10\" = true)\n      if (chunks[0][precision] > chunks[1][precision]) {\n        return 1;\n      }\n\n      if (chunks[0][precision] === chunks[1][precision]) {\n        if (precision === lastPrecision) {\n          // all version chunks are same\n          return 0;\n        }\n\n        precision -= 1;\n      } else if (chunks[0][precision] < chunks[1][precision]) {\n        return -1;\n      }\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Array::map polyfill\n   *\n   * @param  {Array} arr\n   * @param  {Function} iterator\n   * @return {Array}\n   */\n  static map(arr, iterator) {\n    const result = [];\n    let i;\n    if (Array.prototype.map) {\n      return Array.prototype.map.call(arr, iterator);\n    }\n    for (i = 0; i < arr.length; i += 1) {\n      result.push(iterator(arr[i]));\n    }\n    return result;\n  }\n\n  /**\n   * Array::find polyfill\n   *\n   * @param  {Array} arr\n   * @param  {Function} predicate\n   * @return {Array}\n   */\n  static find(arr, predicate) {\n    let i;\n    let l;\n    if (Array.prototype.find) {\n      return Array.prototype.find.call(arr, predicate);\n    }\n    for (i = 0, l = arr.length; i < l; i += 1) {\n      const value = arr[i];\n      if (predicate(value, i)) {\n        return value;\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * Object::assign polyfill\n   *\n   * @param  {Object} obj\n   * @param  {Object} ...objs\n   * @return {Object}\n   */\n  static assign(obj, ...assigners) {\n    const result = obj;\n    let i;\n    let l;\n    if (Object.assign) {\n      return Object.assign(obj, ...assigners);\n    }\n    for (i = 0, l = assigners.length; i < l; i += 1) {\n      const assigner = assigners[i];\n      if (typeof assigner === 'object' && assigner !== null) {\n        const keys = Object.keys(assigner);\n        keys.forEach((key) => {\n          result[key] = assigner[key];\n        });\n      }\n    }\n    return obj;\n  }\n\n  /**\n   * Get short version/alias for a browser name\n   *\n   * @example\n   *   getBrowserAlias('Microsoft Edge') // edge\n   *\n   * @param  {string} browserName\n   * @return {string}\n   */\n  static getBrowserAlias(browserName) {\n    return BROWSER_ALIASES_MAP[browserName];\n  }\n\n  /**\n   * Get short version/alias for a browser name\n   *\n   * @example\n   *   getBrowserAlias('edge') // Microsoft Edge\n   *\n   * @param  {string} browserAlias\n   * @return {string}\n   */\n  static getBrowserTypeByAlias(browserAlias) {\n    return BROWSER_MAP[browserAlias] || '';\n  }\n}\n","/**\n * Browsers' descriptors\n *\n * The idea of descriptors is simple. You should know about them two simple things:\n * 1. Every descriptor has a method or property called `test` and a `describe` method.\n * 2. Order of descriptors is important.\n *\n * More details:\n * 1. Method or property `test` serves as a way to detect whether the UA string\n * matches some certain browser or not. The `describe` method helps to make a result\n * object with params that show some browser-specific things: name, version, etc.\n * 2. Order of descriptors is important because a Parser goes through them one by one\n * in course. For example, if you insert Chrome's descriptor as the first one,\n * more then a half of browsers will be described as Chrome, because they will pass\n * the Chrome descriptor's test.\n *\n * Descriptor's `test` could be a property with an array of RegExps, where every RegExp\n * will be applied to a UA string to test it whether it matches or not.\n * If a descriptor has two or more regexps in the `test` array it tests them one by one\n * with a logical sum operation. Parser stops if it has found any RegExp that matches the UA.\n *\n * Or `test` could be a method. In that case it gets a Parser instance and should\n * return true/false to get the Parser know if this browser descriptor matches the UA or not.\n */\n\nimport Utils from './utils.js';\n\nconst commonVersionIdentifier = /version\\/(\\d+(\\.?_?\\d+)+)/i;\n\nconst browsersList = [\n  /* Googlebot */\n  {\n    test: [/googlebot/i],\n    describe(ua) {\n      const browser = {\n        name: 'Googlebot',\n      };\n      const version = Utils.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n\n  /* Opera < 13.0 */\n  {\n    test: [/opera/i],\n    describe(ua) {\n      const browser = {\n        name: 'Opera',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n\n  /* Opera > 13.0 */\n  {\n    test: [/opr\\/|opios/i],\n    describe(ua) {\n      const browser = {\n        name: 'Opera',\n      };\n      const version = Utils.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/SamsungBrowser/i],\n    describe(ua) {\n      const browser = {\n        name: 'Samsung Internet for Android',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/Whale/i],\n    describe(ua) {\n      const browser = {\n        name: 'NAVER Whale Browser',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/MZBrowser/i],\n    describe(ua) {\n      const browser = {\n        name: 'MZ Browser',\n      };\n      const version = Utils.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/focus/i],\n    describe(ua) {\n      const browser = {\n        name: 'Focus',\n      };\n      const version = Utils.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/swing/i],\n    describe(ua) {\n      const browser = {\n        name: 'Swing',\n      };\n      const version = Utils.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/coast/i],\n    describe(ua) {\n      const browser = {\n        name: 'Opera Coast',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/opt\\/\\d+(?:.?_?\\d+)+/i],\n    describe(ua) {\n      const browser = {\n        name: 'Opera Touch',\n      };\n      const version = Utils.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/yabrowser/i],\n    describe(ua) {\n      const browser = {\n        name: 'Yandex Browser',\n      };\n      const version = Utils.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/ucbrowser/i],\n    describe(ua) {\n      const browser = {\n        name: 'UC Browser',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/Maxthon|mxios/i],\n    describe(ua) {\n      const browser = {\n        name: 'Maxthon',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/epiphany/i],\n    describe(ua) {\n      const browser = {\n        name: 'Epiphany',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/puffin/i],\n    describe(ua) {\n      const browser = {\n        name: 'Puffin',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/sleipnir/i],\n    describe(ua) {\n      const browser = {\n        name: 'Sleipnir',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/k-meleon/i],\n    describe(ua) {\n      const browser = {\n        name: 'K-Meleon',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/micromessenger/i],\n    describe(ua) {\n      const browser = {\n        name: 'WeChat',\n      };\n      const version = Utils.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/qqbrowser/i],\n    describe(ua) {\n      const browser = {\n        name: (/qqbrowserlite/i).test(ua) ? 'QQ Browser Lite' : 'QQ Browser',\n      };\n      const version = Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/msie|trident/i],\n    describe(ua) {\n      const browser = {\n        name: 'Internet Explorer',\n      };\n      const version = Utils.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/\\sedg\\//i],\n    describe(ua) {\n      const browser = {\n        name: 'Microsoft Edge',\n      };\n\n      const version = Utils.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/edg([ea]|ios)/i],\n    describe(ua) {\n      const browser = {\n        name: 'Microsoft Edge',\n      };\n\n      const version = Utils.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/vivaldi/i],\n    describe(ua) {\n      const browser = {\n        name: 'Vivaldi',\n      };\n      const version = Utils.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/seamonkey/i],\n    describe(ua) {\n      const browser = {\n        name: 'SeaMonkey',\n      };\n      const version = Utils.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/sailfish/i],\n    describe(ua) {\n      const browser = {\n        name: 'Sailfish',\n      };\n\n      const version = Utils.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/silk/i],\n    describe(ua) {\n      const browser = {\n        name: 'Amazon Silk',\n      };\n      const version = Utils.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/phantom/i],\n    describe(ua) {\n      const browser = {\n        name: 'PhantomJS',\n      };\n      const version = Utils.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/slimerjs/i],\n    describe(ua) {\n      const browser = {\n        name: 'SlimerJS',\n      };\n      const version = Utils.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n    describe(ua) {\n      const browser = {\n        name: 'BlackBerry',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/(web|hpw)[o0]s/i],\n    describe(ua) {\n      const browser = {\n        name: 'WebOS Browser',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/bada/i],\n    describe(ua) {\n      const browser = {\n        name: 'Bada',\n      };\n      const version = Utils.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/tizen/i],\n    describe(ua) {\n      const browser = {\n        name: 'Tizen',\n      };\n      const version = Utils.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/qupzilla/i],\n    describe(ua) {\n      const browser = {\n        name: 'QupZilla',\n      };\n      const version = Utils.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/firefox|iceweasel|fxios/i],\n    describe(ua) {\n      const browser = {\n        name: 'Firefox',\n      };\n      const version = Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/electron/i],\n    describe(ua) {\n      const browser = {\n        name: 'Electron',\n      };\n      const version = Utils.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/MiuiBrowser/i],\n    describe(ua) {\n      const browser = {\n        name: 'Miui',\n      };\n      const version = Utils.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/chromium/i],\n    describe(ua) {\n      const browser = {\n        name: 'Chromium',\n      };\n      const version = Utils.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/chrome|crios|crmo/i],\n    describe(ua) {\n      const browser = {\n        name: 'Chrome',\n      };\n      const version = Utils.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n  {\n    test: [/GSA/i],\n    describe(ua) {\n      const browser = {\n        name: 'Google Search',\n      };\n      const version = Utils.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n\n  /* Android Browser */\n  {\n    test(parser) {\n      const notLikeAndroid = !parser.test(/like android/i);\n      const butAndroid = parser.test(/android/i);\n      return notLikeAndroid && butAndroid;\n    },\n    describe(ua) {\n      const browser = {\n        name: 'Android Browser',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n\n  /* PlayStation 4 */\n  {\n    test: [/playstation 4/i],\n    describe(ua) {\n      const browser = {\n        name: 'PlayStation 4',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n\n  /* Safari */\n  {\n    test: [/safari|applewebkit/i],\n    describe(ua) {\n      const browser = {\n        name: 'Safari',\n      };\n      const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n      if (version) {\n        browser.version = version;\n      }\n\n      return browser;\n    },\n  },\n\n  /* Something else */\n  {\n    test: [/.*/i],\n    describe(ua) {\n      /* Here we try to make sure that there are explicit details about the device\n       * in order to decide what regexp exactly we want to apply\n       * (as there is a specific decision based on that conclusion)\n       */\n      const regexpWithoutDeviceSpec = /^(.*)\\/(.*) /;\n      const regexpWithDeviceSpec = /^(.*)\\/(.*)[ \\t]\\((.*)/;\n      const hasDeviceSpec = ua.search('\\\\(') !== -1;\n      const regexp = hasDeviceSpec ? regexpWithDeviceSpec : regexpWithoutDeviceSpec;\n      return {\n        name: Utils.getFirstMatch(regexp, ua),\n        version: Utils.getSecondMatch(regexp, ua),\n      };\n    },\n  },\n];\n\nexport default browsersList;\n","import Utils from './utils.js';\nimport { OS_MAP } from './constants.js';\n\nexport default [\n  /* Roku */\n  {\n    test: [/Roku\\/DVP/],\n    describe(ua) {\n      const version = Utils.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i, ua);\n      return {\n        name: OS_MAP.Roku,\n        version,\n      };\n    },\n  },\n\n  /* Windows Phone */\n  {\n    test: [/windows phone/i],\n    describe(ua) {\n      const version = Utils.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i, ua);\n      return {\n        name: OS_MAP.WindowsPhone,\n        version,\n      };\n    },\n  },\n\n  /* Windows */\n  {\n    test: [/windows /i],\n    describe(ua) {\n      const version = Utils.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i, ua);\n      const versionName = Utils.getWindowsVersionName(version);\n\n      return {\n        name: OS_MAP.Windows,\n        version,\n        versionName,\n      };\n    },\n  },\n\n  /* Firefox on iPad */\n  {\n    test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n    describe(ua) {\n      const result = {\n        name: OS_MAP.iOS,\n      };\n      const version = Utils.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/, ua);\n      if (version) {\n        result.version = version;\n      }\n      return result;\n    },\n  },\n\n  /* macOS */\n  {\n    test: [/macintosh/i],\n    describe(ua) {\n      const version = Utils.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i, ua).replace(/[_\\s]/g, '.');\n      const versionName = Utils.getMacOSVersionName(version);\n\n      const os = {\n        name: OS_MAP.MacOS,\n        version,\n      };\n      if (versionName) {\n        os.versionName = versionName;\n      }\n      return os;\n    },\n  },\n\n  /* iOS */\n  {\n    test: [/(ipod|iphone|ipad)/i],\n    describe(ua) {\n      const version = Utils.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i, ua).replace(/[_\\s]/g, '.');\n\n      return {\n        name: OS_MAP.iOS,\n        version,\n      };\n    },\n  },\n\n  /* Android */\n  {\n    test(parser) {\n      const notLikeAndroid = !parser.test(/like android/i);\n      const butAndroid = parser.test(/android/i);\n      return notLikeAndroid && butAndroid;\n    },\n    describe(ua) {\n      const version = Utils.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i, ua);\n      const versionName = Utils.getAndroidVersionName(version);\n      const os = {\n        name: OS_MAP.Android,\n        version,\n      };\n      if (versionName) {\n        os.versionName = versionName;\n      }\n      return os;\n    },\n  },\n\n  /* WebOS */\n  {\n    test: [/(web|hpw)[o0]s/i],\n    describe(ua) {\n      const version = Utils.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i, ua);\n      const os = {\n        name: OS_MAP.WebOS,\n      };\n\n      if (version && version.length) {\n        os.version = version;\n      }\n      return os;\n    },\n  },\n\n  /* BlackBerry */\n  {\n    test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n    describe(ua) {\n      const version = Utils.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i, ua)\n        || Utils.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i, ua)\n        || Utils.getFirstMatch(/\\bbb(\\d+)/i, ua);\n\n      return {\n        name: OS_MAP.BlackBerry,\n        version,\n      };\n    },\n  },\n\n  /* Bada */\n  {\n    test: [/bada/i],\n    describe(ua) {\n      const version = Utils.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i, ua);\n\n      return {\n        name: OS_MAP.Bada,\n        version,\n      };\n    },\n  },\n\n  /* Tizen */\n  {\n    test: [/tizen/i],\n    describe(ua) {\n      const version = Utils.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i, ua);\n\n      return {\n        name: OS_MAP.Tizen,\n        version,\n      };\n    },\n  },\n\n  /* Linux */\n  {\n    test: [/linux/i],\n    describe() {\n      return {\n        name: OS_MAP.Linux,\n      };\n    },\n  },\n\n  /* Chrome OS */\n  {\n    test: [/CrOS/],\n    describe() {\n      return {\n        name: OS_MAP.ChromeOS,\n      };\n    },\n  },\n\n  /* Playstation 4 */\n  {\n    test: [/PlayStation 4/],\n    describe(ua) {\n      const version = Utils.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i, ua);\n      return {\n        name: OS_MAP.PlayStation4,\n        version,\n      };\n    },\n  },\n];\n","import Utils from './utils.js';\nimport { PLATFORMS_MAP } from './constants.js';\n\n/*\n * Tablets go first since usually they have more specific\n * signs to detect.\n */\n\nexport default [\n  /* Googlebot */\n  {\n    test: [/googlebot/i],\n    describe() {\n      return {\n        type: 'bot',\n        vendor: 'Google',\n      };\n    },\n  },\n\n  /* Huawei */\n  {\n    test: [/huawei/i],\n    describe(ua) {\n      const model = Utils.getFirstMatch(/(can-l01)/i, ua) && 'Nova';\n      const platform = {\n        type: PLATFORMS_MAP.mobile,\n        vendor: 'Huawei',\n      };\n      if (model) {\n        platform.model = model;\n      }\n      return platform;\n    },\n  },\n\n  /* Nexus Tablet */\n  {\n    test: [/nexus\\s*(?:7|8|9|10).*/i],\n    describe() {\n      return {\n        type: PLATFORMS_MAP.tablet,\n        vendor: 'Nexus',\n      };\n    },\n  },\n\n  /* iPad */\n  {\n    test: [/ipad/i],\n    describe() {\n      return {\n        type: PLATFORMS_MAP.tablet,\n        vendor: 'Apple',\n        model: 'iPad',\n      };\n    },\n  },\n\n  /* Firefox on iPad */\n  {\n    test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n    describe() {\n      return {\n        type: PLATFORMS_MAP.tablet,\n        vendor: 'Apple',\n        model: 'iPad',\n      };\n    },\n  },\n\n  /* Amazon Kindle Fire */\n  {\n    test: [/kftt build/i],\n    describe() {\n      return {\n        type: PLATFORMS_MAP.tablet,\n        vendor: 'Amazon',\n        model: 'Kindle Fire HD 7',\n      };\n    },\n  },\n\n  /* Another Amazon Tablet with Silk */\n  {\n    test: [/silk/i],\n    describe() {\n      return {\n        type: PLATFORMS_MAP.tablet,\n        vendor: 'Amazon',\n      };\n    },\n  },\n\n  /* Tablet */\n  {\n    test: [/tablet(?! pc)/i],\n    describe() {\n      return {\n        type: PLATFORMS_MAP.tablet,\n      };\n    },\n  },\n\n  /* iPod/iPhone */\n  {\n    test(parser) {\n      const iDevice = parser.test(/ipod|iphone/i);\n      const likeIDevice = parser.test(/like (ipod|iphone)/i);\n      return iDevice && !likeIDevice;\n    },\n    describe(ua) {\n      const model = Utils.getFirstMatch(/(ipod|iphone)/i, ua);\n      return {\n        type: PLATFORMS_MAP.mobile,\n        vendor: 'Apple',\n        model,\n      };\n    },\n  },\n\n  /* Nexus Mobile */\n  {\n    test: [/nexus\\s*[0-6].*/i, /galaxy nexus/i],\n    describe() {\n      return {\n        type: PLATFORMS_MAP.mobile,\n        vendor: 'Nexus',\n      };\n    },\n  },\n\n  /* Mobile */\n  {\n    test: [/[^-]mobi/i],\n    describe() {\n      return {\n        type: PLATFORMS_MAP.mobile,\n      };\n    },\n  },\n\n  /* BlackBerry */\n  {\n    test(parser) {\n      return parser.getBrowserName(true) === 'blackberry';\n    },\n    describe() {\n      return {\n        type: PLATFORMS_MAP.mobile,\n        vendor: 'BlackBerry',\n      };\n    },\n  },\n\n  /* Bada */\n  {\n    test(parser) {\n      return parser.getBrowserName(true) === 'bada';\n    },\n    describe() {\n      return {\n        type: PLATFORMS_MAP.mobile,\n      };\n    },\n  },\n\n  /* Windows Phone */\n  {\n    test(parser) {\n      return parser.getBrowserName() === 'windows phone';\n    },\n    describe() {\n      return {\n        type: PLATFORMS_MAP.mobile,\n        vendor: 'Microsoft',\n      };\n    },\n  },\n\n  /* Android Tablet */\n  {\n    test(parser) {\n      const osMajorVersion = Number(String(parser.getOSVersion()).split('.')[0]);\n      return parser.getOSName(true) === 'android' && (osMajorVersion >= 3);\n    },\n    describe() {\n      return {\n        type: PLATFORMS_MAP.tablet,\n      };\n    },\n  },\n\n  /* Android Mobile */\n  {\n    test(parser) {\n      return parser.getOSName(true) === 'android';\n    },\n    describe() {\n      return {\n        type: PLATFORMS_MAP.mobile,\n      };\n    },\n  },\n\n  /* desktop */\n  {\n    test(parser) {\n      return parser.getOSName(true) === 'macos';\n    },\n    describe() {\n      return {\n        type: PLATFORMS_MAP.desktop,\n        vendor: 'Apple',\n      };\n    },\n  },\n\n  /* Windows */\n  {\n    test(parser) {\n      return parser.getOSName(true) === 'windows';\n    },\n    describe() {\n      return {\n        type: PLATFORMS_MAP.desktop,\n      };\n    },\n  },\n\n  /* Linux */\n  {\n    test(parser) {\n      return parser.getOSName(true) === 'linux';\n    },\n    describe() {\n      return {\n        type: PLATFORMS_MAP.desktop,\n      };\n    },\n  },\n\n  /* PlayStation 4 */\n  {\n    test(parser) {\n      return parser.getOSName(true) === 'playstation 4';\n    },\n    describe() {\n      return {\n        type: PLATFORMS_MAP.tv,\n      };\n    },\n  },\n\n  /* Roku */\n  {\n    test(parser) {\n      return parser.getOSName(true) === 'roku';\n    },\n    describe() {\n      return {\n        type: PLATFORMS_MAP.tv,\n      };\n    },\n  },\n];\n","import Utils from './utils.js';\nimport { ENGINE_MAP } from './constants.js';\n\n/*\n * More specific goes first\n */\nexport default [\n  /* EdgeHTML */\n  {\n    test(parser) {\n      return parser.getBrowserName(true) === 'microsoft edge';\n    },\n    describe(ua) {\n      const isBlinkBased = /\\sedg\\//i.test(ua);\n\n      // return blink if it's blink-based one\n      if (isBlinkBased) {\n        return {\n          name: ENGINE_MAP.Blink,\n        };\n      }\n\n      // otherwise match the version and return EdgeHTML\n      const version = Utils.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      return {\n        name: ENGINE_MAP.EdgeHTML,\n        version,\n      };\n    },\n  },\n\n  /* Trident */\n  {\n    test: [/trident/i],\n    describe(ua) {\n      const engine = {\n        name: ENGINE_MAP.Trident,\n      };\n\n      const version = Utils.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        engine.version = version;\n      }\n\n      return engine;\n    },\n  },\n\n  /* Presto */\n  {\n    test(parser) {\n      return parser.test(/presto/i);\n    },\n    describe(ua) {\n      const engine = {\n        name: ENGINE_MAP.Presto,\n      };\n\n      const version = Utils.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        engine.version = version;\n      }\n\n      return engine;\n    },\n  },\n\n  /* Gecko */\n  {\n    test(parser) {\n      const isGecko = parser.test(/gecko/i);\n      const likeGecko = parser.test(/like gecko/i);\n      return isGecko && !likeGecko;\n    },\n    describe(ua) {\n      const engine = {\n        name: ENGINE_MAP.Gecko,\n      };\n\n      const version = Utils.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        engine.version = version;\n      }\n\n      return engine;\n    },\n  },\n\n  /* Blink */\n  {\n    test: [/(apple)?webkit\\/537\\.36/i],\n    describe() {\n      return {\n        name: ENGINE_MAP.Blink,\n      };\n    },\n  },\n\n  /* WebKit */\n  {\n    test: [/(apple)?webkit/i],\n    describe(ua) {\n      const engine = {\n        name: ENGINE_MAP.WebKit,\n      };\n\n      const version = Utils.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n      if (version) {\n        engine.version = version;\n      }\n\n      return engine;\n    },\n  },\n];\n","import browserParsersList from './parser-browsers.js';\nimport osParsersList from './parser-os.js';\nimport platformParsersList from './parser-platforms.js';\nimport enginesParsersList from './parser-engines.js';\nimport Utils from './utils.js';\n\n/**\n * The main class that arranges the whole parsing process.\n */\nclass Parser {\n  /**\n   * Create instance of Parser\n   *\n   * @param {String} UA User-Agent string\n   * @param {Boolean} [skipParsing=false] parser can skip parsing in purpose of performance\n   * improvements if you need to make a more particular parsing\n   * like {@link Parser#parseBrowser} or {@link Parser#parsePlatform}\n   *\n   * @throw {Error} in case of empty UA String\n   *\n   * @constructor\n   */\n  constructor(UA, skipParsing = false) {\n    if (UA === void (0) || UA === null || UA === '') {\n      throw new Error(\"UserAgent parameter can't be empty\");\n    }\n\n    this._ua = UA;\n\n    /**\n     * @typedef ParsedResult\n     * @property {Object} browser\n     * @property {String|undefined} [browser.name]\n     * Browser name, like `\"Chrome\"` or `\"Internet Explorer\"`\n     * @property {String|undefined} [browser.version] Browser version as a String `\"12.01.45334.10\"`\n     * @property {Object} os\n     * @property {String|undefined} [os.name] OS name, like `\"Windows\"` or `\"macOS\"`\n     * @property {String|undefined} [os.version] OS version, like `\"NT 5.1\"` or `\"10.11.1\"`\n     * @property {String|undefined} [os.versionName] OS name, like `\"XP\"` or `\"High Sierra\"`\n     * @property {Object} platform\n     * @property {String|undefined} [platform.type]\n     * platform type, can be either `\"desktop\"`, `\"tablet\"` or `\"mobile\"`\n     * @property {String|undefined} [platform.vendor] Vendor of the device,\n     * like `\"Apple\"` or `\"Samsung\"`\n     * @property {String|undefined} [platform.model] Device model,\n     * like `\"iPhone\"` or `\"Kindle Fire HD 7\"`\n     * @property {Object} engine\n     * @property {String|undefined} [engine.name]\n     * Can be any of this: `WebKit`, `Blink`, `Gecko`, `Trident`, `Presto`, `EdgeHTML`\n     * @property {String|undefined} [engine.version] String version of the engine\n     */\n    this.parsedResult = {};\n\n    if (skipParsing !== true) {\n      this.parse();\n    }\n  }\n\n  /**\n   * Get UserAgent string of current Parser instance\n   * @return {String} User-Agent String of the current <Parser> object\n   *\n   * @public\n   */\n  getUA() {\n    return this._ua;\n  }\n\n  /**\n   * Test a UA string for a regexp\n   * @param {RegExp} regex\n   * @return {Boolean}\n   */\n  test(regex) {\n    return regex.test(this._ua);\n  }\n\n  /**\n   * Get parsed browser object\n   * @return {Object}\n   */\n  parseBrowser() {\n    this.parsedResult.browser = {};\n\n    const browserDescriptor = Utils.find(browserParsersList, (_browser) => {\n      if (typeof _browser.test === 'function') {\n        return _browser.test(this);\n      }\n\n      if (_browser.test instanceof Array) {\n        return _browser.test.some(condition => this.test(condition));\n      }\n\n      throw new Error(\"Browser's test function is not valid\");\n    });\n\n    if (browserDescriptor) {\n      this.parsedResult.browser = browserDescriptor.describe(this.getUA());\n    }\n\n    return this.parsedResult.browser;\n  }\n\n  /**\n   * Get parsed browser object\n   * @return {Object}\n   *\n   * @public\n   */\n  getBrowser() {\n    if (this.parsedResult.browser) {\n      return this.parsedResult.browser;\n    }\n\n    return this.parseBrowser();\n  }\n\n  /**\n   * Get browser's name\n   * @return {String} Browser's name or an empty string\n   *\n   * @public\n   */\n  getBrowserName(toLowerCase) {\n    if (toLowerCase) {\n      return String(this.getBrowser().name).toLowerCase() || '';\n    }\n    return this.getBrowser().name || '';\n  }\n\n\n  /**\n   * Get browser's version\n   * @return {String} version of browser\n   *\n   * @public\n   */\n  getBrowserVersion() {\n    return this.getBrowser().version;\n  }\n\n  /**\n   * Get OS\n   * @return {Object}\n   *\n   * @example\n   * this.getOS();\n   * {\n   *   name: 'macOS',\n   *   version: '10.11.12'\n   * }\n   */\n  getOS() {\n    if (this.parsedResult.os) {\n      return this.parsedResult.os;\n    }\n\n    return this.parseOS();\n  }\n\n  /**\n   * Parse OS and save it to this.parsedResult.os\n   * @return {*|{}}\n   */\n  parseOS() {\n    this.parsedResult.os = {};\n\n    const os = Utils.find(osParsersList, (_os) => {\n      if (typeof _os.test === 'function') {\n        return _os.test(this);\n      }\n\n      if (_os.test instanceof Array) {\n        return _os.test.some(condition => this.test(condition));\n      }\n\n      throw new Error(\"Browser's test function is not valid\");\n    });\n\n    if (os) {\n      this.parsedResult.os = os.describe(this.getUA());\n    }\n\n    return this.parsedResult.os;\n  }\n\n  /**\n   * Get OS name\n   * @param {Boolean} [toLowerCase] return lower-cased value\n   * @return {String} name of the OS — macOS, Windows, Linux, etc.\n   */\n  getOSName(toLowerCase) {\n    const { name } = this.getOS();\n\n    if (toLowerCase) {\n      return String(name).toLowerCase() || '';\n    }\n\n    return name || '';\n  }\n\n  /**\n   * Get OS version\n   * @return {String} full version with dots ('10.11.12', '5.6', etc)\n   */\n  getOSVersion() {\n    return this.getOS().version;\n  }\n\n  /**\n   * Get parsed platform\n   * @return {{}}\n   */\n  getPlatform() {\n    if (this.parsedResult.platform) {\n      return this.parsedResult.platform;\n    }\n\n    return this.parsePlatform();\n  }\n\n  /**\n   * Get platform name\n   * @param {Boolean} [toLowerCase=false]\n   * @return {*}\n   */\n  getPlatformType(toLowerCase = false) {\n    const { type } = this.getPlatform();\n\n    if (toLowerCase) {\n      return String(type).toLowerCase() || '';\n    }\n\n    return type || '';\n  }\n\n  /**\n   * Get parsed platform\n   * @return {{}}\n   */\n  parsePlatform() {\n    this.parsedResult.platform = {};\n\n    const platform = Utils.find(platformParsersList, (_platform) => {\n      if (typeof _platform.test === 'function') {\n        return _platform.test(this);\n      }\n\n      if (_platform.test instanceof Array) {\n        return _platform.test.some(condition => this.test(condition));\n      }\n\n      throw new Error(\"Browser's test function is not valid\");\n    });\n\n    if (platform) {\n      this.parsedResult.platform = platform.describe(this.getUA());\n    }\n\n    return this.parsedResult.platform;\n  }\n\n  /**\n   * Get parsed engine\n   * @return {{}}\n   */\n  getEngine() {\n    if (this.parsedResult.engine) {\n      return this.parsedResult.engine;\n    }\n\n    return this.parseEngine();\n  }\n\n  /**\n   * Get engines's name\n   * @return {String} Engines's name or an empty string\n   *\n   * @public\n   */\n  getEngineName(toLowerCase) {\n    if (toLowerCase) {\n      return String(this.getEngine().name).toLowerCase() || '';\n    }\n    return this.getEngine().name || '';\n  }\n\n  /**\n   * Get parsed platform\n   * @return {{}}\n   */\n  parseEngine() {\n    this.parsedResult.engine = {};\n\n    const engine = Utils.find(enginesParsersList, (_engine) => {\n      if (typeof _engine.test === 'function') {\n        return _engine.test(this);\n      }\n\n      if (_engine.test instanceof Array) {\n        return _engine.test.some(condition => this.test(condition));\n      }\n\n      throw new Error(\"Browser's test function is not valid\");\n    });\n\n    if (engine) {\n      this.parsedResult.engine = engine.describe(this.getUA());\n    }\n\n    return this.parsedResult.engine;\n  }\n\n  /**\n   * Parse full information about the browser\n   * @returns {Parser}\n   */\n  parse() {\n    this.parseBrowser();\n    this.parseOS();\n    this.parsePlatform();\n    this.parseEngine();\n\n    return this;\n  }\n\n  /**\n   * Get parsed result\n   * @return {ParsedResult}\n   */\n  getResult() {\n    return Utils.assign({}, this.parsedResult);\n  }\n\n  /**\n   * Check if parsed browser matches certain conditions\n   *\n   * @param {Object} checkTree It's one or two layered object,\n   * which can include a platform or an OS on the first layer\n   * and should have browsers specs on the bottom-laying layer\n   *\n   * @returns {Boolean|undefined} Whether the browser satisfies the set conditions or not.\n   * Returns `undefined` when the browser is no described in the checkTree object.\n   *\n   * @example\n   * const browser = Bowser.getParser(window.navigator.userAgent);\n   * if (browser.satisfies({chrome: '>118.01.1322' }))\n   * // or with os\n   * if (browser.satisfies({windows: { chrome: '>118.01.1322' } }))\n   * // or with platforms\n   * if (browser.satisfies({desktop: { chrome: '>118.01.1322' } }))\n   */\n  satisfies(checkTree) {\n    const platformsAndOSes = {};\n    let platformsAndOSCounter = 0;\n    const browsers = {};\n    let browsersCounter = 0;\n\n    const allDefinitions = Object.keys(checkTree);\n\n    allDefinitions.forEach((key) => {\n      const currentDefinition = checkTree[key];\n      if (typeof currentDefinition === 'string') {\n        browsers[key] = currentDefinition;\n        browsersCounter += 1;\n      } else if (typeof currentDefinition === 'object') {\n        platformsAndOSes[key] = currentDefinition;\n        platformsAndOSCounter += 1;\n      }\n    });\n\n    if (platformsAndOSCounter > 0) {\n      const platformsAndOSNames = Object.keys(platformsAndOSes);\n      const OSMatchingDefinition = Utils.find(platformsAndOSNames, name => (this.isOS(name)));\n\n      if (OSMatchingDefinition) {\n        const osResult = this.satisfies(platformsAndOSes[OSMatchingDefinition]);\n\n        if (osResult !== void 0) {\n          return osResult;\n        }\n      }\n\n      const platformMatchingDefinition = Utils.find(\n        platformsAndOSNames,\n        name => (this.isPlatform(name)),\n      );\n      if (platformMatchingDefinition) {\n        const platformResult = this.satisfies(platformsAndOSes[platformMatchingDefinition]);\n\n        if (platformResult !== void 0) {\n          return platformResult;\n        }\n      }\n    }\n\n    if (browsersCounter > 0) {\n      const browserNames = Object.keys(browsers);\n      const matchingDefinition = Utils.find(browserNames, name => (this.isBrowser(name, true)));\n\n      if (matchingDefinition !== void 0) {\n        return this.compareVersion(browsers[matchingDefinition]);\n      }\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Check if the browser name equals the passed string\n   * @param browserName The string to compare with the browser name\n   * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n   * @returns {boolean}\n   */\n  isBrowser(browserName, includingAlias = false) {\n    const defaultBrowserName = this.getBrowserName().toLowerCase();\n    let browserNameLower = browserName.toLowerCase();\n    const alias = Utils.getBrowserTypeByAlias(browserNameLower);\n\n    if (includingAlias && alias) {\n      browserNameLower = alias.toLowerCase();\n    }\n    return browserNameLower === defaultBrowserName;\n  }\n\n  compareVersion(version) {\n    let expectedResults = [0];\n    let comparableVersion = version;\n    let isLoose = false;\n\n    const currentBrowserVersion = this.getBrowserVersion();\n\n    if (typeof currentBrowserVersion !== 'string') {\n      return void 0;\n    }\n\n    if (version[0] === '>' || version[0] === '<') {\n      comparableVersion = version.substr(1);\n      if (version[1] === '=') {\n        isLoose = true;\n        comparableVersion = version.substr(2);\n      } else {\n        expectedResults = [];\n      }\n      if (version[0] === '>') {\n        expectedResults.push(1);\n      } else {\n        expectedResults.push(-1);\n      }\n    } else if (version[0] === '=') {\n      comparableVersion = version.substr(1);\n    } else if (version[0] === '~') {\n      isLoose = true;\n      comparableVersion = version.substr(1);\n    }\n\n    return expectedResults.indexOf(\n      Utils.compareVersions(currentBrowserVersion, comparableVersion, isLoose),\n    ) > -1;\n  }\n\n  isOS(osName) {\n    return this.getOSName(true) === String(osName).toLowerCase();\n  }\n\n  isPlatform(platformType) {\n    return this.getPlatformType(true) === String(platformType).toLowerCase();\n  }\n\n  isEngine(engineName) {\n    return this.getEngineName(true) === String(engineName).toLowerCase();\n  }\n\n  /**\n   * Is anything? Check if the browser is called \"anything\",\n   * the OS called \"anything\" or the platform called \"anything\"\n   * @param {String} anything\n   * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n   * @returns {Boolean}\n   */\n  is(anything, includingAlias = false) {\n    return this.isBrowser(anything, includingAlias) || this.isOS(anything)\n      || this.isPlatform(anything);\n  }\n\n  /**\n   * Check if any of the given values satisfies this.is(anything)\n   * @param {String[]} anythings\n   * @returns {Boolean}\n   */\n  some(anythings = []) {\n    return anythings.some(anything => this.is(anything));\n  }\n}\n\nexport default Parser;\n","/*!\n * Bowser - a browser detector\n * https://github.com/lancedikson/bowser\n * MIT License | (c) Dustin Diaz 2012-2015\n * MIT License | (c) Denis Demchenko 2015-2019\n */\nimport Parser from './parser.js';\nimport {\n  BROWSER_MAP,\n  ENGINE_MAP,\n  OS_MAP,\n  PLATFORMS_MAP,\n} from './constants.js';\n\n/**\n * Bowser class.\n * Keep it simple as much as it can be.\n * It's supposed to work with collections of {@link Parser} instances\n * rather then solve one-instance problems.\n * All the one-instance stuff is located in Parser class.\n *\n * @class\n * @classdesc Bowser is a static object, that provides an API to the Parsers\n * @hideconstructor\n */\nclass Bowser {\n  /**\n   * Creates a {@link Parser} instance\n   *\n   * @param {String} UA UserAgent string\n   * @param {Boolean} [skipParsing=false] Will make the Parser postpone parsing until you ask it\n   * explicitly. Same as `skipParsing` for {@link Parser}.\n   * @returns {Parser}\n   * @throws {Error} when UA is not a String\n   *\n   * @example\n   * const parser = Bowser.getParser(window.navigator.userAgent);\n   * const result = parser.getResult();\n   */\n  static getParser(UA, skipParsing = false) {\n    if (typeof UA !== 'string') {\n      throw new Error('UserAgent should be a string');\n    }\n    return new Parser(UA, skipParsing);\n  }\n\n  /**\n   * Creates a {@link Parser} instance and runs {@link Parser.getResult} immediately\n   *\n   * @param UA\n   * @return {ParsedResult}\n   *\n   * @example\n   * const result = Bowser.parse(window.navigator.userAgent);\n   */\n  static parse(UA) {\n    return (new Parser(UA)).getResult();\n  }\n\n  static get BROWSER_MAP() {\n    return BROWSER_MAP;\n  }\n\n  static get ENGINE_MAP() {\n    return ENGINE_MAP;\n  }\n\n  static get OS_MAP() {\n    return OS_MAP;\n  }\n\n  static get PLATFORMS_MAP() {\n    return PLATFORMS_MAP;\n  }\n}\n\nexport default Bowser;\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n","const debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n","const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst createToken = (name, value, isGlobal) => {\n  // Replace all greedy whitespace to prevent regex dos issues. These regex are\n  // used internally via the safeRe object since all inputs in this library get\n  // normalized first to trim and collapse all extra whitespace. The original\n  // regexes are exported for userland consumption and lower level usage. A\n  // future breaking change could export the safer regex only with a note that\n  // all input should have extra whitespace removed.\n  const safe = value\n    .split('\\\\s*').join('\\\\s{0,1}')\n    .split('\\\\s+').join('\\\\s')\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n  safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*')\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n  if (!options) {\n    return emptyOpts\n  }\n\n  if (typeof options !== 'object') {\n    return looseOption\n  }\n\n  return options\n}\nmodule.exports = parseOptions\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers,\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n  constructor (version, options) {\n    options = parseOptions(options)\n\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n          version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    return (\n      compareIdentifiers(this.major, other.major) ||\n      compareIdentifiers(this.minor, other.minor) ||\n      compareIdentifiers(this.patch, other.patch)\n    )\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier, identifierBase) {\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier, identifierBase)\n        this.inc('pre', identifier, identifierBase)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier, identifierBase)\n        }\n        this.inc('pre', identifier, identifierBase)\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre': {\n        const base = Number(identifierBase) ? 1 : 0\n\n        if (!identifier && identifierBase === false) {\n          throw new Error('invalid increment argument: identifier is empty')\n        }\n\n        if (this.prerelease.length === 0) {\n          this.prerelease = [base]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            if (identifier === this.prerelease.join('.') && identifierBase === false) {\n              throw new Error('invalid increment argument: identifier already exists')\n            }\n            this.prerelease.push(base)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          let prerelease = [identifier, base]\n          if (identifierBase === false) {\n            prerelease = [identifier]\n          }\n          if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n            if (isNaN(this.prerelease[1])) {\n              this.prerelease = prerelease\n            }\n          } else {\n            this.prerelease = prerelease\n          }\n        }\n        break\n      }\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.raw = this.format()\n    if (this.build.length) {\n      this.raw += `+${this.build.join('.')}`\n    }\n    return this\n  }\n}\n\nmodule.exports = SemVer\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    if (!throwErrors) {\n      return null\n    }\n    throw er\n  }\n}\n\nmodule.exports = parse\n","const parse = require('./parse')\nconst valid = (version, options) => {\n  const v = parse(version, options)\n  return v ? v.version : null\n}\nmodule.exports = valid\n","const parse = require('./parse')\nconst clean = (version, options) => {\n  const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\nmodule.exports = clean\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n  if (typeof (options) === 'string') {\n    identifierBase = identifier\n    identifier = options\n    options = undefined\n  }\n\n  try {\n    return new SemVer(\n      version instanceof SemVer ? version.version : version,\n      options\n    ).inc(release, identifier, identifierBase).version\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = inc\n","const parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n  const v1 = parse(version1, null, true)\n  const v2 = parse(version2, null, true)\n  const comparison = v1.compare(v2)\n\n  if (comparison === 0) {\n    return null\n  }\n\n  const v1Higher = comparison > 0\n  const highVersion = v1Higher ? v1 : v2\n  const lowVersion = v1Higher ? v2 : v1\n  const highHasPre = !!highVersion.prerelease.length\n  const lowHasPre = !!lowVersion.prerelease.length\n\n  if (lowHasPre && !highHasPre) {\n    // Going from prerelease -> no prerelease requires some special casing\n\n    // If the low version has only a major, then it will always be a major\n    // Some examples:\n    // 1.0.0-1 -> 1.0.0\n    // 1.0.0-1 -> 1.1.1\n    // 1.0.0-1 -> 2.0.0\n    if (!lowVersion.patch && !lowVersion.minor) {\n      return 'major'\n    }\n\n    // Otherwise it can be determined by checking the high version\n\n    if (highVersion.patch) {\n      // anything higher than a patch bump would result in the wrong version\n      return 'patch'\n    }\n\n    if (highVersion.minor) {\n      // anything higher than a minor bump would result in the wrong version\n      return 'minor'\n    }\n\n    // bumping major/minor/patch all have same result\n    return 'major'\n  }\n\n  // add the `pre` prefix if we are going to a prerelease version\n  const prefix = highHasPre ? 'pre' : ''\n\n  if (v1.major !== v2.major) {\n    return prefix + 'major'\n  }\n\n  if (v1.minor !== v2.minor) {\n    return prefix + 'minor'\n  }\n\n  if (v1.patch !== v2.patch) {\n    return prefix + 'patch'\n  }\n\n  // high and low are preleases\n  return 'prerelease'\n}\n\nmodule.exports = diff\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n  const parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n  const versionA = new SemVer(a, loose)\n  const versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  let match = null\n  if (!options.rtl) {\n    match = version.match(re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    let next\n    while ((next = re[t.COERCERTL].exec(version)) &&\n        (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n            next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    re[t.COERCERTL].lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)\n}\nmodule.exports = coerce\n","'use strict'\nmodule.exports = function (Yallist) {\n  Yallist.prototype[Symbol.iterator] = function* () {\n    for (let walker = this.head; walker; walker = walker.next) {\n      yield walker.value\n    }\n  }\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n  var self = this\n  if (!(self instanceof Yallist)) {\n    self = new Yallist()\n  }\n\n  self.tail = null\n  self.head = null\n  self.length = 0\n\n  if (list && typeof list.forEach === 'function') {\n    list.forEach(function (item) {\n      self.push(item)\n    })\n  } else if (arguments.length > 0) {\n    for (var i = 0, l = arguments.length; i < l; i++) {\n      self.push(arguments[i])\n    }\n  }\n\n  return self\n}\n\nYallist.prototype.removeNode = function (node) {\n  if (node.list !== this) {\n    throw new Error('removing node which does not belong to this list')\n  }\n\n  var next = node.next\n  var prev = node.prev\n\n  if (next) {\n    next.prev = prev\n  }\n\n  if (prev) {\n    prev.next = next\n  }\n\n  if (node === this.head) {\n    this.head = next\n  }\n  if (node === this.tail) {\n    this.tail = prev\n  }\n\n  node.list.length--\n  node.next = null\n  node.prev = null\n  node.list = null\n\n  return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n  if (node === this.head) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var head = this.head\n  node.list = this\n  node.next = head\n  if (head) {\n    head.prev = node\n  }\n\n  this.head = node\n  if (!this.tail) {\n    this.tail = node\n  }\n  this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n  if (node === this.tail) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var tail = this.tail\n  node.list = this\n  node.prev = tail\n  if (tail) {\n    tail.next = node\n  }\n\n  this.tail = node\n  if (!this.head) {\n    this.head = node\n  }\n  this.length++\n}\n\nYallist.prototype.push = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    push(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.unshift = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    unshift(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.pop = function () {\n  if (!this.tail) {\n    return undefined\n  }\n\n  var res = this.tail.value\n  this.tail = this.tail.prev\n  if (this.tail) {\n    this.tail.next = null\n  } else {\n    this.head = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.shift = function () {\n  if (!this.head) {\n    return undefined\n  }\n\n  var res = this.head.value\n  this.head = this.head.next\n  if (this.head) {\n    this.head.prev = null\n  } else {\n    this.tail = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.head, i = 0; walker !== null; i++) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.next\n  }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.prev\n  }\n}\n\nYallist.prototype.get = function (n) {\n  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.next\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.getReverse = function (n) {\n  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.prev\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.head; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.next\n  }\n  return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.tail; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.prev\n  }\n  return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n  var acc\n  var walker = this.head\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.head) {\n    walker = this.head.next\n    acc = this.head.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = 0; walker !== null; i++) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.next\n  }\n\n  return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n  var acc\n  var walker = this.tail\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.tail) {\n    walker = this.tail.prev\n    acc = this.tail.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = this.length - 1; walker !== null; i--) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.prev\n  }\n\n  return acc\n}\n\nYallist.prototype.toArray = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.head; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.next\n  }\n  return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.tail; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.prev\n  }\n  return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n    walker = walker.next\n  }\n  for (; walker !== null && i < to; i++, walker = walker.next) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n    walker = walker.prev\n  }\n  for (; walker !== null && i > from; i--, walker = walker.prev) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n  if (start > this.length) {\n    start = this.length - 1\n  }\n  if (start < 0) {\n    start = this.length + start;\n  }\n\n  for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n    walker = walker.next\n  }\n\n  var ret = []\n  for (var i = 0; walker && i < deleteCount; i++) {\n    ret.push(walker.value)\n    walker = this.removeNode(walker)\n  }\n  if (walker === null) {\n    walker = this.tail\n  }\n\n  if (walker !== this.head && walker !== this.tail) {\n    walker = walker.prev\n  }\n\n  for (var i = 0; i < nodes.length; i++) {\n    walker = insert(this, walker, nodes[i])\n  }\n  return ret;\n}\n\nYallist.prototype.reverse = function () {\n  var head = this.head\n  var tail = this.tail\n  for (var walker = head; walker !== null; walker = walker.prev) {\n    var p = walker.prev\n    walker.prev = walker.next\n    walker.next = p\n  }\n  this.head = tail\n  this.tail = head\n  return this\n}\n\nfunction insert (self, node, value) {\n  var inserted = node === self.head ?\n    new Node(value, null, node, self) :\n    new Node(value, node, node.next, self)\n\n  if (inserted.next === null) {\n    self.tail = inserted\n  }\n  if (inserted.prev === null) {\n    self.head = inserted\n  }\n\n  self.length++\n\n  return inserted\n}\n\nfunction push (self, item) {\n  self.tail = new Node(item, self.tail, null, self)\n  if (!self.head) {\n    self.head = self.tail\n  }\n  self.length++\n}\n\nfunction unshift (self, item) {\n  self.head = new Node(item, null, self.head, self)\n  if (!self.tail) {\n    self.tail = self.head\n  }\n  self.length++\n}\n\nfunction Node (value, prev, next, list) {\n  if (!(this instanceof Node)) {\n    return new Node(value, prev, next, list)\n  }\n\n  this.list = list\n  this.value = value\n\n  if (prev) {\n    prev.next = this\n    this.prev = prev\n  } else {\n    this.prev = null\n  }\n\n  if (next) {\n    next.prev = this\n    this.next = next\n  } else {\n    this.next = null\n  }\n}\n\ntry {\n  // add if support for Symbol.iterator is present\n  require('./iterator.js')(Yallist)\n} catch (er) {}\n","'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest.  the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node.  This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n  constructor (options) {\n    if (typeof options === 'number')\n      options = { max: options }\n\n    if (!options)\n      options = {}\n\n    if (options.max && (typeof options.max !== 'number' || options.max < 0))\n      throw new TypeError('max must be a non-negative number')\n    // Kind of weird to have a default max of Infinity, but oh well.\n    const max = this[MAX] = options.max || Infinity\n\n    const lc = options.length || naiveLength\n    this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n    this[ALLOW_STALE] = options.stale || false\n    if (options.maxAge && typeof options.maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n    this[MAX_AGE] = options.maxAge || 0\n    this[DISPOSE] = options.dispose\n    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n    this.reset()\n  }\n\n  // resize the cache when the max changes.\n  set max (mL) {\n    if (typeof mL !== 'number' || mL < 0)\n      throw new TypeError('max must be a non-negative number')\n\n    this[MAX] = mL || Infinity\n    trim(this)\n  }\n  get max () {\n    return this[MAX]\n  }\n\n  set allowStale (allowStale) {\n    this[ALLOW_STALE] = !!allowStale\n  }\n  get allowStale () {\n    return this[ALLOW_STALE]\n  }\n\n  set maxAge (mA) {\n    if (typeof mA !== 'number')\n      throw new TypeError('maxAge must be a non-negative number')\n\n    this[MAX_AGE] = mA\n    trim(this)\n  }\n  get maxAge () {\n    return this[MAX_AGE]\n  }\n\n  // resize the cache when the lengthCalculator changes.\n  set lengthCalculator (lC) {\n    if (typeof lC !== 'function')\n      lC = naiveLength\n\n    if (lC !== this[LENGTH_CALCULATOR]) {\n      this[LENGTH_CALCULATOR] = lC\n      this[LENGTH] = 0\n      this[LRU_LIST].forEach(hit => {\n        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n        this[LENGTH] += hit.length\n      })\n    }\n    trim(this)\n  }\n  get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n  get length () { return this[LENGTH] }\n  get itemCount () { return this[LRU_LIST].length }\n\n  rforEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].tail; walker !== null;) {\n      const prev = walker.prev\n      forEachStep(this, fn, walker, thisp)\n      walker = prev\n    }\n  }\n\n  forEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].head; walker !== null;) {\n      const next = walker.next\n      forEachStep(this, fn, walker, thisp)\n      walker = next\n    }\n  }\n\n  keys () {\n    return this[LRU_LIST].toArray().map(k => k.key)\n  }\n\n  values () {\n    return this[LRU_LIST].toArray().map(k => k.value)\n  }\n\n  reset () {\n    if (this[DISPOSE] &&\n        this[LRU_LIST] &&\n        this[LRU_LIST].length) {\n      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n    }\n\n    this[CACHE] = new Map() // hash of items by key\n    this[LRU_LIST] = new Yallist() // list of items in order of use recency\n    this[LENGTH] = 0 // length of items in the list\n  }\n\n  dump () {\n    return this[LRU_LIST].map(hit =>\n      isStale(this, hit) ? false : {\n        k: hit.key,\n        v: hit.value,\n        e: hit.now + (hit.maxAge || 0)\n      }).toArray().filter(h => h)\n  }\n\n  dumpLru () {\n    return this[LRU_LIST]\n  }\n\n  set (key, value, maxAge) {\n    maxAge = maxAge || this[MAX_AGE]\n\n    if (maxAge && typeof maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n\n    const now = maxAge ? Date.now() : 0\n    const len = this[LENGTH_CALCULATOR](value, key)\n\n    if (this[CACHE].has(key)) {\n      if (len > this[MAX]) {\n        del(this, this[CACHE].get(key))\n        return false\n      }\n\n      const node = this[CACHE].get(key)\n      const item = node.value\n\n      // dispose of the old one before overwriting\n      // split out into 2 ifs for better coverage tracking\n      if (this[DISPOSE]) {\n        if (!this[NO_DISPOSE_ON_SET])\n          this[DISPOSE](key, item.value)\n      }\n\n      item.now = now\n      item.maxAge = maxAge\n      item.value = value\n      this[LENGTH] += len - item.length\n      item.length = len\n      this.get(key)\n      trim(this)\n      return true\n    }\n\n    const hit = new Entry(key, value, len, now, maxAge)\n\n    // oversized objects fall out of cache automatically.\n    if (hit.length > this[MAX]) {\n      if (this[DISPOSE])\n        this[DISPOSE](key, value)\n\n      return false\n    }\n\n    this[LENGTH] += hit.length\n    this[LRU_LIST].unshift(hit)\n    this[CACHE].set(key, this[LRU_LIST].head)\n    trim(this)\n    return true\n  }\n\n  has (key) {\n    if (!this[CACHE].has(key)) return false\n    const hit = this[CACHE].get(key).value\n    return !isStale(this, hit)\n  }\n\n  get (key) {\n    return get(this, key, true)\n  }\n\n  peek (key) {\n    return get(this, key, false)\n  }\n\n  pop () {\n    const node = this[LRU_LIST].tail\n    if (!node)\n      return null\n\n    del(this, node)\n    return node.value\n  }\n\n  del (key) {\n    del(this, this[CACHE].get(key))\n  }\n\n  load (arr) {\n    // reset the cache\n    this.reset()\n\n    const now = Date.now()\n    // A previous serialized cache has the most recent items first\n    for (let l = arr.length - 1; l >= 0; l--) {\n      const hit = arr[l]\n      const expiresAt = hit.e || 0\n      if (expiresAt === 0)\n        // the item was created without expiration in a non aged cache\n        this.set(hit.k, hit.v)\n      else {\n        const maxAge = expiresAt - now\n        // dont add already expired items\n        if (maxAge > 0) {\n          this.set(hit.k, hit.v, maxAge)\n        }\n      }\n    }\n  }\n\n  prune () {\n    this[CACHE].forEach((value, key) => get(this, key, false))\n  }\n}\n\nconst get = (self, key, doUse) => {\n  const node = self[CACHE].get(key)\n  if (node) {\n    const hit = node.value\n    if (isStale(self, hit)) {\n      del(self, node)\n      if (!self[ALLOW_STALE])\n        return undefined\n    } else {\n      if (doUse) {\n        if (self[UPDATE_AGE_ON_GET])\n          node.value.now = Date.now()\n        self[LRU_LIST].unshiftNode(node)\n      }\n    }\n    return hit.value\n  }\n}\n\nconst isStale = (self, hit) => {\n  if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n    return false\n\n  const diff = Date.now() - hit.now\n  return hit.maxAge ? diff > hit.maxAge\n    : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n  if (self[LENGTH] > self[MAX]) {\n    for (let walker = self[LRU_LIST].tail;\n      self[LENGTH] > self[MAX] && walker !== null;) {\n      // We know that we're about to delete this one, and also\n      // what the next least recently used key will be, so just\n      // go ahead and set it now.\n      const prev = walker.prev\n      del(self, walker)\n      walker = prev\n    }\n  }\n}\n\nconst del = (self, node) => {\n  if (node) {\n    const hit = node.value\n    if (self[DISPOSE])\n      self[DISPOSE](hit.key, hit.value)\n\n    self[LENGTH] -= hit.length\n    self[CACHE].delete(hit.key)\n    self[LRU_LIST].removeNode(node)\n  }\n}\n\nclass Entry {\n  constructor (key, value, length, now, maxAge) {\n    this.key = key\n    this.value = value\n    this.length = length\n    this.now = now\n    this.maxAge = maxAge || 0\n  }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n  let hit = node.value\n  if (isStale(self, hit)) {\n    del(self, node)\n    if (!self[ALLOW_STALE])\n      hit = undefined\n  }\n  if (hit)\n    fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n","// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    options = parseOptions(options)\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.format()\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First reduce all whitespace as much as possible so we do not have to rely\n    // on potentially slow regexes like \\s*. This is then stored and used for\n    // future error messages as well.\n    this.raw = range\n      .trim()\n      .split(/\\s+/)\n      .join(' ')\n\n    // First, split on ||\n    this.set = this.raw\n      .split('||')\n      // map the range to a 2d array of comparators\n      .map(r => this.parseRange(r))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n    }\n\n    // if we have any that are not the null set, throw out null sets.\n    if (this.set.length > 1) {\n      // keep the first one, in case they're all null sets\n      const first = this.set[0]\n      this.set = this.set.filter(c => !isNullSet(c[0]))\n      if (this.set.length === 0) {\n        this.set = [first]\n      } else if (this.set.length > 1) {\n        // if we have any that are *, then the range is just *\n        for (const c of this.set) {\n          if (c.length === 1 && isAny(c[0])) {\n            this.set = [c]\n            break\n          }\n        }\n      }\n    }\n\n    this.format()\n  }\n\n  format () {\n    this.range = this.set\n      .map((comps) => comps.join(' ').trim())\n      .join('||')\n      .trim()\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    // memoize range parsing for performance.\n    // this is a very hot path, and fully deterministic.\n    const memoOpts =\n      (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n      (this.options.loose && FLAG_LOOSE)\n    const memoKey = memoOpts + ':' + range\n    const cached = cache.get(memoKey)\n    if (cached) {\n      return cached\n    }\n\n    const loose = this.options.loose\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range)\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    let rangeList = range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      // >=0.0.0 is equivalent to *\n      .map(comp => replaceGTE0(comp, this.options))\n\n    if (loose) {\n      // in loose mode, throw out any that are not valid comparators\n      rangeList = rangeList.filter(comp => {\n        debug('loose invalid filter', comp, this.options)\n        return !!comp.match(re[t.COMPARATORLOOSE])\n      })\n    }\n    debug('range list', rangeList)\n\n    // if any comparators are the null set, then replace with JUST null set\n    // if more than one comparator, remove any * comparators\n    // also, don't include the same comparator more than once\n    const rangeMap = new Map()\n    const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n    for (const comp of comparators) {\n      if (isNullSet(comp)) {\n        return [comp]\n      }\n      rangeMap.set(comp.value, comp)\n    }\n    if (rangeMap.size > 1 && rangeMap.has('')) {\n      rangeMap.delete('')\n    }\n\n    const result = [...rangeMap.values()]\n    cache.set(memoKey, result)\n    return result\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n\nmodule.exports = Range\n\nconst LRU = require('lru-cache')\nconst cache = new LRU({ max: 1000 })\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  safeRe: re,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceTilde(c, options))\n    .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceCaret(c, options))\n    .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp\n    .split(/\\s+/)\n    .map((c) => replaceXRange(c, options))\n    .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0'\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp\n    .trim()\n    .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp\n    .trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr, tb) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n\n  constructor (comp, options) {\n    options = parseOptions(options)\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    comp = comp.trim().split(/\\s+/).join(' ')\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    options = parseOptions(options)\n\n    // Special cases where nothing can possibly be lower\n    if (options.includePrerelease &&\n      (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n      return false\n    }\n    if (!options.includePrerelease &&\n      (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n      return false\n    }\n\n    // Same direction increasing (> or >=)\n    if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n      return true\n    }\n    // Same direction decreasing (< or <=)\n    if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // same SemVer and both sides are inclusive (<= or >=)\n    if (\n      (this.semver.version === comp.semver.version) &&\n      this.operator.includes('=') && comp.operator.includes('=')) {\n      return true\n    }\n    // opposite directions less than\n    if (cmp(this.semver, '<', comp.semver, options) &&\n      this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // opposite directions greater than\n    if (cmp(this.semver, '>', comp.semver, options) &&\n      this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n      return true\n    }\n    return false\n  }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n  new Range(range, options).set\n    .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n  let max = null\n  let maxSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n  let min = null\n  let minSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n  range = new Range(range, loose)\n\n  let minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let setMin = null\n    comparators.forEach((comparator) => {\n      // Clone to avoid manipulating the comparator's semver object.\n      const compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!setMin || gt(compver, setMin)) {\n            setMin = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error(`Unexpected operation: ${comparator.operator}`)\n      }\n    })\n    if (setMin && (!minver || gt(minver, setMin))) {\n      minver = setMin\n    }\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\nmodule.exports = minVersion\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = validRange\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  let gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisfies the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let high = null\n    let low = null\n\n    comparators.forEach((comparator) => {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nmodule.exports = outside\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n  const set = []\n  let first = null\n  let prev = null\n  const v = versions.sort((a, b) => compare(a, b, options))\n  for (const version of v) {\n    const included = satisfies(version, range, options)\n    if (included) {\n      prev = version\n      if (!first) {\n        first = version\n      }\n    } else {\n      if (prev) {\n        set.push([first, prev])\n      }\n      prev = null\n      first = null\n    }\n  }\n  if (first) {\n    set.push([first, null])\n  }\n\n  const ranges = []\n  for (const [min, max] of set) {\n    if (min === max) {\n      ranges.push(min)\n    } else if (!max && min === v[0]) {\n      ranges.push('*')\n    } else if (!max) {\n      ranges.push(`>=${min}`)\n    } else if (min === v[0]) {\n      ranges.push(`<=${max}`)\n    } else {\n      ranges.push(`${min} - ${max}`)\n    }\n  }\n  const simplified = ranges.join(' || ')\n  const original = typeof range.raw === 'string' ? range.raw : String(range)\n  return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n//   some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n//   - If C is only the ANY comparator, return true\n//   - Else if in prerelease mode, return false\n//   - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n//   - if in prerelease mode, return true\n//   - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n//   - If GT, and EQ does not satisfy GT, return true (null set)\n//   - If LT, and EQ does not satisfy LT, return true (null set)\n//   - If EQ satisfies every C, return true\n//   - Else return false\n// - If GT\n//   - If GT.semver is lower than any > or >= comp in C, return false\n//   - If GT is >=, and GT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n//   - If LT.semver is greater than any < or <= comp in C, return false\n//   - If LT is <=, and LT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n  if (sub === dom) {\n    return true\n  }\n\n  sub = new Range(sub, options)\n  dom = new Range(dom, options)\n  let sawNonNull = false\n\n  OUTER: for (const simpleSub of sub.set) {\n    for (const simpleDom of dom.set) {\n      const isSub = simpleSubset(simpleSub, simpleDom, options)\n      sawNonNull = sawNonNull || isSub !== null\n      if (isSub) {\n        continue OUTER\n      }\n    }\n    // the null set is a subset of everything, but null simple ranges in\n    // a complex range should be ignored.  so if we saw a non-null range,\n    // then we know this isn't a subset, but if EVERY simple range was null,\n    // then it is a subset.\n    if (sawNonNull) {\n      return false\n    }\n  }\n  return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n  if (sub === dom) {\n    return true\n  }\n\n  if (sub.length === 1 && sub[0].semver === ANY) {\n    if (dom.length === 1 && dom[0].semver === ANY) {\n      return true\n    } else if (options.includePrerelease) {\n      sub = minimumVersionWithPreRelease\n    } else {\n      sub = minimumVersion\n    }\n  }\n\n  if (dom.length === 1 && dom[0].semver === ANY) {\n    if (options.includePrerelease) {\n      return true\n    } else {\n      dom = minimumVersion\n    }\n  }\n\n  const eqSet = new Set()\n  let gt, lt\n  for (const c of sub) {\n    if (c.operator === '>' || c.operator === '>=') {\n      gt = higherGT(gt, c, options)\n    } else if (c.operator === '<' || c.operator === '<=') {\n      lt = lowerLT(lt, c, options)\n    } else {\n      eqSet.add(c.semver)\n    }\n  }\n\n  if (eqSet.size > 1) {\n    return null\n  }\n\n  let gtltComp\n  if (gt && lt) {\n    gtltComp = compare(gt.semver, lt.semver, options)\n    if (gtltComp > 0) {\n      return null\n    } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n      return null\n    }\n  }\n\n  // will iterate one or zero times\n  for (const eq of eqSet) {\n    if (gt && !satisfies(eq, String(gt), options)) {\n      return null\n    }\n\n    if (lt && !satisfies(eq, String(lt), options)) {\n      return null\n    }\n\n    for (const c of dom) {\n      if (!satisfies(eq, String(c), options)) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  let higher, lower\n  let hasDomLT, hasDomGT\n  // if the subset has a prerelease, we need a comparator in the superset\n  // with the same tuple and a prerelease, or it's not a subset\n  let needDomLTPre = lt &&\n    !options.includePrerelease &&\n    lt.semver.prerelease.length ? lt.semver : false\n  let needDomGTPre = gt &&\n    !options.includePrerelease &&\n    gt.semver.prerelease.length ? gt.semver : false\n  // exception: <1.2.3-0 is the same as <1.2.3\n  if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n      lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n    needDomLTPre = false\n  }\n\n  for (const c of dom) {\n    hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n    hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n    if (gt) {\n      if (needDomGTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomGTPre.major &&\n            c.semver.minor === needDomGTPre.minor &&\n            c.semver.patch === needDomGTPre.patch) {\n          needDomGTPre = false\n        }\n      }\n      if (c.operator === '>' || c.operator === '>=') {\n        higher = higherGT(gt, c, options)\n        if (higher === c && higher !== gt) {\n          return false\n        }\n      } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n        return false\n      }\n    }\n    if (lt) {\n      if (needDomLTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomLTPre.major &&\n            c.semver.minor === needDomLTPre.minor &&\n            c.semver.patch === needDomLTPre.patch) {\n          needDomLTPre = false\n        }\n      }\n      if (c.operator === '<' || c.operator === '<=') {\n        lower = lowerLT(lt, c, options)\n        if (lower === c && lower !== lt) {\n          return false\n        }\n      } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n        return false\n      }\n    }\n    if (!c.operator && (lt || gt) && gtltComp !== 0) {\n      return false\n    }\n  }\n\n  // if there was a < or >, and nothing in the dom, then must be false\n  // UNLESS it was limited by another range in the other direction.\n  // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n  if (gt && hasDomLT && !lt && gtltComp !== 0) {\n    return false\n  }\n\n  if (lt && hasDomGT && !gt && gtltComp !== 0) {\n    return false\n  }\n\n  // we needed a prerelease range in a specific tuple, but didn't get one\n  // then this isn't a subset.  eg >=1.2.3-pre is not a subset of >=1.0.0,\n  // because it includes prereleases in the 1.2.3 tuple\n  if (needDomGTPre || needDomLTPre) {\n    return false\n  }\n\n  return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp > 0 ? a\n    : comp < 0 ? b\n    : b.operator === '>' && a.operator === '>=' ? b\n    : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp < 0 ? a\n    : comp > 0 ? b\n    : b.operator === '<' && a.operator === '<=' ? b\n    : a\n}\n\nmodule.exports = subset\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n  parse,\n  valid,\n  clean,\n  inc,\n  diff,\n  major,\n  minor,\n  patch,\n  prerelease,\n  compare,\n  rcompare,\n  compareLoose,\n  compareBuild,\n  sort,\n  rsort,\n  gt,\n  lt,\n  eq,\n  neq,\n  gte,\n  lte,\n  cmp,\n  coerce,\n  Comparator,\n  Range,\n  satisfies,\n  toComparators,\n  maxSatisfying,\n  minSatisfying,\n  minVersion,\n  validRange,\n  outside,\n  gtr,\n  ltr,\n  intersects,\n  simplifyRange,\n  subset,\n  SemVer,\n  re: internalRe.re,\n  src: internalRe.src,\n  tokens: internalRe.t,\n  SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n  RELEASE_TYPES: constants.RELEASE_TYPES,\n  compareIdentifiers: identifiers.compareIdentifiers,\n  rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","// @ts-ignore\nconst { settings } = document;\n\nconst userSettings = { ...settings };\n\nuserSettings.locale = \"de\";\n\n// NOTE: implement language / locale detection\nuserSettings.API_BASE_URL = `${userSettings.API_BASE_URL}`;\n\n// console.dir(userSettings);\n\nexport default userSettings;\n","import { defineStore } from \"pinia\";\n\ntype RGBColor = Array<number>;\n\ninterface State {\n  primaryColor: RGBColor;\n  playerVisible: boolean;\n  filterExpanded: boolean;\n  vpWidth: number;\n  vpHeight: number;\n}\n\nexport const useUiStore = defineStore(\"ui\", {\n  state: (): State => ({\n    primaryColor: [0, 0, 0],\n    playerVisible: false,\n    filterExpanded: false,\n    vpWidth: window.innerWidth,\n    vpHeight: window.innerHeight,\n  }),\n  actions: {\n    setPrimaryColor(value: [number, number, number]): void {\n      this.primaryColor = value;\n    },\n    setWindowSize(size: [number, number]): void {\n      this.vpWidth = size[0];\n      this.vpHeight = size[1];\n    },\n  },\n});\n","// import { computed } from \"vue\";\n// import { useWindowSize } from \"@vueuse/core\";\nimport { computed } from \"vue\";\nimport Bowser from \"bowser\";\nimport log from \"loglevel\";\nimport { coerce as semverCoerce } from \"semver\";\nimport { storeToRefs } from \"pinia\";\n\nimport settings from \"@/settings\";\nimport { useUiStore } from \"@/stores/ui\";\n\ntype AppVersion = {\n  major: number;\n  minor: number;\n  patch: number;\n};\n\nconst parseAppUA = (ua: string): null | AppVersion => {\n  if (!ua.toLowerCase().includes(\"obr-app-ios/\")) {\n    return null;\n  }\n  const semVer = semverCoerce(ua.substring(11));\n  if (!semVer) {\n    return null;\n  }\n  const { major, minor, patch } = semVer;\n  return { major, minor, patch };\n};\n\nconst parser = Bowser.getParser(window.navigator.userAgent);\nconst osName = parser.getOSName(true);\nconst browserName = parser.getBrowserName(true);\nconst browserPlatform = parser.getPlatformType(true);\n\nlog.debug(\"Device info\", { parser, osName, browserName, browserPlatform });\n\nconst useDevice = () => {\n  const isMobile = browserPlatform !== \"desktop\";\n  const isDesktop = browserPlatform === \"desktop\";\n  const isIos = osName === \"ios\";\n  const isAndroid = osName === \"android\";\n  const isSafari = browserName === \"safari\";\n  const isApp = settings.CLIENT_MODE === \"app\";\n  const appVersion = isApp ? parseAppUA(parser.getUA()) : null;\n  const isWeb = !isApp;\n\n  const { vpWidth, vpHeight } = storeToRefs(useUiStore());\n  const isSmallScreen = computed(() => {\n    return vpWidth.value <= 720;\n  });\n\n  return {\n    isMobile,\n    isDesktop,\n    isIos,\n    isAndroid,\n    isSafari,\n    isApp,\n    appVersion,\n    isWeb,\n    osName,\n    browserName,\n    uaParser: parser,\n    //\n    vpWidth,\n    vpHeight,\n    isSmallScreen,\n  };\n};\n\nexport { useDevice };\n","import { useNavigatorLanguage, useStorage } from \"@vueuse/core\";\nimport { defineStore } from \"pinia\";\n\nimport { useDevice } from \"@/composables/device\";\n\ninterface State {\n  darkMode: boolean;\n  baseVolume: number;\n  shuffleMode: boolean;\n  maxBandwidth: number;\n  locale: string;\n}\n\nconst getDefaultLanguage = () => {\n  const { language } = useNavigatorLanguage();\n  return language.value?.substring(0, 2) ?? \"de\";\n};\n\nconst getDefaultDarkMode = () => {\n  const { isApp } = useDevice();\n  return isApp;\n};\n\nexport const useSettingsStore = defineStore(\"settings\", {\n  state: (): State => ({\n    // @ts-ignore\n    darkMode: useStorage(\"settings/darkMode\", getDefaultDarkMode()),\n    // @ts-ignore\n    baseVolume: useStorage(\"settings/player/baseVolume\", 1),\n    // @ts-ignore\n    shuffleMode: useStorage(\"settings/player/shuffleMode\", false),\n    // @ts-ignore\n    maxBandwidth: useStorage(\"settings/stream/maxBandwidth\", 200000),\n    // @ts-ignore\n    locale: useStorage(\"settings/locale\", getDefaultLanguage()),\n  }),\n  getters: {\n    language(state) {\n      return state.locale;\n    },\n  },\n  actions: {\n    setDarkMode(value: boolean) {\n      this.darkMode = value;\n    },\n    setLocale(value: string) {\n      this.locale = value;\n    },\n    setBaseVolume(value: number) {\n      this.baseVolume = value;\n    },\n    setShuffleMode(value: boolean) {\n      this.shuffleMode = value;\n    },\n    toggleShuffleMode() {\n      this.shuffleMode = !this.shuffleMode;\n    },\n    setMaxBandwidth(value: number) {\n      this.maxBandwidth = value;\n    },\n    resetSettings() {\n      this.$reset();\n    },\n  },\n});\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\ntry {\n\tnull.error; // eslint-disable-line no-unused-expressions\n} catch (e) {\n\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\tvar errorProto = getProto(getProto(e));\n\tINTRINSICS['%Error.prototype%'] = errorProto;\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n    'default': Format.RFC3986,\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: Format.RFC1738,\n    RFC3986: Format.RFC3986\n};\n","'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    while (queue.length > 1) {\n        var item = queue.pop();\n        var obj = item.obj[item.prop];\n\n        if (isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    /* eslint no-param-reassign: 0 */\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (isArray(target)) {\n            target.push(source);\n        } else if (target && typeof target === 'object') {\n            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (isArray(target) && !isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (isArray(target) && isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n    var strWithoutPlus = str.replace(/\\+/g, ' ');\n    if (charset === 'iso-8859-1') {\n        // unescape never throws, no try...catch needed:\n        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n    }\n    // utf-8\n    try {\n        return decodeURIComponent(strWithoutPlus);\n    } catch (e) {\n        return strWithoutPlus;\n    }\n};\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = str;\n    if (typeof str === 'symbol') {\n        string = Symbol.prototype.toString.call(str);\n    } else if (typeof str !== 'string') {\n        string = String(str);\n    }\n\n    if (charset === 'iso-8859-1') {\n        return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n            return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n        });\n    }\n\n    var out = '';\n    for (var i = 0; i < string.length; ++i) {\n        var c = string.charCodeAt(i);\n\n        if (\n            c === 0x2D // -\n            || c === 0x2E // .\n            || c === 0x5F // _\n            || c === 0x7E // ~\n            || (c >= 0x30 && c <= 0x39) // 0-9\n            || (c >= 0x41 && c <= 0x5A) // a-z\n            || (c >= 0x61 && c <= 0x7A) // A-Z\n            || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n        ) {\n            out += string.charAt(i);\n            continue;\n        }\n\n        if (c < 0x80) {\n            out = out + hexTable[c];\n            continue;\n        }\n\n        if (c < 0x800) {\n            out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        if (c < 0xD800 || c >= 0xE000) {\n            out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        i += 1;\n        c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n        /* eslint operator-linebreak: [2, \"before\"] */\n        out += hexTable[0xF0 | (c >> 18)]\n            + hexTable[0x80 | ((c >> 12) & 0x3F)]\n            + hexTable[0x80 | ((c >> 6) & 0x3F)]\n            + hexTable[0x80 | (c & 0x3F)];\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    compactQueue(queue);\n\n    return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (!obj || typeof obj !== 'object') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n    return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n    if (isArray(val)) {\n        var mapped = [];\n        for (var i = 0; i < val.length; i += 1) {\n            mapped.push(fn(val[i]));\n        }\n        return mapped;\n    }\n    return fn(val);\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    combine: combine,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    maybeMap: maybeMap,\n    merge: merge\n};\n","'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    comma: 'comma',\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n    addQueryPrefix: false,\n    allowDots: false,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    delimiter: '&',\n    encode: true,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    format: defaultFormat,\n    formatter: formats.formatters[defaultFormat],\n    // deprecated\n    indices: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n    return typeof v === 'string'\n        || typeof v === 'number'\n        || typeof v === 'boolean'\n        || typeof v === 'symbol'\n        || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    commaRoundTrip,\n    strictNullHandling,\n    skipNulls,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    format,\n    formatter,\n    encodeValuesOnly,\n    charset,\n    sideChannel\n) {\n    var obj = object;\n\n    var tmpSc = sideChannel;\n    var step = 0;\n    var findFlag = false;\n    while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n        // Where object last appeared in the ref tree\n        var pos = tmpSc.get(object);\n        step += 1;\n        if (typeof pos !== 'undefined') {\n            if (pos === step) {\n                throw new RangeError('Cyclic object value');\n            } else {\n                findFlag = true; // Break while\n            }\n        }\n        if (typeof tmpSc.get(sentinel) === 'undefined') {\n            step = 0;\n        }\n    }\n\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        obj = utils.maybeMap(obj, function (value) {\n            if (value instanceof Date) {\n                return serializeDate(value);\n            }\n            return value;\n        });\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        // we need to join elements in\n        if (encodeValuesOnly && encoder) {\n            obj = utils.maybeMap(obj, encoder);\n        }\n        objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n    } else if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? prefix + '[]' : prefix;\n\n    for (var j = 0; j < objKeys.length; ++j) {\n        var key = objKeys[j];\n        var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n        if (skipNulls && value === null) {\n            continue;\n        }\n\n        var keyPrefix = isArray(obj)\n            ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, key) : adjustedPrefix\n            : adjustedPrefix + (allowDots ? '.' + key : '[' + key + ']');\n\n        sideChannel.set(object, step);\n        var valueSideChannel = getSideChannel();\n        valueSideChannel.set(sentinel, sideChannel);\n        pushToArray(values, stringify(\n            value,\n            keyPrefix,\n            generateArrayPrefix,\n            commaRoundTrip,\n            strictNullHandling,\n            skipNulls,\n            generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            format,\n            formatter,\n            encodeValuesOnly,\n            charset,\n            valueSideChannel\n        ));\n    }\n\n    return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var charset = opts.charset || defaults.charset;\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    var format = formats['default'];\n    if (typeof opts.format !== 'undefined') {\n        if (!has.call(formats.formatters, opts.format)) {\n            throw new TypeError('Unknown format option provided.');\n        }\n        format = opts.format;\n    }\n    var formatter = formats.formatters[format];\n\n    var filter = defaults.filter;\n    if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n        filter = opts.filter;\n    }\n\n    return {\n        addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n        allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n        encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n        encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n        encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n        filter: filter,\n        format: format,\n        formatter: formatter,\n        serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n        skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n        sort: typeof opts.sort === 'function' ? opts.sort : null,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = normalizeStringifyOptions(opts);\n\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var arrayFormat;\n    if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = opts.arrayFormat;\n    } else if (opts && 'indices' in opts) {\n        arrayFormat = opts.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = 'indices';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n    if (opts && 'commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n        throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n    }\n    var commaRoundTrip = generateArrayPrefix === 'comma' && opts && opts.commaRoundTrip;\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (options.sort) {\n        objKeys.sort(options.sort);\n    }\n\n    var sideChannel = getSideChannel();\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (options.skipNulls && obj[key] === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            commaRoundTrip,\n            options.strictNullHandling,\n            options.skipNulls,\n            options.encode ? options.encoder : null,\n            options.filter,\n            options.sort,\n            options.allowDots,\n            options.serializeDate,\n            options.format,\n            options.formatter,\n            options.encodeValuesOnly,\n            options.charset,\n            sideChannel\n        ));\n    }\n\n    var joined = keys.join(options.delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    if (options.charsetSentinel) {\n        if (options.charset === 'iso-8859-1') {\n            // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n            prefix += 'utf8=%26%2310003%3B&';\n        } else {\n            // encodeURIComponent('✓')\n            prefix += 'utf8=%E2%9C%93&';\n        }\n    }\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n    allowDots: false,\n    allowPrototypes: false,\n    allowSparse: false,\n    arrayLimit: 20,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    comma: false,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    ignoreQueryPrefix: false,\n    interpretNumericEntities: false,\n    parameterLimit: 1000,\n    parseArrays: true,\n    plainObjects: false,\n    strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n    return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n        return String.fromCharCode(parseInt(numberStr, 10));\n    });\n};\n\nvar parseArrayValue = function (val, options) {\n    if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n        return val.split(',');\n    }\n\n    return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = {};\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n    var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n    var i;\n\n    var charset = options.charset;\n    if (options.charsetSentinel) {\n        for (i = 0; i < parts.length; ++i) {\n            if (parts[i].indexOf('utf8=') === 0) {\n                if (parts[i] === charsetSentinel) {\n                    charset = 'utf-8';\n                } else if (parts[i] === isoSentinel) {\n                    charset = 'iso-8859-1';\n                }\n                skipIndex = i;\n                i = parts.length; // The eslint settings do not allow break;\n            }\n        }\n    }\n\n    for (i = 0; i < parts.length; ++i) {\n        if (i === skipIndex) {\n            continue;\n        }\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder, charset, 'key');\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n            val = utils.maybeMap(\n                parseArrayValue(part.slice(pos + 1), options),\n                function (encodedVal) {\n                    return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n                }\n            );\n        }\n\n        if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n            val = interpretNumericEntities(val);\n        }\n\n        if (part.indexOf('[]=') > -1) {\n            val = isArray(val) ? [val] : val;\n        }\n\n        if (has.call(obj, key)) {\n            obj[key] = utils.combine(obj[key], val);\n        } else {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n    var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            obj = [].concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var index = parseInt(cleanRoot, 10);\n            if (!options.parseArrays && cleanRoot === '') {\n                obj = { 0: leaf };\n            } else if (\n                !isNaN(index)\n                && root !== cleanRoot\n                && String(index) === cleanRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (cleanRoot !== '__proto__') {\n                obj[cleanRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = options.depth > 0 && brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, just add whatever is left\n\n    if (segment) {\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n    var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n    return {\n        allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n        allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n        allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n        arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n        decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n        delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n        // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n        depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n        interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n        parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n        parseArrays: opts.parseArrays !== false,\n        plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (str, opts) {\n    var options = normalizeParseOptions(opts);\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    if (options.allowSparse === true) {\n        return obj;\n    }\n\n    return utils.compact(obj);\n};\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n  if (toString.call(val) !== '[object Object]') {\n    return false;\n  }\n\n  var prototype = Object.getPrototypeOf(val);\n  return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return toString.call(val) === '[object URLSearchParams]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (isPlainObject(result[key]) && isPlainObject(val)) {\n      result[key] = merge(result[key], val);\n    } else if (isPlainObject(val)) {\n      result[key] = merge({}, val);\n    } else if (isArray(val)) {\n      result[key] = val.slice();\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isPlainObject: isPlainObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  extend: extend,\n  trim: trim,\n  stripBOM: stripBOM\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected,\n    synchronous: options ? options.synchronous : false,\n    runWhen: options ? options.runWhen : null\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n\n  error.request = request;\n  error.response = response;\n  error.isAxiosError = true;\n\n  error.toJSON = function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code,\n      status: this.response && this.response.status ? this.response.status : null\n    };\n  };\n  return error;\n};\n","'use strict';\n\nmodule.exports = {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n  if (baseURL && !isAbsoluteURL(requestedURL)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar transitionalDefaults = require('../defaults/transitional');\nvar Cancel = require('../cancel/Cancel');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n    var responseType = config.responseType;\n    var onCanceled;\n    function done() {\n      if (config.cancelToken) {\n        config.cancelToken.unsubscribe(onCanceled);\n      }\n\n      if (config.signal) {\n        config.signal.removeEventListener('abort', onCanceled);\n      }\n    }\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    var fullPath = buildFullPath(config.baseURL, config.url);\n    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?\n        request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n      var transitional = config.transitional || transitionalDefaults;\n      if (config.timeoutErrorMessage) {\n        timeoutErrorMessage = config.timeoutErrorMessage;\n      }\n      reject(createError(\n        timeoutErrorMessage,\n        config,\n        transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(config.withCredentials)) {\n      request.withCredentials = !!config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = config.responseType;\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken || config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = function(cancel) {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);\n        request.abort();\n        request = null;\n      };\n\n      config.cancelToken && config.cancelToken.subscribe(onCanceled);\n      if (config.signal) {\n        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    if (!requestData) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar enhanceError = require('../core/enhanceError');\nvar transitionalDefaults = require('./transitional');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('../adapters/xhr');\n  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = require('../adapters/http');\n  }\n  return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n  transitional: transitionalDefaults,\n\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n      setContentTypeIfUnset(headers, 'application/json');\n      return stringifySafely(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    var transitional = this.transitional || defaults.transitional;\n    var silentJSONParsing = transitional && transitional.silentJSONParsing;\n    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw enhanceError(e, this, 'E_JSON_PARSE');\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*'\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  var context = this || defaults;\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(context, data, headers);\n  });\n\n  return data;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new Cancel('canceled');\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  function getMergedValue(target, source) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge(target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(prop) {\n    if (prop in config2) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  var mergeMap = {\n    'url': valueFromConfig2,\n    'method': valueFromConfig2,\n    'data': valueFromConfig2,\n    'baseURL': defaultToConfig2,\n    'transformRequest': defaultToConfig2,\n    'transformResponse': defaultToConfig2,\n    'paramsSerializer': defaultToConfig2,\n    'timeout': defaultToConfig2,\n    'timeoutMessage': defaultToConfig2,\n    'withCredentials': defaultToConfig2,\n    'adapter': defaultToConfig2,\n    'responseType': defaultToConfig2,\n    'xsrfCookieName': defaultToConfig2,\n    'xsrfHeaderName': defaultToConfig2,\n    'onUploadProgress': defaultToConfig2,\n    'onDownloadProgress': defaultToConfig2,\n    'decompress': defaultToConfig2,\n    'maxContentLength': defaultToConfig2,\n    'maxBodyLength': defaultToConfig2,\n    'transport': defaultToConfig2,\n    'httpAgent': defaultToConfig2,\n    'httpsAgent': defaultToConfig2,\n    'cancelToken': defaultToConfig2,\n    'socketPath': defaultToConfig2,\n    'responseEncoding': defaultToConfig2,\n    'validateStatus': mergeDirectKeys\n  };\n\n  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n    var merge = mergeMap[prop] || mergeDeepProperties;\n    var configValue = merge(prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n};\n","module.exports = {\n  \"version\": \"0.26.1\"\n};","'use strict';\n\nvar VERSION = require('../env/data').version;\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return function(value, opt, opts) {\n    if (validator === false) {\n      throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new TypeError('options must be an object');\n  }\n  var keys = Object.keys(options);\n  var i = keys.length;\n  while (i-- > 0) {\n    var opt = keys[i];\n    var validator = schema[opt];\n    if (validator) {\n      var value = options[opt];\n      var result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new TypeError('option ' + opt + ' must be ' + result);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw Error('Unknown option ' + opt);\n    }\n  }\n}\n\nmodule.exports = {\n  assertOptions: assertOptions,\n  validators: validators\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof configOrUrl === 'string') {\n    config = config || {};\n    config.url = configOrUrl;\n  } else {\n    config = configOrUrl || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n\n  // Set config.method\n  if (config.method) {\n    config.method = config.method.toLowerCase();\n  } else if (this.defaults.method) {\n    config.method = this.defaults.method.toLowerCase();\n  } else {\n    config.method = 'get';\n  }\n\n  var transitional = config.transitional;\n\n  if (transitional !== undefined) {\n    validator.assertOptions(transitional, {\n      silentJSONParsing: validators.transitional(validators.boolean),\n      forcedJSONParsing: validators.transitional(validators.boolean),\n      clarifyTimeoutError: validators.transitional(validators.boolean)\n    }, false);\n  }\n\n  // filter out skipped interceptors\n  var requestInterceptorChain = [];\n  var synchronousRequestInterceptors = true;\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n      return;\n    }\n\n    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var responseInterceptorChain = [];\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var promise;\n\n  if (!synchronousRequestInterceptors) {\n    var chain = [dispatchRequest, undefined];\n\n    Array.prototype.unshift.apply(chain, requestInterceptorChain);\n    chain = chain.concat(responseInterceptorChain);\n\n    promise = Promise.resolve(config);\n    while (chain.length) {\n      promise = promise.then(chain.shift(), chain.shift());\n    }\n\n    return promise;\n  }\n\n\n  var newConfig = config;\n  while (requestInterceptorChain.length) {\n    var onFulfilled = requestInterceptorChain.shift();\n    var onRejected = requestInterceptorChain.shift();\n    try {\n      newConfig = onFulfilled(newConfig);\n    } catch (error) {\n      onRejected(error);\n      break;\n    }\n  }\n\n  try {\n    promise = dispatchRequest(newConfig);\n  } catch (error) {\n    return Promise.reject(error);\n  }\n\n  while (responseInterceptorChain.length) {\n    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method: method,\n      url: url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(mergeConfig(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n\n  // eslint-disable-next-line func-names\n  this.promise.then(function(cancel) {\n    if (!token._listeners) return;\n\n    var i;\n    var l = token._listeners.length;\n\n    for (i = 0; i < l; i++) {\n      token._listeners[i](cancel);\n    }\n    token._listeners = null;\n  });\n\n  // eslint-disable-next-line func-names\n  this.promise.then = function(onfulfilled) {\n    var _resolve;\n    // eslint-disable-next-line func-names\n    var promise = new Promise(function(resolve) {\n      token.subscribe(resolve);\n      _resolve = resolve;\n    }).then(onfulfilled);\n\n    promise.cancel = function reject() {\n      token.unsubscribe(_resolve);\n    };\n\n    return promise;\n  };\n\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n  if (this.reason) {\n    listener(this.reason);\n    return;\n  }\n\n  if (this._listeners) {\n    this._listeners.push(listener);\n  } else {\n    this._listeners = [listener];\n  }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n  if (!this._listeners) {\n    return;\n  }\n  var index = this._listeners.indexOf(listener);\n  if (index !== -1) {\n    this._listeners.splice(index, 1);\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","module.exports = require('./lib/axios');","'use strict';\n\nconst denyList = new Set([\n\t'ENOTFOUND',\n\t'ENETUNREACH',\n\n\t// SSL errors from https://github.com/nodejs/node/blob/fc8e3e2cdc521978351de257030db0076d79e0ab/src/crypto/crypto_common.cc#L301-L328\n\t'UNABLE_TO_GET_ISSUER_CERT',\n\t'UNABLE_TO_GET_CRL',\n\t'UNABLE_TO_DECRYPT_CERT_SIGNATURE',\n\t'UNABLE_TO_DECRYPT_CRL_SIGNATURE',\n\t'UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY',\n\t'CERT_SIGNATURE_FAILURE',\n\t'CRL_SIGNATURE_FAILURE',\n\t'CERT_NOT_YET_VALID',\n\t'CERT_HAS_EXPIRED',\n\t'CRL_NOT_YET_VALID',\n\t'CRL_HAS_EXPIRED',\n\t'ERROR_IN_CERT_NOT_BEFORE_FIELD',\n\t'ERROR_IN_CERT_NOT_AFTER_FIELD',\n\t'ERROR_IN_CRL_LAST_UPDATE_FIELD',\n\t'ERROR_IN_CRL_NEXT_UPDATE_FIELD',\n\t'OUT_OF_MEM',\n\t'DEPTH_ZERO_SELF_SIGNED_CERT',\n\t'SELF_SIGNED_CERT_IN_CHAIN',\n\t'UNABLE_TO_GET_ISSUER_CERT_LOCALLY',\n\t'UNABLE_TO_VERIFY_LEAF_SIGNATURE',\n\t'CERT_CHAIN_TOO_LONG',\n\t'CERT_REVOKED',\n\t'INVALID_CA',\n\t'PATH_LENGTH_EXCEEDED',\n\t'INVALID_PURPOSE',\n\t'CERT_UNTRUSTED',\n\t'CERT_REJECTED',\n\t'HOSTNAME_MISMATCH'\n]);\n\n// TODO: Use `error?.code` when targeting Node.js 14\nmodule.exports = error => !denyList.has(error && error.code);\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport isRetryAllowed from 'is-retry-allowed';\nexport var namespace = 'axios-retry';\n/**\n * @param  {Error}  error\n * @return {boolean}\n */\n\nexport function isNetworkError(error) {\n  return !error.response && Boolean(error.code) && // Prevents retrying cancelled requests\n  error.code !== 'ECONNABORTED' && // Prevents retrying timed out requests\n  isRetryAllowed(error); // Prevents retrying unsafe errors\n}\nvar SAFE_HTTP_METHODS = ['get', 'head', 'options'];\nvar IDEMPOTENT_HTTP_METHODS = SAFE_HTTP_METHODS.concat(['put', 'delete']);\n/**\n * @param  {Error}  error\n * @return {boolean}\n */\n\nexport function isRetryableError(error) {\n  return error.code !== 'ECONNABORTED' && (!error.response || error.response.status >= 500 && error.response.status <= 599);\n}\n/**\n * @param  {Error}  error\n * @return {boolean}\n */\n\nexport function isSafeRequestError(error) {\n  if (!error.config) {\n    // Cannot determine if the request can be retried\n    return false;\n  }\n\n  return isRetryableError(error) && SAFE_HTTP_METHODS.indexOf(error.config.method) !== -1;\n}\n/**\n * @param  {Error}  error\n * @return {boolean}\n */\n\nexport function isIdempotentRequestError(error) {\n  if (!error.config) {\n    // Cannot determine if the request can be retried\n    return false;\n  }\n\n  return isRetryableError(error) && IDEMPOTENT_HTTP_METHODS.indexOf(error.config.method) !== -1;\n}\n/**\n * @param  {Error}  error\n * @return {boolean}\n */\n\nexport function isNetworkOrIdempotentRequestError(error) {\n  return isNetworkError(error) || isIdempotentRequestError(error);\n}\n/**\n * @return {number} - delay in milliseconds, always 0\n */\n\nfunction noDelay() {\n  return 0;\n}\n/**\n * @param  {number} [retryNumber=0]\n * @return {number} - delay in milliseconds\n */\n\n\nexport function exponentialDelay() {\n  var retryNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n  var delay = Math.pow(2, retryNumber) * 100;\n  var randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay\n\n  return delay + randomSum;\n}\n/**\n * Initializes and returns the retry state for the given request/config\n * @param  {AxiosRequestConfig} config\n * @return {Object}\n */\n\nfunction getCurrentState(config) {\n  var currentState = config[namespace] || {};\n  currentState.retryCount = currentState.retryCount || 0;\n  config[namespace] = currentState;\n  return currentState;\n}\n/**\n * Returns the axios-retry options for the current request\n * @param  {AxiosRequestConfig} config\n * @param  {AxiosRetryConfig} defaultOptions\n * @return {AxiosRetryConfig}\n */\n\n\nfunction getRequestOptions(config, defaultOptions) {\n  return _objectSpread(_objectSpread({}, defaultOptions), config[namespace]);\n}\n/**\n * @param  {Axios} axios\n * @param  {AxiosRequestConfig} config\n */\n\n\nfunction fixConfig(axios, config) {\n  if (axios.defaults.agent === config.agent) {\n    delete config.agent;\n  }\n\n  if (axios.defaults.httpAgent === config.httpAgent) {\n    delete config.httpAgent;\n  }\n\n  if (axios.defaults.httpsAgent === config.httpsAgent) {\n    delete config.httpsAgent;\n  }\n}\n/**\n * Checks retryCondition if request can be retried. Handles it's retruning value or Promise.\n * @param  {number} retries\n * @param  {Function} retryCondition\n * @param  {Object} currentState\n * @param  {Error} error\n * @return {boolean}\n */\n\n\nfunction shouldRetry(_x, _x2, _x3, _x4) {\n  return _shouldRetry.apply(this, arguments);\n}\n/**\n * Adds response interceptors to an axios instance to retry requests failed due to network issues\n *\n * @example\n *\n * import axios from 'axios';\n *\n * axiosRetry(axios, { retries: 3 });\n *\n * axios.get('http://example.com/test') // The first request fails and the second returns 'ok'\n *   .then(result => {\n *     result.data; // 'ok'\n *   });\n *\n * // Exponential back-off retry delay between requests\n * axiosRetry(axios, { retryDelay : axiosRetry.exponentialDelay});\n *\n * // Custom retry delay\n * axiosRetry(axios, { retryDelay : (retryCount) => {\n *   return retryCount * 1000;\n * }});\n *\n * // Also works with custom axios instances\n * const client = axios.create({ baseURL: 'http://example.com' });\n * axiosRetry(client, { retries: 3 });\n *\n * client.get('/test') // The first request fails and the second returns 'ok'\n *   .then(result => {\n *     result.data; // 'ok'\n *   });\n *\n * // Allows request-specific configuration\n * client\n *   .get('/test', {\n *     'axios-retry': {\n *       retries: 0\n *     }\n *   })\n *   .catch(error => { // The first request fails\n *     error !== undefined\n *   });\n *\n * @param {Axios} axios An axios instance (the axios object or one created from axios.create)\n * @param {Object} [defaultOptions]\n * @param {number} [defaultOptions.retries=3] Number of retries\n * @param {boolean} [defaultOptions.shouldResetTimeout=false]\n *        Defines if the timeout should be reset between retries\n * @param {Function} [defaultOptions.retryCondition=isNetworkOrIdempotentRequestError]\n *        A function to determine if the error can be retried\n * @param {Function} [defaultOptions.retryDelay=noDelay]\n *        A function to determine the delay between retry requests\n * @param {Function} [defaultOptions.onRetry=()=>{}]\n *        A function to get notified when a retry occurs\n */\n\n\nfunction _shouldRetry() {\n  _shouldRetry = _asyncToGenerator(function* (retries, retryCondition, currentState, error) {\n    var shouldRetryOrPromise = currentState.retryCount < retries && retryCondition(error); // This could be a promise\n\n    if (typeof shouldRetryOrPromise === 'object') {\n      try {\n        var shouldRetryPromiseResult = yield shouldRetryOrPromise; // keep return true unless shouldRetryPromiseResult return false for compatibility\n\n        return shouldRetryPromiseResult !== false;\n      } catch (_err) {\n        return false;\n      }\n    }\n\n    return shouldRetryOrPromise;\n  });\n  return _shouldRetry.apply(this, arguments);\n}\n\nexport default function axiosRetry(axios, defaultOptions) {\n  axios.interceptors.request.use(config => {\n    var currentState = getCurrentState(config);\n    currentState.lastRequestTime = Date.now();\n    return config;\n  });\n  axios.interceptors.response.use(null, /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(function* (error) {\n      var {\n        config\n      } = error; // If we have no information to retry the request\n\n      if (!config) {\n        return Promise.reject(error);\n      }\n\n      var {\n        retries = 3,\n        retryCondition = isNetworkOrIdempotentRequestError,\n        retryDelay = noDelay,\n        shouldResetTimeout = false,\n        onRetry = () => {}\n      } = getRequestOptions(config, defaultOptions);\n      var currentState = getCurrentState(config);\n\n      if (yield shouldRetry(retries, retryCondition, currentState, error)) {\n        currentState.retryCount += 1;\n        var delay = retryDelay(currentState.retryCount, error); // Axios fails merging this configuration to the default configuration because it has an issue\n        // with circular structures: https://github.com/mzabriskie/axios/issues/370\n\n        fixConfig(axios, config);\n\n        if (!shouldResetTimeout && config.timeout && currentState.lastRequestTime) {\n          var lastRequestDuration = Date.now() - currentState.lastRequestTime;\n          var timeout = config.timeout - lastRequestDuration - delay;\n\n          if (timeout <= 0) {\n            return Promise.reject(error);\n          }\n\n          config.timeout = timeout;\n        }\n\n        config.transformRequest = [data => data];\n        onRetry(currentState.retryCount, error, config);\n        return new Promise(resolve => setTimeout(() => resolve(axios(config)), delay));\n      }\n\n      return Promise.reject(error);\n    });\n\n    return function (_x5) {\n      return _ref.apply(this, arguments);\n    };\n  }());\n} // Compatibility with CommonJS\n\naxiosRetry.isNetworkError = isNetworkError;\naxiosRetry.isSafeRequestError = isSafeRequestError;\naxiosRetry.isIdempotentRequestError = isIdempotentRequestError;\naxiosRetry.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError;\naxiosRetry.exponentialDelay = exponentialDelay;\naxiosRetry.isRetryableError = isRetryableError;\n//# sourceMappingURL=index.js.map","import qs from \"qs\";\nimport axios from \"axios\";\nimport axiosRetry from \"axios-retry\";\n\naxios.defaults.xsrfHeaderName = \"X-CSRFTOKEN\";\naxios.defaults.xsrfCookieName = \"csrftoken\";\naxios.defaults.withCredentials = true;\n\n// const APIClient = applyConverters(axios.create({\n//   timeout: 5000,\n//   headers: {\n//     'X-Requested-With': 'XMLHttpRequest',\n//   },\n// }));\n\nconst APIClient = axios.create({\n  timeout: 20000,\n  headers: {\n    \"X-Requested-With\": \"XMLHttpRequest\",\n    \"Accept-Language\": \"\",\n  },\n});\n\nconst paramsSerializer = (params: any) => {\n  return qs.stringify(params);\n};\n\nAPIClient.interceptors.response.use(\n  (response) => response,\n  (error) => {\n    // if (error.code > 499) {\n    //   notify({\n    //     level: \"error\",\n    //     ttl: 5,\n    //     body: `${error}`,\n    //   });\n    // }\n    throw error;\n  }\n);\n\n// NOTE: check for possible implications\naxiosRetry(APIClient, {\n  retries: 10,\n  retryCondition: (e) => {\n    // extend default behavior to include 429\n    return e.response?.status === 429 || axiosRetry.isNetworkOrIdempotentRequestError(e);\n  },\n  retryDelay: (count, e) => {\n    // handle rate limit\n    if (e.response?.status === 429) {\n      const retryAfter = e.response.headers[\"retry-after\"];\n      if (Number.isInteger(parseInt(retryAfter))) {\n        return parseInt(retryAfter) * 1000 + 1000;\n      }\n    }\n    // built-in back-off delay\n    return axiosRetry.exponentialDelay(count);\n  },\n});\n\nexport { APIClient, paramsSerializer };\n","import { computed } from \"vue\";\nimport { useStorage } from \"@vueuse/core\";\n\nimport settings from \"@/settings\";\n\nconst useAPIBaseUrl = () => {\n  const locale = useStorage(\"settings/locale\", \"en\");\n  const prefix = computed(() => (locale.value === \"en\" ? \"\" : `/${locale.value}`));\n  const APIBaseUrl = computed(() => {\n    /*\n    NOTE: review behaviour:\n          curl 'https://openbroadcast.ch/discover/playlists/' \\\n               -H 'accept-language: de,en-US;q=0.9,en;q=0.8'\n    */\n    /*\n    if (settings.API_BASE_URL.substring(0, 4) == \"/de/\") {\n      return settings.API_BASE_URL;\n    }\n    */\n    return `${prefix.value}${settings.API_BASE_URL}`;\n  });\n  return {\n    APIBaseUrl,\n  };\n};\n\nexport { useAPIBaseUrl };\n","import { APIClient } from \"@/api/client\";\nimport { useAPIBaseUrl } from \"@/composables/api\";\nimport type { AddressCountries } from \"@/typings\";\n\nconst { APIBaseUrl } = useAPIBaseUrl();\n\n// const ACCOUNT_ENDPOINT = `${settings.API_BASE_URL}account/`;\nconst ACCOUNT_ENDPOINT = `${APIBaseUrl.value}account/`;\n\nasync function login(email: string, password: string) {\n  const url = `${ACCOUNT_ENDPOINT}login/`;\n  const payload = {\n    email,\n    password,\n  };\n  const response = await APIClient.post(url, payload);\n  return response.data;\n}\n\nasync function logout() {\n  const url = `${ACCOUNT_ENDPOINT}logout/`;\n  const response = await APIClient.post(url);\n  return response.data;\n}\n\nasync function checkLoginEmail(email: string) {\n  const url = `${ACCOUNT_ENDPOINT}send-email-login/?email=${encodeURIComponent(email)}`;\n  const response = await APIClient.get(url);\n  return response.data;\n}\n\nasync function sendLoginEmail(email: string) {\n  const url = `${ACCOUNT_ENDPOINT}send-email-login/`;\n  const payload = {\n    email,\n  };\n  const response = await APIClient.post(url, payload);\n  return response.data;\n}\n\nasync function loginByToken(email: string, token: string) {\n  const url = `${ACCOUNT_ENDPOINT}token-login/`;\n  const payload = {\n    email,\n    token,\n  };\n  const response = await APIClient.post(url, payload);\n  // NOTE: maybe we should return the same data for\n  //       all login requests.\n  return {\n    created: response.status === 201,\n    user: response.data,\n  };\n}\n\nasync function getSignedLoginCredentials() {\n  const url = `${ACCOUNT_ENDPOINT}signed-login-credentials/`;\n  const response = await APIClient.post(url);\n  return response.data;\n}\n\nasync function loginBySignedEmail(signedEmail: string) {\n  const url = `${ACCOUNT_ENDPOINT}signed-email-login/`;\n  const payload = {\n    signedEmail,\n  };\n  const response = await APIClient.post(url, payload);\n  return response.data;\n}\n\nasync function loginByAppleId(idToken: string, authorizationCode: string, profile: object) {\n  const url = `${ACCOUNT_ENDPOINT}apple-id-login/`;\n  const payload = {\n    idToken,\n    authorizationCode,\n    profile,\n  };\n  const response = await APIClient.post(url, payload);\n  // NOTE: maybe we should return the same data for\n  //       all login requests.\n  return {\n    created: response.status === 201,\n    user: response.data,\n  };\n}\n\nasync function loginByGoogleIdToken(idToken: string) {\n  const url = `${ACCOUNT_ENDPOINT}google-id-token-login/`;\n  const payload = {\n    idToken,\n  };\n  const response = await APIClient.post(url, payload);\n  // NOTE: maybe we should return the same data for\n  //       all login requests.\n  return {\n    created: response.status === 201,\n    user: response.data,\n  };\n}\n\nasync function loginByGoogleOneTap(credential: string) {\n  const url = `${ACCOUNT_ENDPOINT}google-one-tap-login/`;\n  const payload = {\n    credential,\n  };\n  const response = await APIClient.post(url, payload);\n  // NOTE: maybe we should return the same data for\n  //       all login requests.\n  return {\n    created: response.status === 201,\n    user: response.data,\n  };\n}\n\nasync function getUser() {\n  const url = `${ACCOUNT_ENDPOINT}users/me/?expand=settings,subscription,address,donations`;\n  const response = await APIClient.get(url);\n  return response.data;\n}\n\nasync function getSubscription() {\n  const url = `${ACCOUNT_ENDPOINT}users/me/?fields=subscription&expand=subscription`;\n  const response = await APIClient.get(url);\n  return response.data?.subscription;\n}\n\n// async function refreshCredentials() {\n//   const url = `${ACCOUNT_ENDPOINT}refresh-credentials/`;\n//   const response = await APIClient.get(url);\n//   return response.data;\n// }\n\nasync function updateUser(payload: any) {\n  const url = `${ACCOUNT_ENDPOINT}users/me/`;\n  const response = await APIClient.patch(url, payload);\n  return response.data;\n}\n\nasync function updateEmail(email: string) {\n  const url = `${ACCOUNT_ENDPOINT}email/`;\n  const payload = {\n    email,\n  };\n  const response = await APIClient.post(url, payload);\n  return response.data?.subscription;\n}\n\nasync function updatePassword(password: string) {\n  const url = `${ACCOUNT_ENDPOINT}password/`;\n  const payload = {\n    password,\n  };\n  const response = await APIClient.post(url, payload);\n  return response.data?.subscription;\n}\n\nasync function updateAddress(payload: any) {\n  const url = `${ACCOUNT_ENDPOINT}address/`;\n  const response = await APIClient.patch(url, payload);\n  return response.data;\n}\n\nasync function updateSettings(payload: any) {\n  const url = `${ACCOUNT_ENDPOINT}settings/`;\n  const response = await APIClient.patch(url, payload);\n  return response.data;\n}\n\nasync function getSocialBackends() {\n  const url = `${ACCOUNT_ENDPOINT}social-backends/`;\n  const response = await APIClient.get(url);\n  return response.data;\n}\n\nasync function disconnectSocialBackend(provider: string, uid: string) {\n  const url = `${ACCOUNT_ENDPOINT}social-backends/${provider}/${uid}/`;\n  const response = await APIClient.delete(url);\n  return response.data;\n}\n\nasync function getAddressCountries() {\n  const url = `${ACCOUNT_ENDPOINT}address-countries/`;\n  const response = await APIClient.get<AddressCountries[]>(url);\n  return response.data;\n}\n\nexport {\n  checkLoginEmail,\n  disconnectSocialBackend,\n  //\n  getAddressCountries,\n  getSignedLoginCredentials,\n  getSocialBackends,\n  getSubscription,\n  getUser,\n  login,\n  loginByAppleId,\n  loginByGoogleIdToken,\n  loginByGoogleOneTap,\n  loginBySignedEmail,\n  loginByToken,\n  logout,\n  sendLoginEmail,\n  updateAddress,\n  updateEmail,\n  updatePassword,\n  updateSettings,\n  // refreshCredentials,\n  updateUser,\n};\n","import { computed } from \"vue\";\nimport { storeToRefs } from \"pinia\";\n\nimport { useAccountStore } from \"@/stores/account\";\n\nconst useAccount = () => {\n  const { user, isNew, subscription, address, settings } = storeToRefs(useAccountStore());\n  const isStaff = computed(() => !!user.value?.isStaff);\n  const isAdmin = computed(() => !!user.value?.isAdmin);\n  // for unified handling we also pass along store actions here\n  const {\n    loginUser,\n    logoutUser,\n    loadUser,\n    loginUserBySignedEmail,\n    loginUserByAppleId,\n    loginUserByGoogleIdToken,\n    loginUserByToken,\n  } = useAccountStore();\n\n  return {\n    user,\n    subscription,\n    address,\n    settings,\n    isNew,\n    isStaff,\n    isAdmin,\n    //\n    loadUser,\n    logoutUser,\n    loginUser,\n    loginUserBySignedEmail,\n    loginUserByAppleId,\n    loginUserByGoogleIdToken,\n    loginUserByToken,\n  };\n};\n\nexport { useAccount };\n","import { useAccount } from \"@/composables/account\";\n\nexport interface PlayerEvent {\n  state: string;\n  obj_key: string;\n  obj_name: string;\n  source: string;\n}\n\nexport interface AnalyticsEvent {\n  kind: string;\n  data: object;\n}\n\nconst sendGA4Event = (GA4Event: object) => {\n  const { user } = useAccount();\n  console.debug(\"GA4Event\", {\n    ...GA4Event,\n    user_id: user.value?.uid,\n  });\n  // @ts-ignore\n  window.dataLayer.push({\n    ...GA4Event,\n    user_id: user.value?.uid,\n  });\n};\n\nconst sendEvent = (event: AnalyticsEvent) => {\n  const { kind, data } = event;\n  const { action, ...rest } = data as any;\n  sendGA4Event({\n    event: kind,\n    event_name: `${kind}:${action}`,\n    data: rest,\n  });\n};\n\nconst sendPlayerEvent = (event: PlayerEvent) => {\n  const { state, ...rest } = event as any;\n  sendGA4Event({\n    event: \"player\",\n    event_name: `player:${state}`,\n    data: rest,\n  });\n};\n\nconst sendRawEvent = (event: AnalyticsEvent) => {\n  const { kind, data } = event;\n  sendGA4Event({\n    event: kind,\n    ...data,\n  });\n};\n\nexport { sendEvent, sendPlayerEvent, sendRawEvent };\n","import { type AnalyticsEvent, sendEvent, sendRawEvent } from \"@/analytics/event\";\n\nconst useAnalytics = () => {\n  const logEvent = (kind: string, data?: object): void => {\n    const evt = {\n      kind,\n      data,\n    } as AnalyticsEvent;\n    sendEvent(evt);\n  };\n  const logUIEvent = (action: string, value?: string | number | boolean | null): void => {\n    logEvent(\"ui\", {\n      action,\n      value,\n    });\n  };\n  const logRawEvent = (kind: string, data?: object): void => {\n    const evt = {\n      kind,\n      data,\n    } as AnalyticsEvent;\n    sendRawEvent(evt);\n  };\n  return {\n    logEvent,\n    logUIEvent,\n    logRawEvent,\n  };\n};\n\nexport { useAnalytics };\n","import { defineStore } from \"pinia\";\n\nimport {\n  getUser,\n  login,\n  loginByAppleId,\n  loginByGoogleIdToken,\n  loginBySignedEmail,\n  loginByToken,\n  logout,\n} from \"@/api/account\";\nimport { useAnalytics } from \"@/composables/analytics\";\n\ninterface State {\n  user: any | null;\n  isNew: boolean;\n}\n\nexport interface Credentials {\n  email: string;\n  password: string;\n}\n\nexport interface TokenCredentials {\n  email: string;\n  token: string;\n}\n\nexport const useAccountStore = defineStore(\"account\", {\n  state: (): State => ({\n    user: null,\n    isNew: false,\n  }),\n  persist: true,\n  getters: {\n    subscription: (state: State) => {\n      return state.user?.subscription;\n    },\n    address: (state: State) => {\n      return state.user?.address;\n    },\n    settings: (state: State) => {\n      return state.user?.settings;\n    },\n  },\n  actions: {\n    // reusable references to analytics (will be changed when refactoring store to composition API)\n    logUserEvent(action: string, value?: string | number | boolean | null) {\n      const { logEvent } = useAnalytics();\n      logEvent(\"user\", { action, value });\n    },\n    async loginUser(credentials: Credentials) {\n      const { email, password } = credentials;\n      try {\n        this.user = await login(email, password);\n        this.logUserEvent(\"login\", \"local\");\n      } catch (err: any) {\n        console.warn(err);\n        this.user = null;\n        this.logUserEvent(\"login-failed\", err?.response?.statusText);\n        throw err;\n      }\n    },\n    async loginUserByToken(credentials: TokenCredentials) {\n      const { email, token } = credentials;\n      try {\n        const { user, created } = await loginByToken(email, token);\n        this.user = user;\n        this.isNew = created;\n        if (created) {\n          this.logUserEvent(\"signup\", \"token\");\n        }\n        this.logUserEvent(\"login\", \"token\");\n        return {\n          user,\n          created,\n        };\n      } catch (err: any) {\n        console.warn(err);\n        this.user = null;\n        this.logUserEvent(\"login-failed\", err?.response?.statusText);\n        throw err;\n      }\n    },\n    async loginUserBySignedEmail(signedEmail: string) {\n      try {\n        this.user = await loginBySignedEmail(signedEmail);\n      } catch (err) {\n        console.warn(err);\n        this.user = null;\n        throw err;\n      }\n    },\n    async loginUserByAppleId(idToken: string, authorizationCode: string, profile: object) {\n      console.debug(\"loginUserByAppleId\", idToken, authorizationCode, profile);\n      try {\n        const { user, created } = await loginByAppleId(idToken, authorizationCode, profile);\n        this.user = user;\n        this.isNew = created;\n        if (created) {\n          this.logUserEvent(\"signup\", \"apple\");\n        }\n        this.logUserEvent(\"login\", \"apple\");\n      } catch (err) {\n        console.warn(err);\n        this.user = null;\n        throw err;\n      }\n    },\n    async loginUserByGoogleIdToken(idToken: string) {\n      console.debug(\"loginUserByGoogleIdToken\", idToken);\n      try {\n        const { user, created } = await loginByGoogleIdToken(idToken);\n        this.user = user;\n        this.isNew = created;\n        if (created) {\n          this.logUserEvent(\"signup\", \"google\");\n        }\n        this.logUserEvent(\"login\", \"google\");\n      } catch (err) {\n        console.warn(err);\n        this.user = null;\n        throw err;\n      }\n    },\n    async logoutUser() {\n      try {\n        await logout();\n        this.user = null;\n        this.logUserEvent(\"logout\");\n      } catch (err) {\n        console.warn(err);\n        throw err;\n      }\n    },\n    async loadUser() {\n      try {\n        this.user = await getUser();\n      } catch (err) {\n        console.warn(err);\n        throw err;\n      }\n    },\n  },\n});\n","import { storeToRefs } from \"pinia\";\n\nimport { useDevice } from \"@/composables/device\";\nimport { useAccountStore } from \"@/stores/account\";\nimport { useSettingsStore } from \"@/stores/settings\";\n\nexport const useSettings = () => {\n  const appBridge = window.appBridge;\n  const { isWeb } = useDevice();\n  const { locale, darkMode, maxBandwidth, shuffleMode, baseVolume } = storeToRefs(\n    useSettingsStore()\n  );\n  const { settings: userSettings } = storeToRefs(useAccountStore());\n  const {\n    setMaxBandwidth: setMaxBandwidthWeb,\n    setDarkMode,\n    toggleShuffleMode,\n  } = useSettingsStore();\n\n  const setMaxBandwidth = async (bandwidth: number) => {\n    if (isWeb) {\n      setMaxBandwidthWeb(bandwidth);\n    } else {\n      const channel = \"settings:setMaxBandwidth\";\n      await appBridge.send(channel, {\n        maxBandwidth: bandwidth,\n      });\n    }\n  };\n\n  return {\n    locale,\n    darkMode,\n    maxBandwidth,\n    shuffleMode,\n    baseVolume,\n    userSettings,\n    setDarkMode,\n    setMaxBandwidth,\n    toggleShuffleMode,\n  };\n};\n","import { useSettings } from \"@/composables/settings\";\n\nconst DATA_ATTRIBUTE = \"data-theme\";\n\nexport default function setDocumentTheme() {\n  const { darkMode } = useSettings();\n  const theme = darkMode.value ? \"dark\" : \"light\";\n  document.body.setAttribute(DATA_ATTRIBUTE, theme);\n}\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nexport default copyArray;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n  var length = array == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nexport default arrayPush;\n","import root from './_root.js';\nimport toInteger from './toInteger.js';\nimport toNumber from './toNumber.js';\nimport toString from './toString.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite,\n    nativeMin = Math.min;\n\n/**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\nfunction createRound(methodName) {\n  var func = Math[methodName];\n  return function(number, precision) {\n    number = toNumber(number);\n    precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n    if (precision && nativeIsFinite(number)) {\n      // Shift with exponential notation to avoid floating-point issues.\n      // See [MDN](https://mdn.io/round#Examples) for more details.\n      var pair = (toString(number) + 'e').split('e'),\n          value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n      pair = (toString(value) + 'e').split('e');\n      return +(pair[0] + 'e' + (+pair[1] - precision));\n    }\n    return func(number);\n  };\n}\n\nexport default createRound;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nexport default getTag;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nexport default debounce;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arrayIncludesWith;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      isCommon = true,\n      length = array.length,\n      result = [],\n      valuesLength = values.length;\n\n  if (!length) {\n    return result;\n  }\n  if (iteratee) {\n    values = arrayMap(values, baseUnary(iteratee));\n  }\n  if (comparator) {\n    includes = arrayIncludesWith;\n    isCommon = false;\n  }\n  else if (values.length >= LARGE_ARRAY_SIZE) {\n    includes = cacheHas;\n    isCommon = false;\n    values = new SetCache(values);\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee == null ? value : iteratee(value);\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var valuesIndex = valuesLength;\n      while (valuesIndex--) {\n        if (values[valuesIndex] === computed) {\n          continue outer;\n        }\n      }\n      result.push(value);\n    }\n    else if (!includes(values, computed, comparator)) {\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nexport default baseDifference;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nexport default baseValues;\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor,\n    nativeRandom = Math.random;\n\n/**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\nfunction baseRandom(lower, upper) {\n  return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n}\n\nexport default baseRandom;\n","import createRound from './_createRound.js';\n\n/**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\nvar round = createRound('round');\n\nexport default round;\n","import baseRandom from './_baseRandom.js';\n\n/**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\nfunction shuffleSelf(array, size) {\n  var index = -1,\n      length = array.length,\n      lastIndex = length - 1;\n\n  size = size === undefined ? length : size;\n  while (++index < size) {\n    var rand = baseRandom(index, lastIndex),\n        value = array[rand];\n\n    array[rand] = array[index];\n    array[index] = value;\n  }\n  array.length = size;\n  return array;\n}\n\nexport default shuffleSelf;\n","import copyArray from './_copyArray.js';\nimport shuffleSelf from './_shuffleSelf.js';\n\n/**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\nfunction arrayShuffle(array) {\n  return shuffleSelf(copyArray(array));\n}\n\nexport default arrayShuffle;\n","import shuffleSelf from './_shuffleSelf.js';\nimport values from './values.js';\n\n/**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\nfunction baseShuffle(collection) {\n  return shuffleSelf(values(collection));\n}\n\nexport default baseShuffle;\n","import arrayShuffle from './_arrayShuffle.js';\nimport baseShuffle from './_baseShuffle.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\nfunction shuffle(collection) {\n  var func = isArray(collection) ? arrayShuffle : baseShuffle;\n  return func(collection);\n}\n\nexport default shuffle;\n","import baseDifference from './_baseDifference.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\nvar without = baseRest(function(array, values) {\n  return isArrayLikeObject(array)\n    ? baseDifference(array, values)\n    : [];\n});\n\nexport default without;\n","import { defineStore } from \"pinia\";\nimport { round } from \"lodash-es\";\n\nimport type { Mode, PlayState } from \"@/player/hlsPlayer\";\n\nexport interface State {\n  mode: Mode;\n  playState: PlayState;\n  duration: number;\n  currentTime: number;\n  newsProvider: null | string;\n  bandwidth: number;\n  liveLatency: number;\n}\n\ninterface PlayerState extends State {\n  isVisible: boolean;\n  debugData: object;\n}\n\nexport const usePlayerStore = defineStore(\"player\", {\n  state: (): PlayerState => ({\n    mode: \"live\",\n    playState: \"stopped\",\n    duration: 0,\n    currentTime: 0,\n    newsProvider: null,\n    bandwidth: 0,\n    liveLatency: 24, // TODO: evaluate default latency\n    //\n    isVisible: false,\n    debugData: {},\n  }),\n  persist: {\n    afterRestore: (ctx) => {\n      console.log(`just restored '${ctx.store.$id}'`);\n      console.debug((ctx.store.$state.playState = \"paused\"));\n    },\n    paths: [\"isVisible\"],\n  },\n  getters: {\n    // mode mappers\n    isLive(state: PlayerState): boolean {\n      return state.mode === \"live\";\n    },\n    isNews(state: PlayerState): boolean {\n      return state.mode === \"news\";\n    },\n    isOndemand(state: PlayerState): boolean {\n      return state.mode === \"ondemand\";\n    },\n    // state mappers\n    isPlaying(state: PlayerState): boolean {\n      return state.playState === \"playing\";\n    },\n    isBuffering(state: PlayerState): boolean {\n      return state.playState === \"buffering\";\n    },\n    isPaused(state: PlayerState): boolean {\n      return state.playState === \"paused\";\n    },\n    // derived state\n    relPosition(state: PlayerState): number {\n      if (state.mode === \"live\") {\n        return 0;\n      }\n      return state.currentTime / state.duration ? round(state.currentTime / state.duration, 4) : 0;\n    },\n  },\n  actions: {\n    setVisibility(visible: boolean): void {\n      this.isVisible = visible;\n    },\n    async setPlayerState(state: State): Promise<void> {\n      if (state.mode !== this.mode) {\n        this.mode = state.mode;\n      }\n      if (state.playState !== this.playState) {\n        this.playState = state.playState;\n      }\n      if (state.duration !== this.duration) {\n        this.duration = state.duration;\n      }\n      if (state.currentTime !== this.currentTime) {\n        if (state.mode === \"live\" && state.currentTime !== 0) {\n          this.currentTime = 0;\n        } else {\n          this.currentTime = state.currentTime;\n        }\n      }\n      if (state.newsProvider !== this.newsProvider) {\n        this.newsProvider = state.newsProvider;\n      }\n      if (state.mode === \"live\" && state.liveLatency && state.liveLatency !== this.liveLatency) {\n        this.liveLatency = state.liveLatency;\n      }\n      if (state.bandwidth !== this.bandwidth) {\n        this.bandwidth = state.bandwidth;\n      }\n    },\n    async setPlayerDebugData(data: object): Promise<void> {\n      this.debugData = data;\n    },\n  },\n});\n","import log from \"loglevel\";\nimport { defineStore } from \"pinia\";\nimport { shuffle } from \"lodash-es\";\n\nimport type { Media } from \"@/typings/api\";\n\nexport type AnnotatedMedia = Media & {\n  scope: Array<string>;\n};\n\nexport interface Enqueue {\n  media: Array<AnnotatedMedia>;\n  mode?: string;\n}\n\nexport interface State {\n  media: Array<AnnotatedMedia>;\n  currentIndex: number;\n}\n\nexport const useQueueStore = defineStore(\"queue\", {\n  state: (): State => ({\n    media: [],\n    currentIndex: -1,\n  }),\n  persist: true,\n  getters: {\n    numMedia(state: State): number {\n      return state.media.length;\n    },\n    previousIndex(state: State): number | null {\n      if (state.media[state.currentIndex - 1]) {\n        return state.currentIndex - 1;\n      }\n      return null;\n    },\n    nextIndex(state: State): number | null {\n      if (state.media[state.currentIndex + 1]) {\n        return state.currentIndex + 1;\n      }\n      return null;\n    },\n    currentMedia(state: State): AnnotatedMedia | null {\n      return state.media[state.currentIndex] || null;\n    },\n    nextMedia(state: State): AnnotatedMedia | null {\n      if (this.nextIndex) {\n        return state.media[this.nextIndex] || null;\n      }\n      return null;\n    },\n  },\n  actions: {\n    async setIndex(index: number): Promise<void> {\n      log.debug(\"queueStore - setIndex\", index);\n      this.currentIndex = index;\n    },\n    async deleteAtIndex(index: number): Promise<void> {\n      log.debug(\"queueStore - removeIndex\", index);\n      this.media.splice(index, 1);\n      if (index < this.currentIndex) {\n        this.currentIndex -= 1;\n      }\n    },\n    async enqueue(queue: Enqueue): Promise<void> {\n      const { media, mode } = queue;\n      log.debug(\"queueStore - enqueue\", media, mode);\n      if (mode === \"replace\") {\n        this.media = media;\n        this.currentIndex = media.length ? 0 : -1;\n      } else if (mode === \"insert\") {\n        const splitAt = this.currentIndex + 1;\n        const head = this.media.slice(0, splitAt);\n        const tail = this.media.slice(splitAt);\n        this.media = [...head, ...media, ...tail];\n        if (this.currentIndex < 0) {\n          this.currentIndex = media.length ? 0 : -1;\n        }\n      } else if (mode === \"append\") {\n        this.media = [...this.media, ...media];\n        if (this.currentIndex < 0) {\n          this.currentIndex = media.length ? 0 : -1;\n        }\n      } else {\n        log.warn(`unknown mode ${mode}`);\n      }\n    },\n    async shuffleQueue(): Promise<void> {\n      log.debug(\"queueStore - shuffleQueue\");\n      const splitAt = this.currentIndex + 1;\n      const head = this.media.slice(0, splitAt);\n      const tail = this.media.slice(splitAt);\n      this.media = [...head, ...shuffle(tail)];\n    },\n    async clearQueue(force = false): Promise<void> {\n      log.debug(\"queueStore - clearQueue\", { force });\n      if (force) {\n        this.media = [];\n        this.currentIndex = -1;\n      } else {\n        this.media = this.media.slice(this.currentIndex, this.currentIndex + 1);\n        this.currentIndex = 0;\n      }\n    },\n    // replace complete queue state\n    // this method is used when running in \"App-mode\" and queue data is handled by native app\n    async setQueueData(data: any): Promise<void> {\n      log.debug(\"setQueueData\", data);\n      const { media, currentIndex } = data;\n      this.media = media;\n      this.currentIndex = currentIndex;\n    },\n  },\n});\n","// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid DateTime: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Interval: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Duration: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n  constructor(unit) {\n    super(`Invalid unit ${unit}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n  constructor() {\n    super(\"Zone is an abstract class\");\n  }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n  s = \"short\",\n  l = \"long\";\n\nexport const DATE_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n};\n\nexport const DATE_MED = {\n  year: n,\n  month: s,\n  day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n};\n\nexport const DATE_FULL = {\n  year: n,\n  month: l,\n  day: n,\n};\n\nexport const DATE_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n  hour: n,\n  minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n  hour: n,\n  minute: n,\n  hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const DATETIME_MED = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_FULL = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l,\n};\n","/*\n  This is just a junk drawer, containing anything used across multiple classes.\n  Because Luxon is small(ish), this should stay small and we won't worry about splitting\n  it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n  return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n  return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n  return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n  return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n  return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n  try {\n    return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n  } catch (e) {\n    return false;\n  }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n  return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n  if (arr.length === 0) {\n    return undefined;\n  }\n  return arr.reduce((best, next) => {\n    const pair = [by(next), next];\n    if (!best) {\n      return pair;\n    } else if (compare(best[0], pair[0]) === best[0]) {\n      return best;\n    } else {\n      return pair;\n    }\n  }, null)[1];\n}\n\nexport function pick(obj, keys) {\n  return keys.reduce((a, k) => {\n    a[k] = obj[k];\n    return a;\n  }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n  return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n  return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n  const isNeg = input < 0;\n  let padded;\n  if (isNeg) {\n    padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n  } else {\n    padded = (\"\" + input).padStart(n, \"0\");\n  }\n  return padded;\n}\n\nexport function parseInteger(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseInt(string, 10);\n  }\n}\n\nexport function parseFloating(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseFloat(string);\n  }\n}\n\nexport function parseMillis(fraction) {\n  // Return undefined (instead of 0) in these cases, where fraction is not set\n  if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n    return undefined;\n  } else {\n    const f = parseFloat(\"0.\" + fraction) * 1000;\n    return Math.floor(f);\n  }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n  const factor = 10 ** digits,\n    rounder = towardZero ? Math.trunc : Math.round;\n  return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n  return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n  const modMonth = floorMod(month - 1, 12) + 1,\n    modYear = year + (month - modMonth) / 12;\n\n  if (modMonth === 2) {\n    return isLeapYear(modYear) ? 29 : 28;\n  } else {\n    return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n  }\n}\n\n// covert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n  let d = Date.UTC(\n    obj.year,\n    obj.month - 1,\n    obj.day,\n    obj.hour,\n    obj.minute,\n    obj.second,\n    obj.millisecond\n  );\n\n  // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n  if (obj.year < 100 && obj.year >= 0) {\n    d = new Date(d);\n    d.setUTCFullYear(d.getUTCFullYear() - 1900);\n  }\n  return +d;\n}\n\nexport function weeksInWeekYear(weekYear) {\n  const p1 =\n      (weekYear +\n        Math.floor(weekYear / 4) -\n        Math.floor(weekYear / 100) +\n        Math.floor(weekYear / 400)) %\n      7,\n    last = weekYear - 1,\n    p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;\n  return p1 === 4 || p2 === 3 ? 53 : 52;\n}\n\nexport function untruncateYear(year) {\n  if (year > 99) {\n    return year;\n  } else return year > 60 ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n  const date = new Date(ts),\n    intlOpts = {\n      hourCycle: \"h23\",\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n    };\n\n  if (timeZone) {\n    intlOpts.timeZone = timeZone;\n  }\n\n  const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n  const parsed = new Intl.DateTimeFormat(locale, modified)\n    .formatToParts(date)\n    .find((m) => m.type.toLowerCase() === \"timezonename\");\n  return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n  let offHour = parseInt(offHourStr, 10);\n\n  // don't || this because we want to preserve -0\n  if (Number.isNaN(offHour)) {\n    offHour = 0;\n  }\n\n  const offMin = parseInt(offMinuteStr, 10) || 0,\n    offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n  return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n  const numericValue = Number(value);\n  if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n    throw new InvalidArgumentError(`Invalid unit value ${value}`);\n  return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n  const normalized = {};\n  for (const u in obj) {\n    if (hasOwnProperty(obj, u)) {\n      const v = obj[u];\n      if (v === undefined || v === null) continue;\n      normalized[normalizer(u)] = asNumber(v);\n    }\n  }\n  return normalized;\n}\n\nexport function formatOffset(offset, format) {\n  const hours = Math.trunc(Math.abs(offset / 60)),\n    minutes = Math.trunc(Math.abs(offset % 60)),\n    sign = offset >= 0 ? \"+\" : \"-\";\n\n  switch (format) {\n    case \"short\":\n      return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n    case \"narrow\":\n      return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n    case \"techie\":\n      return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n    default:\n      throw new RangeError(`Value format ${format} is out of range for property format`);\n  }\n}\n\nexport function timeObject(obj) {\n  return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n\nexport const ianaRegex =\n  /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n  return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\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\nexport const monthsShort = [\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\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...monthsNarrow];\n    case \"short\":\n      return [...monthsShort];\n    case \"long\":\n      return [...monthsLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n    case \"2-digit\":\n      return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n    default:\n      return null;\n  }\n}\n\nexport const weekdaysLong = [\n  \"Monday\",\n  \"Tuesday\",\n  \"Wednesday\",\n  \"Thursday\",\n  \"Friday\",\n  \"Saturday\",\n  \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...weekdaysNarrow];\n    case \"short\":\n      return [...weekdaysShort];\n    case \"long\":\n      return [...weekdaysLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n    default:\n      return null;\n  }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...erasNarrow];\n    case \"short\":\n      return [...erasShort];\n    case \"long\":\n      return [...erasLong];\n    default:\n      return null;\n  }\n}\n\nexport function meridiemForDateTime(dt) {\n  return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n  return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n  return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n  return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n  const units = {\n    years: [\"year\", \"yr.\"],\n    quarters: [\"quarter\", \"qtr.\"],\n    months: [\"month\", \"mo.\"],\n    weeks: [\"week\", \"wk.\"],\n    days: [\"day\", \"day\", \"days\"],\n    hours: [\"hour\", \"hr.\"],\n    minutes: [\"minute\", \"min.\"],\n    seconds: [\"second\", \"sec.\"],\n  };\n\n  const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n  if (numeric === \"auto\" && lastable) {\n    const isDay = unit === \"days\";\n    switch (count) {\n      case 1:\n        return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n      case -1:\n        return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n      case 0:\n        return isDay ? \"today\" : `this ${units[unit][0]}`;\n      default: // fall through\n    }\n  }\n\n  const isInPast = Object.is(count, -0) || count < 0,\n    fmtValue = Math.abs(count),\n    singular = fmtValue === 1,\n    lilUnits = units[unit],\n    fmtUnit = narrow\n      ? singular\n        ? lilUnits[1]\n        : lilUnits[2] || lilUnits[1]\n      : singular\n      ? units[unit][0]\n      : unit;\n  return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n  // these all have the offsets removed because we don't have access to them\n  // without all the intl stuff this is backfilling\n  const filtered = pick(knownFormat, [\n      \"weekday\",\n      \"era\",\n      \"year\",\n      \"month\",\n      \"day\",\n      \"hour\",\n      \"minute\",\n      \"second\",\n      \"timeZoneName\",\n      \"hourCycle\",\n    ]),\n    key = stringify(filtered),\n    dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n  switch (key) {\n    case stringify(Formats.DATE_SHORT):\n      return \"M/d/yyyy\";\n    case stringify(Formats.DATE_MED):\n      return \"LLL d, yyyy\";\n    case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n      return \"EEE, LLL d, yyyy\";\n    case stringify(Formats.DATE_FULL):\n      return \"LLLL d, yyyy\";\n    case stringify(Formats.DATE_HUGE):\n      return \"EEEE, LLLL d, yyyy\";\n    case stringify(Formats.TIME_SIMPLE):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_SECONDS):\n      return \"h:mm:ss a\";\n    case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_LONG_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_24_SIMPLE):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_SECONDS):\n      return \"HH:mm:ss\";\n    case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.DATETIME_SHORT):\n      return \"M/d/yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_MED):\n      return \"LLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL):\n      return \"LLLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_HUGE):\n      return dateTimeHuge;\n    case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n      return \"M/d/yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n      return \"LLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n      return \"EEE, d LLL yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n      return \"LLLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n      return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n    default:\n      return dateTimeHuge;\n  }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n  let s = \"\";\n  for (const token of splits) {\n    if (token.literal) {\n      s += token.val;\n    } else {\n      s += tokenToString(token.val);\n    }\n  }\n  return s;\n}\n\nconst macroTokenToFormatOpts = {\n  D: Formats.DATE_SHORT,\n  DD: Formats.DATE_MED,\n  DDD: Formats.DATE_FULL,\n  DDDD: Formats.DATE_HUGE,\n  t: Formats.TIME_SIMPLE,\n  tt: Formats.TIME_WITH_SECONDS,\n  ttt: Formats.TIME_WITH_SHORT_OFFSET,\n  tttt: Formats.TIME_WITH_LONG_OFFSET,\n  T: Formats.TIME_24_SIMPLE,\n  TT: Formats.TIME_24_WITH_SECONDS,\n  TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n  TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n  f: Formats.DATETIME_SHORT,\n  ff: Formats.DATETIME_MED,\n  fff: Formats.DATETIME_FULL,\n  ffff: Formats.DATETIME_HUGE,\n  F: Formats.DATETIME_SHORT_WITH_SECONDS,\n  FF: Formats.DATETIME_MED_WITH_SECONDS,\n  FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n  FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n  static create(locale, opts = {}) {\n    return new Formatter(locale, opts);\n  }\n\n  static parseFormat(fmt) {\n    let current = null,\n      currentFull = \"\",\n      bracketed = false;\n    const splits = [];\n    for (let i = 0; i < fmt.length; i++) {\n      const c = fmt.charAt(i);\n      if (c === \"'\") {\n        if (currentFull.length > 0) {\n          splits.push({ literal: bracketed, val: currentFull });\n        }\n        current = null;\n        currentFull = \"\";\n        bracketed = !bracketed;\n      } else if (bracketed) {\n        currentFull += c;\n      } else if (c === current) {\n        currentFull += c;\n      } else {\n        if (currentFull.length > 0) {\n          splits.push({ literal: false, val: currentFull });\n        }\n        currentFull = c;\n        current = c;\n      }\n    }\n\n    if (currentFull.length > 0) {\n      splits.push({ literal: bracketed, val: currentFull });\n    }\n\n    return splits;\n  }\n\n  static macroTokenToFormatOpts(token) {\n    return macroTokenToFormatOpts[token];\n  }\n\n  constructor(locale, formatOpts) {\n    this.opts = formatOpts;\n    this.loc = locale;\n    this.systemLoc = null;\n  }\n\n  formatWithSystemDefault(dt, opts) {\n    if (this.systemLoc === null) {\n      this.systemLoc = this.loc.redefaultToSystem();\n    }\n    const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n    return df.format();\n  }\n\n  formatDateTime(dt, opts = {}) {\n    const df = this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n    return df.format();\n  }\n\n  formatDateTimeParts(dt, opts = {}) {\n    const df = this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n    return df.formatToParts();\n  }\n\n  resolvedOptions(dt, opts = {}) {\n    const df = this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n    return df.resolvedOptions();\n  }\n\n  num(n, p = 0) {\n    // we get some perf out of doing this here, annoyingly\n    if (this.opts.forceSimple) {\n      return padStart(n, p);\n    }\n\n    const opts = { ...this.opts };\n\n    if (p > 0) {\n      opts.padTo = p;\n    }\n\n    return this.loc.numberFormatter(opts).format(n);\n  }\n\n  formatDateTimeFromString(dt, fmt) {\n    const knownEnglish = this.loc.listingMode() === \"en\",\n      useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n      string = (opts, extract) => this.loc.extract(dt, opts, extract),\n      formatOffset = (opts) => {\n        if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n          return \"Z\";\n        }\n\n        return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n      },\n      meridiem = () =>\n        knownEnglish\n          ? English.meridiemForDateTime(dt)\n          : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n      month = (length, standalone) =>\n        knownEnglish\n          ? English.monthForDateTime(dt, length)\n          : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n      weekday = (length, standalone) =>\n        knownEnglish\n          ? English.weekdayForDateTime(dt, length)\n          : string(\n              standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n              \"weekday\"\n            ),\n      maybeMacro = (token) => {\n        const formatOpts = Formatter.macroTokenToFormatOpts(token);\n        if (formatOpts) {\n          return this.formatWithSystemDefault(dt, formatOpts);\n        } else {\n          return token;\n        }\n      },\n      era = (length) =>\n        knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n      tokenToString = (token) => {\n        // Where possible: http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles\n        switch (token) {\n          // ms\n          case \"S\":\n            return this.num(dt.millisecond);\n          case \"u\":\n          // falls through\n          case \"SSS\":\n            return this.num(dt.millisecond, 3);\n          // seconds\n          case \"s\":\n            return this.num(dt.second);\n          case \"ss\":\n            return this.num(dt.second, 2);\n          // fractional seconds\n          case \"uu\":\n            return this.num(Math.floor(dt.millisecond / 10), 2);\n          case \"uuu\":\n            return this.num(Math.floor(dt.millisecond / 100));\n          // minutes\n          case \"m\":\n            return this.num(dt.minute);\n          case \"mm\":\n            return this.num(dt.minute, 2);\n          // hours\n          case \"h\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n          case \"hh\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n          case \"H\":\n            return this.num(dt.hour);\n          case \"HH\":\n            return this.num(dt.hour, 2);\n          // offset\n          case \"Z\":\n            // like +6\n            return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n          case \"ZZ\":\n            // like +06:00\n            return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n          case \"ZZZ\":\n            // like +0600\n            return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n          case \"ZZZZ\":\n            // like EST\n            return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n          case \"ZZZZZ\":\n            // like Eastern Standard Time\n            return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n          // zone\n          case \"z\":\n            // like America/New_York\n            return dt.zoneName;\n          // meridiems\n          case \"a\":\n            return meridiem();\n          // dates\n          case \"d\":\n            return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n          case \"dd\":\n            return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n          // weekdays - standalone\n          case \"c\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"ccc\":\n            // like 'Tues'\n            return weekday(\"short\", true);\n          case \"cccc\":\n            // like 'Tuesday'\n            return weekday(\"long\", true);\n          case \"ccccc\":\n            // like 'T'\n            return weekday(\"narrow\", true);\n          // weekdays - format\n          case \"E\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"EEE\":\n            // like 'Tues'\n            return weekday(\"short\", false);\n          case \"EEEE\":\n            // like 'Tuesday'\n            return weekday(\"long\", false);\n          case \"EEEEE\":\n            // like 'T'\n            return weekday(\"narrow\", false);\n          // months - standalone\n          case \"L\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"LL\":\n            // like 01, doesn't seem to work\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"LLL\":\n            // like Jan\n            return month(\"short\", true);\n          case \"LLLL\":\n            // like January\n            return month(\"long\", true);\n          case \"LLLLL\":\n            // like J\n            return month(\"narrow\", true);\n          // months - format\n          case \"M\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"MM\":\n            // like 01\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"MMM\":\n            // like Jan\n            return month(\"short\", false);\n          case \"MMMM\":\n            // like January\n            return month(\"long\", false);\n          case \"MMMMM\":\n            // like J\n            return month(\"narrow\", false);\n          // years\n          case \"y\":\n            // like 2014\n            return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n          case \"yy\":\n            // like 14\n            return useDateTimeFormatter\n              ? string({ year: \"2-digit\" }, \"year\")\n              : this.num(dt.year.toString().slice(-2), 2);\n          case \"yyyy\":\n            // like 0012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 4);\n          case \"yyyyyy\":\n            // like 000012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 6);\n          // eras\n          case \"G\":\n            // like AD\n            return era(\"short\");\n          case \"GG\":\n            // like Anno Domini\n            return era(\"long\");\n          case \"GGGGG\":\n            return era(\"narrow\");\n          case \"kk\":\n            return this.num(dt.weekYear.toString().slice(-2), 2);\n          case \"kkkk\":\n            return this.num(dt.weekYear, 4);\n          case \"W\":\n            return this.num(dt.weekNumber);\n          case \"WW\":\n            return this.num(dt.weekNumber, 2);\n          case \"o\":\n            return this.num(dt.ordinal);\n          case \"ooo\":\n            return this.num(dt.ordinal, 3);\n          case \"q\":\n            // like 1\n            return this.num(dt.quarter);\n          case \"qq\":\n            // like 01\n            return this.num(dt.quarter, 2);\n          case \"X\":\n            return this.num(Math.floor(dt.ts / 1000));\n          case \"x\":\n            return this.num(dt.ts);\n          default:\n            return maybeMacro(token);\n        }\n      };\n\n    return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n  }\n\n  formatDurationFromString(dur, fmt) {\n    const tokenToField = (token) => {\n        switch (token[0]) {\n          case \"S\":\n            return \"millisecond\";\n          case \"s\":\n            return \"second\";\n          case \"m\":\n            return \"minute\";\n          case \"h\":\n            return \"hour\";\n          case \"d\":\n            return \"day\";\n          case \"w\":\n            return \"week\";\n          case \"M\":\n            return \"month\";\n          case \"y\":\n            return \"year\";\n          default:\n            return null;\n        }\n      },\n      tokenToString = (lildur) => (token) => {\n        const mapped = tokenToField(token);\n        if (mapped) {\n          return this.num(lildur.get(mapped), token.length);\n        } else {\n          return token;\n        }\n      },\n      tokens = Formatter.parseFormat(fmt),\n      realTokens = tokens.reduce(\n        (found, { literal, val }) => (literal ? found : found.concat(val)),\n        []\n      ),\n      collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t));\n    return stringifyTokens(tokens, tokenToString(collapsed));\n  }\n}\n","export default class Invalid {\n  constructor(reason, explanation) {\n    this.reason = reason;\n    this.explanation = explanation;\n  }\n\n  toMessage() {\n    if (this.explanation) {\n      return `${this.reason}: ${this.explanation}`;\n    } else {\n      return this.reason;\n    }\n  }\n}\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n  /**\n   * The type of zone\n   * @abstract\n   * @type {string}\n   */\n  get type() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * The name of this zone.\n   * @abstract\n   * @type {string}\n   */\n  get name() {\n    throw new ZoneIsAbstractError();\n  }\n\n  get ianaName() {\n    return this.name;\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year.\n   * @abstract\n   * @type {boolean}\n   */\n  get isUniversal() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's common name (such as EST) at the specified timestamp\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the name\n   * @param {Object} opts - Options to affect the format\n   * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n   * @param {string} opts.locale - What locale to return the offset name in.\n   * @return {string}\n   */\n  offsetName(ts, opts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to compute the offset\n   * @return {number}\n   */\n  offset(ts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone\n   * @abstract\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is valid.\n   * @abstract\n   * @type {boolean}\n   */\n  get isValid() {\n    throw new ZoneIsAbstractError();\n  }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n  /**\n   * Get a singleton instance of the local zone\n   * @return {SystemZone}\n   */\n  static get instance() {\n    if (singleton === null) {\n      singleton = new SystemZone();\n    }\n    return singleton;\n  }\n\n  /** @override **/\n  get type() {\n    return \"system\";\n  }\n\n  /** @override **/\n  get name() {\n    return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale);\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /** @override **/\n  offset(ts) {\n    return -new Date(ts).getTimezoneOffset();\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"system\";\n  }\n\n  /** @override **/\n  get isValid() {\n    return true;\n  }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n  if (!dtfCache[zone]) {\n    dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n      hour12: false,\n      timeZone: zone,\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      era: \"short\",\n    });\n  }\n  return dtfCache[zone];\n}\n\nconst typeToPos = {\n  year: 0,\n  month: 1,\n  day: 2,\n  era: 3,\n  hour: 4,\n  minute: 5,\n  second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n  const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n    parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n    [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n  return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n  const formatted = dtf.formatToParts(date);\n  const filled = [];\n  for (let i = 0; i < formatted.length; i++) {\n    const { type, value } = formatted[i];\n    const pos = typeToPos[type];\n\n    if (type === \"era\") {\n      filled[pos] = value;\n    } else if (!isUndefined(pos)) {\n      filled[pos] = parseInt(value, 10);\n    }\n  }\n  return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n  /**\n   * @param {string} name - Zone name\n   * @return {IANAZone}\n   */\n  static create(name) {\n    if (!ianaZoneCache[name]) {\n      ianaZoneCache[name] = new IANAZone(name);\n    }\n    return ianaZoneCache[name];\n  }\n\n  /**\n   * Reset local caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCache() {\n    ianaZoneCache = {};\n    dtfCache = {};\n  }\n\n  /**\n   * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n   * @param {string} s - The string to check validity on\n   * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n   * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n   * @deprecated This method returns false for some valid IANA names. Use isValidZone instead.\n   * @return {boolean}\n   */\n  static isValidSpecifier(s) {\n    return this.isValidZone(s);\n  }\n\n  /**\n   * Returns whether the provided string identifies a real zone\n   * @param {string} zone - The string to check\n   * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n   * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n   * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n   * @return {boolean}\n   */\n  static isValidZone(zone) {\n    if (!zone) {\n      return false;\n    }\n    try {\n      new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  constructor(name) {\n    super();\n    /** @private **/\n    this.zoneName = name;\n    /** @private **/\n    this.valid = IANAZone.isValidZone(name);\n  }\n\n  /** @override **/\n  get type() {\n    return \"iana\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.zoneName;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale, this.name);\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /** @override **/\n  offset(ts) {\n    const date = new Date(ts);\n\n    if (isNaN(date)) return NaN;\n\n    const dtf = makeDTF(this.name);\n    let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n      ? partsOffset(dtf, date)\n      : hackyOffset(dtf, date);\n\n    if (adOrBc === \"BC\") {\n      year = -Math.abs(year) + 1;\n    }\n\n    // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n    const adjustedHour = hour === 24 ? 0 : hour;\n\n    const asUTC = objToLocalTS({\n      year,\n      month,\n      day,\n      hour: adjustedHour,\n      minute,\n      second,\n      millisecond: 0,\n    });\n\n    let asTS = +date;\n    const over = asTS % 1000;\n    asTS -= over >= 0 ? over : 1000 + over;\n    return (asUTC - asTS) / (60 * 1000);\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"iana\" && otherZone.name === this.name;\n  }\n\n  /** @override **/\n  get isValid() {\n    return this.valid;\n  }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n  /**\n   * Get a singleton instance of UTC\n   * @return {FixedOffsetZone}\n   */\n  static get utcInstance() {\n    if (singleton === null) {\n      singleton = new FixedOffsetZone(0);\n    }\n    return singleton;\n  }\n\n  /**\n   * Get an instance with a specified offset\n   * @param {number} offset - The offset in minutes\n   * @return {FixedOffsetZone}\n   */\n  static instance(offset) {\n    return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n  }\n\n  /**\n   * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n   * @param {string} s - The offset string to parse\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n   * @return {FixedOffsetZone}\n   */\n  static parseSpecifier(s) {\n    if (s) {\n      const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n      if (r) {\n        return new FixedOffsetZone(signedOffset(r[1], r[2]));\n      }\n    }\n    return null;\n  }\n\n  constructor(offset) {\n    super();\n    /** @private **/\n    this.fixed = offset;\n  }\n\n  /** @override **/\n  get type() {\n    return \"fixed\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n  }\n\n  get ianaName() {\n    if (this.fixed === 0) {\n      return \"Etc/UTC\";\n    } else {\n      return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n    }\n  }\n\n  /** @override **/\n  offsetName() {\n    return this.name;\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.fixed, format);\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return true;\n  }\n\n  /** @override **/\n  offset() {\n    return this.fixed;\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n  }\n\n  /** @override **/\n  get isValid() {\n    return true;\n  }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n  constructor(zoneName) {\n    super();\n    /**  @private */\n    this.zoneName = zoneName;\n  }\n\n  /** @override **/\n  get type() {\n    return \"invalid\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.zoneName;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName() {\n    return null;\n  }\n\n  /** @override **/\n  formatOffset() {\n    return \"\";\n  }\n\n  /** @override **/\n  offset() {\n    return NaN;\n  }\n\n  /** @override **/\n  equals() {\n    return false;\n  }\n\n  /** @override **/\n  get isValid() {\n    return false;\n  }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\n\nexport function normalizeZone(input, defaultZone) {\n  let offset;\n  if (isUndefined(input) || input === null) {\n    return defaultZone;\n  } else if (input instanceof Zone) {\n    return input;\n  } else if (isString(input)) {\n    const lowered = input.toLowerCase();\n    if (lowered === \"local\" || lowered === \"system\") return defaultZone;\n    else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n    else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n  } else if (isNumber(input)) {\n    return FixedOffsetZone.instance(input);\n  } else if (typeof input === \"object\" && input.offset && typeof input.offset === \"number\") {\n    // This is dumb, but the instanceof check above doesn't seem to really work\n    // so we're duck checking it\n    return input;\n  } else {\n    return new InvalidZone(input);\n  }\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nlet now = () => Date.now(),\n  defaultZone = \"system\",\n  defaultLocale = null,\n  defaultNumberingSystem = null,\n  defaultOutputCalendar = null,\n  throwOnInvalid;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n  /**\n   * Get the callback for returning the current timestamp.\n   * @type {function}\n   */\n  static get now() {\n    return now;\n  }\n\n  /**\n   * Set the callback for returning the current timestamp.\n   * The function should return a number, which will be interpreted as an Epoch millisecond count\n   * @type {function}\n   * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n   * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n   */\n  static set now(n) {\n    now = n;\n  }\n\n  /**\n   * Set the default time zone to create DateTimes in. Does not affect existing instances.\n   * Use the value \"system\" to reset this value to the system's time zone.\n   * @type {string}\n   */\n  static set defaultZone(zone) {\n    defaultZone = zone;\n  }\n\n  /**\n   * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n   * The default value is the system's time zone (the one set on the machine that runs this code).\n   * @type {Zone}\n   */\n  static get defaultZone() {\n    return normalizeZone(defaultZone, SystemZone.instance);\n  }\n\n  /**\n   * Get the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultLocale() {\n    return defaultLocale;\n  }\n\n  /**\n   * Set the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultLocale(locale) {\n    defaultLocale = locale;\n  }\n\n  /**\n   * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultNumberingSystem() {\n    return defaultNumberingSystem;\n  }\n\n  /**\n   * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultNumberingSystem(numberingSystem) {\n    defaultNumberingSystem = numberingSystem;\n  }\n\n  /**\n   * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultOutputCalendar() {\n    return defaultOutputCalendar;\n  }\n\n  /**\n   * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultOutputCalendar(outputCalendar) {\n    defaultOutputCalendar = outputCalendar;\n  }\n\n  /**\n   * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static get throwOnInvalid() {\n    return throwOnInvalid;\n  }\n\n  /**\n   * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static set throwOnInvalid(t) {\n    throwOnInvalid = t;\n  }\n\n  /**\n   * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCaches() {\n    Locale.resetCache();\n    IANAZone.resetCache();\n  }\n}\n","import { padStart, roundTo, hasRelative } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlLFCache[key];\n  if (!dtf) {\n    dtf = new Intl.ListFormat(locString, opts);\n    intlLFCache[key] = dtf;\n  }\n  return dtf;\n}\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlDTCache[key];\n  if (!dtf) {\n    dtf = new Intl.DateTimeFormat(locString, opts);\n    intlDTCache[key] = dtf;\n  }\n  return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let inf = intlNumCache[key];\n  if (!inf) {\n    inf = new Intl.NumberFormat(locString, opts);\n    intlNumCache[key] = inf;\n  }\n  return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n  const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n  const key = JSON.stringify([locString, cacheKeyOpts]);\n  let inf = intlRelCache[key];\n  if (!inf) {\n    inf = new Intl.RelativeTimeFormat(locString, opts);\n    intlRelCache[key] = inf;\n  }\n  return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n  if (sysLocaleCache) {\n    return sysLocaleCache;\n  } else {\n    sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n    return sysLocaleCache;\n  }\n}\n\nfunction parseLocaleString(localeStr) {\n  // I really want to avoid writing a BCP 47 parser\n  // see, e.g. https://github.com/wooorm/bcp-47\n  // Instead, we'll do this:\n\n  // a) if the string has no -u extensions, just leave it alone\n  // b) if it does, use Intl to resolve everything\n  // c) if Intl fails, try again without the -u\n\n  const uIndex = localeStr.indexOf(\"-u-\");\n  if (uIndex === -1) {\n    return [localeStr];\n  } else {\n    let options;\n    const smaller = localeStr.substring(0, uIndex);\n    try {\n      options = getCachedDTF(localeStr).resolvedOptions();\n    } catch (e) {\n      options = getCachedDTF(smaller).resolvedOptions();\n    }\n\n    const { numberingSystem, calendar } = options;\n    // return the smaller one so that we can append the calendar and numbering overrides to it\n    return [smaller, numberingSystem, calendar];\n  }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n  if (outputCalendar || numberingSystem) {\n    localeStr += \"-u\";\n\n    if (outputCalendar) {\n      localeStr += `-ca-${outputCalendar}`;\n    }\n\n    if (numberingSystem) {\n      localeStr += `-nu-${numberingSystem}`;\n    }\n    return localeStr;\n  } else {\n    return localeStr;\n  }\n}\n\nfunction mapMonths(f) {\n  const ms = [];\n  for (let i = 1; i <= 12; i++) {\n    const dt = DateTime.utc(2016, i, 1);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction mapWeekdays(f) {\n  const ms = [];\n  for (let i = 1; i <= 7; i++) {\n    const dt = DateTime.utc(2016, 11, 13 + i);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction listStuff(loc, length, defaultOK, englishFn, intlFn) {\n  const mode = loc.listingMode(defaultOK);\n\n  if (mode === \"error\") {\n    return null;\n  } else if (mode === \"en\") {\n    return englishFn(length);\n  } else {\n    return intlFn(length);\n  }\n}\n\nfunction supportsFastNumbers(loc) {\n  if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n    return false;\n  } else {\n    return (\n      loc.numberingSystem === \"latn\" ||\n      !loc.locale ||\n      loc.locale.startsWith(\"en\") ||\n      new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\"\n    );\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n  constructor(intl, forceSimple, opts) {\n    this.padTo = opts.padTo || 0;\n    this.floor = opts.floor || false;\n\n    const { padTo, floor, ...otherOpts } = opts;\n\n    if (!forceSimple || Object.keys(otherOpts).length > 0) {\n      const intlOpts = { useGrouping: false, ...opts };\n      if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n      this.inf = getCachedINF(intl, intlOpts);\n    }\n  }\n\n  format(i) {\n    if (this.inf) {\n      const fixed = this.floor ? Math.floor(i) : i;\n      return this.inf.format(fixed);\n    } else {\n      // to match the browser's numberformatter defaults\n      const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n      return padStart(fixed, this.padTo);\n    }\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n  constructor(dt, intl, opts) {\n    this.opts = opts;\n\n    let z;\n    if (dt.zone.isUniversal) {\n      // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n      // That is why fixed-offset TZ is set to that unless it is:\n      // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n      // 2. Unsupported by the browser:\n      //    - some do not support Etc/\n      //    - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n      const gmtOffset = -1 * (dt.offset / 60);\n      const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n      if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n        z = offsetZ;\n        this.dt = dt;\n      } else {\n        // Not all fixed-offset zones like Etc/+4:30 are present in tzdata.\n        // So we have to make do. Two cases:\n        // 1. The format options tell us to show the zone. We can't do that, so the best\n        // we can do is format the date in UTC.\n        // 2. The format options don't tell us to show the zone. Then we can adjust them\n        // the time and tell the formatter to show it to us in UTC, so that the time is right\n        // and the bad zone doesn't show up.\n        z = \"UTC\";\n        if (opts.timeZoneName) {\n          this.dt = dt;\n        } else {\n          this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000);\n        }\n      }\n    } else if (dt.zone.type === \"system\") {\n      this.dt = dt;\n    } else {\n      this.dt = dt;\n      z = dt.zone.name;\n    }\n\n    const intlOpts = { ...this.opts };\n    if (z) {\n      intlOpts.timeZone = z;\n    }\n    this.dtf = getCachedDTF(intl, intlOpts);\n  }\n\n  format() {\n    return this.dtf.format(this.dt.toJSDate());\n  }\n\n  formatToParts() {\n    return this.dtf.formatToParts(this.dt.toJSDate());\n  }\n\n  resolvedOptions() {\n    return this.dtf.resolvedOptions();\n  }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n  constructor(intl, isEnglish, opts) {\n    this.opts = { style: \"long\", ...opts };\n    if (!isEnglish && hasRelative()) {\n      this.rtf = getCachedRTF(intl, opts);\n    }\n  }\n\n  format(count, unit) {\n    if (this.rtf) {\n      return this.rtf.format(count, unit);\n    } else {\n      return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n    }\n  }\n\n  formatToParts(count, unit) {\n    if (this.rtf) {\n      return this.rtf.formatToParts(count, unit);\n    } else {\n      return [];\n    }\n  }\n}\n\n/**\n * @private\n */\n\nexport default class Locale {\n  static fromOpts(opts) {\n    return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);\n  }\n\n  static create(locale, numberingSystem, outputCalendar, defaultToEN = false) {\n    const specifiedLocale = locale || Settings.defaultLocale;\n    // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n    const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n    const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n    const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n    return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);\n  }\n\n  static resetCache() {\n    sysLocaleCache = null;\n    intlDTCache = {};\n    intlNumCache = {};\n    intlRelCache = {};\n  }\n\n  static fromObject({ locale, numberingSystem, outputCalendar } = {}) {\n    return Locale.create(locale, numberingSystem, outputCalendar);\n  }\n\n  constructor(locale, numbering, outputCalendar, specifiedLocale) {\n    const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n    this.locale = parsedLocale;\n    this.numberingSystem = numbering || parsedNumberingSystem || null;\n    this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n    this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n    this.weekdaysCache = { format: {}, standalone: {} };\n    this.monthsCache = { format: {}, standalone: {} };\n    this.meridiemCache = null;\n    this.eraCache = {};\n\n    this.specifiedLocale = specifiedLocale;\n    this.fastNumbersCached = null;\n  }\n\n  get fastNumbers() {\n    if (this.fastNumbersCached == null) {\n      this.fastNumbersCached = supportsFastNumbers(this);\n    }\n\n    return this.fastNumbersCached;\n  }\n\n  listingMode() {\n    const isActuallyEn = this.isEnglish();\n    const hasNoWeirdness =\n      (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n      (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n    return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n  }\n\n  clone(alts) {\n    if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n      return this;\n    } else {\n      return Locale.create(\n        alts.locale || this.specifiedLocale,\n        alts.numberingSystem || this.numberingSystem,\n        alts.outputCalendar || this.outputCalendar,\n        alts.defaultToEN || false\n      );\n    }\n  }\n\n  redefaultToEN(alts = {}) {\n    return this.clone({ ...alts, defaultToEN: true });\n  }\n\n  redefaultToSystem(alts = {}) {\n    return this.clone({ ...alts, defaultToEN: false });\n  }\n\n  months(length, format = false, defaultOK = true) {\n    return listStuff(this, length, defaultOK, English.months, () => {\n      const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.monthsCache[formatStr][length]) {\n        this.monthsCache[formatStr][length] = mapMonths((dt) => this.extract(dt, intl, \"month\"));\n      }\n      return this.monthsCache[formatStr][length];\n    });\n  }\n\n  weekdays(length, format = false, defaultOK = true) {\n    return listStuff(this, length, defaultOK, English.weekdays, () => {\n      const intl = format\n          ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n          : { weekday: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.weekdaysCache[formatStr][length]) {\n        this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n          this.extract(dt, intl, \"weekday\")\n        );\n      }\n      return this.weekdaysCache[formatStr][length];\n    });\n  }\n\n  meridiems(defaultOK = true) {\n    return listStuff(\n      this,\n      undefined,\n      defaultOK,\n      () => English.meridiems,\n      () => {\n        // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n        // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n        if (!this.meridiemCache) {\n          const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n          this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n            (dt) => this.extract(dt, intl, \"dayperiod\")\n          );\n        }\n\n        return this.meridiemCache;\n      }\n    );\n  }\n\n  eras(length, defaultOK = true) {\n    return listStuff(this, length, defaultOK, English.eras, () => {\n      const intl = { era: length };\n\n      // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n      // to definitely enumerate them.\n      if (!this.eraCache[length]) {\n        this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n          this.extract(dt, intl, \"era\")\n        );\n      }\n\n      return this.eraCache[length];\n    });\n  }\n\n  extract(dt, intlOpts, field) {\n    const df = this.dtFormatter(dt, intlOpts),\n      results = df.formatToParts(),\n      matching = results.find((m) => m.type.toLowerCase() === field);\n    return matching ? matching.value : null;\n  }\n\n  numberFormatter(opts = {}) {\n    // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n    // (in contrast, the rest of the condition is used heavily)\n    return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n  }\n\n  dtFormatter(dt, intlOpts = {}) {\n    return new PolyDateFormatter(dt, this.intl, intlOpts);\n  }\n\n  relFormatter(opts = {}) {\n    return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n  }\n\n  listFormatter(opts = {}) {\n    return getCachedLF(this.intl, opts);\n  }\n\n  isEnglish() {\n    return (\n      this.locale === \"en\" ||\n      this.locale.toLowerCase() === \"en-us\" ||\n      new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\")\n    );\n  }\n\n  equals(other) {\n    return (\n      this.locale === other.locale &&\n      this.numberingSystem === other.numberingSystem &&\n      this.outputCalendar === other.outputCalendar\n    );\n  }\n}\n","import {\n  untruncateYear,\n  signedOffset,\n  parseInteger,\n  parseMillis,\n  ianaRegex,\n  isUndefined,\n  parseFloating\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nfunction combineRegexes(...regexes) {\n  const full = regexes.reduce((f, r) => f + r.source, \"\");\n  return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n  return m =>\n    extractors\n      .reduce(\n        ([mergedVals, mergedZone, cursor], ex) => {\n          const [val, zone, next] = ex(m, cursor);\n          return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n        },\n        [{}, null, 1]\n      )\n      .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n  if (s == null) {\n    return [null, null];\n  }\n\n  for (const [regex, extractor] of patterns) {\n    const m = regex.exec(s);\n    if (m) {\n      return extractor(m);\n    }\n  }\n  return [null, null];\n}\n\nfunction simpleParse(...keys) {\n  return (match, cursor) => {\n    const ret = {};\n    let i;\n\n    for (i = 0; i < keys.length; i++) {\n      ret[keys[i]] = parseInteger(match[cursor + i]);\n    }\n    return [ret, null, cursor + i];\n  };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n  `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n  const m = match[pos];\n  return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n  const item = {\n    year: int(match, cursor),\n    month: int(match, cursor + 1, 1),\n    day: int(match, cursor + 2, 1)\n  };\n\n  return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n  const item = {\n    hours: int(match, cursor, 0),\n    minutes: int(match, cursor + 1, 0),\n    seconds: int(match, cursor + 2, 0),\n    milliseconds: parseMillis(match[cursor + 3])\n  };\n\n  return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n  const local = !match[cursor] && !match[cursor + 1],\n    fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n    zone = local ? null : FixedOffsetZone.instance(fullOffset);\n  return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n  const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n  return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration = /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n  const [\n    s,\n    yearStr,\n    monthStr,\n    weekStr,\n    dayStr,\n    hourStr,\n    minuteStr,\n    secondStr,\n    millisecondsStr\n  ] = match;\n\n  const hasNegativePrefix = s[0] === \"-\";\n  const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n  const maybeNegate = (num, force = false) =>\n    num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n  return [\n    {\n      years: maybeNegate(parseFloating(yearStr)),\n      months: maybeNegate(parseFloating(monthStr)),\n      weeks: maybeNegate(parseFloating(weekStr)),\n      days: maybeNegate(parseFloating(dayStr)),\n      hours: maybeNegate(parseFloating(hourStr)),\n      minutes: maybeNegate(parseFloating(minuteStr)),\n      seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n      milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds)\n    }\n  ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n  GMT: 0,\n  EDT: -4 * 60,\n  EST: -5 * 60,\n  CDT: -5 * 60,\n  CST: -6 * 60,\n  MDT: -6 * 60,\n  MST: -7 * 60,\n  PDT: -7 * 60,\n  PST: -8 * 60\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n  const result = {\n    year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n    month: English.monthsShort.indexOf(monthStr) + 1,\n    day: parseInteger(dayStr),\n    hour: parseInteger(hourStr),\n    minute: parseInteger(minuteStr)\n  };\n\n  if (secondStr) result.second = parseInteger(secondStr);\n  if (weekdayStr) {\n    result.weekday =\n      weekdayStr.length > 3\n        ? English.weekdaysLong.indexOf(weekdayStr) + 1\n        : English.weekdaysShort.indexOf(weekdayStr) + 1;\n  }\n\n  return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n  const [\n      ,\n      weekdayStr,\n      dayStr,\n      monthStr,\n      yearStr,\n      hourStr,\n      minuteStr,\n      secondStr,\n      obsOffset,\n      milOffset,\n      offHourStr,\n      offMinuteStr\n    ] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n  let offset;\n  if (obsOffset) {\n    offset = obsOffsets[obsOffset];\n  } else if (milOffset) {\n    offset = 0;\n  } else {\n    offset = signedOffset(offHourStr, offMinuteStr);\n  }\n\n  return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n  // Remove comments and folding whitespace and replace multiple-spaces with a single space\n  return s\n    .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n    .replace(/(\\s\\s+)/g, \" \")\n    .trim();\n}\n\n// http date\n\nconst rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n  rfc850 = /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n  ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n  const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n  const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n  extractISOYmd,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n  extractISOWeekData,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n  extractISOOrdinalData,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n  return parse(\n    s,\n    [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n    [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n    [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n    [isoTimeCombinedRegex, extractISOTimeAndOffset]\n  );\n}\n\nexport function parseRFC2822Date(s) {\n  return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n  return parse(\n    s,\n    [rfc1123, extractRFC1123Or850],\n    [rfc850, extractRFC1123Or850],\n    [ascii, extractASCII]\n  );\n}\n\nexport function parseISODuration(s) {\n  return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n  return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\n\nexport function parseSQL(s) {\n  return parse(\n    s,\n    [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n    [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n  );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n  asNumber,\n  hasOwnProperty,\n  isNumber,\n  isUndefined,\n  normalizeObject,\n  roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n    weeks: {\n      days: 7,\n      hours: 7 * 24,\n      minutes: 7 * 24 * 60,\n      seconds: 7 * 24 * 60 * 60,\n      milliseconds: 7 * 24 * 60 * 60 * 1000,\n    },\n    days: {\n      hours: 24,\n      minutes: 24 * 60,\n      seconds: 24 * 60 * 60,\n      milliseconds: 24 * 60 * 60 * 1000,\n    },\n    hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n    minutes: { seconds: 60, milliseconds: 60 * 1000 },\n    seconds: { milliseconds: 1000 },\n  },\n  casualMatrix = {\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: 52,\n      days: 365,\n      hours: 365 * 24,\n      minutes: 365 * 24 * 60,\n      seconds: 365 * 24 * 60 * 60,\n      milliseconds: 365 * 24 * 60 * 60 * 1000,\n    },\n    quarters: {\n      months: 3,\n      weeks: 13,\n      days: 91,\n      hours: 91 * 24,\n      minutes: 91 * 24 * 60,\n      seconds: 91 * 24 * 60 * 60,\n      milliseconds: 91 * 24 * 60 * 60 * 1000,\n    },\n    months: {\n      weeks: 4,\n      days: 30,\n      hours: 30 * 24,\n      minutes: 30 * 24 * 60,\n      seconds: 30 * 24 * 60 * 60,\n      milliseconds: 30 * 24 * 60 * 60 * 1000,\n    },\n\n    ...lowOrderMatrix,\n  },\n  daysInYearAccurate = 146097.0 / 400,\n  daysInMonthAccurate = 146097.0 / 4800,\n  accurateMatrix = {\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: daysInYearAccurate / 7,\n      days: daysInYearAccurate,\n      hours: daysInYearAccurate * 24,\n      minutes: daysInYearAccurate * 24 * 60,\n      seconds: daysInYearAccurate * 24 * 60 * 60,\n      milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n    },\n    quarters: {\n      months: 3,\n      weeks: daysInYearAccurate / 28,\n      days: daysInYearAccurate / 4,\n      hours: (daysInYearAccurate * 24) / 4,\n      minutes: (daysInYearAccurate * 24 * 60) / 4,\n      seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n      milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n    },\n    months: {\n      weeks: daysInMonthAccurate / 7,\n      days: daysInMonthAccurate,\n      hours: daysInMonthAccurate * 24,\n      minutes: daysInMonthAccurate * 24 * 60,\n      seconds: daysInMonthAccurate * 24 * 60 * 60,\n      milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n    },\n    ...lowOrderMatrix,\n  };\n\n// units ordered by size\nconst orderedUnits = [\n  \"years\",\n  \"quarters\",\n  \"months\",\n  \"weeks\",\n  \"days\",\n  \"hours\",\n  \"minutes\",\n  \"seconds\",\n  \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n  // deep merge for vals\n  const conf = {\n    values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n    loc: dur.loc.clone(alts.loc),\n    conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n  };\n  return new Duration(conf);\n}\n\nfunction antiTrunc(n) {\n  return n < 0 ? Math.floor(n) : Math.ceil(n);\n}\n\n// NB: mutates parameters\nfunction convert(matrix, fromMap, fromUnit, toMap, toUnit) {\n  const conv = matrix[toUnit][fromUnit],\n    raw = fromMap[fromUnit] / conv,\n    sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]),\n    // ok, so this is wild, but see the matrix in the tests\n    added =\n      !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw);\n  toMap[toUnit] += added;\n  fromMap[fromUnit] -= added * conv;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n  reverseUnits.reduce((previous, current) => {\n    if (!isUndefined(vals[current])) {\n      if (previous) {\n        convert(matrix, vals, previous, vals, current);\n      }\n      return current;\n    } else {\n      return previous;\n    }\n  }, null);\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration#fromMillis}, {@link Duration#fromObject}, or {@link Duration#fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See  {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n  /**\n   * @private\n   */\n  constructor(config) {\n    const accurate = config.conversionAccuracy === \"longterm\" || false;\n    /**\n     * @access private\n     */\n    this.values = config.values;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.matrix = accurate ? accurateMatrix : casualMatrix;\n    /**\n     * @access private\n     */\n    this.isLuxonDuration = true;\n  }\n\n  /**\n   * Create Duration from a number of milliseconds.\n   * @param {number} count of milliseconds\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  static fromMillis(count, opts) {\n    return Duration.fromObject({ milliseconds: count }, opts);\n  }\n\n  /**\n   * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n   * If this object is empty then a zero milliseconds duration is returned.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.years\n   * @param {number} obj.quarters\n   * @param {number} obj.months\n   * @param {number} obj.weeks\n   * @param {number} obj.days\n   * @param {number} obj.hours\n   * @param {number} obj.minutes\n   * @param {number} obj.seconds\n   * @param {number} obj.milliseconds\n   * @param {Object} [opts=[]] - options for creating this Duration\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  static fromObject(obj, opts = {}) {\n    if (obj == null || typeof obj !== \"object\") {\n      throw new InvalidArgumentError(\n        `Duration.fromObject: argument expected to be an object, got ${\n          obj === null ? \"null\" : typeof obj\n        }`\n      );\n    }\n\n    return new Duration({\n      values: normalizeObject(obj, Duration.normalizeUnit),\n      loc: Locale.fromObject(opts),\n      conversionAccuracy: opts.conversionAccuracy,\n    });\n  }\n\n  /**\n   * Create a Duration from DurationLike.\n   *\n   * @param {Object | number | Duration} durationLike\n   * One of:\n   * - object with keys like 'years' and 'hours'.\n   * - number representing milliseconds\n   * - Duration instance\n   * @return {Duration}\n   */\n  static fromDurationLike(durationLike) {\n    if (isNumber(durationLike)) {\n      return Duration.fromMillis(durationLike);\n    } else if (Duration.isDuration(durationLike)) {\n      return durationLike;\n    } else if (typeof durationLike === \"object\") {\n      return Duration.fromObject(durationLike);\n    } else {\n      throw new InvalidArgumentError(\n        `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n      );\n    }\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 duration string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n   * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n   * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n   * @return {Duration}\n   */\n  static fromISO(text, opts) {\n    const [parsed] = parseISODuration(text);\n    if (parsed) {\n      return Duration.fromObject(parsed, opts);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 time string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n   * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @return {Duration}\n   */\n  static fromISOTime(text, opts) {\n    const [parsed] = parseISOTimeOnly(text);\n    if (parsed) {\n      return Duration.fromObject(parsed, opts);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create an invalid Duration.\n   * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Duration}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDurationError(invalid);\n    } else {\n      return new Duration({ invalid });\n    }\n  }\n\n  /**\n   * @private\n   */\n  static normalizeUnit(unit) {\n    const normalized = {\n      year: \"years\",\n      years: \"years\",\n      quarter: \"quarters\",\n      quarters: \"quarters\",\n      month: \"months\",\n      months: \"months\",\n      week: \"weeks\",\n      weeks: \"weeks\",\n      day: \"days\",\n      days: \"days\",\n      hour: \"hours\",\n      hours: \"hours\",\n      minute: \"minutes\",\n      minutes: \"minutes\",\n      second: \"seconds\",\n      seconds: \"seconds\",\n      millisecond: \"milliseconds\",\n      milliseconds: \"milliseconds\",\n    }[unit ? unit.toLowerCase() : unit];\n\n    if (!normalized) throw new InvalidUnitError(unit);\n\n    return normalized;\n  }\n\n  /**\n   * Check if an object is a Duration. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDuration(o) {\n    return (o && o.isLuxonDuration) || false;\n  }\n\n  /**\n   * Get  the locale of a Duration, such 'en-GB'\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n   * * `S` for milliseconds\n   * * `s` for seconds\n   * * `m` for minutes\n   * * `h` for hours\n   * * `d` for days\n   * * `w` for weeks\n   * * `M` for months\n   * * `y` for years\n   * Notes:\n   * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n   * * Tokens can be escaped by wrapping with single quotes.\n   * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - options\n   * @param {boolean} [opts.floor=true] - floor numerical values\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n    const fmtOpts = {\n      ...opts,\n      floor: opts.round !== false && opts.floor !== false,\n    };\n    return this.isValid\n      ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a string representation of a Duration with all units included.\n   * To modify its behavior use the `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat\n   * @param opts - On option object to override the formatting. Accepts the same keys as the options parameter of the native `Int.NumberFormat` constructor, as well as `listStyle`.\n   * @example\n   * ```js\n   * var dur = Duration.fromObject({ days: 1, hours: 5, minutes: 6 })\n   * dur.toHuman() //=> '1 day, 5 hours, 6 minutes'\n   * dur.toHuman({ listStyle: \"long\" }) //=> '1 day, 5 hours, and 6 minutes'\n   * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 day, 5 hr, 6 min'\n   * ```\n   */\n  toHuman(opts = {}) {\n    const l = orderedUnits\n      .map((unit) => {\n        const val = this.values[unit];\n        if (isUndefined(val)) {\n          return null;\n        }\n        return this.loc\n          .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n          .format(val);\n      })\n      .filter((n) => n);\n\n    return this.loc\n      .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n      .format(l);\n  }\n\n  /**\n   * Returns a JavaScript object with this Duration's values.\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n   * @return {Object}\n   */\n  toObject() {\n    if (!this.isValid) return {};\n    return { ...this.values };\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n   * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n   * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n   * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n   * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n   * @return {string}\n   */\n  toISO() {\n    // we could use the formatter, but this is an easier way to get the minimum string\n    if (!this.isValid) return null;\n\n    let s = \"P\";\n    if (this.years !== 0) s += this.years + \"Y\";\n    if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n    if (this.weeks !== 0) s += this.weeks + \"W\";\n    if (this.days !== 0) s += this.days + \"D\";\n    if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n      s += \"T\";\n    if (this.hours !== 0) s += this.hours + \"H\";\n    if (this.minutes !== 0) s += this.minutes + \"M\";\n    if (this.seconds !== 0 || this.milliseconds !== 0)\n      // this will handle \"floating point madness\" by removing extra decimal places\n      // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n      s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n    if (s === \"P\") s += \"T0S\";\n    return s;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n   * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n   * @return {string}\n   */\n  toISOTime(opts = {}) {\n    if (!this.isValid) return null;\n\n    const millis = this.toMillis();\n    if (millis < 0 || millis >= 86400000) return null;\n\n    opts = {\n      suppressMilliseconds: false,\n      suppressSeconds: false,\n      includePrefix: false,\n      format: \"extended\",\n      ...opts,\n    };\n\n    const value = this.shiftTo(\"hours\", \"minutes\", \"seconds\", \"milliseconds\");\n\n    let fmt = opts.format === \"basic\" ? \"hhmm\" : \"hh:mm\";\n\n    if (!opts.suppressSeconds || value.seconds !== 0 || value.milliseconds !== 0) {\n      fmt += opts.format === \"basic\" ? \"ss\" : \":ss\";\n      if (!opts.suppressMilliseconds || value.milliseconds !== 0) {\n        fmt += \".SSS\";\n      }\n    }\n\n    let str = value.toFormat(fmt);\n\n    if (opts.includePrefix) {\n      str = \"T\" + str;\n    }\n\n    return str;\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n   * @return {string}\n   */\n  toString() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration.\n   * @return {number}\n   */\n  toMillis() {\n    return this.as(\"milliseconds\");\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = Duration.fromDurationLike(duration),\n      result = {};\n\n    for (const k of orderedUnits) {\n      if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n        result[k] = dur.get(k) + this.get(k);\n      }\n    }\n\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  minus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = Duration.fromDurationLike(duration);\n    return this.plus(dur.negate());\n  }\n\n  /**\n   * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n   * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hour\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n   * @return {Duration}\n   */\n  mapUnits(fn) {\n    if (!this.isValid) return this;\n    const result = {};\n    for (const k of Object.keys(this.values)) {\n      result[k] = asNumber(fn(this.values[k], k));\n    }\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n   * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n   * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n   * @return {number}\n   */\n  get(unit) {\n    return this[Duration.normalizeUnit(unit)];\n  }\n\n  /**\n   * \"Set\" the values of specified units. Return a newly-constructed Duration.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dur.set({ years: 2017 })\n   * @example dur.set({ hours: 8, minutes: 30 })\n   * @return {Duration}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n    return clone(this, { values: mixed });\n  }\n\n  /**\n   * \"Set\" the locale and/or numberingSystem.  Returns a newly-constructed Duration.\n   * @example dur.reconfigure({ locale: 'en-GB' })\n   * @return {Duration}\n   */\n  reconfigure({ locale, numberingSystem, conversionAccuracy } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem }),\n      opts = { loc };\n\n    if (conversionAccuracy) {\n      opts.conversionAccuracy = conversionAccuracy;\n    }\n\n    return clone(this, opts);\n  }\n\n  /**\n   * Return the length of the duration in the specified unit.\n   * @param {string} unit - a unit such as 'minutes' or 'days'\n   * @example Duration.fromObject({years: 1}).as('days') //=> 365\n   * @example Duration.fromObject({years: 1}).as('months') //=> 12\n   * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n   * @return {number}\n   */\n  as(unit) {\n    return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n  }\n\n  /**\n   * Reduce this Duration to its canonical representation in its current units.\n   * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n   * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n   * @return {Duration}\n   */\n  normalize() {\n    if (!this.isValid) return this;\n    const vals = this.toObject();\n    normalizeValues(this.matrix, vals);\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Convert this Duration into its representation in a different set of units.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n   * @return {Duration}\n   */\n  shiftTo(...units) {\n    if (!this.isValid) return this;\n\n    if (units.length === 0) {\n      return this;\n    }\n\n    units = units.map((u) => Duration.normalizeUnit(u));\n\n    const built = {},\n      accumulated = {},\n      vals = this.toObject();\n    let lastUnit;\n\n    for (const k of orderedUnits) {\n      if (units.indexOf(k) >= 0) {\n        lastUnit = k;\n\n        let own = 0;\n\n        // anything we haven't boiled down yet should get boiled to this unit\n        for (const ak in accumulated) {\n          own += this.matrix[ak][k] * accumulated[ak];\n          accumulated[ak] = 0;\n        }\n\n        // plus anything that's already in this unit\n        if (isNumber(vals[k])) {\n          own += vals[k];\n        }\n\n        const i = Math.trunc(own);\n        built[k] = i;\n        accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n        // plus anything further down the chain that should be rolled up in to this\n        for (const down in vals) {\n          if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {\n            convert(this.matrix, vals, down, built, k);\n          }\n        }\n        // otherwise, keep it in the wings to boil it later\n      } else if (isNumber(vals[k])) {\n        accumulated[k] = vals[k];\n      }\n    }\n\n    // anything leftover becomes the decimal for the last unit\n    // lastUnit must be defined since units is not empty\n    for (const key in accumulated) {\n      if (accumulated[key] !== 0) {\n        built[lastUnit] +=\n          key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n      }\n    }\n\n    return clone(this, { values: built }, true).normalize();\n  }\n\n  /**\n   * Return the negative of this Duration.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n   * @return {Duration}\n   */\n  negate() {\n    if (!this.isValid) return this;\n    const negated = {};\n    for (const k of Object.keys(this.values)) {\n      negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n    }\n    return clone(this, { values: negated }, true);\n  }\n\n  /**\n   * Get the years.\n   * @type {number}\n   */\n  get years() {\n    return this.isValid ? this.values.years || 0 : NaN;\n  }\n\n  /**\n   * Get the quarters.\n   * @type {number}\n   */\n  get quarters() {\n    return this.isValid ? this.values.quarters || 0 : NaN;\n  }\n\n  /**\n   * Get the months.\n   * @type {number}\n   */\n  get months() {\n    return this.isValid ? this.values.months || 0 : NaN;\n  }\n\n  /**\n   * Get the weeks\n   * @type {number}\n   */\n  get weeks() {\n    return this.isValid ? this.values.weeks || 0 : NaN;\n  }\n\n  /**\n   * Get the days.\n   * @type {number}\n   */\n  get days() {\n    return this.isValid ? this.values.days || 0 : NaN;\n  }\n\n  /**\n   * Get the hours.\n   * @type {number}\n   */\n  get hours() {\n    return this.isValid ? this.values.hours || 0 : NaN;\n  }\n\n  /**\n   * Get the minutes.\n   * @type {number}\n   */\n  get minutes() {\n    return this.isValid ? this.values.minutes || 0 : NaN;\n  }\n\n  /**\n   * Get the seconds.\n   * @return {number}\n   */\n  get seconds() {\n    return this.isValid ? this.values.seconds || 0 : NaN;\n  }\n\n  /**\n   * Get the milliseconds.\n   * @return {number}\n   */\n  get milliseconds() {\n    return this.isValid ? this.values.milliseconds || 0 : NaN;\n  }\n\n  /**\n   * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n   * on invalid DateTimes or Intervals.\n   * @return {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this Duration became invalid, or null if the Duration is valid\n   * @return {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Equality check\n   * Two Durations are equal iff they have the same units and the same values for each unit.\n   * @param {Duration} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    if (!this.loc.equals(other.loc)) {\n      return false;\n    }\n\n    function eq(v1, v2) {\n      // Consider 0 and undefined as equal\n      if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n      return v1 === v2;\n    }\n\n    for (const u of orderedUnits) {\n      if (!eq(this.values[u], other.values[u])) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n  if (!start || !start.isValid) {\n    return Interval.invalid(\"missing or invalid start\");\n  } else if (!end || !end.isValid) {\n    return Interval.invalid(\"missing or invalid end\");\n  } else if (end < start) {\n    return Interval.invalid(\n      \"end before start\",\n      `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n    );\n  } else {\n    return null;\n  }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval#fromDateTimes}, {@link Interval#after}, {@link Interval#before}, or {@link Interval#fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval#merge}, {@link Interval#xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n  /**\n   * @private\n   */\n  constructor(config) {\n    /**\n     * @access private\n     */\n    this.s = config.start;\n    /**\n     * @access private\n     */\n    this.e = config.end;\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.isLuxonInterval = true;\n  }\n\n  /**\n   * Create an invalid Interval.\n   * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Interval}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidIntervalError(invalid);\n    } else {\n      return new Interval({ invalid });\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n   * @param {DateTime|Date|Object} start\n   * @param {DateTime|Date|Object} end\n   * @return {Interval}\n   */\n  static fromDateTimes(start, end) {\n    const builtStart = friendlyDateTime(start),\n      builtEnd = friendlyDateTime(end);\n\n    const validateError = validateStartEnd(builtStart, builtEnd);\n\n    if (validateError == null) {\n      return new Interval({\n        start: builtStart,\n        end: builtEnd,\n      });\n    } else {\n      return validateError;\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and a Duration to extend to.\n   * @param {DateTime|Date|Object} start\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static after(start, duration) {\n    const dur = Duration.fromDurationLike(duration),\n      dt = friendlyDateTime(start);\n    return Interval.fromDateTimes(dt, dt.plus(dur));\n  }\n\n  /**\n   * Create an Interval from an end DateTime and a Duration to extend backwards to.\n   * @param {DateTime|Date|Object} end\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static before(end, duration) {\n    const dur = Duration.fromDurationLike(duration),\n      dt = friendlyDateTime(end);\n    return Interval.fromDateTimes(dt.minus(dur), dt);\n  }\n\n  /**\n   * Create an Interval from an ISO 8601 string.\n   * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n   * @param {string} text - the ISO string to parse\n   * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {Interval}\n   */\n  static fromISO(text, opts) {\n    const [s, e] = (text || \"\").split(\"/\", 2);\n    if (s && e) {\n      let start, startIsValid;\n      try {\n        start = DateTime.fromISO(s, opts);\n        startIsValid = start.isValid;\n      } catch (e) {\n        startIsValid = false;\n      }\n\n      let end, endIsValid;\n      try {\n        end = DateTime.fromISO(e, opts);\n        endIsValid = end.isValid;\n      } catch (e) {\n        endIsValid = false;\n      }\n\n      if (startIsValid && endIsValid) {\n        return Interval.fromDateTimes(start, end);\n      }\n\n      if (startIsValid) {\n        const dur = Duration.fromISO(e, opts);\n        if (dur.isValid) {\n          return Interval.after(start, dur);\n        }\n      } else if (endIsValid) {\n        const dur = Duration.fromISO(s, opts);\n        if (dur.isValid) {\n          return Interval.before(end, dur);\n        }\n      }\n    }\n    return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n  }\n\n  /**\n   * Check if an object is an Interval. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isInterval(o) {\n    return (o && o.isLuxonInterval) || false;\n  }\n\n  /**\n   * Returns the start of the Interval\n   * @type {DateTime}\n   */\n  get start() {\n    return this.isValid ? this.s : null;\n  }\n\n  /**\n   * Returns the end of the Interval\n   * @type {DateTime}\n   */\n  get end() {\n    return this.isValid ? this.e : null;\n  }\n\n  /**\n   * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalidReason === null;\n  }\n\n  /**\n   * Returns an error code if this Interval is invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Returns the length of the Interval in the specified unit.\n   * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n   * @return {number}\n   */\n  length(unit = \"milliseconds\") {\n    return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n  }\n\n  /**\n   * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n   * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n   * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n   * @param {string} [unit='milliseconds'] - the unit of time to count.\n   * @return {number}\n   */\n  count(unit = \"milliseconds\") {\n    if (!this.isValid) return NaN;\n    const start = this.start.startOf(unit),\n      end = this.end.startOf(unit);\n    return Math.floor(end.diff(start, unit).get(unit)) + 1;\n  }\n\n  /**\n   * Returns whether this Interval's start and end are both in the same unit of time\n   * @param {string} unit - the unit of time to check sameness on\n   * @return {boolean}\n   */\n  hasSame(unit) {\n    return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end DateTimes.\n   * @return {boolean}\n   */\n  isEmpty() {\n    return this.s.valueOf() === this.e.valueOf();\n  }\n\n  /**\n   * Return whether this Interval's start is after the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isAfter(dateTime) {\n    if (!this.isValid) return false;\n    return this.s > dateTime;\n  }\n\n  /**\n   * Return whether this Interval's end is before the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isBefore(dateTime) {\n    if (!this.isValid) return false;\n    return this.e <= dateTime;\n  }\n\n  /**\n   * Return whether this Interval contains the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  contains(dateTime) {\n    if (!this.isValid) return false;\n    return this.s <= dateTime && this.e > dateTime;\n  }\n\n  /**\n   * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n   * @param {Object} values - the values to set\n   * @param {DateTime} values.start - the starting DateTime\n   * @param {DateTime} values.end - the ending DateTime\n   * @return {Interval}\n   */\n  set({ start, end } = {}) {\n    if (!this.isValid) return this;\n    return Interval.fromDateTimes(start || this.s, end || this.e);\n  }\n\n  /**\n   * Split this Interval at each of the specified DateTimes\n   * @param {...DateTime} dateTimes - the unit of time to count.\n   * @return {Array}\n   */\n  splitAt(...dateTimes) {\n    if (!this.isValid) return [];\n    const sorted = dateTimes\n        .map(friendlyDateTime)\n        .filter((d) => this.contains(d))\n        .sort(),\n      results = [];\n    let { s } = this,\n      i = 0;\n\n    while (s < this.e) {\n      const added = sorted[i] || this.e,\n        next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      i += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into smaller Intervals, each of the specified length.\n   * Left over time is grouped into a smaller interval\n   * @param {Duration|Object|number} duration - The length of each resulting interval.\n   * @return {Array}\n   */\n  splitBy(duration) {\n    const dur = Duration.fromDurationLike(duration);\n\n    if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n      return [];\n    }\n\n    let { s } = this,\n      idx = 1,\n      next;\n\n    const results = [];\n    while (s < this.e) {\n      const added = this.start.plus(dur.mapUnits((x) => x * idx));\n      next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      idx += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into the specified number of smaller intervals.\n   * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n   * @return {Array}\n   */\n  divideEqually(numberOfParts) {\n    if (!this.isValid) return [];\n    return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n  }\n\n  /**\n   * Return whether this Interval overlaps with the specified Interval\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  overlaps(other) {\n    return this.e > other.s && this.s < other.e;\n  }\n\n  /**\n   * Return whether this Interval's end is adjacent to the specified Interval's start.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsStart(other) {\n    if (!this.isValid) return false;\n    return +this.e === +other.s;\n  }\n\n  /**\n   * Return whether this Interval's start is adjacent to the specified Interval's end.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsEnd(other) {\n    if (!this.isValid) return false;\n    return +other.e === +this.s;\n  }\n\n  /**\n   * Return whether this Interval engulfs the start and end of the specified Interval.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  engulfs(other) {\n    if (!this.isValid) return false;\n    return this.s <= other.s && this.e >= other.e;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end as the specified Interval.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    return this.s.equals(other.s) && this.e.equals(other.e);\n  }\n\n  /**\n   * Return an Interval representing the intersection of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n   * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  intersection(other) {\n    if (!this.isValid) return this;\n    const s = this.s > other.s ? this.s : other.s,\n      e = this.e < other.e ? this.e : other.e;\n\n    if (s >= e) {\n      return null;\n    } else {\n      return Interval.fromDateTimes(s, e);\n    }\n  }\n\n  /**\n   * Return an Interval representing the union of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  union(other) {\n    if (!this.isValid) return this;\n    const s = this.s < other.s ? this.s : other.s,\n      e = this.e > other.e ? this.e : other.e;\n    return Interval.fromDateTimes(s, e);\n  }\n\n  /**\n   * Merge an array of Intervals into a equivalent minimal set of Intervals.\n   * Combines overlapping and adjacent Intervals.\n   * @param {Array} intervals\n   * @return {Array}\n   */\n  static merge(intervals) {\n    const [found, final] = intervals\n      .sort((a, b) => a.s - b.s)\n      .reduce(\n        ([sofar, current], item) => {\n          if (!current) {\n            return [sofar, item];\n          } else if (current.overlaps(item) || current.abutsStart(item)) {\n            return [sofar, current.union(item)];\n          } else {\n            return [sofar.concat([current]), item];\n          }\n        },\n        [[], null]\n      );\n    if (final) {\n      found.push(final);\n    }\n    return found;\n  }\n\n  /**\n   * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n   * @param {Array} intervals\n   * @return {Array}\n   */\n  static xor(intervals) {\n    let start = null,\n      currentCount = 0;\n    const results = [],\n      ends = intervals.map((i) => [\n        { time: i.s, type: \"s\" },\n        { time: i.e, type: \"e\" },\n      ]),\n      flattened = Array.prototype.concat(...ends),\n      arr = flattened.sort((a, b) => a.time - b.time);\n\n    for (const i of arr) {\n      currentCount += i.type === \"s\" ? 1 : -1;\n\n      if (currentCount === 1) {\n        start = i.time;\n      } else {\n        if (start && +start !== +i.time) {\n          results.push(Interval.fromDateTimes(start, i.time));\n        }\n\n        start = null;\n      }\n    }\n\n    return Interval.merge(results);\n  }\n\n  /**\n   * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n   * @param {...Interval} intervals\n   * @return {Array}\n   */\n  difference(...intervals) {\n    return Interval.xor([this].concat(intervals))\n      .map((i) => this.intersection(i))\n      .filter((i) => i && !i.isEmpty());\n  }\n\n  /**\n   * Returns a string representation of this Interval appropriate for debugging.\n   * @return {string}\n   */\n  toString() {\n    if (!this.isValid) return INVALID;\n    return `[${this.s.toISO()} – ${this.e.toISO()})`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Interval.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime#toISO}\n   * @return {string}\n   */\n  toISO(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of date of this Interval.\n   * The time components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {string}\n   */\n  toISODate() {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISODate()}/${this.e.toISODate()}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of time of this Interval.\n   * The date components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime#toISO}\n   * @return {string}\n   */\n  toISOTime(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this Interval formatted according to the specified format string.\n   * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime#toFormat} for details.\n   * @param {Object} opts - options\n   * @param {string} [opts.separator =  ' – '] - a separator to place between the start and end representations\n   * @return {string}\n   */\n  toFormat(dateFormat, { separator = \" – \" } = {}) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n  }\n\n  /**\n   * Return a Duration representing the time spanned by this interval.\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n   * @return {Duration}\n   */\n  toDuration(unit, opts) {\n    if (!this.isValid) {\n      return Duration.invalid(this.invalidReason);\n    }\n    return this.e.diff(this.s, unit, opts);\n  }\n\n  /**\n   * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n   * @param {function} mapFn\n   * @return {Interval}\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n   */\n  mapEndpoints(mapFn) {\n    return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n  }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n  /**\n   * Return whether the specified zone contains a DST.\n   * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n   * @return {boolean}\n   */\n  static hasDST(zone = Settings.defaultZone) {\n    const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n    return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n  }\n\n  /**\n   * Return whether the specified zone is a valid IANA specifier.\n   * @param {string} zone - Zone to check\n   * @return {boolean}\n   */\n  static isValidIANAZone(zone) {\n    return IANAZone.isValidZone(zone);\n  }\n\n  /**\n   * Converts the input into a {@link Zone} instance.\n   *\n   * * If `input` is already a Zone instance, it is returned unchanged.\n   * * If `input` is a string containing a valid time zone name, a Zone instance\n   *   with that name is returned.\n   * * If `input` is a string that doesn't refer to a known time zone, a Zone\n   *   instance with {@link Zone#isValid} == false is returned.\n   * * If `input is a number, a Zone instance with the specified fixed offset\n   *   in minutes is returned.\n   * * If `input` is `null` or `undefined`, the default zone is returned.\n   * @param {string|Zone|number} [input] - the value to be converted\n   * @return {Zone}\n   */\n  static normalizeZone(input) {\n    return normalizeZone(input, Settings.defaultZone);\n  }\n\n  /**\n   * Return an array of standalone month names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @example Info.months()[0] //=> 'January'\n   * @example Info.months('short')[0] //=> 'Jan'\n   * @example Info.months('numeric')[0] //=> '1'\n   * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n   * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n   * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n   * @return {Array}\n   */\n  static months(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n  }\n\n  /**\n   * Return an array of format month names.\n   * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n   * changes the string.\n   * See {@link Info#months}\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @return {Array}\n   */\n  static monthsFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n  }\n\n  /**\n   * Return an array of standalone week names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @example Info.weekdays()[0] //=> 'Monday'\n   * @example Info.weekdays('short')[0] //=> 'Mon'\n   * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n   * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n   * @return {Array}\n   */\n  static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n  }\n\n  /**\n   * Return an array of format week names.\n   * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n   * changes the string.\n   * See {@link Info#weekdays}\n   * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale=null] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @return {Array}\n   */\n  static weekdaysFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n  }\n\n  /**\n   * Return an array of meridiems.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n   * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n   * @return {Array}\n   */\n  static meridiems({ locale = null } = {}) {\n    return Locale.create(locale).meridiems();\n  }\n\n  /**\n   * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n   * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.eras() //=> [ 'BC', 'AD' ]\n   * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n   * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n   * @return {Array}\n   */\n  static eras(length = \"short\", { locale = null } = {}) {\n    return Locale.create(locale, null, \"gregory\").eras(length);\n  }\n\n  /**\n   * Return the set of available features in this environment.\n   * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n   * Keys:\n   * * `relative`: whether this environment supports relative time formatting\n   * @example Info.features() //=> { relative: false }\n   * @return {Object}\n   */\n  static features() {\n    return { relative: hasRelative() };\n  }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n  const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n    ms = utcDayStart(later) - utcDayStart(earlier);\n  return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n  const differs = [\n    [\"years\", (a, b) => b.year - a.year],\n    [\"quarters\", (a, b) => b.quarter - a.quarter],\n    [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n    [\n      \"weeks\",\n      (a, b) => {\n        const days = dayDiff(a, b);\n        return (days - (days % 7)) / 7;\n      },\n    ],\n    [\"days\", dayDiff],\n  ];\n\n  const results = {};\n  let lowestOrder, highWater;\n\n  for (const [unit, differ] of differs) {\n    if (units.indexOf(unit) >= 0) {\n      lowestOrder = unit;\n\n      let delta = differ(cursor, later);\n      highWater = cursor.plus({ [unit]: delta });\n\n      if (highWater > later) {\n        cursor = cursor.plus({ [unit]: delta - 1 });\n        delta -= 1;\n      } else {\n        cursor = highWater;\n      }\n\n      results[unit] = delta;\n    }\n  }\n\n  return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n  let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n  const remainingMillis = later - cursor;\n\n  const lowerOrderUnits = units.filter(\n    (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n  );\n\n  if (lowerOrderUnits.length === 0) {\n    if (highWater < later) {\n      highWater = cursor.plus({ [lowestOrder]: 1 });\n    }\n\n    if (highWater !== cursor) {\n      results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n    }\n  }\n\n  const duration = Duration.fromObject(results, opts);\n\n  if (lowerOrderUnits.length > 0) {\n    return Duration.fromMillis(remainingMillis, opts)\n      .shiftTo(...lowerOrderUnits)\n      .plus(duration);\n  } else {\n    return duration;\n  }\n}\n","const numberingSystems = {\n  arab: \"[\\u0660-\\u0669]\",\n  arabext: \"[\\u06F0-\\u06F9]\",\n  bali: \"[\\u1B50-\\u1B59]\",\n  beng: \"[\\u09E6-\\u09EF]\",\n  deva: \"[\\u0966-\\u096F]\",\n  fullwide: \"[\\uFF10-\\uFF19]\",\n  gujr: \"[\\u0AE6-\\u0AEF]\",\n  hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n  khmr: \"[\\u17E0-\\u17E9]\",\n  knda: \"[\\u0CE6-\\u0CEF]\",\n  laoo: \"[\\u0ED0-\\u0ED9]\",\n  limb: \"[\\u1946-\\u194F]\",\n  mlym: \"[\\u0D66-\\u0D6F]\",\n  mong: \"[\\u1810-\\u1819]\",\n  mymr: \"[\\u1040-\\u1049]\",\n  orya: \"[\\u0B66-\\u0B6F]\",\n  tamldec: \"[\\u0BE6-\\u0BEF]\",\n  telu: \"[\\u0C66-\\u0C6F]\",\n  thai: \"[\\u0E50-\\u0E59]\",\n  tibt: \"[\\u0F20-\\u0F29]\",\n  latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n  arab: [1632, 1641],\n  arabext: [1776, 1785],\n  bali: [6992, 7001],\n  beng: [2534, 2543],\n  deva: [2406, 2415],\n  fullwide: [65296, 65303],\n  gujr: [2790, 2799],\n  khmr: [6112, 6121],\n  knda: [3302, 3311],\n  laoo: [3792, 3801],\n  limb: [6470, 6479],\n  mlym: [3430, 3439],\n  mong: [6160, 6169],\n  mymr: [4160, 4169],\n  orya: [2918, 2927],\n  tamldec: [3046, 3055],\n  telu: [3174, 3183],\n  thai: [3664, 3673],\n  tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n  let value = parseInt(str, 10);\n  if (isNaN(value)) {\n    value = \"\";\n    for (let i = 0; i < str.length; i++) {\n      const code = str.charCodeAt(i);\n\n      if (str[i].search(numberingSystems.hanidec) !== -1) {\n        value += hanidecChars.indexOf(str[i]);\n      } else {\n        for (const key in numberingSystemsUTF16) {\n          const [min, max] = numberingSystemsUTF16[key];\n          if (code >= min && code <= max) {\n            value += code - min;\n          }\n        }\n      }\n    }\n    return parseInt(value, 10);\n  } else {\n    return value;\n  }\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n  return new RegExp(`${numberingSystems[numberingSystem || \"latn\"]}${append}`);\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n  return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n  // make dots optional and also make them literal\n  // make space and non breakable space characters interchangeable\n  return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n  return s\n    .replace(/\\./g, \"\") // ignore dots that were made optional\n    .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n    .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n  if (strings === null) {\n    return null;\n  } else {\n    return {\n      regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n      deser: ([s]) =>\n        strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n    };\n  }\n}\n\nfunction offset(regex, groups) {\n  return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n  return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n  return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\nfunction unitForToken(token, loc) {\n  const one = digitRegex(loc),\n    two = digitRegex(loc, \"{2}\"),\n    three = digitRegex(loc, \"{3}\"),\n    four = digitRegex(loc, \"{4}\"),\n    six = digitRegex(loc, \"{6}\"),\n    oneOrTwo = digitRegex(loc, \"{1,2}\"),\n    oneToThree = digitRegex(loc, \"{1,3}\"),\n    oneToSix = digitRegex(loc, \"{1,6}\"),\n    oneToNine = digitRegex(loc, \"{1,9}\"),\n    twoToFour = digitRegex(loc, \"{2,4}\"),\n    fourToSix = digitRegex(loc, \"{4,6}\"),\n    literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n    unitate = (t) => {\n      if (token.literal) {\n        return literal(t);\n      }\n      switch (t.val) {\n        // era\n        case \"G\":\n          return oneOf(loc.eras(\"short\", false), 0);\n        case \"GG\":\n          return oneOf(loc.eras(\"long\", false), 0);\n        // years\n        case \"y\":\n          return intUnit(oneToSix);\n        case \"yy\":\n          return intUnit(twoToFour, untruncateYear);\n        case \"yyyy\":\n          return intUnit(four);\n        case \"yyyyy\":\n          return intUnit(fourToSix);\n        case \"yyyyyy\":\n          return intUnit(six);\n        // months\n        case \"M\":\n          return intUnit(oneOrTwo);\n        case \"MM\":\n          return intUnit(two);\n        case \"MMM\":\n          return oneOf(loc.months(\"short\", true, false), 1);\n        case \"MMMM\":\n          return oneOf(loc.months(\"long\", true, false), 1);\n        case \"L\":\n          return intUnit(oneOrTwo);\n        case \"LL\":\n          return intUnit(two);\n        case \"LLL\":\n          return oneOf(loc.months(\"short\", false, false), 1);\n        case \"LLLL\":\n          return oneOf(loc.months(\"long\", false, false), 1);\n        // dates\n        case \"d\":\n          return intUnit(oneOrTwo);\n        case \"dd\":\n          return intUnit(two);\n        // ordinals\n        case \"o\":\n          return intUnit(oneToThree);\n        case \"ooo\":\n          return intUnit(three);\n        // time\n        case \"HH\":\n          return intUnit(two);\n        case \"H\":\n          return intUnit(oneOrTwo);\n        case \"hh\":\n          return intUnit(two);\n        case \"h\":\n          return intUnit(oneOrTwo);\n        case \"mm\":\n          return intUnit(two);\n        case \"m\":\n          return intUnit(oneOrTwo);\n        case \"q\":\n          return intUnit(oneOrTwo);\n        case \"qq\":\n          return intUnit(two);\n        case \"s\":\n          return intUnit(oneOrTwo);\n        case \"ss\":\n          return intUnit(two);\n        case \"S\":\n          return intUnit(oneToThree);\n        case \"SSS\":\n          return intUnit(three);\n        case \"u\":\n          return simple(oneToNine);\n        case \"uu\":\n          return simple(oneOrTwo);\n        case \"uuu\":\n          return intUnit(one);\n        // meridiem\n        case \"a\":\n          return oneOf(loc.meridiems(), 0);\n        // weekYear (k)\n        case \"kkkk\":\n          return intUnit(four);\n        case \"kk\":\n          return intUnit(twoToFour, untruncateYear);\n        // weekNumber (W)\n        case \"W\":\n          return intUnit(oneOrTwo);\n        case \"WW\":\n          return intUnit(two);\n        // weekdays\n        case \"E\":\n        case \"c\":\n          return intUnit(one);\n        case \"EEE\":\n          return oneOf(loc.weekdays(\"short\", false, false), 1);\n        case \"EEEE\":\n          return oneOf(loc.weekdays(\"long\", false, false), 1);\n        case \"ccc\":\n          return oneOf(loc.weekdays(\"short\", true, false), 1);\n        case \"cccc\":\n          return oneOf(loc.weekdays(\"long\", true, false), 1);\n        // offset/zone\n        case \"Z\":\n        case \"ZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n        case \"ZZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n        // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n        // because we don't have any way to figure out what they are\n        case \"z\":\n          return simple(/[a-z_+-/]{1,256}?/i);\n        default:\n          return literal(t);\n      }\n    };\n\n  const unit = unitate(token) || {\n    invalidReason: MISSING_FTP,\n  };\n\n  unit.token = token;\n\n  return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n  year: {\n    \"2-digit\": \"yy\",\n    numeric: \"yyyyy\",\n  },\n  month: {\n    numeric: \"M\",\n    \"2-digit\": \"MM\",\n    short: \"MMM\",\n    long: \"MMMM\",\n  },\n  day: {\n    numeric: \"d\",\n    \"2-digit\": \"dd\",\n  },\n  weekday: {\n    short: \"EEE\",\n    long: \"EEEE\",\n  },\n  dayperiod: \"a\",\n  dayPeriod: \"a\",\n  hour: {\n    numeric: \"h\",\n    \"2-digit\": \"hh\",\n  },\n  minute: {\n    numeric: \"m\",\n    \"2-digit\": \"mm\",\n  },\n  second: {\n    numeric: \"s\",\n    \"2-digit\": \"ss\",\n  },\n};\n\nfunction tokenForPart(part, locale, formatOpts) {\n  const { type, value } = part;\n\n  if (type === \"literal\") {\n    return {\n      literal: true,\n      val: value,\n    };\n  }\n\n  const style = formatOpts[type];\n\n  let val = partTypeStyleToTokenVal[type];\n  if (typeof val === \"object\") {\n    val = val[style];\n  }\n\n  if (val) {\n    return {\n      literal: false,\n      val,\n    };\n  }\n\n  return undefined;\n}\n\nfunction buildRegex(units) {\n  const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n  return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n  const matches = input.match(regex);\n\n  if (matches) {\n    const all = {};\n    let matchIndex = 1;\n    for (const i in handlers) {\n      if (hasOwnProperty(handlers, i)) {\n        const h = handlers[i],\n          groups = h.groups ? h.groups + 1 : 1;\n        if (!h.literal && h.token) {\n          all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n        }\n        matchIndex += groups;\n      }\n    }\n    return [matches, all];\n  } else {\n    return [matches, {}];\n  }\n}\n\nfunction dateTimeFromMatches(matches) {\n  const toField = (token) => {\n    switch (token) {\n      case \"S\":\n        return \"millisecond\";\n      case \"s\":\n        return \"second\";\n      case \"m\":\n        return \"minute\";\n      case \"h\":\n      case \"H\":\n        return \"hour\";\n      case \"d\":\n        return \"day\";\n      case \"o\":\n        return \"ordinal\";\n      case \"L\":\n      case \"M\":\n        return \"month\";\n      case \"y\":\n        return \"year\";\n      case \"E\":\n      case \"c\":\n        return \"weekday\";\n      case \"W\":\n        return \"weekNumber\";\n      case \"k\":\n        return \"weekYear\";\n      case \"q\":\n        return \"quarter\";\n      default:\n        return null;\n    }\n  };\n\n  let zone = null;\n  let specificOffset;\n  if (!isUndefined(matches.z)) {\n    zone = IANAZone.create(matches.z);\n  }\n\n  if (!isUndefined(matches.Z)) {\n    if (!zone) {\n      zone = new FixedOffsetZone(matches.Z);\n    }\n    specificOffset = matches.Z;\n  }\n\n  if (!isUndefined(matches.q)) {\n    matches.M = (matches.q - 1) * 3 + 1;\n  }\n\n  if (!isUndefined(matches.h)) {\n    if (matches.h < 12 && matches.a === 1) {\n      matches.h += 12;\n    } else if (matches.h === 12 && matches.a === 0) {\n      matches.h = 0;\n    }\n  }\n\n  if (matches.G === 0 && matches.y) {\n    matches.y = -matches.y;\n  }\n\n  if (!isUndefined(matches.u)) {\n    matches.S = parseMillis(matches.u);\n  }\n\n  const vals = Object.keys(matches).reduce((r, k) => {\n    const f = toField(k);\n    if (f) {\n      r[f] = matches[k];\n    }\n\n    return r;\n  }, {});\n\n  return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n  if (!dummyDateTimeCache) {\n    dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n  }\n\n  return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n  if (token.literal) {\n    return token;\n  }\n\n  const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n\n  if (!formatOpts) {\n    return token;\n  }\n\n  const formatter = Formatter.create(locale, formatOpts);\n  const parts = formatter.formatDateTimeParts(getDummyDateTime());\n\n  const tokens = parts.map((p) => tokenForPart(p, locale, formatOpts));\n\n  if (tokens.includes(undefined)) {\n    return token;\n  }\n\n  return tokens;\n}\n\nfunction expandMacroTokens(tokens, locale) {\n  return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport function explainFromTokens(locale, input, format) {\n  const tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n    units = tokens.map((t) => unitForToken(t, locale)),\n    disqualifyingUnit = units.find((t) => t.invalidReason);\n\n  if (disqualifyingUnit) {\n    return { input, tokens, invalidReason: disqualifyingUnit.invalidReason };\n  } else {\n    const [regexString, handlers] = buildRegex(units),\n      regex = RegExp(regexString, \"i\"),\n      [rawMatches, matches] = match(input, regex, handlers),\n      [result, zone, specificOffset] = matches\n        ? dateTimeFromMatches(matches)\n        : [null, null, undefined];\n    if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n      throw new ConflictingSpecificationError(\n        \"Can't include meridiem when specifying 24-hour format\"\n      );\n    }\n    return { input, tokens, regex, rawMatches, matches, result, zone, specificOffset };\n  }\n}\n\nexport function parseFromTokens(locale, input, format) {\n  const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n  return [result, zone, specificOffset, invalidReason];\n}\n","import {\n  integerBetween,\n  isLeapYear,\n  timeObject,\n  daysInYear,\n  daysInMonth,\n  weeksInWeekYear,\n  isInteger,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n  leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n  return new Invalid(\n    \"unit out of range\",\n    `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n  );\n}\n\nfunction dayOfWeek(year, month, day) {\n  const d = new Date(Date.UTC(year, month - 1, day));\n\n  if (year < 100 && year >= 0) {\n    d.setUTCFullYear(d.getUTCFullYear() - 1900);\n  }\n\n  const js = d.getUTCDay();\n\n  return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n  return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n  const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n    month0 = table.findIndex((i) => i < ordinal),\n    day = ordinal - table[month0];\n  return { month: month0 + 1, day };\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj) {\n  const { year, month, day } = gregObj,\n    ordinal = computeOrdinal(year, month, day),\n    weekday = dayOfWeek(year, month, day);\n\n  let weekNumber = Math.floor((ordinal - weekday + 10) / 7),\n    weekYear;\n\n  if (weekNumber < 1) {\n    weekYear = year - 1;\n    weekNumber = weeksInWeekYear(weekYear);\n  } else if (weekNumber > weeksInWeekYear(year)) {\n    weekYear = year + 1;\n    weekNumber = 1;\n  } else {\n    weekYear = year;\n  }\n\n  return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData) {\n  const { weekYear, weekNumber, weekday } = weekData,\n    weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),\n    yearInDays = daysInYear(weekYear);\n\n  let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,\n    year;\n\n  if (ordinal < 1) {\n    year = weekYear - 1;\n    ordinal += daysInYear(year);\n  } else if (ordinal > yearInDays) {\n    year = weekYear + 1;\n    ordinal -= daysInYear(weekYear);\n  } else {\n    year = weekYear;\n  }\n\n  const { month, day } = uncomputeOrdinal(year, ordinal);\n  return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n  const { year, month, day } = gregData;\n  const ordinal = computeOrdinal(year, month, day);\n  return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n  const { year, ordinal } = ordinalData;\n  const { month, day } = uncomputeOrdinal(year, ordinal);\n  return { year, month, day, ...timeObject(ordinalData) };\n}\n\nexport function hasInvalidWeekData(obj) {\n  const validYear = isInteger(obj.weekYear),\n    validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),\n    validWeekday = integerBetween(obj.weekday, 1, 7);\n\n  if (!validYear) {\n    return unitOutOfRange(\"weekYear\", obj.weekYear);\n  } else if (!validWeek) {\n    return unitOutOfRange(\"week\", obj.week);\n  } else if (!validWeekday) {\n    return unitOutOfRange(\"weekday\", obj.weekday);\n  } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n  const validYear = isInteger(obj.year),\n    validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validOrdinal) {\n    return unitOutOfRange(\"ordinal\", obj.ordinal);\n  } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n  const validYear = isInteger(obj.year),\n    validMonth = integerBetween(obj.month, 1, 12),\n    validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validMonth) {\n    return unitOutOfRange(\"month\", obj.month);\n  } else if (!validDay) {\n    return unitOutOfRange(\"day\", obj.day);\n  } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n  const { hour, minute, second, millisecond } = obj;\n  const validHour =\n      integerBetween(hour, 0, 23) ||\n      (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n    validMinute = integerBetween(minute, 0, 59),\n    validSecond = integerBetween(second, 0, 59),\n    validMillisecond = integerBetween(millisecond, 0, 999);\n\n  if (!validHour) {\n    return unitOutOfRange(\"hour\", hour);\n  } else if (!validMinute) {\n    return unitOutOfRange(\"minute\", minute);\n  } else if (!validSecond) {\n    return unitOutOfRange(\"second\", second);\n  } else if (!validMillisecond) {\n    return unitOutOfRange(\"millisecond\", millisecond);\n  } else return false;\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n  isUndefined,\n  maybeArray,\n  isDate,\n  isNumber,\n  bestBy,\n  daysInMonth,\n  daysInYear,\n  isLeapYear,\n  weeksInWeekYear,\n  normalizeObject,\n  roundTo,\n  objToLocalTS,\n  padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport { parseFromTokens, explainFromTokens } from \"./impl/tokenParser.js\";\nimport {\n  gregorianToWeek,\n  weekToGregorian,\n  gregorianToOrdinal,\n  ordinalToGregorian,\n  hasInvalidGregorianData,\n  hasInvalidWeekData,\n  hasInvalidOrdinalData,\n  hasInvalidTimeData,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n  InvalidArgumentError,\n  ConflictingSpecificationError,\n  InvalidUnitError,\n  InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n  return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\nfunction possiblyCachedWeekData(dt) {\n  if (dt.weekData === null) {\n    dt.weekData = gregorianToWeek(dt.c);\n  }\n  return dt.weekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n  const current = {\n    ts: inst.ts,\n    zone: inst.zone,\n    c: inst.c,\n    o: inst.o,\n    loc: inst.loc,\n    invalid: inst.invalid,\n  };\n  return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n  // Our UTC time is just a guess because our offset is just a guess\n  let utcGuess = localTS - o * 60 * 1000;\n\n  // Test whether the zone matches the offset for this ts\n  const o2 = tz.offset(utcGuess);\n\n  // If so, offset didn't change and we're done\n  if (o === o2) {\n    return [utcGuess, o];\n  }\n\n  // If not, change the ts by the difference in the offset\n  utcGuess -= (o2 - o) * 60 * 1000;\n\n  // If that gives us the local time we want, we're done\n  const o3 = tz.offset(utcGuess);\n  if (o2 === o3) {\n    return [utcGuess, o2];\n  }\n\n  // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n  return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n  ts += offset * 60 * 1000;\n\n  const d = new Date(ts);\n\n  return {\n    year: d.getUTCFullYear(),\n    month: d.getUTCMonth() + 1,\n    day: d.getUTCDate(),\n    hour: d.getUTCHours(),\n    minute: d.getUTCMinutes(),\n    second: d.getUTCSeconds(),\n    millisecond: d.getUTCMilliseconds(),\n  };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n  return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n  const oPre = inst.o,\n    year = inst.c.year + Math.trunc(dur.years),\n    month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n    c = {\n      ...inst.c,\n      year,\n      month,\n      day:\n        Math.min(inst.c.day, daysInMonth(year, month)) +\n        Math.trunc(dur.days) +\n        Math.trunc(dur.weeks) * 7,\n    },\n    millisToAdd = Duration.fromObject({\n      years: dur.years - Math.trunc(dur.years),\n      quarters: dur.quarters - Math.trunc(dur.quarters),\n      months: dur.months - Math.trunc(dur.months),\n      weeks: dur.weeks - Math.trunc(dur.weeks),\n      days: dur.days - Math.trunc(dur.days),\n      hours: dur.hours,\n      minutes: dur.minutes,\n      seconds: dur.seconds,\n      milliseconds: dur.milliseconds,\n    }).as(\"milliseconds\"),\n    localTS = objToLocalTS(c);\n\n  let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n  if (millisToAdd !== 0) {\n    ts += millisToAdd;\n    // that could have changed the offset by going over a DST, but we want to keep the ts the same\n    o = inst.zone.offset(ts);\n  }\n\n  return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n  const { setZone, zone } = opts;\n  if (parsed && Object.keys(parsed).length !== 0) {\n    const interpretationZone = parsedZone || zone,\n      inst = DateTime.fromObject(parsed, {\n        ...opts,\n        zone: interpretationZone,\n        specificOffset,\n      });\n    return setZone ? inst : inst.setZone(zone);\n  } else {\n    return DateTime.invalid(\n      new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n    );\n  }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n  return dt.isValid\n    ? Formatter.create(Locale.create(\"en-US\"), {\n        allowZ,\n        forceSimple: true,\n      }).formatDateTimeFromString(dt, format)\n    : null;\n}\n\nfunction toISODate(o, extended) {\n  const longFormat = o.c.year > 9999 || o.c.year < 0;\n  let c = \"\";\n  if (longFormat && o.c.year >= 0) c += \"+\";\n  c += padStart(o.c.year, longFormat ? 6 : 4);\n\n  if (extended) {\n    c += \"-\";\n    c += padStart(o.c.month);\n    c += \"-\";\n    c += padStart(o.c.day);\n  } else {\n    c += padStart(o.c.month);\n    c += padStart(o.c.day);\n  }\n  return c;\n}\n\nfunction toISOTime(\n  o,\n  extended,\n  suppressSeconds,\n  suppressMilliseconds,\n  includeOffset,\n  extendedZone\n) {\n  let c = padStart(o.c.hour);\n  if (extended) {\n    c += \":\";\n    c += padStart(o.c.minute);\n    if (o.c.second !== 0 || !suppressSeconds) {\n      c += \":\";\n    }\n  } else {\n    c += padStart(o.c.minute);\n  }\n\n  if (o.c.second !== 0 || !suppressSeconds) {\n    c += padStart(o.c.second);\n\n    if (o.c.millisecond !== 0 || !suppressMilliseconds) {\n      c += \".\";\n      c += padStart(o.c.millisecond, 3);\n    }\n  }\n\n  if (includeOffset) {\n    if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n      c += \"Z\";\n    } else if (o.o < 0) {\n      c += \"-\";\n      c += padStart(Math.trunc(-o.o / 60));\n      c += \":\";\n      c += padStart(Math.trunc(-o.o % 60));\n    } else {\n      c += \"+\";\n      c += padStart(Math.trunc(o.o / 60));\n      c += \":\";\n      c += padStart(Math.trunc(o.o % 60));\n    }\n  }\n\n  if (extendedZone) {\n    c += \"[\" + o.zone.ianaName + \"]\";\n  }\n  return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n    month: 1,\n    day: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  },\n  defaultWeekUnitValues = {\n    weekNumber: 1,\n    weekday: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  },\n  defaultOrdinalUnitValues = {\n    ordinal: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n  orderedWeekUnits = [\n    \"weekYear\",\n    \"weekNumber\",\n    \"weekday\",\n    \"hour\",\n    \"minute\",\n    \"second\",\n    \"millisecond\",\n  ],\n  orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n  const normalized = {\n    year: \"year\",\n    years: \"year\",\n    month: \"month\",\n    months: \"month\",\n    day: \"day\",\n    days: \"day\",\n    hour: \"hour\",\n    hours: \"hour\",\n    minute: \"minute\",\n    minutes: \"minute\",\n    quarter: \"quarter\",\n    quarters: \"quarter\",\n    second: \"second\",\n    seconds: \"second\",\n    millisecond: \"millisecond\",\n    milliseconds: \"millisecond\",\n    weekday: \"weekday\",\n    weekdays: \"weekday\",\n    weeknumber: \"weekNumber\",\n    weeksnumber: \"weekNumber\",\n    weeknumbers: \"weekNumber\",\n    weekyear: \"weekYear\",\n    weekyears: \"weekYear\",\n    ordinal: \"ordinal\",\n  }[unit.toLowerCase()];\n\n  if (!normalized) throw new InvalidUnitError(unit);\n\n  return normalized;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n  const zone = normalizeZone(opts.zone, Settings.defaultZone),\n    loc = Locale.fromObject(opts),\n    tsNow = Settings.now();\n\n  let ts, o;\n\n  // assume we have the higher-order units\n  if (!isUndefined(obj.year)) {\n    for (const u of orderedUnits) {\n      if (isUndefined(obj[u])) {\n        obj[u] = defaultUnitValues[u];\n      }\n    }\n\n    const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    const offsetProvis = zone.offset(tsNow);\n    [ts, o] = objToTS(obj, offsetProvis, zone);\n  } else {\n    ts = tsNow;\n  }\n\n  return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n  const round = isUndefined(opts.round) ? true : opts.round,\n    format = (c, unit) => {\n      c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n      const formatter = end.loc.clone(opts).relFormatter(opts);\n      return formatter.format(c, unit);\n    },\n    differ = (unit) => {\n      if (opts.calendary) {\n        if (!end.hasSame(start, unit)) {\n          return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n        } else return 0;\n      } else {\n        return end.diff(start, unit).get(unit);\n      }\n    };\n\n  if (opts.unit) {\n    return format(differ(opts.unit), opts.unit);\n  }\n\n  for (const unit of opts.units) {\n    const count = differ(unit);\n    if (Math.abs(count) >= 1) {\n      return format(count, unit);\n    }\n  }\n  return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n  let opts = {},\n    args;\n  if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n    opts = argList[argList.length - 1];\n    args = Array.from(argList).slice(0, argList.length - 1);\n  } else {\n    args = Array.from(argList);\n  }\n  return [opts, args];\n}\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime#local}, {@link DateTime#utc}, and (most flexibly) {@link DateTime#fromObject}. To create one from a standard string format, use {@link DateTime#fromISO}, {@link DateTime#fromHTTP}, and {@link DateTime#fromRFC2822}. To create one from a custom string format, use {@link DateTime#fromFormat}. To create one from a native JS date, use {@link DateTime#fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n  /**\n   * @access private\n   */\n  constructor(config) {\n    const zone = config.zone || Settings.defaultZone;\n\n    let invalid =\n      config.invalid ||\n      (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n      (!zone.isValid ? unsupportedZone(zone) : null);\n    /**\n     * @access private\n     */\n    this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n    let c = null,\n      o = null;\n    if (!invalid) {\n      const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n      if (unchanged) {\n        [c, o] = [config.old.c, config.old.o];\n      } else {\n        const ot = zone.offset(this.ts);\n        c = tsToObj(this.ts, ot);\n        invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n        c = invalid ? null : c;\n        o = invalid ? null : ot;\n      }\n    }\n\n    /**\n     * @access private\n     */\n    this._zone = zone;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.invalid = invalid;\n    /**\n     * @access private\n     */\n    this.weekData = null;\n    /**\n     * @access private\n     */\n    this.c = c;\n    /**\n     * @access private\n     */\n    this.o = o;\n    /**\n     * @access private\n     */\n    this.isLuxonDateTime = true;\n  }\n\n  // CONSTRUCT\n\n  /**\n   * Create a DateTime for the current instant, in the system's time zone.\n   *\n   * Use Settings to override these default values if needed.\n   * @example DateTime.now().toISO() //~> now in the ISO format\n   * @return {DateTime}\n   */\n  static now() {\n    return new DateTime({});\n  }\n\n  /**\n   * Create a local DateTime\n   * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month, 1-indexed\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @example DateTime.local()                                  //~> now\n   * @example DateTime.local({ zone: \"America/New_York\" })      //~> now, in US east coast time\n   * @example DateTime.local(2017)                              //~> 2017-01-01T00:00:00\n   * @example DateTime.local(2017, 3)                           //~> 2017-03-01T00:00:00\n   * @example DateTime.local(2017, 3, 12, { locale: \"fr\" })     //~> 2017-03-12T00:00:00, with a French locale\n   * @example DateTime.local(2017, 3, 12, 5)                    //~> 2017-03-12T05:00:00\n   * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" })   //~> 2017-03-12T05:00:00, in UTC\n   * @example DateTime.local(2017, 3, 12, 5, 45)                //~> 2017-03-12T05:45:00\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10)            //~> 2017-03-12T05:45:10\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765)       //~> 2017-03-12T05:45:10.765\n   * @return {DateTime}\n   */\n  static local() {\n    const [opts, args] = lastOpts(arguments),\n      [year, month, day, hour, minute, second, millisecond] = args;\n    return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n  }\n\n  /**\n   * Create a DateTime in UTC\n   * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.utc()                                              //~> now\n   * @example DateTime.utc(2017)                                          //~> 2017-01-01T00:00:00Z\n   * @example DateTime.utc(2017, 3)                                       //~> 2017-03-01T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12)                                   //~> 2017-03-12T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5)                                //~> 2017-03-12T05:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45)                            //~> 2017-03-12T05:45:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" })          //~> 2017-03-12T05:45:00Z with a French locale\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10)                        //~> 2017-03-12T05:45:10Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n   * @return {DateTime}\n   */\n  static utc() {\n    const [opts, args] = lastOpts(arguments),\n      [year, month, day, hour, minute, second, millisecond] = args;\n\n    opts.zone = FixedOffsetZone.utcInstance;\n    return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n  }\n\n  /**\n   * Create a DateTime from a JavaScript Date object. Uses the default zone.\n   * @param {Date} date - a JavaScript Date object\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @return {DateTime}\n   */\n  static fromJSDate(date, options = {}) {\n    const ts = isDate(date) ? date.valueOf() : NaN;\n    if (Number.isNaN(ts)) {\n      return DateTime.invalid(\"invalid input\");\n    }\n\n    const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    return new DateTime({\n      ts: ts,\n      zone: zoneToUse,\n      loc: Locale.fromObject(options),\n    });\n  }\n\n  /**\n   * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromMillis(milliseconds, options = {}) {\n    if (!isNumber(milliseconds)) {\n      throw new InvalidArgumentError(\n        `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n      );\n    } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n      // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n      return DateTime.invalid(\"Timestamp out of range\");\n    } else {\n      return new DateTime({\n        ts: milliseconds,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options),\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} seconds - a number of seconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromSeconds(seconds, options = {}) {\n    if (!isNumber(seconds)) {\n      throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n    } else {\n      return new DateTime({\n        ts: seconds * 1000,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options),\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.year - a year, such as 1987\n   * @param {number} obj.month - a month, 1-12\n   * @param {number} obj.day - a day of the month, 1-31, depending on the month\n   * @param {number} obj.ordinal - day of the year, 1-365 or 366\n   * @param {number} obj.weekYear - an ISO week year\n   * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n   * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n   * @param {number} obj.hour - hour of the day, 0-23\n   * @param {number} obj.minute - minute of the hour, 0-59\n   * @param {number} obj.second - second of the minute, 0-59\n   * @param {number} obj.millisecond - millisecond of the second, 0-999\n   * @param {Object} opts - options for creating this DateTime\n   * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n   * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n   * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n   * @return {DateTime}\n   */\n  static fromObject(obj, opts = {}) {\n    obj = obj || {};\n    const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    const tsNow = Settings.now(),\n      offsetProvis = !isUndefined(opts.specificOffset)\n        ? opts.specificOffset\n        : zoneToUse.offset(tsNow),\n      normalized = normalizeObject(obj, normalizeUnit),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber,\n      loc = Locale.fromObject(opts);\n\n    // cases:\n    // just a weekday -> this week's instance of that weekday, no worries\n    // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n    // (gregorian month or day) + ordinal -> error\n    // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n    // configure ourselves to deal with gregorian dates or week stuff\n    let units,\n      defaultValues,\n      objNow = tsToObj(tsNow, offsetProvis);\n    if (useWeekData) {\n      units = orderedWeekUnits;\n      defaultValues = defaultWeekUnitValues;\n      objNow = gregorianToWeek(objNow);\n    } else if (containsOrdinal) {\n      units = orderedOrdinalUnits;\n      defaultValues = defaultOrdinalUnitValues;\n      objNow = gregorianToOrdinal(objNow);\n    } else {\n      units = orderedUnits;\n      defaultValues = defaultUnitValues;\n    }\n\n    // set default values for missing stuff\n    let foundFirst = false;\n    for (const u of units) {\n      const v = normalized[u];\n      if (!isUndefined(v)) {\n        foundFirst = true;\n      } else if (foundFirst) {\n        normalized[u] = defaultValues[u];\n      } else {\n        normalized[u] = objNow[u];\n      }\n    }\n\n    // make sure the values we have are in range\n    const higherOrderInvalid = useWeekData\n        ? hasInvalidWeekData(normalized)\n        : containsOrdinal\n        ? hasInvalidOrdinalData(normalized)\n        : hasInvalidGregorianData(normalized),\n      invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    // compute the actual time\n    const gregorian = useWeekData\n        ? weekToGregorian(normalized)\n        : containsOrdinal\n        ? ordinalToGregorian(normalized)\n        : normalized,\n      [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n      inst = new DateTime({\n        ts: tsFinal,\n        zone: zoneToUse,\n        o: offsetFinal,\n        loc,\n      });\n\n    // gregorian data + weekday serves only to validate\n    if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n      return DateTime.invalid(\n        \"mismatched weekday\",\n        `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n      );\n    }\n\n    return inst;\n  }\n\n  /**\n   * Create a DateTime from an ISO 8601 string\n   * @param {string} text - the ISO string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n   * @example DateTime.fromISO('2016-W05-4')\n   * @return {DateTime}\n   */\n  static fromISO(text, opts = {}) {\n    const [vals, parsedZone] = parseISODate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n  }\n\n  /**\n   * Create a DateTime from an RFC 2822 string\n   * @param {string} text - the RFC 2822 string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n   * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n   * @return {DateTime}\n   */\n  static fromRFC2822(text, opts = {}) {\n    const [vals, parsedZone] = parseRFC2822Date(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n  }\n\n  /**\n   * Create a DateTime from an HTTP header date\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @param {string} text - the HTTP header date\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sun Nov  6 08:49:37 1994')\n   * @return {DateTime}\n   */\n  static fromHTTP(text, opts = {}) {\n    const [vals, parsedZone] = parseHTTPDate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n  }\n\n  /**\n   * Create a DateTime from an input string and format string.\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromFormat(text, fmt, opts = {}) {\n    if (isUndefined(text) || isUndefined(fmt)) {\n      throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n    }\n\n    const { locale = null, numberingSystem = null } = opts,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      }),\n      [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    } else {\n      return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n    }\n  }\n\n  /**\n   * @deprecated use fromFormat instead\n   */\n  static fromString(text, fmt, opts = {}) {\n    return DateTime.fromFormat(text, fmt, opts);\n  }\n\n  /**\n   * Create a DateTime from a SQL date, time, or datetime\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale\n   * @param {string} text - the string to parse\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @example DateTime.fromSQL('2017-05-15')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n   * @example DateTime.fromSQL('09:12:34.342')\n   * @return {DateTime}\n   */\n  static fromSQL(text, opts = {}) {\n    const [vals, parsedZone] = parseSQL(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n  }\n\n  /**\n   * Create an invalid DateTime.\n   * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {DateTime}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDateTimeError(invalid);\n    } else {\n      return new DateTime({ invalid });\n    }\n  }\n\n  /**\n   * Check if an object is an instance of DateTime. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDateTime(o) {\n    return (o && o.isLuxonDateTime) || false;\n  }\n\n  // INFO\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n   * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n   * @return {number}\n   */\n  get(unit) {\n    return this[unit];\n  }\n\n  /**\n   * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n   * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n   * * The DateTime was created by an operation on another invalid date\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get outputCalendar() {\n    return this.isValid ? this.loc.outputCalendar : null;\n  }\n\n  /**\n   * Get the time zone associated with this DateTime.\n   * @type {Zone}\n   */\n  get zone() {\n    return this._zone;\n  }\n\n  /**\n   * Get the name of the time zone.\n   * @type {string}\n   */\n  get zoneName() {\n    return this.isValid ? this.zone.name : null;\n  }\n\n  /**\n   * Get the year\n   * @example DateTime.local(2017, 5, 25).year //=> 2017\n   * @type {number}\n   */\n  get year() {\n    return this.isValid ? this.c.year : NaN;\n  }\n\n  /**\n   * Get the quarter\n   * @example DateTime.local(2017, 5, 25).quarter //=> 2\n   * @type {number}\n   */\n  get quarter() {\n    return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n  }\n\n  /**\n   * Get the month (1-12).\n   * @example DateTime.local(2017, 5, 25).month //=> 5\n   * @type {number}\n   */\n  get month() {\n    return this.isValid ? this.c.month : NaN;\n  }\n\n  /**\n   * Get the day of the month (1-30ish).\n   * @example DateTime.local(2017, 5, 25).day //=> 25\n   * @type {number}\n   */\n  get day() {\n    return this.isValid ? this.c.day : NaN;\n  }\n\n  /**\n   * Get the hour of the day (0-23).\n   * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n   * @type {number}\n   */\n  get hour() {\n    return this.isValid ? this.c.hour : NaN;\n  }\n\n  /**\n   * Get the minute of the hour (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n   * @type {number}\n   */\n  get minute() {\n    return this.isValid ? this.c.minute : NaN;\n  }\n\n  /**\n   * Get the second of the minute (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n   * @type {number}\n   */\n  get second() {\n    return this.isValid ? this.c.second : NaN;\n  }\n\n  /**\n   * Get the millisecond of the second (0-999).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n   * @type {number}\n   */\n  get millisecond() {\n    return this.isValid ? this.c.millisecond : NaN;\n  }\n\n  /**\n   * Get the week year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n   * @type {number}\n   */\n  get weekYear() {\n    return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n  }\n\n  /**\n   * Get the week number of the week year (1-52ish).\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n   * @type {number}\n   */\n  get weekNumber() {\n    return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n  }\n\n  /**\n   * Get the day of the week.\n   * 1 is Monday and 7 is Sunday\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 11, 31).weekday //=> 4\n   * @type {number}\n   */\n  get weekday() {\n    return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n  }\n\n  /**\n   * Get the ordinal (meaning the day of the year)\n   * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n   * @type {number|DateTime}\n   */\n  get ordinal() {\n    return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n  }\n\n  /**\n   * Get the human readable short month name, such as 'Oct'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n   * @type {string}\n   */\n  get monthShort() {\n    return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable long month name, such as 'October'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthLong //=> October\n   * @type {string}\n   */\n  get monthLong() {\n    return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable short weekday, such as 'Mon'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n   * @type {string}\n   */\n  get weekdayShort() {\n    return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the human readable long weekday, such as 'Monday'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n   * @type {string}\n   */\n  get weekdayLong() {\n    return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the UTC offset of this DateTime in minutes\n   * @example DateTime.now().offset //=> -240\n   * @example DateTime.utc().offset //=> 0\n   * @type {number}\n   */\n  get offset() {\n    return this.isValid ? +this.o : NaN;\n  }\n\n  /**\n   * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameShort() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"short\",\n        locale: this.locale,\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameLong() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"long\",\n        locale: this.locale,\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get whether this zone's offset ever changes, as in a DST.\n   * @type {boolean}\n   */\n  get isOffsetFixed() {\n    return this.isValid ? this.zone.isUniversal : null;\n  }\n\n  /**\n   * Get whether the DateTime is in a DST.\n   * @type {boolean}\n   */\n  get isInDST() {\n    if (this.isOffsetFixed) {\n      return false;\n    } else {\n      return (\n        this.offset > this.set({ month: 1, day: 1 }).offset ||\n        this.offset > this.set({ month: 5 }).offset\n      );\n    }\n  }\n\n  /**\n   * Returns true if this DateTime is in a leap year, false otherwise\n   * @example DateTime.local(2016).isInLeapYear //=> true\n   * @example DateTime.local(2013).isInLeapYear //=> false\n   * @type {boolean}\n   */\n  get isInLeapYear() {\n    return isLeapYear(this.year);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's month\n   * @example DateTime.local(2016, 2).daysInMonth //=> 29\n   * @example DateTime.local(2016, 3).daysInMonth //=> 31\n   * @type {number}\n   */\n  get daysInMonth() {\n    return daysInMonth(this.year, this.month);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's year\n   * @example DateTime.local(2016).daysInYear //=> 366\n   * @example DateTime.local(2013).daysInYear //=> 365\n   * @type {number}\n   */\n  get daysInYear() {\n    return this.isValid ? daysInYear(this.year) : NaN;\n  }\n\n  /**\n   * Returns the number of weeks in this DateTime's year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2004).weeksInWeekYear //=> 53\n   * @example DateTime.local(2013).weeksInWeekYear //=> 52\n   * @type {number}\n   */\n  get weeksInWeekYear() {\n    return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n  }\n\n  /**\n   * Returns the resolved Intl options for this DateTime.\n   * This is useful in understanding the behavior of formatting methods\n   * @param {Object} opts - the same options as toLocaleString\n   * @return {Object}\n   */\n  resolvedLocaleOptions(opts = {}) {\n    const { locale, numberingSystem, calendar } = Formatter.create(\n      this.loc.clone(opts),\n      opts\n    ).resolvedOptions(this);\n    return { locale, numberingSystem, outputCalendar: calendar };\n  }\n\n  // TRANSFORM\n\n  /**\n   * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to {@link DateTime#setZone}('utc')\n   * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n   * @param {Object} [opts={}] - options to pass to `setZone()`\n   * @return {DateTime}\n   */\n  toUTC(offset = 0, opts = {}) {\n    return this.setZone(FixedOffsetZone.instance(offset), opts);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to `setZone('local')`\n   * @return {DateTime}\n   */\n  toLocal() {\n    return this.setZone(Settings.defaultZone);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n   *\n   * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n   * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n   * @return {DateTime}\n   */\n  setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n    zone = normalizeZone(zone, Settings.defaultZone);\n    if (zone.equals(this.zone)) {\n      return this;\n    } else if (!zone.isValid) {\n      return DateTime.invalid(unsupportedZone(zone));\n    } else {\n      let newTS = this.ts;\n      if (keepLocalTime || keepCalendarTime) {\n        const offsetGuess = zone.offset(this.ts);\n        const asObj = this.toObject();\n        [newTS] = objToTS(asObj, offsetGuess, zone);\n      }\n      return clone(this, { ts: newTS, zone });\n    }\n  }\n\n  /**\n   * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n   * @param {Object} properties - the properties to set\n   * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n   * @return {DateTime}\n   */\n  reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n    return clone(this, { loc });\n  }\n\n  /**\n   * \"Set\" the locale. Returns a newly-constructed DateTime.\n   * Just a convenient alias for reconfigure({ locale })\n   * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n   * @return {DateTime}\n   */\n  setLocale(locale) {\n    return this.reconfigure({ locale });\n  }\n\n  /**\n   * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n   * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dt.set({ year: 2017 })\n   * @example dt.set({ hour: 8, minute: 30 })\n   * @example dt.set({ weekday: 5 })\n   * @example dt.set({ year: 2005, ordinal: 234 })\n   * @return {DateTime}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const normalized = normalizeObject(values, normalizeUnit),\n      settingWeekStuff =\n        !isUndefined(normalized.weekYear) ||\n        !isUndefined(normalized.weekNumber) ||\n        !isUndefined(normalized.weekday),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    let mixed;\n    if (settingWeekStuff) {\n      mixed = weekToGregorian({ ...gregorianToWeek(this.c), ...normalized });\n    } else if (!isUndefined(normalized.ordinal)) {\n      mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n    } else {\n      mixed = { ...this.toObject(), ...normalized };\n\n      // if we didn't set the day but we ended up on an overflow date,\n      // use the last day of the right month\n      if (isUndefined(normalized.day)) {\n        mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n      }\n    }\n\n    const [ts, o] = objToTS(mixed, this.o, this.zone);\n    return clone(this, { ts, o });\n  }\n\n  /**\n   * Add a period of time to this DateTime and return the resulting DateTime\n   *\n   * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @example DateTime.now().plus(123) //~> in 123 milliseconds\n   * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n   * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n   * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n   * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n   * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n   * @return {DateTime}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n    const dur = Duration.fromDurationLike(duration);\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * Subtract a period of time to this DateTime and return the resulting DateTime\n   * See {@link DateTime#plus}\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   @return {DateTime}\n   */\n  minus(duration) {\n    if (!this.isValid) return this;\n    const dur = Duration.fromDurationLike(duration).negate();\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * \"Set\" this DateTime to the beginning of a unit of time.\n   * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n   * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n   * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n   * @return {DateTime}\n   */\n  startOf(unit) {\n    if (!this.isValid) return this;\n    const o = {},\n      normalizedUnit = Duration.normalizeUnit(unit);\n    switch (normalizedUnit) {\n      case \"years\":\n        o.month = 1;\n      // falls through\n      case \"quarters\":\n      case \"months\":\n        o.day = 1;\n      // falls through\n      case \"weeks\":\n      case \"days\":\n        o.hour = 0;\n      // falls through\n      case \"hours\":\n        o.minute = 0;\n      // falls through\n      case \"minutes\":\n        o.second = 0;\n      // falls through\n      case \"seconds\":\n        o.millisecond = 0;\n        break;\n      case \"milliseconds\":\n        break;\n      // no default, invalid units throw in normalizeUnit()\n    }\n\n    if (normalizedUnit === \"weeks\") {\n      o.weekday = 1;\n    }\n\n    if (normalizedUnit === \"quarters\") {\n      const q = Math.ceil(this.month / 3);\n      o.month = (q - 1) * 3 + 1;\n    }\n\n    return this.set(o);\n  }\n\n  /**\n   * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n   * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n   * @return {DateTime}\n   */\n  endOf(unit) {\n    return this.isValid\n      ? this.plus({ [unit]: 1 })\n          .startOf(unit)\n          .minus(1)\n      : this;\n  }\n\n  // OUTPUT\n\n  /**\n   * Returns a string representation of this DateTime formatted according to the specified format string.\n   * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - opts to override the configuration options on this DateTime\n   * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n   * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n   * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n   * of the DateTime in the assigned locale.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n   * @param {Object} opts - opts to override the configuration options on this DateTime\n   * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n   * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n   * @example DateTime.now().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017'\n   * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n   * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n   * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n   * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n   * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n   * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n   * @return {string}\n   */\n  toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n      : INVALID;\n  }\n\n  /**\n   * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n   * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n   * @example DateTime.now().toLocaleParts(); //=> [\n   *                                   //=>   { type: 'day', value: '25' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'month', value: '05' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'year', value: '1982' }\n   *                                   //=> ]\n   */\n  toLocaleParts(opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n      : [];\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n   * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n   * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n   * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n   * @return {string}\n   */\n  toISO({\n    format = \"extended\",\n    suppressSeconds = false,\n    suppressMilliseconds = false,\n    includeOffset = true,\n    extendedZone = false,\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    const ext = format === \"extended\";\n\n    let c = toISODate(this, ext);\n    c += \"T\";\n    c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone);\n    return c;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's date component\n   * @param {Object} opts - options\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n   * @return {string}\n   */\n  toISODate({ format = \"extended\" } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    return toISODate(this, format === \"extended\");\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's week date\n   * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n   * @return {string}\n   */\n  toISOWeekDate() {\n    return toTechFormat(this, \"kkkk-'W'WW-c\");\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's time component\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n   * @return {string}\n   */\n  toISOTime({\n    suppressMilliseconds = false,\n    suppressSeconds = false,\n    includeOffset = true,\n    includePrefix = false,\n    extendedZone = false,\n    format = \"extended\",\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    let c = includePrefix ? \"T\" : \"\";\n    return (\n      c +\n      toISOTime(\n        this,\n        format === \"extended\",\n        suppressSeconds,\n        suppressMilliseconds,\n        includeOffset,\n        extendedZone\n      )\n    );\n  }\n\n  /**\n   * Returns an RFC 2822-compatible string representation of this DateTime\n   * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n   * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n   * @return {string}\n   */\n  toRFC2822() {\n    return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n   * Specifically, the string conforms to RFC 1123.\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n   * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n   * @return {string}\n   */\n  toHTTP() {\n    return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Date\n   * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n   * @return {string}\n   */\n  toSQLDate() {\n    if (!this.isValid) {\n      return null;\n    }\n    return toISODate(this, true);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Time\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n   * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n   * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n   * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n   * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n   * @return {string}\n   */\n  toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n    let fmt = \"HH:mm:ss.SSS\";\n\n    if (includeZone || includeOffset) {\n      if (includeOffsetSpace) {\n        fmt += \" \";\n      }\n      if (includeZone) {\n        fmt += \"z\";\n      } else if (includeOffset) {\n        fmt += \"ZZ\";\n      }\n    }\n\n    return toTechFormat(this, fmt, true);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n   * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n   * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n   * @return {string}\n   */\n  toSQL(opts = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for debugging\n   * @return {string}\n   */\n  toString() {\n    return this.isValid ? this.toISO() : INVALID;\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime.\n   * @return {number}\n   */\n  toMillis() {\n    return this.isValid ? this.ts : NaN;\n  }\n\n  /**\n   * Returns the epoch seconds of this DateTime.\n   * @return {number}\n   */\n  toSeconds() {\n    return this.isValid ? this.ts / 1000 : NaN;\n  }\n\n  /**\n   * Returns the epoch seconds (as a whole number) of this DateTime.\n   * @return {number}\n   */\n  toUnixInteger() {\n    return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns a BSON serializable equivalent to this DateTime.\n   * @return {Date}\n   */\n  toBSON() {\n    return this.toJSDate();\n  }\n\n  /**\n   * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n   * @param opts - options for generating the object\n   * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n   * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n   * @return {Object}\n   */\n  toObject(opts = {}) {\n    if (!this.isValid) return {};\n\n    const base = { ...this.c };\n\n    if (opts.includeConfig) {\n      base.outputCalendar = this.outputCalendar;\n      base.numberingSystem = this.loc.numberingSystem;\n      base.locale = this.loc.locale;\n    }\n    return base;\n  }\n\n  /**\n   * Returns a JavaScript Date equivalent to this DateTime.\n   * @return {Date}\n   */\n  toJSDate() {\n    return new Date(this.isValid ? this.ts : NaN);\n  }\n\n  // COMPARE\n\n  /**\n   * Return the difference between two DateTimes as a Duration.\n   * @param {DateTime} otherDateTime - the DateTime to compare this one to\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example\n   * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n   *     i2 = DateTime.fromISO('1983-10-14T10:30');\n   * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n   * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n   * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n   * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n   * @return {Duration}\n   */\n  diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n    if (!this.isValid || !otherDateTime.isValid) {\n      return Duration.invalid(\"created by diffing an invalid DateTime\");\n    }\n\n    const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n    const units = maybeArray(unit).map(Duration.normalizeUnit),\n      otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n      earlier = otherIsLater ? this : otherDateTime,\n      later = otherIsLater ? otherDateTime : this,\n      diffed = diff(earlier, later, units, durOpts);\n\n    return otherIsLater ? diffed.negate() : diffed;\n  }\n\n  /**\n   * Return the difference between this DateTime and right now.\n   * See {@link DateTime#diff}\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  diffNow(unit = \"milliseconds\", opts = {}) {\n    return this.diff(DateTime.now(), unit, opts);\n  }\n\n  /**\n   * Return an Interval spanning between this DateTime and another DateTime\n   * @param {DateTime} otherDateTime - the other end point of the Interval\n   * @return {Interval}\n   */\n  until(otherDateTime) {\n    return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n  }\n\n  /**\n   * Return whether this DateTime is in the same unit of time as another DateTime.\n   * Higher-order units must also be identical for this function to return `true`.\n   * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n   * @param {DateTime} otherDateTime - the other DateTime\n   * @param {string} unit - the unit of time to check sameness on\n   * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n   * @return {boolean}\n   */\n  hasSame(otherDateTime, unit) {\n    if (!this.isValid) return false;\n\n    const inputMs = otherDateTime.valueOf();\n    const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n    return adjustedToZone.startOf(unit) <= inputMs && inputMs <= adjustedToZone.endOf(unit);\n  }\n\n  /**\n   * Equality check\n   * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid.\n   * To compare just the millisecond values, use `+dt1 === +dt2`.\n   * @param {DateTime} other - the other DateTime\n   * @return {boolean}\n   */\n  equals(other) {\n    return (\n      this.isValid &&\n      other.isValid &&\n      this.valueOf() === other.valueOf() &&\n      this.zone.equals(other.zone) &&\n      this.loc.equals(other.loc)\n    );\n  }\n\n  /**\n   * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n   * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n   * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n   * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n   * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n   * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n   * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n   * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n   */\n  toRelative(options = {}) {\n    if (!this.isValid) return null;\n    const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n      padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n    let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n    let unit = options.unit;\n    if (Array.isArray(options.unit)) {\n      units = options.unit;\n      unit = undefined;\n    }\n    return diffRelative(base, this.plus(padding), {\n      ...options,\n      numeric: \"always\",\n      units,\n      unit,\n    });\n  }\n\n  /**\n   * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n   * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n   * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n   * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n   */\n  toRelativeCalendar(options = {}) {\n    if (!this.isValid) return null;\n\n    return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n      ...options,\n      numeric: \"auto\",\n      units: [\"years\", \"months\", \"days\"],\n      calendary: true,\n    });\n  }\n\n  /**\n   * Return the min of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n   * @return {DateTime} the min DateTime, or undefined if called with no argument\n   */\n  static min(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n  }\n\n  /**\n   * Return the max of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n   * @return {DateTime} the max DateTime, or undefined if called with no argument\n   */\n  static max(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n  }\n\n  // MISC\n\n  /**\n   * Explain how a string would be parsed by fromFormat()\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see description)\n   * @param {Object} options - options taken by fromFormat()\n   * @return {Object}\n   */\n  static fromFormatExplain(text, fmt, options = {}) {\n    const { locale = null, numberingSystem = null } = options,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      });\n    return explainFromTokens(localeToUse, text, fmt);\n  }\n\n  /**\n   * @deprecated use fromFormatExplain instead\n   */\n  static fromStringExplain(text, fmt, options = {}) {\n    return DateTime.fromFormatExplain(text, fmt, options);\n  }\n\n  // FORMAT PRESETS\n\n  /**\n   * {@link DateTime#toLocaleString} format like 10/14/1983\n   * @type {Object}\n   */\n  static get DATE_SHORT() {\n    return Formats.DATE_SHORT;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED() {\n    return Formats.DATE_MED;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED_WITH_WEEKDAY() {\n    return Formats.DATE_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_FULL() {\n    return Formats.DATE_FULL;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_HUGE() {\n    return Formats.DATE_HUGE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_SIMPLE() {\n    return Formats.TIME_SIMPLE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SECONDS() {\n    return Formats.TIME_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SHORT_OFFSET() {\n    return Formats.TIME_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_LONG_OFFSET() {\n    return Formats.TIME_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_SIMPLE() {\n    return Formats.TIME_24_SIMPLE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SECONDS() {\n    return Formats.TIME_24_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SHORT_OFFSET() {\n    return Formats.TIME_24_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_LONG_OFFSET() {\n    return Formats.TIME_24_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT() {\n    return Formats.DATETIME_SHORT;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT_WITH_SECONDS() {\n    return Formats.DATETIME_SHORT_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED() {\n    return Formats.DATETIME_MED;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_SECONDS() {\n    return Formats.DATETIME_MED_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_WEEKDAY() {\n    return Formats.DATETIME_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL() {\n    return Formats.DATETIME_FULL;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL_WITH_SECONDS() {\n    return Formats.DATETIME_FULL_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE() {\n    return Formats.DATETIME_HUGE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE_WITH_SECONDS() {\n    return Formats.DATETIME_HUGE_WITH_SECONDS;\n  }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n  if (DateTime.isDateTime(dateTimeish)) {\n    return dateTimeish;\n  } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n    return DateTime.fromJSDate(dateTimeish);\n  } else if (dateTimeish && typeof dateTimeish === \"object\") {\n    return DateTime.fromObject(dateTimeish);\n  } else {\n    throw new InvalidArgumentError(\n      `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n    );\n  }\n}\n","import { APIClient } from \"@/api/client\";\nimport { useAPIBaseUrl } from \"@/composables/api\";\nimport settings from \"@/settings\";\n\nconst { APIBaseUrl } = useAPIBaseUrl();\n\nconst SCHEDULE_ENDPOINT = `${settings.API_BASE_URL}broadcast/schedule/`;\nconst PROGRAM_ENDPOINT = `${settings.API_BASE_URL}broadcast/program/`;\nconst EMISSION_ENDPOINT = `${settings.API_BASE_URL}broadcast/emissions/`;\nconst EDITOR_ENDPOINT = `${APIBaseUrl.value}broadcast/editors/`;\n\nasync function getSchedule(params: any) {\n  const response = await APIClient.get(SCHEDULE_ENDPOINT, { params });\n  return response.data;\n}\n\nasync function getProgram(date: string) {\n  const url = PROGRAM_ENDPOINT;\n  const params = {\n    date,\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\nasync function getEditors(limit: number, offset: number) {\n  const url = EDITOR_ENDPOINT;\n  const params = {\n    limit,\n    offset,\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\nasync function getEditor(uid: string) {\n  const url = `${EDITOR_ENDPOINT}${uid}/`;\n  const params = {\n    expand: [\"identifiers\", \"tags\"],\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\nasync function getEmission(uid: string) {\n  const url = `${EMISSION_ENDPOINT}${uid}/`;\n  const params = {\n    expand: [\"media_set\"],\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\nexport { getEditor, getEditors, getEmission, getProgram, getSchedule };\n","import { computed, ref } from \"vue\";\nimport { useIntervalFn } from \"@vueuse/core\";\nimport { DateTime } from \"luxon\";\nimport { defineStore } from \"pinia\";\n\nimport settings from \"@/settings\";\n\nconst INTERVAL = 1000;\nconst FIXED_LATENCY = settings.STREAM_LATENCY;\n\nexport const useTimeStore = defineStore(\"time\", () => {\n  const now = ref(DateTime.now());\n  const streamLatency = ref(0);\n  const latency = computed(() => {\n    return FIXED_LATENCY + streamLatency.value;\n  });\n  const time = computed(() => {\n    return now.value.minus({ seconds: latency.value });\n  });\n  const { pause, resume } = useIntervalFn(() => {\n    now.value = DateTime.now();\n  }, INTERVAL);\n  return {\n    time,\n    latency,\n    pause,\n    resume,\n  };\n});\n","import { DateTime } from \"luxon\";\nimport { defineStore } from \"pinia\";\n\nimport { getSchedule } from \"@/api/broadcast\";\nimport { useTimeStore } from \"@/stores/time\";\nimport type { Schedule, ScheduleMedia } from \"@/typings/api\";\n\nexport type AnnotatedSchedule = Schedule & {\n  dtStart: DateTime;\n  dtEnd: DateTime;\n};\n\nexport type AnnotatedScheduleMedia = ScheduleMedia & {\n  cueIn?: number;\n  cueOut?: number;\n  fadeIn?: number;\n  fadeOut?: number;\n};\n\ninterface State {\n  schedule: Array<AnnotatedSchedule>;\n}\n\nexport const useScheduleStore = defineStore(\"schedule\", {\n  state: (): State => ({\n    schedule: [],\n  }),\n  persist: true,\n  getters: {\n    time(): DateTime {\n      const { time } = useTimeStore();\n      return time;\n    },\n    current(state: State): AnnotatedSchedule | null {\n      const item = state.schedule.find(\n        // (s: AnnotatedSchedule) => s.dtStart <= this.time && s.dtEnd > this.time\n        // NOTE: check possible implications\n        (s: AnnotatedSchedule) => s.dtStart <= this.time\n      );\n      return item ? item : null;\n    },\n    items(state: State): Array<AnnotatedSchedule> {\n      if (this.current?.dtStart) {\n        const dtStart = this.current?.dtStart;\n        return state.schedule.filter((s) => s.dtStart <= dtStart);\n      }\n      return [];\n    },\n    past(state: State): Array<AnnotatedSchedule> {\n      if (this.current?.dtStart) {\n        const dtStart = this.current?.dtStart;\n        return state.schedule.filter((s) => s.dtStart < dtStart);\n      }\n      return [];\n    },\n    upcoming(state: State): Array<AnnotatedSchedule> {\n      if (this.current?.dtStart) {\n        const dtStart = this.current?.dtStart;\n        return state.schedule.filter((s) => s.dtStart > dtStart);\n      }\n      return [];\n    },\n    next(): AnnotatedSchedule | null {\n      if (this.upcoming.length) {\n        return this.upcoming[this.upcoming.length - 1];\n      }\n      return null;\n    },\n    currentMedia(): AnnotatedScheduleMedia | null {\n      return this.current?.media ?? null;\n    },\n    nextMedia(): AnnotatedScheduleMedia | null {\n      return this.next?.media ?? null;\n    },\n    // items(): Array<AnnotatedSchedule | null> {\n    //   return [this.next, this.current, ...this.past];\n    // },\n  },\n  actions: {\n    async loadSchedule(): Promise<void> {\n      const params = {\n        secondsAhead: 120 * 60,\n        secondsBack: 120 * 60,\n      };\n      const result = await getSchedule(params);\n      this.schedule = result.map((el: Schedule): AnnotatedSchedule => {\n        return {\n          ...el,\n          dtStart: DateTime.fromISO(el.timeStart),\n          dtEnd: DateTime.fromISO(el.timeEnd),\n        };\n      });\n    },\n    async setSchedule(data: Array<Schedule>): Promise<void> {\n      // used by app-bridge in app-mode\n      this.schedule = data.map((el: Schedule): AnnotatedSchedule => {\n        return {\n          ...el,\n          dtStart: DateTime.fromISO(el.timeStart),\n          dtEnd: DateTime.fromISO(el.timeEnd),\n        };\n      });\n    },\n  },\n});\n","/*!\n  * vue-router v4.2.2\n  * (c) 2023 Eduardo San Martin Morote\n  * @license MIT\n  */\nimport { getCurrentInstance, inject, onUnmounted, onDeactivated, onActivated, computed, unref, watchEffect, defineComponent, reactive, h, provide, ref, watch, shallowRef, nextTick } from 'vue';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\nconst isBrowser = typeof window !== 'undefined';\n\nfunction isESModule(obj) {\r\n    return obj.__esModule || obj[Symbol.toStringTag] === 'Module';\r\n}\r\nconst assign = Object.assign;\r\nfunction applyToParams(fn, params) {\r\n    const newParams = {};\r\n    for (const key in params) {\r\n        const value = params[key];\r\n        newParams[key] = isArray(value)\r\n            ? value.map(fn)\r\n            : fn(value);\r\n    }\r\n    return newParams;\r\n}\r\nconst noop = () => { };\r\n/**\r\n * Typesafe alternative to Array.isArray\r\n * https://github.com/microsoft/TypeScript/pull/48228\r\n */\r\nconst isArray = Array.isArray;\n\nfunction warn(msg) {\r\n    // avoid using ...args as it breaks in older Edge builds\r\n    const args = Array.from(arguments).slice(1);\r\n    console.warn.apply(console, ['[Vue Router warn]: ' + msg].concat(args));\r\n}\n\nconst TRAILING_SLASH_RE = /\\/$/;\r\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, '');\r\n/**\r\n * Transforms a URI into a normalized history location\r\n *\r\n * @param parseQuery\r\n * @param location - URI to normalize\r\n * @param currentLocation - current absolute location. Allows resolving relative\r\n * paths. Must start with `/`. Defaults to `/`\r\n * @returns a normalized history location\r\n */\r\nfunction parseURL(parseQuery, location, currentLocation = '/') {\r\n    let path, query = {}, searchString = '', hash = '';\r\n    // Could use URL and URLSearchParams but IE 11 doesn't support it\r\n    // TODO: move to new URL()\r\n    const hashPos = location.indexOf('#');\r\n    let searchPos = location.indexOf('?');\r\n    // the hash appears before the search, so it's not part of the search string\r\n    if (hashPos < searchPos && hashPos >= 0) {\r\n        searchPos = -1;\r\n    }\r\n    if (searchPos > -1) {\r\n        path = location.slice(0, searchPos);\r\n        searchString = location.slice(searchPos + 1, hashPos > -1 ? hashPos : location.length);\r\n        query = parseQuery(searchString);\r\n    }\r\n    if (hashPos > -1) {\r\n        path = path || location.slice(0, hashPos);\r\n        // keep the # character\r\n        hash = location.slice(hashPos, location.length);\r\n    }\r\n    // no search and no query\r\n    path = resolveRelativePath(path != null ? path : location, currentLocation);\r\n    // empty path means a relative query or hash `?foo=f`, `#thing`\r\n    return {\r\n        fullPath: path + (searchString && '?') + searchString + hash,\r\n        path,\r\n        query,\r\n        hash,\r\n    };\r\n}\r\n/**\r\n * Stringifies a URL object\r\n *\r\n * @param stringifyQuery\r\n * @param location\r\n */\r\nfunction stringifyURL(stringifyQuery, location) {\r\n    const query = location.query ? stringifyQuery(location.query) : '';\r\n    return location.path + (query && '?') + query + (location.hash || '');\r\n}\r\n/**\r\n * Strips off the base from the beginning of a location.pathname in a non-case-sensitive way.\r\n *\r\n * @param pathname - location.pathname\r\n * @param base - base to strip off\r\n */\r\nfunction stripBase(pathname, base) {\r\n    // no base or base is not found at the beginning\r\n    if (!base || !pathname.toLowerCase().startsWith(base.toLowerCase()))\r\n        return pathname;\r\n    return pathname.slice(base.length) || '/';\r\n}\r\n/**\r\n * Checks if two RouteLocation are equal. This means that both locations are\r\n * pointing towards the same {@link RouteRecord} and that all `params`, `query`\r\n * parameters and `hash` are the same\r\n *\r\n * @param stringifyQuery - A function that takes a query object of type LocationQueryRaw and returns a string representation of it.\r\n * @param a - first {@link RouteLocation}\r\n * @param b - second {@link RouteLocation}\r\n */\r\nfunction isSameRouteLocation(stringifyQuery, a, b) {\r\n    const aLastIndex = a.matched.length - 1;\r\n    const bLastIndex = b.matched.length - 1;\r\n    return (aLastIndex > -1 &&\r\n        aLastIndex === bLastIndex &&\r\n        isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) &&\r\n        isSameRouteLocationParams(a.params, b.params) &&\r\n        stringifyQuery(a.query) === stringifyQuery(b.query) &&\r\n        a.hash === b.hash);\r\n}\r\n/**\r\n * Check if two `RouteRecords` are equal. Takes into account aliases: they are\r\n * considered equal to the `RouteRecord` they are aliasing.\r\n *\r\n * @param a - first {@link RouteRecord}\r\n * @param b - second {@link RouteRecord}\r\n */\r\nfunction isSameRouteRecord(a, b) {\r\n    // since the original record has an undefined value for aliasOf\r\n    // but all aliases point to the original record, this will always compare\r\n    // the original record\r\n    return (a.aliasOf || a) === (b.aliasOf || b);\r\n}\r\nfunction isSameRouteLocationParams(a, b) {\r\n    if (Object.keys(a).length !== Object.keys(b).length)\r\n        return false;\r\n    for (const key in a) {\r\n        if (!isSameRouteLocationParamsValue(a[key], b[key]))\r\n            return false;\r\n    }\r\n    return true;\r\n}\r\nfunction isSameRouteLocationParamsValue(a, b) {\r\n    return isArray(a)\r\n        ? isEquivalentArray(a, b)\r\n        : isArray(b)\r\n            ? isEquivalentArray(b, a)\r\n            : a === b;\r\n}\r\n/**\r\n * Check if two arrays are the same or if an array with one single entry is the\r\n * same as another primitive value. Used to check query and parameters\r\n *\r\n * @param a - array of values\r\n * @param b - array of values or a single value\r\n */\r\nfunction isEquivalentArray(a, b) {\r\n    return isArray(b)\r\n        ? a.length === b.length && a.every((value, i) => value === b[i])\r\n        : a.length === 1 && a[0] === b;\r\n}\r\n/**\r\n * Resolves a relative path that starts with `.`.\r\n *\r\n * @param to - path location we are resolving\r\n * @param from - currentLocation.path, should start with `/`\r\n */\r\nfunction resolveRelativePath(to, from) {\r\n    if (to.startsWith('/'))\r\n        return to;\r\n    if ((process.env.NODE_ENV !== 'production') && !from.startsWith('/')) {\r\n        warn(`Cannot resolve a relative location without an absolute path. Trying to resolve \"${to}\" from \"${from}\". It should look like \"/${from}\".`);\r\n        return to;\r\n    }\r\n    if (!to)\r\n        return from;\r\n    const fromSegments = from.split('/');\r\n    const toSegments = to.split('/');\r\n    const lastToSegment = toSegments[toSegments.length - 1];\r\n    // make . and ./ the same (../ === .., ../../ === ../..)\r\n    // this is the same behavior as new URL()\r\n    if (lastToSegment === '..' || lastToSegment === '.') {\r\n        toSegments.push('');\r\n    }\r\n    let position = fromSegments.length - 1;\r\n    let toPosition;\r\n    let segment;\r\n    for (toPosition = 0; toPosition < toSegments.length; toPosition++) {\r\n        segment = toSegments[toPosition];\r\n        // we stay on the same position\r\n        if (segment === '.')\r\n            continue;\r\n        // go up in the from array\r\n        if (segment === '..') {\r\n            // we can't go below zero, but we still need to increment toPosition\r\n            if (position > 1)\r\n                position--;\r\n            // continue\r\n        }\r\n        // we reached a non-relative path, we stop here\r\n        else\r\n            break;\r\n    }\r\n    return (fromSegments.slice(0, position).join('/') +\r\n        '/' +\r\n        toSegments\r\n            // ensure we use at least the last element in the toSegments\r\n            .slice(toPosition - (toPosition === toSegments.length ? 1 : 0))\r\n            .join('/'));\r\n}\n\nvar NavigationType;\r\n(function (NavigationType) {\r\n    NavigationType[\"pop\"] = \"pop\";\r\n    NavigationType[\"push\"] = \"push\";\r\n})(NavigationType || (NavigationType = {}));\r\nvar NavigationDirection;\r\n(function (NavigationDirection) {\r\n    NavigationDirection[\"back\"] = \"back\";\r\n    NavigationDirection[\"forward\"] = \"forward\";\r\n    NavigationDirection[\"unknown\"] = \"\";\r\n})(NavigationDirection || (NavigationDirection = {}));\r\n/**\r\n * Starting location for Histories\r\n */\r\nconst START = '';\r\n// Generic utils\r\n/**\r\n * Normalizes a base by removing any trailing slash and reading the base tag if\r\n * present.\r\n *\r\n * @param base - base to normalize\r\n */\r\nfunction normalizeBase(base) {\r\n    if (!base) {\r\n        if (isBrowser) {\r\n            // respect <base> tag\r\n            const baseEl = document.querySelector('base');\r\n            base = (baseEl && baseEl.getAttribute('href')) || '/';\r\n            // strip full URL origin\r\n            base = base.replace(/^\\w+:\\/\\/[^\\/]+/, '');\r\n        }\r\n        else {\r\n            base = '/';\r\n        }\r\n    }\r\n    // ensure leading slash when it was removed by the regex above avoid leading\r\n    // slash with hash because the file could be read from the disk like file://\r\n    // and the leading slash would cause problems\r\n    if (base[0] !== '/' && base[0] !== '#')\r\n        base = '/' + base;\r\n    // remove the trailing slash so all other method can just do `base + fullPath`\r\n    // to build an href\r\n    return removeTrailingSlash(base);\r\n}\r\n// remove any character before the hash\r\nconst BEFORE_HASH_RE = /^[^#]+#/;\r\nfunction createHref(base, location) {\r\n    return base.replace(BEFORE_HASH_RE, '#') + location;\r\n}\n\nfunction getElementPosition(el, offset) {\r\n    const docRect = document.documentElement.getBoundingClientRect();\r\n    const elRect = el.getBoundingClientRect();\r\n    return {\r\n        behavior: offset.behavior,\r\n        left: elRect.left - docRect.left - (offset.left || 0),\r\n        top: elRect.top - docRect.top - (offset.top || 0),\r\n    };\r\n}\r\nconst computeScrollPosition = () => ({\r\n    left: window.pageXOffset,\r\n    top: window.pageYOffset,\r\n});\r\nfunction scrollToPosition(position) {\r\n    let scrollToOptions;\r\n    if ('el' in position) {\r\n        const positionEl = position.el;\r\n        const isIdSelector = typeof positionEl === 'string' && positionEl.startsWith('#');\r\n        /**\r\n         * `id`s can accept pretty much any characters, including CSS combinators\r\n         * like `>` or `~`. It's still possible to retrieve elements using\r\n         * `document.getElementById('~')` but it needs to be escaped when using\r\n         * `document.querySelector('#\\\\~')` for it to be valid. The only\r\n         * requirements for `id`s are them to be unique on the page and to not be\r\n         * empty (`id=\"\"`). Because of that, when passing an id selector, it should\r\n         * be properly escaped for it to work with `querySelector`. We could check\r\n         * for the id selector to be simple (no CSS combinators `+ >~`) but that\r\n         * would make things inconsistent since they are valid characters for an\r\n         * `id` but would need to be escaped when using `querySelector`, breaking\r\n         * their usage and ending up in no selector returned. Selectors need to be\r\n         * escaped:\r\n         *\r\n         * - `#1-thing` becomes `#\\31 -thing`\r\n         * - `#with~symbols` becomes `#with\\\\~symbols`\r\n         *\r\n         * - More information about  the topic can be found at\r\n         *   https://mathiasbynens.be/notes/html5-id-class.\r\n         * - Practical example: https://mathiasbynens.be/demo/html5-id\r\n         */\r\n        if ((process.env.NODE_ENV !== 'production') && typeof position.el === 'string') {\r\n            if (!isIdSelector || !document.getElementById(position.el.slice(1))) {\r\n                try {\r\n                    const foundEl = document.querySelector(position.el);\r\n                    if (isIdSelector && foundEl) {\r\n                        warn(`The selector \"${position.el}\" should be passed as \"el: document.querySelector('${position.el}')\" because it starts with \"#\".`);\r\n                        // return to avoid other warnings\r\n                        return;\r\n                    }\r\n                }\r\n                catch (err) {\r\n                    warn(`The selector \"${position.el}\" is invalid. If you are using an id selector, make sure to escape it. You can find more information about escaping characters in selectors at https://mathiasbynens.be/notes/css-escapes or use CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape).`);\r\n                    // return to avoid other warnings\r\n                    return;\r\n                }\r\n            }\r\n        }\r\n        const el = typeof positionEl === 'string'\r\n            ? isIdSelector\r\n                ? document.getElementById(positionEl.slice(1))\r\n                : document.querySelector(positionEl)\r\n            : positionEl;\r\n        if (!el) {\r\n            (process.env.NODE_ENV !== 'production') &&\r\n                warn(`Couldn't find element using selector \"${position.el}\" returned by scrollBehavior.`);\r\n            return;\r\n        }\r\n        scrollToOptions = getElementPosition(el, position);\r\n    }\r\n    else {\r\n        scrollToOptions = position;\r\n    }\r\n    if ('scrollBehavior' in document.documentElement.style)\r\n        window.scrollTo(scrollToOptions);\r\n    else {\r\n        window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.pageXOffset, scrollToOptions.top != null ? scrollToOptions.top : window.pageYOffset);\r\n    }\r\n}\r\nfunction getScrollKey(path, delta) {\r\n    const position = history.state ? history.state.position - delta : -1;\r\n    return position + path;\r\n}\r\nconst scrollPositions = new Map();\r\nfunction saveScrollPosition(key, scrollPosition) {\r\n    scrollPositions.set(key, scrollPosition);\r\n}\r\nfunction getSavedScrollPosition(key) {\r\n    const scroll = scrollPositions.get(key);\r\n    // consume it so it's not used again\r\n    scrollPositions.delete(key);\r\n    return scroll;\r\n}\r\n// TODO: RFC about how to save scroll position\r\n/**\r\n * ScrollBehavior instance used by the router to compute and restore the scroll\r\n * position when navigating.\r\n */\r\n// export interface ScrollHandler<ScrollPositionEntry extends HistoryStateValue, ScrollPosition extends ScrollPositionEntry> {\r\n//   // returns a scroll position that can be saved in history\r\n//   compute(): ScrollPositionEntry\r\n//   // can take an extended ScrollPositionEntry\r\n//   scroll(position: ScrollPosition): void\r\n// }\r\n// export const scrollHandler: ScrollHandler<ScrollPosition> = {\r\n//   compute: computeScroll,\r\n//   scroll: scrollToPosition,\r\n// }\n\nlet createBaseLocation = () => location.protocol + '//' + location.host;\r\n/**\r\n * Creates a normalized history location from a window.location object\r\n * @param base - The base path\r\n * @param location - The window.location object\r\n */\r\nfunction createCurrentLocation(base, location) {\r\n    const { pathname, search, hash } = location;\r\n    // allows hash bases like #, /#, #/, #!, #!/, /#!/, or even /folder#end\r\n    const hashPos = base.indexOf('#');\r\n    if (hashPos > -1) {\r\n        let slicePos = hash.includes(base.slice(hashPos))\r\n            ? base.slice(hashPos).length\r\n            : 1;\r\n        let pathFromHash = hash.slice(slicePos);\r\n        // prepend the starting slash to hash so the url starts with /#\r\n        if (pathFromHash[0] !== '/')\r\n            pathFromHash = '/' + pathFromHash;\r\n        return stripBase(pathFromHash, '');\r\n    }\r\n    const path = stripBase(pathname, base);\r\n    return path + search + hash;\r\n}\r\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\r\n    let listeners = [];\r\n    let teardowns = [];\r\n    // TODO: should it be a stack? a Dict. Check if the popstate listener\r\n    // can trigger twice\r\n    let pauseState = null;\r\n    const popStateHandler = ({ state, }) => {\r\n        const to = createCurrentLocation(base, location);\r\n        const from = currentLocation.value;\r\n        const fromState = historyState.value;\r\n        let delta = 0;\r\n        if (state) {\r\n            currentLocation.value = to;\r\n            historyState.value = state;\r\n            // ignore the popstate and reset the pauseState\r\n            if (pauseState && pauseState === from) {\r\n                pauseState = null;\r\n                return;\r\n            }\r\n            delta = fromState ? state.position - fromState.position : 0;\r\n        }\r\n        else {\r\n            replace(to);\r\n        }\r\n        // console.log({ deltaFromCurrent })\r\n        // Here we could also revert the navigation by calling history.go(-delta)\r\n        // this listener will have to be adapted to not trigger again and to wait for the url\r\n        // to be updated before triggering the listeners. Some kind of validation function would also\r\n        // need to be passed to the listeners so the navigation can be accepted\r\n        // call all listeners\r\n        listeners.forEach(listener => {\r\n            listener(currentLocation.value, from, {\r\n                delta,\r\n                type: NavigationType.pop,\r\n                direction: delta\r\n                    ? delta > 0\r\n                        ? NavigationDirection.forward\r\n                        : NavigationDirection.back\r\n                    : NavigationDirection.unknown,\r\n            });\r\n        });\r\n    };\r\n    function pauseListeners() {\r\n        pauseState = currentLocation.value;\r\n    }\r\n    function listen(callback) {\r\n        // set up the listener and prepare teardown callbacks\r\n        listeners.push(callback);\r\n        const teardown = () => {\r\n            const index = listeners.indexOf(callback);\r\n            if (index > -1)\r\n                listeners.splice(index, 1);\r\n        };\r\n        teardowns.push(teardown);\r\n        return teardown;\r\n    }\r\n    function beforeUnloadListener() {\r\n        const { history } = window;\r\n        if (!history.state)\r\n            return;\r\n        history.replaceState(assign({}, history.state, { scroll: computeScrollPosition() }), '');\r\n    }\r\n    function destroy() {\r\n        for (const teardown of teardowns)\r\n            teardown();\r\n        teardowns = [];\r\n        window.removeEventListener('popstate', popStateHandler);\r\n        window.removeEventListener('beforeunload', beforeUnloadListener);\r\n    }\r\n    // set up the listeners and prepare teardown callbacks\r\n    window.addEventListener('popstate', popStateHandler);\r\n    // TODO: could we use 'pagehide' or 'visibilitychange' instead?\r\n    // https://developer.chrome.com/blog/page-lifecycle-api/\r\n    window.addEventListener('beforeunload', beforeUnloadListener, {\r\n        passive: true,\r\n    });\r\n    return {\r\n        pauseListeners,\r\n        listen,\r\n        destroy,\r\n    };\r\n}\r\n/**\r\n * Creates a state object\r\n */\r\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\r\n    return {\r\n        back,\r\n        current,\r\n        forward,\r\n        replaced,\r\n        position: window.history.length,\r\n        scroll: computeScroll ? computeScrollPosition() : null,\r\n    };\r\n}\r\nfunction useHistoryStateNavigation(base) {\r\n    const { history, location } = window;\r\n    // private variables\r\n    const currentLocation = {\r\n        value: createCurrentLocation(base, location),\r\n    };\r\n    const historyState = { value: history.state };\r\n    // build current history entry as this is a fresh navigation\r\n    if (!historyState.value) {\r\n        changeLocation(currentLocation.value, {\r\n            back: null,\r\n            current: currentLocation.value,\r\n            forward: null,\r\n            // the length is off by one, we need to decrease it\r\n            position: history.length - 1,\r\n            replaced: true,\r\n            // don't add a scroll as the user may have an anchor, and we want\r\n            // scrollBehavior to be triggered without a saved position\r\n            scroll: null,\r\n        }, true);\r\n    }\r\n    function changeLocation(to, state, replace) {\r\n        /**\r\n         * if a base tag is provided, and we are on a normal domain, we have to\r\n         * respect the provided `base` attribute because pushState() will use it and\r\n         * potentially erase anything before the `#` like at\r\n         * https://github.com/vuejs/router/issues/685 where a base of\r\n         * `/folder/#` but a base of `/` would erase the `/folder/` section. If\r\n         * there is no host, the `<base>` tag makes no sense and if there isn't a\r\n         * base tag we can just use everything after the `#`.\r\n         */\r\n        const hashIndex = base.indexOf('#');\r\n        const url = hashIndex > -1\r\n            ? (location.host && document.querySelector('base')\r\n                ? base\r\n                : base.slice(hashIndex)) + to\r\n            : createBaseLocation() + base + to;\r\n        try {\r\n            // BROWSER QUIRK\r\n            // NOTE: Safari throws a SecurityError when calling this function 100 times in 30 seconds\r\n            history[replace ? 'replaceState' : 'pushState'](state, '', url);\r\n            historyState.value = state;\r\n        }\r\n        catch (err) {\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                warn('Error with push/replace State', err);\r\n            }\r\n            else {\r\n                console.error(err);\r\n            }\r\n            // Force the navigation, this also resets the call count\r\n            location[replace ? 'replace' : 'assign'](url);\r\n        }\r\n    }\r\n    function replace(to, data) {\r\n        const state = assign({}, history.state, buildState(historyState.value.back, \r\n        // keep back and forward entries but override current position\r\n        to, historyState.value.forward, true), data, { position: historyState.value.position });\r\n        changeLocation(to, state, true);\r\n        currentLocation.value = to;\r\n    }\r\n    function push(to, data) {\r\n        // Add to current entry the information of where we are going\r\n        // as well as saving the current position\r\n        const currentState = assign({}, \r\n        // use current history state to gracefully handle a wrong call to\r\n        // history.replaceState\r\n        // https://github.com/vuejs/router/issues/366\r\n        historyState.value, history.state, {\r\n            forward: to,\r\n            scroll: computeScrollPosition(),\r\n        });\r\n        if ((process.env.NODE_ENV !== 'production') && !history.state) {\r\n            warn(`history.state seems to have been manually replaced without preserving the necessary values. Make sure to preserve existing history state if you are manually calling history.replaceState:\\n\\n` +\r\n                `history.replaceState(history.state, '', url)\\n\\n` +\r\n                `You can find more information at https://next.router.vuejs.org/guide/migration/#usage-of-history-state.`);\r\n        }\r\n        changeLocation(currentState.current, currentState, true);\r\n        const state = assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data);\r\n        changeLocation(to, state, false);\r\n        currentLocation.value = to;\r\n    }\r\n    return {\r\n        location: currentLocation,\r\n        state: historyState,\r\n        push,\r\n        replace,\r\n    };\r\n}\r\n/**\r\n * Creates an HTML5 history. Most common history for single page applications.\r\n *\r\n * @param base -\r\n */\r\nfunction createWebHistory(base) {\r\n    base = normalizeBase(base);\r\n    const historyNavigation = useHistoryStateNavigation(base);\r\n    const historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\r\n    function go(delta, triggerListeners = true) {\r\n        if (!triggerListeners)\r\n            historyListeners.pauseListeners();\r\n        history.go(delta);\r\n    }\r\n    const routerHistory = assign({\r\n        // it's overridden right after\r\n        location: '',\r\n        base,\r\n        go,\r\n        createHref: createHref.bind(null, base),\r\n    }, historyNavigation, historyListeners);\r\n    Object.defineProperty(routerHistory, 'location', {\r\n        enumerable: true,\r\n        get: () => historyNavigation.location.value,\r\n    });\r\n    Object.defineProperty(routerHistory, 'state', {\r\n        enumerable: true,\r\n        get: () => historyNavigation.state.value,\r\n    });\r\n    return routerHistory;\r\n}\n\n/**\r\n * Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\r\n * It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\r\n *\r\n * @param base - Base applied to all urls, defaults to '/'\r\n * @returns a history object that can be passed to the router constructor\r\n */\r\nfunction createMemoryHistory(base = '') {\r\n    let listeners = [];\r\n    let queue = [START];\r\n    let position = 0;\r\n    base = normalizeBase(base);\r\n    function setLocation(location) {\r\n        position++;\r\n        if (position === queue.length) {\r\n            // we are at the end, we can simply append a new entry\r\n            queue.push(location);\r\n        }\r\n        else {\r\n            // we are in the middle, we remove everything from here in the queue\r\n            queue.splice(position);\r\n            queue.push(location);\r\n        }\r\n    }\r\n    function triggerListeners(to, from, { direction, delta }) {\r\n        const info = {\r\n            direction,\r\n            delta,\r\n            type: NavigationType.pop,\r\n        };\r\n        for (const callback of listeners) {\r\n            callback(to, from, info);\r\n        }\r\n    }\r\n    const routerHistory = {\r\n        // rewritten by Object.defineProperty\r\n        location: START,\r\n        // TODO: should be kept in queue\r\n        state: {},\r\n        base,\r\n        createHref: createHref.bind(null, base),\r\n        replace(to) {\r\n            // remove current entry and decrement position\r\n            queue.splice(position--, 1);\r\n            setLocation(to);\r\n        },\r\n        push(to, data) {\r\n            setLocation(to);\r\n        },\r\n        listen(callback) {\r\n            listeners.push(callback);\r\n            return () => {\r\n                const index = listeners.indexOf(callback);\r\n                if (index > -1)\r\n                    listeners.splice(index, 1);\r\n            };\r\n        },\r\n        destroy() {\r\n            listeners = [];\r\n            queue = [START];\r\n            position = 0;\r\n        },\r\n        go(delta, shouldTrigger = true) {\r\n            const from = this.location;\r\n            const direction = \r\n            // we are considering delta === 0 going forward, but in abstract mode\r\n            // using 0 for the delta doesn't make sense like it does in html5 where\r\n            // it reloads the page\r\n            delta < 0 ? NavigationDirection.back : NavigationDirection.forward;\r\n            position = Math.max(0, Math.min(position + delta, queue.length - 1));\r\n            if (shouldTrigger) {\r\n                triggerListeners(this.location, from, {\r\n                    direction,\r\n                    delta,\r\n                });\r\n            }\r\n        },\r\n    };\r\n    Object.defineProperty(routerHistory, 'location', {\r\n        enumerable: true,\r\n        get: () => queue[position],\r\n    });\r\n    return routerHistory;\r\n}\n\n/**\r\n * Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to\r\n * handle any URL is not possible.\r\n *\r\n * @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `<base>` tag\r\n * in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState()\r\n * calls**, meaning that if you use a `<base>` tag, it's `href` value **has to match this parameter** (ignoring anything\r\n * after the `#`).\r\n *\r\n * @example\r\n * ```js\r\n * // at https://example.com/folder\r\n * createWebHashHistory() // gives a url of `https://example.com/folder#`\r\n * createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\r\n * // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\r\n * createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\r\n * // you should avoid doing this because it changes the original url and breaks copying urls\r\n * createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\r\n *\r\n * // at file:///usr/etc/folder/index.html\r\n * // for locations with no `host`, the base is ignored\r\n * createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\r\n * ```\r\n */\r\nfunction createWebHashHistory(base) {\r\n    // Make sure this implementation is fine in terms of encoding, specially for IE11\r\n    // for `file://`, directly use the pathname and ignore the base\r\n    // location.pathname contains an initial `/` even at the root: `https://example.com`\r\n    base = location.host ? base || location.pathname + location.search : '';\r\n    // allow the user to provide a `#` in the middle: `/base/#/app`\r\n    if (!base.includes('#'))\r\n        base += '#';\r\n    if ((process.env.NODE_ENV !== 'production') && !base.endsWith('#/') && !base.endsWith('#')) {\r\n        warn(`A hash base must end with a \"#\":\\n\"${base}\" should be \"${base.replace(/#.*$/, '#')}\".`);\r\n    }\r\n    return createWebHistory(base);\r\n}\n\nfunction isRouteLocation(route) {\r\n    return typeof route === 'string' || (route && typeof route === 'object');\r\n}\r\nfunction isRouteName(name) {\r\n    return typeof name === 'string' || typeof name === 'symbol';\r\n}\n\n/**\r\n * Initial route location where the router is. Can be used in navigation guards\r\n * to differentiate the initial navigation.\r\n *\r\n * @example\r\n * ```js\r\n * import { START_LOCATION } from 'vue-router'\r\n *\r\n * router.beforeEach((to, from) => {\r\n *   if (from === START_LOCATION) {\r\n *     // initial navigation\r\n *   }\r\n * })\r\n * ```\r\n */\r\nconst START_LOCATION_NORMALIZED = {\r\n    path: '/',\r\n    name: undefined,\r\n    params: {},\r\n    query: {},\r\n    hash: '',\r\n    fullPath: '/',\r\n    matched: [],\r\n    meta: {},\r\n    redirectedFrom: undefined,\r\n};\n\nconst NavigationFailureSymbol = Symbol((process.env.NODE_ENV !== 'production') ? 'navigation failure' : '');\r\n/**\r\n * Enumeration with all possible types for navigation failures. Can be passed to\r\n * {@link isNavigationFailure} to check for specific failures.\r\n */\r\nvar NavigationFailureType;\r\n(function (NavigationFailureType) {\r\n    /**\r\n     * An aborted navigation is a navigation that failed because a navigation\r\n     * guard returned `false` or called `next(false)`\r\n     */\r\n    NavigationFailureType[NavigationFailureType[\"aborted\"] = 4] = \"aborted\";\r\n    /**\r\n     * A cancelled navigation is a navigation that failed because a more recent\r\n     * navigation finished started (not necessarily finished).\r\n     */\r\n    NavigationFailureType[NavigationFailureType[\"cancelled\"] = 8] = \"cancelled\";\r\n    /**\r\n     * A duplicated navigation is a navigation that failed because it was\r\n     * initiated while already being at the exact same location.\r\n     */\r\n    NavigationFailureType[NavigationFailureType[\"duplicated\"] = 16] = \"duplicated\";\r\n})(NavigationFailureType || (NavigationFailureType = {}));\r\n// DEV only debug messages\r\nconst ErrorTypeMessages = {\r\n    [1 /* ErrorTypes.MATCHER_NOT_FOUND */]({ location, currentLocation }) {\r\n        return `No match for\\n ${JSON.stringify(location)}${currentLocation\r\n            ? '\\nwhile being at\\n' + JSON.stringify(currentLocation)\r\n            : ''}`;\r\n    },\r\n    [2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */]({ from, to, }) {\r\n        return `Redirected from \"${from.fullPath}\" to \"${stringifyRoute(to)}\" via a navigation guard.`;\r\n    },\r\n    [4 /* ErrorTypes.NAVIGATION_ABORTED */]({ from, to }) {\r\n        return `Navigation aborted from \"${from.fullPath}\" to \"${to.fullPath}\" via a navigation guard.`;\r\n    },\r\n    [8 /* ErrorTypes.NAVIGATION_CANCELLED */]({ from, to }) {\r\n        return `Navigation cancelled from \"${from.fullPath}\" to \"${to.fullPath}\" with a new navigation.`;\r\n    },\r\n    [16 /* ErrorTypes.NAVIGATION_DUPLICATED */]({ from, to }) {\r\n        return `Avoided redundant navigation to current location: \"${from.fullPath}\".`;\r\n    },\r\n};\r\nfunction createRouterError(type, params) {\r\n    // keep full error messages in cjs versions\r\n    if ((process.env.NODE_ENV !== 'production') || !true) {\r\n        return assign(new Error(ErrorTypeMessages[type](params)), {\r\n            type,\r\n            [NavigationFailureSymbol]: true,\r\n        }, params);\r\n    }\r\n    else {\r\n        return assign(new Error(), {\r\n            type,\r\n            [NavigationFailureSymbol]: true,\r\n        }, params);\r\n    }\r\n}\r\nfunction isNavigationFailure(error, type) {\r\n    return (error instanceof Error &&\r\n        NavigationFailureSymbol in error &&\r\n        (type == null || !!(error.type & type)));\r\n}\r\nconst propertiesToLog = ['params', 'query', 'hash'];\r\nfunction stringifyRoute(to) {\r\n    if (typeof to === 'string')\r\n        return to;\r\n    if ('path' in to)\r\n        return to.path;\r\n    const location = {};\r\n    for (const key of propertiesToLog) {\r\n        if (key in to)\r\n            location[key] = to[key];\r\n    }\r\n    return JSON.stringify(location, null, 2);\r\n}\n\n// default pattern for a param: non-greedy everything but /\r\nconst BASE_PARAM_PATTERN = '[^/]+?';\r\nconst BASE_PATH_PARSER_OPTIONS = {\r\n    sensitive: false,\r\n    strict: false,\r\n    start: true,\r\n    end: true,\r\n};\r\n// Special Regex characters that must be escaped in static tokens\r\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\r\n/**\r\n * Creates a path parser from an array of Segments (a segment is an array of Tokens)\r\n *\r\n * @param segments - array of segments returned by tokenizePath\r\n * @param extraOptions - optional options for the regexp\r\n * @returns a PathParser\r\n */\r\nfunction tokensToParser(segments, extraOptions) {\r\n    const options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\r\n    // the amount of scores is the same as the length of segments except for the root segment \"/\"\r\n    const score = [];\r\n    // the regexp as a string\r\n    let pattern = options.start ? '^' : '';\r\n    // extracted keys\r\n    const keys = [];\r\n    for (const segment of segments) {\r\n        // the root segment needs special treatment\r\n        const segmentScores = segment.length ? [] : [90 /* PathScore.Root */];\r\n        // allow trailing slash\r\n        if (options.strict && !segment.length)\r\n            pattern += '/';\r\n        for (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\r\n            const token = segment[tokenIndex];\r\n            // resets the score if we are inside a sub-segment /:a-other-:b\r\n            let subSegmentScore = 40 /* PathScore.Segment */ +\r\n                (options.sensitive ? 0.25 /* PathScore.BonusCaseSensitive */ : 0);\r\n            if (token.type === 0 /* TokenType.Static */) {\r\n                // prepend the slash if we are starting a new segment\r\n                if (!tokenIndex)\r\n                    pattern += '/';\r\n                pattern += token.value.replace(REGEX_CHARS_RE, '\\\\$&');\r\n                subSegmentScore += 40 /* PathScore.Static */;\r\n            }\r\n            else if (token.type === 1 /* TokenType.Param */) {\r\n                const { value, repeatable, optional, regexp } = token;\r\n                keys.push({\r\n                    name: value,\r\n                    repeatable,\r\n                    optional,\r\n                });\r\n                const re = regexp ? regexp : BASE_PARAM_PATTERN;\r\n                // the user provided a custom regexp /:id(\\\\d+)\r\n                if (re !== BASE_PARAM_PATTERN) {\r\n                    subSegmentScore += 10 /* PathScore.BonusCustomRegExp */;\r\n                    // make sure the regexp is valid before using it\r\n                    try {\r\n                        new RegExp(`(${re})`);\r\n                    }\r\n                    catch (err) {\r\n                        throw new Error(`Invalid custom RegExp for param \"${value}\" (${re}): ` +\r\n                            err.message);\r\n                    }\r\n                }\r\n                // when we repeat we must take care of the repeating leading slash\r\n                let subPattern = repeatable ? `((?:${re})(?:/(?:${re}))*)` : `(${re})`;\r\n                // prepend the slash if we are starting a new segment\r\n                if (!tokenIndex)\r\n                    subPattern =\r\n                        // avoid an optional / if there are more segments e.g. /:p?-static\r\n                        // or /:p?-:p2\r\n                        optional && segment.length < 2\r\n                            ? `(?:/${subPattern})`\r\n                            : '/' + subPattern;\r\n                if (optional)\r\n                    subPattern += '?';\r\n                pattern += subPattern;\r\n                subSegmentScore += 20 /* PathScore.Dynamic */;\r\n                if (optional)\r\n                    subSegmentScore += -8 /* PathScore.BonusOptional */;\r\n                if (repeatable)\r\n                    subSegmentScore += -20 /* PathScore.BonusRepeatable */;\r\n                if (re === '.*')\r\n                    subSegmentScore += -50 /* PathScore.BonusWildcard */;\r\n            }\r\n            segmentScores.push(subSegmentScore);\r\n        }\r\n        // an empty array like /home/ -> [[{home}], []]\r\n        // if (!segment.length) pattern += '/'\r\n        score.push(segmentScores);\r\n    }\r\n    // only apply the strict bonus to the last score\r\n    if (options.strict && options.end) {\r\n        const i = score.length - 1;\r\n        score[i][score[i].length - 1] += 0.7000000000000001 /* PathScore.BonusStrict */;\r\n    }\r\n    // TODO: dev only warn double trailing slash\r\n    if (!options.strict)\r\n        pattern += '/?';\r\n    if (options.end)\r\n        pattern += '$';\r\n    // allow paths like /dynamic to only match dynamic or dynamic/... but not dynamic_something_else\r\n    else if (options.strict)\r\n        pattern += '(?:/|$)';\r\n    const re = new RegExp(pattern, options.sensitive ? '' : 'i');\r\n    function parse(path) {\r\n        const match = path.match(re);\r\n        const params = {};\r\n        if (!match)\r\n            return null;\r\n        for (let i = 1; i < match.length; i++) {\r\n            const value = match[i] || '';\r\n            const key = keys[i - 1];\r\n            params[key.name] = value && key.repeatable ? value.split('/') : value;\r\n        }\r\n        return params;\r\n    }\r\n    function stringify(params) {\r\n        let path = '';\r\n        // for optional parameters to allow to be empty\r\n        let avoidDuplicatedSlash = false;\r\n        for (const segment of segments) {\r\n            if (!avoidDuplicatedSlash || !path.endsWith('/'))\r\n                path += '/';\r\n            avoidDuplicatedSlash = false;\r\n            for (const token of segment) {\r\n                if (token.type === 0 /* TokenType.Static */) {\r\n                    path += token.value;\r\n                }\r\n                else if (token.type === 1 /* TokenType.Param */) {\r\n                    const { value, repeatable, optional } = token;\r\n                    const param = value in params ? params[value] : '';\r\n                    if (isArray(param) && !repeatable) {\r\n                        throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\r\n                    }\r\n                    const text = isArray(param)\r\n                        ? param.join('/')\r\n                        : param;\r\n                    if (!text) {\r\n                        if (optional) {\r\n                            // if we have more than one optional param like /:a?-static we don't need to care about the optional param\r\n                            if (segment.length < 2) {\r\n                                // remove the last slash as we could be at the end\r\n                                if (path.endsWith('/'))\r\n                                    path = path.slice(0, -1);\r\n                                // do not append a slash on the next iteration\r\n                                else\r\n                                    avoidDuplicatedSlash = true;\r\n                            }\r\n                        }\r\n                        else\r\n                            throw new Error(`Missing required param \"${value}\"`);\r\n                    }\r\n                    path += text;\r\n                }\r\n            }\r\n        }\r\n        // avoid empty path when we have multiple optional params\r\n        return path || '/';\r\n    }\r\n    return {\r\n        re,\r\n        score,\r\n        keys,\r\n        parse,\r\n        stringify,\r\n    };\r\n}\r\n/**\r\n * Compares an array of numbers as used in PathParser.score and returns a\r\n * number. This function can be used to `sort` an array\r\n *\r\n * @param a - first array of numbers\r\n * @param b - second array of numbers\r\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\r\n * should be sorted first\r\n */\r\nfunction compareScoreArray(a, b) {\r\n    let i = 0;\r\n    while (i < a.length && i < b.length) {\r\n        const diff = b[i] - a[i];\r\n        // only keep going if diff === 0\r\n        if (diff)\r\n            return diff;\r\n        i++;\r\n    }\r\n    // if the last subsegment was Static, the shorter segments should be sorted first\r\n    // otherwise sort the longest segment first\r\n    if (a.length < b.length) {\r\n        return a.length === 1 && a[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\r\n            ? -1\r\n            : 1;\r\n    }\r\n    else if (a.length > b.length) {\r\n        return b.length === 1 && b[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\r\n            ? 1\r\n            : -1;\r\n    }\r\n    return 0;\r\n}\r\n/**\r\n * Compare function that can be used with `sort` to sort an array of PathParser\r\n *\r\n * @param a - first PathParser\r\n * @param b - second PathParser\r\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\r\n */\r\nfunction comparePathParserScore(a, b) {\r\n    let i = 0;\r\n    const aScore = a.score;\r\n    const bScore = b.score;\r\n    while (i < aScore.length && i < bScore.length) {\r\n        const comp = compareScoreArray(aScore[i], bScore[i]);\r\n        // do not return if both are equal\r\n        if (comp)\r\n            return comp;\r\n        i++;\r\n    }\r\n    if (Math.abs(bScore.length - aScore.length) === 1) {\r\n        if (isLastScoreNegative(aScore))\r\n            return 1;\r\n        if (isLastScoreNegative(bScore))\r\n            return -1;\r\n    }\r\n    // if a and b share the same score entries but b has more, sort b first\r\n    return bScore.length - aScore.length;\r\n    // this is the ternary version\r\n    // return aScore.length < bScore.length\r\n    //   ? 1\r\n    //   : aScore.length > bScore.length\r\n    //   ? -1\r\n    //   : 0\r\n}\r\n/**\r\n * This allows detecting splats at the end of a path: /home/:id(.*)*\r\n *\r\n * @param score - score to check\r\n * @returns true if the last entry is negative\r\n */\r\nfunction isLastScoreNegative(score) {\r\n    const last = score[score.length - 1];\r\n    return score.length > 0 && last[last.length - 1] < 0;\r\n}\n\nconst ROOT_TOKEN = {\r\n    type: 0 /* TokenType.Static */,\r\n    value: '',\r\n};\r\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\r\n// After some profiling, the cache seems to be unnecessary because tokenizePath\r\n// (the slowest part of adding a route) is very fast\r\n// const tokenCache = new Map<string, Token[][]>()\r\nfunction tokenizePath(path) {\r\n    if (!path)\r\n        return [[]];\r\n    if (path === '/')\r\n        return [[ROOT_TOKEN]];\r\n    if (!path.startsWith('/')) {\r\n        throw new Error((process.env.NODE_ENV !== 'production')\r\n            ? `Route paths should start with a \"/\": \"${path}\" should be \"/${path}\".`\r\n            : `Invalid path \"${path}\"`);\r\n    }\r\n    // if (tokenCache.has(path)) return tokenCache.get(path)!\r\n    function crash(message) {\r\n        throw new Error(`ERR (${state})/\"${buffer}\": ${message}`);\r\n    }\r\n    let state = 0 /* TokenizerState.Static */;\r\n    let previousState = state;\r\n    const tokens = [];\r\n    // the segment will always be valid because we get into the initial state\r\n    // with the leading /\r\n    let segment;\r\n    function finalizeSegment() {\r\n        if (segment)\r\n            tokens.push(segment);\r\n        segment = [];\r\n    }\r\n    // index on the path\r\n    let i = 0;\r\n    // char at index\r\n    let char;\r\n    // buffer of the value read\r\n    let buffer = '';\r\n    // custom regexp for a param\r\n    let customRe = '';\r\n    function consumeBuffer() {\r\n        if (!buffer)\r\n            return;\r\n        if (state === 0 /* TokenizerState.Static */) {\r\n            segment.push({\r\n                type: 0 /* TokenType.Static */,\r\n                value: buffer,\r\n            });\r\n        }\r\n        else if (state === 1 /* TokenizerState.Param */ ||\r\n            state === 2 /* TokenizerState.ParamRegExp */ ||\r\n            state === 3 /* TokenizerState.ParamRegExpEnd */) {\r\n            if (segment.length > 1 && (char === '*' || char === '+'))\r\n                crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\r\n            segment.push({\r\n                type: 1 /* TokenType.Param */,\r\n                value: buffer,\r\n                regexp: customRe,\r\n                repeatable: char === '*' || char === '+',\r\n                optional: char === '*' || char === '?',\r\n            });\r\n        }\r\n        else {\r\n            crash('Invalid state to consume buffer');\r\n        }\r\n        buffer = '';\r\n    }\r\n    function addCharToBuffer() {\r\n        buffer += char;\r\n    }\r\n    while (i < path.length) {\r\n        char = path[i++];\r\n        if (char === '\\\\' && state !== 2 /* TokenizerState.ParamRegExp */) {\r\n            previousState = state;\r\n            state = 4 /* TokenizerState.EscapeNext */;\r\n            continue;\r\n        }\r\n        switch (state) {\r\n            case 0 /* TokenizerState.Static */:\r\n                if (char === '/') {\r\n                    if (buffer) {\r\n                        consumeBuffer();\r\n                    }\r\n                    finalizeSegment();\r\n                }\r\n                else if (char === ':') {\r\n                    consumeBuffer();\r\n                    state = 1 /* TokenizerState.Param */;\r\n                }\r\n                else {\r\n                    addCharToBuffer();\r\n                }\r\n                break;\r\n            case 4 /* TokenizerState.EscapeNext */:\r\n                addCharToBuffer();\r\n                state = previousState;\r\n                break;\r\n            case 1 /* TokenizerState.Param */:\r\n                if (char === '(') {\r\n                    state = 2 /* TokenizerState.ParamRegExp */;\r\n                }\r\n                else if (VALID_PARAM_RE.test(char)) {\r\n                    addCharToBuffer();\r\n                }\r\n                else {\r\n                    consumeBuffer();\r\n                    state = 0 /* TokenizerState.Static */;\r\n                    // go back one character if we were not modifying\r\n                    if (char !== '*' && char !== '?' && char !== '+')\r\n                        i--;\r\n                }\r\n                break;\r\n            case 2 /* TokenizerState.ParamRegExp */:\r\n                // TODO: is it worth handling nested regexp? like :p(?:prefix_([^/]+)_suffix)\r\n                // it already works by escaping the closing )\r\n                // https://paths.esm.dev/?p=AAMeJbiAwQEcDKbAoAAkP60PG2R6QAvgNaA6AFACM2ABuQBB#\r\n                // is this really something people need since you can also write\r\n                // /prefix_:p()_suffix\r\n                if (char === ')') {\r\n                    // handle the escaped )\r\n                    if (customRe[customRe.length - 1] == '\\\\')\r\n                        customRe = customRe.slice(0, -1) + char;\r\n                    else\r\n                        state = 3 /* TokenizerState.ParamRegExpEnd */;\r\n                }\r\n                else {\r\n                    customRe += char;\r\n                }\r\n                break;\r\n            case 3 /* TokenizerState.ParamRegExpEnd */:\r\n                // same as finalizing a param\r\n                consumeBuffer();\r\n                state = 0 /* TokenizerState.Static */;\r\n                // go back one character if we were not modifying\r\n                if (char !== '*' && char !== '?' && char !== '+')\r\n                    i--;\r\n                customRe = '';\r\n                break;\r\n            default:\r\n                crash('Unknown state');\r\n                break;\r\n        }\r\n    }\r\n    if (state === 2 /* TokenizerState.ParamRegExp */)\r\n        crash(`Unfinished custom RegExp for param \"${buffer}\"`);\r\n    consumeBuffer();\r\n    finalizeSegment();\r\n    // tokenCache.set(path, tokens)\r\n    return tokens;\r\n}\n\nfunction createRouteRecordMatcher(record, parent, options) {\r\n    const parser = tokensToParser(tokenizePath(record.path), options);\r\n    // warn against params with the same name\r\n    if ((process.env.NODE_ENV !== 'production')) {\r\n        const existingKeys = new Set();\r\n        for (const key of parser.keys) {\r\n            if (existingKeys.has(key.name))\r\n                warn(`Found duplicated params with name \"${key.name}\" for path \"${record.path}\". Only the last one will be available on \"$route.params\".`);\r\n            existingKeys.add(key.name);\r\n        }\r\n    }\r\n    const matcher = assign(parser, {\r\n        record,\r\n        parent,\r\n        // these needs to be populated by the parent\r\n        children: [],\r\n        alias: [],\r\n    });\r\n    if (parent) {\r\n        // both are aliases or both are not aliases\r\n        // we don't want to mix them because the order is used when\r\n        // passing originalRecord in Matcher.addRoute\r\n        if (!matcher.record.aliasOf === !parent.record.aliasOf)\r\n            parent.children.push(matcher);\r\n    }\r\n    return matcher;\r\n}\n\n/**\r\n * Creates a Router Matcher.\r\n *\r\n * @internal\r\n * @param routes - array of initial routes\r\n * @param globalOptions - global route options\r\n */\r\nfunction createRouterMatcher(routes, globalOptions) {\r\n    // normalized ordered array of matchers\r\n    const matchers = [];\r\n    const matcherMap = new Map();\r\n    globalOptions = mergeOptions({ strict: false, end: true, sensitive: false }, globalOptions);\r\n    function getRecordMatcher(name) {\r\n        return matcherMap.get(name);\r\n    }\r\n    function addRoute(record, parent, originalRecord) {\r\n        // used later on to remove by name\r\n        const isRootAdd = !originalRecord;\r\n        const mainNormalizedRecord = normalizeRouteRecord(record);\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent);\r\n        }\r\n        // we might be the child of an alias\r\n        mainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\r\n        const options = mergeOptions(globalOptions, record);\r\n        // generate an array of records to correctly handle aliases\r\n        const normalizedRecords = [\r\n            mainNormalizedRecord,\r\n        ];\r\n        if ('alias' in record) {\r\n            const aliases = typeof record.alias === 'string' ? [record.alias] : record.alias;\r\n            for (const alias of aliases) {\r\n                normalizedRecords.push(assign({}, mainNormalizedRecord, {\r\n                    // this allows us to hold a copy of the `components` option\r\n                    // so that async components cache is hold on the original record\r\n                    components: originalRecord\r\n                        ? originalRecord.record.components\r\n                        : mainNormalizedRecord.components,\r\n                    path: alias,\r\n                    // we might be the child of an alias\r\n                    aliasOf: originalRecord\r\n                        ? originalRecord.record\r\n                        : mainNormalizedRecord,\r\n                    // the aliases are always of the same kind as the original since they\r\n                    // are defined on the same record\r\n                }));\r\n            }\r\n        }\r\n        let matcher;\r\n        let originalMatcher;\r\n        for (const normalizedRecord of normalizedRecords) {\r\n            const { path } = normalizedRecord;\r\n            // Build up the path for nested routes if the child isn't an absolute\r\n            // route. Only add the / delimiter if the child path isn't empty and if the\r\n            // parent path doesn't have a trailing slash\r\n            if (parent && path[0] !== '/') {\r\n                const parentPath = parent.record.path;\r\n                const connectingSlash = parentPath[parentPath.length - 1] === '/' ? '' : '/';\r\n                normalizedRecord.path =\r\n                    parent.record.path + (path && connectingSlash + path);\r\n            }\r\n            if ((process.env.NODE_ENV !== 'production') && normalizedRecord.path === '*') {\r\n                throw new Error('Catch all routes (\"*\") must now be defined using a param with a custom regexp.\\n' +\r\n                    'See more at https://next.router.vuejs.org/guide/migration/#removed-star-or-catch-all-routes.');\r\n            }\r\n            // create the object beforehand, so it can be passed to children\r\n            matcher = createRouteRecordMatcher(normalizedRecord, parent, options);\r\n            if ((process.env.NODE_ENV !== 'production') && parent && path[0] === '/')\r\n                checkMissingParamsInAbsolutePath(matcher, parent);\r\n            // if we are an alias we must tell the original record that we exist,\r\n            // so we can be removed\r\n            if (originalRecord) {\r\n                originalRecord.alias.push(matcher);\r\n                if ((process.env.NODE_ENV !== 'production')) {\r\n                    checkSameParams(originalRecord, matcher);\r\n                }\r\n            }\r\n            else {\r\n                // otherwise, the first record is the original and others are aliases\r\n                originalMatcher = originalMatcher || matcher;\r\n                if (originalMatcher !== matcher)\r\n                    originalMatcher.alias.push(matcher);\r\n                // remove the route if named and only for the top record (avoid in nested calls)\r\n                // this works because the original record is the first one\r\n                if (isRootAdd && record.name && !isAliasRecord(matcher))\r\n                    removeRoute(record.name);\r\n            }\r\n            if (mainNormalizedRecord.children) {\r\n                const children = mainNormalizedRecord.children;\r\n                for (let i = 0; i < children.length; i++) {\r\n                    addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\r\n                }\r\n            }\r\n            // if there was no original record, then the first one was not an alias and all\r\n            // other aliases (if any) need to reference this record when adding children\r\n            originalRecord = originalRecord || matcher;\r\n            // TODO: add normalized records for more flexibility\r\n            // if (parent && isAliasRecord(originalRecord)) {\r\n            //   parent.children.push(originalRecord)\r\n            // }\r\n            // Avoid adding a record that doesn't display anything. This allows passing through records without a component to\r\n            // not be reached and pass through the catch all route\r\n            if ((matcher.record.components &&\r\n                Object.keys(matcher.record.components).length) ||\r\n                matcher.record.name ||\r\n                matcher.record.redirect) {\r\n                insertMatcher(matcher);\r\n            }\r\n        }\r\n        return originalMatcher\r\n            ? () => {\r\n                // since other matchers are aliases, they should be removed by the original matcher\r\n                removeRoute(originalMatcher);\r\n            }\r\n            : noop;\r\n    }\r\n    function removeRoute(matcherRef) {\r\n        if (isRouteName(matcherRef)) {\r\n            const matcher = matcherMap.get(matcherRef);\r\n            if (matcher) {\r\n                matcherMap.delete(matcherRef);\r\n                matchers.splice(matchers.indexOf(matcher), 1);\r\n                matcher.children.forEach(removeRoute);\r\n                matcher.alias.forEach(removeRoute);\r\n            }\r\n        }\r\n        else {\r\n            const index = matchers.indexOf(matcherRef);\r\n            if (index > -1) {\r\n                matchers.splice(index, 1);\r\n                if (matcherRef.record.name)\r\n                    matcherMap.delete(matcherRef.record.name);\r\n                matcherRef.children.forEach(removeRoute);\r\n                matcherRef.alias.forEach(removeRoute);\r\n            }\r\n        }\r\n    }\r\n    function getRoutes() {\r\n        return matchers;\r\n    }\r\n    function insertMatcher(matcher) {\r\n        let i = 0;\r\n        while (i < matchers.length &&\r\n            comparePathParserScore(matcher, matchers[i]) >= 0 &&\r\n            // Adding children with empty path should still appear before the parent\r\n            // https://github.com/vuejs/router/issues/1124\r\n            (matcher.record.path !== matchers[i].record.path ||\r\n                !isRecordChildOf(matcher, matchers[i])))\r\n            i++;\r\n        matchers.splice(i, 0, matcher);\r\n        // only add the original record to the name map\r\n        if (matcher.record.name && !isAliasRecord(matcher))\r\n            matcherMap.set(matcher.record.name, matcher);\r\n    }\r\n    function resolve(location, currentLocation) {\r\n        let matcher;\r\n        let params = {};\r\n        let path;\r\n        let name;\r\n        if ('name' in location && location.name) {\r\n            matcher = matcherMap.get(location.name);\r\n            if (!matcher)\r\n                throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\r\n                    location,\r\n                });\r\n            // warn if the user is passing invalid params so they can debug it better when they get removed\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                const invalidParams = Object.keys(location.params || {}).filter(paramName => !matcher.keys.find(k => k.name === paramName));\r\n                if (invalidParams.length) {\r\n                    warn(`Discarded invalid param(s) \"${invalidParams.join('\", \"')}\" when navigating. See https://github.com/vuejs/router/blob/main/packages/router/CHANGELOG.md#414-2022-08-22 for more details.`);\r\n                }\r\n            }\r\n            name = matcher.record.name;\r\n            params = assign(\r\n            // paramsFromLocation is a new object\r\n            paramsFromLocation(currentLocation.params, \r\n            // only keep params that exist in the resolved location\r\n            // TODO: only keep optional params coming from a parent record\r\n            matcher.keys.filter(k => !k.optional).map(k => k.name)), \r\n            // discard any existing params in the current location that do not exist here\r\n            // #1497 this ensures better active/exact matching\r\n            location.params &&\r\n                paramsFromLocation(location.params, matcher.keys.map(k => k.name)));\r\n            // throws if cannot be stringified\r\n            path = matcher.stringify(params);\r\n        }\r\n        else if ('path' in location) {\r\n            // no need to resolve the path with the matcher as it was provided\r\n            // this also allows the user to control the encoding\r\n            path = location.path;\r\n            if ((process.env.NODE_ENV !== 'production') && !path.startsWith('/')) {\r\n                warn(`The Matcher cannot resolve relative paths but received \"${path}\". Unless you directly called \\`matcher.resolve(\"${path}\")\\`, this is probably a bug in vue-router. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/router.`);\r\n            }\r\n            matcher = matchers.find(m => m.re.test(path));\r\n            // matcher should have a value after the loop\r\n            if (matcher) {\r\n                // we know the matcher works because we tested the regexp\r\n                params = matcher.parse(path);\r\n                name = matcher.record.name;\r\n            }\r\n            // location is a relative path\r\n        }\r\n        else {\r\n            // match by name or path of current route\r\n            matcher = currentLocation.name\r\n                ? matcherMap.get(currentLocation.name)\r\n                : matchers.find(m => m.re.test(currentLocation.path));\r\n            if (!matcher)\r\n                throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\r\n                    location,\r\n                    currentLocation,\r\n                });\r\n            name = matcher.record.name;\r\n            // since we are navigating to the same location, we don't need to pick the\r\n            // params like when `name` is provided\r\n            params = assign({}, currentLocation.params, location.params);\r\n            path = matcher.stringify(params);\r\n        }\r\n        const matched = [];\r\n        let parentMatcher = matcher;\r\n        while (parentMatcher) {\r\n            // reversed order so parents are at the beginning\r\n            matched.unshift(parentMatcher.record);\r\n            parentMatcher = parentMatcher.parent;\r\n        }\r\n        return {\r\n            name,\r\n            path,\r\n            params,\r\n            matched,\r\n            meta: mergeMetaFields(matched),\r\n        };\r\n    }\r\n    // add initial routes\r\n    routes.forEach(route => addRoute(route));\r\n    return { addRoute, resolve, removeRoute, getRoutes, getRecordMatcher };\r\n}\r\nfunction paramsFromLocation(params, keys) {\r\n    const newParams = {};\r\n    for (const key of keys) {\r\n        if (key in params)\r\n            newParams[key] = params[key];\r\n    }\r\n    return newParams;\r\n}\r\n/**\r\n * Normalizes a RouteRecordRaw. Creates a copy\r\n *\r\n * @param record\r\n * @returns the normalized version\r\n */\r\nfunction normalizeRouteRecord(record) {\r\n    return {\r\n        path: record.path,\r\n        redirect: record.redirect,\r\n        name: record.name,\r\n        meta: record.meta || {},\r\n        aliasOf: undefined,\r\n        beforeEnter: record.beforeEnter,\r\n        props: normalizeRecordProps(record),\r\n        children: record.children || [],\r\n        instances: {},\r\n        leaveGuards: new Set(),\r\n        updateGuards: new Set(),\r\n        enterCallbacks: {},\r\n        components: 'components' in record\r\n            ? record.components || null\r\n            : record.component && { default: record.component },\r\n    };\r\n}\r\n/**\r\n * Normalize the optional `props` in a record to always be an object similar to\r\n * components. Also accept a boolean for components.\r\n * @param record\r\n */\r\nfunction normalizeRecordProps(record) {\r\n    const propsObject = {};\r\n    // props does not exist on redirect records, but we can set false directly\r\n    const props = record.props || false;\r\n    if ('component' in record) {\r\n        propsObject.default = props;\r\n    }\r\n    else {\r\n        // NOTE: we could also allow a function to be applied to every component.\r\n        // Would need user feedback for use cases\r\n        for (const name in record.components)\r\n            propsObject[name] = typeof props === 'boolean' ? props : props[name];\r\n    }\r\n    return propsObject;\r\n}\r\n/**\r\n * Checks if a record or any of its parent is an alias\r\n * @param record\r\n */\r\nfunction isAliasRecord(record) {\r\n    while (record) {\r\n        if (record.record.aliasOf)\r\n            return true;\r\n        record = record.parent;\r\n    }\r\n    return false;\r\n}\r\n/**\r\n * Merge meta fields of an array of records\r\n *\r\n * @param matched - array of matched records\r\n */\r\nfunction mergeMetaFields(matched) {\r\n    return matched.reduce((meta, record) => assign(meta, record.meta), {});\r\n}\r\nfunction mergeOptions(defaults, partialOptions) {\r\n    const options = {};\r\n    for (const key in defaults) {\r\n        options[key] = key in partialOptions ? partialOptions[key] : defaults[key];\r\n    }\r\n    return options;\r\n}\r\nfunction isSameParam(a, b) {\r\n    return (a.name === b.name &&\r\n        a.optional === b.optional &&\r\n        a.repeatable === b.repeatable);\r\n}\r\n/**\r\n * Check if a path and its alias have the same required params\r\n *\r\n * @param a - original record\r\n * @param b - alias record\r\n */\r\nfunction checkSameParams(a, b) {\r\n    for (const key of a.keys) {\r\n        if (!key.optional && !b.keys.find(isSameParam.bind(null, key)))\r\n            return warn(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\r\n    }\r\n    for (const key of b.keys) {\r\n        if (!key.optional && !a.keys.find(isSameParam.bind(null, key)))\r\n            return warn(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\r\n    }\r\n}\r\n/**\r\n * A route with a name and a child with an empty path without a name should warn when adding the route\r\n *\r\n * @param mainNormalizedRecord - RouteRecordNormalized\r\n * @param parent - RouteRecordMatcher\r\n */\r\nfunction checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent) {\r\n    if (parent &&\r\n        parent.record.name &&\r\n        !mainNormalizedRecord.name &&\r\n        !mainNormalizedRecord.path) {\r\n        warn(`The route named \"${String(parent.record.name)}\" has a child without a name and an empty path. Using that name won't render the empty path child so you probably want to move the name to the child instead. If this is intentional, add a name to the child route to remove the warning.`);\r\n    }\r\n}\r\nfunction checkMissingParamsInAbsolutePath(record, parent) {\r\n    for (const key of parent.keys) {\r\n        if (!record.keys.find(isSameParam.bind(null, key)))\r\n            return warn(`Absolute path \"${record.record.path}\" must have the exact same param named \"${key.name}\" as its parent \"${parent.record.path}\".`);\r\n    }\r\n}\r\nfunction isRecordChildOf(record, parent) {\r\n    return parent.children.some(child => child === record || isRecordChildOf(record, child));\r\n}\n\n/**\r\n * Encoding Rules ␣ = Space Path: ␣ \" < > # ? { } Query: ␣ \" < > # & = Hash: ␣ \"\r\n * < > `\r\n *\r\n * On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\r\n * defines some extra characters to be encoded. Most browsers do not encode them\r\n * in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\r\n * also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\r\n * plus `-._~`. This extra safety should be applied to query by patching the\r\n * string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\r\n * should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\r\n * into a `/` if directly typed in. The _backtick_ (`````) should also be\r\n * encoded everywhere because some browsers like FF encode it when directly\r\n * written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\r\n */\r\n// const EXTRA_RESERVED_RE = /[!'()*]/g\r\n// const encodeReservedReplacer = (c: string) => '%' + c.charCodeAt(0).toString(16)\r\nconst HASH_RE = /#/g; // %23\r\nconst AMPERSAND_RE = /&/g; // %26\r\nconst SLASH_RE = /\\//g; // %2F\r\nconst EQUAL_RE = /=/g; // %3D\r\nconst IM_RE = /\\?/g; // %3F\r\nconst PLUS_RE = /\\+/g; // %2B\r\n/**\r\n * NOTE: It's not clear to me if we should encode the + symbol in queries, it\r\n * seems to be less flexible than not doing so and I can't find out the legacy\r\n * systems requiring this for regular requests like text/html. In the standard,\r\n * the encoding of the plus character is only mentioned for\r\n * application/x-www-form-urlencoded\r\n * (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\r\n * leave the plus character as is in queries. To be more flexible, we allow the\r\n * plus character on the query, but it can also be manually encoded by the user.\r\n *\r\n * Resources:\r\n * - https://url.spec.whatwg.org/#urlencoded-parsing\r\n * - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\r\n */\r\nconst ENC_BRACKET_OPEN_RE = /%5B/g; // [\r\nconst ENC_BRACKET_CLOSE_RE = /%5D/g; // ]\r\nconst ENC_CARET_RE = /%5E/g; // ^\r\nconst ENC_BACKTICK_RE = /%60/g; // `\r\nconst ENC_CURLY_OPEN_RE = /%7B/g; // {\r\nconst ENC_PIPE_RE = /%7C/g; // |\r\nconst ENC_CURLY_CLOSE_RE = /%7D/g; // }\r\nconst ENC_SPACE_RE = /%20/g; // }\r\n/**\r\n * Encode characters that need to be encoded on the path, search and hash\r\n * sections of the URL.\r\n *\r\n * @internal\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction commonEncode(text) {\r\n    return encodeURI('' + text)\r\n        .replace(ENC_PIPE_RE, '|')\r\n        .replace(ENC_BRACKET_OPEN_RE, '[')\r\n        .replace(ENC_BRACKET_CLOSE_RE, ']');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the hash section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeHash(text) {\r\n    return commonEncode(text)\r\n        .replace(ENC_CURLY_OPEN_RE, '{')\r\n        .replace(ENC_CURLY_CLOSE_RE, '}')\r\n        .replace(ENC_CARET_RE, '^');\r\n}\r\n/**\r\n * Encode characters that need to be encoded query values on the query\r\n * section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeQueryValue(text) {\r\n    return (commonEncode(text)\r\n        // Encode the space as +, encode the + to differentiate it from the space\r\n        .replace(PLUS_RE, '%2B')\r\n        .replace(ENC_SPACE_RE, '+')\r\n        .replace(HASH_RE, '%23')\r\n        .replace(AMPERSAND_RE, '%26')\r\n        .replace(ENC_BACKTICK_RE, '`')\r\n        .replace(ENC_CURLY_OPEN_RE, '{')\r\n        .replace(ENC_CURLY_CLOSE_RE, '}')\r\n        .replace(ENC_CARET_RE, '^'));\r\n}\r\n/**\r\n * Like `encodeQueryValue` but also encodes the `=` character.\r\n *\r\n * @param text - string to encode\r\n */\r\nfunction encodeQueryKey(text) {\r\n    return encodeQueryValue(text).replace(EQUAL_RE, '%3D');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodePath(text) {\r\n    return commonEncode(text).replace(HASH_RE, '%23').replace(IM_RE, '%3F');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL as a\r\n * param. This function encodes everything {@link encodePath} does plus the\r\n * slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\r\n * string instead.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeParam(text) {\r\n    return text == null ? '' : encodePath(text).replace(SLASH_RE, '%2F');\r\n}\r\n/**\r\n * Decode text using `decodeURIComponent`. Returns the original text if it\r\n * fails.\r\n *\r\n * @param text - string to decode\r\n * @returns decoded string\r\n */\r\nfunction decode(text) {\r\n    try {\r\n        return decodeURIComponent('' + text);\r\n    }\r\n    catch (err) {\r\n        (process.env.NODE_ENV !== 'production') && warn(`Error decoding \"${text}\". Using original value`);\r\n    }\r\n    return '' + text;\r\n}\n\n/**\r\n * Transforms a queryString into a {@link LocationQuery} object. Accept both, a\r\n * version with the leading `?` and without Should work as URLSearchParams\r\n\n * @internal\r\n *\r\n * @param search - search string to parse\r\n * @returns a query object\r\n */\r\nfunction parseQuery(search) {\r\n    const query = {};\r\n    // avoid creating an object with an empty key and empty value\r\n    // because of split('&')\r\n    if (search === '' || search === '?')\r\n        return query;\r\n    const hasLeadingIM = search[0] === '?';\r\n    const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&');\r\n    for (let i = 0; i < searchParams.length; ++i) {\r\n        // pre decode the + into space\r\n        const searchParam = searchParams[i].replace(PLUS_RE, ' ');\r\n        // allow the = character\r\n        const eqPos = searchParam.indexOf('=');\r\n        const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\r\n        const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\r\n        if (key in query) {\r\n            // an extra variable for ts types\r\n            let currentValue = query[key];\r\n            if (!isArray(currentValue)) {\r\n                currentValue = query[key] = [currentValue];\r\n            }\r\n            currentValue.push(value);\r\n        }\r\n        else {\r\n            query[key] = value;\r\n        }\r\n    }\r\n    return query;\r\n}\r\n/**\r\n * Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\r\n * doesn't prepend a `?`\r\n *\r\n * @internal\r\n *\r\n * @param query - query object to stringify\r\n * @returns string version of the query without the leading `?`\r\n */\r\nfunction stringifyQuery(query) {\r\n    let search = '';\r\n    for (let key in query) {\r\n        const value = query[key];\r\n        key = encodeQueryKey(key);\r\n        if (value == null) {\r\n            // only null adds the value\r\n            if (value !== undefined) {\r\n                search += (search.length ? '&' : '') + key;\r\n            }\r\n            continue;\r\n        }\r\n        // keep null values\r\n        const values = isArray(value)\r\n            ? value.map(v => v && encodeQueryValue(v))\r\n            : [value && encodeQueryValue(value)];\r\n        values.forEach(value => {\r\n            // skip undefined values in arrays as if they were not present\r\n            // smaller code than using filter\r\n            if (value !== undefined) {\r\n                // only append & with non-empty search\r\n                search += (search.length ? '&' : '') + key;\r\n                if (value != null)\r\n                    search += '=' + value;\r\n            }\r\n        });\r\n    }\r\n    return search;\r\n}\r\n/**\r\n * Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\r\n * numbers into strings, removing keys with an undefined value and replacing\r\n * undefined with null in arrays\r\n *\r\n * @param query - query object to normalize\r\n * @returns a normalized query object\r\n */\r\nfunction normalizeQuery(query) {\r\n    const normalizedQuery = {};\r\n    for (const key in query) {\r\n        const value = query[key];\r\n        if (value !== undefined) {\r\n            normalizedQuery[key] = isArray(value)\r\n                ? value.map(v => (v == null ? null : '' + v))\r\n                : value == null\r\n                    ? value\r\n                    : '' + value;\r\n        }\r\n    }\r\n    return normalizedQuery;\r\n}\n\n/**\r\n * RouteRecord being rendered by the closest ancestor Router View. Used for\r\n * `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View\r\n * Location Matched\r\n *\r\n * @internal\r\n */\r\nconst matchedRouteKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view location matched' : '');\r\n/**\r\n * Allows overriding the router view depth to control which component in\r\n * `matched` is rendered. rvd stands for Router View Depth\r\n *\r\n * @internal\r\n */\r\nconst viewDepthKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view depth' : '');\r\n/**\r\n * Allows overriding the router instance returned by `useRouter` in tests. r\r\n * stands for router\r\n *\r\n * @internal\r\n */\r\nconst routerKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router' : '');\r\n/**\r\n * Allows overriding the current route returned by `useRoute` in tests. rl\r\n * stands for route location\r\n *\r\n * @internal\r\n */\r\nconst routeLocationKey = Symbol((process.env.NODE_ENV !== 'production') ? 'route location' : '');\r\n/**\r\n * Allows overriding the current route used by router-view. Internally this is\r\n * used when the `route` prop is passed.\r\n *\r\n * @internal\r\n */\r\nconst routerViewLocationKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view location' : '');\n\n/**\r\n * Create a list of callbacks that can be reset. Used to create before and after navigation guards list\r\n */\r\nfunction useCallbacks() {\r\n    let handlers = [];\r\n    function add(handler) {\r\n        handlers.push(handler);\r\n        return () => {\r\n            const i = handlers.indexOf(handler);\r\n            if (i > -1)\r\n                handlers.splice(i, 1);\r\n        };\r\n    }\r\n    function reset() {\r\n        handlers = [];\r\n    }\r\n    return {\r\n        add,\r\n        list: () => handlers,\r\n        reset,\r\n    };\r\n}\n\nfunction registerGuard(record, name, guard) {\r\n    const removeFromList = () => {\r\n        record[name].delete(guard);\r\n    };\r\n    onUnmounted(removeFromList);\r\n    onDeactivated(removeFromList);\r\n    onActivated(() => {\r\n        record[name].add(guard);\r\n    });\r\n    record[name].add(guard);\r\n}\r\n/**\r\n * Add a navigation guard that triggers whenever the component for the current\r\n * location is about to be left. Similar to {@link beforeRouteLeave} but can be\r\n * used in any component. The guard is removed when the component is unmounted.\r\n *\r\n * @param leaveGuard - {@link NavigationGuard}\r\n */\r\nfunction onBeforeRouteLeave(leaveGuard) {\r\n    if ((process.env.NODE_ENV !== 'production') && !getCurrentInstance()) {\r\n        warn('getCurrentInstance() returned null. onBeforeRouteLeave() must be called at the top of a setup function');\r\n        return;\r\n    }\r\n    const activeRecord = inject(matchedRouteKey, \r\n    // to avoid warning\r\n    {}).value;\r\n    if (!activeRecord) {\r\n        (process.env.NODE_ENV !== 'production') &&\r\n            warn('No active route record was found when calling `onBeforeRouteLeave()`. Make sure you call this function inside a component child of <router-view>. Maybe you called it inside of App.vue?');\r\n        return;\r\n    }\r\n    registerGuard(activeRecord, 'leaveGuards', leaveGuard);\r\n}\r\n/**\r\n * Add a navigation guard that triggers whenever the current location is about\r\n * to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\r\n * component. The guard is removed when the component is unmounted.\r\n *\r\n * @param updateGuard - {@link NavigationGuard}\r\n */\r\nfunction onBeforeRouteUpdate(updateGuard) {\r\n    if ((process.env.NODE_ENV !== 'production') && !getCurrentInstance()) {\r\n        warn('getCurrentInstance() returned null. onBeforeRouteUpdate() must be called at the top of a setup function');\r\n        return;\r\n    }\r\n    const activeRecord = inject(matchedRouteKey, \r\n    // to avoid warning\r\n    {}).value;\r\n    if (!activeRecord) {\r\n        (process.env.NODE_ENV !== 'production') &&\r\n            warn('No active route record was found when calling `onBeforeRouteUpdate()`. Make sure you call this function inside a component child of <router-view>. Maybe you called it inside of App.vue?');\r\n        return;\r\n    }\r\n    registerGuard(activeRecord, 'updateGuards', updateGuard);\r\n}\r\nfunction guardToPromiseFn(guard, to, from, record, name) {\r\n    // keep a reference to the enterCallbackArray to prevent pushing callbacks if a new navigation took place\r\n    const enterCallbackArray = record &&\r\n        // name is defined if record is because of the function overload\r\n        (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\r\n    return () => new Promise((resolve, reject) => {\r\n        const next = (valid) => {\r\n            if (valid === false) {\r\n                reject(createRouterError(4 /* ErrorTypes.NAVIGATION_ABORTED */, {\r\n                    from,\r\n                    to,\r\n                }));\r\n            }\r\n            else if (valid instanceof Error) {\r\n                reject(valid);\r\n            }\r\n            else if (isRouteLocation(valid)) {\r\n                reject(createRouterError(2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */, {\r\n                    from: to,\r\n                    to: valid,\r\n                }));\r\n            }\r\n            else {\r\n                if (enterCallbackArray &&\r\n                    // since enterCallbackArray is truthy, both record and name also are\r\n                    record.enterCallbacks[name] === enterCallbackArray &&\r\n                    typeof valid === 'function') {\r\n                    enterCallbackArray.push(valid);\r\n                }\r\n                resolve();\r\n            }\r\n        };\r\n        // wrapping with Promise.resolve allows it to work with both async and sync guards\r\n        const guardReturn = guard.call(record && record.instances[name], to, from, (process.env.NODE_ENV !== 'production') ? canOnlyBeCalledOnce(next, to, from) : next);\r\n        let guardCall = Promise.resolve(guardReturn);\r\n        if (guard.length < 3)\r\n            guardCall = guardCall.then(next);\r\n        if ((process.env.NODE_ENV !== 'production') && guard.length > 2) {\r\n            const message = `The \"next\" callback was never called inside of ${guard.name ? '\"' + guard.name + '\"' : ''}:\\n${guard.toString()}\\n. If you are returning a value instead of calling \"next\", make sure to remove the \"next\" parameter from your function.`;\r\n            if (typeof guardReturn === 'object' && 'then' in guardReturn) {\r\n                guardCall = guardCall.then(resolvedValue => {\r\n                    // @ts-expect-error: _called is added at canOnlyBeCalledOnce\r\n                    if (!next._called) {\r\n                        warn(message);\r\n                        return Promise.reject(new Error('Invalid navigation guard'));\r\n                    }\r\n                    return resolvedValue;\r\n                });\r\n            }\r\n            else if (guardReturn !== undefined) {\r\n                // @ts-expect-error: _called is added at canOnlyBeCalledOnce\r\n                if (!next._called) {\r\n                    warn(message);\r\n                    reject(new Error('Invalid navigation guard'));\r\n                    return;\r\n                }\r\n            }\r\n        }\r\n        guardCall.catch(err => reject(err));\r\n    });\r\n}\r\nfunction canOnlyBeCalledOnce(next, to, from) {\r\n    let called = 0;\r\n    return function () {\r\n        if (called++ === 1)\r\n            warn(`The \"next\" callback was called more than once in one navigation guard when going from \"${from.fullPath}\" to \"${to.fullPath}\". It should be called exactly one time in each navigation guard. This will fail in production.`);\r\n        // @ts-expect-error: we put it in the original one because it's easier to check\r\n        next._called = true;\r\n        if (called === 1)\r\n            next.apply(null, arguments);\r\n    };\r\n}\r\nfunction extractComponentsGuards(matched, guardType, to, from) {\r\n    const guards = [];\r\n    for (const record of matched) {\r\n        if ((process.env.NODE_ENV !== 'production') && !record.components && !record.children.length) {\r\n            warn(`Record with path \"${record.path}\" is either missing a \"component(s)\"` +\r\n                ` or \"children\" property.`);\r\n        }\r\n        for (const name in record.components) {\r\n            let rawComponent = record.components[name];\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                if (!rawComponent ||\r\n                    (typeof rawComponent !== 'object' &&\r\n                        typeof rawComponent !== 'function')) {\r\n                    warn(`Component \"${name}\" in record with path \"${record.path}\" is not` +\r\n                        ` a valid component. Received \"${String(rawComponent)}\".`);\r\n                    // throw to ensure we stop here but warn to ensure the message isn't\r\n                    // missed by the user\r\n                    throw new Error('Invalid route component');\r\n                }\r\n                else if ('then' in rawComponent) {\r\n                    // warn if user wrote import('/component.vue') instead of () =>\r\n                    // import('./component.vue')\r\n                    warn(`Component \"${name}\" in record with path \"${record.path}\" is a ` +\r\n                        `Promise instead of a function that returns a Promise. Did you ` +\r\n                        `write \"import('./MyPage.vue')\" instead of ` +\r\n                        `\"() => import('./MyPage.vue')\" ? This will break in ` +\r\n                        `production if not fixed.`);\r\n                    const promise = rawComponent;\r\n                    rawComponent = () => promise;\r\n                }\r\n                else if (rawComponent.__asyncLoader &&\r\n                    // warn only once per component\r\n                    !rawComponent.__warnedDefineAsync) {\r\n                    rawComponent.__warnedDefineAsync = true;\r\n                    warn(`Component \"${name}\" in record with path \"${record.path}\" is defined ` +\r\n                        `using \"defineAsyncComponent()\". ` +\r\n                        `Write \"() => import('./MyPage.vue')\" instead of ` +\r\n                        `\"defineAsyncComponent(() => import('./MyPage.vue'))\".`);\r\n                }\r\n            }\r\n            // skip update and leave guards if the route component is not mounted\r\n            if (guardType !== 'beforeRouteEnter' && !record.instances[name])\r\n                continue;\r\n            if (isRouteComponent(rawComponent)) {\r\n                // __vccOpts is added by vue-class-component and contain the regular options\r\n                const options = rawComponent.__vccOpts || rawComponent;\r\n                const guard = options[guardType];\r\n                guard && guards.push(guardToPromiseFn(guard, to, from, record, name));\r\n            }\r\n            else {\r\n                // start requesting the chunk already\r\n                let componentPromise = rawComponent();\r\n                if ((process.env.NODE_ENV !== 'production') && !('catch' in componentPromise)) {\r\n                    warn(`Component \"${name}\" in record with path \"${record.path}\" is a function that does not return a Promise. If you were passing a functional component, make sure to add a \"displayName\" to the component. This will break in production if not fixed.`);\r\n                    componentPromise = Promise.resolve(componentPromise);\r\n                }\r\n                guards.push(() => componentPromise.then(resolved => {\r\n                    if (!resolved)\r\n                        return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`));\r\n                    const resolvedComponent = isESModule(resolved)\r\n                        ? resolved.default\r\n                        : resolved;\r\n                    // replace the function with the resolved component\r\n                    // cannot be null or undefined because we went into the for loop\r\n                    record.components[name] = resolvedComponent;\r\n                    // __vccOpts is added by vue-class-component and contain the regular options\r\n                    const options = resolvedComponent.__vccOpts || resolvedComponent;\r\n                    const guard = options[guardType];\r\n                    return guard && guardToPromiseFn(guard, to, from, record, name)();\r\n                }));\r\n            }\r\n        }\r\n    }\r\n    return guards;\r\n}\r\n/**\r\n * Allows differentiating lazy components from functional components and vue-class-component\r\n * @internal\r\n *\r\n * @param component\r\n */\r\nfunction isRouteComponent(component) {\r\n    return (typeof component === 'object' ||\r\n        'displayName' in component ||\r\n        'props' in component ||\r\n        '__vccOpts' in component);\r\n}\r\n/**\r\n * Ensures a route is loaded, so it can be passed as o prop to `<RouterView>`.\r\n *\r\n * @param route - resolved route to load\r\n */\r\nfunction loadRouteLocation(route) {\r\n    return route.matched.every(record => record.redirect)\r\n        ? Promise.reject(new Error('Cannot load a route that redirects.'))\r\n        : Promise.all(route.matched.map(record => record.components &&\r\n            Promise.all(Object.keys(record.components).reduce((promises, name) => {\r\n                const rawComponent = record.components[name];\r\n                if (typeof rawComponent === 'function' &&\r\n                    !('displayName' in rawComponent)) {\r\n                    promises.push(rawComponent().then(resolved => {\r\n                        if (!resolved)\r\n                            return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\". Ensure you passed a function that returns a promise.`));\r\n                        const resolvedComponent = isESModule(resolved)\r\n                            ? resolved.default\r\n                            : resolved;\r\n                        // replace the function with the resolved component\r\n                        // cannot be null or undefined because we went into the for loop\r\n                        record.components[name] = resolvedComponent;\r\n                        return;\r\n                    }));\r\n                }\r\n                return promises;\r\n            }, [])))).then(() => route);\r\n}\n\n// TODO: we could allow currentRoute as a prop to expose `isActive` and\r\n// `isExactActive` behavior should go through an RFC\r\nfunction useLink(props) {\r\n    const router = inject(routerKey);\r\n    const currentRoute = inject(routeLocationKey);\r\n    const route = computed(() => router.resolve(unref(props.to)));\r\n    const activeRecordIndex = computed(() => {\r\n        const { matched } = route.value;\r\n        const { length } = matched;\r\n        const routeMatched = matched[length - 1];\r\n        const currentMatched = currentRoute.matched;\r\n        if (!routeMatched || !currentMatched.length)\r\n            return -1;\r\n        const index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\r\n        if (index > -1)\r\n            return index;\r\n        // possible parent record\r\n        const parentRecordPath = getOriginalPath(matched[length - 2]);\r\n        return (\r\n        // we are dealing with nested routes\r\n        length > 1 &&\r\n            // if the parent and matched route have the same path, this link is\r\n            // referring to the empty child. Or we currently are on a different\r\n            // child of the same parent\r\n            getOriginalPath(routeMatched) === parentRecordPath &&\r\n            // avoid comparing the child with its parent\r\n            currentMatched[currentMatched.length - 1].path !== parentRecordPath\r\n            ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2]))\r\n            : index);\r\n    });\r\n    const isActive = computed(() => activeRecordIndex.value > -1 &&\r\n        includesParams(currentRoute.params, route.value.params));\r\n    const isExactActive = computed(() => activeRecordIndex.value > -1 &&\r\n        activeRecordIndex.value === currentRoute.matched.length - 1 &&\r\n        isSameRouteLocationParams(currentRoute.params, route.value.params));\r\n    function navigate(e = {}) {\r\n        if (guardEvent(e)) {\r\n            return router[unref(props.replace) ? 'replace' : 'push'](unref(props.to)\r\n            // avoid uncaught errors are they are logged anyway\r\n            ).catch(noop);\r\n        }\r\n        return Promise.resolve();\r\n    }\r\n    // devtools only\r\n    if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && isBrowser) {\r\n        const instance = getCurrentInstance();\r\n        if (instance) {\r\n            const linkContextDevtools = {\r\n                route: route.value,\r\n                isActive: isActive.value,\r\n                isExactActive: isExactActive.value,\r\n            };\r\n            // @ts-expect-error: this is internal\r\n            instance.__vrl_devtools = instance.__vrl_devtools || [];\r\n            // @ts-expect-error: this is internal\r\n            instance.__vrl_devtools.push(linkContextDevtools);\r\n            watchEffect(() => {\r\n                linkContextDevtools.route = route.value;\r\n                linkContextDevtools.isActive = isActive.value;\r\n                linkContextDevtools.isExactActive = isExactActive.value;\r\n            }, { flush: 'post' });\r\n        }\r\n    }\r\n    /**\r\n     * NOTE: update {@link _RouterLinkI}'s `$slots` type when updating this\r\n     */\r\n    return {\r\n        route,\r\n        href: computed(() => route.value.href),\r\n        isActive,\r\n        isExactActive,\r\n        navigate,\r\n    };\r\n}\r\nconst RouterLinkImpl = /*#__PURE__*/ defineComponent({\r\n    name: 'RouterLink',\r\n    compatConfig: { MODE: 3 },\r\n    props: {\r\n        to: {\r\n            type: [String, Object],\r\n            required: true,\r\n        },\r\n        replace: Boolean,\r\n        activeClass: String,\r\n        // inactiveClass: String,\r\n        exactActiveClass: String,\r\n        custom: Boolean,\r\n        ariaCurrentValue: {\r\n            type: String,\r\n            default: 'page',\r\n        },\r\n    },\r\n    useLink,\r\n    setup(props, { slots }) {\r\n        const link = reactive(useLink(props));\r\n        const { options } = inject(routerKey);\r\n        const elClass = computed(() => ({\r\n            [getLinkClass(props.activeClass, options.linkActiveClass, 'router-link-active')]: link.isActive,\r\n            // [getLinkClass(\r\n            //   props.inactiveClass,\r\n            //   options.linkInactiveClass,\r\n            //   'router-link-inactive'\r\n            // )]: !link.isExactActive,\r\n            [getLinkClass(props.exactActiveClass, options.linkExactActiveClass, 'router-link-exact-active')]: link.isExactActive,\r\n        }));\r\n        return () => {\r\n            const children = slots.default && slots.default(link);\r\n            return props.custom\r\n                ? children\r\n                : h('a', {\r\n                    'aria-current': link.isExactActive\r\n                        ? props.ariaCurrentValue\r\n                        : null,\r\n                    href: link.href,\r\n                    // this would override user added attrs but Vue will still add\r\n                    // the listener, so we end up triggering both\r\n                    onClick: link.navigate,\r\n                    class: elClass.value,\r\n                }, children);\r\n        };\r\n    },\r\n});\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\n/**\r\n * Component to render a link that triggers a navigation on click.\r\n */\r\nconst RouterLink = RouterLinkImpl;\r\nfunction guardEvent(e) {\r\n    // don't redirect with control keys\r\n    if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\r\n        return;\r\n    // don't redirect when preventDefault called\r\n    if (e.defaultPrevented)\r\n        return;\r\n    // don't redirect on right click\r\n    if (e.button !== undefined && e.button !== 0)\r\n        return;\r\n    // don't redirect if `target=\"_blank\"`\r\n    // @ts-expect-error getAttribute does exist\r\n    if (e.currentTarget && e.currentTarget.getAttribute) {\r\n        // @ts-expect-error getAttribute exists\r\n        const target = e.currentTarget.getAttribute('target');\r\n        if (/\\b_blank\\b/i.test(target))\r\n            return;\r\n    }\r\n    // this may be a Weex event which doesn't have this method\r\n    if (e.preventDefault)\r\n        e.preventDefault();\r\n    return true;\r\n}\r\nfunction includesParams(outer, inner) {\r\n    for (const key in inner) {\r\n        const innerValue = inner[key];\r\n        const outerValue = outer[key];\r\n        if (typeof innerValue === 'string') {\r\n            if (innerValue !== outerValue)\r\n                return false;\r\n        }\r\n        else {\r\n            if (!isArray(outerValue) ||\r\n                outerValue.length !== innerValue.length ||\r\n                innerValue.some((value, i) => value !== outerValue[i]))\r\n                return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\n/**\r\n * Get the original path value of a record by following its aliasOf\r\n * @param record\r\n */\r\nfunction getOriginalPath(record) {\r\n    return record ? (record.aliasOf ? record.aliasOf.path : record.path) : '';\r\n}\r\n/**\r\n * Utility class to get the active class based on defaults.\r\n * @param propClass\r\n * @param globalClass\r\n * @param defaultClass\r\n */\r\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null\r\n    ? propClass\r\n    : globalClass != null\r\n        ? globalClass\r\n        : defaultClass;\n\nconst RouterViewImpl = /*#__PURE__*/ defineComponent({\r\n    name: 'RouterView',\r\n    // #674 we manually inherit them\r\n    inheritAttrs: false,\r\n    props: {\r\n        name: {\r\n            type: String,\r\n            default: 'default',\r\n        },\r\n        route: Object,\r\n    },\r\n    // Better compat for @vue/compat users\r\n    // https://github.com/vuejs/router/issues/1315\r\n    compatConfig: { MODE: 3 },\r\n    setup(props, { attrs, slots }) {\r\n        (process.env.NODE_ENV !== 'production') && warnDeprecatedUsage();\r\n        const injectedRoute = inject(routerViewLocationKey);\r\n        const routeToDisplay = computed(() => props.route || injectedRoute.value);\r\n        const injectedDepth = inject(viewDepthKey, 0);\r\n        // The depth changes based on empty components option, which allows passthrough routes e.g. routes with children\r\n        // that are used to reuse the `path` property\r\n        const depth = computed(() => {\r\n            let initialDepth = unref(injectedDepth);\r\n            const { matched } = routeToDisplay.value;\r\n            let matchedRoute;\r\n            while ((matchedRoute = matched[initialDepth]) &&\r\n                !matchedRoute.components) {\r\n                initialDepth++;\r\n            }\r\n            return initialDepth;\r\n        });\r\n        const matchedRouteRef = computed(() => routeToDisplay.value.matched[depth.value]);\r\n        provide(viewDepthKey, computed(() => depth.value + 1));\r\n        provide(matchedRouteKey, matchedRouteRef);\r\n        provide(routerViewLocationKey, routeToDisplay);\r\n        const viewRef = ref();\r\n        // watch at the same time the component instance, the route record we are\r\n        // rendering, and the name\r\n        watch(() => [viewRef.value, matchedRouteRef.value, props.name], ([instance, to, name], [oldInstance, from, oldName]) => {\r\n            // copy reused instances\r\n            if (to) {\r\n                // this will update the instance for new instances as well as reused\r\n                // instances when navigating to a new route\r\n                to.instances[name] = instance;\r\n                // the component instance is reused for a different route or name, so\r\n                // we copy any saved update or leave guards. With async setup, the\r\n                // mounting component will mount before the matchedRoute changes,\r\n                // making instance === oldInstance, so we check if guards have been\r\n                // added before. This works because we remove guards when\r\n                // unmounting/deactivating components\r\n                if (from && from !== to && instance && instance === oldInstance) {\r\n                    if (!to.leaveGuards.size) {\r\n                        to.leaveGuards = from.leaveGuards;\r\n                    }\r\n                    if (!to.updateGuards.size) {\r\n                        to.updateGuards = from.updateGuards;\r\n                    }\r\n                }\r\n            }\r\n            // trigger beforeRouteEnter next callbacks\r\n            if (instance &&\r\n                to &&\r\n                // if there is no instance but to and from are the same this might be\r\n                // the first visit\r\n                (!from || !isSameRouteRecord(to, from) || !oldInstance)) {\r\n                (to.enterCallbacks[name] || []).forEach(callback => callback(instance));\r\n            }\r\n        }, { flush: 'post' });\r\n        return () => {\r\n            const route = routeToDisplay.value;\r\n            // we need the value at the time we render because when we unmount, we\r\n            // navigated to a different location so the value is different\r\n            const currentName = props.name;\r\n            const matchedRoute = matchedRouteRef.value;\r\n            const ViewComponent = matchedRoute && matchedRoute.components[currentName];\r\n            if (!ViewComponent) {\r\n                return normalizeSlot(slots.default, { Component: ViewComponent, route });\r\n            }\r\n            // props from route configuration\r\n            const routePropsOption = matchedRoute.props[currentName];\r\n            const routeProps = routePropsOption\r\n                ? routePropsOption === true\r\n                    ? route.params\r\n                    : typeof routePropsOption === 'function'\r\n                        ? routePropsOption(route)\r\n                        : routePropsOption\r\n                : null;\r\n            const onVnodeUnmounted = vnode => {\r\n                // remove the instance reference to prevent leak\r\n                if (vnode.component.isUnmounted) {\r\n                    matchedRoute.instances[currentName] = null;\r\n                }\r\n            };\r\n            const component = h(ViewComponent, assign({}, routeProps, attrs, {\r\n                onVnodeUnmounted,\r\n                ref: viewRef,\r\n            }));\r\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\r\n                isBrowser &&\r\n                component.ref) {\r\n                // TODO: can display if it's an alias, its props\r\n                const info = {\r\n                    depth: depth.value,\r\n                    name: matchedRoute.name,\r\n                    path: matchedRoute.path,\r\n                    meta: matchedRoute.meta,\r\n                };\r\n                const internalInstances = isArray(component.ref)\r\n                    ? component.ref.map(r => r.i)\r\n                    : [component.ref.i];\r\n                internalInstances.forEach(instance => {\r\n                    // @ts-expect-error\r\n                    instance.__vrv_devtools = info;\r\n                });\r\n            }\r\n            return (\r\n            // pass the vnode to the slot as a prop.\r\n            // h and <component :is=\"...\"> both accept vnodes\r\n            normalizeSlot(slots.default, { Component: component, route }) ||\r\n                component);\r\n        };\r\n    },\r\n});\r\nfunction normalizeSlot(slot, data) {\r\n    if (!slot)\r\n        return null;\r\n    const slotContent = slot(data);\r\n    return slotContent.length === 1 ? slotContent[0] : slotContent;\r\n}\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\n/**\r\n * Component to display the current route the user is at.\r\n */\r\nconst RouterView = RouterViewImpl;\r\n// warn against deprecated usage with <transition> & <keep-alive>\r\n// due to functional component being no longer eager in Vue 3\r\nfunction warnDeprecatedUsage() {\r\n    const instance = getCurrentInstance();\r\n    const parentName = instance.parent && instance.parent.type.name;\r\n    const parentSubTreeType = instance.parent && instance.parent.subTree && instance.parent.subTree.type;\r\n    if (parentName &&\r\n        (parentName === 'KeepAlive' || parentName.includes('Transition')) &&\r\n        typeof parentSubTreeType === 'object' &&\r\n        parentSubTreeType.name === 'RouterView') {\r\n        const comp = parentName === 'KeepAlive' ? 'keep-alive' : 'transition';\r\n        warn(`<router-view> can no longer be used directly inside <transition> or <keep-alive>.\\n` +\r\n            `Use slot props instead:\\n\\n` +\r\n            `<router-view v-slot=\"{ Component }\">\\n` +\r\n            `  <${comp}>\\n` +\r\n            `    <component :is=\"Component\" />\\n` +\r\n            `  </${comp}>\\n` +\r\n            `</router-view>`);\r\n    }\r\n}\n\n/**\r\n * Copies a route location and removes any problematic properties that cannot be shown in devtools (e.g. Vue instances).\r\n *\r\n * @param routeLocation - routeLocation to format\r\n * @param tooltip - optional tooltip\r\n * @returns a copy of the routeLocation\r\n */\r\nfunction formatRouteLocation(routeLocation, tooltip) {\r\n    const copy = assign({}, routeLocation, {\r\n        // remove variables that can contain vue instances\r\n        matched: routeLocation.matched.map(matched => omit(matched, ['instances', 'children', 'aliasOf'])),\r\n    });\r\n    return {\r\n        _custom: {\r\n            type: null,\r\n            readOnly: true,\r\n            display: routeLocation.fullPath,\r\n            tooltip,\r\n            value: copy,\r\n        },\r\n    };\r\n}\r\nfunction formatDisplay(display) {\r\n    return {\r\n        _custom: {\r\n            display,\r\n        },\r\n    };\r\n}\r\n// to support multiple router instances\r\nlet routerId = 0;\r\nfunction addDevtools(app, router, matcher) {\r\n    // Take over router.beforeEach and afterEach\r\n    // make sure we are not registering the devtool twice\r\n    if (router.__hasDevtools)\r\n        return;\r\n    router.__hasDevtools = true;\r\n    // increment to support multiple router instances\r\n    const id = routerId++;\r\n    setupDevtoolsPlugin({\r\n        id: 'org.vuejs.router' + (id ? '.' + id : ''),\r\n        label: 'Vue Router',\r\n        packageName: 'vue-router',\r\n        homepage: 'https://router.vuejs.org',\r\n        logo: 'https://router.vuejs.org/logo.png',\r\n        componentStateTypes: ['Routing'],\r\n        app,\r\n    }, api => {\r\n        if (typeof api.now !== 'function') {\r\n            console.warn('[Vue Router]: You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.');\r\n        }\r\n        // display state added by the router\r\n        api.on.inspectComponent((payload, ctx) => {\r\n            if (payload.instanceData) {\r\n                payload.instanceData.state.push({\r\n                    type: 'Routing',\r\n                    key: '$route',\r\n                    editable: false,\r\n                    value: formatRouteLocation(router.currentRoute.value, 'Current Route'),\r\n                });\r\n            }\r\n        });\r\n        // mark router-link as active and display tags on router views\r\n        api.on.visitComponentTree(({ treeNode: node, componentInstance }) => {\r\n            if (componentInstance.__vrv_devtools) {\r\n                const info = componentInstance.__vrv_devtools;\r\n                node.tags.push({\r\n                    label: (info.name ? `${info.name.toString()}: ` : '') + info.path,\r\n                    textColor: 0,\r\n                    tooltip: 'This component is rendered by &lt;router-view&gt;',\r\n                    backgroundColor: PINK_500,\r\n                });\r\n            }\r\n            // if multiple useLink are used\r\n            if (isArray(componentInstance.__vrl_devtools)) {\r\n                componentInstance.__devtoolsApi = api;\r\n                componentInstance.__vrl_devtools.forEach(devtoolsData => {\r\n                    let backgroundColor = ORANGE_400;\r\n                    let tooltip = '';\r\n                    if (devtoolsData.isExactActive) {\r\n                        backgroundColor = LIME_500;\r\n                        tooltip = 'This is exactly active';\r\n                    }\r\n                    else if (devtoolsData.isActive) {\r\n                        backgroundColor = BLUE_600;\r\n                        tooltip = 'This link is active';\r\n                    }\r\n                    node.tags.push({\r\n                        label: devtoolsData.route.path,\r\n                        textColor: 0,\r\n                        tooltip,\r\n                        backgroundColor,\r\n                    });\r\n                });\r\n            }\r\n        });\r\n        watch(router.currentRoute, () => {\r\n            // refresh active state\r\n            refreshRoutesView();\r\n            api.notifyComponentUpdate();\r\n            api.sendInspectorTree(routerInspectorId);\r\n            api.sendInspectorState(routerInspectorId);\r\n        });\r\n        const navigationsLayerId = 'router:navigations:' + id;\r\n        api.addTimelineLayer({\r\n            id: navigationsLayerId,\r\n            label: `Router${id ? ' ' + id : ''} Navigations`,\r\n            color: 0x40a8c4,\r\n        });\r\n        // const errorsLayerId = 'router:errors'\r\n        // api.addTimelineLayer({\r\n        //   id: errorsLayerId,\r\n        //   label: 'Router Errors',\r\n        //   color: 0xea5455,\r\n        // })\r\n        router.onError((error, to) => {\r\n            api.addTimelineEvent({\r\n                layerId: navigationsLayerId,\r\n                event: {\r\n                    title: 'Error during Navigation',\r\n                    subtitle: to.fullPath,\r\n                    logType: 'error',\r\n                    time: api.now(),\r\n                    data: { error },\r\n                    groupId: to.meta.__navigationId,\r\n                },\r\n            });\r\n        });\r\n        // attached to `meta` and used to group events\r\n        let navigationId = 0;\r\n        router.beforeEach((to, from) => {\r\n            const data = {\r\n                guard: formatDisplay('beforeEach'),\r\n                from: formatRouteLocation(from, 'Current Location during this navigation'),\r\n                to: formatRouteLocation(to, 'Target location'),\r\n            };\r\n            // Used to group navigations together, hide from devtools\r\n            Object.defineProperty(to.meta, '__navigationId', {\r\n                value: navigationId++,\r\n            });\r\n            api.addTimelineEvent({\r\n                layerId: navigationsLayerId,\r\n                event: {\r\n                    time: api.now(),\r\n                    title: 'Start of navigation',\r\n                    subtitle: to.fullPath,\r\n                    data,\r\n                    groupId: to.meta.__navigationId,\r\n                },\r\n            });\r\n        });\r\n        router.afterEach((to, from, failure) => {\r\n            const data = {\r\n                guard: formatDisplay('afterEach'),\r\n            };\r\n            if (failure) {\r\n                data.failure = {\r\n                    _custom: {\r\n                        type: Error,\r\n                        readOnly: true,\r\n                        display: failure ? failure.message : '',\r\n                        tooltip: 'Navigation Failure',\r\n                        value: failure,\r\n                    },\r\n                };\r\n                data.status = formatDisplay('❌');\r\n            }\r\n            else {\r\n                data.status = formatDisplay('✅');\r\n            }\r\n            // we set here to have the right order\r\n            data.from = formatRouteLocation(from, 'Current Location during this navigation');\r\n            data.to = formatRouteLocation(to, 'Target location');\r\n            api.addTimelineEvent({\r\n                layerId: navigationsLayerId,\r\n                event: {\r\n                    title: 'End of navigation',\r\n                    subtitle: to.fullPath,\r\n                    time: api.now(),\r\n                    data,\r\n                    logType: failure ? 'warning' : 'default',\r\n                    groupId: to.meta.__navigationId,\r\n                },\r\n            });\r\n        });\r\n        /**\r\n         * Inspector of Existing routes\r\n         */\r\n        const routerInspectorId = 'router-inspector:' + id;\r\n        api.addInspector({\r\n            id: routerInspectorId,\r\n            label: 'Routes' + (id ? ' ' + id : ''),\r\n            icon: 'book',\r\n            treeFilterPlaceholder: 'Search routes',\r\n        });\r\n        function refreshRoutesView() {\r\n            // the routes view isn't active\r\n            if (!activeRoutesPayload)\r\n                return;\r\n            const payload = activeRoutesPayload;\r\n            // children routes will appear as nested\r\n            let routes = matcher.getRoutes().filter(route => !route.parent);\r\n            // reset match state to false\r\n            routes.forEach(resetMatchStateOnRouteRecord);\r\n            // apply a match state if there is a payload\r\n            if (payload.filter) {\r\n                routes = routes.filter(route => \r\n                // save matches state based on the payload\r\n                isRouteMatching(route, payload.filter.toLowerCase()));\r\n            }\r\n            // mark active routes\r\n            routes.forEach(route => markRouteRecordActive(route, router.currentRoute.value));\r\n            payload.rootNodes = routes.map(formatRouteRecordForInspector);\r\n        }\r\n        let activeRoutesPayload;\r\n        api.on.getInspectorTree(payload => {\r\n            activeRoutesPayload = payload;\r\n            if (payload.app === app && payload.inspectorId === routerInspectorId) {\r\n                refreshRoutesView();\r\n            }\r\n        });\r\n        /**\r\n         * Display information about the currently selected route record\r\n         */\r\n        api.on.getInspectorState(payload => {\r\n            if (payload.app === app && payload.inspectorId === routerInspectorId) {\r\n                const routes = matcher.getRoutes();\r\n                const route = routes.find(route => route.record.__vd_id === payload.nodeId);\r\n                if (route) {\r\n                    payload.state = {\r\n                        options: formatRouteRecordMatcherForStateInspector(route),\r\n                    };\r\n                }\r\n            }\r\n        });\r\n        api.sendInspectorTree(routerInspectorId);\r\n        api.sendInspectorState(routerInspectorId);\r\n    });\r\n}\r\nfunction modifierForKey(key) {\r\n    if (key.optional) {\r\n        return key.repeatable ? '*' : '?';\r\n    }\r\n    else {\r\n        return key.repeatable ? '+' : '';\r\n    }\r\n}\r\nfunction formatRouteRecordMatcherForStateInspector(route) {\r\n    const { record } = route;\r\n    const fields = [\r\n        { editable: false, key: 'path', value: record.path },\r\n    ];\r\n    if (record.name != null) {\r\n        fields.push({\r\n            editable: false,\r\n            key: 'name',\r\n            value: record.name,\r\n        });\r\n    }\r\n    fields.push({ editable: false, key: 'regexp', value: route.re });\r\n    if (route.keys.length) {\r\n        fields.push({\r\n            editable: false,\r\n            key: 'keys',\r\n            value: {\r\n                _custom: {\r\n                    type: null,\r\n                    readOnly: true,\r\n                    display: route.keys\r\n                        .map(key => `${key.name}${modifierForKey(key)}`)\r\n                        .join(' '),\r\n                    tooltip: 'Param keys',\r\n                    value: route.keys,\r\n                },\r\n            },\r\n        });\r\n    }\r\n    if (record.redirect != null) {\r\n        fields.push({\r\n            editable: false,\r\n            key: 'redirect',\r\n            value: record.redirect,\r\n        });\r\n    }\r\n    if (route.alias.length) {\r\n        fields.push({\r\n            editable: false,\r\n            key: 'aliases',\r\n            value: route.alias.map(alias => alias.record.path),\r\n        });\r\n    }\r\n    if (Object.keys(route.record.meta).length) {\r\n        fields.push({\r\n            editable: false,\r\n            key: 'meta',\r\n            value: route.record.meta,\r\n        });\r\n    }\r\n    fields.push({\r\n        key: 'score',\r\n        editable: false,\r\n        value: {\r\n            _custom: {\r\n                type: null,\r\n                readOnly: true,\r\n                display: route.score.map(score => score.join(', ')).join(' | '),\r\n                tooltip: 'Score used to sort routes',\r\n                value: route.score,\r\n            },\r\n        },\r\n    });\r\n    return fields;\r\n}\r\n/**\r\n * Extracted from tailwind palette\r\n */\r\nconst PINK_500 = 0xec4899;\r\nconst BLUE_600 = 0x2563eb;\r\nconst LIME_500 = 0x84cc16;\r\nconst CYAN_400 = 0x22d3ee;\r\nconst ORANGE_400 = 0xfb923c;\r\n// const GRAY_100 = 0xf4f4f5\r\nconst DARK = 0x666666;\r\nfunction formatRouteRecordForInspector(route) {\r\n    const tags = [];\r\n    const { record } = route;\r\n    if (record.name != null) {\r\n        tags.push({\r\n            label: String(record.name),\r\n            textColor: 0,\r\n            backgroundColor: CYAN_400,\r\n        });\r\n    }\r\n    if (record.aliasOf) {\r\n        tags.push({\r\n            label: 'alias',\r\n            textColor: 0,\r\n            backgroundColor: ORANGE_400,\r\n        });\r\n    }\r\n    if (route.__vd_match) {\r\n        tags.push({\r\n            label: 'matches',\r\n            textColor: 0,\r\n            backgroundColor: PINK_500,\r\n        });\r\n    }\r\n    if (route.__vd_exactActive) {\r\n        tags.push({\r\n            label: 'exact',\r\n            textColor: 0,\r\n            backgroundColor: LIME_500,\r\n        });\r\n    }\r\n    if (route.__vd_active) {\r\n        tags.push({\r\n            label: 'active',\r\n            textColor: 0,\r\n            backgroundColor: BLUE_600,\r\n        });\r\n    }\r\n    if (record.redirect) {\r\n        tags.push({\r\n            label: typeof record.redirect === 'string'\r\n                ? `redirect: ${record.redirect}`\r\n                : 'redirects',\r\n            textColor: 0xffffff,\r\n            backgroundColor: DARK,\r\n        });\r\n    }\r\n    // add an id to be able to select it. Using the `path` is not possible because\r\n    // empty path children would collide with their parents\r\n    let id = record.__vd_id;\r\n    if (id == null) {\r\n        id = String(routeRecordId++);\r\n        record.__vd_id = id;\r\n    }\r\n    return {\r\n        id,\r\n        label: record.path,\r\n        tags,\r\n        children: route.children.map(formatRouteRecordForInspector),\r\n    };\r\n}\r\n//  incremental id for route records and inspector state\r\nlet routeRecordId = 0;\r\nconst EXTRACT_REGEXP_RE = /^\\/(.*)\\/([a-z]*)$/;\r\nfunction markRouteRecordActive(route, currentRoute) {\r\n    // no route will be active if matched is empty\r\n    // reset the matching state\r\n    const isExactActive = currentRoute.matched.length &&\r\n        isSameRouteRecord(currentRoute.matched[currentRoute.matched.length - 1], route.record);\r\n    route.__vd_exactActive = route.__vd_active = isExactActive;\r\n    if (!isExactActive) {\r\n        route.__vd_active = currentRoute.matched.some(match => isSameRouteRecord(match, route.record));\r\n    }\r\n    route.children.forEach(childRoute => markRouteRecordActive(childRoute, currentRoute));\r\n}\r\nfunction resetMatchStateOnRouteRecord(route) {\r\n    route.__vd_match = false;\r\n    route.children.forEach(resetMatchStateOnRouteRecord);\r\n}\r\nfunction isRouteMatching(route, filter) {\r\n    const found = String(route.re).match(EXTRACT_REGEXP_RE);\r\n    route.__vd_match = false;\r\n    if (!found || found.length < 3) {\r\n        return false;\r\n    }\r\n    // use a regexp without $ at the end to match nested routes better\r\n    const nonEndingRE = new RegExp(found[1].replace(/\\$$/, ''), found[2]);\r\n    if (nonEndingRE.test(filter)) {\r\n        // mark children as matches\r\n        route.children.forEach(child => isRouteMatching(child, filter));\r\n        // exception case: `/`\r\n        if (route.record.path !== '/' || filter === '/') {\r\n            route.__vd_match = route.re.test(filter);\r\n            return true;\r\n        }\r\n        // hide the / route\r\n        return false;\r\n    }\r\n    const path = route.record.path.toLowerCase();\r\n    const decodedPath = decode(path);\r\n    // also allow partial matching on the path\r\n    if (!filter.startsWith('/') &&\r\n        (decodedPath.includes(filter) || path.includes(filter)))\r\n        return true;\r\n    if (decodedPath.startsWith(filter) || path.startsWith(filter))\r\n        return true;\r\n    if (route.record.name && String(route.record.name).includes(filter))\r\n        return true;\r\n    return route.children.some(child => isRouteMatching(child, filter));\r\n}\r\nfunction omit(obj, keys) {\r\n    const ret = {};\r\n    for (const key in obj) {\r\n        if (!keys.includes(key)) {\r\n            // @ts-expect-error\r\n            ret[key] = obj[key];\r\n        }\r\n    }\r\n    return ret;\r\n}\n\n/**\r\n * Creates a Router instance that can be used by a Vue app.\r\n *\r\n * @param options - {@link RouterOptions}\r\n */\r\nfunction createRouter(options) {\r\n    const matcher = createRouterMatcher(options.routes, options);\r\n    const parseQuery$1 = options.parseQuery || parseQuery;\r\n    const stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\r\n    const routerHistory = options.history;\r\n    if ((process.env.NODE_ENV !== 'production') && !routerHistory)\r\n        throw new Error('Provide the \"history\" option when calling \"createRouter()\":' +\r\n            ' https://next.router.vuejs.org/api/#history.');\r\n    const beforeGuards = useCallbacks();\r\n    const beforeResolveGuards = useCallbacks();\r\n    const afterGuards = useCallbacks();\r\n    const currentRoute = shallowRef(START_LOCATION_NORMALIZED);\r\n    let pendingLocation = START_LOCATION_NORMALIZED;\r\n    // leave the scrollRestoration if no scrollBehavior is provided\r\n    if (isBrowser && options.scrollBehavior && 'scrollRestoration' in history) {\r\n        history.scrollRestoration = 'manual';\r\n    }\r\n    const normalizeParams = applyToParams.bind(null, paramValue => '' + paramValue);\r\n    const encodeParams = applyToParams.bind(null, encodeParam);\r\n    const decodeParams = \r\n    // @ts-expect-error: intentionally avoid the type check\r\n    applyToParams.bind(null, decode);\r\n    function addRoute(parentOrRoute, route) {\r\n        let parent;\r\n        let record;\r\n        if (isRouteName(parentOrRoute)) {\r\n            parent = matcher.getRecordMatcher(parentOrRoute);\r\n            record = route;\r\n        }\r\n        else {\r\n            record = parentOrRoute;\r\n        }\r\n        return matcher.addRoute(record, parent);\r\n    }\r\n    function removeRoute(name) {\r\n        const recordMatcher = matcher.getRecordMatcher(name);\r\n        if (recordMatcher) {\r\n            matcher.removeRoute(recordMatcher);\r\n        }\r\n        else if ((process.env.NODE_ENV !== 'production')) {\r\n            warn(`Cannot remove non-existent route \"${String(name)}\"`);\r\n        }\r\n    }\r\n    function getRoutes() {\r\n        return matcher.getRoutes().map(routeMatcher => routeMatcher.record);\r\n    }\r\n    function hasRoute(name) {\r\n        return !!matcher.getRecordMatcher(name);\r\n    }\r\n    function resolve(rawLocation, currentLocation) {\r\n        // const objectLocation = routerLocationAsObject(rawLocation)\r\n        // we create a copy to modify it later\r\n        currentLocation = assign({}, currentLocation || currentRoute.value);\r\n        if (typeof rawLocation === 'string') {\r\n            const locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\r\n            const matchedRoute = matcher.resolve({ path: locationNormalized.path }, currentLocation);\r\n            const href = routerHistory.createHref(locationNormalized.fullPath);\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                if (href.startsWith('//'))\r\n                    warn(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\r\n                else if (!matchedRoute.matched.length) {\r\n                    warn(`No match found for location with path \"${rawLocation}\"`);\r\n                }\r\n            }\r\n            // locationNormalized is always a new object\r\n            return assign(locationNormalized, matchedRoute, {\r\n                params: decodeParams(matchedRoute.params),\r\n                hash: decode(locationNormalized.hash),\r\n                redirectedFrom: undefined,\r\n                href,\r\n            });\r\n        }\r\n        let matcherLocation;\r\n        // path could be relative in object as well\r\n        if ('path' in rawLocation) {\r\n            if ((process.env.NODE_ENV !== 'production') &&\r\n                'params' in rawLocation &&\r\n                !('name' in rawLocation) &&\r\n                // @ts-expect-error: the type is never\r\n                Object.keys(rawLocation.params).length) {\r\n                warn(`Path \"${rawLocation.path}\" was passed with params but they will be ignored. Use a named route alongside params instead.`);\r\n            }\r\n            matcherLocation = assign({}, rawLocation, {\r\n                path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path,\r\n            });\r\n        }\r\n        else {\r\n            // remove any nullish param\r\n            const targetParams = assign({}, rawLocation.params);\r\n            for (const key in targetParams) {\r\n                if (targetParams[key] == null) {\r\n                    delete targetParams[key];\r\n                }\r\n            }\r\n            // pass encoded values to the matcher, so it can produce encoded path and fullPath\r\n            matcherLocation = assign({}, rawLocation, {\r\n                params: encodeParams(targetParams),\r\n            });\r\n            // current location params are decoded, we need to encode them in case the\r\n            // matcher merges the params\r\n            currentLocation.params = encodeParams(currentLocation.params);\r\n        }\r\n        const matchedRoute = matcher.resolve(matcherLocation, currentLocation);\r\n        const hash = rawLocation.hash || '';\r\n        if ((process.env.NODE_ENV !== 'production') && hash && !hash.startsWith('#')) {\r\n            warn(`A \\`hash\\` should always start with the character \"#\". Replace \"${hash}\" with \"#${hash}\".`);\r\n        }\r\n        // the matcher might have merged current location params, so\r\n        // we need to run the decoding again\r\n        matchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\r\n        const fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\r\n            hash: encodeHash(hash),\r\n            path: matchedRoute.path,\r\n        }));\r\n        const href = routerHistory.createHref(fullPath);\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            if (href.startsWith('//')) {\r\n                warn(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\r\n            }\r\n            else if (!matchedRoute.matched.length) {\r\n                warn(`No match found for location with path \"${'path' in rawLocation ? rawLocation.path : rawLocation}\"`);\r\n            }\r\n        }\r\n        return assign({\r\n            fullPath,\r\n            // keep the hash encoded so fullPath is effectively path + encodedQuery +\r\n            // hash\r\n            hash,\r\n            query: \r\n            // if the user is using a custom query lib like qs, we might have\r\n            // nested objects, so we keep the query as is, meaning it can contain\r\n            // numbers at `$route.query`, but at the point, the user will have to\r\n            // use their own type anyway.\r\n            // https://github.com/vuejs/router/issues/328#issuecomment-649481567\r\n            stringifyQuery$1 === stringifyQuery\r\n                ? normalizeQuery(rawLocation.query)\r\n                : (rawLocation.query || {}),\r\n        }, matchedRoute, {\r\n            redirectedFrom: undefined,\r\n            href,\r\n        });\r\n    }\r\n    function locationAsObject(to) {\r\n        return typeof to === 'string'\r\n            ? parseURL(parseQuery$1, to, currentRoute.value.path)\r\n            : assign({}, to);\r\n    }\r\n    function checkCanceledNavigation(to, from) {\r\n        if (pendingLocation !== to) {\r\n            return createRouterError(8 /* ErrorTypes.NAVIGATION_CANCELLED */, {\r\n                from,\r\n                to,\r\n            });\r\n        }\r\n    }\r\n    function push(to) {\r\n        return pushWithRedirect(to);\r\n    }\r\n    function replace(to) {\r\n        return push(assign(locationAsObject(to), { replace: true }));\r\n    }\r\n    function handleRedirectRecord(to) {\r\n        const lastMatched = to.matched[to.matched.length - 1];\r\n        if (lastMatched && lastMatched.redirect) {\r\n            const { redirect } = lastMatched;\r\n            let newTargetLocation = typeof redirect === 'function' ? redirect(to) : redirect;\r\n            if (typeof newTargetLocation === 'string') {\r\n                newTargetLocation =\r\n                    newTargetLocation.includes('?') || newTargetLocation.includes('#')\r\n                        ? (newTargetLocation = locationAsObject(newTargetLocation))\r\n                        : // force empty params\r\n                            { path: newTargetLocation };\r\n                // @ts-expect-error: force empty params when a string is passed to let\r\n                // the router parse them again\r\n                newTargetLocation.params = {};\r\n            }\r\n            if ((process.env.NODE_ENV !== 'production') &&\r\n                !('path' in newTargetLocation) &&\r\n                !('name' in newTargetLocation)) {\r\n                warn(`Invalid redirect found:\\n${JSON.stringify(newTargetLocation, null, 2)}\\n when navigating to \"${to.fullPath}\". A redirect must contain a name or path. This will break in production.`);\r\n                throw new Error('Invalid redirect');\r\n            }\r\n            return assign({\r\n                query: to.query,\r\n                hash: to.hash,\r\n                // avoid transferring params if the redirect has a path\r\n                params: 'path' in newTargetLocation ? {} : to.params,\r\n            }, newTargetLocation);\r\n        }\r\n    }\r\n    function pushWithRedirect(to, redirectedFrom) {\r\n        const targetLocation = (pendingLocation = resolve(to));\r\n        const from = currentRoute.value;\r\n        const data = to.state;\r\n        const force = to.force;\r\n        // to could be a string where `replace` is a function\r\n        const replace = to.replace === true;\r\n        const shouldRedirect = handleRedirectRecord(targetLocation);\r\n        if (shouldRedirect)\r\n            return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\r\n                state: typeof shouldRedirect === 'object'\r\n                    ? assign({}, data, shouldRedirect.state)\r\n                    : data,\r\n                force,\r\n                replace,\r\n            }), \r\n            // keep original redirectedFrom if it exists\r\n            redirectedFrom || targetLocation);\r\n        // if it was a redirect we already called `pushWithRedirect` above\r\n        const toLocation = targetLocation;\r\n        toLocation.redirectedFrom = redirectedFrom;\r\n        let failure;\r\n        if (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\r\n            failure = createRouterError(16 /* ErrorTypes.NAVIGATION_DUPLICATED */, { to: toLocation, from });\r\n            // trigger scroll to allow scrolling to the same anchor\r\n            handleScroll(from, from, \r\n            // this is a push, the only way for it to be triggered from a\r\n            // history.listen is with a redirect, which makes it become a push\r\n            true, \r\n            // This cannot be the first navigation because the initial location\r\n            // cannot be manually navigated to\r\n            false);\r\n        }\r\n        return (failure ? Promise.resolve(failure) : navigate(toLocation, from))\r\n            .catch((error) => isNavigationFailure(error)\r\n            ? // navigation redirects still mark the router as ready\r\n                isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)\r\n                    ? error\r\n                    : markAsReady(error) // also returns the error\r\n            : // reject any unknown error\r\n                triggerError(error, toLocation, from))\r\n            .then((failure) => {\r\n            if (failure) {\r\n                if (isNavigationFailure(failure, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\r\n                    if ((process.env.NODE_ENV !== 'production') &&\r\n                        // we are redirecting to the same location we were already at\r\n                        isSameRouteLocation(stringifyQuery$1, resolve(failure.to), toLocation) &&\r\n                        // and we have done it a couple of times\r\n                        redirectedFrom &&\r\n                        // @ts-expect-error: added only in dev\r\n                        (redirectedFrom._count = redirectedFrom._count\r\n                            ? // @ts-expect-error\r\n                                redirectedFrom._count + 1\r\n                            : 1) > 30) {\r\n                        warn(`Detected a possibly infinite redirection in a navigation guard when going from \"${from.fullPath}\" to \"${toLocation.fullPath}\". Aborting to avoid a Stack Overflow.\\n Are you always returning a new location within a navigation guard? That would lead to this error. Only return when redirecting or aborting, that should fix this. This might break in production if not fixed.`);\r\n                        return Promise.reject(new Error('Infinite redirect in navigation guard'));\r\n                    }\r\n                    return pushWithRedirect(\r\n                    // keep options\r\n                    assign({\r\n                        // preserve an existing replacement but allow the redirect to override it\r\n                        replace,\r\n                    }, locationAsObject(failure.to), {\r\n                        state: typeof failure.to === 'object'\r\n                            ? assign({}, data, failure.to.state)\r\n                            : data,\r\n                        force,\r\n                    }), \r\n                    // preserve the original redirectedFrom if any\r\n                    redirectedFrom || toLocation);\r\n                }\r\n            }\r\n            else {\r\n                // if we fail we don't finalize the navigation\r\n                failure = finalizeNavigation(toLocation, from, true, replace, data);\r\n            }\r\n            triggerAfterEach(toLocation, from, failure);\r\n            return failure;\r\n        });\r\n    }\r\n    /**\r\n     * Helper to reject and skip all navigation guards if a new navigation happened\r\n     * @param to\r\n     * @param from\r\n     */\r\n    function checkCanceledNavigationAndReject(to, from) {\r\n        const error = checkCanceledNavigation(to, from);\r\n        return error ? Promise.reject(error) : Promise.resolve();\r\n    }\r\n    function runWithContext(fn) {\r\n        const app = installedApps.values().next().value;\r\n        // support Vue < 3.3\r\n        return app && typeof app.runWithContext === 'function'\r\n            ? app.runWithContext(fn)\r\n            : fn();\r\n    }\r\n    // TODO: refactor the whole before guards by internally using router.beforeEach\r\n    function navigate(to, from) {\r\n        let guards;\r\n        const [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\r\n        // all components here have been resolved once because we are leaving\r\n        guards = extractComponentsGuards(leavingRecords.reverse(), 'beforeRouteLeave', to, from);\r\n        // leavingRecords is already reversed\r\n        for (const record of leavingRecords) {\r\n            record.leaveGuards.forEach(guard => {\r\n                guards.push(guardToPromiseFn(guard, to, from));\r\n            });\r\n        }\r\n        const canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\r\n        guards.push(canceledNavigationCheck);\r\n        // run the queue of per route beforeRouteLeave guards\r\n        return (runGuardQueue(guards)\r\n            .then(() => {\r\n            // check global guards beforeEach\r\n            guards = [];\r\n            for (const guard of beforeGuards.list()) {\r\n                guards.push(guardToPromiseFn(guard, to, from));\r\n            }\r\n            guards.push(canceledNavigationCheck);\r\n            return runGuardQueue(guards);\r\n        })\r\n            .then(() => {\r\n            // check in components beforeRouteUpdate\r\n            guards = extractComponentsGuards(updatingRecords, 'beforeRouteUpdate', to, from);\r\n            for (const record of updatingRecords) {\r\n                record.updateGuards.forEach(guard => {\r\n                    guards.push(guardToPromiseFn(guard, to, from));\r\n                });\r\n            }\r\n            guards.push(canceledNavigationCheck);\r\n            // run the queue of per route beforeEnter guards\r\n            return runGuardQueue(guards);\r\n        })\r\n            .then(() => {\r\n            // check the route beforeEnter\r\n            guards = [];\r\n            for (const record of to.matched) {\r\n                // do not trigger beforeEnter on reused views\r\n                if (record.beforeEnter && !from.matched.includes(record)) {\r\n                    if (isArray(record.beforeEnter)) {\r\n                        for (const beforeEnter of record.beforeEnter)\r\n                            guards.push(guardToPromiseFn(beforeEnter, to, from));\r\n                    }\r\n                    else {\r\n                        guards.push(guardToPromiseFn(record.beforeEnter, to, from));\r\n                    }\r\n                }\r\n            }\r\n            guards.push(canceledNavigationCheck);\r\n            // run the queue of per route beforeEnter guards\r\n            return runGuardQueue(guards);\r\n        })\r\n            .then(() => {\r\n            // NOTE: at this point to.matched is normalized and does not contain any () => Promise<Component>\r\n            // clear existing enterCallbacks, these are added by extractComponentsGuards\r\n            to.matched.forEach(record => (record.enterCallbacks = {}));\r\n            // check in-component beforeRouteEnter\r\n            guards = extractComponentsGuards(enteringRecords, 'beforeRouteEnter', to, from);\r\n            guards.push(canceledNavigationCheck);\r\n            // run the queue of per route beforeEnter guards\r\n            return runGuardQueue(guards);\r\n        })\r\n            .then(() => {\r\n            // check global guards beforeResolve\r\n            guards = [];\r\n            for (const guard of beforeResolveGuards.list()) {\r\n                guards.push(guardToPromiseFn(guard, to, from));\r\n            }\r\n            guards.push(canceledNavigationCheck);\r\n            return runGuardQueue(guards);\r\n        })\r\n            // catch any navigation canceled\r\n            .catch(err => isNavigationFailure(err, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)\r\n            ? err\r\n            : Promise.reject(err)));\r\n    }\r\n    function triggerAfterEach(to, from, failure) {\r\n        // navigation is confirmed, call afterGuards\r\n        // TODO: wrap with error handlers\r\n        for (const guard of afterGuards.list()) {\r\n            runWithContext(() => guard(to, from, failure));\r\n        }\r\n    }\r\n    /**\r\n     * - Cleans up any navigation guards\r\n     * - Changes the url if necessary\r\n     * - Calls the scrollBehavior\r\n     */\r\n    function finalizeNavigation(toLocation, from, isPush, replace, data) {\r\n        // a more recent navigation took place\r\n        const error = checkCanceledNavigation(toLocation, from);\r\n        if (error)\r\n            return error;\r\n        // only consider as push if it's not the first navigation\r\n        const isFirstNavigation = from === START_LOCATION_NORMALIZED;\r\n        const state = !isBrowser ? {} : history.state;\r\n        // change URL only if the user did a push/replace and if it's not the initial navigation because\r\n        // it's just reflecting the url\r\n        if (isPush) {\r\n            // on the initial navigation, we want to reuse the scroll position from\r\n            // history state if it exists\r\n            if (replace || isFirstNavigation)\r\n                routerHistory.replace(toLocation.fullPath, assign({\r\n                    scroll: isFirstNavigation && state && state.scroll,\r\n                }, data));\r\n            else\r\n                routerHistory.push(toLocation.fullPath, data);\r\n        }\r\n        // accept current navigation\r\n        currentRoute.value = toLocation;\r\n        handleScroll(toLocation, from, isPush, isFirstNavigation);\r\n        markAsReady();\r\n    }\r\n    let removeHistoryListener;\r\n    // attach listener to history to trigger navigations\r\n    function setupListeners() {\r\n        // avoid setting up listeners twice due to an invalid first navigation\r\n        if (removeHistoryListener)\r\n            return;\r\n        removeHistoryListener = routerHistory.listen((to, _from, info) => {\r\n            if (!router.listening)\r\n                return;\r\n            // cannot be a redirect route because it was in history\r\n            const toLocation = resolve(to);\r\n            // due to dynamic routing, and to hash history with manual navigation\r\n            // (manually changing the url or calling history.hash = '#/somewhere'),\r\n            // there could be a redirect record in history\r\n            const shouldRedirect = handleRedirectRecord(toLocation);\r\n            if (shouldRedirect) {\r\n                pushWithRedirect(assign(shouldRedirect, { replace: true }), toLocation).catch(noop);\r\n                return;\r\n            }\r\n            pendingLocation = toLocation;\r\n            const from = currentRoute.value;\r\n            // TODO: should be moved to web history?\r\n            if (isBrowser) {\r\n                saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\r\n            }\r\n            navigate(toLocation, from)\r\n                .catch((error) => {\r\n                if (isNavigationFailure(error, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\r\n                    return error;\r\n                }\r\n                if (isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\r\n                    // Here we could call if (info.delta) routerHistory.go(-info.delta,\r\n                    // false) but this is bug prone as we have no way to wait the\r\n                    // navigation to be finished before calling pushWithRedirect. Using\r\n                    // a setTimeout of 16ms seems to work but there is no guarantee for\r\n                    // it to work on every browser. So instead we do not restore the\r\n                    // history entry and trigger a new navigation as requested by the\r\n                    // navigation guard.\r\n                    // the error is already handled by router.push we just want to avoid\r\n                    // logging the error\r\n                    pushWithRedirect(error.to, toLocation\r\n                    // avoid an uncaught rejection, let push call triggerError\r\n                    )\r\n                        .then(failure => {\r\n                        // manual change in hash history #916 ending up in the URL not\r\n                        // changing, but it was changed by the manual url change, so we\r\n                        // need to manually change it ourselves\r\n                        if (isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ |\r\n                            16 /* ErrorTypes.NAVIGATION_DUPLICATED */) &&\r\n                            !info.delta &&\r\n                            info.type === NavigationType.pop) {\r\n                            routerHistory.go(-1, false);\r\n                        }\r\n                    })\r\n                        .catch(noop);\r\n                    // avoid the then branch\r\n                    return Promise.reject();\r\n                }\r\n                // do not restore history on unknown direction\r\n                if (info.delta) {\r\n                    routerHistory.go(-info.delta, false);\r\n                }\r\n                // unrecognized error, transfer to the global handler\r\n                return triggerError(error, toLocation, from);\r\n            })\r\n                .then((failure) => {\r\n                failure =\r\n                    failure ||\r\n                        finalizeNavigation(\r\n                        // after navigation, all matched components are resolved\r\n                        toLocation, from, false);\r\n                // revert the navigation\r\n                if (failure) {\r\n                    if (info.delta &&\r\n                        // a new navigation has been triggered, so we do not want to revert, that will change the current history\r\n                        // entry while a different route is displayed\r\n                        !isNavigationFailure(failure, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\r\n                        routerHistory.go(-info.delta, false);\r\n                    }\r\n                    else if (info.type === NavigationType.pop &&\r\n                        isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 16 /* ErrorTypes.NAVIGATION_DUPLICATED */)) {\r\n                        // manual change in hash history #916\r\n                        // it's like a push but lacks the information of the direction\r\n                        routerHistory.go(-1, false);\r\n                    }\r\n                }\r\n                triggerAfterEach(toLocation, from, failure);\r\n            })\r\n                .catch(noop);\r\n        });\r\n    }\r\n    // Initialization and Errors\r\n    let readyHandlers = useCallbacks();\r\n    let errorHandlers = useCallbacks();\r\n    let ready;\r\n    /**\r\n     * Trigger errorHandlers added via onError and throws the error as well\r\n     *\r\n     * @param error - error to throw\r\n     * @param to - location we were navigating to when the error happened\r\n     * @param from - location we were navigating from when the error happened\r\n     * @returns the error as a rejected promise\r\n     */\r\n    function triggerError(error, to, from) {\r\n        markAsReady(error);\r\n        const list = errorHandlers.list();\r\n        if (list.length) {\r\n            list.forEach(handler => handler(error, to, from));\r\n        }\r\n        else {\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                warn('uncaught error during route navigation:');\r\n            }\r\n            console.error(error);\r\n        }\r\n        return Promise.reject(error);\r\n    }\r\n    function isReady() {\r\n        if (ready && currentRoute.value !== START_LOCATION_NORMALIZED)\r\n            return Promise.resolve();\r\n        return new Promise((resolve, reject) => {\r\n            readyHandlers.add([resolve, reject]);\r\n        });\r\n    }\r\n    function markAsReady(err) {\r\n        if (!ready) {\r\n            // still not ready if an error happened\r\n            ready = !err;\r\n            setupListeners();\r\n            readyHandlers\r\n                .list()\r\n                .forEach(([resolve, reject]) => (err ? reject(err) : resolve()));\r\n            readyHandlers.reset();\r\n        }\r\n        return err;\r\n    }\r\n    // Scroll behavior\r\n    function handleScroll(to, from, isPush, isFirstNavigation) {\r\n        const { scrollBehavior } = options;\r\n        if (!isBrowser || !scrollBehavior)\r\n            return Promise.resolve();\r\n        const scrollPosition = (!isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0))) ||\r\n            ((isFirstNavigation || !isPush) &&\r\n                history.state &&\r\n                history.state.scroll) ||\r\n            null;\r\n        return nextTick()\r\n            .then(() => scrollBehavior(to, from, scrollPosition))\r\n            .then(position => position && scrollToPosition(position))\r\n            .catch(err => triggerError(err, to, from));\r\n    }\r\n    const go = (delta) => routerHistory.go(delta);\r\n    let started;\r\n    const installedApps = new Set();\r\n    const router = {\r\n        currentRoute,\r\n        listening: true,\r\n        addRoute,\r\n        removeRoute,\r\n        hasRoute,\r\n        getRoutes,\r\n        resolve,\r\n        options,\r\n        push,\r\n        replace,\r\n        go,\r\n        back: () => go(-1),\r\n        forward: () => go(1),\r\n        beforeEach: beforeGuards.add,\r\n        beforeResolve: beforeResolveGuards.add,\r\n        afterEach: afterGuards.add,\r\n        onError: errorHandlers.add,\r\n        isReady,\r\n        install(app) {\r\n            const router = this;\r\n            app.component('RouterLink', RouterLink);\r\n            app.component('RouterView', RouterView);\r\n            app.config.globalProperties.$router = router;\r\n            Object.defineProperty(app.config.globalProperties, '$route', {\r\n                enumerable: true,\r\n                get: () => unref(currentRoute),\r\n            });\r\n            // this initial navigation is only necessary on client, on server it doesn't\r\n            // make sense because it will create an extra unnecessary navigation and could\r\n            // lead to problems\r\n            if (isBrowser &&\r\n                // used for the initial navigation client side to avoid pushing\r\n                // multiple times when the router is used in multiple apps\r\n                !started &&\r\n                currentRoute.value === START_LOCATION_NORMALIZED) {\r\n                // see above\r\n                started = true;\r\n                push(routerHistory.location).catch(err => {\r\n                    if ((process.env.NODE_ENV !== 'production'))\r\n                        warn('Unexpected error when starting the router:', err);\r\n                });\r\n            }\r\n            const reactiveRoute = {};\r\n            for (const key in START_LOCATION_NORMALIZED) {\r\n                // @ts-expect-error: the key matches\r\n                reactiveRoute[key] = computed(() => currentRoute.value[key]);\r\n            }\r\n            app.provide(routerKey, router);\r\n            app.provide(routeLocationKey, reactive(reactiveRoute));\r\n            app.provide(routerViewLocationKey, currentRoute);\r\n            const unmountApp = app.unmount;\r\n            installedApps.add(app);\r\n            app.unmount = function () {\r\n                installedApps.delete(app);\r\n                // the router is not attached to an app anymore\r\n                if (installedApps.size < 1) {\r\n                    // invalidate the current navigation\r\n                    pendingLocation = START_LOCATION_NORMALIZED;\r\n                    removeHistoryListener && removeHistoryListener();\r\n                    removeHistoryListener = null;\r\n                    currentRoute.value = START_LOCATION_NORMALIZED;\r\n                    started = false;\r\n                    ready = false;\r\n                }\r\n                unmountApp();\r\n            };\r\n            // TODO: this probably needs to be updated so it can be used by vue-termui\r\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && isBrowser) {\r\n                addDevtools(app, router, matcher);\r\n            }\r\n        },\r\n    };\r\n    // TODO: type this as NavigationGuardReturn or similar instead of any\r\n    function runGuardQueue(guards) {\r\n        return guards.reduce((promise, guard) => promise.then(() => runWithContext(guard)), Promise.resolve());\r\n    }\r\n    return router;\r\n}\r\nfunction extractChangingRecords(to, from) {\r\n    const leavingRecords = [];\r\n    const updatingRecords = [];\r\n    const enteringRecords = [];\r\n    const len = Math.max(from.matched.length, to.matched.length);\r\n    for (let i = 0; i < len; i++) {\r\n        const recordFrom = from.matched[i];\r\n        if (recordFrom) {\r\n            if (to.matched.find(record => isSameRouteRecord(record, recordFrom)))\r\n                updatingRecords.push(recordFrom);\r\n            else\r\n                leavingRecords.push(recordFrom);\r\n        }\r\n        const recordTo = to.matched[i];\r\n        if (recordTo) {\r\n            // the type doesn't matter because we are comparing per reference\r\n            if (!from.matched.find(record => isSameRouteRecord(record, recordTo))) {\r\n                enteringRecords.push(recordTo);\r\n            }\r\n        }\r\n    }\r\n    return [leavingRecords, updatingRecords, enteringRecords];\r\n}\n\n/**\r\n * Returns the router instance. Equivalent to using `$router` inside\r\n * templates.\r\n */\r\nfunction useRouter() {\r\n    return inject(routerKey);\r\n}\r\n/**\r\n * Returns the current route location. Equivalent to using `$route` inside\r\n * templates.\r\n */\r\nfunction useRoute() {\r\n    return inject(routeLocationKey);\r\n}\n\nexport { NavigationFailureType, RouterLink, RouterView, START_LOCATION_NORMALIZED as START_LOCATION, createMemoryHistory, createRouter, createRouterMatcher, createWebHashHistory, createWebHistory, isNavigationFailure, loadRouteLocation, matchedRouteKey, onBeforeRouteLeave, onBeforeRouteUpdate, parseQuery, routeLocationKey, routerKey, routerViewLocationKey, stringifyQuery, useLink, useRoute, useRouter, viewDepthKey };\n","import { defineStore } from \"pinia\";\n\nexport interface Action {\n  label: string;\n  url: string;\n}\n\nexport interface Message {\n  level: \"info\" | \"success\" | \"error\";\n  body: string;\n  key: string;\n  seen?: boolean;\n  ttl?: number;\n  action?: Action;\n}\n\nexport interface CreateMessage {\n  level: \"info\" | \"success\" | \"error\";\n  body: string;\n  seen?: boolean;\n  ttl?: number;\n  action?: Action;\n}\n\ninterface State {\n  messages: Array<Message>;\n}\n\nexport const useNotificationStore = defineStore(\"notification\", {\n  state: (): State => ({\n    messages: [],\n  }),\n  actions: {\n    setMessageSeen(key: string) {\n      this.messages = this.messages.filter((m: Message) => m.key !== key);\n    },\n    async notify(message: CreateMessage): Promise<void> {\n      const key = Math.random().toString(36).substring(2);\n      const { ttl } = message;\n      this.messages.push({\n        ...message,\n        key,\n      });\n      if (ttl) {\n        setTimeout(\n          () => {\n            this.setMessageSeen(key);\n          },\n          ttl * 1000,\n          this\n        );\n      }\n    },\n  },\n});\n","import { storeToRefs } from \"pinia\";\n\nimport { useNotificationStore } from \"@/stores/notification\";\n\nexport const useNotification = () => {\n  const { messages } = storeToRefs(useNotificationStore());\n  const { notify, setMessageSeen } = useNotificationStore();\n  return {\n    messages,\n    notify,\n    setMessageSeen,\n  };\n};\n","export default function(n){return{all:n=n||new Map,on:function(t,e){var i=n.get(t);i?i.push(e):n.set(t,[e])},off:function(t,e){var i=n.get(t);i&&(e?i.splice(i.indexOf(e)>>>0,1):n.set(t,[]))},emit:function(t,e){var i=n.get(t);i&&i.slice().map(function(n){n(e)}),(i=n.get(\"*\"))&&i.slice().map(function(n){n(t,e)})}}}\n//# sourceMappingURL=mitt.mjs.map\n","import mitt from \"mitt\";\n\nexport type EventBusEvents = {\n  //\n  \"account:authenticate\": {\n    intent: string;\n    next: string;\n  };\n  //\n  \"subscription:subscribe\": {\n    intent: string;\n    next?: string;\n    message?: string;\n  };\n  //\n  \"geolocation:blocked\": {\n    message: string;\n  };\n  //\n  \"radio:flow\": \"reset\" | \"releaseFocus\" | \"focusNext\" | \"focusPrevious\";\n  //\n  \"side-menu:show\": void;\n  \"side-menu:hide\": void;\n  \"global-search:show\": void;\n  //\n  \"donation:showCta\": void;\n  \"donation:showPanel\": void;\n  \"donation:hidePanel\": void;\n  \"donation:togglePanel\": void;\n};\n\nconst eventBus = mitt<EventBusEvents>();\n\n// eventBus.on(\"*\", (type, e) => console.log(type, e));\n\nwindow.eventBus = eventBus;\n\nexport default eventBus;\n","import { useRouter } from \"vue-router\";\nimport type { AxiosError } from \"axios\";\n\nimport { useAccount } from \"@/composables/account\";\nimport { useNotification } from \"@/composables/notification\";\nimport eventBus from \"@/eventBus\";\n\ntype Profile = {\n  givenName?: string;\n  familyName?: string;\n  email?: string;\n  realUserStatus?: string;\n};\n\ntype TokenResult = {\n  authorizationCode?: string;\n  identityToken?: string;\n  profile?: Profile;\n};\n\ntype TokenPayload = {\n  result: TokenResult;\n};\n\nexport const useAppleIdLogin = () => {\n  const { loginUserByAppleId, loadUser, user, isNew } = useAccount();\n  const router = useRouter();\n  const { notify } = useNotification();\n\n  /*\n    payload contains the whole data sent by obr-app\n  */\n  const loginByAppleId = async (payload: TokenPayload) => {\n    const { result } = payload;\n\n    const idToken = result?.identityToken;\n    const authorizationCode = result?.authorizationCode;\n    const profile = result?.profile;\n    if (!(idToken && authorizationCode)) {\n      console.debug(\"missing authorizationCode or idToken\");\n      return;\n    }\n\n    try {\n      await loginUserByAppleId(idToken, authorizationCode, profile);\n    } catch (err: unknown) {\n      const error = err as AxiosError;\n      const message = error.response?.data.message ?? \"Login error\";\n      await notify({\n        level: \"error\",\n        body: `login error: ${message}`,\n        ttl: 30,\n      });\n      return false;\n    }\n\n    await loadUser();\n\n    eventBus.emit(\"side-menu:hide\");\n\n    if (isNew.value) {\n      await router.push(\"/account/settings/\");\n    } else {\n      await notify({\n        level: \"success\",\n        body: `logged in as ${user.value?.email}`,\n        ttl: 3,\n      });\n    }\n    return true;\n  };\n  return {\n    loginByAppleId,\n  };\n};\n","import { useRouter } from \"vue-router\";\nimport type { AxiosError } from \"axios\";\n\nimport { useAccount } from \"@/composables/account\";\nimport { useNotification } from \"@/composables/notification\";\nimport eventBus from \"@/eventBus\";\n\ntype TokenResult = {\n  idToken?: {\n    tokenString: string;\n  };\n};\n\ntype TokenPayload = {\n  result: TokenResult;\n};\n\nexport const useGoogleIdTokenLogin = () => {\n  const { loginUserByGoogleIdToken, loadUser, user, isNew } = useAccount();\n  const router = useRouter();\n  const { notify } = useNotification();\n\n  /*\n    payload contains the whole data sent by obr-app\n  */\n  const loginByGoogleIdToken = async (payload: TokenPayload) => {\n    const { result } = payload;\n\n    const idToken = result?.idToken?.tokenString;\n    if (!idToken) {\n      return;\n    }\n\n    try {\n      await loginUserByGoogleIdToken(idToken);\n    } catch (err: unknown) {\n      const error = err as AxiosError;\n      const message = error.response?.data.message ?? \"Login error\";\n      await notify({\n        level: \"error\",\n        body: `login error: ${message}`,\n        ttl: 30,\n      });\n      return false;\n    }\n\n    await loadUser();\n\n    eventBus.emit(\"side-menu:hide\");\n\n    if (isNew.value) {\n      await router.push(\"/account/settings/\");\n    } else {\n      await notify({\n        level: \"success\",\n        body: `logged in as ${user.value?.email}`,\n        ttl: 3,\n      });\n    }\n    return true;\n  };\n  return {\n    loginByGoogleIdToken,\n  };\n};\n","import { useIntervalFn } from \"@vueuse/core\";\nimport log from \"loglevel\";\n\nimport { useAccount } from \"@/composables/account\";\nimport { useDevice } from \"@/composables/device\";\nimport { usePlayerStore } from \"@/stores/player\";\nimport { useQueueStore } from \"@/stores/queue\";\nimport { useScheduleStore } from \"@/stores/schedule\";\nimport { useSettingsStore } from \"@/stores/settings\";\n\nimport { useAppleIdLogin } from \"./appleIdLogin\";\nimport { useGoogleIdTokenLogin } from \"./googleIdTokenLogin\";\n\n// how often the web-app sends a heartbeat to swift-app\nconst HEARTBEAT_INTERVAL = 2000 * 0.9;\n\n// configuration for swift-app\nconst HEARTBEAT_APP_ACTIVE_DELAY = 2.0;\nconst HEARTBEAT_APP_FOREGROUND_DELAY = 2.0;\nconst HEARTBEAT_HEARTBEAT_DELAY = 2.0;\n\n// for channel options see:\n// obr-app/obrapp/modules/OBRWebView.swift\n\n// channels SENDING data TO swift-app\ntype sendChannel =\n  | \"heartbeat\"\n  | \"heartbeat:setDelays\"\n  | \"heartbeat:shutdown\"\n  | \"global:init\"\n  // queue\n  | \"queue:deleteAtIndex\"\n  | \"queue:playFromIndex\"\n  | \"queue:enqueue\"\n  | \"queue:enqueueAsNext\"\n  | \"queue:enqueueToEnd\"\n  | \"queue:shuffle\"\n  | \"queue:clear\"\n  | \"queue:requestUpdate\" // initiates \"queue:update\"\n  // player\n  | \"player:playLive\"\n  | \"player:pause\"\n  | \"player:resume\"\n  | \"player:seek\"\n  | \"player:requestUpdate\" // initiates \"player:update\"\n  // web\n  | \"web:setPath\"\n  // ui\n  | \"ui:setTheme\"\n  // rating\n  | \"rating:setRatings\"\n  // settings\n  | \"settings:setMaxBandwidth\"\n  // account\n  | \"account:setAccessToken\"\n  // browser\n  | \"browser:navigate\"\n  // sign-in\n  | \"googleSignin:start\"\n  | \"appleSignin:start\";\n\n// channels RECEIVING data FROM swift-app\ntype receiveChannel =\n  // queue\n  | \"queue:update\"\n  // player\n  | \"player:update\"\n  // schedule\n  | \"schedule:update\"\n  // ui\n  | \"ui:update\"\n  // rating\n  | \"rating:update\"\n  // settings\n  | \"settings:update\"\n  // settings\n  | \"account:update\"\n  // appscene\n  | \"appscene:update\"\n  // errors\n  | \"apperror:update\"\n  // sign-in\n  | \"googleSignin:completed\"\n  | \"appleSignin:completed\";\n\ntype SendMessage = {\n  c: sendChannel;\n  d?: string;\n};\n\ntype ReceivedMessage = {\n  c: receiveChannel;\n  d?: string;\n};\n\ntype ReceivedEventDetail = {\n  c: receiveChannel;\n  d?: string;\n};\n\ntype ReceivedEvent = Event & {\n  detail?: ReceivedEventDetail;\n};\n\nclass AppBridge {\n  static instance: AppBridge;\n\n  pauseHeartbeat = (): void => {};\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  loginByAppleId = async (payload: unknown): Promise<void> => {};\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  loginByGoogleIdToken = async (payload: unknown): Promise<void> => {};\n\n  private constructor() {\n    const { isApp } = useDevice();\n\n    if (!isApp) {\n      log.info(\"AppBridge only available in app-mode\");\n      return;\n    }\n\n    log.debug(\"AppBridge - constructor\");\n    this.init().then(() => {\n      log.debug(\"AppBridge - initialized\");\n    });\n    const { pause: pauseHeartbeat } = useIntervalFn(\n      async () => {\n        await this.heartbeat();\n      },\n      HEARTBEAT_INTERVAL,\n      { immediateCallback: true }\n    );\n    this.pauseHeartbeat = async () => {\n      log.debug(\"AppBridge - pauseHeartbeat\");\n      pauseHeartbeat();\n      await this.send(\"heartbeat:shutdown\");\n    };\n    window.addEventListener(\"appBridge\", this.onReceive.bind(this));\n\n    // in app-mode we have to handle link-clicks separately\n    // NOTE: mailto: etc. links should be implemented in swift / webview. example:\n    // https://gist.github.com/dakeshi/d8e69e4ba50b31211d94\n    window.addEventListener(\"click\", this.onExternalLink.bind(this));\n\n    // we need to initiate use*IdTokenLogin here to have access to router etc.\n    const { loginByAppleId } = useAppleIdLogin();\n    this.loginByAppleId = loginByAppleId;\n\n    const { loginByGoogleIdToken } = useGoogleIdTokenLogin();\n    this.loginByGoogleIdToken = loginByGoogleIdToken;\n  }\n\n  public static getInstance(): AppBridge {\n    if (!AppBridge.instance) {\n      AppBridge.instance = new AppBridge();\n    }\n    return AppBridge.instance;\n  }\n\n  async init(): Promise<void> {\n    log.debug(\"AppBridge - init\");\n    await this.send(\"global:init\");\n    const delays = {\n      appActiveDelay: HEARTBEAT_APP_ACTIVE_DELAY,\n      appForegroundDelay: HEARTBEAT_APP_FOREGROUND_DELAY,\n      heartbeatDelay: HEARTBEAT_HEARTBEAT_DELAY,\n    };\n    await this.send(\"heartbeat:setDelays\", delays);\n\n    // send accessToken in case of existing user session\n    const { user } = useAccount();\n    if (user.value?.accessToken) {\n      await this.send(\"account:setAccessToken\", { accessToken: user.value?.accessToken });\n    }\n  }\n  async heartbeat(): Promise<void> {\n    // log.debug(\"AppBridge - heartbeat\");\n    await this.send(\"heartbeat\");\n  }\n  // web > native - SEND payload TO swift-app channel\n  async send(channel: sendChannel, data?: object) {\n    // if (channel !== \"heartbeat\") {\n    //   log.debug(\"AppBridge - send\", channel, data);\n    // }\n    const message: SendMessage = {\n      c: channel,\n    };\n    if (data) {\n      message.d = JSON.stringify(data);\n    }\n    // @ts-ignore\n    if (window.webkit) {\n      // log.debug(\"payload\", message);\n      try {\n        // @ts-ignore\n        await window.webkit.messageHandlers.appBridge?.postMessage(message);\n      } catch (e: unknown) {\n        // console.warn(channel, e);\n      }\n    }\n  }\n  // web < native - handle RECEIVED data FROM swift-app channel\n  async onReceive(e: ReceivedEvent) {\n    if (!e.detail) {\n      return;\n    }\n    const message: ReceivedMessage = e.detail;\n    const channel = message.c;\n    const data = message.d ? JSON.parse(message.d) : null;\n    log.debug(\"AppBridge - onReceive\", channel, data);\n\n    switch (channel) {\n      case \"queue:update\": {\n        const { setQueueData } = useQueueStore();\n        await setQueueData(data);\n        break;\n      }\n      case \"player:update\": {\n        const { setPlayerState } = usePlayerStore();\n        const playerState = {\n          playState: data.state, // NOTE: should be adjusted in obr-app\n          currentTime: data.absPosition, // NOTE: should be adjusted in obr-app\n          ...data,\n          // set missing dummy values\n          bandwidth: 12800,\n        };\n        await setPlayerState(playerState);\n        break;\n      }\n      case \"settings:update\": {\n        const { setMaxBandwidth, setShuffleMode } = useSettingsStore();\n        setMaxBandwidth(data.maxBandwidth);\n        setShuffleMode(data.shuffleMode);\n        break;\n      }\n      case \"schedule:update\": {\n        console.debug(\"schedule\", data.schedule);\n        const { setSchedule } = useScheduleStore();\n        await setSchedule(data.schedule);\n        break;\n      }\n      case \"account:update\": {\n        break;\n      }\n      case \"appscene:update\": {\n        // for some reason the app \"looses\" the accessToken / cdnKey\n        // so we force an update here...\n        const { sceneName, eventName } = data;\n        if (sceneName === \"Main\" && eventName === \"sceneDidBecomeActive\") {\n          console.debug(\"appscene\", \"mainSceneDidBecomeActive\");\n          const { user } = useAccount();\n          if (user.value?.accessToken) {\n            await this.send(\"account:setAccessToken\", { accessToken: user.value?.accessToken });\n          }\n        }\n        break;\n      }\n      case \"apperror:update\": {\n        const { message: errorMessage, code: errorCode } = data;\n        if (errorCode === \"\") {\n          break;\n        }\n        console.error(\"apperror\", errorCode, errorMessage);\n        break;\n      }\n      case \"appleSignin:completed\": {\n        console.debug(\"appleSignin:completed\", data);\n        await this.loginByAppleId(data);\n        break;\n      }\n      case \"googleSignin:completed\": {\n        // console.debug(\"googleSignin:completed\", data);\n        await this.loginByGoogleIdToken(data);\n        break;\n      }\n    }\n  }\n  async onExternalLink(e: Event) {\n    const origin = (e.target as Element).closest(\"a\");\n    if (!origin) {\n      return;\n    }\n    // links with `target=\"_blank\"` should open in native safari\n    if (origin.target === \"_blank\") {\n      e.preventDefault();\n      await this.send(\"browser:navigate\", {\n        url: origin.href,\n      });\n      return;\n    }\n    // \"mailto\" links should open in native safari\n    if (origin.href.startsWith(\"mailto:\")) {\n      e.preventDefault();\n      await this.send(\"browser:navigate\", {\n        url: origin.href,\n      });\n      return;\n    }\n    // stop evaluation for \"internal\" links\n    if (origin.host && origin.host === window.location.host) {\n      return;\n    }\n    // \"external\" links should open in native safari\n    // (assuming we dont have any http:// links...)\n    if (origin.href.startsWith(\"https://\")) {\n      e.preventDefault();\n      await this.send(\"browser:navigate\", {\n        url: origin.href,\n      });\n      return;\n    }\n  }\n}\n\nexport { AppBridge };\n","\"use strict\";\r\n\r\nvar tester = /^[-!#$%&'*+\\/0-9=?A-Z^_a-z{|}~](\\.?[-!#$%&'*+\\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\\.?[a-zA-Z0-9])*\\.[a-zA-Z](-?[a-zA-Z0-9])+$/;\r\n// Thanks to:\r\n// http://fightingforalostcause.net/misc/2006/compare-email-regex.php\r\n// http://thedailywtf.com/Articles/Validating_Email_Addresses.aspx\r\n// http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses/201378#201378\r\nexports.validate = function(email)\r\n{\r\n\tif (!email)\r\n\t\treturn false;\r\n\t\t\r\n\tif(email.length>254)\r\n\t\treturn false;\r\n\r\n\tvar valid = tester.test(email);\r\n\tif(!valid)\r\n\t\treturn false;\r\n\r\n\t// Further checking of some things regex can't handle\r\n\tvar parts = email.split(\"@\");\r\n\tif(parts[0].length>64)\r\n\t\treturn false;\r\n\r\n\tvar domainParts = parts[1].split(\".\");\r\n\tif(domainParts.some(function(part) { return part.length>63; }))\r\n\t\treturn false;\r\n\r\n\treturn true;\r\n}","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\n\nexport default defineComponent({\n  inheritAttrs: false,\n  props: {\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props, { attrs }) {\n    const button = ref(null);\n    const isLoading = ref(false);\n    const isSuccess = ref(false);\n    const hasError = ref(false);\n    const width = ref(0);\n    const height = ref(0);\n\n    const style = computed(() => {\n      if (hasError.value || isLoading.value || isSuccess.value) {\n        return {\n          width: `${width.value}px`,\n          height: `${height.value}px`,\n        };\n      }\n      return {};\n    });\n\n    const classes = computed(() => ({\n      \"is-loading\": isLoading.value,\n      \"is-success\": isSuccess.value,\n      \"has-error\": hasError.value,\n      \"is-disabled\": props.disabled,\n    }));\n\n    const setSuccess = (displayFor: number) => {\n      isSuccess.value = true;\n      setTimeout(() => {\n        isSuccess.value = false;\n      }, displayFor);\n    };\n\n    const setError = (displayFor: number) => {\n      hasError.value = true;\n      setTimeout(() => {\n        hasError.value = false;\n      }, displayFor);\n    };\n\n    const handleClick = async (e: any) => {\n      // @ts-ignore\n      const rect = button.value.getBoundingClientRect();\n      width.value = rect.width;\n      height.value = rect.height;\n      try {\n        isLoading.value = true;\n        // @ts-ignore\n        await attrs.onClick(e);\n        setSuccess(2000);\n      } catch (err) {\n        console.debug(\"hm..\", err);\n        setError(3000);\n      } finally {\n        isLoading.value = false;\n      }\n    };\n\n    const computedAttrs = computed(() => ({\n      ...attrs,\n      onClick: handleClick,\n    }));\n\n    return {\n      button,\n      isLoading,\n      isSuccess,\n      hasError,\n      style,\n      classes,\n      computedAttrs,\n    };\n  },\n});\n</script>\n\n<template>\n  <button\n    :style=\"style\"\n    :class=\"classes\"\n    :disabled=\"isLoading || disabled\"\n    class=\"async-button\"\n    ref=\"button\"\n    v-bind=\"computedAttrs\"\n  >\n    <slot v-if=\"isLoading\" name=\"loading\">\n      <svg\n        class=\"loading-spinner\"\n        width=\"38\"\n        height=\"38\"\n        viewBox=\"0 0 38 38\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        stroke=\"#fff\"\n      >\n        <g fill=\"none\" fill-rule=\"evenodd\">\n          <g transform=\"translate(1 1)\" stroke-width=\"2\">\n            <circle stroke-opacity=\".5\" cx=\"18\" cy=\"18\" r=\"18\" />\n            <path d=\"M36 18c0-9.94-8.06-18-18-18\">\n              <animateTransform\n                attributeName=\"transform\"\n                type=\"rotate\"\n                from=\"0 18 18\"\n                to=\"360 18 18\"\n                dur=\"2s\"\n                repeatCount=\"indefinite\"\n              />\n            </path>\n          </g>\n        </g>\n      </svg>\n    </slot>\n    <slot v-else-if=\"isSuccess\" name=\"success\"> OK </slot>\n    <slot v-else-if=\"hasError\" name=\"error\"> Error </slot>\n    <slot v-else />\n  </button>\n</template>\n\n<style lang=\"scss\" scoped>\n.async-button {\n  transition: background-color 300ms ease-in-out, box-shadow 200ms;\n\n  &.has-error {\n    background-color: rgb(var(--c-red) / 100%);\n  }\n\n  &.is-loading {\n    cursor: wait !important;\n  }\n\n  &.is-success {\n    box-shadow: 0 0 1px 3px rgb(var(--c-cta-active) / 10%);\n  }\n\n  &.is-disabled {\n    cursor: not-allowed !important;\n    opacity: 0.5;\n  }\n\n  .loading-spinner {\n    height: 75%;\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport type { AxiosError, AxiosResponse } from \"axios\";\n\ninterface ApiErrorResponse extends AxiosResponse {\n  message?: string;\n}\n\ninterface ApiError extends AxiosError {\n  response?: ApiErrorResponse;\n  data?: any;\n}\n\ninterface DisplayError {\n  message: string;\n  code?: string | number;\n}\n\nconst props = defineProps<{\n  errors: Array<string | ApiError>;\n}>();\n\nconst getErrorMessage = (error: ApiError): string => {\n  if (error.response?.data.message) {\n    console.debug(\"error message: error.response.data.message\");\n    return error.response.data.message;\n  }\n  if (error.response?.data.detail) {\n    console.debug(\"error message: error.response.data.detail\");\n    return error.response.data.detail;\n  }\n  if (error.response?.message) {\n    console.debug(\"error message: error.response.message\");\n    return error.response.message;\n  }\n  if (error.data?.message) {\n    console.debug(\"error message: error.data.message\");\n    return error.data.message;\n  }\n  return error.response?.statusText ?? \"An error occurred. Sorry.\";\n};\n\nconst annotateErrors = (errors: Array<string | ApiError>): Array<DisplayError> => {\n  const annotatedErrors: Array<DisplayError> = [];\n  errors.forEach((error) => {\n    if (typeof error === \"string\") {\n      annotatedErrors.push({\n        message: error,\n      });\n    } else {\n      console.debug(\"error.response\", error.response);\n      annotatedErrors.push({\n        message: getErrorMessage(error),\n        code: error.response?.status,\n      });\n    }\n  });\n  return annotatedErrors;\n};\n\nconst annotatedErrors = computed(() => {\n  return annotateErrors(props.errors);\n});\n\nconst hasErrors = computed(() => props.errors.length);\n</script>\n<template>\n  <div v-if=\"hasErrors\" class=\"errors\">\n    <div v-for=\"(error, index) in annotatedErrors\" :key=\"`error-${index}`\" class=\"error\">\n      <p class=\"message\" v-text=\"error.message\" />\n      <code v-if=\"error.code\" class=\"code\">\n        <span class=\"status-code\" v-text=\"`#${error.code}`\" />\n      </code>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.errors {\n  padding: 0.75rem;\n  color: rgb(var(--c-dark) / 100%);\n  background: rgb(var(--c-red) / 60%);\n  border-radius: 3px;\n}\n\n.error {\n  position: relative;\n\n  .message {\n    @include typo.bold;\n\n    &:not(:first-child) {\n      padding-top: 0.5rem;\n    }\n  }\n\n  .code {\n    @include typo.small;\n\n    top: 4px;\n    position: absolute;\n    right: 0;\n  }\n}\n\n.error:not(:last-child) {\n  padding-bottom: 0.5rem;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nexport enum MessageLevel {\n  Info = \"info\",\n  Warning = \"warning\",\n  Success = \"success\",\n}\n\nexport default defineComponent({\n  props: {\n    body: {\n      type: String,\n      required: true,\n    },\n    level: {\n      type: String,\n      default: MessageLevel.Info,\n    },\n  },\n  setup(props) {\n    console.debug(props);\n  },\n});\n</script>\n\n<template>\n  <div class=\"message\" :class=\"`message--${level}`\">\n    <div class=\"message__body\" v-html=\"body\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.message {\n  @include typo.bold;\n\n  padding: 1rem;\n  color: rgb(var(--c-light) / 100%);\n  background: rgb(var(--c-dark) / 100%);\n\n  &--info {\n    background: rgb(var(--c-info) / 100%);\n  }\n\n  &--warning {\n    background: rgb(var(--c-warning) / 100%);\n  }\n\n  &--success {\n    background: rgb(var(--c-success) / 100%);\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRouter } from \"vue-router\";\nimport { whenever } from \"@vueuse/core\";\nimport * as EmailValidator from \"email-validator\";\nimport { debounce } from \"lodash-es\";\nimport type { AxiosError } from \"axios\";\n\nimport { checkLoginEmail, sendLoginEmail } from \"@/api/account\";\nimport AsyncButton from \"@/components/ui/button/AsyncButton.vue\";\nimport ApiErrors from \"@/components/ui/error/ApiErrors.vue\";\nimport Message from \"@/components/ui/Message.vue\";\nimport { useAccount } from \"@/composables/account\";\n\n// import type {UiMessage} from \"@/types.d\";\n\nenum Flow {\n  Password = \"password\",\n  Token = \"token\",\n  Register = \"register\",\n}\n\nconst props = defineProps<{\n  next: string;\n}>();\n\nconst emit = defineEmits([\"emailSent\"]);\n\nconst { t } = useI18n();\nconst router = useRouter();\nconst { loadUser, loginUser } = useAccount();\nconst email = ref(\"\");\nconst password = ref(\"\");\nconst emailValid = ref(false);\nconst emailExists = ref(false);\nconst promptPassword = ref(false);\nconst buttonText = ref(t(\"account.auth.login\"));\nconst message = ref({});\nconst errors = ref<Array<string | AxiosError>>([]);\nconst flow = computed(() => {\n  if (emailExists.value && promptPassword.value) {\n    return Flow.Password;\n  }\n  if (emailExists.value) {\n    return Flow.Token;\n  }\n  return Flow.Register;\n});\nconst updateAccount = (account: any | null) => {\n  message.value = {};\n  if (account && account.uid) {\n    emailExists.value = true;\n    if (account.hasUsablePassword) {\n      promptPassword.value = true;\n      buttonText.value = t(\"account.auth.login\");\n    } else {\n      message.value = {\n        level: \"info\",\n        body: t(\"account.auth.accountExists\"),\n      };\n      buttonText.value = t(\"account.auth.sendToken\");\n    }\n  } else {\n    emailExists.value = false;\n    promptPassword.value = false;\n    buttonText.value = t(\"account.auth.register\");\n  }\n};\nconst handleEmailChanged = debounce(async (value: string) => {\n  errors.value = [];\n  emailExists.value = false;\n  promptPassword.value = false;\n  if (EmailValidator.validate(value)) {\n    emailValid.value = true;\n    try {\n      const account = await checkLoginEmail(value);\n      updateAccount(account);\n    } catch (err: unknown) {\n      const error = err as AxiosError;\n      errors.value = [error];\n    }\n  } else {\n    emailValid.value = false;\n    buttonText.value = t(\"account.auth.login\");\n  }\n}, 200);\n/*\nNOTE: `keyup` does not fire on webView input autocomplete.\n      so we have to use watch to detect input.\n*/\nwatch(() => email.value, handleEmailChanged);\nconst submitEmailLogin = async () => {\n  message.value = {};\n  errors.value = [];\n  try {\n    const response = await sendLoginEmail(email.value);\n    emit(\"emailSent\", response.email);\n  } catch (err: unknown) {\n    const error = err as AxiosError;\n    errors.value = [error];\n  }\n};\nconst submitPasswordLogin = async () => {\n  message.value = {};\n  errors.value = [];\n  const credentials = {\n    email: email.value,\n    password: password.value,\n  };\n  errors.value = [];\n  try {\n    await loginUser(credentials);\n    await loadUser(); // make sure user data is fully loaded\n    if (props.next) {\n      const url = new URL(props.next, window.location.origin);\n      await router.push({\n        path: url.pathname,\n        hash: url.hash,\n      });\n      // NOTE: do we really need to reload the page?\n      // document.location.reload();\n    } else {\n      // NOTE: do we really need to reload the page?\n      // document.location.reload();\n    }\n  } catch (err: unknown) {\n    const error = err as AxiosError;\n    errors.value = [error];\n  }\n};\nconst submitForm = async () => {\n  message.value = {};\n  errors.value = [];\n  if (flow.value === Flow.Register || flow.value === Flow.Token) {\n    await submitEmailLogin();\n  }\n  if (flow.value === Flow.Password) {\n    await submitPasswordLogin();\n  }\n};\nconst resetPassword = async () => {\n  await submitEmailLogin();\n};\n\n// auto-submit form in case of an existing account\nwhenever(emailExists, async () => {\n  if (!promptPassword.value) {\n    await submitForm();\n  }\n});\n</script>\n\n<template>\n  <form class=\"form\" @submit.prevent=\"submitForm\">\n    <div class=\"input-container\">\n      <i18n-t keypath=\"account.auth.usingEmail\" tag=\"label\" for=\"email-1625\" />\n      <input\n        class=\"input\"\n        v-model=\"email\"\n        required\n        id=\"email-1625\"\n        name=\"email\"\n        type=\"email\"\n        placeholder=\"E-Mail\"\n        autocomplete=\"email\"\n      />\n    </div>\n    <div v-if=\"flow === 'password'\" class=\"input-container\">\n      <i18n-t keypath=\"account.auth.password\" tag=\"label\" for=\"password-1625\" />\n      <input\n        class=\"input\"\n        v-model=\"password\"\n        required\n        id=\"password-1625\"\n        name=\"password\"\n        type=\"password\"\n        placeholder=\"Password\"\n        autocomplete=\"current-password\"\n      />\n      <p class=\"help\">\n        <i18n-t keypath=\"account.auth.forgotPassword\" tag=\"span\" />\n        <i18n-t @click.prevent=\"resetPassword\" keypath=\"account.auth.resetPassword\" tag=\"a\" />\n      </p>\n    </div>\n    <div class=\"form-messages\" v-if=\"message && message.body\">\n      <Message :level=\"message.level\" :body=\"message.body\" />\n    </div>\n    <div class=\"form-errors\" v-if=\"errors.length\">\n      <ApiErrors :errors=\"errors\" />\n    </div>\n    <div class=\"input-container submit\">\n      <AsyncButton class=\"button\" @click.prevent=\"submitForm\" :disabled=\"!emailValid\">\n        {{ buttonText }}\n      </AsyncButton>\n    </div>\n  </form>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/form\";\n\n.form {\n  @include form.default;\n\n  display: flex;\n  flex-direction: column;\n\n  .input-container {\n    @include form.top-label;\n\n    width: 100%;\n\n    > label {\n      &::after {\n        content: \":\";\n      }\n    }\n\n    .input {\n      @include typo.large;\n    }\n\n    &.submit {\n      padding-top: 2rem;\n\n      .button {\n        max-width: 33%;\n\n        @include responsive.bp-medium {\n          max-width: unset;\n        }\n      }\n    }\n\n    .help {\n      > span {\n        padding-right: 0.5rem;\n      }\n\n      @include responsive.bp-medium {\n        @include typo.small;\n\n        padding-top: 1rem;\n        flex-direction: column;\n        align-items: start;\n        white-space: unset;\n      }\n    }\n  }\n}\n\n.form-messages,\n.form-errors {\n  margin: 1rem 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, onMounted, ref, watch } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    valid: {\n      type: Boolean,\n      required: false,\n      default: false,\n    },\n  },\n  emits: [\"input\"],\n  setup(props, { emit }) {\n    const inputEl = ref(null);\n    const token = ref(\"\");\n    const parseInput = (value: string) => {\n      if (value.length >= 4 && value[3] !== \"-\") {\n        value = [value.slice(0, 3), \"-\", value.slice(3)].join(\"\");\n      }\n      return value.toUpperCase();\n    };\n    const handleTokenChanged = (value: string) => {\n      const parsedValue = parseInput(value);\n      token.value = parsedValue;\n      emit(\"input\", parsedValue);\n    };\n    /*\n    NOTE: `keyup` does not fire on webView input autocomplete.\n          so we have to use watch to detect input.\n    */\n    watch(() => token.value, handleTokenChanged);\n    onMounted(() => {\n      setTimeout(() => {\n        // @ts-ignore\n        inputEl.value.focus();\n      }, 500);\n    });\n    return {\n      inputEl,\n      token,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"token-input\" :class=\"{ 'is-valid': valid }\">\n    <div class=\"input-container token-input\">\n      <i18n-t keypath=\"account.auth.loginToken\" tag=\"label\" for=\"ti-1298\" />\n      <input\n        ref=\"inputEl\"\n        id=\"ti-1298\"\n        class=\"input\"\n        v-model=\"token\"\n        maxlength=\"7\"\n        placeholder=\"Login-Code\"\n        autocomplete=\"one-time-code\"\n      />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/form\";\n\n.token-input {\n  @include form.default;\n\n  .input-container {\n    @include form.top-label;\n\n    > label {\n      white-space: nowrap;\n\n      &::after {\n        content: \":\";\n      }\n    }\n  }\n\n  .input {\n    @include form.input;\n\n    font-size: 200%;\n    transition: background 200ms;\n  }\n\n  &.is-valid {\n    .input {\n      background: rgb(var(--c-success) / 10%);\n      border-color: rgb(var(--c-success) / 100%);\n    }\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRouter } from \"vue-router\";\nimport { whenever } from \"@vueuse/core\";\nimport type { AxiosError } from \"axios\";\n\nimport TokenInput from \"@/components/account/auth/TokenInput.vue\";\nimport AsyncButton from \"@/components/ui/button/AsyncButton.vue\";\nimport ApiErrors from \"@/components/ui/error/ApiErrors.vue\";\nimport { useAccount } from \"@/composables/account\";\n\nconst tokenRegex = new RegExp(\"^([A-Z0-9]{3})-?([A-Z0-9]{3})$\");\n\nconst props = defineProps<{\n  email: string;\n  next: string;\n}>();\n\nconst emit = defineEmits([\"reset\"]);\n\nconst { t } = useI18n();\nconst router = useRouter();\nconst { loadUser, loginUserByToken } = useAccount();\nconst token = ref(\"\");\nconst tokenValid = ref(false);\nconst errors = ref<Array<string | AxiosError>>([]);\n\nconst handleTokenInput = async (value: string) => {\n  token.value = value;\n  tokenValid.value = tokenRegex.test(value);\n  errors.value = [];\n};\n\nconst submitForm = async () => {\n  if (!tokenValid.value) {\n    return;\n  }\n  errors.value = [];\n  const credentials = {\n    email: props.email,\n    token: token.value,\n  };\n  try {\n    const { created } = await loginUserByToken(credentials);\n    await loadUser();\n\n    if (props.next) {\n      const url = new URL(props.next, window.location.origin);\n      await router.push({\n        path: url.pathname,\n        hash: url.hash,\n      });\n    } else if (created) {\n      await router.push({\n        name: \"accountSettings\",\n      });\n    } else {\n      console.debug(\"loginUserByToken\");\n    }\n    // NOTE: do we really need to reload the page?\n    /*\n    if (created) {\n      document.location = \"/account/\";\n    } else {\n      document.location.reload();\n    }\n    */\n  } catch (err: unknown) {\n    const error = err as AxiosError;\n    errors.value = [error];\n    throw error;\n  }\n};\n\n// auto-submit form when token (format) is valid\nwhenever(tokenValid, submitForm);\n\nconst reset = async () => {\n  emit(\"reset\");\n};\n</script>\n\n<template>\n  <div>\n    <p class=\"lead\">\n      <i18n-t keypath=\"account.auth.loginEmailSent.title\" tag=\"div\" class=\"title\">\n        <em v-text=\"email\" />\n      </i18n-t>\n      <i18n-t keypath=\"account.auth.loginEmailSent.note\" tag=\"div\" class=\"note\" />\n      <i18n-t @click.prevent=\"reset\" keypath=\"account.auth.loginEmailSendAgain\" tag=\"a\" />\n    </p>\n    <form class=\"form\" @submit.prevent=\"submitForm\">\n      <TokenInput ref=\"tokenInputRef\" @input=\"handleTokenInput\" />\n      <div class=\"form-errors\" v-if=\"errors.length\">\n        <ApiErrors :errors=\"errors\" />\n      </div>\n      <div class=\"input-container submit\">\n        <AsyncButton class=\"button\" @click.prevent=\"submitForm\" :disabled=\"!tokenValid\">\n          {{ t(\"account.auth.login\") }}\n        </AsyncButton>\n      </div>\n    </form>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/form\";\n\n.form {\n  @include form.default;\n\n  display: flex;\n  flex-direction: column;\n\n  .input-container {\n    width: 100%;\n\n    .input {\n      @include typo.large;\n    }\n\n    &.submit {\n      padding-top: 2rem;\n\n      .button {\n        max-width: 33%;\n\n        @include responsive.bp-medium {\n          max-width: unset;\n        }\n      }\n    }\n  }\n\n  .token-input {\n    display: flex;\n    flex-direction: column;\n    padding: 1rem 0;\n  }\n}\n\n.lead {\n  .title {\n    @include typo.large;\n  }\n\n  .note {\n    margin-top: 1rem;\n  }\n\n  a {\n    text-decoration: underline;\n    cursor: pointer;\n  }\n}\n\n.form-messages,\n.form-errors {\n  margin: 1rem 0;\n}\n</style>\n","export default \"__VITE_ASSET__bb069b5a__\"","export default \"__VITE_ASSET__7b33525b__\"","export default \"__VITE_ASSET__d5048a2f__\"","export default \"__VITE_ASSET__04cbdb66__\"","import { computed } from \"vue\";\n\nimport { useDevice } from \"@/composables/device\";\n\nconst useIconSize = (scale = 1) => {\n  const { isSmallScreen, isApp } = useDevice();\n  const defaultIconSize = computed(() => {\n    if (isApp) {\n      return 40;\n    }\n    if (isSmallScreen.value) {\n      return 40;\n    }\n    return 48;\n  });\n  const defaultIconStrokeWidth = computed(() => {\n    if (isApp) {\n      return 2.5;\n    }\n    if (isSmallScreen.value) {\n      return 2.5;\n    }\n    return 3;\n  });\n  const iconSize = computed(() => {\n    return defaultIconSize.value * scale;\n  });\n  const iconStrokeWidth = computed(() => {\n    return defaultIconStrokeWidth.value * scale;\n  });\n  return {\n    defaultIconSize,\n    defaultIconStrokeWidth,\n    iconSize,\n    iconStrokeWidth,\n  };\n};\n\nexport { useIconSize };\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"none\",\n        stroke: color.value,\n        strokeWidth: 3,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <line x1=\"15\" y1=\"14\" x2=\"15\" y2=\"34\" />\n    <line x1=\"21\" y1=\"14\" x2=\"21\" y2=\"34\" />\n    <line x1=\"27\" y1=\"14\" x2=\"27\" y2=\"34\" />\n    <line x1=\"33\" y1=\"14\" x2=\"33\" y2=\"34\" />\n  </svg>\n</template>\n\n<style lang=\"scss\" scoped>\n@keyframes buffering {\n  0% {\n    transform: scaleY(100%);\n  }\n\n  80% {\n    transform: scaleY(10%);\n  }\n\n  100% {\n    transform: scaleY(100%);\n  }\n}\n\nsvg {\n  line {\n    transform-origin: center;\n    animation: buffering 1200ms infinite;\n\n    &:nth-child(1) {\n      animation-delay: -600ms;\n    }\n\n    &:nth-child(2) {\n      animation-delay: -450ms;\n    }\n\n    &:nth-child(3) {\n      animation-delay: -300ms;\n    }\n\n    &:nth-child(4) {\n      animation-delay: -150ms;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref } from \"vue\";\nimport { refAutoReset } from \"@vueuse/core\";\n\nimport { disconnectSocialBackend, getSocialBackends } from \"@/api/account\";\nimport imgApple from \"@/assets/brand-icons/apple.svg\";\nimport imgDeezer from \"@/assets/brand-icons/deezer.svg\";\nimport imgGoogle from \"@/assets/brand-icons/google.svg\";\nimport imgSpotify from \"@/assets/brand-icons/spotify.svg\";\nimport IconLoading from \"@/components/ui/icon/IconBuffering.vue\";\nimport { useDevice } from \"@/composables/device\";\n\nconst ICONS = {\n  apple: imgApple,\n  google: imgGoogle,\n  spotify: imgSpotify,\n  deezer: imgDeezer,\n};\n\ninterface Backend {\n  provider: string;\n  uid: string;\n  connectUrl: string;\n  disconnectUrl: string;\n  canDisconnect: boolean;\n}\n\nexport default defineComponent({\n  components: {\n    IconLoading,\n  },\n  props: {\n    next: {\n      type: String,\n      default: null,\n    },\n  },\n  setup(props) {\n    const { isApp, appVersion } = useDevice();\n    const authBackends = ref<Array<Backend>>([]);\n    const iOSMaskVisible = refAutoReset(false, 5000);\n    const fetchBackends = async () => {\n      authBackends.value = [];\n      const backends = await getSocialBackends();\n      authBackends.value = backends.auth;\n    };\n    const availableBackends = computed(() => {\n      // NOTE: temporarily disable oauth2 for app versions prior to 1.0.1\n      if (isApp && appVersion?.major === 1 && appVersion?.minor === 0 && appVersion?.patch < 1) {\n        return authBackends.value.filter((b) => b.provider !== \"google-oauth2\");\n      }\n      // NOTE: temporarily disable apple-id for app versions prior to 1.0.3\n      if (isApp && appVersion?.major === 1 && appVersion?.minor === 0 && appVersion?.patch < 3) {\n        return authBackends.value.filter((b) => b.provider !== \"apple-id\");\n      }\n      return authBackends.value;\n    });\n    const getProviderLogo = (provider: string) => {\n      const key = provider.split(\"-\")[0];\n      return ICONS[key];\n    };\n    const getProviderText = (provider: string) => {\n      const key = provider.split(\"-\")[0];\n      return `${key.charAt(0).toUpperCase()}${key.slice(1)}`;\n    };\n    const beginLogin = async (backend: Backend) => {\n      if (isApp && backend.provider === \"google-oauth2\") {\n        console.debug(\"continue with app native google login\");\n        iOSMaskVisible.value = true;\n        window.appBridge?.send(\"googleSignin:start\");\n        return;\n      }\n\n      if (isApp && backend.provider === \"apple-id\") {\n        console.debug(\"continue with app native apple-id login\");\n        iOSMaskVisible.value = true;\n        window.appBridge?.send(\"appleSignin:start\");\n        return;\n      }\n\n      const connectUrl = backend.connectUrl;\n      const params: { [x: string]: string } = {};\n      if (props.next) {\n        params.next = props.next;\n      }\n      if (isApp) {\n        params.source = \"app\";\n      }\n      const q = new URLSearchParams(params).toString();\n      const location = q ? `${connectUrl}?${q}` : connectUrl;\n\n      if (isApp) {\n        window.appBridge.pauseHeartbeat();\n        iOSMaskVisible.value = true;\n        setTimeout(() => {\n          window.location.href = location;\n        }, 200);\n        return;\n      }\n\n      window.location.href = location;\n    };\n    const disconnect = async (backend: Backend) => {\n      await disconnectSocialBackend(backend.provider, backend.uid);\n      await fetchBackends();\n    };\n    onMounted(fetchBackends);\n\n    return {\n      availableBackends,\n      beginLogin,\n      disconnect,\n      getProviderLogo,\n      getProviderText,\n      iOSMaskVisible,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"social-login\">\n    <section\n      v-if=\"availableBackends.length\"\n      class=\"backends backends--disconnected\"\n      :style=\"{\n        '--num-backends': availableBackends.length,\n      }\"\n    >\n      <div\n        v-for=\"backend in availableBackends\"\n        :key=\"`disconnected-backend-${backend.provider}`\"\n        @click=\"beginLogin(backend)\"\n        class=\"backend\"\n        :class=\"`backend--${backend.provider}`\"\n      >\n        <img class=\"logo\" :src=\"getProviderLogo(backend.provider)\" />\n        <i18n-t keypath=\"account.auth.social.continueWith\" tag=\"div\" class=\"title\">\n          {{ getProviderText(backend.provider) }}\n        </i18n-t>\n      </div>\n    </section>\n    <section v-else class=\"backends backends--loading\">\n      <IconLoading />\n    </section>\n    <transition name=\"fade\">\n      <!-- NOTE: mask is displayed to give visual feedback on iOS with apple login.\n                 after initiating apple login there is a delay of 1-5s so without feedback\n                 it feels like \"hanging\". -->\n      <div v-if=\"iOSMaskVisible\" class=\"ios-mask\" />\n    </transition>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n\n.social-login {\n  .backends {\n    min-height: 48px;\n    display: grid;\n    grid-gap: 1rem;\n    grid-template-columns: repeat(2, 1fr);\n    margin-bottom: 2rem;\n\n    @include responsive.bp-medium {\n      grid-template-columns: repeat(1, 1fr);\n\n      // min-height: 108px;\n\n      min-height: calc(var(--num-backends) * 54px);\n    }\n\n    &--loading {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n  }\n\n  .backend {\n    display: inline-flex;\n    align-items: center;\n    padding: 0.5rem 1rem;\n    color: rgb(var(--c-black));\n    background: rgb(var(--c-white));\n    border: 3px solid rgb(var(--c-black));\n    border-radius: 2rem;\n    cursor: pointer;\n    transition: border-radius 100ms;\n\n    .logo {\n      height: 1.5rem;\n      margin-right: 1rem;\n    }\n\n    .name {\n      flex-grow: 1;\n\n      .uid {\n        color: rgb(var(--c-dark) / 50%);\n        text-transform: lowercase;\n      }\n    }\n\n    &--facebook {\n      color: rgb(var(--c-light));\n      background: #1877f2;\n      border-color: #1877f2;\n    }\n\n    @include responsive.on-hover {\n      border-radius: 4px;\n    }\n  }\n\n  .ios-mask {\n    top: 0;\n    left: 0;\n    position: fixed;\n    background: rgba(var(--c-light) / 70%);\n    height: 100%;\n    width: 100%;\n    z-index: 99;\n  }\n}\n\n// mask transitions\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 500ms;\n}\n\n.fade-enter-from {\n  opacity: 0;\n}\n\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\n\nimport EmailLoginForm from \"@/components/account/auth/EmailLoginForm.vue\";\nimport EmailLoginVerify from \"@/components/account/auth/EmailLoginVerify.vue\";\nimport SocialLogin from \"@/components/account/auth/SocialLogin.vue\";\n\nexport default defineComponent({\n  components: {\n    SocialLogin,\n    EmailLoginForm,\n    EmailLoginVerify,\n  },\n  props: {\n    next: {\n      type: String,\n      default: \"\",\n    },\n  },\n  setup() {\n    const socialLoginVisible = ref(true);\n    const emailLoginVisible = ref(true);\n    const emailLoginVerifyVisible = ref(false);\n    const emailSentTo = ref(\"\");\n    const handleEmailSent = (email: string) => {\n      emailSentTo.value = email;\n      socialLoginVisible.value = false;\n      emailLoginVisible.value = false;\n      emailLoginVerifyVisible.value = true;\n    };\n    const reset = () => {\n      emailSentTo.value = \"\";\n      socialLoginVisible.value = true;\n      emailLoginVisible.value = true;\n      emailLoginVerifyVisible.value = false;\n    };\n    return {\n      socialLoginVisible,\n      emailLoginVisible,\n      emailLoginVerifyVisible,\n      handleEmailSent,\n      emailSentTo,\n      reset,\n    };\n  },\n});\n</script>\n<template>\n  <div class=\"auth-panel\">\n    <section v-if=\"socialLoginVisible\" class=\"section social\">\n      <i18n-t keypath=\"account.auth.socialAccount\" tag=\"p\" />\n      <SocialLogin :next=\"next\" />\n    </section>\n    <div>\n      <section v-if=\"emailLoginVisible\" class=\"section email\">\n        <EmailLoginForm :next=\"next\" @email-sent=\"handleEmailSent\" />\n      </section>\n      <section v-if=\"emailLoginVerifyVisible\" class=\"section email\">\n        <EmailLoginVerify :next=\"next\" :email=\"emailSentTo\" @reset=\"reset\" />\n      </section>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n\n.auth-panel {\n  display: flex;\n  flex-direction: column;\n\n  .subtitle {\n    @include typo.large;\n\n    display: flex;\n    justify-content: flex-start;\n  }\n\n  .social {\n    margin-top: 2rem;\n\n    > p {\n      margin-bottom: 1rem;\n\n      @include responsive.bp-medium {\n        @include typo.small;\n      }\n    }\n  }\n\n  .email {\n    > p {\n      margin-bottom: 0.5rem;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    hoverBackgroundOpacity: {\n      type: String,\n      default: \"10%\",\n    },\n    outlined: {\n      type: Boolean,\n      default: false,\n    },\n    outlineOpacity: {\n      type: String,\n      default: \"10%\",\n    },\n    outlineWidth: {\n      type: Number,\n      default: 1,\n    },\n    outlineOnHover: {\n      type: Boolean,\n      default: false,\n    },\n    filled: {\n      type: Boolean,\n      default: false,\n    },\n    fillColorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props) {\n    const { iconSize } = useIconSize(props.scale);\n    return {\n      iconSize,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"circle-button\"\n    :style=\"{\n      '--icon-size': iconSize,\n      '--size': `${iconSize}px`,\n      '--c-main': `var(${colorVar})`,\n      '--c-fill': `var(${fillColorVar})`,\n      '--outline-opacity': outlineOpacity,\n      '--outline-width': `${outlineWidth}px`,\n      '--hover-background-opacity': hoverBackgroundOpacity,\n      '--outline-hover-color': outlineOnHover ? 'rgb(var(--c-main) / 100%)' : 'transparent',\n    }\"\n    :class=\"{\n      'is-outlined': outlined,\n      'is-filled': filled,\n      'is-disabled': disabled,\n    }\"\n  >\n    <slot name=\"default\" />\n    <div v-if=\"outlined\" class=\"outline\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n\n.circle-button {\n  position: relative;\n  height: var(--size);\n  width: var(--size);\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size);\n  min-height: var(--size);\n  border-radius: calc(var(--size) / 2);\n  cursor: pointer;\n\n  .outline {\n    top: 0;\n    position: absolute;\n    height: 100%;\n    width: 100%;\n    left: 0;\n    border: var(--outline-width) solid rgb(var(--c-main) / var(--outline-opacity));\n    border-radius: calc(var(--size) / 2);\n  }\n\n  &.is-filled {\n    background: rgb(var(--c-fill) / 100%);\n  }\n\n  &.is-disabled {\n    opacity: 0.2;\n    pointer-events: none;\n  }\n\n  @include responsive.hover-supported {\n    transition: background 1000ms, color 200ms, border 200ms;\n\n    .outline {\n      transition: inherit;\n    }\n  }\n\n  @include responsive.on-hover {\n    background: rgb(var(--c-main) / var(--hover-background-opacity));\n\n    &.is-filled {\n      background: rgb(var(--c-fill) / var(--hover-background-opacity));\n    }\n\n    .outline {\n      border-color: var(--outline-hover-color);\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        stroke: color.value,\n        strokeWidth: (2.5 * size.value) / 48,\n        strokeMiterlimit: 10,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <line x1=\"15\" y1=\"15\" x2=\"33\" y2=\"33\" />\n    <line x1=\"15\" y1=\"33\" x2=\"33\" y2=\"15\" />\n  </svg>\n</template>\n","<script type=\"ts\">\nimport { defineComponent } from 'vue';\n\nimport CircleButton from '@/components/ui/button/CircleButton.vue';\nimport IconClose from '@/components/ui/icon/IconClose.vue';\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconClose,\n  },\n});\n</script>\n\n<template>\n  <CircleButton :outlined=\"true\">\n    <IconClose color-var=\"--c-dark\" />\n  </CircleButton>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent, watch } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { useEventListener } from \"@vueuse/core\";\n\nimport CloseButton from \"./CloseButton.vue\";\n\nexport default defineComponent({\n  components: {\n    CloseButton,\n  },\n  props: {\n    isVisible: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: [\"close\"],\n  setup(props, { emit, slots }) {\n    const hasAside = computed(() => !!slots.aside);\n    const close = () => {\n      emit(\"close\");\n    };\n    useEventListener(document, \"keydown\", (e) => {\n      if (e.code === \"Escape\") {\n        close();\n      }\n    });\n    const route = useRoute();\n    watch(() => route.path, close);\n    return {\n      hasAside,\n      close,\n    };\n  },\n});\n</script>\n<template>\n  <transition name=\"fade\">\n    <div v-if=\"isVisible\" @click.prevent=\"close\" class=\"mask\" />\n  </transition>\n  <transition name=\"fade\">\n    <div v-if=\"isVisible && hasAside\" class=\"aside\">\n      <slot name=\"aside\" />\n    </div>\n  </transition>\n  <transition name=\"slide\">\n    <div v-if=\"isVisible\" class=\"side-panel\">\n      <div class=\"side-panel__header\">\n        <div class=\"slot\">\n          <slot name=\"header\" />\n        </div>\n        <div class=\"close\">\n          <CloseButton @click.prevent=\"close\" />\n        </div>\n      </div>\n      <div class=\"side-panel__body\">\n        <slot name=\"default\" />\n      </div>\n      <div class=\"side-panel__footer\">\n        <slot name=\"footer\" />\n      </div>\n    </div>\n  </transition>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n\n.mask {\n  inset: 0;\n  position: fixed;\n  z-index: 111;\n  background: rgb(0 0 0 / 90%);\n  backdrop-filter: grayscale(70%) brightness(80%);\n\n  @include responsive.bp-medium {\n    background: unset;\n    backdrop-filter: unset;\n  }\n}\n\n.side-panel {\n  top: var(--sa-t);\n\n  // padding-top: var(--sa-t);\n  padding-bottom: calc(var(--sa-b) + var(--sa-t));\n  position: fixed;\n  height: 100%;\n  width: 100%;\n  right: 0;\n  z-index: 112;\n  display: flex;\n  flex-direction: column;\n  max-width: 50vw;\n  min-width: 50vw;\n  color: rgb(var(--c-dark) / 100%);\n  font-weight: 500;\n  background: rgb(var(--c-light) / 100%);\n  transition: background 400ms;\n\n  @include responsive.bp-medium {\n    max-width: unset;\n    box-shadow: 0 -4px 8px 4px rgb(0 0 0 / 10%);\n    border-top-left-radius: 28px;\n    border-top-right-radius: 28px;\n  }\n\n  &__header {\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    height: 75px;\n    margin: 0 1.5rem 0.5rem;\n    border-bottom: 1px solid rgb(var(--c-dark) / 20%);\n\n    .slot {\n      flex-grow: 1;\n    }\n\n    @include responsive.bp-medium {\n      height: 60px;\n      margin: 0 0.5rem;\n\n      .close {\n        display: flex;\n      }\n    }\n  }\n\n  &__body {\n    flex-grow: 1;\n    padding: 0 1.5rem 1rem;\n    overflow-y: auto;\n\n    @include responsive.bp-medium {\n      padding: 0 0.625rem 0.5rem;\n    }\n  }\n\n  &__footer {\n    margin: 0 1.5rem;\n    padding: 1rem 0;\n    border-top: 1px solid rgb(var(--c-dark) / 20%);\n\n    @include responsive.bp-medium {\n      margin: 0 0.625rem;\n      padding: 0.5rem 0;\n    }\n  }\n}\n\n.aside {\n  top: 0;\n  position: fixed;\n  height: 100%;\n  width: 50vw;\n  left: 0;\n  z-index: 111;\n  display: flex;\n  flex-direction: column;\n  padding-top: calc(75px + 0.5rem);\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n  color: rgb(var(--c-light) / 100%);\n\n  @include responsive.bp-medium {\n    display: none;\n  }\n}\n\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 200ms;\n}\n\n.fade-enter-from {\n  opacity: 0;\n}\n\n.fade-leave-to {\n  opacity: 0;\n}\n\n.slide-enter-active,\n.slide-leave-active {\n  transition: transform 200ms ease-out;\n}\n\n.slide-enter-from {\n  transform: translate(100%, 0);\n\n  @include responsive.bp-medium {\n    transform: translate(0, 100%);\n  }\n}\n\n.slide-leave-to {\n  transform: translate(100%, 0);\n\n  @include responsive.bp-medium {\n    transform: translate(0, 100%);\n  }\n}\n</style>\n","<template>\n  <div class=\"service\">\n    <i18n-t class=\"title\" keypath=\"account.serviceInfoAside.title\" tag=\"p\" />\n    <ul>\n      <i18n-t keypath=\"account.serviceInfoAside.bullet1\" tag=\"li\" />\n      <i18n-t keypath=\"account.serviceInfoAside.bullet2\" tag=\"li\" />\n      <i18n-t keypath=\"account.serviceInfoAside.bullet3\" tag=\"li\"><sup>*</sup></i18n-t>\n    </ul>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.service {\n  color: rgb(var(--c-white));\n\n  .title {\n    @include typo.x-large;\n    @include typo.bold;\n  }\n\n  > ul {\n    margin-top: 1rem;\n    line-height: 2;\n    list-style-position: inside;\n  }\n}\n</style>\n<script setup lang=\"ts\"></script>\n","<script lang=\"ts\" setup>\nimport { useI18n } from \"vue-i18n\";\n\nimport { useDevice } from \"@/composables/device\";\nconst { t } = useI18n();\nconst { isDesktop } = useDevice();\nconst faqUrl = \"/faq/#42C745E4\";\n</script>\n\n<template>\n  <div class=\"availability\">\n    <i18n-t keypath=\"account.legal.availability.note\" tag=\"p\">\n      <sup v-show=\"isDesktop\">*</sup>\n      <router-link :to=\"faqUrl\" v-text=\"t('account.legal.availability.faq')\" />\n    </i18n-t>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.availability {\n  white-space: pre-line;\n\n  a {\n    text-decoration: underline;\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from \"vue-i18n\";\nconst { t } = useI18n();\nconst tosUrl = \"/legal/terms/\";\nconst ppUrl = \"/legal/terms/\";\n</script>\n\n<template>\n  <div class=\"terms\">\n    <i18n-t keypath=\"account.legal.terms.term\" tag=\"p\">\n      <a :href=\"tosUrl\" target=\"_blank\" v-text=\"t('account.legal.terms.tos')\" />\n      <a :href=\"ppUrl\" target=\"_blank\" v-text=\"t('account.legal.terms.pp')\" />\n    </i18n-t>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.terms {\n  a {\n    text-decoration: underline;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref, watch } from \"vue\";\n\nimport AuthPanel from \"@/components/account/auth/AuthPanel.vue\";\nimport SidePanel from \"@/components/ui/panel/SidePanel.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport eventBus from \"@/eventBus\";\n\nimport ServiceInfoAside from \"../context/ServiceInfoAside.vue\";\nimport Availability from \"../legal/Availability.vue\";\nimport Terms from \"../legal/Terms.vue\";\n\nexport default defineComponent({\n  components: {\n    SidePanel,\n    AuthPanel,\n    ServiceInfoAside,\n    Availability,\n    Terms,\n  },\n  setup() {\n    const { user } = useAccount();\n    const isVisible = ref(false);\n    const next = ref(\"\");\n    const close = () => (isVisible.value = false);\n    eventBus.on(\"account:authenticate\", (event) => {\n      isVisible.value = true;\n      next.value = event.next;\n    });\n    watch(\n      () => user.value,\n      (newUser) => {\n        if (newUser) {\n          isVisible.value = false;\n        }\n      }\n    );\n    return {\n      close,\n      isVisible,\n      next,\n    };\n  },\n});\n</script>\n<template>\n  <SidePanel :is-visible=\"isVisible\" @close=\"close\">\n    <i18n-t keypath=\"account.auth.login\" tag=\"div\" class=\"title\" />\n    <AuthPanel :next=\"next\" />\n    <template #footer>\n      <section class=\"section availability\">\n        <Availability />\n      </section>\n      <Terms class=\"terms\" />\n    </template>\n    <template #aside>\n      <ServiceInfoAside />\n    </template>\n  </SidePanel>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n\n.title {\n  @include typo.x-large;\n  @include typo.bold;\n\n  display: flex;\n  justify-content: flex-start;\n}\n\n.auth-panel {\n  overflow-y: auto;\n\n  @include responsive.bp-medium {\n    min-height: 100%;\n    margin-bottom: 4rem;\n  }\n}\n\n.section.availability {\n  flex-grow: 1;\n  padding-bottom: 1rem;\n  align-items: center;\n  display: flex;\n\n  @include responsive.bp-medium {\n    @include typo.small;\n  }\n}\n\n.terms {\n  @include responsive.bp-medium {\n    @include typo.small;\n  }\n}\n\n.lead {\n  @include typo.large;\n\n  a {\n    text-decoration: underline;\n    cursor: pointer;\n  }\n}\n\n.message {\n  margin: 1rem 0;\n  padding: 1rem;\n  background: rgb(var(--c-cta) / 10%);\n  border-left: 4px solid rgb(var(--c-cta));\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onMounted } from \"vue\";\n\nimport CloseButton from \"./CloseButton.vue\";\n\nexport default defineComponent({\n  components: {\n    CloseButton,\n  },\n  props: {\n    isVisible: {\n      type: Boolean,\n      default: false,\n    },\n    title: {\n      type: String,\n      default: \"\",\n    },\n  },\n  emits: [\"close\"],\n  setup(props, { slots, emit }) {\n    const hasFooter = computed(() => !!slots.footer);\n    const hasSuccess = computed(() => !!slots.success);\n    const close = () => {\n      emit(\"close\");\n    };\n    onMounted(() => {\n      document.addEventListener(\"keydown\", (e) => {\n        if (props.isVisible && e.code === \"Escape\") {\n          close();\n        }\n      });\n    });\n    return {\n      hasFooter,\n      hasSuccess,\n      close,\n    };\n  },\n});\n</script>\n<template>\n  <transition name=\"fade\">\n    <div v-if=\"isVisible\" class=\"modal-panel\">\n      <div class=\"container\">\n        <div class=\"modal-panel__header\">\n          <CloseButton @click.prevent=\"close\" />\n        </div>\n        <div class=\"modal-panel__content\">\n          <div v-if=\"title\" class=\"modal-panel__content__title\">\n            <div v-text=\"title\" />\n          </div>\n          <div class=\"modal-panel__content__body\">\n            <slot name=\"default\" />\n          </div>\n        </div>\n        <div v-if=\"hasFooter\" class=\"modal-panel__footer\">\n          <slot name=\"footer\" />\n        </div>\n        <div v-if=\"hasSuccess\" class=\"modal-panel__success\">\n          <slot name=\"success\" />\n        </div>\n      </div>\n    </div>\n  </transition>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n\n.modal-panel {\n  top: var(--sa-t);\n  position: fixed;\n  height: 100%;\n  width: 100%;\n  left: 0;\n  z-index: 29;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  color: rgb(var(--c-dark) / 100%);\n  font-weight: 500;\n  background: rgb(0 0 0 / 80%);\n\n  .container {\n    @include container.small;\n\n    display: flex;\n    flex-direction: column;\n    padding-bottom: 1rem;\n    background: rgb(var(--c-light) / 100%);\n\n    @include responsive.bp-medium {\n      height: 100vh;\n      width: 100vw;\n      overflow-y: scroll;\n    }\n  }\n\n  @include responsive.bp-medium {\n    max-width: unset;\n  }\n\n  &__header {\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    height: 78px;\n    margin-top: 0;\n  }\n\n  &__content {\n    flex-grow: 1;\n    max-height: calc(100% - 72px);\n\n    /* right padding for scrollbar */\n    padding-right: 0.75rem;\n    overflow-y: auto;\n    overscroll-behavior: contain;\n\n    &::-webkit-scrollbar {\n      display: none;\n    }\n\n    &__title {\n      @include typo.x-large;\n      @include typo.bold;\n\n      padding: 0.5rem 0 1.5rem;\n    }\n  }\n}\n\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 100ms;\n}\n\n.fade-enter-from {\n  opacity: 0;\n}\n\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { onMounted, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRouter } from \"vue-router\";\nimport { useStorage } from \"@vueuse/core\";\n\nimport ModalPanel from \"@/components/ui/panel/ModalPanel.vue\";\nimport { useDevice } from \"@/composables/device\";\n\nconst FAQ_LINK = \"/faq/#007FC4FA\";\n\nconst BROWSER_REQUIREMENTS = {\n  macos: {\n    safari: \">=15\",\n  },\n\n  ios: {\n    safari: \">=15\",\n  },\n\n  android: {\n    chrome: \">=100\",\n    \"android browser\": \">=10\",\n  },\n\n  desktop: {\n    chrome: \">=100\",\n    firefox: \">=100\",\n    opera: \">=80\",\n  },\n\n  mobile: {\n    safari: \">=15\",\n  },\n\n  bot: {\n    googlebot: \">=2\",\n  },\n};\n\nconst { t } = useI18n();\nconst router = useRouter();\nconst { uaParser, isApp } = useDevice();\n\n// const os = uaParser.getOS();\nconst browser = uaParser.getBrowser();\nconst platform = uaParser.getPlatform();\nconst engine = uaParser.getEngine();\n\nconst isVisible = ref(false);\nconst isDismissed = useStorage(\"browser-compatibility/notice/dismissed\", false);\nconst browserDisplay = ref(\"\");\n\nconst close = () => {\n  isDismissed.value = true;\n  isVisible.value = false;\n};\n\nconst navigateToFaq = () => {\n  close();\n  router.push(FAQ_LINK);\n};\n\nonMounted(() => {\n  if (isApp || isDismissed.value) {\n    return;\n  }\n  const isSupportedBrowser = uaParser.satisfies(BROWSER_REQUIREMENTS);\n  if (!isSupportedBrowser) {\n    browserDisplay.value = `${browser.name} ${browser.version}`;\n    // isVisible.value = true; // NOTE: for the moment we don't show the compatibility notice\n  }\n});\n</script>\n\n<template>\n  <ModalPanel :is-visible=\"isVisible\" title=\"Browser Support\" @close=\"close\">\n    <div class=\"not-supported\">\n      <i18n-t keypath=\"browserCompatibility.notSupported.note\" tag=\"p\" class=\"note\">\n        {{ browserDisplay }}\n      </i18n-t>\n      <i18n-t keypath=\"browserCompatibility.notSupported.faqNote\" tag=\"p\" class=\"faq-note\">\n        <a\n          href=\"#\"\n          @click.prevent=\"navigateToFaq\"\n          v-text=\"t('browserCompatibility.notSupported.faqLabel')\"\n        />\n      </i18n-t>\n    </div>\n    <pre\n      v-if=\"false\"\n      v-text=\"{\n        browser,\n        engine,\n        platform,\n      }\"\n    />\n    <!--\n    <template #footer>\n      <p>Detected browser: <span v-text=\"browserDisplay\" /></p>\n    </template>\n    -->\n  </ModalPanel>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/section\";\n\n.not-supported {\n  margin-bottom: 2rem;\n}\n\n.faq-note {\n  margin-top: 1rem;\n\n  a {\n    text-decoration: underline;\n    cursor: pointer;\n  }\n}\n\n.legal {\n  font-size: 90%;\n  opacity: 0.5;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref } from \"vue\";\nimport { onClickOutside, useElementBounding, useElementSize, useWindowSize } from \"@vueuse/core\";\n\nconst isVisible = ref(false);\n\nconst el = ref<HTMLElement | null>(null);\nconst targetEl = ref<HTMLElement | null>(null);\n\nonClickOutside(el, () => {\n  console.debug(\"clicked outside\");\n  isVisible.value = false;\n});\n\nconst {\n  // width: vpWidth,\n  height: vpHeight,\n} = useWindowSize();\n\nconst { width, height } = useElementSize(el);\n\nconst pos = computed(() => {\n  return {\n    // x: Math.round((vpWidth.value - width.value) / 2),\n    x: targetPos.value?.x - width.value + 2 ?? 0,\n    y: Math.round((vpHeight.value - height.value) / 2),\n  };\n});\n\nconst {\n  x: targetX,\n  y: targetY,\n  width: targetWidth,\n  // height: targetHeight,\n} = useElementBounding(targetEl);\n\nconst targetPos = computed(() => {\n  return {\n    x: Math.round(targetX.value + targetWidth.value / 2),\n    y: Math.round(targetY.value - 4),\n  };\n});\n\nconst linePos = computed(() => {\n  return {\n    x1: pos.value.x + width.value ?? 0,\n    y1: pos.value.y + height.value ?? 0,\n    x2: pos.value.x + width.value ?? 0,\n    y2: targetPos.value?.y ?? 0,\n  };\n});\n\nonMounted(() => {\n  setTimeout(() => {\n    const target = document.querySelector(\"[data-cta-target]\");\n    if (target) {\n      targetEl.value = target as HTMLElement;\n    } else {\n      targetEl.value = null;\n    }\n  }, 1000);\n});\n</script>\n\n<template>\n  <div\n    v-if=\"isVisible\"\n    ref=\"el\"\n    class=\"cta-presenter\"\n    :style=\"{ top: pos.y + 'px', left: pos.x + 1 + 'px' }\"\n  >\n    (( CTA Presenter ))\n    <!--\n    <pre v-text=\"{ pos, targetPos, linePos }\" />\n    -->\n  </div>\n  <div\n    v-if=\"isVisible\"\n    class=\"cta-marker\"\n    :style=\"{ top: targetPos.y + 'px', left: targetPos.x + 'px' }\"\n  />\n  <div\n    v-if=\"isVisible\"\n    class=\"cta-line\"\n    :style=\"{\n      top: linePos.y1 + 'px',\n      left: linePos.x1 + 'px',\n      height: linePos.y2 - linePos.y1 + 'px',\n    }\"\n  />\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n\n.cta-presenter {\n  position: fixed;\n  min-width: 300px;\n  min-height: 200px;\n  z-index: 200;\n  background: rgb(var(--c-green) / 100%);\n  border-radius: 0.5rem 0.5rem 0;\n  box-shadow: 2px 2px 10px rgb(0 0 0 / 10%);\n}\n\n.cta-marker {\n  position: fixed;\n  height: 5px;\n  width: 5px;\n  background: rgb(var(--c-green) / 100%);\n  z-index: 200;\n  border-radius: 50%;\n}\n\n.cta-line {\n  position: fixed;\n  height: 0;\n  width: 0;\n  z-index: 200;\n  border-left: 1px solid rgb(var(--c-green) / 100%);\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    outlined: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: color.value,\n        stroke: \"none\",\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <!-- eslint-disable max-len -->\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <transition name=\"fade\">\n      <path\n        v-if=\"outlined\"\n        d=\"M35.3,15.2c-3-3.1-7.8-3.2-10.9-0.1l-0.1,0.1c-0.1,0.1-0.2,0.2-0.2,0.2c-0.1-0.1-0.1-0.2-0.2-0.2c-3-3.1-7.8-3.2-10.9-0.1\n        l-0.1,0.1c-1.5,1.5-2.3,3.5-2.3,5.6s0.8,4.1,2.3,5.6L24,37.8l11.3-11.5c1.5-1.5,2.3-3.5,2.3-5.6S36.8,16.6,35.3,15.2z M33.1,24.2\n        L24,33.6l-9.1-9.3c-1.9-1.9-1.9-5.1,0-7l0.1-0.1c1-0.9,2.1-1.4,3.3-1.4c1.2,0,2.4,0.5,3.4,1.5c0.4,0.4,0.7,0.9,1,1.4l0.3,0.8h2\n        l0.3-0.8c0.2-0.5,0.5-1,1-1.4l0.1-0.1c1.9-1.9,4.9-1.8,6.7,0.1C35.1,19.2,35.1,22.3,33.1,24.2z\"\n      />\n      <path\n        v-else\n        d=\"M35.3,15.2c-3-3.1-7.8-3.2-10.9-0.1l-0.1,0.1c-0.1,0.1-0.2,0.2-0.2,0.2c-0.1-0.1-0.1-0.2-0.2-0.2\n        c-3-3.1-7.8-3.2-10.9-0.1l-0.1,0.1c-1.5,1.5-2.3,3.5-2.3,5.6s0.8,4.1,2.3,5.6L24,37.8l11.3-11.5c1.5-1.5,2.3-3.5,2.3-5.6\n        S36.8,16.6,35.3,15.2z\"\n      />\n    </transition>\n  </svg>\n  <!-- eslint-enable max-len -->\n</template>\n\n<style lang=\"scss\" scoped>\nsvg {\n  path {\n    shape-rendering: geometricprecision;\n  }\n}\n\n.fade-enter-active {\n  transition: opacity 200ms;\n}\n\n.fade-leave-active {\n  transition: opacity 200ms;\n}\n\n.fade-enter-from {\n  opacity: 0;\n}\n\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { useDocumentVisibility, useIntervalFn, useStorage } from \"@vueuse/core\";\n\nimport IconHeart from \"@/components/ui/icon/IconHeart.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport eventBus from \"@/eventBus\";\n\nconst CTA_SHOW_AGAIN_AFTER = 28 * 24 * 60 * 60 * 1000; // 28 days\nconst CTA_SHOW_AFTER_SECONDS = 30;\n\nconst isVisible = ref(false);\n\nconst documentVisible = useDocumentVisibility();\nconst documentVisibleSeconds = ref(0);\nconst ctaDismissed = useStorage(\"donate/ctaDismissed\", -1);\n\nconst { user } = useAccount();\n\nconst hasActiveDonation = computed(() => {\n  return !!(user.value?.donations ?? []).find((d: object) => d?.state === \"active\");\n});\n\nconst dismiss = () => {\n  ctaDismissed.value = Date.now();\n  isVisible.value = false;\n};\n\nconst confirm = () => {\n  isVisible.value = false;\n  eventBus.emit(\"donation:showPanel\");\n};\n\nconst { pause, resume } = useIntervalFn(\n  () => {\n    documentVisibleSeconds.value += 1;\n    if (documentVisibleSeconds.value >= CTA_SHOW_AFTER_SECONDS) {\n      pause();\n      isVisible.value = true;\n    }\n  },\n  1000,\n  {\n    immediate: false,\n  }\n);\n\nonMounted(async () => {\n  // check if cta was dismissed more than CTA_SHOW_AGAIN_AFTER ago.\n  // if so, reset it to -1 to show the cta again.\n  if (ctaDismissed.value > 0 && Date.now() - ctaDismissed.value > CTA_SHOW_AGAIN_AFTER) {\n    ctaDismissed.value = -1;\n  }\n\n  if (ctaDismissed.value > 0) {\n    console.debug(\"CTA was dismissed, not showing it again\");\n    return;\n  }\n\n  // check if user has an active donation\n  if (hasActiveDonation.value) {\n    console.debug(\"User has an active donation, not showing CTA\");\n    return;\n  }\n\n  // start timer\n  resume();\n});\n\nwatch(\n  () => documentVisible.value,\n  (value) => {\n    if (value === \"hidden\") {\n      pause();\n    } else {\n      if (ctaDismissed.value <= 0) {\n        resume();\n      }\n    }\n  }\n);\n\neventBus.on(\"donation:showCta\", () => {\n  isVisible.value = !isVisible.value;\n});\n\neventBus.on(\"donation:togglePanel\", () => {\n  // stop the timer if user manually opens the donation panel\n  pause();\n});\n</script>\n\n<template>\n  <div v-if=\"isVisible\" class=\"cta-container\">\n    <div class=\"header\">\n      <div\n        class=\"icon\"\n        :style=\"{\n          '--c-fg': 'var(--c-red)',\n        }\"\n      >\n        <IconHeart :scale=\"1.25\" />\n      </div>\n      <div class=\"text\">\n        <i18n-t keypath=\"donate.cta.title\" tag=\"h2\" />\n        <i18n-t keypath=\"donate.cta.lead\" tag=\"p\" />\n      </div>\n    </div>\n    <div class=\"actions\">\n      <i18n-t\n        keypath=\"donate.cta.dismiss\"\n        tag=\"button\"\n        @click.prevent=\"dismiss()\"\n        class=\"action action--cancel\"\n      />\n      <div class=\"separator\" />\n      <i18n-t\n        keypath=\"donate.cta.confirm\"\n        tag=\"button\"\n        @click.prevent=\"confirm()\"\n        class=\"action action--confirm\"\n      />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n@keyframes steam {\n  0% {\n    background-position: 0 0;\n  }\n\n  50% {\n    background-position: 400% 0;\n  }\n\n  100% {\n    background-position: 0 0;\n  }\n}\n\n.cta-container {\n  position: fixed;\n  width: 100%;\n  color: rgba(var(--c-white) / 100%);\n  padding: 0;\n  max-width: min(460px, calc(100vw - 2rem));\n  bottom: 5.5rem;\n  right: 1rem;\n  border-radius: 1rem;\n  z-index: 15;\n\n  &::before,\n  &::after {\n    opacity: 0.5;\n    top: -2px;\n    position: absolute;\n    height: calc(100% + 4px);\n    width: calc(100% + 4px);\n    content: \"\";\n    left: -2px;\n    background: linear-gradient(45deg, #f0f, #0ff, #f0f);\n    background-size: 400%;\n    z-index: -1;\n    animation: steam 20s linear infinite;\n    border-radius: 1rem;\n  }\n\n  &::after {\n    filter: blur(10px);\n  }\n\n  > .header {\n    display: flex;\n    align-items: center;\n    padding: 0.75rem 0.5rem;\n    background: rgba(var(--c-black) / 90%);\n    border-radius: 1rem 1rem 0 0;\n\n    > .icon {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n\n    > .text {\n      > h2 {\n        @include typo.default;\n      }\n\n      > p {\n        @include typo.default;\n        @include typo.light;\n      }\n    }\n  }\n\n  > .actions {\n    background: rgba(var(--c-black) / 100%);\n    border-radius: 0 0 1rem 1rem;\n    padding: 0.75rem 0.5rem;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    gap: 0.5rem;\n\n    > .action {\n      @include typo.default;\n\n      flex: 1;\n      background: transparent;\n      border: none;\n      color: inherit;\n      cursor: pointer;\n\n      &--cancel {\n        @include typo.light;\n        @include typo.dim(0.75);\n      }\n\n      &--confirm {\n        color: currentcolor;\n      }\n    }\n\n    > .separator {\n      height: 1.5rem;\n      width: 1px;\n      background: rgba(var(--c-white) / 25%);\n    }\n  }\n}\n</style>\n","'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 V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\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';\nvar findScript = function findScript() {\n  var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n  for (var i = 0; i < scripts.length; i++) {\n    var script = scripts[i];\n\n    if (!V3_URL_REGEX.test(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(V3_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 <body> 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: \"1.52.0\",\n    startTime: startTime\n  });\n};\n\nvar stripePromise = null;\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      }\n\n      script.addEventListener('load', function () {\n        if (window.Stripe) {\n          resolve(window.Stripe);\n        } else {\n          reject(new Error('Stripe.js not available'));\n        }\n      });\n      script.addEventListener('error', function () {\n        reject(new Error('Failed to load Stripe.js'));\n      });\n    } catch (error) {\n      reject(error);\n      return;\n    }\n  });\n  return stripePromise;\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n  if (maybeStripe === null) {\n    return null;\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","module.exports = require('./dist/pure.js');\n","<script lang=\"ts\" setup>\nimport { type Ref, onMounted, ref } from \"vue\";\nimport { loadStripe } from \"@stripe/stripe-js/pure\";\n\nimport { APIClient } from \"@/api/client\";\nimport Spinner from \"@/components/ui/loading/Spinner.vue\";\nimport settings from \"@/settings\";\n\nconst { STRIPE_PUBLISHABLE_KEY } = settings;\n\nconst props = defineProps<{\n  priceId: string;\n  amount: number;\n  currency: string;\n}>();\n\nconst emit = defineEmits<{\n  (e: \"success\", response: object): void;\n}>();\n\nconst errors = ref<string[]>([]);\n\nclass PaymentFlow {\n  private baseUrl = \"/api/v1/donation/\";\n  private stripe: any = null;\n  private elements: any = null;\n  private donationUid: string | null = null;\n  private clientSecret: string | null = null;\n\n  constructor(\n    private emitFn: ReturnType<typeof defineEmits>,\n    private errorsRef: Ref<string[]>,\n    private formEl: HTMLFormElement,\n    private priceId: string,\n    private amount: number,\n    private currency: string\n  ) {}\n\n  public async init(): Promise<void> {\n    const url = `${this.baseUrl}create/`;\n\n    try {\n      const response = await APIClient.post(url, {\n        kind: \"recurring\",\n        priceId: this.priceId,\n        amount: this.amount,\n        currency: this.currency,\n      });\n      this.donationUid = response.data.uid;\n      this.clientSecret = response.data.clientSecret;\n    } catch (err) {\n      console.error(\"Error initializing payment flow:\", err);\n      this.errorsRef.value.push(err?.response?.data?.message || err?.message || \"Unknown error\");\n      return;\n    }\n\n    this.stripe = await loadStripe(STRIPE_PUBLISHABLE_KEY);\n\n    if (!this.stripe) throw new Error(\"Stripe failed to load\");\n\n    this.elements = this.stripe.elements({\n      clientSecret: this.clientSecret,\n      appearance: {\n        theme: \"night\",\n        variables: {\n          colorPrimary: \"#009050\",\n          colorBackground: \"#222222\",\n          colorText: \"#ffffff\",\n          colorDanger: \"#df1b41\",\n          tabLogoColor: \"dark\",\n          fontSizeBase: \"16px\",\n          fontFamily: \"IBM Plex Sans, Helvetica Neue, system-ui, sans-serif\",\n          spacingUnit: \"3px\",\n          borderRadius: \"4px\",\n          gridRowSpacing: \"16px\",\n        },\n      },\n    });\n\n    await this.mountExpressCheckout();\n    await this.mountCardPayment();\n  }\n\n  private async mountExpressCheckout(): Promise<void> {\n    const expressEl = this.elements.create(\"expressCheckout\", {\n      buttonHeight: 44,\n      buttonTheme: {\n        applePay: \"white\",\n        googlePay: \"black\",\n        paypal: \"black\",\n        klarna: \"dark\",\n      },\n      buttonType: {\n        applePay: \"donate\",\n        googlePay: \"donate\",\n        paypal: \"paypal\",\n        klarna: \"continue\",\n      },\n    });\n\n    expressEl.on(\"ready\", async (event) => {\n      console.debug(\"expressEl:ready\", event);\n      this.formEl.querySelector(\".express-checkout\")?.classList.remove(\"is-loading\");\n    });\n\n    expressEl.on(\"click\", async (event) => {\n      // NOTE: here we get the customer contact information\n      //       maybe use it in case of anonymous user...\n      console.debug(\"expressEl:click\", event);\n      event.resolve({\n        emailRequired: true,\n      });\n    });\n\n    expressEl.on(\"confirm\", async () => {\n      await this.confirmPayment();\n    });\n\n    expressEl.mount(\"#express-checkout\");\n  }\n\n  private async mountCardPayment(): Promise<void> {\n    const cardEl = this.elements.create(\"payment\", {\n      layout: \"tabs\",\n      wallets: {\n        applePay: \"auto\",\n        googlePay: \"auto\",\n        link: \"never\",\n      },\n    });\n\n    cardEl.mount(\"#payment\");\n\n    cardEl.on(\"ready\", async (event) => {\n      console.debug(\"cardEl:ready\", event);\n      this.formEl.querySelector(\".payment\")?.classList.remove(\"is-loading\");\n    });\n  }\n\n  public async confirmPayment(): Promise<void> {\n    if (!this.stripe || !this.elements || !this.clientSecret) return;\n\n    this.errorsRef.value = [];\n\n    await this.elements.submit();\n\n    const next = encodeURIComponent(document.location.pathname);\n\n    const result = await this.stripe.confirmPayment({\n      elements: this.elements,\n      clientSecret: this.clientSecret,\n      confirmParams: {\n        return_url: `${window.location.origin}${this.baseUrl}return/?next=${next}`,\n      },\n      redirect: \"if_required\",\n    });\n\n    if (result.error) {\n      console.error(\"payment:failed\", result.error);\n      this.errorsRef.value.push(result.error?.message || \"Unknown error\");\n    } else {\n      console.debug(\"payment:completed\", result);\n      const paymentIntentId = result.paymentIntent.id;\n      const url = `${this.baseUrl}${paymentIntentId}/finalize/`;\n      const response = await APIClient.post(url, {\n        uid: this.donationUid,\n      });\n      console.debug(\"payment:finalized\", response);\n      this.emitFn(\"success\", response.data);\n    }\n  }\n}\n\nconst formEl = ref<HTMLFormElement | null>(null);\nlet flow: PaymentFlow;\n\nonMounted(async () => {\n  flow = new PaymentFlow(emit, errors, formEl.value, props.priceId, props.amount, props.currency);\n  await flow.init();\n});\n\nconst submitPayment = async () => {\n  if (flow) await flow.confirmPayment();\n};\n</script>\n\n<template>\n  <form @submit.prevent=\"submitPayment\" class=\"payment-form\" ref=\"formEl\">\n    <div class=\"express-checkout is-loading\">\n      <div id=\"express-checkout\" />\n    </div>\n    <div class=\"payment is-loading\">\n      <div class=\"loading-placeholder\">\n        <Spinner :scale=\"2\" color-var=\"--c-white\" />\n      </div>\n      <div id=\"payment\" />\n    </div>\n    <div v-if=\"errors.length\" class=\"errors\">\n      <p v-for=\"(error, index) in errors\" :key=\"`error-${index}`\" class=\"error\">{{ error }}</p>\n    </div>\n    <div class=\"actions\">\n      <button>\n        <span>Monatlich</span>\n        <span v-text=\"currency\" />\n        <span v-text=\"amount\" />\n        <span>spenden!</span>\n      </button>\n    </div>\n  </form>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/button\";\n\n.loading-placeholder {\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(var(--c-white) / 10%);\n  border-radius: 0.35rem;\n}\n\n.payment-form {\n  > .express-checkout {\n    margin-bottom: 1rem;\n    min-height: 64px;\n    position: relative;\n\n    &.is-loading {\n      height: 64px;\n      overflow: hidden;\n    }\n  }\n\n  > .payment {\n    margin-bottom: 1rem;\n    min-height: 260px;\n    position: relative;\n\n    &.is-loading {\n      height: 260px;\n      overflow: hidden;\n    }\n\n    /* stylelint-disable-next-line selector-class-pattern */\n    &:has(.StripeElement) {\n      .loading-placeholder {\n        display: none;\n      }\n    }\n  }\n\n  > .errors {\n    @include typo.default;\n    @include typo.light;\n\n    color: rgba(var(--c-red) / 100%);\n    background: rgba(var(--c-red) / 20%);\n    padding: 0.5rem;\n    border-radius: 0.35rem;\n  }\n\n  > .actions {\n    margin-top: 2rem;\n\n    button {\n      @include button.default;\n\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 0.25rem;\n      font-size: unset;\n      color: rgba(var(--c-white) / 100%);\n      width: 100%;\n      background: rgb(var(--c-green) / 100%);\n\n      &:disabled {\n        background: rgb(var(--c-white) / 20%);\n        cursor: not-allowed;\n      }\n\n      &:not(:disabled) {\n        @include responsive.on-hover {\n          background: rgb(var(--c-green) / 90%);\n        }\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { useRoute } from \"vue-router\";\n\nimport { APIClient } from \"@/api/client\";\nimport { useAccount } from \"@/composables/account\";\nimport eventBus from \"@/eventBus\";\n\nimport FlowRecurringPayment from \"./FlowRecurringPayment.vue\";\n\nconst props = defineProps<{\n  currency: string;\n}>();\n\nconst emit = defineEmits<{\n  (e: \"success\", response: object): void;\n  (e: \"step\", step: string): void;\n}>();\n\nwatch(\n  // NOTE: ensure flow is reset on currency change\n  () => props.currency,\n  () => {\n    setStep(\"amount\");\n  }\n);\n\nconst step = ref(\"amount\"); // amount / payment\n\nconst { user } = useAccount();\nconst route = useRoute();\n\nconst authenticate = () => {\n  const event = {\n    intent: \"login\",\n    next: `${route.path}#donate:recurring`,\n  };\n  eventBus.emit(\"account:authenticate\", event);\n};\n\nconst options = ref([]);\nconst priceId = ref(null);\nconst option = computed(() => {\n  return options.value.find((o) => o.priceId === priceId.value) || null;\n});\n\nconst optionsDisplay = computed(() => {\n  return options.value\n    .filter((o) => o.currency === props.currency)\n    .sort((a, b) => a.amount - b.amount) // <-- sort ascending\n    .map((o) => {\n      return {\n        ...o,\n        isSelected: priceId.value === o.priceId,\n      };\n    });\n});\n\n// initialize step and retrieve options (calls stripe API in backend)\nonMounted(async () => {\n  setStep(\"amount\");\n  const url = \"/api/v1/donation/options/\";\n  const response = await APIClient.get(url);\n  options.value = response.data;\n});\n\nconst setPriceId = (value: string) => {\n  console.debug(\"setPriceId\", value);\n  priceId.value = value;\n};\n\nconst setStep = (value: string) => {\n  step.value = value;\n  emit(\"step\", value);\n};\n</script>\n\n<template>\n  <div v-if=\"!user\">\n    <div class=\"notice notice--anonymous\">\n      <i18n-t keypath=\"donate.flow.recurring.title\" tag=\"p\" />\n      <i18n-t keypath=\"donate.flow.recurring.lead\" tag=\"p\" />\n    </div>\n    <div class=\"actions\">\n      <button @click.prevent=\"authenticate\" class=\"action action--continue\">\n        <i18n-t keypath=\"account.auth.login\" />\n      </button>\n    </div>\n  </div>\n  <div v-else>\n    <div v-if=\"step === 'amount'\">\n      <div class=\"options\">\n        <div\n          @click.prevent=\"setPriceId(option.priceId)\"\n          :class=\"{ 'is-selected': option.isSelected }\"\n          v-for=\"(option, index) in optionsDisplay\"\n          :key=\"`single-amount-option-${index}`\"\n          class=\"option\"\n        >\n          <span>{{ option.currency }}</span> <span>{{ option.amount }}</span>\n        </div>\n      </div>\n      <div class=\"actions\">\n        <button\n          @click.prevent=\"setStep('payment')\"\n          class=\"action action--continue\"\n          :disabled=\"!option\"\n        >\n          <i18n-t keypath=\"donate.flow.continue\" />\n        </button>\n      </div>\n    </div>\n    <div v-if=\"option && step === 'payment'\">\n      <div @click.prevent=\"setStep('amount')\" class=\"navigate-back\">\n        <span>⇽ <i18n-t keypath=\"donate.flow.back\" /></span>\n      </div>\n      <FlowRecurringPayment\n        @success=\"(response: object) => emit('success', response)\"\n        :price-id=\"priceId\"\n        :amount=\"option.amount\"\n        :currency=\"currency\"\n      />\n    </div>\n  </div>\n</template>\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/button\";\n\n.navigate-back {\n  min-height: 1.5rem;\n  margin-bottom: 1rem;\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n}\n\n.notice {\n  margin-bottom: 4rem;\n\n  > p {\n    &:not(:last-child) {\n      margin-bottom: 0.5rem;\n    }\n  }\n}\n\n.options {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 1rem;\n  min-height: 128px;\n  align-items: center;\n\n  .option {\n    font-size: unset;\n    color: rgb(var(--c-white));\n    cursor: pointer;\n    min-height: 3rem;\n    max-height: 3rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 0.25rem;\n    border-radius: 0.25rem;\n    background: rgb(var(--c-white) / 15%);\n    transition: background 200ms, border-radius 200ms;\n\n    &:not(:disabled) {\n      @include responsive.on-hover {\n        background: rgb(var(--c-green) / 100%);\n      }\n    }\n\n    &:hover {\n      &:not(.is-selected) {\n        border-radius: 1.5rem;\n      }\n    }\n\n    &.is-selected {\n      background: rgb(var(--c-green) / 100%);\n      color: rgb(var(--c-white));\n    }\n  }\n}\n\n.actions {\n  margin-top: 1rem;\n\n  > button {\n    @include button.default;\n\n    font-size: unset;\n    color: rgba(var(--c-white) / 100%);\n    width: 100%;\n    background: rgb(var(--c-green) / 100%);\n\n    &:disabled {\n      background: rgb(var(--c-white) / 20%);\n      cursor: not-allowed;\n    }\n\n    &:not(:disabled) {\n      @include responsive.on-hover {\n        background: rgb(var(--c-green) / 90%);\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { type Ref, onMounted, ref } from \"vue\";\nimport { loadStripe } from \"@stripe/stripe-js/pure\";\n\nimport { APIClient } from \"@/api/client\";\nimport AsyncButton from \"@/components/ui/button/AsyncButton.vue\";\nimport Spinner from \"@/components/ui/loading/Spinner.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport settings from \"@/settings\";\n\nconst { STRIPE_PUBLISHABLE_KEY } = settings;\n\nconst props = defineProps<{\n  amount: number;\n  currency: string;\n}>();\n\nconst emit = defineEmits<{\n  (e: \"success\", response: object): void;\n}>();\n\nconst errors = ref<string[]>([]);\n\nclass PaymentFlow {\n  private baseUrl = \"/api/v1/donation/\";\n  private stripe: any = null;\n  private elements: any = null;\n  private donationUid: string | null = null;\n  private clientSecret: string | null = null;\n\n  constructor(\n    private emitFn: ReturnType<typeof defineEmits>,\n    private errorsRef: Ref<string[]>,\n    private formEl: HTMLFormElement,\n    private user: object | null,\n    private amount: number,\n    private currency: string\n  ) {}\n\n  public async init(): Promise<void> {\n    const url = `${this.baseUrl}create/`;\n\n    try {\n      const response = await APIClient.post(url, {\n        kind: \"single\",\n        amount: this.amount,\n        currency: this.currency,\n      });\n      this.donationUid = response.data.uid;\n      this.clientSecret = response.data.clientSecret;\n    } catch (err) {\n      console.error(\"Error initializing payment flow:\", err);\n      this.errorsRef.value.push(err?.response?.data?.message || err?.message || \"Unknown error\");\n      return;\n    }\n\n    this.stripe = await loadStripe(STRIPE_PUBLISHABLE_KEY);\n\n    if (!this.stripe) throw new Error(\"Stripe failed to load\");\n\n    this.elements = this.stripe.elements({\n      clientSecret: this.clientSecret,\n      appearance: {\n        theme: \"night\",\n        variables: {\n          colorPrimary: \"#009050\",\n          colorBackground: \"#222222\",\n          colorText: \"#ffffff\",\n          colorDanger: \"#df1b41\",\n          tabLogoColor: \"dark\",\n          fontSizeBase: \"16px\",\n          fontFamily: \"IBM Plex Sans, Helvetica Neue, system-ui, sans-serif\",\n          spacingUnit: \"3px\",\n          borderRadius: \"4px\",\n          gridRowSpacing: \"16px\",\n        },\n      },\n    });\n\n    // NOTE: link is used to collect e-mail address - we only need this for anonymous users\n    if (!this.user || !this.user?.uid) {\n      await this.mountLink();\n    }\n\n    await this.mountExpressCheckout();\n    await this.mountCardPayment();\n  }\n\n  private async mountLink(): Promise<void> {\n    const linkEl = this.elements.create(\"linkAuthentication\", {});\n    linkEl.mount(\"#link\");\n  }\n\n  private async mountExpressCheckout(): Promise<void> {\n    const expressEl = this.elements.create(\"expressCheckout\", {\n      buttonHeight: 44,\n      buttonTheme: {\n        applePay: \"white\",\n        googlePay: \"black\",\n        paypal: \"black\",\n        klarna: \"dark\",\n      },\n      buttonType: {\n        applePay: \"donate\",\n        googlePay: \"donate\",\n        paypal: \"paypal\",\n        klarna: \"continue\",\n      },\n    });\n\n    expressEl.on(\"ready\", async (event) => {\n      console.debug(\"expressEl:ready\", event);\n      this.formEl.querySelector(\".express-checkout\")?.classList.remove(\"is-loading\");\n    });\n\n    expressEl.on(\"click\", async (event) => {\n      // NOTE: here we get the customer contact information\n      //       maybe use it in case of anonymous user...\n      console.debug(\"expressEl:click\", event);\n      event.resolve({\n        emailRequired: true,\n      });\n    });\n\n    expressEl.on(\"confirm\", async (event) => {\n      console.debug(\"expressEl:confirm\", event);\n      await this.confirmPayment();\n    });\n\n    expressEl.mount(\"#express-checkout\");\n  }\n\n  private async mountCardPayment(): Promise<void> {\n    const cardEl = this.elements.create(\"payment\", {\n      layout: {\n        type: \"tabs\",\n        defaultCollapsed: false,\n      },\n      wallets: {\n        applePay: \"auto\",\n        googlePay: \"auto\",\n        link: \"never\",\n      },\n      fields: {\n        billingDetails: {\n          name: \"auto\",\n          email: \"auto\",\n          address: \"if_required\",\n        },\n      },\n    });\n\n    cardEl.mount(\"#payment\");\n\n    cardEl.on(\"ready\", async (event) => {\n      console.debug(\"cardEl:ready\", event);\n      this.formEl.querySelector(\".payment\")?.classList.remove(\"is-loading\");\n    });\n  }\n\n  public async confirmPayment(): Promise<void> {\n    if (!this.stripe || !this.elements || !this.clientSecret) return;\n\n    this.errorsRef.value = [];\n\n    await this.elements.submit();\n\n    const next = encodeURIComponent(document.location.pathname);\n\n    const result = await this.stripe.confirmPayment({\n      elements: this.elements,\n      clientSecret: this.clientSecret,\n      confirmParams: {\n        return_url: `${window.location.origin}${this.baseUrl}return/?next=${next}`,\n      },\n      redirect: \"if_required\",\n    });\n\n    if (result.error) {\n      console.error(\"payment:failed\", result);\n      this.errorsRef.value.push(result.error?.message || \"Unknown error\");\n    } else {\n      const paymentIntentId = result.paymentIntent.id;\n      const url = `${this.baseUrl}${paymentIntentId}/finalize/`;\n      const response = await APIClient.post(url);\n\n      if (response.data.state === \"failed\") {\n        console.warn(\"payment:finalize-failed\", response.data);\n        this.errorsRef.value = [response.data.message || \"Payment failed\"];\n      } else {\n        console.debug(\"payment:finalized\", response.data);\n        this.emitFn(\"success\", response.data);\n      }\n    }\n  }\n}\n\nconst formEl = ref<HTMLFormElement | null>(null);\nconst { user } = useAccount();\n\nlet flow: PaymentFlow;\n\nonMounted(async () => {\n  if (!formEl.value) {\n    console.error(\"Form element not found\");\n    return;\n  }\n  flow = new PaymentFlow(emit, errors, formEl.value, user.value, props.amount, props.currency);\n  await flow.init();\n});\n\nconst submitPayment = async () => {\n  if (flow) await flow.confirmPayment();\n};\n</script>\n\n<template>\n  <form @submit.prevent=\"submitPayment\" class=\"payment-form\" ref=\"formEl\">\n    <div class=\"express-checkout is-loading\">\n      <div id=\"express-checkout\" />\n    </div>\n    <div class=\"link is-loading\">\n      <div id=\"link\" />\n    </div>\n    <div class=\"payment is-loading\">\n      <div class=\"loading-placeholder\">\n        <Spinner :scale=\"2\" color-var=\"--c-white\" />\n      </div>\n      <div id=\"payment\" />\n    </div>\n    <div v-if=\"errors.length\" class=\"errors\">\n      <p v-for=\"(error, index) in errors\" :key=\"`error-${index}`\" class=\"error\">{{ error }}</p>\n    </div>\n    <div class=\"actions\">\n      <AsyncButton @click.prevent=\"submitPayment()\">\n        <span>Jetzt</span>\n        <span v-text=\"currency\" />\n        <span v-text=\"amount\" />\n        <span>spenden!</span>\n      </AsyncButton>\n    </div>\n  </form>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/button\";\n\n.loading-placeholder {\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(var(--c-white) / 10%);\n  border-radius: 0.35rem;\n}\n\n.payment-form {\n  > .express-checkout {\n    margin-bottom: 1rem;\n    min-height: 64px;\n\n    &.is-loading {\n      height: 64px;\n      overflow: hidden;\n    }\n  }\n\n  > .link {\n    margin-bottom: 1rem;\n  }\n\n  > .payment {\n    margin-bottom: 1rem;\n    min-height: 260px;\n    position: relative;\n\n    &.is-loading {\n      height: 260px;\n      overflow: hidden;\n    }\n\n    /* stylelint-disable-next-line selector-class-pattern */\n    &:has(.StripeElement) {\n      .loading-placeholder {\n        display: none;\n      }\n    }\n  }\n\n  > .errors {\n    @include typo.default;\n    @include typo.light;\n\n    color: rgba(var(--c-red) / 100%);\n    background: rgba(var(--c-red) / 20%);\n    padding: 0.5rem;\n    border-radius: 0.35rem;\n  }\n\n  > .actions {\n    margin-top: 2rem;\n\n    button {\n      @include button.default;\n\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 0.25rem;\n      font-size: unset;\n      color: rgba(var(--c-white) / 100%);\n      width: 100%;\n      background: rgb(var(--c-green) / 100%);\n\n      &:disabled {\n        background: rgb(var(--c-white) / 20%);\n        cursor: not-allowed;\n      }\n\n      &:not(:disabled) {\n        @include responsive.on-hover {\n          background: rgb(var(--c-green) / 90%);\n        }\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { type Ref, computed, onMounted, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport FlowSinglePayment from \"./FlowSinglePayment.vue\";\n\nconst AMOUNT_OPTIONS = [5, 10, 20, 50, 100, 200];\n\nconst props = defineProps<{\n  currency: string;\n}>();\n\nconst { t } = useI18n();\n\nconst emit = defineEmits<{\n  (e: \"success\", response: object): void;\n  (e: \"step\", step: string): void;\n}>();\n\nwatch(\n  // NOTE: ensure flow is reset on currency change\n  () => props.currency,\n  () => {\n    setStep(\"amount\");\n  }\n);\n\nonMounted(async () => {\n  setStep(\"amount\");\n});\n\nconst amount = ref(0);\n\nconst step = ref(\"amount\"); // amount / payment\n\nconst customAmount: Ref<number | null> = ref<number | null>(null);\n\nconst options = computed(() => {\n  return AMOUNT_OPTIONS.map((a) => {\n    return {\n      amount: a,\n      isSelected: amount.value === a && customAmount.value === null,\n    };\n  });\n});\n\nconst amountValid = computed(() => {\n  return amount.value >= 1 && amount.value <= 5000;\n});\n\nconst setAmount = (value: number) => {\n  amount.value = value;\n  customAmount.value = null;\n};\n\nconst setStep = (value: string) => {\n  step.value = value;\n  emit(\"step\", value);\n};\n\nwatch(customAmount, (newValue) => {\n  if (newValue !== null && newValue >= 1 && newValue <= 5000) {\n    amount.value = newValue;\n  } else {\n    amount.value = 0;\n  }\n});\n</script>\n\n<template>\n  <div v-if=\"step === 'amount'\">\n    <div class=\"options\">\n      <div\n        @click.prevent=\"setAmount(option.amount)\"\n        :class=\"{ 'is-selected': option.isSelected }\"\n        v-for=\"(option, index) in options\"\n        :key=\"`single-amount-option-${index}`\"\n        class=\"option\"\n      >\n        <span>{{ currency }}</span> <span>{{ option.amount }}</span>\n      </div>\n    </div>\n    <div class=\"custom-amount\">\n      <input\n        min=\"1\"\n        max=\"10000\"\n        type=\"number\"\n        :placeholder=\"t('donate.flow.single.customAmount')\"\n        :class=\"{ 'is-selected': typeof customAmount === 'number' && customAmount > 0 }\"\n        v-model=\"customAmount\"\n      />\n    </div>\n    <div class=\"actions\">\n      <button\n        @click.prevent=\"setStep('payment')\"\n        class=\"action action--continue\"\n        :disabled=\"!amountValid\"\n      >\n        <i18n-t keypath=\"donate.flow.continue\" />\n      </button>\n    </div>\n  </div>\n  <div v-if=\"step === 'payment'\">\n    <div @click.prevent=\"setStep('amount')\" class=\"navigate-back\">\n      <span>⇽ <i18n-t keypath=\"donate.flow.back\" /></span>\n    </div>\n    <FlowSinglePayment\n      @success=\"(response: object) => emit('success', response)\"\n      :amount=\"amount\"\n      :currency=\"currency\"\n    />\n  </div>\n</template>\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/button\";\n\n.navigate-back {\n  min-height: 1.5rem;\n  margin-bottom: 1rem;\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n}\n\n.options {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 1rem;\n\n  .option {\n    font-size: unset;\n    color: rgb(var(--c-white));\n    cursor: pointer;\n    min-height: 2rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 0.25rem;\n    border-radius: 0.25rem;\n    background: rgb(var(--c-white) / 15%);\n    transition: background 200ms, border-radius 200ms;\n\n    &:not(:disabled) {\n      @include responsive.on-hover {\n        background: rgb(var(--c-green) / 100%);\n      }\n    }\n\n    &:hover {\n      &:not(.is-selected) {\n        border-radius: 1rem;\n      }\n    }\n\n    &.is-selected {\n      background: rgb(var(--c-green) / 100%);\n      color: rgb(var(--c-white));\n    }\n  }\n}\n\n.custom-amount {\n  margin-top: 1rem;\n\n  > input {\n    width: 100%;\n    background: rgb(var(--c-light) / 5%);\n    color: rgb(var(--c-dark));\n    font-size: 1rem;\n    outline: none;\n    min-height: 2rem;\n    border: 1px solid rgb(var(--c-white) / 20%);\n    border-radius: 0.25rem;\n    text-align: center;\n    padding-left: 1rem;\n    padding-right: 1rem;\n\n    &::placeholder {\n      color: rgb(var(--c-white) / 50%);\n    }\n\n    transition: border 200ms, background 200ms;\n\n    &:focus {\n      border-color: rgb(var(--c-green) / 100%);\n      border-radius: 1rem;\n    }\n\n    &.is-selected {\n      border-color: rgb(var(--c-green) / 100%);\n      color: rgb(var(--c-white));\n    }\n  }\n}\n\n.actions {\n  margin-top: 1rem;\n\n  > button {\n    @include button.default;\n\n    font-size: unset;\n    color: rgba(var(--c-white) / 100%);\n    width: 100%;\n    background: rgb(var(--c-green) / 100%);\n\n    &:disabled {\n      background: rgb(var(--c-white) / 20%);\n      cursor: not-allowed;\n    }\n\n    &:not(:disabled) {\n      @include responsive.on-hover {\n        background: rgb(var(--c-green) / 90%);\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRoute, useRouter } from \"vue-router\";\n\nimport IconClose from \"@/components/ui/icon/IconClose.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport eventBus from \"@/eventBus\";\n\nimport FlowRecurring from \"./flow/FlowRecurring.vue\";\nimport FlowSingle from \"./flow/FlowSingle.vue\";\n\nconst { t } = useI18n();\nconst route = useRoute();\nconst router = useRouter();\nconst { loadUser, user } = useAccount();\n\nconst hasActiveDonation = ref(false);\n\nconst updateActiveDonation = () => {\n  return !!(user.value?.donations ?? []).find((d: object) => d?.state === \"active\");\n};\n\nonMounted(() => {\n  // NOTE: we only run this on mounted, so the panel does not change\n  //       when the user creates a new recurring donation ;)\n  updateActiveDonation();\n});\n\nwatch(\n  () => route.hash,\n  (newHash) => {\n    if (!newHash.startsWith(\"#donate:\")) {\n      return;\n    }\n    const kind = newHash.replace(\"#donate:\", \"\");\n    if ([\"single\", \"recurring\"].includes(kind)) {\n      isVisible.value = true;\n      setKind(kind);\n      setStep(\"amount\");\n      router.replace({ hash: \"\" });\n    }\n    if ([\"success\"].includes(kind)) {\n      isVisible.value = true;\n      setStep(\"success\");\n      router.replace({ hash: \"\" });\n    }\n  }\n);\n\nconst isVisible = ref(false);\nconst kind = ref(\"single\");\n\nconst step = ref(\"amount\"); // amount / payment / success\nconst successData = ref<object | null>(null); // data from the payment step\n\nconst currencies = [\"CHF\", \"EUR\", \"USD\"];\nconst currency = ref(\"CHF\");\n\nconst setKind = (value: string) => {\n  kind.value = value;\n};\n\nconst close = () => {\n  isVisible.value = false;\n  setStep(\"amount\");\n};\n\nconst infoVisible = computed(() => {\n  return [\"amount\"].includes(step.value);\n});\n\nconst navVisible = computed(() => {\n  return [\"amount\"].includes(step.value);\n});\n\nconst flowVisible = computed(() => {\n  return step.value !== \"success\";\n});\n\nconst successVisible = computed(() => {\n  return step.value === \"success\";\n});\n\neventBus.on(\"donation:showPanel\", () => {\n  updateActiveDonation();\n  isVisible.value = true;\n});\n\neventBus.on(\"donation:hidePanel\", () => {\n  isVisible.value = false;\n});\n\neventBus.on(\"donation:togglePanel\", () => {\n  updateActiveDonation();\n  isVisible.value = !isVisible.value;\n});\n\nconst setStep = (value: string) => {\n  step.value = value;\n  console.debug(\"DonatePanel:setStep\", value);\n};\n\nconst onStep = (value: string) => {\n  console.debug(\"DonatePanel:onStep\", value);\n  setStep(value);\n};\n\nconst onSuccess = (response: object) => {\n  console.debug(\"DonatePanel:onSuccess\", response);\n  successData.value = response;\n  loadUser(); // make sure the donation status is updated\n  setStep(\"success\");\n};\n</script>\n\n<template>\n  <transition name=\"fade\">\n    <div v-if=\"false\" @click=\"close\" class=\"mask\" />\n  </transition>\n  <transition name=\"slide\">\n    <div v-if=\"isVisible\" class=\"panel\">\n      <div class=\"close\">\n        <IconClose @click.prevent=\"close\" :style=\"{ '--c-fg': 'var(--c-white)' }\" />\n      </div>\n      <div v-if=\"hasActiveDonation\" class=\"body\">\n        <div class=\"info\">\n          <i18n-t keypath=\"donate.panel.activeDonation.title\" tag=\"h2\" />\n          <i18n-t keypath=\"donate.panel.activeDonation.lead\" tag=\"p\" />\n          <i18n-t keypath=\"donate.panel.activeDonation.lead2\" tag=\"p\" />\n        </div>\n        <div class=\"actions\">\n          <router-link\n            :to=\"{ name: 'accountSettings' }\"\n            class=\"action action--continue\"\n            v-text=\"t('menu.accountSettings')\"\n          />\n        </div>\n      </div>\n      <div v-else class=\"body\">\n        <div v-if=\"infoVisible\" class=\"info\">\n          <i18n-t keypath=\"donate.panel.title\" tag=\"h2\" />\n          <i18n-t keypath=\"donate.panel.lead\" tag=\"p\" />\n        </div>\n        <div v-if=\"navVisible\" class=\"nav\">\n          <div class=\"currency\">\n            <select v-model=\"currency\">\n              <option v-for=\"c in currencies\" :key=\"`option-currency-${c}`\" :value=\"c\">\n                {{ c }}\n              </option>\n            </select>\n          </div>\n          <div class=\"kinds\">\n            <div\n              @click.prevent=\"setKind('single')\"\n              class=\"kind kind--single\"\n              :class=\"{\n                'is-selected': kind === 'single',\n              }\"\n            >\n              <i18n-t keypath=\"donate.panel.kindSingle\" />\n            </div>\n            <div\n              @click.prevent=\"setKind('recurring')\"\n              class=\"kind kind--recurring\"\n              :class=\"{\n                'is-selected': kind === 'recurring',\n              }\"\n            >\n              <i18n-t keypath=\"donate.panel.kindRecurring\" />\n            </div>\n          </div>\n          <div class=\"alt\">\n            <div></div>\n          </div>\n        </div>\n        <div v-if=\"flowVisible\" class=\"flow\">\n          <div v-if=\"kind === 'single'\">\n            <FlowSingle @step=\"onStep\" @success=\"onSuccess\" :currency=\"currency\" />\n          </div>\n          <div v-if=\"kind === 'recurring'\">\n            <FlowRecurring @step=\"onStep\" @success=\"onSuccess\" :currency=\"currency\" />\n          </div>\n        </div>\n        <div v-if=\"successVisible\" class=\"success\">\n          <i18n-t keypath=\"donate.panel.success.title\" tag=\"h2\" />\n          <i18n-t keypath=\"donate.panel.success.lead\" tag=\"p\" />\n          <i18n-t keypath=\"donate.panel.success.lead2\" tag=\"p\" />\n          <i18n-t keypath=\"donate.panel.success.lead3\" tag=\"p\" />\n          <!--\n          <div v-if=\"successData && successData?.invoice\">\n            <a :href=\"successData.invoice.pdfInvoiceUrl\">Invoice (PDF)</a>\n          </div>\n          -->\n        </div>\n      </div>\n    </div>\n  </transition>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/button\";\n\n@keyframes steam {\n  0% {\n    background-position: 0 0;\n  }\n\n  50% {\n    background-position: 400% 0;\n  }\n\n  100% {\n    background-position: 0 0;\n  }\n}\n\n.mask {\n  top: 0;\n  position: fixed;\n  height: 100%;\n  width: 100%;\n  z-index: 20;\n  left: 0;\n\n  /*\n  background: rgb(var(--c-black) / 50%);\n  */\n\n  /*\n  @include responsive.bp-medium {\n    background: unset;\n  }\n  */\n}\n\n.panel {\n  z-index: 20;\n  position: fixed;\n  width: 100%;\n  max-width: min(460px, calc(100vw - 2rem));\n  bottom: 5.5rem;\n  padding: 0;\n  right: 1rem;\n  border-radius: 1rem;\n\n  /* overflow-y: auto; */\n\n  color: rgb(var(--c-white));\n  background: rgb(var(--c-black));\n  overscroll-behavior: contain;\n\n  /*\n  &::before,\n  &::after {\n    opacity: 0.1;\n    top: -2px;\n    position: absolute;\n    height: calc(100% + 4px);\n    width: calc(100% + 4px);\n    content: \"\";\n    left: -2px;\n    background: linear-gradient(45deg, #f0f, #0ff, #f0f);\n    background-size: 400%;\n    z-index: -1;\n    animation: steam 20s linear infinite;\n    border-radius: 1rem;\n  }\n\n  &::after {\n    filter: blur(10px);\n  }\n  */\n\n  @include responsive.bp-medium {\n    background: rgb(var(--c-black));\n    max-width: 100vw;\n    right: unset;\n    border-radius: 1rem 1rem 0 0;\n    bottom: 0;\n    padding-bottom: 5.5rem;\n    z-index: 100; // move above legal-disclaimer\n  }\n\n  > .close {\n    top: 4px;\n    position: absolute;\n    right: 4px;\n    cursor: pointer;\n  }\n\n  > .body {\n    padding: 1rem;\n\n    > .info {\n      color: currentcolor;\n\n      > h2 {\n        margin-bottom: 0.5rem;\n      }\n\n      > p {\n        &:not(:last-child) {\n          margin-bottom: 0.5rem;\n        }\n      }\n    }\n\n    > .actions {\n      margin-top: 2rem;\n\n      > .action {\n        @include button.default;\n\n        color: rgba(var(--c-white) / 100%);\n        width: 100%;\n        background: rgb(var(--c-green) / 100%);\n\n        &:not(:disabled) {\n          @include responsive.on-hover {\n            background: rgb(var(--c-green) / 90%);\n          }\n        }\n      }\n    }\n\n    > .nav {\n      margin-top: 2rem;\n      margin-bottom: 2rem;\n      display: grid;\n      grid-template-columns: 100px 1fr 100px;\n\n      > .currency {\n        display: flex;\n        align-items: center;\n        justify-content: flex-start;\n\n        > select {\n          @include typo.default;\n          @include typo.bold;\n\n          position: relative;\n          outline: none;\n          background: rgb(var(--c-black) / 50%);\n          border: none;\n          color: rgb(var(--c-white));\n        }\n      }\n\n      > .kinds {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 1rem;\n\n        > .kind {\n          cursor: pointer;\n          padding: 0.25rem 0.5rem;\n          border-bottom: 2px solid rgb(var(--c-green) / 0%);\n          white-space: nowrap;\n\n          &.is-selected {\n            color: rgb(var(--c-white));\n            border-bottom: 2px solid rgb(var(--c-green) / 100%);\n          }\n        }\n      }\n\n      > .alt {\n        display: flex;\n        align-items: center;\n        justify-content: flex-end;\n      }\n    }\n\n    > .flow {\n      color: currentcolor;\n    }\n\n    > .success {\n      padding-bottom: 4rem;\n\n      > h2 {\n        margin-bottom: 0.5rem;\n      }\n\n      /* stylelint-disable-next-line no-descending-specificity */\n      > p {\n        max-width: 90%;\n\n        &:not(:last-child) {\n          margin-bottom: 0.5rem;\n        }\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, watch } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { useEventListener } from \"@vueuse/core\";\n\nimport CloseButton from \"./CloseButton.vue\";\n\nexport default defineComponent({\n  components: {\n    CloseButton,\n  },\n  props: {\n    isVisible: {\n      type: Boolean,\n      default: false,\n    },\n    title: {\n      type: String,\n      default: \"\",\n    },\n  },\n  emits: [\"close\"],\n  setup(props, { slots, emit }) {\n    const hasFooter = computed(() => !!slots.footer);\n    const hasSuccess = computed(() => !!slots.success);\n    const close = () => {\n      emit(\"close\");\n    };\n    useEventListener(document, \"keydown\", (e) => {\n      if (e.code === \"Escape\") {\n        close();\n      }\n    });\n    const route = useRoute();\n    watch(() => route.path, close);\n    return {\n      hasFooter,\n      hasSuccess,\n      close,\n    };\n  },\n});\n</script>\n<template>\n  <transition name=\"fade\">\n    <div v-if=\"isVisible\" class=\"overlay-panel\">\n      <div class=\"header\">\n        <CloseButton @click.prevent=\"close\" />\n      </div>\n      <div class=\"container\">\n        <div class=\"overlay-panel__content\">\n          <div v-if=\"title\" class=\"overlay-panel__content__title\">\n            <div v-text=\"title\" />\n          </div>\n          <div class=\"overlay-panel__content__body\">\n            <slot name=\"default\" />\n          </div>\n        </div>\n        <div v-if=\"hasFooter\" class=\"overlay-panel__footer\">\n          <slot name=\"footer\" />\n        </div>\n        <div v-if=\"hasSuccess\" class=\"overlay-panel__success\">\n          <slot name=\"success\" />\n        </div>\n      </div>\n    </div>\n  </transition>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n\n.overlay-panel {\n  top: var(--sa-t);\n  position: fixed;\n  height: 100%;\n  width: 100%;\n  left: 0;\n  z-index: 45;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  color: rgb(var(--c-dark) / 100%);\n  font-weight: 500;\n  background: rgb(var(--c-light) / 100%);\n  overflow-y: auto;\n  overscroll-behavior: auto contain;\n\n  @include responsive.bp-medium {\n    box-shadow: 0 -4px 8px 4px rgb(0 0 0 / 10%);\n    border-top-left-radius: 28px;\n    border-top-right-radius: 28px;\n  }\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  .header {\n    @include container.small;\n\n    top: 0;\n    position: sticky;\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    padding-top: 1rem;\n    padding-bottom: 1rem;\n    background: rgb(var(--c-light) / 100%);\n    z-index: 50;\n\n    @include responsive.bp-medium {\n      height: 60px;\n      min-height: 60px;\n    }\n  }\n\n  .container {\n    @include container.small;\n\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    padding-bottom: 4rem;\n    min-height: calc(100vh - 79px);\n  }\n\n  @include responsive.bp-medium {\n    max-width: unset;\n  }\n\n  &__header {\n    position: fixed;\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    height: 78px;\n    margin-top: 0;\n  }\n\n  &__content {\n    flex-grow: 1;\n\n    &__title {\n      @include typo.x-large;\n      @include typo.bold;\n\n      padding: 0.5rem 0 1.5rem;\n    }\n  }\n}\n\n.fade-enter-active {\n  transition: transform 200ms ease-in-out;\n}\n\n.fade-leave-active {\n  transition: transform 200ms ease-in-out;\n}\n\n.fade-enter-from {\n  opacity: 0;\n\n  @include responsive.bp-medium {\n    opacity: unset;\n    transform: translate(0, 100%);\n  }\n}\n\n.fade-leave-to {\n  opacity: 0;\n\n  @include responsive.bp-medium {\n    opacity: unset;\n    transform: translate(0, 100%);\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport OverlayPanel from \"@/components/ui/panel/OverlayPanel.vue\";\nimport eventBus from \"@/eventBus\";\n\nexport default defineComponent({\n  components: {\n    OverlayPanel,\n  },\n  setup() {\n    const { t } = useI18n();\n    const isVisible = ref(false);\n    const faqLink = \"/faq/#42C745E4\";\n    const message = ref(\"\");\n    const successVisible = ref(false);\n    const close = () => {\n      isVisible.value = false;\n      successVisible.value = false;\n    };\n    eventBus.on(\"geolocation:blocked\", (event) => {\n      console.debug(\"geolocation:blocked\", event);\n      isVisible.value = true;\n      message.value = event?.message ?? \"\";\n    });\n    return {\n      t,\n      close,\n      isVisible,\n      faqLink,\n      message,\n    };\n  },\n});\n</script>\n\n<template>\n  <OverlayPanel :is-visible=\"isVisible\" @close=\"close\">\n    <div>\n      <div class=\"title\">Sorry</div>\n      <div class=\"availability\">\n        <i18n-t keypath=\"geolocation.availability.note\" tag=\"p\" class=\"note\" />\n        <i18n-t keypath=\"geolocation.availability.faqNote\" tag=\"p\" class=\"faq-note\">\n          <router-link :to=\"faqLink\" v-text=\"t('geolocation.availability.faqLabel')\" />\n        </i18n-t>\n      </div>\n    </div>\n    <template #footer>\n      <p v-text=\"message\" />\n    </template>\n  </OverlayPanel>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/section\";\n\n.section {\n  @include section.default;\n}\n\n.current-subscription-text {\n  margin: 2rem 0;\n}\n\n.title {\n  @include typo.x-large;\n  @include typo.bold;\n}\n\n.note {\n  @include typo.large;\n\n  a {\n    text-decoration: underline;\n    cursor: pointer;\n  }\n}\n\n.faq-note {\n  margin-top: 1rem;\n\n  a {\n    text-decoration: underline;\n    cursor: pointer;\n  }\n}\n\n.legal {\n  font-size: 90%;\n  opacity: 0.5;\n}\n</style>\n","/*!\n * CookieConsent v2.8.9\n * https://www.github.com/orestbida/cookieconsent\n * Author Orest Bida\n * Released under the MIT License\n */\n/* eslint-disable no-redeclare, @typescript-eslint/no-shadow */\n(function () {\n  \"use strict\";\n  /**\n   * @param {HTMLElement} [root] - [optional] element where the cookieconsent will be appended\n   * @returns {Object} cookieconsent object with API\n   */\n  var CookieConsent = function (root) {\n    /**\n     * CHANGE THIS FLAG FALSE TO DISABLE console.log()\n     */\n    var ENABLE_LOGS = true;\n\n    var _config = {\n      mode: \"opt-in\", // 'opt-in', 'opt-out'\n      current_lang: \"en\",\n      auto_language: null,\n      autorun: true, // run as soon as loaded\n      page_scripts: true,\n      hide_from_bots: true,\n      cookie_name: \"cc_cookie\",\n      cookie_expiration: 182, // default: 6 months (in days)\n      cookie_domain: window.location.hostname, // default: current domain\n      cookie_path: \"/\",\n      cookie_same_site: \"Lax\",\n      use_rfc_cookie: false,\n      autoclear_cookies: true,\n      revision: 0,\n      script_selector: \"data-cookiecategory\",\n    };\n\n    var /**\n       * Object which holds the main methods/API (.show, .run, ...)\n       */\n      _cookieconsent = {},\n      /**\n       * Global user configuration object\n       */\n      user_config,\n      /**\n       * Internal state variables\n       */\n      saved_cookie_content = {},\n      cookie_data = null,\n      /**\n       * @type {Date}\n       */\n      consent_date,\n      /**\n       * @type {Date}\n       */\n      last_consent_update,\n      /**\n       * @type {string}\n       */\n      consent_uuid,\n      /**\n       * @type {boolean}\n       */\n      invalid_consent = true,\n      consent_modal_exists = false,\n      consent_modal_visible = false,\n      settings_modal_visible = false,\n      clicked_inside_modal = false,\n      current_modal_focusable,\n      all_table_headers,\n      all_blocks,\n      // Helper callback functions\n      // (avoid calling \"user_config['onAccept']\" all the time)\n      onAccept,\n      onChange,\n      onFirstAction,\n      revision_enabled = false,\n      valid_revision = true,\n      revision_message = \"\",\n      // State variables for the autoclearCookies function\n      changed_settings = [],\n      reload_page = false;\n\n    /**\n     * Accept type:\n     *  - \"all\"\n     *  - \"necessary\"\n     *  - \"custom\"\n     * @type {string}\n     */\n    var accept_type;\n\n    /**\n     * Contains all accepted categories\n     * @type {string[]}\n     */\n    var accepted_categories = [];\n\n    /**\n     * Contains all non-accepted (rejected) categories\n     * @type {string[]}\n     */\n    var rejected_categories = [];\n\n    /**\n     * Contains all categories enabled by default\n     * @type {string[]}\n     */\n    var default_enabled_categories = [];\n\n    // Don't run plugin (to avoid indexing its text content) if bot detected\n    var is_bot = false;\n\n    /**\n     * Save reference to the last focused element on the page\n     * (used later to restore focus when both modals are closed)\n     */\n    var last_elem_before_modal;\n    var last_consent_modal_btn_focus;\n\n    /**\n     * Both of the arrays below have the same structure:\n     * [0] => holds reference to the FIRST focusable element inside modal\n     * [1] => holds reference to the LAST focusable element inside modal\n     */\n    var consent_modal_focusable = [];\n    var settings_modal_focusable = [];\n\n    /**\n     * Keep track of enabled/disabled categories\n     * @type {boolean[]}\n     */\n    var toggle_states = [];\n\n    /**\n     * Stores all available categories\n     * @type {string[]}\n     */\n    var all_categories = [];\n\n    /**\n     * Keep track of readonly toggles\n     * @type {boolean[]}\n     */\n    var readonly_categories = [];\n\n    /**\n     * Pointers to main dom elements (to avoid retrieving them later using document.getElementById)\n     */\n    var /** @type {HTMLElement} */ html_dom = document.documentElement,\n      /** @type {HTMLElement} */ main_container,\n      /** @type {HTMLElement} */ all_modals_container,\n      /** @type {HTMLElement} */ consent_modal,\n      /** @type {HTMLElement} */ consent_modal_title,\n      /** @type {HTMLElement} */ consent_modal_description,\n      /** @type {HTMLElement} */ consent_primary_btn,\n      /** @type {HTMLElement} */ consent_secondary_btn,\n      /** @type {HTMLElement} */ consent_buttons,\n      /** @type {HTMLElement} */ consent_modal_inner,\n      /** @type {HTMLElement} */ settings_container,\n      /** @type {HTMLElement} */ settings_inner,\n      /** @type {HTMLElement} */ settings_title,\n      /** @type {HTMLElement} */ settings_close_btn,\n      /** @type {HTMLElement} */ settings_blocks,\n      /** @type {HTMLElement} */ new_settings_blocks,\n      /** @type {HTMLElement} */ settings_buttons,\n      /** @type {HTMLElement} */ settings_save_btn,\n      /** @type {HTMLElement} */ settings_accept_all_btn,\n      /** @type {HTMLElement} */ settings_reject_all_btn;\n\n    /**\n     * Update config settings\n     * @param {Object} user_config\n     */\n    var _setConfig = function (_user_config) {\n      /**\n       * Make user configuration globally available\n       */\n      user_config = _user_config;\n\n      _log(\"CookieConsent [CONFIG]: received_config_settings \", user_config);\n\n      if (typeof user_config[\"cookie_expiration\"] === \"number\")\n        _config.cookie_expiration = user_config[\"cookie_expiration\"];\n\n      if (typeof user_config[\"cookie_necessary_only_expiration\"] === \"number\")\n        _config.cookie_necessary_only_expiration = user_config[\"cookie_necessary_only_expiration\"];\n\n      if (typeof user_config[\"autorun\"] === \"boolean\") _config.autorun = user_config[\"autorun\"];\n\n      if (typeof user_config[\"cookie_domain\"] === \"string\")\n        _config.cookie_domain = user_config[\"cookie_domain\"];\n\n      if (typeof user_config[\"cookie_same_site\"] === \"string\")\n        _config.cookie_same_site = user_config[\"cookie_same_site\"];\n\n      if (typeof user_config[\"cookie_path\"] === \"string\")\n        _config.cookie_path = user_config[\"cookie_path\"];\n\n      if (typeof user_config[\"cookie_name\"] === \"string\")\n        _config.cookie_name = user_config[\"cookie_name\"];\n\n      if (typeof user_config[\"onAccept\"] === \"function\") onAccept = user_config[\"onAccept\"];\n\n      if (typeof user_config[\"onFirstAction\"] === \"function\")\n        onFirstAction = user_config[\"onFirstAction\"];\n\n      if (typeof user_config[\"onChange\"] === \"function\") onChange = user_config[\"onChange\"];\n\n      if (user_config[\"mode\"] === \"opt-out\") _config.mode = \"opt-out\";\n\n      if (typeof user_config[\"revision\"] === \"number\") {\n        user_config[\"revision\"] > -1 && (_config.revision = user_config[\"revision\"]);\n        revision_enabled = true;\n      }\n\n      if (typeof user_config[\"autoclear_cookies\"] === \"boolean\")\n        _config.autoclear_cookies = user_config[\"autoclear_cookies\"];\n\n      if (user_config[\"use_rfc_cookie\"] === true) _config.use_rfc_cookie = true;\n\n      if (typeof user_config[\"hide_from_bots\"] === \"boolean\") {\n        _config.hide_from_bots = user_config[\"hide_from_bots\"];\n      }\n\n      if (_config.hide_from_bots) {\n        is_bot =\n          navigator &&\n          ((navigator.userAgent && /bot|crawl|spider|slurp|teoma/i.test(navigator.userAgent)) ||\n            navigator.webdriver);\n      }\n\n      _config.page_scripts = user_config[\"page_scripts\"] === true;\n\n      if (user_config[\"auto_language\"] === \"browser\" || user_config[\"auto_language\"] === true) {\n        _config.auto_language = \"browser\";\n      } else if (user_config[\"auto_language\"] === \"document\") {\n        _config.auto_language = \"document\";\n      }\n\n      _log(\"CookieConsent [LANG]: auto_language strategy is '\" + _config.auto_language + \"'\");\n\n      _config.current_lang = _resolveCurrentLang(\n        user_config.languages,\n        user_config[\"current_lang\"]\n      );\n    };\n\n    /**\n     * Add an onClick listeners to all html elements with data-cc attribute\n     */\n    var _addDataButtonListeners = function (elem) {\n      var _a = \"accept-\";\n\n      var show_settings = _getElements(\"c-settings\");\n      var accept_all = _getElements(_a + \"all\");\n      var accept_necessary = _getElements(_a + \"necessary\");\n      var accept_custom_selection = _getElements(_a + \"custom\");\n\n      for (var i = 0; i < show_settings.length; i++) {\n        show_settings[i].setAttribute(\"aria-haspopup\", \"dialog\");\n        _addEvent(show_settings[i], \"click\", function (event) {\n          event.preventDefault();\n          _cookieconsent.showSettings(0);\n        });\n      }\n\n      for (i = 0; i < accept_all.length; i++) {\n        _addEvent(accept_all[i], \"click\", function (event) {\n          _acceptAction(event, \"all\");\n        });\n      }\n\n      for (i = 0; i < accept_custom_selection.length; i++) {\n        _addEvent(accept_custom_selection[i], \"click\", function (event) {\n          _acceptAction(event);\n        });\n      }\n\n      for (i = 0; i < accept_necessary.length; i++) {\n        _addEvent(accept_necessary[i], \"click\", function (event) {\n          _acceptAction(event, []);\n        });\n      }\n\n      /**\n       * Return all elements with given data-cc role\n       * @param {string} data_role\n       * @returns {NodeListOf<Element>}\n       */\n      function _getElements(data_role) {\n        return (elem || document).querySelectorAll(\n          'a[data-cc=\"' + data_role + '\"], button[data-cc=\"' + data_role + '\"]'\n        );\n      }\n\n      /**\n       * Helper function: accept and then hide modals\n       * @param {PointerEvent} e source event\n       * @param {string} [accept_type]\n       */\n      function _acceptAction(e, accept_type) {\n        e.preventDefault();\n        _cookieconsent.accept(accept_type);\n        _cookieconsent.hideSettings();\n        _cookieconsent.hide();\n      }\n    };\n\n    /**\n     * Get a valid language (at least 1 must be defined)\n     * @param {string} lang - desired language\n     * @param {Object} all_languages - all defined languages\n     * @returns {string} validated language\n     */\n    var _getValidatedLanguage = function (lang, all_languages) {\n      if (Object.prototype.hasOwnProperty.call(all_languages, lang)) {\n        return lang;\n      } else if (_getKeys(all_languages).length > 0) {\n        if (Object.prototype.hasOwnProperty.call(all_languages, _config.current_lang)) {\n          return _config.current_lang;\n        } else {\n          return _getKeys(all_languages)[0];\n        }\n      }\n    };\n\n    /**\n     * Save reference to first and last focusable elements inside each modal\n     * to prevent losing focus while navigating with TAB\n     */\n    var _getModalFocusableData = function () {\n      /**\n       * Note: any of the below focusable elements, which has the attribute tabindex=\"-1\" AND is either\n       * the first or last element of the modal, won't receive focus during \"open/close\" modal\n       */\n      var allowed_focusable_types = [\"[href]\", \"button\", \"input\", \"details\", '[tabindex=\"0\"]'];\n\n      function _getAllFocusableElements(modal, _array) {\n        var focus_later = false,\n          focus_first = false;\n\n        // ie might throw exception due to complex unsupported selector => a:not([tabindex=\"-1\"])\n        try {\n          var focusable_elems = modal.querySelectorAll(\n            allowed_focusable_types.join(':not([tabindex=\"-1\"]), ')\n          );\n          var attr,\n            len = focusable_elems.length,\n            i = 0;\n\n          while (i < len) {\n            attr = focusable_elems[i].getAttribute(\"data-focus\");\n\n            if (!focus_first && attr === \"1\") {\n              focus_first = focusable_elems[i];\n            } else if (attr === \"0\") {\n              focus_later = focusable_elems[i];\n              if (!focus_first && focusable_elems[i + 1].getAttribute(\"data-focus\") !== \"0\") {\n                focus_first = focusable_elems[i + 1];\n              }\n            }\n\n            i++;\n          }\n        } catch (e) {\n          return modal.querySelectorAll(allowed_focusable_types.join(\", \"));\n        }\n\n        /**\n         * Save first and last elements (used to lock/trap focus inside modal)\n         */\n        _array[0] = focusable_elems[0];\n        _array[1] = focusable_elems[focusable_elems.length - 1];\n        _array[2] = focus_later;\n        _array[3] = focus_first;\n      }\n\n      /**\n       * Get settings modal'S all focusable elements\n       * Save first and last elements (used to lock/trap focus inside modal)\n       */\n      _getAllFocusableElements(settings_inner, settings_modal_focusable);\n\n      /**\n       * If consent modal exists, do the same\n       */\n      if (consent_modal_exists) {\n        _getAllFocusableElements(consent_modal, consent_modal_focusable);\n      }\n    };\n\n    var _createConsentModal = function (lang) {\n      if (user_config[\"force_consent\"] === true) _addClass(html_dom, \"force--consent\");\n\n      // Create modal if it doesn't exist\n      if (!consent_modal) {\n        consent_modal = _createNode(\"div\");\n        var consent_modal_inner_inner = _createNode(\"div\");\n        var overlay = _createNode(\"div\");\n\n        consent_modal.id = \"cm\";\n        consent_modal_inner_inner.id = \"c-inr-i\";\n        overlay.id = \"cm-ov\";\n\n        consent_modal.setAttribute(\"role\", \"dialog\");\n        consent_modal.setAttribute(\"aria-modal\", \"true\");\n        consent_modal.setAttribute(\"aria-hidden\", \"false\");\n        consent_modal.setAttribute(\"aria-labelledby\", \"c-ttl\");\n        consent_modal.setAttribute(\"aria-describedby\", \"c-txt\");\n\n        // Append consent modal to main container\n        all_modals_container.appendChild(consent_modal);\n        all_modals_container.appendChild(overlay);\n\n        /**\n         * Make modal by default hidden to prevent weird page jumps/flashes (shown only once css is loaded)\n         */\n        consent_modal.style.visibility = overlay.style.visibility = \"hidden\";\n        overlay.style.opacity = 0;\n      }\n\n      // Use insertAdjacentHTML instead of innerHTML\n      var consent_modal_title_value = user_config.languages[lang][\"consent_modal\"][\"title\"];\n\n      // Add title (if valid)\n      if (consent_modal_title_value) {\n        if (!consent_modal_title) {\n          consent_modal_title = _createNode(\"div\");\n          consent_modal_title.id = \"c-ttl\";\n          consent_modal_title.setAttribute(\"role\", \"heading\");\n          consent_modal_title.setAttribute(\"aria-level\", \"2\");\n          consent_modal_inner_inner.appendChild(consent_modal_title);\n        }\n\n        consent_modal_title.innerHTML = consent_modal_title_value;\n      }\n\n      var description = user_config.languages[lang][\"consent_modal\"][\"description\"];\n\n      if (revision_enabled) {\n        if (!valid_revision) {\n          description = description.replace(\n            \"{{revision_message}}\",\n            revision_message ||\n              user_config.languages[lang][\"consent_modal\"][\"revision_message\"] ||\n              \"\"\n          );\n        } else {\n          description = description.replace(\"{{revision_message}}\", \"\");\n        }\n      }\n\n      if (!consent_modal_description) {\n        consent_modal_description = _createNode(\"div\");\n        consent_modal_description.id = \"c-txt\";\n        consent_modal_inner_inner.appendChild(consent_modal_description);\n      }\n\n      // Set description content\n      consent_modal_description.innerHTML = description;\n\n      var primary_btn_data = user_config.languages[lang][\"consent_modal\"][\"primary_btn\"], // accept current selection\n        secondary_btn_data = user_config.languages[lang][\"consent_modal\"][\"secondary_btn\"];\n\n      // Add primary button if not falsy\n      if (primary_btn_data) {\n        if (!consent_primary_btn) {\n          consent_primary_btn = _createNode(\"button\");\n          consent_primary_btn.id = \"c-p-bn\";\n          consent_primary_btn.className = \"c-bn\";\n\n          var _accept_type;\n\n          if (primary_btn_data[\"role\"] === \"accept_all\") _accept_type = \"all\";\n\n          _addEvent(consent_primary_btn, \"click\", function () {\n            _cookieconsent.hide();\n            _log(\"CookieConsent [ACCEPT]: cookie_consent was accepted!\");\n            _cookieconsent.accept(_accept_type);\n          });\n        }\n\n        consent_primary_btn.innerHTML =\n          user_config.languages[lang][\"consent_modal\"][\"primary_btn\"][\"text\"];\n      }\n\n      // Add secondary button if not falsy\n      if (secondary_btn_data) {\n        if (!consent_secondary_btn) {\n          consent_secondary_btn = _createNode(\"button\");\n          consent_secondary_btn.id = \"c-s-bn\";\n          consent_secondary_btn.className = \"c-bn c_link\";\n\n          if (secondary_btn_data[\"role\"] === \"accept_necessary\") {\n            _addEvent(consent_secondary_btn, \"click\", function () {\n              _cookieconsent.hide();\n              _cookieconsent.accept([]); // accept necessary only\n            });\n          } else {\n            _addEvent(consent_secondary_btn, \"click\", function () {\n              _cookieconsent.showSettings(0);\n            });\n          }\n        }\n\n        consent_secondary_btn.innerHTML =\n          user_config.languages[lang][\"consent_modal\"][\"secondary_btn\"][\"text\"];\n      }\n\n      // Swap buttons\n      var gui_options_data = user_config[\"gui_options\"];\n\n      if (!consent_modal_inner) {\n        consent_modal_inner = _createNode(\"div\");\n        consent_modal_inner.id = \"c-inr\";\n\n        consent_modal_inner.appendChild(consent_modal_inner_inner);\n      }\n\n      if (!consent_buttons) {\n        consent_buttons = _createNode(\"div\");\n        consent_buttons.id = \"c-bns\";\n\n        if (\n          gui_options_data &&\n          gui_options_data[\"consent_modal\"] &&\n          gui_options_data[\"consent_modal\"][\"swap_buttons\"] === true\n        ) {\n          secondary_btn_data && consent_buttons.appendChild(consent_secondary_btn);\n          primary_btn_data && consent_buttons.appendChild(consent_primary_btn);\n          consent_buttons.className = \"swap\";\n        } else {\n          primary_btn_data && consent_buttons.appendChild(consent_primary_btn);\n          secondary_btn_data && consent_buttons.appendChild(consent_secondary_btn);\n        }\n\n        (primary_btn_data || secondary_btn_data) &&\n          consent_modal_inner.appendChild(consent_buttons);\n        consent_modal.appendChild(consent_modal_inner);\n      }\n\n      consent_modal_exists = true;\n\n      _addDataButtonListeners(consent_modal_inner);\n    };\n\n    var _createSettingsModal = function (lang) {\n      /**\n       * Create all consent_modal elements\n       */\n      if (!settings_container) {\n        settings_container = _createNode(\"div\");\n        var settings_container_valign = _createNode(\"div\");\n        var settings = _createNode(\"div\");\n        var settings_container_inner = _createNode(\"div\");\n        settings_inner = _createNode(\"div\");\n        settings_title = _createNode(\"div\");\n        var settings_header = _createNode(\"div\");\n        settings_close_btn = _createNode(\"button\");\n        var settings_close_btn_container = _createNode(\"div\");\n        settings_blocks = _createNode(\"div\");\n        var overlay = _createNode(\"div\");\n\n        /**\n         * Set ids\n         */\n        settings_container.id = \"s-cnt\";\n        settings_container_valign.id = \"c-vln\";\n        settings_container_inner.id = \"c-s-in\";\n        settings.id = \"cs\";\n        settings_title.id = \"s-ttl\";\n        settings_inner.id = \"s-inr\";\n        settings_header.id = \"s-hdr\";\n        settings_blocks.id = \"s-bl\";\n        settings_close_btn.id = \"s-c-bn\";\n        overlay.id = \"cs-ov\";\n        settings_close_btn_container.id = \"s-c-bnc\";\n        settings_close_btn.className = \"c-bn\";\n\n        settings_container.setAttribute(\"role\", \"dialog\");\n        settings_container.setAttribute(\"aria-modal\", \"true\");\n        settings_container.setAttribute(\"aria-hidden\", \"true\");\n        settings_container.setAttribute(\"aria-labelledby\", \"s-ttl\");\n        settings_title.setAttribute(\"role\", \"heading\");\n        settings_container.style.visibility = overlay.style.visibility = \"hidden\";\n        overlay.style.opacity = 0;\n\n        settings_close_btn_container.appendChild(settings_close_btn);\n\n        // If 'esc' key is pressed inside settings_container div => hide settings\n        _addEvent(\n          settings_container_valign,\n          \"keydown\",\n          function (evt) {\n            evt = evt || window.event;\n            if (evt.keyCode === 27) {\n              _cookieconsent.hideSettings(0);\n            }\n          },\n          true\n        );\n\n        _addEvent(settings_close_btn, \"click\", function () {\n          _cookieconsent.hideSettings(0);\n        });\n      } else {\n        new_settings_blocks = _createNode(\"div\");\n        new_settings_blocks.id = \"s-bl\";\n      }\n\n      // Add label to close button\n      settings_close_btn.setAttribute(\n        \"aria-label\",\n        user_config.languages[lang][\"settings_modal\"][\"close_btn_label\"] || \"Close\"\n      );\n\n      all_blocks = user_config.languages[lang][\"settings_modal\"][\"blocks\"];\n      all_table_headers = user_config.languages[lang][\"settings_modal\"][\"cookie_table_headers\"];\n\n      var n_blocks = all_blocks.length;\n\n      // Set settings modal title\n      settings_title.innerHTML = user_config.languages[lang][\"settings_modal\"][\"title\"];\n\n      // Create settings modal content (blocks)\n      for (var i = 0; i < n_blocks; ++i) {\n        var title_data = all_blocks[i][\"title\"],\n          description_data = all_blocks[i][\"description\"],\n          toggle_data = all_blocks[i][\"toggle\"],\n          cookie_table_data = all_blocks[i][\"cookie_table\"],\n          remove_cookie_tables = user_config[\"remove_cookie_tables\"] === true,\n          isExpandable =\n            (description_data && \"truthy\") ||\n            (!remove_cookie_tables && cookie_table_data && \"truthy\");\n\n        // Create title\n        var block_section = _createNode(\"div\");\n        var block_table_container = _createNode(\"div\");\n\n        // Create description\n        if (description_data) {\n          var block_desc = _createNode(\"div\");\n          block_desc.className = \"p\";\n          block_desc.insertAdjacentHTML(\"beforeend\", description_data);\n        }\n\n        var block_title_container = _createNode(\"div\");\n        block_title_container.className = \"title\";\n\n        block_section.className = \"c-bl\";\n        block_table_container.className = \"desc\";\n\n        // Create toggle if specified (opt in/out)\n        if (typeof toggle_data !== \"undefined\") {\n          var accordion_id = \"c-ac-\" + i;\n\n          // Create button (to collapse/expand block description)\n          var block_title_btn = isExpandable ? _createNode(\"button\") : _createNode(\"div\");\n          var block_switch_label = _createNode(\"label\");\n          var block_switch = _createNode(\"input\");\n          var block_switch_span = _createNode(\"span\");\n          var label_text_span = _createNode(\"span\");\n\n          // These 2 spans will contain each 2 pseudo-elements to generate 'tick' and 'x' icons\n          var block_switch_span_on_icon = _createNode(\"span\");\n          var block_switch_span_off_icon = _createNode(\"span\");\n\n          block_title_btn.className = isExpandable ? \"b-tl exp\" : \"b-tl\";\n          block_switch_label.className = \"b-tg\";\n          block_switch.className = \"c-tgl\";\n          block_switch_span_on_icon.className = \"on-i\";\n          block_switch_span_off_icon.className = \"off-i\";\n          block_switch_span.className = \"c-tg\";\n          label_text_span.className = \"t-lb\";\n\n          if (isExpandable) {\n            block_title_btn.setAttribute(\"aria-expanded\", \"false\");\n            block_title_btn.setAttribute(\"aria-controls\", accordion_id);\n          }\n\n          block_switch.type = \"checkbox\";\n          block_switch_span.setAttribute(\"aria-hidden\", \"true\");\n\n          var cookie_category = toggle_data.value;\n          block_switch.value = cookie_category;\n\n          label_text_span.textContent = title_data;\n          block_title_btn.insertAdjacentHTML(\"beforeend\", title_data);\n\n          block_title_container.appendChild(block_title_btn);\n          block_switch_span.appendChild(block_switch_span_on_icon);\n          block_switch_span.appendChild(block_switch_span_off_icon);\n\n          /**\n           * If consent is valid => retrieve category states from cookie\n           * Otherwise use states defined in the user_config. object\n           */\n          if (!invalid_consent) {\n            if (_inArray(saved_cookie_content[\"categories\"], cookie_category) > -1) {\n              block_switch.checked = true;\n              !new_settings_blocks && toggle_states.push(true);\n            } else {\n              !new_settings_blocks && toggle_states.push(false);\n            }\n          } else if (toggle_data[\"enabled\"]) {\n            block_switch.checked = true;\n            !new_settings_blocks && toggle_states.push(true);\n\n            /**\n             * Keep track of categories enabled by default (useful when mode=='opt-out')\n             */\n            if (toggle_data[\"enabled\"])\n              !new_settings_blocks && default_enabled_categories.push(cookie_category);\n          } else {\n            !new_settings_blocks && toggle_states.push(false);\n          }\n\n          !new_settings_blocks && all_categories.push(cookie_category);\n\n          /**\n           * Set toggle as readonly if true (disable checkbox)\n           */\n          if (toggle_data[\"readonly\"]) {\n            block_switch.disabled = true;\n            _addClass(block_switch_span, \"c-ro\");\n            !new_settings_blocks && readonly_categories.push(true);\n          } else {\n            !new_settings_blocks && readonly_categories.push(false);\n          }\n\n          _addClass(block_table_container, \"b-acc\");\n          _addClass(block_title_container, \"b-bn\");\n          _addClass(block_section, \"b-ex\");\n\n          block_table_container.id = accordion_id;\n          block_table_container.setAttribute(\"aria-hidden\", \"true\");\n\n          block_switch_label.appendChild(block_switch);\n          block_switch_label.appendChild(block_switch_span);\n          block_switch_label.appendChild(label_text_span);\n          block_title_container.appendChild(block_switch_label);\n\n          /**\n           * On button click handle the following :=> aria-expanded, aria-hidden and act class for current block\n           */\n          isExpandable &&\n            (function (accordion, block_section, btn) {\n              _addEvent(\n                block_title_btn,\n                \"click\",\n                function () {\n                  if (!_hasClass(block_section, \"act\")) {\n                    _addClass(block_section, \"act\");\n                    btn.setAttribute(\"aria-expanded\", \"true\");\n                    accordion.setAttribute(\"aria-hidden\", \"false\");\n                  } else {\n                    _removeClass(block_section, \"act\");\n                    btn.setAttribute(\"aria-expanded\", \"false\");\n                    accordion.setAttribute(\"aria-hidden\", \"true\");\n                  }\n                },\n                false\n              );\n            })(block_table_container, block_section, block_title_btn);\n        } else {\n          /**\n           * If block is not a button (no toggle defined),\n           * create a simple div instead\n           */\n          if (title_data) {\n            var block_title = _createNode(\"div\");\n            block_title.className = \"b-tl\";\n            block_title.setAttribute(\"role\", \"heading\");\n            block_title.setAttribute(\"aria-level\", \"3\");\n            block_title.insertAdjacentHTML(\"beforeend\", title_data);\n            block_title_container.appendChild(block_title);\n          }\n        }\n\n        title_data && block_section.appendChild(block_title_container);\n        description_data && block_table_container.appendChild(block_desc);\n\n        // if cookie table found, generate table for this block\n        if (!remove_cookie_tables && typeof cookie_table_data !== \"undefined\") {\n          var tr_tmp_fragment = document.createDocumentFragment();\n\n          /**\n           * Use custom table headers\n           */\n          for (var p = 0; p < all_table_headers.length; ++p) {\n            // create new header\n            var th1 = _createNode(\"th\");\n            var obj = all_table_headers[p];\n            th1.setAttribute(\"scope\", \"col\");\n\n            // get custom header content\n            if (obj) {\n              var new_column_key = obj && _getKeys(obj)[0];\n              th1.textContent = all_table_headers[p][new_column_key];\n              tr_tmp_fragment.appendChild(th1);\n            }\n          }\n\n          var tr_tmp = _createNode(\"tr\");\n          tr_tmp.appendChild(tr_tmp_fragment);\n\n          // create table header & append fragment\n          var thead = _createNode(\"thead\");\n          thead.appendChild(tr_tmp);\n\n          // append header to table\n          var block_table = _createNode(\"table\");\n          block_table.appendChild(thead);\n\n          var tbody_fragment = document.createDocumentFragment();\n\n          // create table content\n          for (var n = 0; n < cookie_table_data.length; n++) {\n            var tr = _createNode(\"tr\");\n\n            for (var g = 0; g < all_table_headers.length; ++g) {\n              // get custom header content\n              obj = all_table_headers[g];\n              if (obj) {\n                new_column_key = _getKeys(obj)[0];\n\n                var td_tmp = _createNode(\"td\");\n\n                // Allow html inside table cells\n                td_tmp.insertAdjacentHTML(\"beforeend\", cookie_table_data[n][new_column_key]);\n                td_tmp.setAttribute(\"data-column\", obj[new_column_key]);\n\n                tr.appendChild(td_tmp);\n              }\n            }\n\n            tbody_fragment.appendChild(tr);\n          }\n\n          // append tbody_fragment to tbody & append the latter into the table\n          var tbody = _createNode(\"tbody\");\n          tbody.appendChild(tbody_fragment);\n          block_table.appendChild(tbody);\n\n          block_table_container.appendChild(block_table);\n        }\n\n        /**\n         * Append only if is either:\n         * - togglable div with title\n         * - a simple div with at least a title or description\n         */\n        if ((toggle_data && title_data) || (!toggle_data && (title_data || description_data))) {\n          block_section.appendChild(block_table_container);\n\n          if (new_settings_blocks) new_settings_blocks.appendChild(block_section);\n          else settings_blocks.appendChild(block_section);\n        }\n      }\n\n      // Create settings buttons\n      if (!settings_buttons) {\n        settings_buttons = _createNode(\"div\");\n        settings_buttons.id = \"s-bns\";\n      }\n\n      if (!settings_accept_all_btn) {\n        settings_accept_all_btn = _createNode(\"button\");\n        settings_accept_all_btn.id = \"s-all-bn\";\n        settings_accept_all_btn.className = \"c-bn\";\n        settings_buttons.appendChild(settings_accept_all_btn);\n\n        _addEvent(settings_accept_all_btn, \"click\", function () {\n          _cookieconsent.hideSettings();\n          _cookieconsent.hide();\n          _cookieconsent.accept(\"all\");\n        });\n      }\n\n      settings_accept_all_btn.innerHTML =\n        user_config.languages[lang][\"settings_modal\"][\"accept_all_btn\"];\n\n      var reject_all_btn_text = user_config.languages[lang][\"settings_modal\"][\"reject_all_btn\"];\n\n      // Add third [optional] reject all button if provided\n      if (reject_all_btn_text) {\n        if (!settings_reject_all_btn) {\n          settings_reject_all_btn = _createNode(\"button\");\n          settings_reject_all_btn.id = \"s-rall-bn\";\n          settings_reject_all_btn.className = \"c-bn\";\n\n          _addEvent(settings_reject_all_btn, \"click\", function () {\n            _cookieconsent.hideSettings();\n            _cookieconsent.hide();\n            _cookieconsent.accept([]);\n          });\n\n          settings_inner.className = \"bns-t\";\n          settings_buttons.appendChild(settings_reject_all_btn);\n        }\n\n        settings_reject_all_btn.innerHTML = reject_all_btn_text;\n      }\n\n      if (!settings_save_btn) {\n        settings_save_btn = _createNode(\"button\");\n        settings_save_btn.id = \"s-sv-bn\";\n        settings_save_btn.className = \"c-bn\";\n        settings_buttons.appendChild(settings_save_btn);\n\n        // Add save preferences button onClick event\n        // Hide both settings modal and consent modal\n        _addEvent(settings_save_btn, \"click\", function () {\n          _cookieconsent.hideSettings();\n          _cookieconsent.hide();\n          _cookieconsent.accept();\n        });\n      }\n\n      settings_save_btn.innerHTML =\n        user_config.languages[lang][\"settings_modal\"][\"save_settings_btn\"];\n\n      if (new_settings_blocks) {\n        // replace entire existing cookie category blocks with the new cookie categories new blocks (in a different language)\n        settings_inner.replaceChild(new_settings_blocks, settings_blocks);\n        settings_blocks = new_settings_blocks;\n        return;\n      }\n\n      settings_header.appendChild(settings_title);\n      settings_header.appendChild(settings_close_btn_container);\n      settings_inner.appendChild(settings_header);\n      settings_inner.appendChild(settings_blocks);\n      settings_inner.appendChild(settings_buttons);\n      settings_container_inner.appendChild(settings_inner);\n\n      settings.appendChild(settings_container_inner);\n      settings_container_valign.appendChild(settings);\n      settings_container.appendChild(settings_container_valign);\n\n      all_modals_container.appendChild(settings_container);\n      all_modals_container.appendChild(overlay);\n    };\n\n    /**\n     * Generate cookie consent html markup\n     */\n    var _createCookieConsentHTML = function () {\n      // Create main container which holds both consent modal & settings modal\n      main_container = _createNode(\"div\");\n      main_container.id = \"cc--main\";\n\n      // Fix layout flash\n      main_container.style.position = \"fixed\";\n      main_container.style.zIndex = \"2147483647\";\n      main_container.innerHTML = '<div id=\"cc_div\" class=\"cc_div\"></div>';\n      all_modals_container = main_container.children[0];\n\n      // Get current language\n      var lang = _config.current_lang;\n\n      // Create consent modal\n      if (consent_modal_exists) _createConsentModal(lang);\n\n      // Always create settings modal\n      _createSettingsModal(lang);\n\n      // Finally prepend everything (main_container holds both modals)\n      var rootEl = root || document.body;\n      rootEl.insertBefore(main_container, rootEl.firstChild);\n    };\n\n    /**\n     * Update/change modals language\n     * @param {String} lang new language\n     * @param {Boolean} [force] update language fields forcefully\n     * @returns {Boolean}\n     */\n    _cookieconsent.updateLanguage = function (lang, force) {\n      if (typeof lang !== \"string\") return;\n\n      /**\n       * Validate language to avoid errors\n       */\n      var new_validated_lang = _getValidatedLanguage(lang, user_config.languages);\n\n      /**\n       * Set language only if it differs from current\n       */\n      if (new_validated_lang !== _config.current_lang || force === true) {\n        _config.current_lang = new_validated_lang;\n\n        if (consent_modal_exists) {\n          _createConsentModal(new_validated_lang);\n        }\n\n        _createSettingsModal(new_validated_lang);\n\n        _log(\"CookieConsent [LANGUAGE]: curr_lang: '\" + new_validated_lang + \"'\");\n\n        return true;\n      }\n\n      return false;\n    };\n\n    /**\n     * Delete all cookies which are unused (based on selected preferences)\n     *\n     * @param {boolean} [clearOnFirstAction]\n     */\n    var _autoclearCookies = function (clearOnFirstAction) {\n      // Get number of blocks\n      var len = all_blocks.length;\n      var count = -1;\n\n      // reset reload state\n      reload_page = false;\n\n      // Retrieve all cookies\n      var all_cookies_array = _getCookie(\"\", \"all\");\n\n      // delete cookies on 'www.domain.com' and '.www.domain.com' (can also be without www)\n      var domains = [_config.cookie_domain, \".\" + _config.cookie_domain];\n\n      // if domain has www, delete cookies also for 'domain.com' and '.domain.com'\n      if (_config.cookie_domain.slice(0, 4) === \"www.\") {\n        var non_www_domain = _config.cookie_domain.substr(4); // remove first 4 chars (www.)\n        domains.push(non_www_domain);\n        domains.push(\".\" + non_www_domain);\n      }\n\n      // For each block\n      for (var i = 0; i < len; i++) {\n        // Save current block (local scope & less accesses -> ~faster value retrieval)\n        var curr_block = all_blocks[i];\n\n        // If current block has a toggle for opt in/out\n        if (Object.prototype.hasOwnProperty.call(curr_block, \"toggle\")) {\n          // if current block has a cookie table, an off toggle,\n          // and its preferences were just changed => delete cookies\n          var category_just_disabled =\n            _inArray(changed_settings, curr_block[\"toggle\"][\"value\"]) > -1;\n          if (\n            !toggle_states[++count] &&\n            Object.prototype.hasOwnProperty.call(curr_block, \"cookie_table\") &&\n            (clearOnFirstAction || category_just_disabled)\n          ) {\n            var curr_cookie_table = curr_block[\"cookie_table\"];\n\n            // Get first property name\n            var ckey = _getKeys(all_table_headers[0])[0];\n\n            // Get number of cookies defined in cookie_table\n            var clen = curr_cookie_table.length;\n\n            // set \"reload_page\" to true if reload=on_disable\n            if (curr_block[\"toggle\"][\"reload\"] === \"on_disable\")\n              category_just_disabled && (reload_page = true);\n\n            // for each row defined in the cookie table\n            for (var j = 0; j < clen; j++) {\n              var curr_domains = domains;\n\n              // Get current row of table (corresponds to all cookie params)\n              var curr_row = curr_cookie_table[j],\n                found_cookies = [];\n              var curr_cookie_name = curr_row[ckey];\n              var is_regex = curr_row[\"is_regex\"] || false;\n              var curr_cookie_domain = curr_row[\"domain\"] || null;\n              var curr_cookie_path = curr_row[\"path\"] || false;\n\n              // set domain to the specified domain\n              curr_cookie_domain && (curr_domains = [curr_cookie_domain, \".\" + curr_cookie_domain]);\n\n              // If regex provided => filter cookie array\n              if (is_regex) {\n                for (var n = 0; n < all_cookies_array.length; n++) {\n                  if (all_cookies_array[n].match(curr_cookie_name)) {\n                    found_cookies.push(all_cookies_array[n]);\n                  }\n                }\n              } else {\n                var found_index = _inArray(all_cookies_array, curr_cookie_name);\n                if (found_index > -1) found_cookies.push(all_cookies_array[found_index]);\n              }\n\n              _log(\n                \"CookieConsent [AUTOCLEAR]: search cookie: '\" + curr_cookie_name + \"', found:\",\n                found_cookies\n              );\n\n              // If cookie exists -> delete it\n              if (found_cookies.length > 0) {\n                _eraseCookies(found_cookies, curr_cookie_path, curr_domains);\n                curr_block[\"toggle\"][\"reload\"] === \"on_clear\" && (reload_page = true);\n              }\n            }\n          }\n        }\n      }\n    };\n\n    /**\n     * Set toggles/checkboxes based on accepted categories and save cookie\n     * @param {string[]} accepted_categories - Array of categories to accept\n     */\n    var _saveCookiePreferences = function (accepted_categories) {\n      changed_settings = [];\n\n      // Retrieve all toggle/checkbox values\n      var category_toggles = document.querySelectorAll(\".c-tgl\") || [];\n\n      // If there are opt in/out toggles ...\n      if (category_toggles.length > 0) {\n        for (var i = 0; i < category_toggles.length; i++) {\n          if (_inArray(accepted_categories, all_categories[i]) !== -1) {\n            category_toggles[i].checked = true;\n            if (!toggle_states[i]) {\n              changed_settings.push(all_categories[i]);\n              toggle_states[i] = true;\n            }\n          } else {\n            category_toggles[i].checked = false;\n            if (toggle_states[i]) {\n              changed_settings.push(all_categories[i]);\n              toggle_states[i] = false;\n            }\n          }\n        }\n      }\n\n      /**\n       * Clear cookies when settings/preferences change\n       */\n      if (!invalid_consent && _config.autoclear_cookies && changed_settings.length > 0)\n        _autoclearCookies();\n\n      if (!consent_date) consent_date = new Date();\n      if (!consent_uuid) consent_uuid = _uuidv4();\n\n      saved_cookie_content = {\n        categories: accepted_categories,\n        level: accepted_categories, // Copy of the `categories` property for compatibility purposes with version v2.8.0 and below.\n        revision: _config.revision,\n        data: cookie_data,\n        rfc_cookie: _config.use_rfc_cookie,\n        consent_date: consent_date.toISOString(),\n        consent_uuid: consent_uuid,\n      };\n\n      // save cookie with preferences 'categories' (only if never accepted or settings were updated)\n      if (invalid_consent || changed_settings.length > 0) {\n        valid_revision = true;\n\n        /**\n         * Update \"last_consent_update\" only if it is invalid (after t)\n         */\n        if (!last_consent_update) last_consent_update = consent_date;\n        else last_consent_update = new Date();\n\n        saved_cookie_content[\"last_consent_update\"] = last_consent_update.toISOString();\n\n        /**\n         * Update accept type\n         */\n        accept_type = _getAcceptType(_getCurrentCategoriesState());\n\n        _setCookie(_config.cookie_name, JSON.stringify(saved_cookie_content));\n        _manageExistingScripts();\n      }\n\n      if (invalid_consent) {\n        /**\n         * Delete unused/\"zombie\" cookies if consent is not valid (not yet expressed or cookie has expired)\n         */\n        if (_config.autoclear_cookies) _autoclearCookies(true);\n\n        if (typeof onFirstAction === \"function\")\n          onFirstAction(_cookieconsent.getUserPreferences(), saved_cookie_content);\n\n        if (typeof onAccept === \"function\") onAccept(saved_cookie_content);\n\n        /**\n         * Set consent as valid\n         */\n        invalid_consent = false;\n\n        if (_config.mode === \"opt-in\") return;\n      }\n\n      // fire onChange only if settings were changed\n      if (typeof onChange === \"function\" && changed_settings.length > 0)\n        onChange(saved_cookie_content, changed_settings);\n\n      /**\n       * reload page if needed\n       */\n      if (reload_page) window.location.reload();\n    };\n\n    /**\n     * Returns index of found element inside array, otherwise -1\n     * @param {Array} arr\n     * @param {Object} value\n     * @returns {number}\n     */\n    var _inArray = function (arr, value) {\n      return arr.indexOf(value);\n    };\n\n    /**\n     * Helper function which prints info (console.log())\n     * @param {Object} print_msg\n     * @param {Object} [optional_param]\n     */\n    var _log = function (print_msg, optional_param, error) {\n      ENABLE_LOGS &&\n        (!error\n          ? console.log(print_msg, optional_param !== undefined ? optional_param : \" \")\n          : console.error(print_msg, optional_param || \"\"));\n    };\n\n    /**\n     * Helper function which creates an HTMLElement object based on 'type' and returns it.\n     * @param {string} type\n     * @returns {HTMLElement}\n     */\n    var _createNode = function (type) {\n      var el = document.createElement(type);\n      if (type === \"button\") {\n        el.setAttribute(\"type\", type);\n      }\n      return el;\n    };\n\n    /**\n     * Generate RFC4122-compliant UUIDs.\n     * https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid?page=1&tab=votes#tab-top\n     * @returns {string}\n     */\n    var _uuidv4 = function () {\n      return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) {\n        try {\n          return (\n            c ^\n            ((window.crypto || window.msCrypto).getRandomValues(new Uint8Array(1))[0] &\n              (15 >> (c / 4)))\n          ).toString(16);\n        } catch (e) {\n          return \"\";\n        }\n      });\n    };\n\n    /**\n     * Resolve which language should be used.\n     *\n     * @param {Object} languages Object with language translations\n     * @param {string} [requested_language] Language specified by given configuration parameters\n     * @returns {string}\n     */\n    var _resolveCurrentLang = function (languages, requested_language) {\n      if (_config.auto_language === \"browser\") {\n        return _getValidatedLanguage(_getBrowserLang(), languages);\n      } else if (_config.auto_language === \"document\") {\n        return _getValidatedLanguage(document.documentElement.lang, languages);\n      } else {\n        if (typeof requested_language === \"string\") {\n          return (_config.current_lang = _getValidatedLanguage(requested_language, languages));\n        }\n      }\n\n      _log(\"CookieConsent [LANG]: setting current_lang = '\" + _config.current_lang + \"'\");\n      return _config.current_lang; // otherwise return default\n    };\n\n    /**\n     * Get current client's browser language\n     * @returns {string}\n     */\n    var _getBrowserLang = function () {\n      var browser_lang = navigator.language || navigator.browserLanguage;\n      browser_lang.length > 2 && (browser_lang = browser_lang[0] + browser_lang[1]);\n      _log(\"CookieConsent [LANG]: detected_browser_lang = '\" + browser_lang + \"'\");\n      return browser_lang.toLowerCase();\n    };\n\n    /**\n     * Trap focus inside modal and focus the first\n     * focusable element of current active modal\n     */\n    var _handleFocusTrap = function () {\n      var tabbedOutsideDiv = false;\n      var tabbedInsideModal = false;\n\n      _addEvent(document, \"keydown\", function (e) {\n        e = e || window.event;\n\n        // If is tab key => ok\n        if (e.key !== \"Tab\") return;\n\n        // If there is any modal to focus\n        if (current_modal_focusable) {\n          // If reached natural end of the tab sequence => restart\n          if (e.shiftKey) {\n            if (document.activeElement === current_modal_focusable[0]) {\n              current_modal_focusable[1].focus();\n              e.preventDefault();\n            }\n          } else {\n            if (document.activeElement === current_modal_focusable[1]) {\n              current_modal_focusable[0].focus();\n              e.preventDefault();\n            }\n          }\n\n          // If have not yet used tab (or shift+tab) and modal is open ...\n          // Focus the first focusable element\n          if (!tabbedInsideModal && !clicked_inside_modal) {\n            tabbedInsideModal = true;\n            !tabbedOutsideDiv && e.preventDefault();\n\n            if (e.shiftKey) {\n              if (current_modal_focusable[3]) {\n                if (!current_modal_focusable[2]) {\n                  current_modal_focusable[0].focus();\n                } else {\n                  current_modal_focusable[2].focus();\n                }\n              } else {\n                current_modal_focusable[1].focus();\n              }\n            } else {\n              if (current_modal_focusable[3]) {\n                current_modal_focusable[3].focus();\n              } else {\n                current_modal_focusable[0].focus();\n              }\n            }\n          }\n        }\n\n        !tabbedInsideModal && (tabbedOutsideDiv = true);\n      });\n\n      if (document.contains) {\n        _addEvent(\n          main_container,\n          \"click\",\n          function (e) {\n            e = e || window.event;\n            /**\n             * If click is on the foreground overlay (and not inside settings_modal),\n             * hide settings modal\n             *\n             * Notice: click on div is not supported in IE\n             */\n            if (settings_modal_visible) {\n              if (!settings_inner.contains(e.target)) {\n                _cookieconsent.hideSettings(0);\n                clicked_inside_modal = false;\n              } else {\n                clicked_inside_modal = true;\n              }\n            } else if (consent_modal_visible) {\n              if (consent_modal.contains(e.target)) {\n                clicked_inside_modal = true;\n              }\n            }\n          },\n          true\n        );\n      }\n    };\n\n    /**\n     * Manage each modal's layout\n     * @param {Object} gui_options\n     */\n    var _guiManager = function (gui_options, only_consent_modal) {\n      // If gui_options is not object => exit\n      if (typeof gui_options !== \"object\") return;\n\n      var consent_modal_options = gui_options[\"consent_modal\"];\n      var settings_modal_options = gui_options[\"settings_modal\"];\n\n      /**\n       * Helper function which adds layout and\n       * position classes to given modal\n       *\n       * @param {HTMLElement} modal\n       * @param {string[]} allowed_layouts\n       * @param {string[]} allowed_positions\n       * @param {string} layout\n       * @param {string[]} position\n       */\n      function _setLayout(\n        modal,\n        allowed_layouts,\n        allowed_positions,\n        allowed_transitions,\n        layout,\n        position,\n        transition\n      ) {\n        position = (position && position.split(\" \")) || [];\n\n        // Check if specified layout is valid\n        if (_inArray(allowed_layouts, layout) > -1) {\n          // Add layout classes\n          _addClass(modal, layout);\n\n          // Add position class (if specified)\n          if (\n            !(layout === \"bar\" && position[0] === \"middle\") &&\n            _inArray(allowed_positions, position[0]) > -1\n          ) {\n            for (var i = 0; i < position.length; i++) {\n              _addClass(modal, position[i]);\n            }\n          }\n        }\n\n        // Add transition class\n        _inArray(allowed_transitions, transition) > -1 && _addClass(modal, transition);\n      }\n\n      if (consent_modal_exists && consent_modal_options) {\n        _setLayout(\n          consent_modal,\n          [\"box\", \"bar\", \"cloud\"],\n          [\"top\", \"middle\", \"bottom\"],\n          [\"zoom\", \"slide\"],\n          consent_modal_options[\"layout\"],\n          consent_modal_options[\"position\"],\n          consent_modal_options[\"transition\"]\n        );\n      }\n\n      if (!only_consent_modal && settings_modal_options) {\n        _setLayout(\n          settings_container,\n          [\"bar\"],\n          [\"left\", \"right\"],\n          [\"zoom\", \"slide\"],\n          settings_modal_options[\"layout\"],\n          settings_modal_options[\"position\"],\n          settings_modal_options[\"transition\"]\n        );\n      }\n    };\n\n    /**\n     * Returns true if cookie category is accepted by the user\n     * @param {string} cookie_category\n     * @returns {boolean}\n     */\n    _cookieconsent.allowedCategory = function (cookie_category) {\n      if (!invalid_consent || _config.mode === \"opt-in\")\n        var allowed_categories =\n          JSON.parse(_getCookie(_config.cookie_name, \"one\", true) || \"{}\")[\"categories\"] || [];\n      // mode is 'opt-out'\n      else var allowed_categories = default_enabled_categories;\n\n      return _inArray(allowed_categories, cookie_category) > -1;\n    };\n\n    /**\n     * \"Init\" method. Will run once and only if modals do not exist\n     */\n    _cookieconsent.run = function (user_config) {\n      if (!document.getElementById(\"cc_div\")) {\n        // configure all parameters\n        _setConfig(user_config);\n\n        // if is bot, don't run plugin\n        if (is_bot) return;\n\n        // Retrieve cookie value (if set)\n        saved_cookie_content = JSON.parse(_getCookie(_config.cookie_name, \"one\", true) || \"{}\");\n\n        // Retrieve \"consent_uuid\"\n        consent_uuid = saved_cookie_content[\"consent_uuid\"];\n\n        // If \"consent_uuid\" is present => assume that consent was previously given\n        var cookie_consent_accepted = consent_uuid !== undefined;\n\n        // Retrieve \"consent_date\"\n        consent_date = saved_cookie_content[\"consent_date\"];\n        consent_date && (consent_date = new Date(consent_date));\n\n        // Retrieve \"last_consent_update\"\n        last_consent_update = saved_cookie_content[\"last_consent_update\"];\n        last_consent_update && (last_consent_update = new Date(last_consent_update));\n\n        // Retrieve \"data\"\n        cookie_data =\n          saved_cookie_content[\"data\"] !== undefined ? saved_cookie_content[\"data\"] : null;\n\n        // If revision is enabled and current value !== saved value inside the cookie => revision is not valid\n        if (revision_enabled && saved_cookie_content[\"revision\"] !== _config.revision) {\n          valid_revision = false;\n        }\n\n        // If consent is not valid => create consent modal\n        consent_modal_exists = invalid_consent =\n          !cookie_consent_accepted ||\n          !valid_revision ||\n          !consent_date ||\n          !last_consent_update ||\n          !consent_uuid;\n\n        // Generate cookie-settings dom (& consent modal)\n        _createCookieConsentHTML();\n\n        _getModalFocusableData();\n        _guiManager(user_config[\"gui_options\"]);\n        _addDataButtonListeners();\n\n        if (_config.autorun && consent_modal_exists) {\n          _cookieconsent.show(user_config[\"delay\"] || 0);\n        }\n\n        // Add class to enable animations/transitions\n        setTimeout(function () {\n          _addClass(main_container, \"c--anim\");\n        }, 30);\n\n        // Accessibility :=> if tab pressed => trap focus inside modal\n        setTimeout(function () {\n          _handleFocusTrap();\n        }, 100);\n\n        // If consent is valid\n        if (!invalid_consent) {\n          var rfc_prop_exists = typeof saved_cookie_content[\"rfc_cookie\"] === \"boolean\";\n\n          /*\n           * Convert cookie to rfc format (if `use_rfc_cookie` is enabled)\n           */\n          if (\n            !rfc_prop_exists ||\n            (rfc_prop_exists && saved_cookie_content[\"rfc_cookie\"] !== _config.use_rfc_cookie)\n          ) {\n            saved_cookie_content[\"rfc_cookie\"] = _config.use_rfc_cookie;\n            _setCookie(_config.cookie_name, JSON.stringify(saved_cookie_content));\n          }\n\n          /**\n           * Update accept type\n           */\n          accept_type = _getAcceptType(_getCurrentCategoriesState());\n\n          _manageExistingScripts();\n\n          if (typeof onAccept === \"function\") onAccept(saved_cookie_content);\n\n          _log(\"CookieConsent [NOTICE]: consent already given!\", saved_cookie_content);\n        } else {\n          if (_config.mode === \"opt-out\") {\n            _log(\n              \"CookieConsent [CONFIG] mode='\" + _config.mode + \"', default enabled categories:\",\n              default_enabled_categories\n            );\n            _manageExistingScripts(default_enabled_categories);\n          }\n          _log(\"CookieConsent [NOTICE]: ask for consent!\");\n        }\n      } else {\n        _log(\"CookieConsent [NOTICE]: cookie consent already attached to body!\");\n      }\n    };\n\n    /**\n     * Show settings modal (with optional delay)\n     * @param {number} delay\n     */\n    _cookieconsent.showSettings = function (delay) {\n      setTimeout(\n        function () {\n          _addClass(html_dom, \"show--settings\");\n          settings_container.setAttribute(\"aria-hidden\", \"false\");\n          settings_modal_visible = true;\n\n          /**\n           * Set focus to the first focusable element inside settings modal\n           */\n          setTimeout(function () {\n            // If there is no consent-modal, keep track of the last focused elem.\n            if (!consent_modal_visible) {\n              last_elem_before_modal = document.activeElement;\n            } else {\n              last_consent_modal_btn_focus = document.activeElement;\n            }\n\n            if (settings_modal_focusable.length === 0) return;\n\n            if (settings_modal_focusable[3]) {\n              settings_modal_focusable[3].focus();\n            } else {\n              settings_modal_focusable[0].focus();\n            }\n            current_modal_focusable = settings_modal_focusable;\n          }, 200);\n\n          _log(\"CookieConsent [SETTINGS]: show settings_modal\");\n        },\n        delay > 0 ? delay : 0\n      );\n    };\n\n    /**\n     * This function handles the loading/activation logic of the already\n     * existing scripts based on the current accepted cookie categories\n     *\n     * @param {string[]} [must_enable_categories]\n     */\n    var _manageExistingScripts = function (must_enable_categories) {\n      if (!_config.page_scripts) return;\n\n      // get all the scripts with \"cookie-category\" attribute\n      var scripts = document.querySelectorAll(\"script[\" + _config.script_selector + \"]\");\n      var accepted_categories = must_enable_categories || saved_cookie_content[\"categories\"] || [];\n\n      /**\n       * Load scripts (sequentially), using a recursive function\n       * which loops through the scripts array\n       * @param {Element[]} scripts scripts to load\n       * @param {number} index current script to load\n       */\n      var _loadScripts = function (scripts, index) {\n        if (index < scripts.length) {\n          var curr_script = scripts[index];\n          var curr_script_category = curr_script.getAttribute(_config.script_selector);\n\n          /**\n           * If current script's category is on the array of categories\n           * accepted by the user => load script\n           */\n          if (_inArray(accepted_categories, curr_script_category) > -1) {\n            curr_script.type = \"text/javascript\";\n            curr_script.removeAttribute(_config.script_selector);\n\n            // get current script data-src\n            var src = curr_script.getAttribute(\"data-src\");\n\n            // some scripts (like ga) might throw warning if data-src is present\n            src && curr_script.removeAttribute(\"data-src\");\n\n            // create fresh script (with the same code)\n            var fresh_script = _createNode(\"script\");\n            fresh_script.textContent = curr_script.innerHTML;\n\n            // Copy attributes over to the new \"revived\" script\n            (function (destination, source) {\n              var attributes = source.attributes;\n              var len = attributes.length;\n              for (var i = 0; i < len; i++) {\n                var attr_name = attributes[i].nodeName;\n                destination.setAttribute(\n                  attr_name,\n                  source[attr_name] || source.getAttribute(attr_name)\n                );\n              }\n            })(fresh_script, curr_script);\n\n            // set src (if data-src found)\n            src ? (fresh_script.src = src) : (src = curr_script.src);\n\n            // if script has \"src\" attribute\n            // try loading it sequentially\n            if (src) {\n              // load script sequentially => the next script will not be loaded\n              // until the current's script onload event triggers\n              if (fresh_script.readyState) {\n                // only required for IE <9\n                fresh_script.onreadystatechange = function () {\n                  if (\n                    fresh_script.readyState === \"loaded\" ||\n                    fresh_script.readyState === \"complete\"\n                  ) {\n                    fresh_script.onreadystatechange = null;\n                    _loadScripts(scripts, ++index);\n                  }\n                };\n              } else {\n                // others\n                fresh_script.onload = function () {\n                  fresh_script.onload = null;\n                  _loadScripts(scripts, ++index);\n                };\n              }\n            }\n\n            // Replace current \"sleeping\" script with the new \"revived\" one\n            curr_script.parentNode.replaceChild(fresh_script, curr_script);\n\n            /**\n             * If we managed to get here and scr is still set, it means that\n             * the script is loading/loaded sequentially so don't go any further\n             */\n            if (src) return;\n          }\n\n          // Go to next script right away\n          _loadScripts(scripts, ++index);\n        }\n      };\n\n      _loadScripts(scripts, 0);\n    };\n\n    /**\n     * Save custom data inside cookie\n     * @param {object|string} new_data\n     * @param {string} [mode]\n     * @returns {boolean}\n     */\n    var _setCookieData = function (new_data, mode) {\n      var set = false;\n      /**\n       * If mode is 'update':\n       * add/update only the specified props.\n       */\n      if (mode === \"update\") {\n        cookie_data = _cookieconsent.get(\"data\");\n        var same_type = typeof cookie_data === typeof new_data;\n\n        if (same_type && typeof cookie_data === \"object\") {\n          !cookie_data && (cookie_data = {});\n\n          for (var prop in new_data) {\n            if (cookie_data[prop] !== new_data[prop]) {\n              cookie_data[prop] = new_data[prop];\n              set = true;\n            }\n          }\n        } else if ((same_type || !cookie_data) && cookie_data !== new_data) {\n          cookie_data = new_data;\n          set = true;\n        }\n      } else {\n        cookie_data = new_data;\n        set = true;\n      }\n\n      if (set) {\n        saved_cookie_content[\"data\"] = cookie_data;\n        _setCookie(_config.cookie_name, JSON.stringify(saved_cookie_content));\n      }\n\n      return set;\n    };\n\n    /**\n     * Helper method to set a variety of fields\n     * @param {string} field\n     * @param {object} data\n     * @returns {boolean}\n     */\n    _cookieconsent.set = function (field, data) {\n      switch (field) {\n        case \"data\":\n          return _setCookieData(data[\"value\"], data[\"mode\"]);\n        default:\n          return false;\n      }\n    };\n\n    /**\n     * Retrieve data from existing cookie\n     * @param {string} field\n     * @param {string} [cookie_name]\n     * @returns {any}\n     */\n    _cookieconsent.get = function (field, cookie_name) {\n      var cookie = JSON.parse(_getCookie(cookie_name || _config.cookie_name, \"one\", true) || \"{}\");\n\n      return cookie[field];\n    };\n\n    /**\n     * Read current configuration value\n     * @returns {any}\n     */\n    _cookieconsent.getConfig = function (field) {\n      return _config[field] || user_config[field];\n    };\n\n    /**\n     * Obtain accepted and rejected categories\n     * @returns {{accepted: string[], rejected: string[]}}\n     */\n    var _getCurrentCategoriesState = function () {\n      // get accepted categories\n      accepted_categories = saved_cookie_content[\"categories\"] || [];\n\n      // calculate rejected categories (all_categories - accepted_categories)\n      rejected_categories = all_categories.filter(function (category) {\n        return _inArray(accepted_categories, category) === -1;\n      });\n\n      return {\n        accepted: accepted_categories,\n        rejected: rejected_categories,\n      };\n    };\n\n    /**\n     * Calculate \"accept type\" given current categories state\n     * @param {{accepted: string[], rejected: string[]}} currentCategoriesState\n     * @returns {string}\n     */\n    var _getAcceptType = function (currentCategoriesState) {\n      var type = \"custom\";\n\n      // number of categories marked as necessary/readonly\n      var necessary_categories_length = readonly_categories.filter(function (readonly) {\n        return readonly === true;\n      }).length;\n\n      // calculate accept type based on accepted/rejected categories\n      if (currentCategoriesState.accepted.length === all_categories.length) type = \"all\";\n      else if (currentCategoriesState.accepted.length === necessary_categories_length)\n        type = \"necessary\";\n\n      return type;\n    };\n\n    /**\n     * @typedef {object} userPreferences\n     * @property {string} accept_type\n     * @property {string[]} accepted_categories\n     * @property {string[]} rejected_categories\n     */\n\n    /**\n     * Retrieve current user preferences (summary)\n     * @returns {userPreferences}\n     */\n    _cookieconsent.getUserPreferences = function () {\n      var currentCategoriesState = _getCurrentCategoriesState();\n      var accept_type = _getAcceptType(currentCategoriesState);\n\n      return {\n        accept_type: accept_type,\n        accepted_categories: currentCategoriesState.accepted,\n        rejected_categories: currentCategoriesState.rejected,\n      };\n    };\n\n    /**\n     * Function which will run after script load\n     * @callback scriptLoaded\n     */\n\n    /**\n     * Dynamically load script (append to head)\n     * @param {string} src\n     * @param {scriptLoaded} callback\n     * @param {object[]} [attrs] Custom attributes\n     */\n    _cookieconsent.loadScript = function (src, callback, attrs) {\n      var function_defined = typeof callback === \"function\";\n\n      // Load script only if not already loaded\n      if (!document.querySelector('script[src=\"' + src + '\"]')) {\n        var script = _createNode(\"script\");\n\n        // if an array is provided => add custom attributes\n        if (attrs && attrs.length > 0) {\n          for (var i = 0; i < attrs.length; ++i) {\n            attrs[i] && script.setAttribute(attrs[i][\"name\"], attrs[i][\"value\"]);\n          }\n        }\n\n        // if callback function defined => run callback onload\n        if (function_defined) {\n          script.onload = callback;\n        }\n\n        script.src = src;\n\n        /**\n         * Append script to head\n         */\n        document.head.appendChild(script);\n      } else {\n        function_defined && callback();\n      }\n    };\n\n    /**\n     * Manage dynamically loaded scripts: https://github.com/orestbida/cookieconsent/issues/101\n     * If plugin has already run, call this method to enable\n     * the newly added scripts based on currently selected preferences\n     */\n    _cookieconsent.updateScripts = function () {\n      _manageExistingScripts();\n    };\n\n    /**\n     * Show cookie consent modal (with delay parameter)\n     * @param {number} [delay]\n     * @param {boolean} [create_modal] create modal if it doesn't exist\n     */\n    _cookieconsent.show = function (delay, create_modal) {\n      if (create_modal === true) _createConsentModal(_config.current_lang);\n\n      if (consent_modal_exists) {\n        setTimeout(\n          function () {\n            _addClass(html_dom, \"show--consent\");\n\n            /**\n             * Update attributes/internal statuses\n             */\n            consent_modal.setAttribute(\"aria-hidden\", \"false\");\n            consent_modal_visible = true;\n\n            setTimeout(function () {\n              last_elem_before_modal = document.activeElement;\n              current_modal_focusable = consent_modal_focusable;\n            }, 200);\n\n            _log(\"CookieConsent [MODAL]: show consent_modal\");\n          },\n          delay > 0 ? delay : create_modal ? 30 : 0\n        );\n      }\n    };\n\n    /**\n     * Hide consent modal\n     */\n    _cookieconsent.hide = function () {\n      if (consent_modal_exists) {\n        _removeClass(html_dom, \"show--consent\");\n        consent_modal.setAttribute(\"aria-hidden\", \"true\");\n        consent_modal_visible = false;\n\n        setTimeout(function () {\n          //restore focus to the last page element which had focus before modal opening\n          last_elem_before_modal.focus();\n          current_modal_focusable = null;\n        }, 200);\n\n        _log(\"CookieConsent [MODAL]: hide\");\n      }\n    };\n\n    /**\n     * Hide settings modal\n     */\n    _cookieconsent.hideSettings = function () {\n      _removeClass(html_dom, \"show--settings\");\n      settings_modal_visible = false;\n      settings_container.setAttribute(\"aria-hidden\", \"true\");\n\n      setTimeout(function () {\n        /**\n         * If consent modal is visible, focus him (instead of page document)\n         */\n        if (consent_modal_visible) {\n          last_consent_modal_btn_focus && last_consent_modal_btn_focus.focus();\n          current_modal_focusable = consent_modal_focusable;\n        } else {\n          /**\n           * Restore focus to last page element which had focus before modal opening\n           */\n          last_elem_before_modal && last_elem_before_modal.focus();\n          current_modal_focusable = null;\n        }\n\n        clicked_inside_modal = false;\n      }, 200);\n\n      _log(\"CookieConsent [SETTINGS]: hide settings_modal\");\n    };\n\n    /**\n     * Accept cookieconsent function API\n     * @param {string[]|string} _categories - Categories to accept\n     * @param {string[]} [_exclusions] - Excluded categories [optional]\n     */\n    _cookieconsent.accept = function (_categories, _exclusions) {\n      var categories = _categories || undefined;\n      var exclusions = _exclusions || [];\n      var to_accept = [];\n\n      /**\n       * Get all accepted categories\n       * @returns {string[]}\n       */\n      var _getCurrentPreferences = function () {\n        var toggles = document.querySelectorAll(\".c-tgl\") || [];\n        var states = [];\n\n        for (var i = 0; i < toggles.length; i++) {\n          if (toggles[i].checked) {\n            states.push(toggles[i].value);\n          }\n        }\n        return states;\n      };\n\n      if (!categories) {\n        to_accept = _getCurrentPreferences();\n      } else {\n        if (typeof categories === \"object\" && typeof categories.length === \"number\") {\n          for (var i = 0; i < categories.length; i++) {\n            if (_inArray(all_categories, categories[i]) !== -1) to_accept.push(categories[i]);\n          }\n        } else if (typeof categories === \"string\") {\n          if (categories === \"all\") to_accept = all_categories.slice();\n          else {\n            if (_inArray(all_categories, categories) !== -1) to_accept.push(categories);\n          }\n        }\n      }\n\n      // Remove excluded categories\n      if (exclusions.length >= 1) {\n        for (i = 0; i < exclusions.length; i++) {\n          to_accept = to_accept.filter(function (item) {\n            return item !== exclusions[i];\n          });\n        }\n      }\n\n      // Add back all the categories set as \"readonly/required\"\n      for (i = 0; i < all_categories.length; i++) {\n        if (readonly_categories[i] === true && _inArray(to_accept, all_categories[i]) === -1) {\n          to_accept.push(all_categories[i]);\n        }\n      }\n\n      _saveCookiePreferences(to_accept);\n    };\n\n    /**\n     * API function to easily erase cookies\n     * @param {(string|string[])} _cookies\n     * @param {string} [_path] - optional\n     * @param {string} [_domain] - optional\n     */\n    _cookieconsent.eraseCookies = function (_cookies, _path, _domain) {\n      var cookies = [];\n      var domains = _domain\n        ? [_domain, \".\" + _domain]\n        : [_config.cookie_domain, \".\" + _config.cookie_domain];\n\n      if (typeof _cookies === \"object\" && _cookies.length > 0) {\n        for (var i = 0; i < _cookies.length; i++) {\n          this.validCookie(_cookies[i]) && cookies.push(_cookies[i]);\n        }\n      } else {\n        this.validCookie(_cookies) && cookies.push(_cookies);\n      }\n\n      _eraseCookies(cookies, _path, domains);\n    };\n\n    /**\n     * Set cookie, by specifying name and value\n     * @param {string} name\n     * @param {string} value\n     */\n    var _setCookie = function (name, value) {\n      var cookie_expiration = _config.cookie_expiration;\n\n      if (\n        typeof _config.cookie_necessary_only_expiration === \"number\" &&\n        accept_type === \"necessary\"\n      )\n        cookie_expiration = _config.cookie_necessary_only_expiration;\n\n      value = _config.use_rfc_cookie ? encodeURIComponent(value) : value;\n\n      var date = new Date();\n      date.setTime(date.getTime() + 1000 * (cookie_expiration * 24 * 60 * 60));\n      var expires = \"; expires=\" + date.toUTCString();\n\n      var cookieStr = name + \"=\" + (value || \"\") + expires + \"; Path=\" + _config.cookie_path + \";\";\n      cookieStr += \" SameSite=\" + _config.cookie_same_site + \";\";\n\n      // assures cookie works with localhost (=> don't specify domain if on localhost)\n      if (window.location.hostname.indexOf(\".\") > -1) {\n        cookieStr += \" Domain=\" + _config.cookie_domain + \";\";\n      }\n\n      if (window.location.protocol === \"https:\") {\n        cookieStr += \" Secure;\";\n      }\n\n      document.cookie = cookieStr;\n\n      _log(\n        \"CookieConsent [SET_COOKIE]: '\" + name + \"' expires after \" + cookie_expiration + \" day(s)\"\n      );\n    };\n\n    /**\n     * Get cookie value by name,\n     * returns the cookie value if found (or an array\n     * of cookies if filter provided), otherwise empty string: \"\"\n     * @param {string} name\n     * @param {string} filter 'one' or 'all'\n     * @param {boolean} [get_value] set to true to obtain its value\n     * @returns {string|string[]}\n     */\n    var _getCookie = function (name, filter, get_value) {\n      var found;\n\n      if (filter === \"one\") {\n        found = document.cookie.match(\"(^|;)\\\\s*\" + name + \"\\\\s*=\\\\s*([^;]+)\");\n        found = found ? (get_value ? found.pop() : name) : \"\";\n\n        if (found && name === _config.cookie_name) {\n          try {\n            found = JSON.parse(found);\n          } catch (e) {\n            try {\n              found = JSON.parse(decodeURIComponent(found));\n            } catch (e) {\n              // if I got here => cookie value is not a valid json string\n              found = {};\n            }\n          }\n          found = JSON.stringify(found);\n        }\n      } else if (filter === \"all\") {\n        // array of names of all existing cookies\n        var cookies = document.cookie.split(/;\\s*/);\n        found = [];\n        for (var i = 0; i < cookies.length; i++) {\n          found.push(cookies[i].split(\"=\")[0]);\n        }\n      }\n\n      return found;\n    };\n\n    /**\n     * Delete cookie by name & path\n     * @param {string[]} cookies\n     * @param {string} [custom_path] - optional\n     * @param {string[]} domains - example: ['domain.com', '.domain.com']\n     */\n    var _eraseCookies = function (cookies, custom_path, domains) {\n      var path = custom_path ? custom_path : \"/\";\n      var expires = \"Expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\n\n      for (var i = 0; i < cookies.length; i++) {\n        for (var j = 0; j < domains.length; j++) {\n          document.cookie =\n            cookies[i] +\n            \"=; path=\" +\n            path +\n            (domains[j].indexOf(\".\") == 0 ? \"; domain=\" + domains[j] : \"\") +\n            \"; \" +\n            expires;\n        }\n        _log(\n          \"CookieConsent [AUTOCLEAR]: deleting cookie: '\" +\n            cookies[i] +\n            \"' path: '\" +\n            path +\n            \"' domain:\",\n          domains\n        );\n      }\n    };\n\n    /**\n     * Returns true if cookie was found and has valid value (not empty string)\n     * @param {string} cookie_name\n     * @returns {boolean}\n     */\n    _cookieconsent.validCookie = function (cookie_name) {\n      return _getCookie(cookie_name, \"one\", true) !== \"\";\n    };\n\n    /**\n     * Function to run when event is fired\n     * @callback eventFired\n     */\n\n    /**\n     * Add event listener to dom object (cross browser function)\n     * @param {Element} elem\n     * @param {string} event\n     * @param {eventFired} fn\n     * @param {boolean} [isPassive]\n     */\n    var _addEvent = function (elem, event, fn, isPassive) {\n      elem.addEventListener(event, fn, isPassive === true ? { passive: true } : false);\n    };\n\n    /**\n     * Get all prop. keys defined inside object\n     * @param {Object} obj\n     */\n    var _getKeys = function (obj) {\n      if (typeof obj === \"object\") {\n        return Object.keys(obj);\n      }\n    };\n\n    /**\n     * Append class to the specified dom element\n     * @param {HTMLElement} elem\n     * @param {string} classname\n     */\n    var _addClass = function (elem, classname) {\n      elem.classList.add(classname);\n    };\n\n    /**\n     * Remove specified class from dom element\n     * @param {HTMLElement} elem\n     * @param {string} classname\n     */\n    var _removeClass = function (el, className) {\n      el.classList.remove(className);\n    };\n\n    /**\n     * Check if html element has class\n     * @param {HTMLElement} el\n     * @param {string} className\n     */\n    var _hasClass = function (el, className) {\n      return el.classList.contains(className);\n    };\n\n    return _cookieconsent;\n  };\n\n  var init = \"initCookieConsent\";\n  /**\n   * Make CookieConsent object accessible globally\n   */\n  if (typeof window !== \"undefined\" && typeof window[init] !== \"function\") {\n    window[init] = CookieConsent;\n  }\n})();\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport \"./vendor/cookieconsent.js\";\n\nimport \"./vendor/cookieconsent.scss\";\n\nconst cc = window.initCookieConsent();\n\nconst OPTIONS = {\n  current_lang: \"en\",\n  autoclear_cookies: true,\n  cookie_name: \"_cc\",\n  cookie_expiration: 365,\n  page_scripts: true,\n\n  // auto_language: null, // default: null; could also be 'browser' or 'document'\n  autorun: false,\n  delay: 1000,\n  // force_consent: false,\n  // hide_from_bots: false,\n  // remove_cookie_tables: false,\n  // cookie_domain: location.hostname,\n  // cookie_path: \"/\",\n  // cookie_same_site: \"Lax\",\n  // use_rfc_cookie: false,\n  revision: 0,\n\n  gui_options: {\n    consent_modal: {\n      layout: \"box\",\n      position: \"top left\",\n      transition: \"slide\",\n    },\n    settings_modal: {\n      layout: \"box\",\n      transition: \"slide\",\n    },\n  },\n  languages: {\n    en: {\n      consent_modal: {\n        title: \"Cookies\",\n        description:\n          \"This website uses essential cookies to ensure its proper operation and tracking cookies to understand how you interact with it.\" +\n          '<br>The latter will be set only after your consent. <button type=\"button\" data-cc=\"c-settings\" class=\"cc-link\">Cookie settings</button>',\n        primary_btn: {\n          text: \"Accept all\",\n          role: \"accept_all\", // 'accept_selected' or 'accept_all'\n        },\n        secondary_btn: {\n          text: \"Reject all\",\n          role: \"accept_necessary\", // 'settings' or 'accept_necessary'\n        },\n      },\n      settings_modal: {\n        title: \"Title\",\n        save_settings_btn: \"Save settings\",\n        accept_all_btn: \"Accept all\",\n        reject_all_btn: \"Reject all\",\n        close_btn_label: \"Close\",\n        cookie_table_headers: [\n          { col1: \"Name\" },\n          { col2: \"Domain\" },\n          { col3: \"Expiration\" },\n          { col4: \"Description\" },\n        ],\n        blocks: [\n          {\n            title: \"Cookie usage\",\n            description:\n              'We use cookies to ensure the basic functionalities of the website and to enhance your online experience. You can choose for each category to opt-in/out whenever you want. For more details relative to cookies and other sensitive data, please read the full <a href=\"/legal/dpp/\" class=\"cc-link\">privacy policy</a>.',\n          },\n          {\n            title: \"Strictly necessary\",\n            description:\n              \"These cookies are essential for the proper functioning of my website. Without these cookies, the website would not work properly\",\n            toggle: {\n              value: \"necessary\",\n              enabled: true,\n              readonly: true, // cookie categories with readonly=true are all treated as \"necessary cookies\"\n            },\n          },\n          {\n            title: \"Analytics\",\n            description:\n              \"These cookies allow the website to remember the choices you have made in the past\",\n            toggle: {\n              value: \"analytics\", // there are no default categories => you specify them\n              enabled: false,\n              readonly: false,\n            },\n            cookie_table: [\n              {\n                col1: \"_ga^\",\n                col2: window.location.hostname,\n                col3: \"1 year\",\n                col4: \"description ...\",\n                is_regex: true,\n              },\n            ],\n          },\n          // {\n          //   title: \"More information\",\n          //   description:\n          //     'For any queries in relation to our policy on cookies and your choices, please <a class=\"cc-link\" href=\"https://orestbida.com/contact\">contact me</a>.',\n          // },\n        ],\n      },\n    },\n  },\n};\n\nexport default defineComponent({\n  components: {},\n  setup() {\n    const onFirstAction = () => {\n      console.debug(\"onFirstAction\");\n    };\n    const onAccept = (cookie: any) => {\n      console.debug(\"onAccept\", cookie);\n    };\n    const onChange = (cookie: any, changed_preferences: any) => {\n      console.debug(\"onChange\", cookie, changed_preferences);\n    };\n    const options = {\n      ...OPTIONS,\n      onFirstAction,\n      onAccept,\n      onChange,\n    };\n    if (!document.getElementById(\"cc--main\")) {\n      // @ts-ignore\n      cc.run(options);\n    }\n    return {};\n  },\n});\n</script>\n\n<template>\n  <div />\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from \"vue-i18n\";\n\nimport { useDevice } from \"@/composables/device\";\n\nconst { t } = useI18n();\nconst { isWeb } = useDevice();\n</script>\n\n<template>\n  <nav v-if=\"isWeb\" class=\"legal-links\">\n    <div class=\"link-group\">\n      <router-link to=\"/legal/dpp/\" v-text=\"t('menu.dpp')\" />\n      <router-link to=\"/legal/terms/\" v-text=\"t('menu.terms')\" />\n      <router-link to=\"/legal/imprint/\" v-text=\"t('menu.imprint')\" />\n    </div>\n  </nav>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/live-color\";\n@use \"@/style/base/responsive\";\n\n.legal-links {\n  @include live-color.bg;\n\n  position: fixed;\n  z-index: 99;\n  width: 100%;\n  bottom: 0;\n  padding: 0 1rem;\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  font-size: var(--t-fs-small);\n  font-weight: 300;\n  border-top: 1px solid rgb(var(--c-page-fg) / 20%);\n\n  @include responsive.bp-medium {\n    justify-content: center;\n  }\n\n  > .link-group {\n    display: flex;\n    align-items: flex-end;\n    padding: 0.25rem 0 0.5rem;\n    justify-content: center;\n\n    > a {\n      @include live-color.fg;\n\n      padding: 4px 8px;\n\n      &:hover {\n        text-decoration: underline;\n      }\n    }\n  }\n}\n</style>\n","import { APIClient } from \"@/api/client\";\nimport settings from \"@/settings\";\n\nconst SEARCH_ENDPOINT = `${settings.API_BASE_URL}search/`;\n\nasync function getGlobalMediaSearchResults(q: string, limit = 100) {\n  const url = `${SEARCH_ENDPOINT}global/media/`;\n  const params = {\n    q,\n    limit,\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\nexport { getGlobalMediaSearchResults };\n","<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport { useDevice } from \"@/composables/device\";\n\nexport default defineComponent({\n  props: {\n    modelValue: {\n      type: String,\n      default: \"\",\n    },\n  },\n  emits: [\"update:modelValue\"],\n  setup(props, { emit }) {\n    const { t } = useI18n();\n    const { isMobile } = useDevice();\n    const q = computed({\n      get: () => props.modelValue,\n      set: (value: string) => emit(\"update:modelValue\", value),\n    });\n    const searchInput = ref<HTMLInputElement | null>(null);\n    onMounted(() => {\n      searchInput.value?.focus();\n      if (isMobile) {\n        // scroll to top after displaying on-screen keyboard\n        setTimeout(() => {\n          window.scrollTo(0, 0);\n        }, 100);\n      }\n    });\n    return {\n      t,\n      q,\n      searchInput,\n      close,\n    };\n  },\n});\n</script>\n<template>\n  <div class=\"search-input\">\n    <input ref=\"searchInput\" v-model=\"q\" type=\"text\" :placeholder=\"t('search.search')\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.search-input {\n  > input {\n    @include typo.large;\n    @include typo.bold;\n\n    color: rgba(var(--c-dark) / 100%);\n    background: rgba(var(--c-light) / 100%);\n    border: none;\n    width: 100%;\n\n    &:focus {\n      outline: none;\n    }\n\n    &::placeholder {\n      color: rgb(var(--c-dark) / 20%);\n    }\n  }\n}\n</style>\n","import { APIClient } from \"@/api/client\";\nimport { useAPIBaseUrl } from \"@/composables/api\";\nimport type { Artist, Mood } from \"@/typings/api\";\n\nconst { APIBaseUrl } = useAPIBaseUrl();\n\nconst MOOD_ENDPOINT = `${APIBaseUrl.value}catalog/moods/`;\nconst PLAYLIST_ENDPOINT = `${APIBaseUrl.value}catalog/playlists/`;\nconst ARTIST_ENDPOINT = `${APIBaseUrl.value}catalog/artists/`;\nconst MEDIA_ENDPOINT = `${APIBaseUrl.value}catalog/media/`;\n\ninterface MoodListResponse {\n  results: Array<Mood>;\n}\n\nasync function getMoods(limit: number, offset: number) {\n  const url = MOOD_ENDPOINT;\n  const params = {\n    limit,\n    offset,\n  };\n  const response = await APIClient.get<MoodListResponse>(url, { params });\n  return response.data;\n}\n\nasync function getMood(uid: string) {\n  const url = `${MOOD_ENDPOINT}${uid}/`;\n  const response = await APIClient.get<Mood>(url);\n  return response.data;\n}\n\nasync function getArtists(\n  limit: number,\n  offset: number,\n  filter: any,\n  ordering: Array<string> = [],\n  expand: Array<string> = []\n) {\n  const url = ARTIST_ENDPOINT;\n  const params = {\n    limit,\n    offset,\n    ordering: ordering.join(\",\"),\n    expand,\n    ...filter,\n  };\n  const response = await APIClient.get<{\n    results: Array<Artist>;\n    count: number;\n    next: string | null;\n  }>(url, { params });\n  return response.data;\n}\n\nasync function getArtistsTags(filter: any) {\n  const url = `${ARTIST_ENDPOINT}tags/`;\n  const params = {\n    ...filter,\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\nasync function getArtist(uid: string) {\n  const url = `${ARTIST_ENDPOINT}${uid}/`;\n  const params = {\n    expand: [\"tags\", \"identifiers\"],\n  };\n  const response = await APIClient.get<Artist>(url, { params });\n  return response.data;\n}\n\nasync function getMedia(limit: number, offset: number, filter: any, ordering: Array<string> = []) {\n  const url = MEDIA_ENDPOINT;\n  const params = {\n    limit,\n    offset,\n    ordering: ordering.join(\",\"),\n    ...filter,\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\nasync function getMediaTags(filter: any) {\n  const url = `${MEDIA_ENDPOINT}tags/`;\n  const params = {\n    ...filter,\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\nasync function getMediaDetail(uid: string) {\n  const url = `${MEDIA_ENDPOINT}${uid}/`;\n  const params = {\n    expand: [\"tags\", \"identifiers\"],\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\n// const check = () => 'checked.';\n\nasync function getPlaylists(\n  limit: number,\n  offset: number,\n  filter: any,\n  ordering: Array<string> = [],\n  expand: Array<string> = []\n) {\n  const url = PLAYLIST_ENDPOINT;\n  const params = {\n    limit,\n    offset,\n    ordering: ordering.join(\",\"),\n    expand,\n    ...filter,\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\nasync function getPlaylistsTags(filter: any) {\n  const url = `${PLAYLIST_ENDPOINT}tags/`;\n  const params = {\n    ...filter,\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\nasync function getPlaylist(uid: string) {\n  const url = `${PLAYLIST_ENDPOINT}${uid}/`;\n  const params = {\n    expand: [\"media_set\", \"tags\", \"editor\", \"duration\", \"latest_emission\"],\n  };\n  const response = await APIClient.get(url, { params });\n  return response.data;\n}\n\nexport {\n  getArtist,\n  getArtists,\n  getArtistsTags,\n  getMedia,\n  getMediaDetail,\n  getMediaTags,\n  getMood,\n  getMoods,\n  getPlaylist,\n  getPlaylists,\n  getPlaylistsTags,\n};\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"none\",\n        stroke: color.value,\n        strokeWidth: 3,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <rect x=\"15\" y=\"14\" width=\"6\" height=\"20\" />\n    <rect x=\"27\" y=\"14\" width=\"6\" height=\"20\" />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"transparent\",\n        stroke: color.value,\n        strokeWidth: 3,\n        strokeMiterlimit: 10,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <polygon points=\"34.7,24 17.3,32.7 17.3,15.3 \" />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"none\",\n        stroke: color.value,\n        strokeWidth: 3,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <line x1=\"15\" y1=\"0\" x2=\"15\" y2=\"16\" />\n    <line x1=\"21\" y1=\"0\" x2=\"21\" y2=\"16\" />\n    <line x1=\"27\" y1=\"0\" x2=\"27\" y2=\"16\" />\n    <line x1=\"33\" y1=\"0\" x2=\"33\" y2=\"16\" />\n  </svg>\n</template>\n\n<style lang=\"scss\" scoped>\n@keyframes eq {\n  0%,\n  80%,\n  100% {\n    transform: scaleY(40%);\n  }\n\n  35% {\n    transform: scaleY(100%);\n  }\n\n  50% {\n    transform: scaleY(60%);\n  }\n\n  /* stylelint-disable-next-line keyframe-block-no-duplicate-selectors */\n  80% {\n    transform: scaleY(80%);\n  }\n}\n\nsvg {\n  transform: rotate(180deg) translateY(32%);\n\n  line {\n    animation: eq 1200ms infinite;\n\n    &:nth-child(1) {\n      animation-delay: -550ms;\n    }\n\n    &:nth-child(2) {\n      animation-delay: -700ms;\n    }\n\n    &:nth-child(3) {\n      animation-delay: -350ms;\n    }\n\n    &:nth-child(4) {\n      animation-delay: -250ms;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"transparent\",\n        stroke: color.value,\n        strokeWidth: 3,\n        strokeMiterlimit: 10,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      color,\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <polygon :stroke=\"color\" points=\"34.7,24 22,30.4 22,17.6\" />\n    <polygon\n      :fill=\"color\"\n      stroke-width=\"0\"\n      points=\"18.2,30.8 18.2,17.2 18.2,14.4 15.8,13.1 15.8,34.9 18.2,33.6\"\n    />\n  </svg>\n</template>\n","const CONTRAST_BREAKPOINT = 86;\n\nconst getMediaColor = (media: any) => {\n  // @ts-ignore\n  if (!(media.releases && media.releases.length)) {\n    return null;\n  }\n  // @ts-ignore\n  return media.releases[0].image?.rgb;\n};\n\nconst getContrastColor = (rgb: Array<number>) => {\n  const mean = rgb.reduce((s, b) => s + b, 0) / 3;\n  return mean > CONTRAST_BREAKPOINT ? [0, 0, 0] : [255, 255, 255];\n};\n\nconst getAppTheme = (rgb: Array<number>) => {\n  const mean = rgb.reduce((s, b) => s + b, 0) / 3;\n  return mean > CONTRAST_BREAKPOINT ? \"dark\" : \"light\";\n};\n\nconst setBodyColorTheme = (theme: string) => {\n  const { body } = document;\n  body.setAttribute(\"data-page-theme\", theme);\n};\n\nexport { getAppTheme, getContrastColor, getMediaColor, setBodyColorTheme };\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent, ref } from \"vue\";\n\nimport IconBuffering from \"@/components/ui/icon/IconBuffering.vue\";\nimport IconPause from \"@/components/ui/icon/IconPause.vue\";\nimport IconPlay from \"@/components/ui/icon/IconPlay.vue\";\nimport IconPlaying from \"@/components/ui/icon/IconPlaying.vue\";\nimport IconPlayQueued from \"@/components/ui/icon/IconPlayQueued.vue\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { useDevice } from \"@/composables/device\";\nimport { useIconSize } from \"@/composables/icon\";\nimport { getContrastColor } from \"@/utils/color\";\n\nexport default defineComponent({\n  components: {},\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    baseColor: {\n      type: Array as PropType<Array<number>>,\n      default: () => [10, 10, 10],\n    },\n    activeColor: {\n      type: Array as PropType<Array<number>>,\n      default: () => [10, 10, 10],\n    },\n    fillColor: {\n      type: Array as PropType<Array<number>>,\n      default: () => [10, 10, 10],\n    },\n    isPlaying: {\n      type: Boolean,\n      default: false,\n    },\n    isBuffering: {\n      type: Boolean,\n      default: false,\n    },\n    isActive: {\n      type: Boolean,\n      default: false,\n    },\n    inQueue: {\n      type: Boolean,\n      default: false,\n    },\n    outlined: {\n      type: Boolean,\n      default: false,\n    },\n    filled: {\n      type: Boolean,\n      default: false,\n    },\n    outlineWidth: {\n      type: Number,\n      default: 1,\n    },\n    outlineOpacity: {\n      type: String,\n      default: \"15%\",\n    },\n    shadowed: {\n      type: Boolean,\n      default: false,\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: [\"play\", \"pause\"],\n  setup(props, { emit }) {\n    const { isMobile } = useDevice();\n    const { iconSize } = useIconSize(props.scale);\n    const { logUIEvent } = useAnalytics();\n    const isHover = ref(false);\n    const icon = computed(() => {\n      if (props.isBuffering) {\n        return IconBuffering;\n      }\n      if (props.isPlaying && isHover.value) {\n        return IconPause;\n      }\n      if (props.isPlaying) {\n        return IconPlaying;\n      }\n      if (props.inQueue) {\n        return IconPlayQueued;\n      }\n      return IconPlay;\n    });\n    const action = computed(() => {\n      if (props.isBuffering || props.isPlaying) {\n        return \"pause\";\n      }\n      return \"play\";\n    });\n    const handleClick = () => {\n      emit(action.value);\n      logUIEvent(`player:${action.value}`);\n    };\n    const fgColor = computed(() => {\n      if (props.isActive) {\n        return getContrastColor(props.activeColor);\n      }\n      return props.baseColor;\n    });\n    const bgColor = computed(() => {\n      if (props.isActive) {\n        return props.activeColor;\n      }\n      return props.fillColor;\n    });\n    const isOutlined = computed(() => {\n      return props.outlined;\n    });\n    const isFilled = computed(() => {\n      if (props.isActive) {\n        return true;\n      }\n      return props.filled;\n    });\n    const hoverBgOpacity = computed(() => {\n      if (isFilled.value) {\n        return \"80%\";\n      }\n      return \"10%\";\n    });\n    return {\n      icon,\n      iconSize,\n      isMobile,\n      isHover,\n      handleClick,\n      //\n      fgColor,\n      bgColor,\n      isOutlined,\n      isFilled,\n      hoverBgOpacity,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"button-play\"\n    :class=\"{\n      'is-outlined': isOutlined,\n      'is-filled': isFilled,\n      'is-hover': isHover,\n    }\"\n    :style=\"{\n      '--size': `${iconSize}px`,\n      '--c-fg': fgColor.join(' '),\n      '--c-bg': bgColor.join(' '),\n      '--hover-bg-opacity': hoverBgOpacity,\n      '--outline-width': `${outlineWidth}px`,\n      '--outline-opacity': outlineOpacity,\n    }\"\n  >\n    <component :is=\"icon\" :scale=\"scale\" />\n    <div v-if=\"isOutlined\" class=\"outline\" />\n    <div\n      @click.prevent=\"handleClick\"\n      @mouseenter=\"isMobile ? null : (isHover = true)\"\n      @mouseleave=\"isMobile ? null : (isHover = false)\"\n      class=\"trigger-area\"\n    />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n\n.button-play {\n  position: relative;\n  display: inline-grid;\n  align-items: center;\n  justify-content: center;\n  border-radius: calc(var(--size) / 2);\n  cursor: pointer;\n  transition: background-color 750ms;\n\n  .outline {\n    top: -1px;\n    position: absolute;\n    height: calc(100% + 2px);\n    width: calc(100% + 2px);\n    left: -1px;\n    border: var(--outline-width) solid rgb(var(--c-fg) / var(--outline-opacity));\n    border-radius: calc(var(--size) / 2);\n  }\n\n  &.is-filled {\n    background: rgb(var(--c-bg));\n  }\n\n  @include responsive.on-hover {\n    transition: background-color 200ms;\n    background: rgb(var(--c-bg) / var(--hover-bg-opacity));\n  }\n}\n\n.trigger-area {\n  position: absolute;\n  height: var(--size);\n  width: var(--size);\n  background: transparent;\n  border-radius: calc(var(--size) / 2);\n}\n</style>\n","import { computed, isReactive, isRef, ref, unref, watchEffect } from \"vue\";\n\nconst useObjKey = (obj: any) => {\n  const objKey = ref(\"\");\n  const setObjKey = () => {\n    const o = unref(obj);\n    // console.debug(\"useObjKey: setObjKey\", {\n    //   obj,\n    //   o,\n    // });\n    objKey.value = o?.ct && o?.uid ? `${o.ct}:${o.uid}` : \"\";\n  };\n  if (isRef(obj)) {\n    // console.debug(\"useObjKey: isRef\", obj);\n    watchEffect(setObjKey);\n  } else if (isReactive(obj)) {\n    // console.debug(\"useObjKey: isReactive\", obj);\n    watchEffect(setObjKey);\n  } else {\n    // console.debug(\"useObjKey: non-ref value\", obj);\n    setObjKey();\n  }\n  return {\n    objKey,\n  };\n};\n\nconst useObjCtUid = (objKey: string) => {\n  const parts = computed(() => {\n    if (!objKey) {\n      return [];\n    }\n    return objKey.split(\":\");\n  });\n  const objCt = computed(() => {\n    return parts.value.length === 2 ? parts.value[0] : null;\n  });\n  const objUid = computed(() => {\n    return parts.value.length === 2 ? parts.value[1] : null;\n  });\n  return {\n    objCt,\n    objUid,\n  };\n};\n\nexport { useObjCtUid, useObjKey };\n","import { computed } from \"vue\";\nimport { storeToRefs } from \"pinia\";\n\nimport { useDevice } from \"@/composables/device\";\nimport type { CueFade, NewsProvider } from \"@/player/hlsPlayer\";\nimport { usePlayerStore } from \"@/stores/player\";\nimport type { AnnotatedMedia } from \"@/stores/queue\";\nimport { useQueueStore } from \"@/stores/queue\";\nimport { useScheduleStore } from \"@/stores/schedule\";\n\nexport const usePlayerState = () => {\n  const {\n    isVisible,\n    mode,\n    isLive,\n    isNews,\n    isOndemand,\n    isBuffering,\n    isPlaying,\n    isPaused,\n    playState,\n    duration,\n    currentTime,\n    newsProvider,\n    relPosition,\n    liveLatency,\n    bandwidth,\n    //\n    debugData,\n  } = storeToRefs(usePlayerStore());\n\n  const { currentMedia: scheduleMedia, nextMedia: scheduleNextMedia } = storeToRefs(\n    useScheduleStore()\n  );\n  const { currentMedia: queueMedia, nextMedia: queueNextMedia } = storeToRefs(useQueueStore());\n\n  const media = computed(() => {\n    return isLive.value ? scheduleMedia.value : queueMedia.value;\n  });\n\n  const nextMedia = computed(() => {\n    if (isLive.value) {\n      return scheduleNextMedia.value;\n    }\n    return queueNextMedia.value ? queueNextMedia.value : scheduleMedia.value;\n  });\n\n  const scope = computed(() => {\n    if (!media.value) {\n      return [];\n    }\n    // @ts-ignore\n    return [...(media.value?.scope ?? []), `${media.value.ct}:${media.value.uid}`];\n  });\n\n  const image = computed(() => {\n    const release = media.value?.releases?.length ? media.value.releases[0] : null;\n    return release ? release.image : null;\n  });\n\n  const color = computed(() => {\n    return image.value?.rgb ?? [0, 0, 0];\n  });\n\n  return {\n    isVisible,\n    mode,\n    isLive,\n    isNews,\n    isOndemand,\n    isBuffering,\n    isPlaying,\n    isPaused,\n    playState,\n    duration,\n    currentTime,\n    newsProvider,\n    relPosition,\n    liveLatency,\n    bandwidth,\n    //\n    media,\n    nextMedia,\n    scope,\n    image,\n    color,\n    //\n    debugData,\n  };\n};\n\nexport const usePlayerControls = () => {\n  const player = window.hlsPlayer;\n  const appBridge = window.appBridge;\n\n  const { setVisibility } = usePlayerStore();\n\n  const { isWeb } = useDevice();\n\n  // web-mode controls\n  const playLive = async () => {\n    setVisibility(true);\n    await player.playLive();\n  };\n  const playNews = async (provider: NewsProvider) => {\n    await player.playNews(provider);\n  };\n  const endPlayNews = async () => {\n    await player.endPlayNews();\n  };\n  const playUid = async (uid: string, estimatedDuration?: number, cueFade?: CueFade) => {\n    setVisibility(true);\n    await player.playUid(uid, estimatedDuration, cueFade);\n  };\n  const playMedia = async (media: AnnotatedMedia) => {\n    const uid = media?.uid ?? \"\";\n    const estimatedDuration = media?.duration ?? 0;\n    const cueFade = {\n      cueIn: media?.cueIn ?? 0,\n      cueOut: media?.cueOut ?? 0,\n      fadeIn: media?.fadeIn ?? 0,\n      fadeOut: media?.fadeOut ?? 0,\n    };\n    console.debug(\"playMedia\", uid, cueFade);\n    await playUid(uid, estimatedDuration, cueFade);\n  };\n  const pause = () => player.pause();\n  const resume = () => player.resume();\n  const seek = (pos: number) => player.seek(pos);\n\n  // app-mode controls\n  const appPlayLive = async () => {\n    await appBridge.send(\"player:playLive\");\n  };\n  const appPause = async () => {\n    await appBridge.send(\"player:pause\");\n  };\n  const appResume = async () => {\n    await appBridge.send(\"player:resume\");\n  };\n  const appSeek = async (pos: number) => {\n    await appBridge.send(\"player:seek\", { to: pos });\n  };\n\n  return {\n    playLive: isWeb ? playLive : appPlayLive,\n    playNews,\n    endPlayNews,\n    playMedia,\n    pause: isWeb ? pause : appPause,\n    resume: isWeb ? resume : appResume,\n    seek: isWeb ? seek : appSeek,\n  };\n};\n\nexport const useAnalyser = () => {\n  const player = window.hlsPlayer;\n\n  return {\n    analyser: player.analyser,\n  };\n};\n","import { computed } from \"vue\";\nimport log from \"loglevel\";\nimport { storeToRefs } from \"pinia\";\nimport { shuffle } from \"lodash-es\";\n\nimport { getMedia } from \"@/api/catalog\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { useDevice } from \"@/composables/device\";\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\nimport type { AnnotatedMedia } from \"@/stores/queue\";\nimport { useQueueStore } from \"@/stores/queue\";\nimport { useSettingsStore } from \"@/stores/settings\";\nimport type { Media } from \"@/typings/api\";\n\nconst annotateMedia = (media: Array<Media>, scope: Array<string> = []): Array<AnnotatedMedia> => {\n  return media.map((mediaObj: Media) => {\n    // @ts-ignore\n    const artistKeys = mediaObj.artists.map((artistObj) => {\n      return `${artistObj.ct}:${artistObj.uid}`;\n    });\n    const mappedScope = scope.length ? [...scope, ...artistKeys] : artistKeys;\n    return { ...mediaObj, scope: mappedScope };\n  });\n};\n\nconst getAppBridgeQueueChannel = (mode: string) => {\n  switch (mode) {\n    case \"insert\": {\n      return \"queue:enqueueAsNext\";\n    }\n    case \"append\": {\n      return \"queue:enqueueToEnd\";\n    }\n    default: {\n      return \"queue:enqueue\";\n    }\n  }\n};\n\nconst useQueueState = () => {\n  const {\n    previousIndex,\n    currentIndex,\n    nextIndex,\n    currentMedia,\n    numMedia,\n    media: queuedMedia,\n  } = storeToRefs(useQueueStore());\n\n  return {\n    previousIndex,\n    currentIndex,\n    nextIndex,\n    currentMedia,\n    queueLength: numMedia,\n    queuedMedia,\n  };\n};\n\nconst useQueueControls = () => {\n  const appBridge = window.appBridge;\n  const { isWeb } = useDevice();\n  const { playMedia, playLive } = usePlayerControls();\n  const { isLive, isPlaying } = usePlayerState();\n  const { previousIndex, nextIndex, currentMedia } = storeToRefs(useQueueStore());\n  const { shuffleMode } = storeToRefs(useSettingsStore());\n  const {\n    enqueue,\n    setIndex,\n    deleteAtIndex: deleteAtIndexWeb,\n    clearQueue: clearQueueWeb,\n    shuffleQueue: shuffleQueueWeb,\n  } = useQueueStore();\n\n  const { logUIEvent } = useAnalytics();\n\n  const hasPrevious = computed(() => previousIndex.value !== null);\n  const hasNext = computed(() => !!isLive);\n\n  const enqueueObj = async (obj: any, mode = \"append\") => {\n    log.debug(\"queueControls - enqueueObj\", obj, mode);\n    const objKey = `${obj.ct}:${obj.uid}`;\n    const filter = {\n      obj_key: objKey,\n    };\n    const { results } = await getMedia(100, 0, filter);\n    log.debug(\"results\", results);\n    const scope = [objKey];\n    if (isWeb) {\n      await enqueue({ media: annotateMedia(results, scope), mode });\n    } else {\n      const channel = getAppBridgeQueueChannel(mode);\n      const data = annotateMedia(results, scope);\n      log.debug(\"queueControls - enqueueObj app-mode\", channel, data);\n      await appBridge.send(channel, data);\n    }\n  };\n  const enqueueMedia = async (media: Array<Media>, mode = \"append\", scope = []) => {\n    log.debug(\"queueControls - enqueueMedia\", media, mode, scope);\n    if (isWeb) {\n      if (shuffleMode.value) {\n        media = shuffle(media);\n      }\n      await enqueue({ media: annotateMedia(media, scope), mode });\n    } else {\n      const channel = getAppBridgeQueueChannel(mode);\n      const data = annotateMedia(media, scope);\n      log.debug(\"queueControls - enqueueMedia app-mode\", channel, data);\n      await appBridge.send(channel, data);\n    }\n  };\n  const startPlayCurrent = async (force = false) => {\n    if (!isWeb) {\n      log.debug(\"queueControls - startPlayCurrent: ignored in app-mode\");\n      return;\n    }\n    if (isPlaying.value && !force) {\n      return;\n    }\n    if (!currentMedia.value) {\n      log.warn(\"unable to play: no current media\");\n      return;\n    }\n    // await playMedia(currentMedia.value);\n    try {\n      await playMedia(currentMedia.value);\n    } catch (e) {\n      log.warn(\"player error - try with next\", e);\n      await playNext();\n    }\n  };\n  const playFromIndex = async (index: number) => {\n    log.debug(\"queueControls - playFromIndex\", index);\n    if (isWeb) {\n      await setIndex(index);\n      await startPlayCurrent(true);\n    } else {\n      const channel = \"queue:playFromIndex\";\n      const data = {\n        index,\n      };\n      log.debug(\"queueControls - enqueueMedia app-mode\", channel, data);\n      await appBridge.send(channel, data);\n    }\n  };\n  const playPrevious = async () => {\n    log.debug(\"queueControls - playPrevious\");\n    if (previousIndex.value !== null) {\n      await playFromIndex(previousIndex.value);\n    } else {\n      throw new Error(\"no previous media\");\n    }\n  };\n  const playNext = async () => {\n    log.debug(\"queueControls - playNext\");\n    if (nextIndex.value !== null) {\n      log.debug(\"queueControls - playNext index\", nextIndex.value);\n      await playFromIndex(nextIndex.value);\n    } else {\n      log.info(\"no next media - switch to live\");\n      await playLive();\n    }\n  };\n  // mapping actions depending on mode\n  const clearQueue = async (): Promise<void> => {\n    if (isWeb) {\n      await clearQueueWeb(isLive.value);\n    } else {\n      const channel = \"queue:clear\";\n      await appBridge.send(channel);\n    }\n    logUIEvent(\"queue:clear\");\n  };\n  const shuffleQueue = async (): Promise<void> => {\n    console.debug(\"queueControls - shuffleQueue\");\n    if (isWeb) {\n      await shuffleQueueWeb();\n    } else {\n      const channel = \"queue:shuffle\";\n      await appBridge.send(channel);\n    }\n    logUIEvent(\"queue:shuffle\", shuffleMode.value ? \"on\" : \"off\");\n  };\n  const deleteAtIndex = async (index: number): Promise<void> => {\n    if (isWeb) {\n      await deleteAtIndexWeb(index);\n    } else {\n      const channel = \"queue:deleteAtIndex\";\n      const data = {\n        index,\n      };\n      await appBridge.send(channel, data);\n    }\n    logUIEvent(\"queue:deleteAtIndex\");\n  };\n  return {\n    // mapped state\n    hasPrevious,\n    hasNext,\n    // mapped actions\n    playPrevious,\n    playNext,\n    playFromIndex,\n    deleteAtIndex,\n    enqueueMedia,\n    enqueueObj,\n    startPlayCurrent,\n    shuffleQueue,\n    clearQueue,\n  };\n};\n\nexport { useQueueControls, useQueueState };\n","import { APIClient } from \"@/api/client\";\nimport settings from \"@/settings\";\n\nconst VOTE_ENDPOINT = `${settings.API_BASE_URL}rating/`;\n\nasync function getRating(key: string) {\n  const url = `${VOTE_ENDPOINT}${key}/`;\n  const response = await APIClient.get(url);\n  return response.data;\n}\n\nasync function postRating(key: string, value: number | null, opts = {}) {\n  const url = `${VOTE_ENDPOINT}${key}/`;\n  const payload = { value, ...opts };\n  const response = await APIClient.post(url, payload);\n  return response.data;\n}\n\nexport { getRating, postRating };\n","import { ref } from \"vue\";\nimport { defineStore } from \"pinia\";\n\nimport { getRating, postRating } from \"@/api/rating\";\n\ninterface Totals {\n  up: number;\n  down: number;\n}\n\nexport const useRatingStore = defineStore(\"rating\", () => {\n  const ratings = ref<Map<string, number | null>>(new Map());\n  const totals = ref<Map<string, Totals | null>>(new Map());\n  const ratingByKey = (key: string): number | null | undefined => ratings.value.get(key);\n  const totalsByKey = (key: string): Totals | null | undefined => totals.value.get(key);\n  const loadRating = async (key: string): Promise<number | null> => {\n    const rating = await getRating(key);\n    ratings.value.set(key, rating.value);\n    totals.value.set(key, rating.totals);\n    return rating.value;\n  };\n  const setRating = async (\n    key: string,\n    value: number | null,\n    opts = {}\n  ): Promise<number | null> => {\n    // immediately sets the rating for fast ui response, then passes the value to the API\n    ratings.value.set(key, value);\n    const rating = await postRating(key, value, opts);\n    ratings.value.set(key, rating.value);\n    return rating.value;\n  };\n  // used to populate ratings loaded in patch in listings\n  // all primary resource types are annotated with `userRating` when requesting via API\n  const injectRatings = async (list: Array<any>) => {\n    list.forEach((item) => {\n      const { ct, uid, userRating } = item;\n      if (ct && uid) {\n        const key = `${ct}:${uid}`;\n        ratings.value.set(key, userRating);\n      }\n    });\n  };\n  return {\n    ratingByKey,\n    totalsByKey,\n    loadRating,\n    setRating,\n    injectRatings,\n  };\n});\n","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n  switch (objectToString.call(wat)) {\n    case '[object Error]':\n    case '[object Exception]':\n    case '[object DOMException]':\n      return true;\n    default:\n      return isInstanceOf(wat, Error);\n  }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat, 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 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 || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal\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 && 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 is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isNaN(wat) {\n  return typeof wat === 'number' && wat !== wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n  try {\n    return wat instanceof base;\n  } catch (_e) {\n    return false;\n  }\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isNaN, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable };\n//# sourceMappingURL=is.js.map\n","/** Internal global with common properties and Sentry extensions  */\n\n// The code below for 'isGlobalObj' and 'GLOBAL_OBJ' was copied from core-js before modification\n// https://github.com/zloirock/core-js/blob/1b944df55282cdc99c90db5f49eb0b6eda2cc0a3/packages/core-js/internals/global.js\n// core-js has the following licence:\n//\n// Copyright (c) 2014-2022 Denis Pushkarev\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/** Returns 'obj' if it's the global object, otherwise returns undefined */\nfunction isGlobalObj(obj) {\n  return obj && obj.Math == Math ? obj : undefined;\n}\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ =\n  (typeof globalThis == 'object' && isGlobalObj(globalThis)) ||\n  // eslint-disable-next-line no-restricted-globals\n  (typeof window == 'object' && isGlobalObj(window)) ||\n  (typeof self == 'object' && isGlobalObj(self)) ||\n  (typeof global == 'object' && isGlobalObj(global)) ||\n  (function () {\n    return this;\n  })() ||\n  {};\n\n/**\n * @deprecated Use GLOBAL_OBJ instead or WINDOW from @sentry/browser. This will be removed in v8\n */\nfunction getGlobalObject() {\n  return GLOBAL_OBJ ;\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(name, creator, obj) {\n  const gbl = (obj || GLOBAL_OBJ) ;\n  const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n  const singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n  return singleton;\n}\n\nexport { GLOBAL_OBJ, getGlobalObject, getGlobalSingleton };\n//# sourceMappingURL=worldwide.js.map\n","import { getGlobalSingleton, GLOBAL_OBJ } from './worldwide.js';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nconst CONSOLE_LEVELS = ['debug', 'info', 'warn', 'error', 'log', 'assert', 'trace'] ;\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 originalConsole = GLOBAL_OBJ.console ;\n  const wrappedLevels = {};\n\n  // Restore all wrapped console methods\n  CONSOLE_LEVELS.forEach(level => {\n    // TODO(v7): Remove this check as it's only needed for Node 6\n    const originalWrappedFunc =\n      originalConsole[level] && (originalConsole[level] ).__sentry_original__;\n    if (level in originalConsole && originalWrappedFunc) {\n      wrappedLevels[level] = originalConsole[level] ;\n      originalConsole[level] = originalWrappedFunc ;\n    }\n  });\n\n  try {\n    return callback();\n  } finally {\n    // Revert restoration to wrapped state\n    Object.keys(wrappedLevels).forEach(level => {\n      originalConsole[level] = wrappedLevels[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  };\n\n  if ((typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__)) {\n    CONSOLE_LEVELS.forEach(name => {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\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// Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used\nlet logger;\nif ((typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__)) {\n  logger = getGlobalSingleton('logger', makeLogger);\n} else {\n  logger = makeLogger();\n}\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger };\n//# sourceMappingURL=logger.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { isError, isEvent, isInstanceOf, isElement, isPlainObject, isPrimitive } from './is.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n  if (!(name in source)) {\n    return;\n  }\n\n  const original = source[name] ;\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    try {\n      markFunctionWrapped(wrapped, original);\n    } catch (_Oo) {\n      // This can throw if multiple fill happens on a global object like XMLHttpRequest\n      // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n    }\n  }\n\n  source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\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}\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  const proto = original.prototype || {};\n  wrapped.prototype = original.prototype = proto;\n  addNonEnumerableProperty(wrapped, '__sentry_original__', original);\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 */\nfunction getOriginalFunction(func) {\n  return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nfunction urlEncode(object) {\n  return Object.keys(object)\n    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n    .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n *  an Error.\n */\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 '<unknown>';\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  if (!keys.length) {\n    return '[object has no keys]';\n  }\n\n  if (keys[0].length >= maxLength) {\n    return truncate(keys[0], maxLength);\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const serialized = keys.slice(0, includedKeys).join(', ');\n    if (serialized.length > maxLength) {\n      continue;\n    }\n    if (includedKeys === keys.length) {\n      return serialized;\n    }\n    return truncate(serialized, maxLength);\n  }\n\n  return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\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  if (isPlainObject(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal ;\n    }\n\n    const returnValue = {};\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    for (const key of Object.keys(inputValue)) {\n      if (typeof inputValue[key] !== 'undefined') {\n        returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n      }\n    }\n\n    return returnValue ;\n  }\n\n  if (Array.isArray(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal ;\n    }\n\n    const returnValue = [];\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    inputValue.forEach((item) => {\n      returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n    });\n\n    return returnValue ;\n  }\n\n  return inputValue;\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    case wat === undefined || wat === null:\n      objectified = new String(wat);\n      break;\n\n    // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n    // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n    // an object in order to wrap it.\n    case typeof wat === 'symbol' || typeof wat === 'bigint':\n      objectified = Object(wat);\n      break;\n\n    // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n    case isPrimitive(wat):\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      objectified = new (wat ).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, urlEncode };\n//# sourceMappingURL=object.js.map\n","import { addNonEnumerableProperty } from './object.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nfunction uuid4() {\n  const gbl = GLOBAL_OBJ ;\n  const crypto = gbl.crypto || gbl.msCrypto;\n\n  if (crypto && crypto.randomUUID) {\n    return crypto.randomUUID().replace(/-/g, '');\n  }\n\n  const getRandomByte =\n    crypto && crypto.getRandomValues ? () => crypto.getRandomValues(new Uint8Array(1))[0] : () => Math.random() * 16;\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 && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\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 || '<unknown>';\n  }\n  return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\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 && 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\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], 10);\n  const minor = parseInt(match[2], 10);\n  const patch = parseInt(match[3], 10);\n  return {\n    buildmetadata: match[5],\n    major: isNaN(major) ? undefined : major,\n    minor: isNaN(minor) ? undefined : minor,\n    patch: isNaN(patch) ? undefined : patch,\n    prerelease: match[4],\n  };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\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, 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  frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line) => 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  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (exception && (exception ).__sentry_captured__) {\n    return true;\n  }\n\n  try {\n    // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n    // `ExtraErrorData` integration\n    addNonEnumerableProperty(exception , '__sentry_captured__', true);\n  } catch (err) {\n    // `exception` is a primitive, so we can't mark it seen\n  }\n\n  return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nfunction arrayify(maybeArray) {\n  return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, arrayify, checkOrSetAlreadyCaught, getEventDescription, parseSemver, uuid4 };\n//# sourceMappingURL=misc.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  // @ts-ignore \"npm\" is injected by rollup during build process\n  return \"npm\";\n}\n\nexport { getSDKSource, isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","import { isBrowserBundle } from './env.js';\n\n/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nfunction isNodeEnv() {\n  // explicitly check for browser bundles as those can be optimized statically\n  // by terser/rollup.\n  return (\n    !isBrowserBundle() &&\n    Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n  );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\nfunction dynamicRequire(mod, request) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nfunction loadModule(moduleName) {\n  let mod;\n\n  try {\n    mod = dynamicRequire(module, moduleName);\n  } catch (e) {\n    // no-empty\n  }\n\n  try {\n    const { cwd } = dynamicRequire(module, 'process');\n    mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) ;\n  } catch (e) {\n    // no-empty\n  }\n\n  return mod;\n}\n\nexport { dynamicRequire, isNodeEnv, loadModule };\n//# sourceMappingURL=node.js.map\n","import { isThenable } from './is.js';\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\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   __init() {this._state = States.PENDING;}\n   __init2() {this._handlers = [];}\n\n   constructor(\n    executor,\n  ) {SyncPromise.prototype.__init.call(this);SyncPromise.prototype.__init2.call(this);SyncPromise.prototype.__init3.call(this);SyncPromise.prototype.__init4.call(this);SyncPromise.prototype.__init5.call(this);SyncPromise.prototype.__init6.call(this);\n    try {\n      executor(this._resolve, this._reject);\n    } catch (e) {\n      this._reject(e);\n    }\n  }\n\n  /** JSDoc */\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  /** JSDoc */\n   catch(\n    onrejected,\n  ) {\n    return this.then(val => val, onrejected);\n  }\n\n  /** JSDoc */\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  /** JSDoc */\n    __init3() {this._resolve = (value) => {\n    this._setResult(States.RESOLVED, value);\n  };}\n\n  /** JSDoc */\n    __init4() {this._reject = (reason) => {\n    this._setResult(States.REJECTED, reason);\n  };}\n\n  /** JSDoc */\n    __init5() {this._setResult = (state, value) => {\n    if (this._state !== States.PENDING) {\n      return;\n    }\n\n    if (isThenable(value)) {\n      void (value ).then(this._resolve, this._reject);\n      return;\n    }\n\n    this._state = state;\n    this._value = value;\n\n    this._executeHandlers();\n  };}\n\n  /** JSDoc */\n    __init6() {this._executeHandlers = () => {\n    if (this._state === States.PENDING) {\n      return;\n    }\n\n    const cachedHandlers = this._handlers.slice();\n    this._handlers = [];\n\n    cachedHandlers.forEach(handler => {\n      if (handler[0]) {\n        return;\n      }\n\n      if (this._state === States.RESOLVED) {\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        handler[1](this._value );\n      }\n\n      if (this._state === States.REJECTED) {\n        handler[2](this._value);\n      }\n\n      handler[0] = true;\n    });\n  };}\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import { isNodeEnv, dynamicRequire } from './node.js';\nimport { getGlobalObject } from './worldwide.js';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject();\n\n/**\n * An object that can return the current timestamp in seconds since the UNIX epoch.\n */\n\n/**\n * A TimestampSource implementation for environments that do not support the Performance Web API natively.\n *\n * Note that this TimestampSource does not use a monotonic clock. A call to `nowSeconds` may return a timestamp earlier\n * than a previously returned value. We do not try to emulate a monotonic behavior in order to facilitate debugging. It\n * is more obvious to explain \"why does my span have negative duration\" than \"why my spans have zero duration\".\n */\nconst dateTimestampSource = {\n  nowSeconds: () => Date.now() / 1000,\n};\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 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 getBrowserPerformance() {\n  const { performance } = WINDOW;\n  if (!performance || !performance.now) {\n    return undefined;\n  }\n\n  // Replace performance.timeOrigin with our own timeOrigin based on Date.now().\n  //\n  // This is a partial workaround for browsers reporting performance.timeOrigin such that performance.timeOrigin +\n  // performance.now() gives a date arbitrarily in the past.\n  //\n  // Additionally, computing timeOrigin in this way fills the gap for browsers where performance.timeOrigin is\n  // undefined.\n  //\n  // The assumption that performance.timeOrigin + performance.now() ~= Date.now() is flawed, but we depend on it to\n  // interact with data coming out of performance entries.\n  //\n  // Note that despite recommendations against it in the spec, browsers implement the Performance API with a clock that\n  // might stop when the computer is asleep (and perhaps under other circumstances). Such behavior causes\n  // performance.timeOrigin + performance.now() to have an arbitrary skew over Date.now(). In laptop computers, we have\n  // observed skews that can be as long as days, weeks or months.\n  //\n  // See https://github.com/getsentry/sentry-javascript/issues/2590.\n  //\n  // BUG: despite our best intentions, this workaround has its limitations. It mostly addresses timings of pageload\n  // transactions, but ignores the skew built up over time that can aversely affect timestamps of navigation\n  // transactions of long-lived web pages.\n  const timeOrigin = Date.now() - performance.now();\n\n  return {\n    now: () => performance.now(),\n    timeOrigin,\n  };\n}\n\n/**\n * Returns the native Performance API implementation from Node.js. Returns undefined in old Node.js versions that don't\n * implement the API.\n */\nfunction getNodePerformance() {\n  try {\n    const perfHooks = dynamicRequire(module, 'perf_hooks') ;\n    return perfHooks.performance;\n  } catch (_) {\n    return undefined;\n  }\n}\n\n/**\n * The Performance API implementation for the current platform, if available.\n */\nconst platformPerformance = isNodeEnv() ? getNodePerformance() : getBrowserPerformance();\n\nconst timestampSource =\n  platformPerformance === undefined\n    ? dateTimestampSource\n    : {\n        nowSeconds: () => (platformPerformance.timeOrigin + platformPerformance.now()) / 1000,\n      };\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nconst dateTimestampInSeconds = dateTimestampSource.nowSeconds.bind(dateTimestampSource);\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 * See `usingPerformanceAPI` to test whether the Performance API is used.\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 = timestampSource.nowSeconds.bind(timestampSource);\n\n// Re-exported with an old name for backwards-compatibility.\nconst timestampWithMs = timestampInSeconds;\n\n/**\n * A boolean that is true when timestampInSeconds uses the Performance API to produce monotonic timestamps.\n */\nconst usingPerformanceAPI = platformPerformance !== undefined;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nlet _browserPerformanceTimeOriginMode;\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 */\nconst browserPerformanceTimeOrigin = (() => {\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 } = WINDOW;\n  if (!performance || !performance.now) {\n    _browserPerformanceTimeOriginMode = 'none';\n    return undefined;\n  }\n\n  const threshold = 3600 * 1000;\n  const performanceNow = performance.now();\n  const dateNow = Date.now();\n\n  // if timeOrigin isn't available set delta to threshold so it isn't used\n  const timeOriginDelta = performance.timeOrigin\n    ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n    : threshold;\n  const timeOriginIsReliable = timeOriginDelta < threshold;\n\n  // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n  // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n  // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n  // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n  // Date API.\n  // eslint-disable-next-line deprecation/deprecation\n  const navigationStart = performance.timing && performance.timing.navigationStart;\n  const hasNavigationStart = typeof navigationStart === 'number';\n  // if navigationStart isn't available set delta to threshold so it isn't used\n  const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n  const navigationStartIsReliable = navigationStartDelta < threshold;\n\n  if (timeOriginIsReliable || navigationStartIsReliable) {\n    // Use the more reliable time origin\n    if (timeOriginDelta <= navigationStartDelta) {\n      _browserPerformanceTimeOriginMode = 'timeOrigin';\n      return performance.timeOrigin;\n    } else {\n      _browserPerformanceTimeOriginMode = 'navigationStart';\n      return navigationStart;\n    }\n  }\n\n  // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n  _browserPerformanceTimeOriginMode = 'dateNow';\n  return dateNow;\n})();\n\nexport { _browserPerformanceTimeOriginMode, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds, timestampWithMs, usingPerformanceAPI };\n//# sourceMappingURL=time.js.map\n","const DEFAULT_ENVIRONMENT = 'production';\n\nexport { DEFAULT_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { timestampInSeconds, uuid4, dropUndefinedKeys } from '@sentry/utils';\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 BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\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.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 dropUndefinedKeys({\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n    duration: session.duration,\n    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 { isPlainObject, dateTimestampInSeconds, SyncPromise, logger, isThenable, arrayify, getGlobalSingleton } from '@sentry/utils';\nimport { updateSession } from './session.js';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\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 after {@link applyToEvent}. */\n\n  /** Array of breadcrumbs. */\n\n  /** User */\n\n  /** Tags */\n\n  /** Extra */\n\n  /** Contexts */\n\n  /** Attachments */\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  // eslint-disable-next-line deprecation/deprecation\n\n  /** Transaction Name */\n\n  /** Span */\n\n  /** Session */\n\n  /** Request Mode Session Status */\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  }\n\n  /**\n   * Inherit values from the parent scope.\n   * @param scope to clone.\n   */\n   static clone(scope) {\n    const newScope = new Scope();\n    if (scope) {\n      newScope._breadcrumbs = [...scope._breadcrumbs];\n      newScope._tags = { ...scope._tags };\n      newScope._extra = { ...scope._extra };\n      newScope._contexts = { ...scope._contexts };\n      newScope._user = scope._user;\n      newScope._level = scope._level;\n      newScope._span = scope._span;\n      newScope._session = scope._session;\n      newScope._transactionName = scope._transactionName;\n      newScope._fingerprint = scope._fingerprint;\n      newScope._eventProcessors = [...scope._eventProcessors];\n      newScope._requestSession = scope._requestSession;\n      newScope._attachments = [...scope._attachments];\n      newScope._sdkProcessingMetadata = { ...scope._sdkProcessingMetadata };\n    }\n    return newScope;\n  }\n\n  /**\n   * Add internal on change listener. Used for sub SDKs that need to store the scope.\n   * @hidden\n   */\n   addScopeListener(callback) {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addEventProcessor(callback) {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setUser(user) {\n    this._user = user || {};\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getUser() {\n    return this._user;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getRequestSession() {\n    return this._requestSession;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setRequestSession(requestSession) {\n    this._requestSession = requestSession;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setTags(tags) {\n    this._tags = {\n      ...this._tags,\n      ...tags,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setTag(key, value) {\n    this._tags = { ...this._tags, [key]: value };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setExtras(extras) {\n    this._extra = {\n      ...this._extra,\n      ...extras,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setExtra(key, extra) {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setFingerprint(fingerprint) {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setLevel(\n    // eslint-disable-next-line deprecation/deprecation\n    level,\n  ) {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setTransactionName(name) {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\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   * @inheritDoc\n   */\n   setSpan(span) {\n    this._span = span;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getSpan() {\n    return this._span;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getTransaction() {\n    // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n    // have a pointer to the currently-active transaction.\n    const span = this.getSpan();\n    return span && span.transaction;\n  }\n\n  /**\n   * @inheritDoc\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   * @inheritDoc\n   */\n   getSession() {\n    return this._session;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   update(captureContext) {\n    if (!captureContext) {\n      return this;\n    }\n\n    if (typeof captureContext === 'function') {\n      const updatedScope = (captureContext )(this);\n      return updatedScope instanceof Scope ? updatedScope : this;\n    }\n\n    if (captureContext instanceof Scope) {\n      this._tags = { ...this._tags, ...captureContext._tags };\n      this._extra = { ...this._extra, ...captureContext._extra };\n      this._contexts = { ...this._contexts, ...captureContext._contexts };\n      if (captureContext._user && Object.keys(captureContext._user).length) {\n        this._user = captureContext._user;\n      }\n      if (captureContext._level) {\n        this._level = captureContext._level;\n      }\n      if (captureContext._fingerprint) {\n        this._fingerprint = captureContext._fingerprint;\n      }\n      if (captureContext._requestSession) {\n        this._requestSession = captureContext._requestSession;\n      }\n    } else if (isPlainObject(captureContext)) {\n      // eslint-disable-next-line no-param-reassign\n      captureContext = captureContext ;\n      this._tags = { ...this._tags, ...captureContext.tags };\n      this._extra = { ...this._extra, ...captureContext.extra };\n      this._contexts = { ...this._contexts, ...captureContext.contexts };\n      if (captureContext.user) {\n        this._user = captureContext.user;\n      }\n      if (captureContext.level) {\n        this._level = captureContext.level;\n      }\n      if (captureContext.fingerprint) {\n        this._fingerprint = captureContext.fingerprint;\n      }\n      if (captureContext.requestSession) {\n        this._requestSession = captureContext.requestSession;\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   clear() {\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._extra = {};\n    this._user = {};\n    this._contexts = {};\n    this._level = undefined;\n    this._transactionName = undefined;\n    this._fingerprint = undefined;\n    this._requestSession = undefined;\n    this._span = undefined;\n    this._session = undefined;\n    this._notifyScopeListeners();\n    this._attachments = [];\n    return this;\n  }\n\n  /**\n   * @inheritDoc\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    this._breadcrumbs = [...this._breadcrumbs, mergedBreadcrumb].slice(-maxCrumbs);\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getLastBreadcrumb() {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   */\n   clearBreadcrumbs() {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addAttachment(attachment) {\n    this._attachments.push(attachment);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getAttachments() {\n    return this._attachments;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   clearAttachments() {\n    this._attachments = [];\n    return this;\n  }\n\n  /**\n   * Applies data from the scope to the event and runs all event processors on it.\n   *\n   * @param event Event\n   * @param hint Object containing additional information about the original exception, for use by the event processors.\n   * @hidden\n   */\n   applyToEvent(event, hint = {}) {\n    if (this._extra && Object.keys(this._extra).length) {\n      event.extra = { ...this._extra, ...event.extra };\n    }\n    if (this._tags && Object.keys(this._tags).length) {\n      event.tags = { ...this._tags, ...event.tags };\n    }\n    if (this._user && Object.keys(this._user).length) {\n      event.user = { ...this._user, ...event.user };\n    }\n    if (this._contexts && Object.keys(this._contexts).length) {\n      event.contexts = { ...this._contexts, ...event.contexts };\n    }\n    if (this._level) {\n      event.level = this._level;\n    }\n    if (this._transactionName) {\n      event.transaction = this._transactionName;\n    }\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 (this._span) {\n      event.contexts = { trace: this._span.getTraceContext(), ...event.contexts };\n      const transactionName = this._span.transaction && this._span.transaction.name;\n      if (transactionName) {\n        event.tags = { transaction: transactionName, ...event.tags };\n      }\n    }\n\n    this._applyFingerprint(event);\n\n    event.breadcrumbs = [...(event.breadcrumbs || []), ...this._breadcrumbs];\n    event.breadcrumbs = event.breadcrumbs.length > 0 ? event.breadcrumbs : undefined;\n\n    event.sdkProcessingMetadata = { ...event.sdkProcessingMetadata, ...this._sdkProcessingMetadata };\n\n    return this._notifyEventProcessors([...getGlobalEventProcessors(), ...this._eventProcessors], event, hint);\n  }\n\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry\n   */\n   setSDKProcessingMetadata(newData) {\n    this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n    return this;\n  }\n\n  /**\n   * This will be called after {@link applyToEvent} is finished.\n   */\n   _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        (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n          processor.id &&\n          result === null &&\n          logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n        if (isThenable(result)) {\n          void result\n            .then(final => this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n            .then(null, reject);\n        } else {\n          void this._notifyEventProcessors(processors, result, hint, index + 1)\n            .then(resolve)\n            .then(null, reject);\n        }\n      }\n    });\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  /**\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   */\n   _applyFingerprint(event) {\n    // Make sure it's an array first and we actually have something in place\n    event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n    // If we have something on the scope, then merge it with event\n    if (this._fingerprint) {\n      event.fingerprint = event.fingerprint.concat(this._fingerprint);\n    }\n\n    // If we have no data at all, remove empty array default\n    if (event.fingerprint && !event.fingerprint.length) {\n      delete event.fingerprint;\n    }\n  }\n}\n\n/**\n * Returns the global event processors.\n */\nfunction getGlobalEventProcessors() {\n  return getGlobalSingleton('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\nfunction addGlobalEventProcessor(callback) {\n  getGlobalEventProcessors().push(callback);\n}\n\nexport { Scope, addGlobalEventProcessor };\n//# sourceMappingURL=scope.js.map\n","import { uuid4, dateTimestampInSeconds, consoleSandbox, logger, GLOBAL_OBJ, isNodeEnv, getGlobalSingleton } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { Scope } from './scope.js';\nimport { closeSession, makeSession, updateSession } from './session.js';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nconst API_VERSION = 4;\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 * A layer in the process stack.\n * @hidden\n */\n\n/**\n * @inheritDoc\n */\nclass Hub  {\n  /** Is a {@link Layer}[] containing the client and scope */\n\n  /** Contains the last event id of a captured event.  */\n\n  /**\n   * Creates a new instance of the hub, will push one {@link Layer} into the\n   * internal stack on creation.\n   *\n   * @param client bound to the hub.\n   * @param scope bound to the hub.\n   * @param version number, higher number means higher priority.\n   */\n   constructor(client, scope = new Scope(),   _version = API_VERSION) {this._version = _version;\n    this._stack = [{ scope }];\n    if (client) {\n      this.bindClient(client);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   isOlderThan(version) {\n    return this._version < version;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   bindClient(client) {\n    const top = this.getStackTop();\n    top.client = client;\n    if (client && client.setupIntegrations) {\n      client.setupIntegrations();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   pushScope() {\n    // We want to clone the content of prev scope\n    const scope = Scope.clone(this.getScope());\n    this.getStack().push({\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   popScope() {\n    if (this.getStack().length <= 1) return false;\n    return !!this.getStack().pop();\n  }\n\n  /**\n   * @inheritDoc\n   */\n   withScope(callback) {\n    const scope = this.pushScope();\n    try {\n      callback(scope);\n    } finally {\n      this.popScope();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getClient() {\n    return this.getStackTop().client ;\n  }\n\n  /** Returns the scope of the top stack. */\n   getScope() {\n    return this.getStackTop().scope;\n  }\n\n  /** Returns the scope stack for domains or the process. */\n   getStack() {\n    return this._stack;\n  }\n\n  /** Returns the topmost scope layer in the order domain > local > process. */\n   getStackTop() {\n    return this._stack[this._stack.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureException(exception, hint) {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error('Sentry syntheticException');\n    this._withClient((client, scope) => {\n      client.captureException(\n        exception,\n        {\n          originalException: exception,\n          syntheticException,\n          ...hint,\n          event_id: eventId,\n        },\n        scope,\n      );\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureMessage(\n    message,\n    // eslint-disable-next-line deprecation/deprecation\n    level,\n    hint,\n  ) {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error(message);\n    this._withClient((client, scope) => {\n      client.captureMessage(\n        message,\n        level,\n        {\n          originalException: message,\n          syntheticException,\n          ...hint,\n          event_id: eventId,\n        },\n        scope,\n      );\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureEvent(event, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n    if (!event.type) {\n      this._lastEventId = eventId;\n    }\n\n    this._withClient((client, scope) => {\n      client.captureEvent(event, { ...hint, event_id: eventId }, scope);\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   lastEventId() {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addBreadcrumb(breadcrumb, hint) {\n    const { scope, client } = this.getStackTop();\n\n    if (!client) return;\n\n    const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n      (client.getOptions && client.getOptions()) || {};\n\n    if (maxBreadcrumbs <= 0) return;\n\n    const timestamp = dateTimestampInSeconds();\n    const mergedBreadcrumb = { timestamp, ...breadcrumb };\n    const finalBreadcrumb = beforeBreadcrumb\n      ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) )\n      : mergedBreadcrumb;\n\n    if (finalBreadcrumb === null) return;\n\n    if (client.emit) {\n      client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n    }\n\n    scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setUser(user) {\n    this.getScope().setUser(user);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setTags(tags) {\n    this.getScope().setTags(tags);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setExtras(extras) {\n    this.getScope().setExtras(extras);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setTag(key, value) {\n    this.getScope().setTag(key, value);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setExtra(key, extra) {\n    this.getScope().setExtra(key, extra);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n   setContext(name, context) {\n    this.getScope().setContext(name, context);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   configureScope(callback) {\n    const { scope, client } = this.getStackTop();\n    if (client) {\n      callback(scope);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   run(callback) {\n    const oldHub = makeMain(this);\n    try {\n      callback(this);\n    } finally {\n      makeMain(oldHub);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getIntegration(integration) {\n    const client = this.getClient();\n    if (!client) return null;\n    try {\n      return client.getIntegration(integration);\n    } catch (_oO) {\n      (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n      return null;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   startTransaction(context, customSamplingContext) {\n    return this._callExtensionMethod('startTransaction', context, customSamplingContext);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   traceHeaders() {\n    return this._callExtensionMethod('traceHeaders');\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureSession(endSession = false) {\n    // both send the update and pull the session from the scope\n    if (endSession) {\n      return this.endSession();\n    }\n\n    // only send the update\n    this._sendSessionUpdate();\n  }\n\n  /**\n   * @inheritDoc\n   */\n   endSession() {\n    const layer = this.getStackTop();\n    const scope = layer.scope;\n    const session = scope.getSession();\n    if (session) {\n      closeSession(session);\n    }\n    this._sendSessionUpdate();\n\n    // the session is over; take it off of the scope\n    scope.setSession();\n  }\n\n  /**\n   * @inheritDoc\n   */\n   startSession(context) {\n    const { scope, client } = this.getStackTop();\n    const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n    // Will fetch userAgent if called from browser sdk\n    const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n    const session = makeSession({\n      release,\n      environment,\n      user: scope.getUser(),\n      ...(userAgent && { userAgent }),\n      ...context,\n    });\n\n    // End existing session if there's one\n    const currentSession = scope.getSession && scope.getSession();\n    if (currentSession && currentSession.status === 'ok') {\n      updateSession(currentSession, { status: 'exited' });\n    }\n    this.endSession();\n\n    // Afterwards we set the new session on the scope\n    scope.setSession(session);\n\n    return session;\n  }\n\n  /**\n   * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n   * when Tracing is used.\n   */\n   shouldSendDefaultPii() {\n    const client = this.getClient();\n    const options = client && client.getOptions();\n    return Boolean(options && options.sendDefaultPii);\n  }\n\n  /**\n   * Sends the current Session on the scope\n   */\n   _sendSessionUpdate() {\n    const { scope, client } = this.getStackTop();\n    if (!scope) return;\n\n    const session = scope.getSession();\n    if (session) {\n      if (client && client.captureSession) {\n        client.captureSession(session);\n      }\n    }\n  }\n\n  /**\n   * Internal helper function to call a method on the top client if it exists.\n   *\n   * @param method The method to call on the client.\n   * @param args Arguments to pass to the client function.\n   */\n   _withClient(callback) {\n    const { scope, client } = this.getStackTop();\n    if (client) {\n      callback(client, scope);\n    }\n  }\n\n  /**\n   * Calls global extension method and binding current instance to the function call\n   */\n  // @ts-ignore Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n   _callExtensionMethod(method, ...args) {\n    const carrier = getMainCarrier();\n    const sentry = carrier.__SENTRY__;\n    if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n      return sentry.extensions[method].apply(this, args);\n    }\n    (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n  }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n  GLOBAL_OBJ.__SENTRY__ = GLOBAL_OBJ.__SENTRY__ || {\n    extensions: {},\n    hub: undefined,\n  };\n  return GLOBAL_OBJ;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nfunction makeMain(hub) {\n  const registry = getMainCarrier();\n  const oldHub = getHubFromCarrier(registry);\n  setHubOnCarrier(registry, hub);\n  return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nfunction getCurrentHub() {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n\n  // If there's no hub, or its an old API, assign a new one\n  if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n    setHubOnCarrier(registry, new Hub());\n  }\n\n  // Prefer domains over global if they are there (applicable only to Node environment)\n  if (isNodeEnv()) {\n    return getHubFromActiveDomain(registry);\n  }\n  // Return hub that lives on a global object\n  return getHubFromCarrier(registry);\n}\n\n/**\n * Try to read the hub from an active domain, and fallback to the registry if one doesn't exist\n * @returns discovered hub\n */\nfunction getHubFromActiveDomain(registry) {\n  try {\n    const sentry = getMainCarrier().__SENTRY__;\n    const activeDomain = sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n\n    // If there's no active domain, just return global hub\n    if (!activeDomain) {\n      return getHubFromCarrier(registry);\n    }\n\n    // If there's no hub on current domain, or it's an old API, assign a new one\n    if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n      const registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n      setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, Scope.clone(registryHubTopStack.scope)));\n    }\n\n    // Return hub that lives on a domain\n    return getHubFromCarrier(activeDomain);\n  } catch (_Oo) {\n    // Return hub that lives on a global object\n    return getHubFromCarrier(registry);\n  }\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier) {\n  return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nfunction getHubFromCarrier(carrier) {\n  return getGlobalSingleton('hub', () => new Hub(), carrier);\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\nfunction setHubOnCarrier(carrier, hub) {\n  if (!carrier) return false;\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n  __SENTRY__.hub = hub;\n  return true;\n}\n\nexport { API_VERSION, Hub, getCurrentHub, getHubFromCarrier, getMainCarrier, makeMain, setHubOnCarrier };\n//# sourceMappingURL=hub.js.map\n","import { getCurrentHub } from './hub.js';\n\n// Note: All functions in this file are typed with a return value of `ReturnType<Hub[HUB_FUNCTION]>`,\n// where HUB_FUNCTION is some method on the Hub class.\n//\n// This is done to make sure the top level SDK methods stay in sync with the hub methods.\n// Although every method here has an explicit return type, some of them (that map to void returns) do not\n// contain `return` keywords. This is done to save on bundle size, as `return` is not minifiable.\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception An exception-like object.\n * @param captureContext Additional scope data to apply to exception event.\n * @returns The generated eventId.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\nfunction captureException(exception, captureContext) {\n  return getCurrentHub().captureException(exception, { captureContext });\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 Severity Define the level of the message.\n * @returns The generated eventId.\n */\nfunction captureMessage(\n  message,\n  // eslint-disable-next-line deprecation/deprecation\n  captureContext,\n) {\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 getCurrentHub().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 * @returns The generated eventId.\n */\nfunction captureEvent(event, hint) {\n  return getCurrentHub().captureEvent(event, hint);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\nfunction configureScope(callback) {\n  getCurrentHub().configureScope(callback);\n}\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\nfunction addBreadcrumb(breadcrumb) {\n  getCurrentHub().addBreadcrumb(breadcrumb);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setContext(name, context) {\n  getCurrentHub().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nfunction setExtras(extras) {\n  getCurrentHub().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nfunction setExtra(key, extra) {\n  getCurrentHub().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nfunction setTags(tags) {\n  getCurrentHub().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nfunction setTag(key, value) {\n  getCurrentHub().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nfunction setUser(user) {\n  getCurrentHub().setUser(user);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n *     pushScope();\n *     callback();\n *     popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nfunction withScope(callback) {\n  getCurrentHub().withScope(callback);\n}\n\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.finish()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * NOTE: This function should only be used for *manual* instrumentation. Auto-instrumentation should call\n * `startTransaction` directly on the hub.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n */\nfunction startTransaction(\n  context,\n  customSamplingContext,\n) {\n  return getCurrentHub().startTransaction({ ...context }, customSamplingContext);\n}\n\nexport { addBreadcrumb, captureEvent, captureException, captureMessage, configureScope, setContext, setExtra, setExtras, setTag, setTags, setUser, startTransaction, withScope };\n//# sourceMappingURL=exports.js.map\n","import { APIClient } from \"@/api/client\";\nimport settings from \"@/settings\";\nimport type { UserVoucher, Voucher } from \"@/typings\";\n\nconst SUBSCRIPTION_ENDPOINT = `${settings.API_BASE_URL}subscription/`;\n\nasync function getPlanOptions() {\n  const url = `${SUBSCRIPTION_ENDPOINT}plan/`;\n  const response = await APIClient.get(url);\n  return response.data;\n}\n\nasync function createStripeCheckoutSession(sku: string, next: string) {\n  const url = `${SUBSCRIPTION_ENDPOINT}payment/stripe/`;\n  const payload = {\n    sku,\n    next,\n  };\n  const response = await APIClient.post(url, payload);\n  return response.data;\n}\n\nasync function getVoucher(code: string) {\n  const url = `${SUBSCRIPTION_ENDPOINT}voucher/`;\n  const params = {\n    code,\n  };\n  const response = await APIClient.get<Voucher>(url, { params });\n  return response.data;\n}\n\nasync function redeemVoucher(code: string) {\n  const url = `${SUBSCRIPTION_ENDPOINT}voucher/`;\n  const payload = {\n    code,\n  };\n  const response = await APIClient.post<Voucher>(url, payload);\n  return response.data;\n}\n\nasync function getUserVouchers(): Promise<Array<UserVoucher>> {\n  const url = `${SUBSCRIPTION_ENDPOINT}user-vouchers/`;\n  const response = await APIClient.get(url);\n  return response.data;\n}\n\nexport { createStripeCheckoutSession, getPlanOptions, getUserVouchers, getVoucher, redeemVoucher };\n","import { defineStore } from \"pinia\";\n\nimport { getUserVouchers } from \"@/api/subscription\";\nimport type { UserVoucher } from \"@/typings/api\";\n\ninterface State {\n  userVouchers: Array<UserVoucher>;\n}\n\nexport const useSubscriptionStore = defineStore(\"subscription\", {\n  state: (): State => ({\n    userVouchers: [],\n  }),\n  actions: {\n    async loadUserVouchers() {\n      try {\n        this.userVouchers = await getUserVouchers();\n      } catch (err) {\n        console.warn(err);\n        throw err;\n      }\n    },\n  },\n});\n","import { storeToRefs } from \"pinia\";\n\nimport { useSubscriptionStore } from \"@/stores/subscription\";\n\nexport const useSubscription = () => {\n  const { userVouchers } = storeToRefs(useSubscriptionStore());\n  const { loadUserVouchers } = useSubscriptionStore();\n\n  return {\n    userVouchers,\n    loadUserVouchers,\n  };\n};\n","import { watch } from \"vue\";\nimport * as Sentry from \"@sentry/vue\";\nimport { useIntervalFn } from \"@vueuse/core\";\nimport { isEqual } from \"lodash-es\";\n\nimport { useAccount } from \"@/composables/account\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { useDevice } from \"@/composables/device\";\nimport { useSubscription } from \"@/composables/subscription\";\nimport eventBus from \"@/eventBus\";\nimport type { User } from \"@/typings/api\";\n\nconst FAST_POLLING_INTERVAL = 60 * 1000;\nconst SLOW_POLLING_INTERVAL = 5 * 60 * 1000;\n\nconst updateAppBridgeAccount = (user: User) => {\n  if (window.appBridge) {\n    const channel = \"account:setAccessToken\";\n    const data = {\n      accessToken: user?.accessToken ?? null,\n    };\n    window.appBridge.send(channel, data);\n  }\n};\n\nconst updateSentryScope = (user: User) => {\n  Sentry.configureScope(function (scope) {\n    scope.setUser(user);\n  });\n};\n\nclass AccountHandler {\n  constructor() {\n    const { user, loadUser } = useAccount();\n    const { loadUserVouchers } = useSubscription();\n    const { isApp } = useDevice();\n    watch(\n      () => user.value,\n      (newUser, oldUser) => {\n        if (!isEqual(newUser?.uid, oldUser?.uid)) {\n          if (isApp) {\n            updateAppBridgeAccount(newUser);\n          }\n          updateSentryScope(newUser);\n        }\n      }\n    );\n    useIntervalFn(async () => {\n      await loadUser();\n    }, FAST_POLLING_INTERVAL);\n    useIntervalFn(\n      async () => {\n        await loadUserVouchers();\n      },\n      SLOW_POLLING_INTERVAL,\n      { immediateCallback: true }\n    );\n  }\n}\n\nexport default function () {\n  return new AccountHandler();\n}\n\n// eslint-disable-next-line arrow-body-style, @typescript-eslint/ban-types\nconst requireSubscription = (fn: Function, message = \"\") => {\n  // eslint-disable-next-line func-names\n  return function (...args: any) {\n    const { user, subscription } = useAccount();\n    const { logUIEvent } = useAnalytics();\n    if (!user.value) {\n      const event = {\n        intent: \"login\",\n        next: window.location.pathname,\n        message,\n      };\n      eventBus.emit(\"account:authenticate\", event);\n      logUIEvent(\"subscription:paywall\", \"unauthenticated\");\n      return false;\n    }\n    if (!subscription.value) {\n      const event = {\n        intent: \"voucher\",\n        next: window.location.pathname,\n        message,\n      };\n      eventBus.emit(\"subscription:subscribe\", event);\n      logUIEvent(\"subscription:paywall\", \"no-subscription\");\n      return false;\n    }\n    if (subscription.value.isBlocked) {\n      const event = {\n        message: subscription.value.isBlocked,\n      };\n      eventBus.emit(\"geolocation:blocked\", event);\n      logUIEvent(\"subscription:paywall\", \"geo-blocked\");\n      return false;\n    }\n    if (!subscription.value.isActive) {\n      const event = {\n        intent: \"voucher\",\n        next: window.location.pathname,\n        message,\n      };\n      eventBus.emit(\"subscription:subscribe\", event);\n      logUIEvent(\"subscription:paywall\", \"inactive-subscription\");\n      return false;\n    }\n    // @ts-ignore\n    return fn.apply(this, args);\n  };\n};\n\nexport { requireSubscription };\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent, ref } from \"vue\";\nimport { useMagicKeys, useVibrate } from \"@vueuse/core\";\n\nimport { getMedia } from \"@/api/catalog\";\nimport ButtonPlay from \"@/components/player/button/ButtonPlay.vue\";\nimport { useObjCtUid } from \"@/composables/obj\";\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\nimport { useQueueControls, useQueueState } from \"@/composables/queue\";\nimport { useRatingStore } from \"@/stores/rating\";\nimport { requireSubscription } from \"@/utils/account\";\nimport { getContrastColor } from \"@/utils/color\";\n\nexport default defineComponent({\n  components: {\n    ButtonPlay,\n  },\n  props: {\n    objKey: {\n      type: String,\n      required: false,\n      default: null,\n    },\n    filter: {\n      type: Object,\n      required: false,\n      default: () => {},\n    },\n    ordering: {\n      type: Array,\n      default: () => [],\n    },\n    mode: {\n      type: String,\n      default: \"replace\",\n    },\n    restartQueue: {\n      type: Boolean,\n      default: false,\n    },\n    iconScale: {\n      type: Number,\n      default: 1,\n    },\n    outlined: {\n      type: Boolean,\n      default: true,\n    },\n    filled: {\n      type: Boolean,\n      default: false,\n    },\n    color: {\n      type: Array as PropType<Array<number>>,\n      default: () => [0, 0, 0],\n    },\n  },\n  setup(props) {\n    const { objCt, objUid } = useObjCtUid(props.objKey);\n    const { shift: shiftKey } = useMagicKeys();\n    const { injectRatings } = useRatingStore();\n    const { queuedMedia, currentIndex: currentQueueIndex } = useQueueState();\n    const { enqueueMedia, startPlayCurrent, playFromIndex } = useQueueControls();\n    const { isPlaying, isBuffering, isPaused, scope, color: currentColor } = usePlayerState();\n    const { pause, resume } = usePlayerControls();\n    const inScope = computed(() => {\n      return scope.value.includes(props.objKey);\n    });\n    const queueIndex = computed(() => {\n      if (currentQueueIndex.value < 0) {\n        return null;\n      }\n      const index = queuedMedia.value.findIndex((obj: any) => {\n        return obj.uid === objUid.value && obj.ct === objCt.value;\n      });\n      if (index < 0) {\n        return null;\n      }\n      return index;\n    });\n    const queuePosition = computed(() => {\n      return queueIndex.value !== null ? queueIndex.value - currentQueueIndex.value : null;\n    });\n    const inQueue = computed(() => {\n      return queuePosition.value !== null;\n    });\n    const objIsPlaying = computed(() => inScope.value && isPlaying.value);\n    const objIsBuffering = computed(() => inScope.value && isBuffering.value);\n    const objIsPaused = computed(() => inScope.value && isPaused.value);\n\n    const baseColor = computed(() => {\n      return props.color;\n    });\n\n    const activeColor = computed(() => {\n      return currentColor.value;\n    });\n\n    const fillColor = computed(() => {\n      if (props.filled) {\n        return getContrastColor(baseColor.value);\n      }\n      return props.color;\n    });\n\n    const isLoading = ref(false);\n    const play = async () => {\n      // play directly if obj is already in the queue\n      if (inQueue.value && queueIndex.value !== null) {\n        await playFromIndex(queueIndex.value);\n        return;\n      }\n\n      isLoading.value = true;\n      const filter = { ...props.filter };\n      const ordering = props.ordering;\n      const mode = props.mode;\n      // const scope = props.objKey ? [props.objKey] : [];\n      if (props.objKey) {\n        filter.obj_key = props.objKey;\n      }\n      const { results } = await getMedia(100, 0, filter, ordering);\n      // TODO: implement play behaviour in case (single) media is already queued\n      // see: player/queue.ts:58\n      const mediaScope = props.objKey ? [props.objKey] : [];\n      await enqueueMedia(results, mode, mediaScope);\n      await startPlayCurrent(true);\n      isLoading.value = false;\n      await injectRatings(results);\n    };\n    const { vibrate } = useVibrate({ pattern: 10 });\n    const onClick = requireSubscription(async (e: MouseEvent) => {\n      vibrate();\n      if (e.shiftKey || props.restartQueue) {\n        await play();\n      } else if (objIsPlaying.value || isBuffering.value) {\n        await pause();\n      } else if (objIsPaused.value) {\n        await resume();\n      } else {\n        await play();\n      }\n    });\n    return {\n      onClick,\n      isPlaying: objIsPlaying,\n      isBuffering: objIsBuffering,\n      isPaused: objIsPaused,\n      isLoading,\n      inScope,\n      inQueue,\n      queuePosition,\n      //\n      shiftKey,\n      objCt,\n      objUid,\n      //\n      baseColor,\n      activeColor,\n      fillColor,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"play-action\">\n    <div\n      @click.prevent=\"onClick\"\n      class=\"container\"\n      :class=\"{\n        'is-loading': isLoading,\n      }\"\n    >\n      <slot name=\"default\">\n        <ButtonPlay\n          :is-active=\"inScope\"\n          :is-playing=\"isPlaying && !shiftKey\"\n          :is-buffering=\"isLoading || isBuffering\"\n          :in-queue=\"queuePosition > 0 || queuePosition < 0\"\n          :scale=\"iconScale\"\n          :outlined=\"outlined\"\n          :filled=\"filled\"\n          :base-color=\"baseColor\"\n          :active-color=\"activeColor\"\n          :fill-color=\"fillColor\"\n        />\n      </slot>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.play-action {\n  display: inline-grid;\n  position: relative;\n\n  .container {\n    display: inline-grid;\n  }\n\n  .is-loading {\n    cursor: wait;\n  }\n}\n</style>\n","// import Vue from 'vue';\n\nconst warn = (msg) => {\n  console.warn(msg);\n};\n\nexport default {\n  name: \"intersect\",\n  abstract: true,\n  props: {\n    threshold: {\n      type: Array,\n      required: false,\n      default: () => [0, 0.2],\n    },\n    root: {\n      type: typeof HTMLElement !== \"undefined\" ? HTMLElement : Object,\n      required: false,\n      default: () => null,\n    },\n    rootMargin: {\n      type: String,\n      required: false,\n      default: () => \"0px 0px 0px 0px\",\n    },\n  },\n  mounted() {\n    this.observer = new IntersectionObserver(\n      (entries) => {\n        if (!entries[0].isIntersecting) {\n          this.$emit(\"leave\", [entries[0]]);\n        } else {\n          this.$emit(\"enter\", [entries[0]]);\n        }\n\n        this.$emit(\"change\", [entries[0]]);\n      },\n      {\n        threshold: this.threshold,\n        root: this.root,\n        rootMargin: this.rootMargin,\n      }\n    );\n\n    this.$nextTick(() => {\n      if (this.$slots.default() && this.$slots.default().length > 1) {\n        warn(\"[VueIntersect] You may only wrap one element in a <intersect> component.\");\n      } else if (!this.$slots.default() || this.$slots.default().length < 1) {\n        warn(\"[VueIntersect] You must have one child inside a <intersect> component.\");\n        return;\n      }\n      this.observer.observe(this.$el);\n    });\n  },\n  unmounted() {\n    this.$emit(\"unmounted\");\n    this.observer.disconnect();\n  },\n  render() {\n    if (!this.$slots.default().length) {\n      return null;\n    }\n    if (this.$slots.default().length === 1) {\n      return this.$slots.default()[0];\n    }\n    return this.$slots.default()[1];\n    // eslint-disable-next-line prefer-destructuring\n    // return this.$slots.default() ? this.$slots.default()[0] : null;\n  },\n};\n","import settings from \"@/settings\";\n\nconst RESIZER_IMAGE_WITHS = [48, 72, 96, 120, 240, 280, 360, 600, 800, 1200, 1800];\nconst RESIZER_MAX_WIDTH = 1800;\n\nconst { IMAGE_RESIZER_ENDPOINT } = settings;\n\nconst getImageSrc = (image: any, size = 800) => {\n  const resizeSize = RESIZER_IMAGE_WITHS.find((s) => s >= size) || RESIZER_MAX_WIDTH;\n\n  // @ts-ignore\n  if (image && image.path) {\n    // @ts-ignore\n    return `${IMAGE_RESIZER_ENDPOINT}crop/${resizeSize}x${resizeSize}/${image.path}`;\n  }\n  return null;\n};\n\nconst getImageColor = (image: any) => {\n  // @ts-ignore\n  if (image && image.rgb) {\n    // @ts-ignore\n    return image.rgb;\n  }\n  return null;\n};\n\nconst preloadImage = async (image: any, size = 800) => {\n  if (!image) {\n    return;\n  }\n  const src = getImageSrc(image, size);\n  if (src) {\n    const img = new Image();\n    // img.onload = (e) => {\n    //   console.debug(\"onload\", e);\n    // };\n    img.src = src;\n  }\n};\n\nexport { getImageColor, getImageSrc, preloadImage };\n","<script>\nimport { computed, ref, watch } from \"vue\";\nimport { useElementSize } from \"@vueuse/core\";\n\nimport Intersect from \"@/components/utils/intersect.js\";\nimport { getImageColor, getImageSrc } from \"@/utils/image\";\n\n// eslint-disable-next-line max-len\nconst PLACEHOLDER_SRC =\n  \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=\";\n\nexport default {\n  components: { Intersect },\n  props: {\n    image: {\n      type: Object,\n      required: false,\n      default: null,\n    },\n    size: {\n      type: Number,\n      default: 800,\n    },\n    ratio: {\n      type: Number,\n      default: 1,\n    },\n    preload: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props) {\n    const imageEl = ref(null);\n    const isLoading = ref(false);\n    const isLoaded = ref(false);\n    const imageSrc = ref(PLACEHOLDER_SRC);\n\n    const { height: imageHeight, width: imageWidth } = useElementSize(imageEl);\n\n    const calculatedSize = computed(() => {\n      return Math.round(Math.max(imageHeight.value, imageWidth.value));\n    });\n\n    const color = computed(() => {\n      return getImageColor(props.image);\n    });\n\n    const src = computed(() => {\n      return getImageSrc(props.image, calculatedSize.value);\n      // return getImageSrc(props.image, props.size);\n    });\n\n    const loadImage = async () => {\n      isLoading.value = true;\n      const img = new Image();\n      img.src = src.value;\n      img.addEventListener(\n        \"load\",\n        () => {\n          isLoading.value = false;\n          isLoaded.value = true;\n          imageSrc.value = src.value;\n        },\n        true\n      );\n    };\n\n    const onEnter = () => {\n      if (!calculatedSize.value) {\n        return;\n      }\n      if (!src.value) {\n        return;\n      }\n      if (isLoading.value || isLoaded.value) {\n        return;\n      }\n      loadImage();\n    };\n\n    const cssVars = computed(() => {\n      if (!color.value) {\n        return {\n          \"--c-color\": \"128 128 128\",\n        };\n      }\n      const rgb = color.value.join(\" \");\n      return {\n        \"--c-color\": rgb,\n      };\n    });\n\n    watch(\n      () => src.value,\n      async () => {\n        isLoading.value = false;\n        isLoaded.value = false;\n        imageSrc.value = PLACEHOLDER_SRC;\n\n        await loadImage();\n      }\n    );\n\n    watch(\n      calculatedSize,\n      (val) => {\n        if (props.preload && val > 0 && !isLoaded.value && !isLoading.value) {\n          loadImage();\n        }\n      },\n      { immediate: true }\n    );\n\n    return {\n      imageEl,\n      isLoading,\n      isLoaded,\n      imageSrc,\n      onEnter,\n      cssVars,\n      //\n      imageHeight,\n      imageWidth,\n      src,\n    };\n  },\n};\n</script>\n\n<template>\n  <Intersect @enter=\"onEnter\">\n    <div\n      class=\"lazy-image\"\n      :style=\"{\n        '--ratio': ratio,\n      }\"\n    >\n      <img\n        alt=\"Image\"\n        ref=\"imageEl\"\n        :src=\"imageSrc\"\n        :style=\"cssVars\"\n        :class=\"{\n          'is-pending': !isLoaded,\n          'is-loading': isLoading,\n        }\"\n        :loading=\"preload ? 'eager' : 'lazy'\"\n        :fetchpriority=\"preload ? 'high' : undefined\"\n        :decoding=\"preload ? 'async' : 'auto'\"\n      />\n      <div class=\"overlay\">\n        <slot name=\"default\"></slot>\n      </div>\n    </div>\n  </Intersect>\n</template>\n\n<style lang=\"scss\" scoped>\n.lazy-image {\n  position: relative;\n  max-width: 100%;\n  aspect-ratio: var(--ratio);\n  overflow: hidden;\n\n  img {\n    min-width: 100%;\n    max-width: 100%;\n    background: rgb(var(--c-color));\n    opacity: 1;\n    filter: var(--image-filter);\n    transition: opacity 100ms;\n    image-rendering: pixelated;\n    aspect-ratio: var(--ratio);\n\n    &.is-pending,\n    &.is-loading {\n      opacity: 0.9;\n    }\n  }\n\n  .overlay {\n    top: 0;\n    position: absolute;\n    width: 100%;\n    left: 0;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    aspect-ratio: var(--ratio);\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\n\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\nimport type { SearchMediaResult } from \"@/typings/api\";\n\nexport default defineComponent({\n  components: {\n    LazyImage,\n    PlayAction,\n  },\n  props: {\n    result: {\n      type: Object as PropType<SearchMediaResult>,\n      required: true,\n    },\n  },\n  emits: [\"update:modelValue\"],\n  setup(props) {\n    const objKey = computed(() => {\n      return `${props.result.ct}:${props.result.uid}`;\n    });\n    const linkTo = computed(() => {\n      return {\n        name: \"mediaDetail\",\n        params: {\n          uid: props.result.uid,\n        },\n      };\n    });\n    return {\n      objKey,\n      linkTo,\n    };\n  },\n});\n</script>\n<template>\n  <div class=\"search-result\">\n    <div class=\"visual\">\n      <LazyImage :image=\"result.image\">\n        <PlayAction\n          :obj-key=\"objKey\"\n          :icon-scale=\"0.6\"\n          :outlined=\"true\"\n          :filled=\"true\"\n          :color=\"[0, 0, 0]\"\n        />\n      </LazyImage>\n    </div>\n    <router-link :to=\"linkTo\" class=\"meta\">\n      <div class=\"title\" v-text=\"result.title\" />\n      <div class=\"subtitle\" v-text=\"result.subtitle\" />\n    </router-link>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n\n.search-result {\n  display: grid;\n  grid-template-columns: 48px auto;\n  gap: 1rem;\n  padding: 8px 0;\n\n  .meta {\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    white-space: nowrap;\n    overflow: hidden;\n    padding-right: 3rem;\n\n    .title,\n    .subtitle {\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    .subtitle {\n      @include typo.light;\n      @include typo.dim;\n    }\n  }\n\n  @include responsive.on-hover {\n    background: rgb(var(--c-dark) 0.075);\n    border-color: transparent;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { defineComponent } from \"vue\";\n\nimport type { SearchMediaResult } from \"@/typings/api\";\n\nimport Result from \"./SearchResultsResult.vue\";\n\nexport default defineComponent({\n  components: {\n    Result,\n  },\n  props: {\n    results: {\n      type: Array as PropType<Array<SearchMediaResult>>,\n      default: () => [],\n    },\n  },\n  emits: [\"update:modelValue\"],\n  setup() {\n    return {};\n  },\n});\n</script>\n<template>\n  <div class=\"search-results\">\n    <Result\n      v-for=\"(result, index) in results\"\n      :key=\"`search-result-${index}-${result.ct}-${result.uid}`\"\n      :result=\"result\"\n    />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.search-results {\n  background: transparent;\n\n  > .search-result {\n    border-bottom: 1px solid rgba(var(--c-dark) / 20%);\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\nimport { watchDebounced } from \"@vueuse/core\";\n\nimport { getGlobalMediaSearchResults } from \"@/api/search\";\nimport SearchInput from \"@/components/search/SearchInput.vue\";\nimport SearchResults from \"@/components/search/SearchResults.vue\";\nimport SidePanel from \"@/components/ui/panel/SidePanel.vue\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport eventBus from \"@/eventBus\";\n\nexport default defineComponent({\n  components: {\n    SidePanel,\n    SearchInput,\n    SearchResults,\n  },\n  setup() {\n    const q = ref(\"\");\n    const results = ref([]);\n    const resultsTotalCount = ref(0);\n    const isVisible = ref(false);\n    const close = () => (isVisible.value = false);\n    const show = () => {\n      isVisible.value = true;\n    };\n    eventBus.on(\"global-search:show\", () => show());\n    const { logRawEvent } = useAnalytics();\n    watchDebounced(\n      q,\n      async (value: string) => {\n        if (value) {\n          const { count, results: searchResults } = await getGlobalMediaSearchResults(value, 10);\n          resultsTotalCount.value = count;\n          results.value = searchResults;\n          logRawEvent(\"view_search_results\", {\n            search_term: value,\n            filter_type: \"global-search\",\n          });\n        } else {\n          resultsTotalCount.value = 0;\n          results.value = [];\n        }\n      },\n      {\n        debounce: 500,\n      }\n    );\n    return {\n      q,\n      results,\n      isVisible,\n      close,\n    };\n  },\n});\n</script>\n<template>\n  <SidePanel :is-visible=\"isVisible\" @close=\"close\">\n    <template #header>\n      <SearchInput v-model=\"q\" />\n    </template>\n    <div class=\"global-search\">\n      <SearchResults v-if=\"results.length\" :results=\"results\" />\n      <div v-if=\"results.length === 0\" class=\"feedback\">\n        <i18n-t v-if=\"q\" keypath=\"navigation.search.noResults\" tag=\"p\" />\n        <i18n-t v-else keypath=\"navigation.search.cta\" tag=\"p\" />\n        <i18n-t keypath=\"navigation.search.info\" tag=\"p\" />\n      </div>\n    </div>\n  </SidePanel>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n\n.global-search {\n  background: rgba(var(--c-light) / 100%);\n\n  .feedback {\n    padding: 0.5rem 0;\n  }\n}\n\n.search-input {\n  > input {\n    @include typo.large;\n    @include typo.bold;\n\n    border: none;\n\n    &:focus {\n      outline: none;\n    }\n\n    &::placeholder {\n      color: rgb(var(--c-dark) / 20%);\n    }\n  }\n}\n\n.search-results {\n  border-top: 3px solid rgb(var(--c-dark));\n  margin-top: -12px;\n\n  @include responsive.bp-medium {\n    margin-top: unset;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport { useAccount } from \"@/composables/account\";\nimport eventBus from \"@/eventBus\";\n\nexport default defineComponent({\n  setup() {\n    const { user } = useAccount();\n    const login = () => {\n      const event = {\n        intent: \"login\",\n        next: window.location.pathname,\n      };\n      eventBus.emit(\"account:authenticate\", event);\n    };\n    return {\n      user,\n      login,\n    };\n  },\n});\n</script>\n\n<template>\n  <div>\n    <div class=\"account-menu\" v-if=\"!user\">\n      <i18n-t\n        tag=\"a\"\n        href=\"#\"\n        @click.prevent=\"login\"\n        class=\"menu-link\"\n        keypath=\"account.auth.login\"\n      />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/live-color\";\n\n@mixin menu-button {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 48px;\n  padding: 0 2rem;\n  color: inherit;\n  text-decoration: none;\n  border-radius: 24px;\n  transition: color, border 100ms 400ms, background-color 500ms;\n  border: 1px solid rgb(var(--c-page-fg) / 25%);\n\n  &:hover {\n    @include live-color.bg-inverse(10%);\n\n    transition: color, background-color 200ms;\n  }\n}\n\n.account-menu {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 100%;\n  color: inherit;\n\n  > a.menu-link {\n    @include menu-button;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nexport default defineComponent({\n  setup() {\n    const { t } = useI18n();\n    return {\n      t,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"main-menu\">\n    <router-link to=\"/\" v-text=\"t('menu.home')\" />\n    <router-link to=\"/discover/\" v-text=\"t('menu.discover')\" />\n    <router-link to=\"/collection/\" v-text=\"t('menu.collection')\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/live-color\";\n\n.main-menu {\n  color: inherit;\n\n  > a {\n    @include live-color.fg;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-width: 150px;\n    height: 100%;\n    padding: 0 2rem;\n    text-decoration: none;\n    border-right: 1px solid transparent;\n    border-left: 1px solid transparent;\n    transition: color, background-color 10ms, border-color 100ms;\n\n    &:hover {\n      background: rgb(var(--c-page-fg) / 10%);\n      transition: color, background-color 200ms;\n    }\n\n    &.router-link-active {\n      @include live-color.fg-inverse;\n      @include live-color.bg-inverse;\n\n      transition: color, background-color 200ms;\n    }\n\n    &:not(&.router-link-active) {\n      border-left-color: rgb(var(--c-page-fg) / 20%);\n\n      &:last-child {\n        border-right-color: rgb(var(--c-page-fg) / 20%);\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"none\",\n        stroke: color.value,\n        strokeWidth: 2.5,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <path\n      d=\"M31.3,20.3C31.3,27.7,35,35,35,35H13c0,0,3.7-7.2,3.7-14.6c0-4.1,3.3-7.3,7.3-7.3S31.3,16.3,31.3,20.3z\"\n    />\n    <line x1=\"24\" y1=\"13\" x2=\"24\" y2=\"9.3\" />\n    <path d=\"M24,41.5c1.7,0,3-1.3,3-3h-6C21,40.2,22.3,41.5,24,41.5z\" />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { DateTime } from \"luxon\";\n\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconAlert from \"@/components/ui/icon/IconAlert.vue\";\nimport { useAccount } from \"@/composables/account\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconAlert,\n  },\n  setup() {\n    const { t } = useI18n();\n    const { subscription } = useAccount();\n    const now = DateTime.now();\n    const numDaysRemaining = computed(() => {\n      if (!subscription.value) {\n        return null;\n      }\n      const activeUntil = DateTime.fromISO(subscription.value.activeUntil);\n      const diff = activeUntil.diff(now, [\"days\"]);\n      return Math.round(diff.days);\n    });\n    const isActive = computed(() => subscription.value && subscription.value.isActive);\n    const isBlocked = computed(() => subscription.value && subscription.value.isBlocked != false);\n    return {\n      t,\n      subscription,\n      isActive,\n      isBlocked,\n      numDaysRemaining,\n    };\n  },\n});\n</script>\n\n<template>\n  <div>\n    <div v-if=\"subscription\" class=\"subscription-status\">\n      <router-link\n        :to=\"{ name: 'accountSettings' }\"\n        class=\"status\"\n        :class=\"{\n          'is-active': isActive,\n          'is-expired': !isActive,\n        }\"\n      >\n        <div v-if=\"!isActive || isBlocked\" class=\"icon-alert\">\n          <CircleButton>\n            <IconAlert :scale=\"0.8\" color-var=\"--c-red\" />\n          </CircleButton>\n        </div>\n        <div v-else>\n          <span> Free access </span>\n          <br />\n          <span v-text=\"t('subscription.numDaysRemaining', numDaysRemaining)\" />\n        </div>\n      </router-link>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.subscription-status {\n  height: 100%;\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  .status {\n    @include typo.tiny;\n    @include typo.uppercase;\n\n    height: 100%;\n    width: 100%;\n    text-align: right;\n    display: flex;\n    flex-direction: column;\n    align-items: flex-end;\n    line-height: 14px;\n\n    /*\n    &.is-expired {\n      color: rgb(var(--c-warning));\n    }\n    */\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nconst props = withDefaults(\n  defineProps<{\n    scale?: number;\n    colorVar?: string;\n  }>(),\n  {\n    scale: 1,\n    colorVar: \"--c-fg\",\n  }\n);\n\nconst { iconSize: size, iconStrokeWidth: strokeWidth } = useIconSize(props.scale);\nconst color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 48 48\"\n    :style=\"{\n      fill: color,\n      stroke: 'none',\n      width: `${size}px`,\n      height: `${size}px`,\n    }\"\n  >\n    <rect x=\"10\" y=\"13.5\" width=\"28\" :height=\"strokeWidth\" />\n    <rect x=\"10\" y=\"22.5\" width=\"28\" :height=\"strokeWidth\" />\n    <rect x=\"10\" y=\"31.5\" width=\"28\" :height=\"strokeWidth\" />\n  </svg>\n</template>\n","<script type=\"ts\">\nimport { computed,defineComponent } from 'vue';\n\nimport CircleButton from '@/components/ui/button/CircleButton.vue';\nimport IconMenu from '@/components/ui/icon/IconMenu.vue';\nimport { useAccount } from \"@/composables/account\";\nimport { useDevice } from \"@/composables/device\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconMenu,\n  },\n  setup() {\n    const { isMobile } = useDevice();\n    const { user } = useAccount();\n    const initials = computed(() => {\n      if (!user.value) {\n        return null;\n      }\n      return (user.value.firstName || user.value.email).substring(0, 1);\n    });\n    return {\n      isMobile,\n      user,\n      initials,\n    };\n  },\n});\n</script>\n\n<template>\n  <CircleButton :style=\"{ position: 'relative' }\">\n    <IconMenu color-var=\"--c-page-fg\" />\n    <div v-if=\"isMobile && user\" class=\"initials\" v-text=\"initials\" />\n  </CircleButton>\n</template>\n\n<style lang=\"scss\" scoped>\n:deep(svg) {\n  transition: fill 100ms 1ms, stroke 100ms 1ms;\n}\n\n.initials {\n  top: 0;\n  position: absolute;\n  height: 18px;\n  width: 18px;\n  color: rgb(var(--c-page-fg-inverse));\n  background: rgb(var(--c-page-fg));\n  pointer-events: none;\n  display: flex;\n  right: -2px;\n  border-radius: 9px;\n  padding: 0 6px;\n  font-size: 10px;\n  align-items: center;\n  justify-content: center;\n  text-transform: uppercase;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nconst props = withDefaults(\n  defineProps<{\n    scale?: number;\n    colorVar?: string;\n  }>(),\n  {\n    scale: 1,\n    colorVar: \"--c-fg\",\n  }\n);\n\nconst { iconSize: size, iconStrokeWidth: strokeWidth } = useIconSize(props.scale);\nconst color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 48 48\"\n    :style=\"{\n      fill: 'none',\n      stroke: color,\n      strokeWidth,\n      width: `${size}px`,\n      height: `${size}px`,\n    }\"\n  >\n    <circle cx=\"23.5\" cy=\"22.8\" r=\"9\" />\n    <line x1=\"29.1\" y1=\"28.7\" x2=\"36.5\" y2=\"36.2\" />\n  </svg>\n</template>\n","<script type=\"ts\">\nimport { defineComponent } from 'vue';\n\nimport CircleButton from '@/components/ui/button/CircleButton.vue';\nimport IconSearch from '@/components/ui/icon/IconSearch.vue';\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconSearch,\n  },\n  setup() {\n    return {};\n  },\n});\n</script>\n\n<template>\n  <CircleButton>\n    <IconSearch color-var=\"--c-page-fg\" />\n  </CircleButton>\n</template>\n\n<style lang=\"scss\" scoped>\n:deep(svg) {\n  transition: fill 100ms 1ms, stroke 100ms 1ms;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        stroke: \"none\",\n        fill: color.value,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <!-- eslint-disable max-len -->\n    <rect x=\"14\" y=\"8\" width=\"3.2\" height=\"3.2\" />\n    <rect x=\"30.8\" y=\"8\" width=\"3.2\" height=\"3.2\" />\n    <path\n      d=\"M34,11.2v3.2h-3.2v-3.2H17.2v3.2H14v-3.2h-4v25.6h28V11.2H34z M15.6,32c-0.9,0-1.6-0.7-1.6-1.6s0.7-1.6,1.6-1.6\n      c0.9,0,1.6,0.7,1.6,1.6S16.5,32,15.6,32z M15.6,27.2c-0.9,0-1.6-0.7-1.6-1.6c0-0.9,0.7-1.6,1.6-1.6c0.9,0,1.6,0.7,1.6,1.6\n      C17.2,26.5,16.5,27.2,15.6,27.2z M15.6,22.4c-0.9,0-1.6-0.7-1.6-1.6c0-0.9,0.7-1.6,1.6-1.6c0.9,0,1.6,0.7,1.6,1.6\n      C17.2,21.7,16.5,22.4,15.6,22.4z M21.2,32c-0.9,0-1.6-0.7-1.6-1.6s0.7-1.6,1.6-1.6c0.9,0,1.6,0.7,1.6,1.6S22.1,32,21.2,32z\n      M21.2,27.2c-0.9,0-1.6-0.7-1.6-1.6c0-0.9,0.7-1.6,1.6-1.6c0.9,0,1.6,0.7,1.6,1.6C22.8,26.5,22.1,27.2,21.2,27.2z M21.2,22.4\n      c-0.9,0-1.6-0.7-1.6-1.6c0-0.9,0.7-1.6,1.6-1.6c0.9,0,1.6,0.7,1.6,1.6C22.8,21.7,22.1,22.4,21.2,22.4z M26.8,32\n      c-0.9,0-1.6-0.7-1.6-1.6s0.7-1.6,1.6-1.6c0.9,0,1.6,0.7,1.6,1.6S27.7,32,26.8,32z M26.8,27.2c-0.9,0-1.6-0.7-1.6-1.6\n      c0-0.9,0.7-1.6,1.6-1.6c0.9,0,1.6,0.7,1.6,1.6C28.4,26.5,27.7,27.2,26.8,27.2z M26.8,22.4c-0.9,0-1.6-0.7-1.6-1.6\n      c0-0.9,0.7-1.6,1.6-1.6c0.9,0,1.6,0.7,1.6,1.6C28.4,21.7,27.7,22.4,26.8,22.4z M32.4,32c-0.9,0-1.6-0.7-1.6-1.6s0.7-1.6,1.6-1.6\n      c0.9,0,1.6,0.7,1.6,1.6S33.3,32,32.4,32z M32.4,27.2c-0.9,0-1.6-0.7-1.6-1.6c0-0.9,0.7-1.6,1.6-1.6c0.9,0,1.6,0.7,1.6,1.6\n      C34,26.5,33.3,27.2,32.4,27.2z M32.4,22.4c-0.9,0-1.6-0.7-1.6-1.6c0-0.9,0.7-1.6,1.6-1.6c0.9,0,1.6,0.7,1.6,1.6\n      C34,21.7,33.3,22.4,32.4,22.4z\"\n    />\n    <!-- eslint-enable max-len -->\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        stroke: \"none\",\n        fill: color.value,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <path\n      fill-rule=\"nonzero\"\n      d=\"M18.50693576,37 C17.81879998,37 17.22971405,36.7552083 16.73967796,36.265625 C16.24964188,35.7760417 16.00462384,35.1875 16.00462384,34.5 C16.00462384,33.8125 16.24964188,33.2239583 16.73967796,32.734375 C17.22971405,32.2447917 17.81879998,32 18.50693576,32 C19.19507153,32 19.78415746,32.2447917 20.27419355,32.734375 C20.76422963,33.2239583 21.0092477,33.8125 21.0092477,34.5 C21.0092477,35.1875 20.76422963,35.7760417 20.27419355,36.265625 C19.78415746,36.7552083 19.19507153,37 18.50693576,37 Z M31.0184953,37 C30.3303596,37 29.7412736,36.7552083 29.2512376,36.265625 C28.7612015,35.7760417 28.5161834,35.1875 28.5161834,34.5 C28.5161834,33.8125 28.7612015,33.2239583 29.2512376,32.734375 C29.7412736,32.2447917 30.3303596,32 31.0184953,32 C31.7066311,32 32.2957171,32.2447917 32.7857531,32.734375 C33.2757892,33.2239583 33.5208073,33.8125 33.5208073,34.5 C33.5208073,35.1875 33.2757892,35.7760417 32.7857531,36.265625 C32.2957171,36.7552083 31.7066311,37 31.0184953,37 Z M17.44345319,17 L20.44622749,23.25 L29.2043192,23.25 L32.6449981,17 L17.44345319,17 Z M16.25485503,14.5 L34.7094054,14.5 C35.1890152,14.5 35.5539357,14.7135417 35.8041669,15.140625 C36.0543981,15.5677083 36.0648244,16 35.8354458,16.4375 L31.3938421,24.4375 C31.1644635,24.8541667 30.8568877,25.1770833 30.4711146,25.40625 C30.0853415,25.6354167 29.6630764,25.75 29.2043192,25.75 L19.88320731,25.75 L18.50693576,28.25 L33.5208073,28.25 L33.5208073,30.75 L18.50693576,30.75 C17.56856879,30.75 16.85958041,30.3385417 16.37997063,29.515625 C15.90036084,28.6927083 15.87950824,27.875 16.31741283,27.0625 L18.00647337,24 L13.50231192,14.5 L11,14.5 L11,12 L15.06625687,12 L16.25485503,14.5 Z M20.44622749,23.2911932 L29.2043192,23.2911932 L20.44622749,23.2911932 Z\"\n    />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nconst BASE_SIZE = 48;\n\nexport default defineComponent({\n  props: {\n    size: {\n      type: Number,\n      default: 48,\n    },\n    color: {\n      type: String,\n      default: \"rgb(var(--c-page-fg) / 100%)\",\n    },\n  },\n  setup(props) {\n    const style = computed(() => {\n      return {\n        fill: \"none\",\n        stroke: props.color,\n        strokeWidth: (24 * BASE_SIZE) / props.size,\n        strokeMiterlimit: 10,\n        // transform: `scale(${props.size / BASE_SIZE})`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 602 602\"\n    :width=\"size\"\n    :height=\"size\"\n    :style=\"style\"\n    class=\"logo\"\n  >\n    <polygon points=\"539 301 138 486.99 138 115.01 539 301\" />\n    <rect x=\"138.01\" y=\"107\" width=\"119.01\" height=\"387.98\" />\n    <rect x=\"345.01\" y=\"106.99\" width=\"119.01\" height=\"387.98\" />\n    <circle cx=\"301\" cy=\"301\" r=\"287\" />\n  </svg>\n</template>\n","<script lang=\"ts\" setup>\nimport AccountMenu from \"@/components/navigation/AccountMenu.vue\";\nimport MainMenu from \"@/components/navigation/MainMenu.vue\";\nimport SubscriptionStatus from \"@/components/navigation/SubscriptionStatus.vue\";\nimport ToggleMenuButton from \"@/components/navigation/ToggleMenuButton.vue\";\nimport ToggleSearchButton from \"@/components/navigation/ToggleSearchButton.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconProgram from \"@/components/ui/icon/IconProgram.vue\";\nimport IconShop from \"@/components/ui/icon/IconShop.vue\";\nimport Logo from \"@/components/ui/logo/Logo.vue\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { useDevice } from \"@/composables/device\";\nimport eventBus from \"@/eventBus\";\n\nconst { isSmallScreen } = useDevice();\nconst { logUIEvent } = useAnalytics();\n\nconst showSideMenu = () => {\n  eventBus.emit(\"side-menu:show\");\n  logUIEvent(\"side-menu:show\");\n};\nconst showGlobalSearch = () => {\n  eventBus.emit(\"global-search:show\");\n  logUIEvent(\"global-search:show\");\n};\n</script>\n\n<template>\n  <div class=\"topbar-container\">\n    <div class=\"ios-bar\" />\n    <div class=\"topbar\">\n      <router-link class=\"brand\" to=\"/\">\n        <Logo />\n        <span>open broadcast</span>\n      </router-link>\n      <MainMenu class=\"menu menu--main\" />\n      <div class=\"subscription-account\">\n        <SubscriptionStatus class=\"menu menu--subscription\" />\n        <AccountMenu class=\"menu menu--account\" />\n      </div>\n      <router-link v-if=\"!isSmallScreen\" class=\"shop-link\" title=\"Shop\" :to=\"{ path: '/shop/' }\">\n        <CircleButton>\n          <IconShop color-var=\"--c-page-fg\" />\n        </CircleButton>\n      </router-link>\n      <div class=\"search-toggle\" @click.prevent=\"showGlobalSearch\">\n        <ToggleSearchButton />\n      </div>\n      <router-link v-if=\"isSmallScreen\" class=\"program\" :to=\"{ name: 'programRedirect' }\">\n        <CircleButton>\n          <IconProgram color-var=\"--c-page-fg\" />\n        </CircleButton>\n      </router-link>\n      <div class=\"menu-toggle\" @click.prevent=\"showSideMenu\">\n        <ToggleMenuButton />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/live-color\";\n\n.topbar-container {\n  top: 0;\n  position: sticky;\n  padding-top: var(--sa-t);\n  z-index: 20;\n  background: rgb(var(--c-page-bg) / 50%);\n\n  /* stylelint-disable-next-line property-no-vendor-prefix */\n  -webkit-backdrop-filter: blur(12px);\n  backdrop-filter: blur(12px);\n  transition: background-color 600ms, color 100ms 1ms;\n}\n\n.topbar {\n  top: var(--sa-t);\n  position: sticky;\n  height: 78px;\n  width: 100%;\n  z-index: 20;\n  display: grid;\n  grid-template-columns: 290px 1fr 146px 48px 48px 48px;\n  padding: 0 1.5rem 0 0;\n  border-bottom: 7px solid rgb(var(--c-page-fg));\n\n  // transition: background 10ms;\n  transition: background-color 600ms, color 100ms 1ms;\n\n  @include responsive.bp-large {\n    height: 66px;\n    grid-template-columns: 172px 1fr 40px 40px 40px;\n    padding: 0 0.625rem;\n  }\n\n  .brand {\n    @include live-color.fg;\n\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n    padding-left: 1.5rem;\n    padding-right: 1rem;\n    transition: color, background-color 200ms;\n\n    .logo {\n      margin-right: 12px;\n    }\n\n    &:hover {\n      &:not(&.router-link-exact-active) {\n        background: rgb(var(--c-page-fg) / 10%);\n      }\n\n      transition: color, background-color 200ms;\n    }\n\n    @include responsive.bp-large {\n      line-height: 1.25rem;\n      padding-left: 0;\n      padding-right: 0;\n\n      .logo {\n        height: 40px;\n        width: 40px;\n        margin-right: 8px;\n      }\n\n      > span {\n        margin-top: -6px;\n        max-width: 100px;\n      }\n    }\n  }\n\n  .menu {\n    display: flex;\n    align-items: center;\n\n    &--main {\n      justify-content: center;\n    }\n\n    &--account {\n      justify-content: flex-end;\n    }\n\n    @include responsive.bp-large {\n      display: none;\n    }\n  }\n\n  .subscription-account {\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    > div {\n      &:not(:last-child) {\n        margin-right: 0.75rem;\n      }\n    }\n  }\n\n  .program {\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n  }\n\n  .shop-link {\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n  }\n\n  .search-toggle {\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n  }\n\n  .menu-toggle {\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport { useSettingsStore } from \"@/stores/settings\";\n\nexport default defineComponent({\n  setup() {\n    const settingsStore = useSettingsStore();\n    const { locale, availableLocales } = useI18n({ useScope: \"global\" });\n    const setLocale = (value: string) => {\n      locale.value = value;\n      settingsStore.setLocale(value);\n      // NOTE: refresh is only needed to also update resources loaded via API\n      document.location.reload();\n    };\n    return {\n      currentLocale: locale,\n      availableLocales,\n      setLocale,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"language-chooser\">\n    <div\n      v-for=\"(locale, index) in availableLocales\"\n      :key=\"`locale-${index}-${locale}`\"\n      @click.prevent=\"setLocale(locale)\"\n      class=\"language\"\n      :class=\"{ 'is-current': locale === currentLocale }\"\n    >\n      <span v-text=\"locale\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.language-chooser {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  grid-column-gap: 0.5rem;\n\n  .language {\n    @include typo.uppercase;\n\n    height: 24px;\n    width: 24px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n\n    span {\n      border-bottom: 2px solid transparent;\n    }\n\n    &:hover,\n    &.is-current {\n      span {\n        border-bottom-color: currentcolor;\n      }\n    }\n  }\n}\n</style>\n","<script type=\"ts\">\nimport { defineComponent, watch } from 'vue';\nimport { storeToRefs } from \"pinia\";\n\nimport { useSettings } from \"@/composables/settings\";\nimport { useSettingsStore } from \"@/stores/settings\";\n\nconst DATA_ATTRIBUTE = \"data-theme\"\n\nexport default defineComponent({\n  components: {},\n  setup() {\n    const { darkMode, setDarkMode } = useSettings();\n    const { theme } = storeToRefs(useSettingsStore());\n    const toggleMode = () => (darkMode.value) ? setDarkMode(false) : setDarkMode(true);\n    watch(\n      () => darkMode.value,\n      (value) => {\n        document.body.setAttribute(DATA_ATTRIBUTE, value ? \"dark\" : \"light\");\n      }\n    );\n    return {\n      theme,\n      darkMode,\n      toggleMode,\n    };\n  },\n});\n</script>\n\n<template>\n  <label class=\"toggle-mode\" :class=\"{ 'is-dark': darkMode }\">\n    <span class=\"outline\"></span>\n    <span class=\"label\">Darkmode</span>\n    <input class=\"toggle\" type=\"checkbox\" @change=\"toggleMode\" />\n  </label>\n</template>\n\n<style lang=\"scss\" scoped>\n.toggle-mode {\n  cursor: pointer;\n  height: 30px;\n  display: grid;\n  grid-template-columns: 54px auto auto;\n  grid-column-gap: 0.5rem;\n\n  > input {\n    opacity: 0;\n    width: 0;\n  }\n\n  .outline {\n    position: relative;\n    cursor: pointer;\n    background-color: rgb(var(--c-fg));\n    transition: 200ms;\n    border-radius: 30px;\n\n    &::before {\n      position: absolute;\n      content: \"\";\n      height: 24px;\n      width: 24px;\n      left: 3px;\n      bottom: 3px;\n      background-color: rgb(var(--c-bg));\n      transition: 200ms;\n      border-radius: 50%;\n    }\n  }\n\n  &.is-dark {\n    .outline {\n      &::before {\n        left: 27px;\n      }\n    }\n  }\n\n  .label {\n    line-height: 30px;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRouter } from \"vue-router\";\n\nimport LanguageChooser from \"@/components/navigation/LanguageChooser.vue\";\nimport ToggleDarkModeButton from \"@/components/navigation/ToggleDarkModeButton.vue\";\nimport SidePanel from \"@/components/ui/panel/SidePanel.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport { useDevice } from \"@/composables/device\";\nimport { useSubscription } from \"@/composables/subscription\";\nimport eventBus from \"@/eventBus\";\n\nexport default defineComponent({\n  components: {\n    SidePanel,\n    LanguageChooser,\n    ToggleDarkModeButton,\n  },\n  setup() {\n    const router = useRouter();\n    const { t } = useI18n();\n    const isVisible = ref(false);\n    const { user, isStaff, logoutUser } = useAccount();\n    const { isWeb } = useDevice();\n    const { userVouchers } = useSubscription();\n    const close = () => {\n      isVisible.value = false;\n    };\n    eventBus.on(\"side-menu:show\", () => {\n      isVisible.value = true;\n    });\n    eventBus.on(\"side-menu:hide\", () => {\n      isVisible.value = false;\n    });\n    const login = () => {\n      const event = {\n        intent: \"login\",\n        next: window.location.pathname,\n      };\n      eventBus.emit(\"account:authenticate\", event);\n    };\n    const logout = async () => {\n      try {\n        await logoutUser();\n        await router.push({ name: \"home\" });\n        close();\n      } catch (err) {\n        console.debug(\"err\", err);\n      }\n    };\n    const primaryPages = computed(() => {\n      return [\n        {\n          path: \"/shop/\",\n          title: t(\"menu.shop\"),\n        },\n      ];\n    });\n    const pages = computed(() => {\n      return [\n        {\n          path: \"/faq/\",\n          title: t(\"menu.faq\"),\n        },\n        {\n          path: \"/about/\",\n          title: t(\"menu.about\"),\n        },\n        {\n          path: \"/contact/\",\n          title: t(\"menu.contact\"),\n        },\n        {\n          path: \"/donate/\",\n          title: t(\"menu.donate\"),\n        },\n        {\n          path: \"/developers/\",\n          title: t(\"menu.developers\"),\n        },\n        {\n          path: \"/legal/imprint/\",\n          title: t(\"menu.imprint\"),\n        },\n        {\n          path: \"/legal/dpp/\",\n          title: t(\"menu.dpp\"),\n        },\n        {\n          path: \"/legal/terms/\",\n          title: t(\"menu.terms\"),\n        },\n      ];\n    });\n    const onNavigate = () => {\n      close();\n    };\n    return {\n      t,\n      close,\n      onNavigate,\n      isVisible,\n      user,\n      isStaff,\n      userVouchers,\n      login,\n      logout,\n      primaryPages,\n      pages,\n      isWeb,\n    };\n  },\n});\n</script>\n<template>\n  <SidePanel :is-visible=\"isVisible\" @close=\"close\">\n    <div class=\"side-menu\">\n      <section class=\"section\" v-if=\"user\">\n        <router-link\n          :to=\"{\n            name: 'accountSettings',\n          }\"\n          @click=\"onNavigate\"\n          v-text=\"t('menu.accountSettings')\"\n        />\n        <a v-if=\"isStaff && isWeb\" href=\"/admin/\" target=\"_blank\" v-text=\"t('menu.admin')\" />\n        <router-link\n          v-if=\"userVouchers.length\"\n          :to=\"{\n            name: 'accountUserVouchers',\n          }\"\n          @click=\"onNavigate\"\n          v-text=\"t('menu.userVouchers')\"\n        />\n      </section>\n      <section class=\"section\" v-else>\n        <a href=\"#\" @click.prevent=\"login\" v-text=\"t('menu.login')\" />\n      </section>\n      <section class=\"section section--primary\">\n        <router-link\n          :to=\"{\n            name: 'home',\n          }\"\n          @click=\"onNavigate\"\n          v-text=\"t('menu.home')\"\n        />\n        <router-link\n          :to=\"{\n            name: 'discover',\n          }\"\n          @click=\"onNavigate\"\n          v-text=\"t('menu.discover')\"\n        />\n        <router-link\n          :to=\"{\n            name: 'collection',\n          }\"\n          @click=\"onNavigate\"\n          v-text=\"t('menu.collection')\"\n        />\n      </section>\n      <section class=\"section section--primary\">\n        <router-link\n          :to=\"{\n            name: 'programRedirect',\n          }\"\n          @click=\"onNavigate\"\n          v-text=\"t('menu.program')\"\n        />\n        <router-link\n          :to=\"{\n            path: '/reception/',\n          }\"\n          @click=\"onNavigate\"\n          v-text=\"t('menu.reception')\"\n        />\n      </section>\n      <section class=\"section\">\n        <router-link\n          v-for=\"(page, index) in primaryPages\"\n          :key=\"`page-${index}-${page.path}`\"\n          :to=\"page.path\"\n          @click=\"onNavigate\"\n          v-text=\"page.title\"\n        />\n      </section>\n      <section class=\"section\">\n        <router-link\n          v-for=\"(page, index) in pages\"\n          :key=\"`page-${index}-${page.path}`\"\n          :to=\"page.path\"\n          @click=\"onNavigate\"\n          v-text=\"page.title\"\n        />\n      </section>\n      <section class=\"section\" v-if=\"user\">\n        <a href=\"#\" @click.prevent=\"logout\" v-text=\"t('menu.logout')\" />\n      </section>\n    </div>\n    <template #footer>\n      <div class=\"footer\">\n        <div class=\"ui-mode-chooser\">\n          <ToggleDarkModeButton />\n        </div>\n        <LanguageChooser class=\"language-chooser\" />\n      </div>\n    </template>\n  </SidePanel>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/section\";\n@use \"@/style/base/typo\";\n\n.side-menu {\n  overflow-y: auto;\n  max-height: 100%;\n  overscroll-behavior: contain;\n\n  .section {\n    display: flex;\n    flex-direction: column;\n    padding: 14px 0;\n\n    &:first-child {\n      padding-top: 7px;\n    }\n\n    &:not(:last-child) {\n      border-bottom: 1px solid rgb(var(--c-dark) / 20%);\n    }\n\n    > a {\n      line-height: 150%;\n\n      &:hover {\n        opacity: 0.5;\n      }\n    }\n\n    &--primary {\n      /* stylelint-disable-next-line no-descending-specificity */\n      > a {\n        @include typo.bold;\n\n        font-size: 4rem;\n        line-height: 100%;\n      }\n    }\n  }\n\n  @include responsive.bp-medium {\n    .section {\n      padding: 10px 0;\n\n      &:first-child {\n        padding-top: 10px;\n      }\n\n      &--primary {\n        > a {\n          font-size: 2.5rem;\n        }\n\n        padding: 12px 0;\n      }\n    }\n  }\n}\n\n.footer {\n  display: flex;\n  min-height: 2rem;\n  align-items: center;\n\n  .ui-mode-chooser {\n    flex-grow: 1;\n  }\n}\n</style>\n","<script type=\"ts\">\nimport { defineComponent } from 'vue';\n\nimport CircleButton from '@/components/ui/button/CircleButton.vue';\nimport IconClose from '@/components/ui/icon/IconClose.vue';\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconClose,\n  },\n});\n</script>\n\n<template>\n  <CircleButton :scale=\"1\">\n    <IconClose color-var=\"--c-white\" />\n  </CircleButton>\n</template>\n","<script lang=\"ts\" setup>\nimport { useNotification } from \"@/composables/notification\";\n\nimport CloseButton from \"./CloseButton.vue\";\n\nconst { messages, setMessageSeen } = useNotification();\n</script>\n\n<template>\n  <div class=\"notifications\">\n    <div\n      v-for=\"(message, index) in messages\"\n      :key=\"`message-${index}-${message.key}`\"\n      class=\"message\"\n      :class=\"`is-${message.level}`\"\n    >\n      <div @click=\"setMessageSeen(message.key)\" class=\"close\">\n        <CloseButton />\n      </div>\n      <div class=\"body\" v-text=\"message.body\" />\n      <div v-if=\"message.action\" class=\"action\">\n        <router-link :to=\"message.action.url\" class=\"button\" v-text=\"message.action.label\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/button\";\n\n.notifications {\n  top: 88px;\n  position: fixed;\n  right: 8px;\n  z-index: 125;\n\n  @include responsive.bp-medium {\n    top: calc(var(--sa-t) + 66px);\n    right: 0;\n    left: 0;\n  }\n}\n\n.message {\n  position: relative;\n  min-width: 300px;\n  max-width: 400px;\n  padding: 1rem;\n  background: rgb(var(--c-live-fg-inverse));\n  display: grid;\n  grid-gap: 0;\n  grid-column-gap: 1rem;\n  grid-template-areas:\n    \"body    close\"\n    \"actions actions\";\n\n  .body {\n    grid-area: body;\n    display: flex;\n    align-items: center;\n  }\n\n  .close {\n    grid-area: close;\n    display: flex;\n    align-items: flex-start;\n    justify-content: flex-end;\n    cursor: pointer;\n  }\n\n  .action {\n    grid-area: actions;\n    margin-top: 1rem;\n\n    .button {\n      @include button.default(2rem);\n    }\n  }\n\n  @include responsive.bp-medium {\n    min-width: unset;\n    max-width: unset;\n    padding-top: 0.5rem;\n    padding-bottom: 0.5rem;\n    padding-right: 0.5rem;\n\n    .action {\n      display: flex;\n      justify-content: center;\n\n      .button {\n        min-width: 150px;\n        max-width: 50%;\n      }\n    }\n  }\n\n  &.is-success {\n    color: rgb(var(--c-success-fg));\n    background: rgb(var(--c-success));\n  }\n\n  &.is-error {\n    color: rgb(var(--c-error-fg));\n    background: rgb(var(--c-error));\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\nimport eventBus from \"@/eventBus\";\n\nexport default defineComponent({\n  setup() {\n    const { isLive } = usePlayerState();\n    const { playLive } = usePlayerControls();\n    const click = () => {\n      if (isLive.value) {\n        // NOTE: this should be implemented in a nicer way\n        eventBus.emit(\"radio:flow\", \"releaseFocus\");\n        return;\n      }\n      playLive();\n    };\n    return {\n      isLive,\n      click,\n    };\n  },\n});\n</script>\n\n<template>\n  <div @click.prevent=\"click\" class=\"on-air\" :class=\"{ 'is-live': isLive }\">\n    <div class=\"on-air__text\" v-text=\"`Live`\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.on-air {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 1.5rem;\n  border-radius: 0.75rem;\n  padding: 0 0.75rem;\n  border: 1px solid rgb(var(--c-fg) / 25%);\n  transition: border 100ms, background 100ms;\n\n  &__text {\n    @include typo.small;\n\n    color: rgb(var(--c-fg));\n  }\n\n  &:not(.is-live) {\n    cursor: pointer;\n  }\n\n  &.is-live,\n  &:hover {\n    background: rgb(var(--c-red));\n    border-color: rgb(var(--c-red));\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    releases: {\n      type: Array,\n      default: () => [],\n    },\n    link: {\n      type: Boolean,\n      default: true,\n    },\n    showDetails: {\n      type: Boolean,\n      default: false,\n    },\n  },\n});\n</script>\n\n<template>\n  <div v-if=\"releases.length\" class=\"media-releases\">\n    <span v-for=\"(release, index) in releases\" :key=\"`media-release-${index}`\" class=\"release\">\n      <span class=\"release__name\" v-text=\"release.name\" />\n      <span v-if=\"showDetails && release.label\" class=\"release__label__name\">\n        <br />\n        <span v-if=\"release.year\" v-text=\"release.year\" class=\"release__year\" />\n        {{ release.label.name }}\n      </span>\n    </span>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.media-releases {\n  display: inline-flex;\n}\n\n.release {\n  max-width: 100%;\n  overflow: hidden;\n  text-overflow: ellipsis;\n\n  &__name {\n    white-space: nowrap;\n  }\n\n  &__label__name {\n    white-space: nowrap;\n  }\n\n  &__year {\n    &::after {\n      content: \"•\";\n      padding-left: 0.25em;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    outlined: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      const baseStyle = {\n        fill: \"none\",\n        stroke: color.value,\n        strokeMiterlimit: 10,\n        strokeWidth: (2.5 * 48) / size.value,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n      if (props.outlined) {\n        return baseStyle;\n      }\n      return {\n        ...baseStyle,\n        fill: color.value,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <!-- eslint-disable max-len -->\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <polygon points=\"35,21 24,21 24,13 13,26 24,26 24,35\" />\n  </svg>\n  <!-- eslint-enable max-len -->\n</template>\n\n<style lang=\"scss\" scoped>\nsvg {\n  path {\n    shape-rendering: geometricprecision;\n  }\n}\n</style>\n","import { useAnalytics } from \"@/composables/analytics\";\nimport { usePlayerState } from \"@/composables/player\";\nimport { useRatingStore } from \"@/stores/rating\";\nimport { useScheduleStore } from \"@/stores/schedule\";\n\nconst useRating = () => {\n  const { ratingByKey, totalsByKey, loadRating, setRating } = useRatingStore();\n  const { currentMedia: scheduleMedia } = useScheduleStore();\n  const { isLive: playerIsLive, isPlaying: playerIsPlaying, media: playerMedia } = usePlayerState();\n  const { logUIEvent } = useAnalytics();\n\n  const getRatingSource = (key: string) => {\n    // check if the rated item (media in our case) is currently active in the player\n    if (playerMedia.value && `${playerMedia.value.ct}:${playerMedia.value.uid}` === key) {\n      return playerIsLive.value ? \"live\" : \"ondemand\";\n    }\n    // if player is not playing (eventually user is listening via other source)\n    // we check if the item (media in our case) is currently scheduled\n    if (!playerIsPlaying.value) {\n      if (scheduleMedia && `${scheduleMedia.ct}:${scheduleMedia.uid}` === key) {\n        return \"live\";\n      }\n    }\n    return \"ondemand\";\n  };\n\n  const setRatingWithSource = async (\n    key: string,\n    value: number | null,\n    opts = {}\n  ): Promise<number | null> => {\n    // NOTE: log should happen after the rating is set\n    if (value && value > 0) {\n      logUIEvent(\"rating:vote:up\", key);\n    } else if (value && value < 0) {\n      logUIEvent(\"rating:vote:down\", key);\n    } else {\n      logUIEvent(\"rating:vote:clear\", key);\n    }\n    return await setRating(key, value, {\n      ...opts,\n      source: getRatingSource(key),\n    });\n  };\n\n  return {\n    ratingByKey,\n    totalsByKey,\n    loadRating,\n    setRating,\n    setRatingWithSource,\n  };\n};\n\nexport { useRating };\n","<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref } from \"vue\";\nimport { debounce } from \"lodash-es\";\n\nimport IconFlash from \"@/components/ui/icon/IconFlash.vue\";\nimport IconHeart from \"@/components/ui/icon/IconHeart.vue\";\nimport { useIconSize } from \"@/composables/icon\";\nimport { useRating } from \"@/composables/rating\";\n\nexport default defineComponent({\n  props: {\n    objKey: {\n      type: String,\n      required: false,\n      default: null,\n    },\n    autoload: {\n      type: Boolean,\n      default: false,\n    },\n    readonly: {\n      type: Boolean,\n      default: false,\n    },\n    iconScale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    hideIfUnset: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    IconHeart,\n    IconFlash,\n  },\n  setup(props) {\n    const { iconSize } = useIconSize(props.iconScale);\n    const { ratingByKey, totalsByKey, loadRating, setRatingWithSource } = useRating();\n    const rating = computed(() => ratingByKey(props.objKey));\n    const totals = computed(() => totalsByKey(props.objKey));\n    const totalsDisplay = computed(() => {\n      if (!totals.value) {\n        return \"\";\n      }\n      return `up: ${totals.value?.up ?? 0}, down: ${totals.value?.down ?? 0}`;\n    });\n    const isFlipped = ref(false);\n    const flipIcon = async () => {\n      isFlipped.value = true;\n      return new Promise<void>((resolve) => {\n        setTimeout(() => {\n          isFlipped.value = false;\n          resolve();\n        }, 200);\n      });\n    };\n    const rate = debounce(\n      async (value: number | null) => {\n        if (props.readonly) {\n          return;\n        }\n        await flipIcon();\n        await setRatingWithSource(props.objKey, value);\n      },\n      200,\n      { leading: true, trailing: false }\n    );\n    onMounted(async () => {\n      if (props.autoload && rating.value === undefined) {\n        await loadRating(props.objKey);\n      }\n    });\n    const style = computed(() => {\n      const isEmpty = rating.value === null || rating.value === undefined;\n      const opacity = props.hideIfUnset && isEmpty ? 0 : 1;\n      return {\n        height: `${iconSize.value}px`,\n        width: `${iconSize.value}px`,\n        opacity,\n      };\n    });\n    return {\n      rating,\n      totalsDisplay,\n      rate,\n      style,\n      iconSize,\n      isFlipped,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"user-rating\"\n    :class=\"{\n      'is-flipped': isFlipped,\n    }\"\n    :style=\"style\"\n    :title=\"totalsDisplay\"\n  >\n    <IconHeart v-if=\"rating === 1\" :scale=\"iconScale\" :color-var=\"colorVar\" @click=\"rate(null)\" />\n    <IconFlash\n      v-else-if=\"rating === -1\"\n      :scale=\"iconScale\"\n      :color-var=\"colorVar\"\n      @click=\"rate(null)\"\n    />\n    <IconHeart v-else :scale=\"iconScale\" :outlined=\"true\" :color-var=\"colorVar\" @click=\"rate(1)\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.user-rating {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: opacity 200ms ease-in-out, transform 200ms ease-in;\n\n  &.is-flipped {\n    transform: rotateY(89deg);\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"none\",\n        stroke: color.value,\n        strokeWidth: 3,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" :style=\"style\">\n    <line x1=\"15\" y1=\"15\" x2=\"33\" y2=\"33\" />\n    <line x1=\"15\" y1=\"33\" x2=\"33\" y2=\"15\" />\n  </svg>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, watch } from \"vue\";\n\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\n// import MediaArtists from \"@/components/catalog/media/MediaArtists.vue\";\nimport MediaReleases from \"@/components/catalog/media/MediaReleases.vue\";\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconRemove from \"@/components/ui/icon/IconRemove.vue\";\nimport { useQueueControls } from \"@/composables/queue\";\n\nconst props = defineProps({\n  objKey: {\n    type: String,\n    required: true,\n  },\n  title: {\n    type: String,\n    default: \"\",\n  },\n  artistDisplay: {\n    type: String,\n    default: \"\",\n  },\n  artists: {\n    type: Array,\n    default: () => [],\n  },\n  releases: {\n    type: Array,\n    default: () => [],\n  },\n  index: {\n    type: Number,\n    required: true,\n  },\n  isCurrent: {\n    type: Boolean,\n    default: false,\n  },\n});\n\nconst root = ref<HTMLElement | null>(null);\nconst { deleteAtIndex } = useQueueControls();\n\nconst canRemove = computed(() => {\n  return !props.isCurrent;\n});\nconst remove = async () => {\n  await deleteAtIndex(props.index);\n};\nconst scrollIntoView = () => {\n  if (!root.value) {\n    return;\n  }\n  try {\n    (root.value as any).scrollIntoViewIfNeeded({ block: \"end\", behavior: \"smooth\" });\n  } catch (e) {\n    console.debug(e);\n  }\n};\nonMounted(() => {\n  if (props.isCurrent) {\n    scrollIntoView();\n  }\n});\nwatch(\n  () => props.isCurrent,\n  async () => {\n    if (props.isCurrent) {\n      scrollIntoView();\n    }\n  }\n);\n</script>\n\n<template>\n  <div\n    ref=\"root\"\n    class=\"media-row\"\n    :class=\"{\n      'is-current': isCurrent,\n    }\"\n  >\n    <div class=\"play\">\n      <PlayAction :obj-key=\"objKey\" :color=\"[255, 255, 255]\" />\n    </div>\n    <div class=\"name\">\n      <span v-text=\"title\" />\n    </div>\n    <div class=\"artist\">\n      <span v-text=\"artistDisplay\" />\n      <!--\n      <MediaArtists :link=\"false\" :artists=\"artists\" />\n      -->\n    </div>\n    <div class=\"release\">\n      <MediaReleases link=\"false\" :releases=\"releases\" />\n    </div>\n    <div class=\"actions\">\n      <CircleButton color-var=\"--c-light\">\n        <UserRating color-var=\"--c-fg\" :obj-key=\"objKey\" />\n      </CircleButton>\n      <CircleButton color-var=\"--c-fg\" @click=\"remove\" :disabled=\"!canRemove\">\n        <IconRemove :scale=\"0.75\" />\n      </CircleButton>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n\n.media-row {\n  display: grid;\n  grid-row-gap: 0;\n  grid-column-gap: 1rem;\n  grid-template-areas:\n    \"play name artist  actions\"\n    \"play name release actions\";\n  grid-template-columns: 1fr 8fr 5fr 4fr;\n  padding: 0.75rem 0;\n\n  > div {\n    display: flex;\n    align-items: center;\n  }\n\n  .play {\n    grid-area: play;\n    padding-left: 0.5rem;\n  }\n\n  .name {\n    grid-area: name;\n\n    @include typo.large;\n\n    min-width: 0;\n\n    > span {\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n  }\n\n  .artist {\n    grid-area: artist;\n    min-width: 0;\n\n    > span {\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n  }\n\n  .release {\n    grid-area: release;\n    min-width: 0;\n    overflow: hidden;\n\n    :deep(span) {\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n  }\n\n  .actions {\n    grid-area: actions;\n    justify-self: flex-end;\n  }\n\n  @include responsive.bp-medium {\n    grid-template-areas:\n      \"play name   actions\"\n      \"play artist actions\";\n    grid-template-columns: 48px 1fr 96px;\n    padding: 0.375rem 0;\n\n    .name {\n      @include typo.default;\n    }\n\n    .artist {\n      @include typo.default;\n      @include typo.dim;\n      @include typo.light;\n\n      min-width: 0;\n      margin-top: -4px; // TODO: just a quick fix\n      overflow: hidden;\n\n      > div {\n        overflow: hidden;\n        white-space: nowrap;\n        text-overflow: ellipsis;\n      }\n    }\n\n    .release,\n    .airplays,\n    .duration {\n      display: none;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nenum Rotate {\n  down = 0,\n  left = 90,\n  up = 180,\n  right = 270,\n}\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    direction: {\n      type: String,\n      default: Rotate.right,\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      const rotate: Rotate = Rotate[props.direction as keyof typeof Rotate];\n      return {\n        fill: \"none\",\n        stroke: color.value,\n        strokeWidth: (3 * 48) / size.value,\n        strokeMiterlimit: 10,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n        transform: `rotate(${rotate}deg)`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <polyline points=\"34,20 24,30 14,20 \" />\n  </svg>\n</template>\n\n<style lang=\"scss\" scoped>\nsvg {\n  &:hover {\n    background: transparent;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    // size: {\n    //   type: Number,\n    //   default: 24,\n    // },\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    outlined: {\n      type: Boolean,\n      default: false,\n    },\n    outlineWidth: {\n      type: Number,\n      default: 1,\n    },\n    outlineOpacity: {\n      type: String,\n      default: \"15%\",\n    },\n    active: {\n      type: Boolean,\n      default: false,\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n    inactive: {\n      type: Boolean,\n      default: false,\n    },\n    backgroundColor: {\n      type: String,\n      default: null,\n    },\n    hoverBackgroundColor: {\n      type: String,\n      default: null,\n    },\n  },\n  setup(props) {\n    const { iconSize } = useIconSize(props.scale);\n    const style = computed(() => {\n      return {\n        // height: `${iconSize.value}px`,\n        // width: `${iconSize.value}px`,\n        // borderRadius: `${iconSize.value / 2}px`,\n      };\n    });\n    const cssVars = computed(() => {\n      return {\n        \"--size\": `${iconSize.value}px`,\n        \"--c-circle-bg-color\": props.backgroundColor,\n        \"--outline-width\": `${props.outlineWidth}px`,\n        \"--outline-opacity\": props.outlineOpacity,\n        \"--hover-bg-color\": props.hoverBackgroundColor,\n      };\n    });\n    return {\n      style,\n      cssVars,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"circle-button\"\n    :style=\"cssVars\"\n    :class=\"{\n      'is-outlined': outlined,\n      'is-active': active,\n      'is-disabled': disabled,\n      'is-inactive': inactive,\n      'has-bg-color': backgroundColor,\n      'has-hover-bg-color': hoverBackgroundColor,\n    }\"\n  >\n    <slot name=\"default\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n\n.circle-button {\n  height: var(--size);\n  width: var(--size);\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--size);\n  min-height: var(--size);\n  border: var(--outline-width) solid transparent;\n  border-radius: calc(var(--size) / 2);\n  cursor: pointer;\n  transition: background 200ms, color 200ms, border 200ms;\n\n  &.has-bg-color {\n    /* TODO: likley this could be implemented in a nicer way.. */\n    background: var(--c-circle-bg-color);\n  }\n\n  &.is-outlined {\n    border-color: rgb(var(--c-fg) / var(--outline-opacity));\n  }\n\n  &.is-active {\n    background: rgb(var(--c-fg));\n  }\n\n  &.is-disabled {\n    opacity: 0.8;\n    pointer-events: none;\n\n    > :deep(*) {\n      opacity: 0.4;\n    }\n  }\n\n  &.is-inactive {\n    opacity: 0.8;\n\n    > :deep(*) {\n      opacity: 0.4;\n    }\n  }\n\n  @include responsive.on-hover {\n    background: rgb(var(--c-fg) / 15%);\n    border-color: transparent;\n\n    &.is-outlined {\n      border-color: transparent;\n    }\n\n    &.has-hover-bg-color {\n      background: var(--hover-bg-color);\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"none\",\n        stroke: color.value,\n        strokeWidth: (2 * 48) / size.value,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <path d=\"M26.1,21.9l1.4-1.4c1-1,2.2-1.5,3.5-1.5h5\" />\n    <path d=\"M36,29h-5c-1.3,0-2.5-0.5-3.5-1.5l-7-7c-1-1-2.2-1.5-3.5-1.5h-5\" />\n    <path d=\"M21.9,26.1l-1.4,1.4c-1,1-2.2,1.5-3.5,1.5h-5\" />\n    <polygon points=\"33.2,23.3 33.2,14.8 37.4,19 \" />\n    <polygon points=\"33.2,33.2 33.2,24.7 37.4,29 \" />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport IconShuffle from \"@/components/ui/icon/IconShuffle.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { useQueueControls } from \"@/composables/queue\";\nimport { useSettings } from \"@/composables/settings\";\n\nimport Circle from \"./button/Circle.vue\";\n\nexport default defineComponent({\n  components: {\n    IconShuffle,\n    Circle,\n  },\n  setup() {\n    const { shuffleMode } = useSettings();\n    const { shuffleQueue } = useQueueControls();\n    const { isWeb } = useDevice();\n    const onClick = () => {\n      if (isWeb) {\n        shuffleMode.value = !shuffleMode.value;\n        if (shuffleMode.value) {\n          shuffleQueue();\n        }\n      } else {\n        shuffleQueue();\n      }\n    };\n    return {\n      shuffleMode,\n      onClick,\n    };\n  },\n});\n</script>\n\n<template>\n  <Circle\n    class=\"shuffle-control\"\n    :background-color=\"shuffleMode ? 'rgb(var(--c-light))' : 'rgb(var(--c-dark))'\"\n    :hover-background-color=\"\n      shuffleMode ? 'rgb(var(--c-light) / 90%)' : 'rgb(var(--c-light) / 10%)'\n    \"\n    @click.prevent=\"onClick\"\n  >\n    <IconShuffle :color-var=\"shuffleMode ? '--c-dark' : '--c-light'\" />\n  </Circle>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent, watch } from \"vue\";\nimport { useEventListener } from \"@vueuse/core\";\n\nimport QueueMedia from \"@/components/player/QueueMedia.vue\";\nimport IconCaret from \"@/components/ui/icon/IconCaret.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { useQueueControls, useQueueState } from \"@/composables/queue\";\n\nimport Circle from \"./button/Circle.vue\";\nimport ShuffleControl from \"./ShuffleControl.vue\";\n\nexport default defineComponent({\n  components: {\n    QueueMedia,\n    ShuffleControl,\n    IconCaret,\n    Circle,\n  },\n  props: {\n    isVisible: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: [\"close\"],\n  setup(props, { emit }) {\n    const { isMobile } = useDevice();\n    const { currentMedia, queuedMedia, queueLength } = useQueueState();\n    const { clearQueue } = useQueueControls();\n    const close = () => emit(\"close\");\n    watch(\n      () => queueLength.value,\n      (newValue) => {\n        if (newValue < 1) {\n          close();\n        }\n      }\n    );\n    useEventListener(document, \"keydown\", (e) => {\n      if (e.code === \"KeyX\") {\n        close();\n      }\n    });\n    return {\n      isMobile,\n      close,\n      queuedMedia,\n      currentMedia,\n      clearQueue,\n    };\n  },\n});\n</script>\n<template>\n  <transition name=\"fade\">\n    <div v-if=\"isVisible\" @click=\"close\" class=\"mask\" />\n  </transition>\n  <transition name=\"slide\">\n    <div\n      v-if=\"isVisible\"\n      class=\"queue\"\n      :style=\"{\n        '--c-bg': 'var(--c-black)',\n        '--c-fg': 'var(--c-white)',\n      }\"\n    >\n      <div v-if=\"isMobile\" @click.prevent=\"close\" class=\"header\" />\n      <div class=\"container\">\n        <QueueMedia\n          v-for=\"(media, index) in queuedMedia\"\n          :key=\"`media-row-${media.uid}`\"\n          :obj-key=\"`${media.ct}:${media.uid}`\"\n          :title=\"media.name\"\n          :artist-display=\"media.artistDisplay\"\n          :releases=\"media.releases\"\n          :index=\"index\"\n          :is-current=\"media === currentMedia\"\n        />\n      </div>\n    </div>\n  </transition>\n  <transition name=\"slide-actions\">\n    <div\n      v-if=\"isVisible\"\n      class=\"actions\"\n      :style=\"{\n        '--c-bg': 'var(--c-black)',\n        '--c-fg': 'var(--c-white)',\n      }\"\n    >\n      <div class=\"container\">\n        <ShuffleControl />\n        <div class=\"clear-queue\">\n          <div class=\"button\" v-text=\"'Clear queue'\" @click=\"clearQueue\" />\n        </div>\n        <Circle\n          @click=\"close\"\n          background-color=\"rgb(var(--c-black))\"\n          hover-background-color=\"rgb(var(--c-white) / 10%)\"\n        >\n          <IconCaret direction=\"down\" color-var=\"--c-white\" />\n        </Circle>\n      </div>\n    </div>\n  </transition>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n\n/*\n NOTE: `--player-height` is set in parent component\n */\n\n.mask {\n  top: 0;\n  position: fixed;\n  height: 100%;\n  width: 100%;\n  z-index: 20;\n  left: 0;\n  background: rgb(var(--c-black) / 80%);\n\n  @include responsive.bp-medium {\n    background: unset;\n  }\n}\n\n.queue {\n  z-index: 20;\n  position: fixed;\n  width: 100%;\n  min-height: 100px;\n  bottom: 72px; // player height (desktop)\n  max-height: calc(100% - 80px);\n  overflow-y: auto;\n  color: rgb(var(--c-white));\n  background: rgb(var(--c-black));\n  overscroll-behavior: contain;\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  @include responsive.bp-medium {\n    max-width: unset;\n    box-shadow: 0 -4px 8px 4px rgb(0 0 0 / 10%);\n    border-top-left-radius: 28px;\n    border-top-right-radius: 28px;\n\n    .header {\n      top: 0;\n      position: sticky;\n      height: 28px;\n      background: rgb(var(--c-black));\n      z-index: 2;\n    }\n  }\n\n  .container {\n    @include container.default;\n\n    padding-top: 2rem;\n    padding-bottom: 92px;\n  }\n\n  @include responsive.bp-medium {\n    /* sizing based on player height & 60px action bar */\n    max-height: calc(100% - calc(var(--player-height) + 60px + var(--sa-t)));\n    bottom: calc(var(--player-height) + 60px);\n    box-shadow: 0 -4px 8px 4px rgb(0 0 0 / 10%);\n  }\n}\n\n.actions {\n  position: fixed;\n  height: 76px;\n  width: 100%;\n  z-index: 21;\n  border-top: 1px solid rgb(var(--c-white) / 25%);\n  bottom: 72px; // player height\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  background: rgb(var(--c-black));\n\n  .container {\n    @include container.default;\n\n    padding-top: 0.5rem;\n    padding-bottom: 0.5rem;\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n\n    > div {\n      margin-left: 0.5rem;\n    }\n  }\n\n  @include responsive.bp-medium {\n    height: 60px;\n    bottom: var(--player-height);\n\n    .container {\n      > div {\n        margin-left: unset;\n      }\n\n      .clear-queue {\n        flex-grow: 1;\n        align-items: center;\n        justify-content: center;\n        display: flex;\n      }\n    }\n  }\n}\n\n// NOTE: generalise button styling if also used at other place(s)\n.button {\n  cursor: pointer;\n  height: 48px;\n  border-radius: 24px;\n  display: flex;\n  align-items: center;\n  padding: 0 1.5rem;\n  color: rgb(var(--c-white));\n  border: 1px solid rgb(var(--c-white) / 20%);\n  transition: background-color 200ms;\n\n  @include responsive.on-hover {\n    border-color: transparent;\n    background: rgb(var(--c-white) / 10%);\n  }\n\n  @include responsive.bp-medium {\n    height: 40px;\n    font-size: 16px;\n\n    @include typo.light;\n  }\n}\n\n// mask transition\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 200ms;\n}\n\n.fade-enter-from {\n  opacity: 0;\n}\n\n.fade-leave-to {\n  opacity: 0;\n}\n\n// queue panel transition\n.slide-enter-active,\n.slide-leave-active {\n  transition: transform 200ms, opacity 200ms;\n}\n\n.slide-enter-from {\n  transform: translate(0, 100%);\n  opacity: 0;\n}\n\n.slide-leave-to {\n  transform: translate(0, 200%);\n}\n\n// queue item list transition\n.queue-enter-active,\n.queue-leave-active {\n  transition: opacity 300ms, transform 100ms;\n}\n\n.queue-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        stroke: \"none\",\n        fill: color.value,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <!-- eslint-disable max-len -->\n  <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" :style=\"style\">\n    <rect x=\"16\" y=\"14.5\" width=\"20\" height=\"3\" />\n    <rect x=\"16\" y=\"22.5\" width=\"20\" height=\"3\" />\n    <rect x=\"16\" y=\"30.5\" width=\"20\" height=\"3\" />\n\n    <circle cx=\"12\" cy=\"24\" r=\"2\" />\n    <circle cx=\"12\" cy=\"16\" r=\"2\" />\n    <circle cx=\"12\" cy=\"32\" r=\"2\" />\n  </svg>\n  <!-- eslint-enable max-len -->\n</template>\n","/*! For license information please see shifty.js.LICENSE.txt */\n!function(t,n){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(\"shifty\",[],n):\"object\"==typeof exports?exports.shifty=n():t.shifty=n()}(self,(function(){return function(){\"use strict\";var t={720:function(t,n,e){e.r(n),e.d(n,{Scene:function(){return sn},Tweenable:function(){return kt},interpolate:function(){return nn},processTweens:function(){return dt},setBezierFunction:function(){return $},shouldScheduleUpdate:function(){return bt},tween:function(){return Pt},unsetBezierFunction:function(){return L}});var r={};e.r(r),e.d(r,{bounce:function(){return D},bouncePast:function(){return q},easeFrom:function(){return B},easeFromTo:function(){return Q},easeInBack:function(){return E},easeInCirc:function(){return j},easeInCubic:function(){return c},easeInExpo:function(){return w},easeInOutBack:function(){return T},easeInOutCirc:function(){return P},easeInOutCubic:function(){return l},easeInOutExpo:function(){return S},easeInOutQuad:function(){return s},easeInOutQuart:function(){return v},easeInOutQuint:function(){return d},easeInOutSine:function(){return b},easeInQuad:function(){return u},easeInQuart:function(){return h},easeInQuint:function(){return y},easeInSine:function(){return g},easeOutBack:function(){return A},easeOutBounce:function(){return M},easeOutCirc:function(){return k},easeOutCubic:function(){return f},easeOutExpo:function(){return O},easeOutQuad:function(){return a},easeOutQuart:function(){return p},easeOutQuint:function(){return _},easeOutSine:function(){return m},easeTo:function(){return N},elastic:function(){return I},linear:function(){return o},swingFrom:function(){return x},swingFromTo:function(){return F},swingTo:function(){return C}});var i={};e.r(i),e.d(i,{afterTween:function(){return Jt},beforeTween:function(){return Ht},doesApply:function(){return Wt},tweenCreated:function(){return Gt}});var o=function(t){return t},u=function(t){return Math.pow(t,2)},a=function(t){return-(Math.pow(t-1,2)-1)},s=function(t){return(t/=.5)<1?.5*Math.pow(t,2):-.5*((t-=2)*t-2)},c=function(t){return Math.pow(t,3)},f=function(t){return Math.pow(t-1,3)+1},l=function(t){return(t/=.5)<1?.5*Math.pow(t,3):.5*(Math.pow(t-2,3)+2)},h=function(t){return Math.pow(t,4)},p=function(t){return-(Math.pow(t-1,4)-1)},v=function(t){return(t/=.5)<1?.5*Math.pow(t,4):-.5*((t-=2)*Math.pow(t,3)-2)},y=function(t){return Math.pow(t,5)},_=function(t){return Math.pow(t-1,5)+1},d=function(t){return(t/=.5)<1?.5*Math.pow(t,5):.5*(Math.pow(t-2,5)+2)},g=function(t){return 1-Math.cos(t*(Math.PI/2))},m=function(t){return Math.sin(t*(Math.PI/2))},b=function(t){return-.5*(Math.cos(Math.PI*t)-1)},w=function(t){return 0===t?0:Math.pow(2,10*(t-1))},O=function(t){return 1===t?1:1-Math.pow(2,-10*t)},S=function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},j=function(t){return-(Math.sqrt(1-t*t)-1)},k=function(t){return Math.sqrt(1-Math.pow(t-1,2))},P=function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},M=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},E=function(t){var n=1.70158;return t*t*((n+1)*t-n)},A=function(t){var n=1.70158;return(t-=1)*t*((n+1)*t+n)+1},T=function(t){var n=1.70158;return(t/=.5)<1?t*t*((1+(n*=1.525))*t-n)*.5:.5*((t-=2)*t*((1+(n*=1.525))*t+n)+2)},I=function(t){return-1*Math.pow(4,-8*t)*Math.sin((6*t-1)*(2*Math.PI)/2)+1},F=function(t){var n=1.70158;return(t/=.5)<1?t*t*((1+(n*=1.525))*t-n)*.5:.5*((t-=2)*t*((1+(n*=1.525))*t+n)+2)},x=function(t){var n=1.70158;return t*t*((n+1)*t-n)},C=function(t){var n=1.70158;return(t-=1)*t*((n+1)*t+n)+1},D=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},q=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?2-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?2-(7.5625*(t-=2.25/2.75)*t+.9375):2-(7.5625*(t-=2.625/2.75)*t+.984375)},Q=function(t){return(t/=.5)<1?.5*Math.pow(t,4):-.5*((t-=2)*Math.pow(t,3)-2)},B=function(t){return Math.pow(t,4)},N=function(t){return Math.pow(t,.25)};function R(t,n,e,r,i,o){var u,a,s,c,f,l=0,h=0,p=0,v=function(t){return((l*t+h)*t+p)*t},y=function(t){return(3*l*t+2*h)*t+p},_=function(t){return t>=0?t:0-t};return l=1-(p=3*n)-(h=3*(r-n)-p),s=1-(f=3*e)-(c=3*(i-e)-f),u=t,a=function(t){return 1/(200*t)}(o),function(t){return((s*t+c)*t+f)*t}(function(t,n){var e,r,i,o,u,a;for(i=t,a=0;a<8;a++){if(o=v(i)-t,_(o)<n)return i;if(u=y(i),_(u)<1e-6)break;i-=o/u}if((i=t)<(e=0))return e;if(i>(r=1))return r;for(;e<r;){if(o=v(i),_(o-t)<n)return i;t>o?e=i:r=i,i=.5*(r-e)+e}return i}(u,a))}var z,U=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.25,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.25,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.75,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.75;return function(i){return R(i,t,n,e,r,1)}},$=function(t,n,e,r,i){var o=U(n,e,r,i);return o.displayName=t,o.x1=n,o.y1=e,o.x2=r,o.y2=i,kt.formulas[t]=o},L=function(t){return delete kt.formulas[t]};function V(t,n){if(!(t instanceof n))throw new TypeError(\"Cannot call a class as a function\")}function W(t,n){for(var e=0;e<n.length;e++){var r=n[e];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function G(t){return G=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},G(t)}function H(t){return function(t){if(Array.isArray(t))return J(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,n){if(t){if(\"string\"==typeof t)return J(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?J(t,n):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function J(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=new Array(n);e<n;e++)r[e]=t[e];return r}function K(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,r)}return e}function X(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?K(Object(e),!0).forEach((function(n){Y(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):K(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function Y(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}var Z,tt,nt,et=\"linear\",rt=\"undefined\"!=typeof window?window:e.g,it=\"afterTween\",ot=\"afterTweenEnd\",ut=\"beforeTween\",at=\"tweenCreated\",st=\"function\",ct=\"string\",ft=rt.requestAnimationFrame||rt.webkitRequestAnimationFrame||rt.oRequestAnimationFrame||rt.msRequestAnimationFrame||rt.mozCancelRequestAnimationFrame&&rt.mozRequestAnimationFrame||setTimeout,lt=function(){},ht=null,pt=null,vt=X({},r),yt=function(t,n,e,r,i,o,u){var a,s,c,f=t<o?0:(t-o)/i,l=!1;for(var h in u&&u.call&&(l=!0,a=u(f)),n)l||(a=((s=u[h]).call?s:vt[s])(f)),c=e[h],n[h]=c+(r[h]-c)*a;return n},_t=function(t,n){var e=t._timestamp,r=t._currentState,i=t._delay;if(!(n<e+i)){var o=t._duration,u=t._targetState,a=e+i+o,s=n>a?a:n;t._hasEnded=s>=a;var c=o-(a-s),f=t._filters.length>0;if(t._hasEnded)return t._render(u,t._data,c),t.stop(!0);f&&t._applyFilter(ut),s<e+i?e=o=s=1:e+=i,yt(s,r,t._originalState,u,o,e,t._easing),f&&t._applyFilter(it),t._render(r,t._data,c)}},dt=function(){for(var t,n=kt.now(),e=ht;e;)t=e._next,_t(e,n),e=t},gt=Date.now||function(){return+new Date},mt=!1,bt=function(t){t&&mt||(mt=t,t&&wt())},wt=function t(){Z=gt(),mt&&ft.call(rt,t,16.666666666666668),dt()},Ot=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:et,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(Array.isArray(n)){var r=U.apply(void 0,H(n));return r}var i=G(n);if(vt[n])return vt[n];if(i===ct||i===st)for(var o in t)e[o]=n;else for(var u in t)e[u]=n[u]||et;return e},St=function(t){t===ht?(ht=t._next)?ht._previous=null:pt=null:t===pt?(pt=t._previous)?pt._next=null:ht=null:(tt=t._previous,nt=t._next,tt._next=nt,nt._previous=tt),t._previous=t._next=null},jt=\"function\"==typeof Promise?Promise:null;z=Symbol.toStringTag;var kt=function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;V(this,t),Y(this,z,\"Promise\"),this._config={},this._data={},this._delay=0,this._filters=[],this._next=null,this._previous=null,this._timestamp=null,this._hasEnded=!1,this._resolve=null,this._reject=null,this._currentState=n||{},this._originalState={},this._targetState={},this._start=lt,this._render=lt,this._promiseCtor=jt,e&&this.setConfig(e)}var n,e;return n=t,e=[{key:\"_applyFilter\",value:function(t){for(var n=this._filters.length;n>0;n--){var e=this._filters[n-n][t];e&&e(this)}}},{key:\"tween\",value:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;return this._isPlaying&&this.stop(),!n&&this._config||this.setConfig(n),this._pausedAtTime=null,this._timestamp=t.now(),this._start(this.get(),this._data),this._delay&&this._render(this._currentState,this._data,0),this._resume(this._timestamp)}},{key:\"setConfig\",value:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this._config;for(var r in n)e[r]=n[r];var i=e.promise,o=void 0===i?this._promiseCtor:i,u=e.start,a=void 0===u?lt:u,s=e.finish,c=e.render,f=void 0===c?this._config.step||lt:c,l=e.step,h=void 0===l?lt:l;this._data=e.data||e.attachment||this._data,this._isPlaying=!1,this._pausedAtTime=null,this._scheduleId=null,this._delay=n.delay||0,this._start=a,this._render=f||h,this._duration=e.duration||500,this._promiseCtor=o,s&&(this._resolve=s);var p=n.from,v=n.to,y=void 0===v?{}:v,_=this._currentState,d=this._originalState,g=this._targetState;for(var m in p)_[m]=p[m];var b=!1;for(var w in _){var O=_[w];b||G(O)!==ct||(b=!0),d[w]=O,g[w]=y.hasOwnProperty(w)?y[w]:O}if(this._easing=Ot(this._currentState,e.easing,this._easing),this._filters.length=0,b){for(var S in t.filters)t.filters[S].doesApply(this)&&this._filters.push(t.filters[S]);this._applyFilter(at)}return this}},{key:\"then\",value:function(t,n){var e=this;return this._promise=new this._promiseCtor((function(t,n){e._resolve=t,e._reject=n})),this._promise.then(t,n)}},{key:\"catch\",value:function(t){return this.then().catch(t)}},{key:\"finally\",value:function(t){return this.then().finally(t)}},{key:\"get\",value:function(){return X({},this._currentState)}},{key:\"set\",value:function(t){this._currentState=t}},{key:\"pause\",value:function(){if(this._isPlaying)return this._pausedAtTime=t.now(),this._isPlaying=!1,St(this),this}},{key:\"resume\",value:function(){return this._resume()}},{key:\"_resume\",value:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.now();return null===this._timestamp?this.tween():this._isPlaying?this._promise:(this._pausedAtTime&&(this._timestamp+=n-this._pausedAtTime,this._pausedAtTime=null),this._isPlaying=!0,null===ht?(ht=this,pt=this):(this._previous=pt,pt._next=this,pt=this),this)}},{key:\"seek\",value:function(n){n=Math.max(n,0);var e=t.now();return this._timestamp+n===0||(this._timestamp=e-n,_t(this,e)),this}},{key:\"stop\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this._isPlaying)return this;this._isPlaying=!1,St(this);var n=this._filters.length>0;return t&&(n&&this._applyFilter(ut),yt(1,this._currentState,this._originalState,this._targetState,1,0,this._easing),n&&(this._applyFilter(it),this._applyFilter(ot))),this._resolve&&this._resolve({data:this._data,state:this._currentState,tweenable:this}),this._resolve=null,this._reject=null,this}},{key:\"cancel\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=this._currentState,e=this._data,r=this._isPlaying;return r?(this._reject&&this._reject({data:e,state:n,tweenable:this}),this._resolve=null,this._reject=null,this.stop(t)):this}},{key:\"isPlaying\",value:function(){return this._isPlaying}},{key:\"hasEnded\",value:function(){return this._hasEnded}},{key:\"setScheduleFunction\",value:function(n){t.setScheduleFunction(n)}},{key:\"data\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return t&&(this._data=X({},t)),this._data}},{key:\"dispose\",value:function(){for(var t in this)delete this[t]}}],e&&W(n.prototype,e),t}();function Pt(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=new kt;return n.tween(t),n.tweenable=n,n}Y(kt,\"now\",(function(){return Z})),Y(kt,\"setScheduleFunction\",(function(t){return ft=t})),Y(kt,\"filters\",{}),Y(kt,\"formulas\",vt),bt(!0);var Mt,Et,At=/(\\d|-|\\.)/,Tt=/([^\\-0-9.]+)/g,It=/[0-9.-]+/g,Ft=(Mt=It.source,Et=/,\\s*/.source,new RegExp(\"rgba?\\\\(\".concat(Mt).concat(Et).concat(Mt).concat(Et).concat(Mt,\"(\").concat(Et).concat(Mt,\")?\\\\)\"),\"g\")),xt=/^.*\\(/,Ct=/#([0-9]|[a-f]){3,6}/gi,Dt=\"VAL\",qt=function(t,n){return t.map((function(t,e){return\"_\".concat(n,\"_\").concat(e)}))};function Qt(t){return parseInt(t,16)}var Bt=function(t){return\"rgb(\".concat((n=t,3===(n=n.replace(/#/,\"\")).length&&(n=(n=n.split(\"\"))[0]+n[0]+n[1]+n[1]+n[2]+n[2]),[Qt(n.substr(0,2)),Qt(n.substr(2,2)),Qt(n.substr(4,2))]).join(\",\"),\")\");var n},Nt=function(t,n,e){var r=n.match(t),i=n.replace(t,Dt);return r&&r.forEach((function(t){return i=i.replace(Dt,e(t))})),i},Rt=function(t){for(var n in t){var e=t[n];\"string\"==typeof e&&e.match(Ct)&&(t[n]=Nt(Ct,e,Bt))}},zt=function(t){var n=t.match(It),e=n.slice(0,3).map(Math.floor),r=t.match(xt)[0];if(3===n.length)return\"\".concat(r).concat(e.join(\",\"),\")\");if(4===n.length)return\"\".concat(r).concat(e.join(\",\"),\",\").concat(n[3],\")\");throw new Error(\"Invalid rgbChunk: \".concat(t))},Ut=function(t){return t.match(It)},$t=function(t,n){var e={};return n.forEach((function(n){e[n]=t[n],delete t[n]})),e},Lt=function(t,n){return n.map((function(n){return t[n]}))},Vt=function(t,n){return n.forEach((function(n){return t=t.replace(Dt,+n.toFixed(4))})),t},Wt=function(t){for(var n in t._currentState)if(\"string\"==typeof t._currentState[n])return!0;return!1};function Gt(t){var n=t._currentState;[n,t._originalState,t._targetState].forEach(Rt),t._tokenData=function(t){var n,e,r={};for(var i in t){var o=t[i];\"string\"==typeof o&&(r[i]={formatString:(n=o,e=void 0,e=n.match(Tt),e?(1===e.length||n.charAt(0).match(At))&&e.unshift(\"\"):e=[\"\",\"\"],e.join(Dt)),chunkNames:qt(Ut(o),i)})}return r}(n)}function Ht(t){var n=t._currentState,e=t._originalState,r=t._targetState,i=t._easing,o=t._tokenData;!function(t,n){var e=function(e){var r=n[e].chunkNames,i=t[e];if(\"string\"==typeof i){var o=i.split(\" \"),u=o[o.length-1];r.forEach((function(n,e){return t[n]=o[e]||u}))}else r.forEach((function(n){return t[n]=i}));delete t[e]};for(var r in n)e(r)}(i,o),[n,e,r].forEach((function(t){return function(t,n){var e=function(e){Ut(t[e]).forEach((function(r,i){return t[n[e].chunkNames[i]]=+r})),delete t[e]};for(var r in n)e(r)}(t,o)}))}function Jt(t){var n=t._currentState,e=t._originalState,r=t._targetState,i=t._easing,o=t._tokenData;[n,e,r].forEach((function(t){return function(t,n){for(var e in n){var r=n[e],i=r.chunkNames,o=r.formatString,u=Vt(o,Lt($t(t,i),i));t[e]=Nt(Ft,u,zt)}}(t,o)})),function(t,n){for(var e in n){var r=n[e].chunkNames,i=t[r[0]];t[e]=\"string\"==typeof i?r.map((function(n){var e=t[n];return delete t[n],e})).join(\" \"):i}}(i,o)}function Kt(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,r)}return e}function Xt(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?Kt(Object(e),!0).forEach((function(n){Yt(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Kt(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function Yt(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}var Zt=new kt,tn=kt.filters,nn=function(t,n,e,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=Xt({},t),u=Ot(t,r);for(var a in Zt._filters.length=0,Zt.set({}),Zt._currentState=o,Zt._originalState=t,Zt._targetState=n,Zt._easing=u,tn)tn[a].doesApply(Zt)&&Zt._filters.push(tn[a]);Zt._applyFilter(\"tweenCreated\"),Zt._applyFilter(\"beforeTween\");var s=yt(e,o,t,n,1,i,u);return Zt._applyFilter(\"afterTween\"),s};function en(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=new Array(n);e<n;e++)r[e]=t[e];return r}function rn(t,n){if(!(t instanceof n))throw new TypeError(\"Cannot call a class as a function\")}function on(t,n){for(var e=0;e<n.length;e++){var r=n[e];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function un(t,n){var e=n.get(t);if(!e)throw new TypeError(\"attempted to get private field on non-instance\");return e.get?e.get.call(t):e.value}var an=new WeakMap,sn=function(){function t(){rn(this,t),an.set(this,{writable:!0,value:[]});for(var n=arguments.length,e=new Array(n),r=0;r<n;r++)e[r]=arguments[r];e.forEach(this.add.bind(this))}var n,e;return n=t,(e=[{key:\"add\",value:function(t){return un(this,an).push(t),t}},{key:\"remove\",value:function(t){var n=un(this,an).indexOf(t);return~n&&un(this,an).splice(n,1),t}},{key:\"empty\",value:function(){return this.tweenables.map(this.remove.bind(this))}},{key:\"isPlaying\",value:function(){return un(this,an).some((function(t){return t.isPlaying()}))}},{key:\"play\",value:function(){return un(this,an).forEach((function(t){return t.tween()})),this}},{key:\"pause\",value:function(){return un(this,an).forEach((function(t){return t.pause()})),this}},{key:\"resume\",value:function(){return this.playingTweenables.forEach((function(t){return t.resume()})),this}},{key:\"stop\",value:function(t){return un(this,an).forEach((function(n){return n.stop(t)})),this}},{key:\"tweenables\",get:function(){return function(t){if(Array.isArray(t))return en(t)}(t=un(this,an))||function(t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,n){if(t){if(\"string\"==typeof t)return en(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?en(t,n):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}();var t}},{key:\"playingTweenables\",get:function(){return un(this,an).filter((function(t){return!t.hasEnded()}))}},{key:\"promises\",get:function(){return un(this,an).map((function(t){return t.then()}))}}])&&on(n.prototype,e),t}();kt.filters.token=i}},n={};function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{}};return t[r](i,i.exports,e),i.exports}return e.d=function(t,n){for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e(720)}()}));\n//# sourceMappingURL=shifty.js.map","<script lang=\"ts\">\nimport { defineComponent, ref, watch } from \"vue\";\nimport { tween } from \"shifty\";\n\nexport default defineComponent({\n  props: {\n    value: {\n      type: Number,\n      default: 0,\n    },\n  },\n  emits: [\"tweenStart\", \"tweenEnd\"],\n  setup(props, { emit }) {\n    const display = ref(props.value);\n\n    const tweenValue = async (fromValue: number, toValue: number) => {\n      const diff = toValue - fromValue;\n      emit(\"tweenStart\", diff);\n      tween({\n        from: { n: fromValue },\n        to: { n: toValue },\n        duration: 800,\n        easing: \"easeOutQuad\",\n        render: (state) => {\n          display.value = state.n.toFixed(0);\n        },\n      });\n      setTimeout(() => {\n        emit(\"tweenEnd\", diff);\n      }, 1000);\n    };\n    watch(\n      () => props.value,\n      async (newValue, oldValue) => {\n        await tweenValue(oldValue, newValue);\n      }\n    );\n    return {\n      display,\n    };\n  },\n});\n</script>\n<template>\n  <span v-text=\"display\" />\n</template>\n","<script setup lang=\"ts\">\nimport { ref } from \"vue\";\n\nimport IconQueue from \"@/components/ui/icon/IconQueue.vue\";\nimport AnimatedNumber from \"@/components/ui/number/AnimatedNumber.vue\";\nimport { useAnalytics } from \"@/composables/analytics\";\n\nimport Circle from \"./button/Circle.vue\";\nconst { logUIEvent } = useAnalytics();\n\nconst props = defineProps<{\n  queueVisible?: boolean;\n  numQueued: number;\n}>();\n\nconst emit = defineEmits<{\n  (e: \"toggleVisibility\"): void;\n}>();\n\nconst isTweening = ref(false);\n\nconst onClick = () => {\n  emit(\"toggleVisibility\");\n\n  logUIEvent(props.queueVisible ? \"queue:hide\" : \"queue:show\");\n};\n\nconst onTweenStart = (diff: number) => {\n  if (diff === -1) return;\n  isTweening.value = true;\n};\n\nconst onTweenEnd = (diff: number) => {\n  if (diff === -1) return;\n  isTweening.value = false;\n};\n</script>\n\n<template>\n  <Circle\n    class=\"queue-control\"\n    :disabled=\"numQueued < 1\"\n    @click.prevent=\"onClick\"\n    :style=\"{\n      color: queueVisible ? 'rgb(var(--c-bg) / 100%)' : 'rgb(var(--c-fg) / 100%)',\n    }\"\n  >\n    <IconQueue color-var=\"--c-fg\" :num-queued=\"numQueued\" />\n    <div\n      v-if=\"numQueued > 0\"\n      class=\"number\"\n      :class=\"{\n        'is-tweening': isTweening,\n      }\"\n    >\n      <AnimatedNumber @tween-start=\"onTweenStart\" @tween-end=\"onTweenEnd\" :value=\"numQueued\" />\n    </div>\n  </Circle>\n</template>\n\n<style lang=\"scss\" scoped>\n.queue-control {\n  .number {\n    top: -4px;\n    position: absolute;\n    width: auto;\n    pointer-events: none;\n    display: flex;\n    right: -3px;\n    background: rgb(var(--c-light));\n    min-width: 20px;\n    min-height: 20px;\n    border-radius: 10px;\n    color: rgb(var(--c-dark));\n    padding: 0 6px;\n    font-size: 12px;\n    box-shadow: 0 0 3px rgb(0 0 0 / 40%);\n    align-items: center;\n    justify-content: center;\n    transition: font-size 200ms;\n\n    &.is-tweening {\n      font-size: 20px;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport MediaArtists from \"@/components/catalog/media/MediaArtists.vue\";\n\nexport default defineComponent({\n  props: {\n    media: {\n      type: Object,\n      required: false,\n      default: () => null,\n    },\n  },\n  components: {\n    MediaArtists,\n  },\n  setup() {\n    return {};\n  },\n});\n</script>\n\n<template>\n  <div class=\"current-media\">\n    <div v-if=\"media\" class=\"metadata\">\n      <router-link\n        class=\"metadata--primary\"\n        :to=\"{\n          name: 'mediaDetail',\n          params: {\n            uid: media.uid,\n          },\n        }\"\n        v-text=\"media.name\"\n      />\n      <div class=\"metadata--secondary\">\n        <MediaArtists :artists=\"media.artists\" :link=\"false\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.current-media {\n  display: grid;\n\n  .metadata {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    justify-content: center;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    &--primary,\n    &--secondary {\n      max-width: 100%;\n      overflow: inherit;\n      white-space: inherit;\n      text-overflow: inherit;\n    }\n\n    &--secondary {\n      @include typo.dim;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    rotate: {\n      type: Number,\n      default: 0,\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"none\",\n        stroke: color.value,\n        strokeWidth: 2.75,\n        transform: `rotate(${props.rotate}deg)`,\n        strokeMiterlimit: 10,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n      color,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <rect x=\"30\" y=\"16\" width=\"2.5\" height=\"16\" stroke=\"none\" :fill=\"color\" />\n    <polygon points=\"26.7,24 15,29.8 15,18.2\" />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport IconSkip from \"@/components/ui/icon/IconSkip.vue\";\n\nimport Circle from \"./Circle.vue\";\n\nexport default defineComponent({\n  components: {\n    Circle,\n    IconSkip,\n  },\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    rotate: {\n      type: Number,\n      default: 0,\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n    outlined: {\n      type: Boolean,\n      default: false,\n    },\n  },\n});\n</script>\n\n<template>\n  <Circle :disabled=\"disabled\" :scale=\"scale\" :outlined=\"outlined\">\n    <IconSkip :rotate=\"rotate\" :scale=\"scale\" />\n  </Circle>\n</template>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\n\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\nimport { useQueueControls, useQueueState } from \"@/composables/queue\";\n\nimport ButtonPlay from \"../button/ButtonPlay.vue\";\nimport ButtonSkip from \"../button/ButtonSkip.vue\";\n\nexport default defineComponent({\n  components: {\n    ButtonSkip,\n    ButtonPlay,\n  },\n  props: {\n    fgColor: {\n      type: Array as PropType<Array<number>>,\n      default: () => [0, 0, 0],\n    },\n  },\n  setup() {\n    const { pause, resume: play } = usePlayerControls();\n    const { isLive, isPlaying, isBuffering } = usePlayerState();\n    const { previousIndex, nextIndex } = useQueueState();\n    const { playPrevious, playNext } = useQueueControls();\n    const hasPrevious = computed(() => previousIndex.value !== null);\n    const hasNext = computed(() => nextIndex.value !== null);\n    return {\n      isLive,\n      hasNext,\n      hasPrevious,\n      isPlaying,\n      isBuffering,\n      playNext,\n      playPrevious,\n      pause,\n      play,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"player-control\"\n    :class=\"{\n      'is-live': isLive,\n    }\"\n  >\n    <div class=\"left\">\n      <ButtonSkip\n        :scale=\"1\"\n        :outlined=\"true\"\n        :rotate=\"180\"\n        :disabled=\"!hasPrevious\"\n        @click.prevent=\"playPrevious\"\n      />\n    </div>\n    <ButtonPlay\n      :is-playing=\"isPlaying\"\n      :is-buffering=\"isBuffering\"\n      :outlined=\"true\"\n      :outline-width=\"3\"\n      outline-opacity=\"100%\"\n      :base-color=\"fgColor\"\n      :scale=\"1.25\"\n      @pause=\"pause\"\n      @play=\"play\"\n    />\n    <div class=\"right\">\n      <ButtonSkip :scale=\"1\" :outlined=\"true\" :disabled=\"!hasNext\" @click.prevent=\"playNext\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.player-control {\n  display: flex;\n  column-gap: 1rem;\n\n  .left,\n  .right {\n    display: flex;\n    align-items: center;\n    transition: opacity 500ms;\n  }\n\n  &.is-live {\n    .left,\n    .right {\n      opacity: 0;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    seconds: {\n      type: Number,\n      default: 0,\n      required: true,\n      validator: (value: number) => {\n        return value >= 0 && value < 86400;\n      },\n    },\n    roundSeconds: {\n      type: Number,\n      default: null,\n    },\n  },\n  setup(props) {\n    const roundedSeconds = computed(() => {\n      if (props.roundSeconds && props.roundSeconds < props.seconds) {\n        return Math.round(props.seconds / props.roundSeconds) * props.roundSeconds;\n      }\n      return props.seconds;\n    });\n    const durationDisplay = computed(() => {\n      if (roundedSeconds.value < 60) {\n        return `${Math.round(roundedSeconds.value)}s`;\n      }\n      const dateStr = new Date(roundedSeconds.value * 1000).toISOString();\n      if (roundedSeconds.value < 60 * 60) {\n        return dateStr.substr(14, 5);\n      }\n      return dateStr.substr(11, 8);\n    });\n    return {\n      durationDisplay,\n    };\n  },\n});\n</script>\n<template>\n  <div class=\"duration\" v-text=\"durationDisplay\" />\n</template>\n\n<style lang=\"scss\" scoped>\n.duration {\n  display: inline-flex;\n  white-space: nowrap;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\nimport { refAutoReset, useElementSize } from \"@vueuse/core\";\nimport { round } from \"lodash-es\";\n\nimport Duration from \"@/components/ui/time/Duration.vue\";\nimport { usePlayerState } from \"@/composables/player\";\n\nexport default defineComponent({\n  components: {\n    Duration,\n  },\n  props: {\n    canSeek: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  emits: [\"seek\"],\n  setup(props, { emit }) {\n    const { media, isOndemand, relPosition, currentTime, duration } = usePlayerState();\n    const rootEl = ref<HTMLElement | null>(null);\n    const { width: rootWidth } = useElementSize(rootEl);\n\n    const cueIn = computed(() => {\n      if (media.value?.cueIn && duration.value) {\n        return round(media.value?.cueIn / duration.value, 3);\n      }\n      return 0;\n    });\n\n    const cueOut = computed(() => {\n      if (media.value?.cueOut && duration.value) {\n        return round(media.value?.cueOut / duration.value, 3);\n      }\n      return 0;\n    });\n\n    const seekPosition = ref(0);\n    const isSeeking = refAutoReset(false, 500);\n\n    const progress = computed(() => {\n      const pos = isSeeking.value ? seekPosition.value / 100 : relPosition?.value ?? 0;\n      return round(rootWidth.value * pos - rangeStart.value, 1);\n    });\n\n    const timeLeft = computed(() => {\n      if (!currentTime.value) {\n        return duration.value;\n      }\n      return duration.value - currentTime.value - media.value?.cueOut;\n    });\n\n    const rangeMin = computed(() => {\n      return cueIn.value * 100;\n    });\n\n    const rangeMax = computed(() => {\n      return (1 - cueOut.value) * 100;\n    });\n\n    const rangeStart = computed(() => {\n      return round(cueIn.value * rootWidth.value, 0);\n    });\n\n    const rangeEnd = computed(() => {\n      return round((1 - cueOut.value) * rootWidth.value, 0);\n    });\n\n    const rangeWidth = computed(() => {\n      return round(rangeEnd.value - rangeStart.value, 0);\n    });\n\n    const onInput = (e: Event) => {\n      const value = Number((e.target as HTMLInputElement).value);\n      isSeeking.value = true;\n      seekPosition.value = value;\n    };\n    const onChange = (e: Event) => {\n      const value = Number((e.target as HTMLInputElement).value);\n      emit(\"seek\", value * 0.01);\n    };\n\n    // NOTE: just for debugging: visualize the fades\n    const fadeInWidth = computed(() => {\n      if (media.value?.fadeIn && duration.value) {\n        return round((media.value?.fadeIn / duration.value) * rootWidth.value, 0);\n      }\n      return 0;\n    });\n\n    const fadeOutWidth = computed(() => {\n      if (media.value?.fadeOut && duration.value) {\n        return round((media.value?.fadeOut / duration.value) * rootWidth.value, 0);\n      }\n      return 0;\n    });\n\n    return {\n      rootEl,\n      isOndemand,\n      isSeeking,\n      onInput,\n      onChange,\n      currentTime,\n      timeLeft,\n      duration,\n      cueIn,\n      cueOut,\n      relPosition,\n      seekPosition,\n      progress,\n      rangeMin,\n      rangeMax,\n      rangeStart,\n      rangeEnd,\n      rangeWidth,\n      // debug\n      fadeInWidth,\n      fadeOutWidth,\n    };\n  },\n});\n</script>\n\n<template>\n  <div v-if=\"isOndemand\" ref=\"rootEl\" class=\"playhead\">\n    <div class=\"track\" />\n    <div v-if=\"cueIn\" class=\"cue cue--in\" :style=\"{ left: `${rangeStart}px` }\" />\n    <div v-if=\"cueOut\" class=\"cue cue--out\" :style=\"{ left: `${rangeEnd}px` }\" />\n    <!-- NOTE: debug output -->\n    <div\n      v-if=\"fadeInWidth\"\n      class=\"fade fade--in\"\n      :style=\"{ left: `${rangeStart}px`, width: `${fadeInWidth}px` }\"\n    />\n    <div\n      v-if=\"fadeOutWidth\"\n      class=\"fade fade--out\"\n      :style=\"{ left: `${rangeEnd - fadeOutWidth}px`, width: `${fadeOutWidth}px` }\"\n    />\n    <div\n      v-if=\"duration\"\n      class=\"range\"\n      :style=\"{\n        width: `${rangeWidth}px`,\n        left: `${rangeStart}px`,\n      }\"\n    >\n      <input\n        @change=\"onChange\"\n        @input.self=\"onInput\"\n        type=\"range\"\n        :min=\"rangeMin\"\n        :max=\"rangeMax\"\n        step=\"0.1\"\n        :class=\"{ 'is-seeking': isSeeking }\"\n      />\n      <div\n        class=\"progress\"\n        :style=\"{\n          width: `${progress}px`,\n        }\"\n        :class=\"{ 'is-seeking': isSeeking }\"\n      />\n      <transition name=\"thumb\">\n        <div\n          v-if=\"isSeeking\"\n          class=\"thumb\"\n          :style=\"{\n            left: `${progress - 10}px`,\n          }\"\n          :class=\"{ 'is-seeking': isSeeking }\"\n        />\n      </transition>\n    </div>\n    <Duration v-if=\"currentTime\" class=\"time time--current\" :seconds=\"currentTime\" />\n    <div class=\"time time--total\">-<Duration v-if=\"timeLeft\" :seconds=\"timeLeft\" /></div>\n  </div>\n  <div v-else class=\"playhead-placeholder\" />\n  <!--\n  <pre class=\"debug\" v-text=\"{ fadeInWidth, fadeOutWidth }\" />\n  -->\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.playhead {\n  display: flex;\n  position: relative;\n  min-height: 32px;\n\n  .track {\n    top: 14px;\n    position: absolute;\n    height: 4px;\n    width: 100%;\n    pointer-events: none;\n    background: rgb(var(--c-fg) / 20%);\n  }\n\n  .cue {\n    top: 12px;\n    position: absolute;\n    height: 9px;\n    width: 1px;\n    background: rgb(var(--c-fg));\n  }\n\n  .fade {\n    top: 22px;\n    position: absolute;\n    height: 1px;\n    background: rgb(var(--c-fg));\n  }\n\n  .range {\n    position: relative;\n    width: 100%;\n\n    input[type=\"range\"] {\n      appearance: none;\n      background: transparent;\n      height: 32px;\n      width: 100%;\n\n      &:focus {\n        outline: none;\n      }\n\n      // track\n      &::-webkit-slider-runnable-track {\n        height: 32px;\n      }\n\n      // thumb (used as handler only)\n      &::-webkit-slider-thumb {\n        appearance: none;\n        opacity: 0;\n        margin-top: 12px;\n        height: 20px;\n        width: 20px;\n      }\n    }\n\n    .progress {\n      top: 14px;\n      position: absolute;\n      height: 4px;\n      width: 1%;\n      pointer-events: none;\n      background: rgb(var(--c-fg) / 100%);\n\n      // transition: width 100ms linear;\n\n      &.is-seeking {\n        transition-duration: 1ms;\n      }\n    }\n\n    .thumb {\n      top: 6px;\n      position: absolute;\n      height: 20px;\n      width: 20px;\n      background: rgb(var(--c-bg) 1);\n      border-radius: 10px;\n      pointer-events: none;\n      transition: left 100ms linear;\n      box-shadow: 0 0 4px rgb(var(--c-fg) / 50%);\n\n      &.is-seeking {\n        transition-duration: 1ms;\n      }\n\n      &::after {\n        top: 6px;\n        position: absolute;\n        height: 8px;\n        width: 8px;\n        content: \"\";\n        background: rgb(var(--c-fg));\n        left: 6px;\n        border-radius: 4px;\n      }\n    }\n  }\n\n  .time {\n    @include typo.small;\n\n    top: -10px;\n    position: absolute;\n    pointer-events: none;\n\n    &--current {\n      left: 0;\n    }\n\n    &--total {\n      right: 0;\n    }\n  }\n}\n\n.debug {\n  @include typo.small;\n}\n\n.thumb-enter-active,\n.thumb-leave-active {\n  transition: transform 200ms;\n  transform: scale(1);\n}\n\n.thumb-enter-from {\n  transform: scale(0);\n}\n\n.thumb-leave-to {\n  transform: scale(0);\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { useEventListener, useSwipe } from \"@vueuse/core\";\n\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconClose from \"@/components/ui/icon/IconClose.vue\";\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\nimport { getContrastColor } from \"@/utils/color\";\nimport { preloadImage } from \"@/utils/image\";\n\nimport CurrentMedia from \"./CurrentMedia.vue\";\nimport PlayerControl from \"./PlayerControl.vue\";\nimport Playhead from \"./Playhead.vue\";\n\nexport default defineComponent({\n  components: {\n    LazyImage,\n    CircleButton,\n    IconClose,\n    UserRating,\n    CurrentMedia,\n    Playhead,\n    PlayerControl,\n  },\n  props: {\n    isVisible: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: [\"close\"],\n  setup(props, { emit }) {\n    const el = ref<HTMLElement | null>(null);\n    const { media, nextMedia, color, image } = usePlayerState();\n    const { seek } = usePlayerControls();\n    const route = useRoute();\n    const close = () => emit(\"close\");\n    watch(() => route.path, close);\n    useEventListener(document, \"keydown\", (e) => {\n      if (e.code === \"KeyX\") {\n        close();\n      }\n    });\n    const top = ref(0);\n    const objKey = computed(() => {\n      if (!media.value) {\n        return null;\n      }\n      return `${media.value?.ct}:${media.value?.uid}`;\n    });\n    const fgColor = computed(() => {\n      try {\n        const bg = color.value;\n        return getContrastColor(bg);\n      } catch (e) {\n        console.warn(e);\n      }\n      return [128, 128, 128];\n    });\n    const { isSwiping, direction, lengthY } = useSwipe(el, {\n      passive: false,\n      onSwipe() {\n        top.value = Math.max(lengthY.value * -1, 0);\n      },\n      onSwipeEnd() {\n        if (lengthY.value < -150) {\n          top.value = 700;\n          setTimeout(() => {\n            top.value = 0;\n            close();\n          }, 200);\n        } else {\n          top.value = 0;\n        }\n      },\n    });\n    // NOTE: preload upcoming images\n    const nextImage = computed(() => {\n      return nextMedia.value?.releases?.length ? nextMedia.value.releases[0].image : null;\n    });\n    watch(\n      () => nextImage.value,\n      (imageObj) => preloadImage(imageObj)\n    );\n    return {\n      el,\n      top,\n      close,\n      //\n      objKey,\n      media,\n      nextImage,\n      image,\n      fgColor,\n      //\n      isSwiping,\n      direction,\n      lengthY,\n      //\n      seek,\n    };\n  },\n});\n</script>\n\n<template>\n  <div v-if=\"isVisible\" class=\"player-panel\" :class=\"{ 'is-swiping': isSwiping }\">\n    <nav>\n      <CircleButton @click=\"close\" :outlined=\"true\">\n        <IconClose />\n      </CircleButton>\n    </nav>\n    <main>\n      <div class=\"visual\">\n        <LazyImage :image=\"image\" />\n      </div>\n      <div class=\"meta\">\n        <CurrentMedia :media=\"media\" />\n      </div>\n      <div class=\"playhead-container\">\n        <Playhead @seek=\"seek\" />\n      </div>\n      <div class=\"controls\">\n        <PlayerControl :fg-color=\"fgColor\" />\n        <UserRating color-var=\"--c-fg\" :obj-key=\"objKey\" />\n      </div>\n    </main>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n\n// NOTE: color variables are set in parent Player component\n.player-panel {\n  z-index: 20;\n  top: var(--sa-t);\n  position: fixed;\n  width: 100%;\n  min-height: calc(100% + 60px);\n  left: 0;\n  bottom: 0;\n  background: rgb(var(--c-bg));\n  display: flex;\n  flex-direction: column;\n  transition: top 200ms, background 500ms;\n  box-shadow: 0 -4px 8px 4px rgb(0 0 0 / 10%);\n  border-top-left-radius: 28px;\n  border-top-right-radius: 28px;\n\n  &.is-swiping {\n    transition-duration: 1ms;\n    background: rgb(var(--c-bg) / 95%);\n  }\n\n  > nav {\n    height: 60px;\n    display: flex;\n    align-items: center;\n    justify-content: end;\n    padding: 0.625rem;\n  }\n\n  > main {\n    display: flex;\n    row-gap: 1rem;\n    flex-direction: column;\n    align-items: center;\n    padding: 0.625rem;\n    color: rgb(var(--c-fg));\n\n    .visual {\n      position: relative;\n      width: 70vw;\n      aspect-ratio: 1;\n      box-shadow: 0 0 20px rgb(0 0 0 / 40%);\n\n      .next {\n        top: 0;\n        position: absolute;\n        opacity: 0;\n      }\n    }\n\n    .meta {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      :deep(.metadata) {\n        align-items: center;\n      }\n\n      height: 32px;\n    }\n\n    .playhead-container {\n      width: 100%;\n      min-height: 42px;\n    }\n\n    .controls {\n      width: 100%;\n      display: grid;\n      grid-template-columns: 40px 1fr 40px;\n      align-items: center;\n      justify-content: center;\n\n      .player-control {\n        grid-column: 2/3;\n        justify-self: center;\n      }\n    }\n  }\n}\n\n// transitions\n.slide-enter-active,\n.slide-leave-active {\n  transition: transform 200ms, opacity 200ms;\n}\n\n.slide-enter-from {\n  transform: translate(0, 100%);\n  opacity: 0;\n}\n\n.slide-leave-to {\n  transform: translate(0, 100%);\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { defineComponent } from \"vue\";\n\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\n\nimport ButtonPlay from \"../button/ButtonPlay.vue\";\n\nexport default defineComponent({\n  components: {\n    ButtonPlay,\n  },\n  props: {\n    fgColor: {\n      type: Array as PropType<Array<number>>,\n      default: () => [0, 0, 0],\n    },\n  },\n  setup() {\n    const { pause, resume: play } = usePlayerControls();\n    const { isPlaying, isBuffering } = usePlayerState();\n    return {\n      isPlaying,\n      isBuffering,\n      pause,\n      play,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"player-control\">\n    <ButtonPlay\n      :is-playing=\"isPlaying\"\n      :is-buffering=\"isBuffering\"\n      :outlined=\"true\"\n      :outline-width=\"3\"\n      outline-opacity=\"100%\"\n      :base-color=\"fgColor\"\n      @pause=\"pause\"\n      @play=\"play\"\n    />\n  </div>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\nimport { invoke, until } from \"@vueuse/core\";\nimport { storeToRefs } from \"pinia\";\n\nimport MediaArtists from \"@/components/catalog/media/MediaArtists.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { usePlayerState } from \"@/composables/player\";\nimport { useQueueState } from \"@/composables/queue\";\nimport { useSettings } from \"@/composables/settings\";\nimport { useUiStore } from \"@/stores/ui\";\nimport { getContrastColor } from \"@/utils/color\";\n\nimport OnAir from \"../button/OnAir.vue\";\n// NOTE: shared components for desktop & mobile\nimport Queue from \"../Queue.vue\";\nimport QueueControl from \"../QueueControl.vue\";\n// NOTE: adapted / extra components for mobile\nimport Panel from \"./Panel.vue\";\nimport PlayerPlayButton from \"./PlayerPlayButton.vue\";\n\nexport default defineComponent({\n  components: {\n    Panel,\n    Queue,\n    QueueControl,\n    MediaArtists,\n    OnAir,\n    PlayerPlayButton,\n  },\n  setup() {\n    const { isApp } = useDevice();\n    const { playerVisible } = storeToRefs(useUiStore());\n    const { mode, playState, media, color } = usePlayerState();\n    invoke(async () => {\n      // permanently show player as soon as playing or buffering starts\n      await until(playState).toMatch((s) => [\"buffering\", \"playing\"].includes(s));\n      playerVisible.value = true;\n    });\n    const { queueLength } = useQueueState();\n    const queueVisible = ref(false);\n    const hideQueue = () => (queueVisible.value = false);\n    const toggleQueue = () => (queueVisible.value = !queueVisible.value);\n    const panelVisible = ref(false);\n    const hidePanel = () => (panelVisible.value = false);\n    const togglePanel = () => {\n      // when both panel & queue are visible: close the queue (but keep the panel)\n      if (queueVisible.value && panelVisible.value) {\n        hideQueue();\n      } else {\n        panelVisible.value = !panelVisible.value;\n        // hide queue in case panel becomes visible\n        if (panelVisible.value) {\n          hideQueue();\n        }\n      }\n    };\n    const fgColor = computed(() => {\n      try {\n        const bg = color.value;\n        return getContrastColor(bg);\n      } catch (e) {\n        console.warn(e);\n      }\n      return [128, 128, 128];\n    });\n    const cssVars = computed(() => {\n      try {\n        const bg = color.value;\n        const fg = getContrastColor(bg);\n        const fgInverse = getContrastColor(fg);\n        return {\n          \"--c-bg\": bg.join(\" \"),\n          \"--c-fg\": fg.join(\" \"),\n          \"--c-fg-inverse\": fgInverse.join(\" \"),\n        };\n      } catch (e) {\n        console.warn(e);\n      }\n      return {};\n    });\n\n    const { userSettings } = useSettings();\n    const testingEnabled = computed(() => userSettings.value?.testingEnabled);\n\n    return {\n      isApp,\n      playerVisible,\n      mode,\n      media,\n      fgColor,\n      cssVars,\n      //\n      panelVisible,\n      hidePanel,\n      togglePanel,\n      //\n      queueVisible,\n      queueLength,\n      hideQueue,\n      toggleQueue,\n      //\n      testingEnabled,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    :style=\"{\n      '--player-height': isApp ? '82px' : '60px',\n    }\"\n  >\n    <Panel :is-visible=\"panelVisible\" :style=\"cssVars\" @close=\"hidePanel\" />\n    <Queue :is-visible=\"queueVisible && queueLength > 0\" @close=\"hideQueue\" />\n    <transition name=\"slide\">\n      <div\n        v-if=\"playerVisible\"\n        class=\"player-container\"\n        :style=\"cssVars\"\n        :class=\"{ 'has-panel': panelVisible }\"\n      >\n        <div class=\"player-bg\" />\n        <div class=\"player\">\n          <PlayerPlayButton class=\"player-control\" :fg-color=\"fgColor\" />\n          <div @click=\"togglePanel\" class=\"current-media\">\n            <div v-if=\"media\" class=\"media\">\n              <div class=\"name\" v-text=\"media.name\" />\n              <MediaArtists class=\"artists\" :artists=\"media.artists\" :link=\"false\" />\n            </div>\n          </div>\n          <div class=\"right\">\n            <OnAir class=\"on-air\" />\n            <QueueControl\n              class=\"queue-control\"\n              :queue-visible=\"queueVisible\"\n              :num-queued=\"queueLength\"\n              @toggle-visibility=\"toggleQueue\"\n            />\n          </div>\n        </div>\n      </div>\n    </transition>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.player-container {\n  position: fixed;\n  bottom: 0;\n  z-index: 110;\n  height: var(--player-height);\n  width: 100%;\n  background: rgb(var(--c-bg));\n  box-shadow: 0 0 1px 1px rgb(var(--c-fg) / 20%);\n  transition: background 200ms;\n  transition-delay: 1ms;\n\n  .player-bg {\n    inset: 0;\n    position: absolute;\n    pointer-events: none;\n  }\n\n  &.has-panel {\n    transition-delay: 100ms;\n\n    .player-bg {\n      background: rgb(var(--c-fg) / 10%);\n    }\n  }\n}\n\n.player {\n  color: rgb(var(--c-fg));\n  transition: background 1000ms;\n  height: 60px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  .player-control {\n    margin: auto 0.625rem;\n    display: flex;\n  }\n\n  .current-media {\n    flex-grow: 1;\n    display: flex;\n    height: 100%;\n    overflow: hidden;\n\n    .media {\n      flex-grow: 1;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n\n    .name {\n      @include typo.small;\n\n      width: 100%;\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n\n    .artists {\n      @include typo.small;\n      @include typo.dim;\n      @include typo.light;\n    }\n  }\n\n  .right {\n    margin: auto 0.625rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    .on-air {\n      margin-right: 0.25rem;\n    }\n\n    .queue-control {\n      :deep(.number) {\n        right: 0.625rem;\n        top: 8px;\n        font-size: 10px;\n        min-height: 16px;\n        min-width: 16px;\n      }\n    }\n  }\n}\n\n.slide-enter-active,\n.slide-leave-active {\n  transition: transform 200ms, opacity 200ms;\n}\n\n.slide-enter-from {\n  transform: translate(0, 100%);\n  opacity: 0;\n}\n\n.slide-leave-to {\n  transform: translate(0, 100%);\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useAccount } from \"@/composables/account\";\nimport { useSettings } from \"@/composables/settings\";\n\nexport default defineComponent({\n  setup() {\n    const { user } = useAccount();\n    const { maxBandwidth } = useSettings();\n    const modeDisplay = computed(() => {\n      return maxBandwidth.value < 720000 ? \"Eco\" : \"HiFi\";\n    });\n    return {\n      user,\n      modeDisplay,\n    };\n  },\n});\n</script>\n\n<template>\n  <div v-if=\"user\" class=\"bandwidth\">\n    <router-link :to=\"{ name: 'accountSettings' }\" class=\"bandwidth__text\" v-text=\"modeDisplay\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n\n.bandwidth {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 1.5rem;\n  border-radius: 0.75rem;\n  padding: 0 0.75rem;\n  border: 1px solid rgb(var(--c-fg) / 25%);\n  transition: border 100ms, background 100ms;\n  cursor: pointer;\n  min-width: 48px;\n\n  &__text {\n    @include typo.small;\n\n    color: rgb(var(--c-fg));\n  }\n\n  @include responsive.on-hover {\n    background: rgb(var(--c-fg) / 12.5%);\n    border-color: transparent;\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from \"vue-i18n\";\n\nimport eventBus from \"@/eventBus\";\n\nconst { t } = useI18n();\n\nconst onClick = (e: PointerEvent) => {\n  if (e.shiftKey) {\n    eventBus.emit(\"donation:showCta\");\n  } else {\n    eventBus.emit(\"donation:togglePanel\");\n  }\n};\n</script>\n\n<i18n lang=\"yaml\">\nde:\n  title: \"Spenden\"\nen:\n  title: \"Donate\"\n</i18n>\n\n<template>\n  <div @click=\"onClick\" class=\"donate\">\n    <span class=\"donate__text\" v-text=\"t('title')\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n\n.donate {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 1.5rem;\n  border-radius: 0.75rem;\n  padding: 0 0.75rem;\n  border: 1px solid rgb(var(--c-fg) / 25%);\n  transition: border 100ms, background 100ms;\n  cursor: pointer;\n  min-width: 48px;\n\n  &__text {\n    @include typo.small;\n\n    color: rgb(var(--c-fg));\n  }\n\n  @include responsive.on-hover {\n    background: rgb(var(--c-fg) / 12.5%);\n    border-color: transparent;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useSettings } from \"@/composables/settings\";\n\nexport default defineComponent({\n  props: {\n    value: {\n      type: Object,\n      default: () => {},\n    },\n    position: {\n      type: String,\n      default: \"absolute\",\n    },\n    alwaysVisible: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props) {\n    const { userSettings } = useSettings();\n    const isVisible = computed(() => {\n      if (props.alwaysVisible) {\n        return true;\n      }\n      return userSettings.value?.debugEnabled;\n    });\n    return {\n      isVisible,\n      userSettings,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    v-if=\"isVisible\"\n    class=\"debug-panel\"\n    :style=\"{\n      position,\n    }\"\n  >\n    <pre v-text=\"value\" />\n    <slot />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.debug-panel {\n  padding: 6px;\n  font-weight: 300;\n  font-size: 12px;\n  color: rgb(var(--c-white));\n  background: rgb(var(--c-black));\n}\n</style>\n","import { ref } from \"vue\";\nimport { useStorage } from \"@vueuse/core\";\nimport { defineStore } from \"pinia\";\n\ninterface NewsItem {\n  provider: string;\n  name: string;\n  url: string;\n}\n\nexport const useNewsStore = defineStore(\"news\", () => {\n  const schedule = ref<NewsItem[]>([]);\n  const providerKey = useStorage(\"news/provider\", \"\", localStorage, {\n    serializer: {\n      read: (v) => v,\n      write: (v) => v,\n    },\n  });\n  return {\n    schedule,\n    providerKey,\n  };\n});\n","import { type WritableComputedRef, computed } from \"vue\";\nimport { storeToRefs } from \"pinia\";\n\nimport { updateSettings } from \"@/api/account\";\nimport { useAccount } from \"@/composables/account\";\nimport { usePlayerControls } from \"@/composables/player\";\nimport { useNewsStore } from \"@/stores/news\";\n\nconst NEWS_PROVIDERS = [\n  {\n    key: \"srf\",\n    title: \"SRF News\",\n    language: \"DE\",\n    description: \"Jede Stunde 5 Minuten\",\n    url: \"srf.ch/news\",\n    enabled: true,\n  },\n  {\n    key: \"rfi\",\n    title: \"Radio France Info\",\n    language: \"FR\",\n    description: \"Jede Stunde 10 Minuten\\n15:00 & 20:00 30 Minuten\",\n    url: \"francetvinfo.fr\",\n    enabled: true,\n  },\n  {\n    key: \"dlf\",\n    title: \"DLF\",\n    language: \"DE\",\n    description: \"-\",\n    url: \"deutschlandfunk.de\",\n    enabled: false,\n  },\n  {\n    key: \"bbc\",\n    title: \"BBC\",\n    language: \"EN\",\n    description: \"-\",\n    url: \"bbc.co.uk/news\",\n    enabled: false,\n  },\n];\n\nexport const useNews = () => {\n  const { settings: userSettings } = useAccount();\n  const { playNews, endPlayNews } = usePlayerControls();\n  const { schedule, providerKey: localProviderKey } = storeToRefs(useNewsStore());\n\n  // use user settings in case of authenticated, else local storage\n  const providerKey: WritableComputedRef<string | null> = computed<string | null>({\n    get: () => {\n      return userSettings.value ? userSettings.value.newsProvider : localProviderKey.value;\n    },\n    set: async (value: string | null) => {\n      if (userSettings.value) {\n        userSettings.value.newsProvider = value ?? \"\";\n\n        try {\n          await updateSettings(userSettings.value);\n        } catch (e) {\n          console.error(e);\n        }\n      } else {\n        localProviderKey.value = value ?? \"\";\n      }\n    },\n  });\n\n  const providers = computed(() => {\n    return NEWS_PROVIDERS.map((provider) => {\n      return {\n        ...provider,\n        selected: provider.key === providerKey.value,\n      };\n    });\n  });\n\n  const selectedProvider = computed(() => {\n    return providers.value.find((provider) => provider.selected) ?? null;\n  });\n\n  const setProvider = (key: string | null) => {\n    providerKey.value = key;\n  };\n\n  return {\n    providers,\n    providerKey,\n    localProviderKey,\n    selectedProvider,\n    schedule,\n    // exposed actions\n    setProvider,\n    playNews,\n    endPlayNews,\n  };\n};\n","<script lang=\"ts\" setup>\nimport { ref } from \"vue\";\nimport type { AxiosError } from \"axios\";\n\nimport Debug from \"@/components/dev/Debug.vue\";\nimport ApiErrors from \"@/components/ui/error/ApiErrors.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { useNews } from \"@/composables/news\";\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\n\nconst { settings } = useAccount();\n\nconst { isNews } = usePlayerState();\nconst { playNews, endPlayNews } = usePlayerControls();\nconst { logUIEvent } = useAnalytics();\n\nconst { providers, selectedProvider, setProvider } = useNews();\n\nconst errors = ref<Array<string | AxiosError>>([]);\n\nconst toggleProvider = async (key: string) => {\n  if (providers.value.find((provider) => provider.key === key)?.enabled === false) {\n    return;\n  }\n\n  if (selectedProvider.value?.key === key) {\n    setProvider(null);\n    logUIEvent(\"news:disable\");\n  } else {\n    setProvider(key);\n    logUIEvent(\"news:enable\", key);\n  }\n};\n</script>\n<template>\n  <div class=\"news-settings\">\n    <div class=\"info\">\n      <p>Wähle deinen News-Service:</p>\n    </div>\n    <div class=\"providers\">\n      <div\n        v-for=\"provider in providers\"\n        :key=\"`${provider.key}-input`\"\n        class=\"provider\"\n        :class=\"{\n          'is-enabled': provider.enabled,\n          'is-selected': provider.selected,\n        }\"\n        @click=\"toggleProvider(provider.key)\"\n      >\n        <div class=\"title\">\n          <span class=\"title__name\" v-text=\"provider.title\" />\n          <span v-if=\"provider.language\" class=\"title__language\" v-text=\"provider.language\" />\n          <span v-if=\"!provider.enabled\" class=\"title__disabled\" v-text=\"`planned`\" />\n        </div>\n        <div class=\"description\">\n          <p v-text=\"provider.description\" />\n        </div>\n        <a class=\"link\" v-text=\"provider.url\" :href=\"`https://${provider.url}`\" target=\"_blank\" />\n      </div>\n    </div>\n    <div class=\"actions\">\n      <div>\n        <div\n          class=\"unset-provider\"\n          :class=\"{\n            'is-selected': !selectedProvider,\n          }\"\n          @click=\"setProvider(null)\"\n        >\n          <div class=\"checkbox\" type=\"checkbox\" />\n          <span class=\"label\">Keine News einblenden</span>\n        </div>\n      </div>\n    </div>\n    <div class=\"form-errors\" v-if=\"errors.length\">\n      <ApiErrors :errors=\"errors\" />\n    </div>\n    <Debug :value=\"{ settings, isNews }\">\n      <div class=\"actions\">\n        <button @click.prevent=\"playNews('rfi')\">Trigger News</button>\n        <button @click.prevent=\"endPlayNews()\">End News</button>\n      </div>\n    </Debug>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n@use \"@/style/elements/form\";\n\n.providers {\n  background: transparent;\n}\n\n.news-settings {\n  .info {\n    padding: 2rem 0 1rem;\n  }\n\n  .providers {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n    grid-gap: 1rem;\n\n    .provider {\n      cursor: pointer;\n      background: rgb(var(--c-fg) / 20%);\n      padding: 0.5rem;\n      border: 1px solid rgb(var(--c-fg) / 5%);\n      border-radius: 0.25rem;\n      transition: 60ms background ease-in-out;\n\n      .title {\n        display: flex;\n\n        &__language {\n          margin-left: 0.25rem;\n\n          &::before {\n            content: \"(\";\n          }\n\n          &::after {\n            content: \")\";\n          }\n        }\n\n        &__disabled {\n          flex-grow: 1;\n          text-align: end;\n        }\n      }\n\n      .description {\n        @include typo.dim;\n\n        white-space: pre-line;\n      }\n\n      .link {\n        display: none;\n      }\n\n      &:not(.is-enabled) {\n        cursor: not-allowed;\n\n        .title {\n          &__name,\n          &__language {\n            @include typo.dim;\n          }\n\n          &__disabled {\n            color: rgb(var(--c-green) / 100%);\n            opacity: 1;\n          }\n        }\n      }\n\n      &.is-selected {\n        background: rgb(var(--c-green) / 100%);\n      }\n    }\n  }\n\n  .actions {\n    padding: 1.25rem 0 4rem;\n\n    .unset-provider {\n      display: flex;\n      align-items: center;\n      gap: 1rem;\n      cursor: pointer;\n\n      > .checkbox {\n        position: relative;\n        height: 36px;\n        width: 36px;\n        grid-area: checkbox;\n        align-self: start;\n        border: 2px solid rgb(var(--c-fg) / 100%);\n        border-radius: 0.25rem;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n\n        &::before {\n          content: \"\";\n          display: flex;\n          height: 1rem;\n          width: 1rem;\n          transform: scale(0);\n          transition: 60ms transform ease-in-out, 60ms background ease-in-out;\n          background: rgb(var(--c-fg) / 100%);\n          border-radius: 1px;\n        }\n      }\n\n      .label {\n        @include typo.default;\n      }\n\n      &.is-selected {\n        > .checkbox {\n          background: rgb(var(--c-green));\n\n          &::before {\n            transform: scale(1);\n          }\n        }\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, watch } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { useEventListener } from \"@vueuse/core\";\n\nimport CloseButton from \"@/components/ui/panel/CloseButton.vue\";\n\nexport default defineComponent({\n  components: {\n    CloseButton,\n  },\n  props: {\n    isVisible: {\n      type: Boolean,\n      default: false,\n    },\n    title: {\n      type: String,\n      default: \"\",\n    },\n  },\n  emits: [\"close\"],\n  setup(props, { slots, emit }) {\n    const hasFooter = computed(() => !!slots.footer);\n    const close = () => {\n      emit(\"close\");\n    };\n    useEventListener(document, \"keydown\", (e) => {\n      if (e.code === \"Escape\") {\n        close();\n      }\n    });\n    const route = useRoute();\n    watch(() => route.path, close);\n    return {\n      close,\n      hasFooter,\n    };\n  },\n});\n</script>\n<template>\n  <transition name=\"fade\">\n    <div v-if=\"isVisible\" @click=\"close\" class=\"mask\" />\n  </transition>\n  <transition name=\"slide\">\n    <div\n      v-if=\"isVisible\"\n      class=\"slide-up-panel\"\n      :style=\"{\n        '--c-fg': 'var(--c-white)',\n        '--c-dark': 'var(--c-white)',\n      }\"\n    >\n      <div class=\"container\">\n        <div class=\"slide-up-panel__content\">\n          <div v-if=\"title\" class=\"slide-up-panel__content__title\">\n            <span v-text=\"title\" />\n            <CloseButton @click.prevent=\"close\" />\n          </div>\n          <div class=\"slide-up-panel__content__body\">\n            <slot name=\"default\" />\n          </div>\n          <div v-if=\"hasFooter\" class=\"slide-up-panel__footer\">\n            <slot name=\"footer\" />\n          </div>\n        </div>\n      </div>\n    </div>\n  </transition>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n\n.mask {\n  top: 0;\n  position: fixed;\n  height: 100%;\n  width: 100%;\n  z-index: 20;\n  left: 0;\n  background: rgb(var(--c-black) / 80%);\n\n  @include responsive.bp-medium {\n    background: unset;\n  }\n}\n\n.slide-up-panel {\n  position: fixed;\n  width: 100%;\n  min-height: 100px;\n  bottom: 72px; // player height (desktop)\n  max-height: calc(100% - 72px);\n  left: 0;\n  z-index: 45;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  color: rgb(var(--c-white));\n  background: rgb(var(--c-black));\n  font-weight: 500;\n  overflow-y: auto;\n  overscroll-behavior: auto contain;\n\n  @include responsive.bp-medium {\n    box-shadow: 0 -4px 8px 4px rgb(0 0 0 / 10%);\n    border-top-left-radius: 28px;\n    border-top-right-radius: 28px;\n  }\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  .container {\n    @include container.small;\n\n    display: flex;\n    flex-direction: column;\n  }\n\n  @include responsive.bp-medium {\n    max-width: unset;\n  }\n\n  &__header {\n    position: fixed;\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    height: 76px;\n    margin-top: 0;\n  }\n\n  &__content {\n    flex-grow: 1;\n\n    &__title {\n      @include typo.large;\n      @include typo.bold;\n\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      padding: 1.5rem 0 1rem;\n\n      > span {\n        flex-grow: 1;\n      }\n    }\n  }\n\n  &__footer {\n    display: flex;\n    min-height: 76px;\n  }\n}\n\n// mask transition\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 200ms;\n}\n\n.fade-enter-from {\n  opacity: 0;\n}\n\n.fade-leave-to {\n  opacity: 0;\n}\n\n// queue panel transition\n.slide-enter-active,\n.slide-leave-active {\n  transition: transform 200ms, opacity 200ms;\n}\n\n.slide-enter-from {\n  transform: translate(0, 100%);\n  opacity: 0;\n}\n\n.slide-leave-to {\n  transform: translate(0, 200%);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport NewsSettings from \"@/components/news/NewsSettings.vue\";\nimport SlideUpPanel from \"@/components/ui/panel/SlideUpPanel.vue\";\nimport { useNews } from \"@/composables/news\";\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\n\nconst { t } = useI18n();\n\nconst { isNews } = usePlayerState();\nconst { endPlayNews } = usePlayerControls();\n\nconst { selectedProvider: provider } = useNews();\n\nconst overlayVisible = ref(false);\n\nconst skipVisible = computed(() => isNews && provider.value);\n</script>\n\n<i18n lang=\"yaml\">\nde:\n  title: \"News Einstellungen\"\nen:\n  title: \"News Settings\"\n</i18n>\n\n<template>\n  <div\n    @click=\"overlayVisible = !overlayVisible\"\n    class=\"news\"\n    :class=\"{ 'is-news': isNews }\"\n    data-cta-target=\"news\"\n  >\n    <span class=\"news__text\">News</span>\n    <Teleport to=\"body\">\n      <SlideUpPanel\n        :is-visible=\"overlayVisible\"\n        @close=\"overlayVisible = false\"\n        :title=\"t('title')\"\n      >\n        <div class=\"body\">\n          <div class=\"info\">\n            <p>\n              We're seeking your input to enhance our radio programming. We're considering\n              introducing a new feature – an option that allows you to access daily news updates.\n            </p>\n          </div>\n          <NewsSettings />\n        </div>\n        <template #footer>\n          <div\n            class=\"controls\"\n            :style=\"{\n              '--c-fg': 'var(--c-white)',\n            }\"\n          >\n            <div v-if=\"provider\" class=\"selected-provider\">\n              Selected Service:\n              <em>\n                <span>{{ provider.title }}</span>\n                <span v-if=\"provider.language\"> ({{ provider.language }})</span>\n              </em>\n              <a class=\"link\" :href=\"`https://${provider.url}`\" target=\"_blank\">\n                <span>{{ provider.url }}</span>\n              </a>\n            </div>\n            <div v-else class=\"selected-provider\">No Service Selected</div>\n            <button\n              v-if=\"skipVisible\"\n              class=\"button\"\n              :disabled=\"!isNews\"\n              @click.prevent=\"endPlayNews()\"\n            >\n              Skip News\n            </button>\n          </div>\n        </template>\n      </SlideUpPanel>\n    </Teleport>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n@use \"@/style/elements/button\";\n\n@keyframes pulse {\n  0% {\n    transform: scale(0.975);\n  }\n\n  30% {\n    transform: scale(1.05);\n  }\n\n  100% {\n    transform: scale(0.975);\n  }\n}\n\n.news {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 1.5rem;\n  border-radius: 0.75rem;\n  padding: 0 0.75rem;\n  border: 1px solid rgb(var(--c-fg) / 25%);\n  transition: border 100ms, background 100ms;\n  cursor: pointer;\n  min-width: 48px;\n\n  &__text {\n    @include typo.small;\n\n    color: rgb(var(--c-fg));\n  }\n\n  @include responsive.on-hover {\n    background: rgb(var(--c-fg) / 12.5%);\n    border-color: transparent;\n  }\n\n  &.is-news {\n    background: rgb(var(--c-red));\n    border-color: rgb(var(--c-red));\n    transform: scale(1);\n    animation: pulse 1s infinite;\n  }\n}\n\n.body {\n  > .info {\n    > p {\n      max-width: 760px;\n    }\n  }\n}\n\n.controls {\n  flex: 1;\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  border-top: 1px solid rgb(var(--c-fg));\n\n  .selected-provider {\n    flex-grow: 1;\n\n    > em {\n      font-style: normal;\n    }\n\n    > a {\n      &::before {\n        content: \"●\";\n        padding-left: 0.5rem;\n        padding-right: 0.5rem;\n      }\n\n      > span {\n        text-decoration: underline;\n      }\n    }\n  }\n\n  .button {\n    @include button.outlined(3rem);\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport MediaArtists from \"@/components/catalog/media/MediaArtists.vue\";\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\n\nexport default defineComponent({\n  props: {\n    media: {\n      type: Object,\n      required: false,\n      default: () => null,\n    },\n  },\n  components: {\n    LazyImage,\n    MediaArtists,\n  },\n  setup(props) {\n    const release = computed(() => {\n      if (props.media && props.media.releases.length) {\n        return props.media.releases[0];\n      }\n      return null;\n    });\n    const image = computed(() => {\n      return release.value && release.value.image ? release.value.image : null;\n    });\n    return {\n      release,\n      image,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"current-media\">\n    <router-link\n      v-if=\"media\"\n      class=\"visual\"\n      :to=\"{\n        name: 'mediaDetail',\n        params: {\n          uid: media.uid,\n        },\n      }\"\n    >\n      <LazyImage :image=\"image\" />\n    </router-link>\n    <div v-if=\"media\" class=\"metadata\">\n      <router-link\n        class=\"metadata--primary\"\n        :to=\"{\n          name: 'mediaDetail',\n          params: {\n            uid: media.uid,\n          },\n        }\"\n        v-text=\"media.name\"\n      />\n      <div class=\"metadata--secondary\">\n        <MediaArtists :artists=\"media.artists\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.current-media {\n  display: grid;\n  grid-template-columns: 64px 1fr;\n\n  .visual {\n    height: 3rem;\n    width: 3rem;\n    box-shadow: 0 0 1px 1px rgb(0 0 0 / 20%);\n  }\n\n  .metadata {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    justify-content: center;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    &--primary,\n    &--secondary {\n      max-width: 100%;\n      overflow: inherit;\n      white-space: inherit;\n      text-overflow: inherit;\n    }\n  }\n}\n</style>\n","export default \"data:image/png;base64,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\"","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\n\nimport iconRFI from \"@/assets/news/icon-rfi.png\";\nimport { useNews } from \"@/composables/news\";\n\nconst { selectedProvider: provider } = useNews();\n\nconst iconSrc = computed(() => {\n  if (!provider.value) {\n    return \"\";\n  }\n  if (provider.value.key === \"rfi\") {\n    return iconRFI;\n  }\n  return \"\";\n});\n</script>\n\n<template>\n  <div v-if=\"provider\" class=\"current-news\">\n    <div class=\"visual\">\n      <img v-if=\"iconSrc\" :src=\"iconSrc\" />\n    </div>\n    <div class=\"metadata\">\n      <div class=\"metadata--primary\">\n        {{ provider.key }}\n      </div>\n      <div class=\"metadata--secondary\">\n        <a\n          :href=\"`https://${provider.url}`\"\n          v-text=\"provider.url\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.current-news {\n  display: grid;\n  grid-template-columns: 64px 1fr;\n\n  .visual {\n    height: 3rem;\n    width: 3rem;\n\n    > img {\n      height: 100%;\n      width: 100%;\n    }\n  }\n\n  .metadata {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    justify-content: center;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    &--primary {\n      text-transform: uppercase;\n    }\n\n    &--primary,\n    &--secondary {\n      max-width: 100%;\n      overflow: inherit;\n      white-space: inherit;\n      text-overflow: inherit;\n\n      > a {\n        text-decoration: underline;\n      }\n    }\n  }\n}\n</style>\n","export function dt2hhmmss(dt: Date) {\n  return dt.toISOString().substr(11, 8);\n}\n\nexport function s2hhmmss(s: number) {\n  return dt2hhmmss(new Date(s * 1000));\n}\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\n\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\nimport { useQueueControls, useQueueState } from \"@/composables/queue\";\nimport { s2hhmmss } from \"@/utils/time\";\n\nimport ButtonPlay from \"./button/ButtonPlay.vue\";\nimport ButtonSkip from \"./button/ButtonSkip.vue\";\n\nexport default defineComponent({\n  components: {\n    ButtonSkip,\n    ButtonPlay,\n  },\n  props: {\n    fgColor: {\n      type: Array as PropType<Array<number>>,\n      default: () => [0, 0, 0],\n    },\n  },\n  setup() {\n    const { pause, resume: play } = usePlayerControls();\n    const { isLive, isPlaying, isBuffering, currentTime, duration } = usePlayerState();\n    const { logUIEvent } = useAnalytics();\n    const logFn = <T extends (...args: any[]) => any>(\n      fn: T,\n      event: string\n    ): ((...args: Parameters<T>) => ReturnType<T>) => {\n      return (...args: Parameters<T>) => {\n        const result = fn(...args);\n        logUIEvent(event);\n        return result;\n      };\n    };\n    const currentTimeDisplay = computed(() => {\n      if (currentTime.value === null) {\n        return \"00:00:00\";\n      }\n      return s2hhmmss(currentTime.value);\n    });\n    const totalTimeDisplay = computed(() => (duration.value ? s2hhmmss(duration.value) : \"\"));\n    const { previousIndex, nextIndex } = useQueueState();\n    const { playPrevious, playNext } = useQueueControls();\n    const hasPrevious = computed(() => previousIndex.value !== null);\n    const hasNext = computed(() => nextIndex.value !== null);\n    return {\n      isLive,\n      hasNext,\n      hasPrevious,\n      isPlaying,\n      isBuffering,\n      currentTimeDisplay,\n      totalTimeDisplay,\n      play,\n      pause,\n      playNext: logFn(playNext, \"player:play-next\"),\n      playPrevious: logFn(playPrevious, \"player:play-previous\"),\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"player-control\"\n    :class=\"{\n      'is-live': isLive,\n    }\"\n  >\n    <div class=\"left\">\n      <div class=\"time\" v-text=\"currentTimeDisplay\" />\n      <ButtonSkip :rotate=\"180\" :disabled=\"!hasPrevious\" @click.prevent=\"playPrevious\" />\n    </div>\n    <ButtonPlay\n      :is-playing=\"isPlaying\"\n      :is-buffering=\"isBuffering\"\n      :outlined=\"true\"\n      :outline-width=\"3\"\n      outline-opacity=\"100%\"\n      :base-color=\"fgColor\"\n      @pause=\"pause\"\n      @play=\"play\"\n    />\n    <div class=\"right\">\n      <ButtonSkip :disabled=\"!hasNext\" @click.prevent=\"playNext\" />\n      <div class=\"time\" v-text=\"totalTimeDisplay\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.player-control {\n  display: flex;\n\n  .left,\n  .right {\n    display: flex;\n    align-items: center;\n    transition: opacity 500ms;\n  }\n\n  .time {\n    @include typo.small;\n\n    margin: 0 0.5rem;\n    width: 54px;\n    overflow: hidden;\n  }\n\n  &.is-live {\n    .left,\n    .right {\n      opacity: 0;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    isVisible: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup() {\n    return {};\n  },\n});\n</script>\n\n<template>\n  <transition name=\"fade\">\n    <div v-if=\"isVisible\" class=\"playhead-handle\">\n      <div class=\"playhead-handle__inner\" />\n    </div>\n  </transition>\n</template>\n\n<style lang=\"scss\" scoped>\n.playhead-handle {\n  height: 20px;\n  width: 20px;\n  background: rgb(var(--c-fg-inverse));\n  border-radius: 10px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border: 1px solid rgb(var(--c-fg) / 40%);\n\n  &__inner {\n    height: 8px;\n    width: 8px;\n    background: rgb(var(--c-fg));\n    border-radius: 4px;\n  }\n}\n\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 200ms;\n}\n\n.fade-enter-from {\n  opacity: 0;\n}\n\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport Duration from \"@/components/ui/time/Duration.vue\";\n\nexport default defineComponent({\n  components: {\n    Duration,\n  },\n  props: {\n    time: {\n      type: Number,\n      default: null,\n    },\n  },\n  setup() {\n    return {};\n  },\n});\n</script>\n\n<template>\n  <transition name=\"fade\">\n    <div v-if=\"time\" class=\"playhead-time\">\n      <Duration class=\"playhead-time__value\" :seconds=\"time\" />\n    </div>\n  </transition>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.playhead-time {\n  height: 22px;\n  width: 60px;\n  overflow: hidden;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  &__value {\n    @include typo.small;\n\n    border-radius: 3px;\n    height: inherit;\n    padding: 0.5rem;\n    display: inline-flex;\n    color: rgb(var(--c-light));\n    background: rgb(var(--c-dark));\n    align-items: center;\n    justify-content: center;\n  }\n}\n\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 200ms;\n}\n\n.fade-enter-from {\n  opacity: 0;\n}\n\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\nimport { useElementSize, useMouseInElement } from \"@vueuse/core\";\nimport { round } from \"lodash-es\";\n\nimport PlayheadHandle from \"@/components/player/PlayheadHandle.vue\";\nimport PlayheadTime from \"@/components/player/PlayheadTime.vue\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { usePlayerState } from \"@/composables/player\";\n\nexport default defineComponent({\n  components: {\n    PlayheadHandle,\n    PlayheadTime,\n  },\n  emits: [\"seek\"],\n  setup(props, { emit }) {\n    const el = ref<HTMLElement | null>(null);\n    // const isHover = ref(false);\n    const { x: mouseX, isOutside } = useMouseInElement(el);\n    const { width } = useElementSize(el);\n    const { isLive, isNews, isOndemand, isPlaying, isBuffering, relPosition, media, duration } =\n      usePlayerState();\n    const { logUIEvent } = useAnalytics();\n    const isHover = computed(() => {\n      return !isOutside.value;\n    });\n    const playheadTime = computed(() => {\n      if (isOutside.value) {\n        return undefined;\n      }\n      return (duration.value * mouseX.value) / width.value;\n    });\n    const playheadTimeX = computed(() => {\n      if (isOutside.value) {\n        return null;\n      }\n      // dom element is 60px wide\n      const posX = mouseX.value - 36;\n      return Math.max(Math.min(posX, width.value - 66), 6);\n    });\n    const playheadHandleX = computed(() => {\n      if (isOutside.value) {\n        return null;\n      }\n      // dom element is 20px wide\n      const posX = width.value * relPosition.value - 10;\n      return Math.max(Math.min(posX, width.value - 20), 0);\n    });\n    const cueIn = computed(() => {\n      if (media.value?.cueIn && duration.value) {\n        return round(media.value?.cueIn / duration.value, 3);\n      }\n      return 0;\n    });\n    const cueOut = computed(() => {\n      if (media.value?.cueOut && duration.value) {\n        return 1 - round(media.value?.cueOut / duration.value, 3);\n      }\n      return 1;\n    });\n    const seek = (e: MouseEvent) => {\n      if (isLive.value) {\n        console.warn(\"no seek in live mode!\");\n        return;\n      }\n      if (isNews.value) {\n        console.warn(\"no seek in news mode!\");\n        return;\n      }\n      if (!el.value) {\n        return 0;\n      }\n      const seekTo = e.offsetX / width.value;\n      emit(\"seek\", seekTo);\n      logUIEvent(\"player:seek\", Math.round(seekTo * 100));\n    };\n    return {\n      el,\n      isHover,\n      playheadTime,\n      playheadTimeX,\n      playheadHandleX,\n      mouseX,\n      isLive,\n      isNews,\n      isOndemand,\n      isPlaying,\n      isBuffering,\n      relPosition,\n      cueIn,\n      cueOut,\n      seek,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    class=\"playhead-progress\"\n    :class=\"{\n      'is-hover': isHover,\n      'is-live': isLive,\n      'is-news': isNews,\n      'is-ondemand': isOndemand,\n      'is-playing': isPlaying,\n      'is-buffering': isBuffering,\n    }\"\n  >\n    <svg viewBox=\"0 0 1000 32\" preserveAspectRatio=\"none\" fill=\"transparent\" @click=\"seek\">\n      <rect x=\"0\" y=\"0\" width=\"100%\" height=\"32\" />\n      <rect x=\"0\" y=\"14\" width=\"100%\" height=\"4\" class=\"progress-total\" />\n      <g v-if=\"isOndemand\">\n        <rect\n          v-if=\"relPosition && relPosition >= cueIn\"\n          :x=\"`${cueIn * 100}%`\"\n          y=\"14\"\n          :width=\"`${(relPosition - cueIn) * 100}%`\"\n          height=\"4\"\n          class=\"progress-position\"\n        />\n        <rect v-if=\"cueIn\" y=\"10\" :x=\"`${cueIn * 100}%`\" width=\"1\" height=\"10\" class=\"cue-point\" />\n        <rect\n          v-if=\"cueOut\"\n          y=\"10\"\n          :x=\"`${cueOut * 100}%`\"\n          width=\"1\"\n          height=\"10\"\n          class=\"cue-point\"\n        />\n      </g>\n      <g v-else>\n        <rect x=\"0\" y=\"14\" width=\"100%\" height=\"1\" class=\"progress-placeholder\" />\n      </g>\n    </svg>\n    <PlayheadHandle\n      v-if=\"isOndemand\"\n      :is-visible=\"isHover\"\n      :style=\"{ left: `${playheadHandleX}px` }\"\n    />\n    <PlayheadTime v-if=\"isOndemand\" :time=\"playheadTime\" :style=\"{ left: `${playheadTimeX}px` }\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.playhead-progress {\n  position: relative;\n  height: 32px;\n  width: 100%;\n\n  svg {\n    height: 32px;\n    width: 100%;\n  }\n\n  .progress-total {\n    transition: fill 100ms;\n    fill: rgb(var(--c-fg) / 20%);\n  }\n\n  .progress-position {\n    // NOTE: width transition duration equals audioPlayer's POLL_INTERVAL\n    transition: fill 100ms, width 50ms linear;\n    fill: rgb(var(--c-fg) / 50%);\n  }\n\n  .progress-placeholder {\n    fill: rgb(var(--c-fg) / 20%);\n  }\n\n  .cue-point {\n    fill: rgb(var(--c-fg) / 100%);\n  }\n\n  &.is-playing {\n    .progress-position {\n      transition: fill 100ms, width 250ms linear;\n    }\n  }\n\n  &.is-buffering {\n    svg {\n      cursor: wait;\n    }\n  }\n\n  &.is-hover {\n    .progress-position {\n      fill: rgb(var(--c-fg) / 100%);\n    }\n  }\n\n  &.is-ondemand {\n    svg {\n      cursor: pointer;\n    }\n  }\n\n  &.is-live {\n    .progress-total {\n      fill: rgb(var(--c-fg) / 0%);\n    }\n  }\n\n  &.is-news {\n    .progress-total {\n      fill: rgb(var(--c-fg) / 0%);\n    }\n  }\n}\n\n.playhead-handle {\n  top: 5px;\n  position: absolute;\n  pointer-events: none;\n  transition: left 100ms linear;\n}\n\n.playhead-time {\n  top: -13px;\n  position: absolute;\n  pointer-events: none;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    volume: {\n      type: [Number, String],\n      default: 1,\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"none\",\n        stroke: color.value,\n        strokeWidth: (2.5 * 48) / size.value,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <polygon points=\"19.1,20.1 13.5,20.1 13.5,27.7 19.1,27.7 26.6,34 26.6,13.8\" />\n    <path\n      v-if=\"volume > 0\"\n      :stroke-opacity=\"volume\"\n      d=\"M31.9,19.1c1.6,1.3,2.6,3.2,2.6,5.3c0,2-1,3.9-2.6,5.2\"\n    />\n    <line v-if=\"volume === 0\" x1=\"12\" y1=\"12\" x2=\"36\" y2=\"36\" />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\nimport { storeToRefs } from \"pinia\";\n\nimport IconSpeaker from \"@/components/ui/icon/IconSpeaker.vue\";\nimport { useSettingsStore } from \"@/stores/settings\";\n\nimport Circle from \"./button/Circle.vue\";\n\nexport default defineComponent({\n  components: {\n    IconSpeaker,\n    Circle,\n  },\n  setup() {\n    const { baseVolume } = storeToRefs(useSettingsStore());\n    const isExpanded = ref(false);\n    const onClick = () => {\n      isExpanded.value = !isExpanded.value;\n    };\n    return {\n      baseVolume,\n      onClick,\n      isExpanded,\n    };\n  },\n});\n</script>\n\n<template>\n  <Circle class=\"volume-control\" @click.prevent=\"onClick\">\n    <IconSpeaker :volume=\"baseVolume\" />\n  </Circle>\n  <transition name=\"slide\">\n    <div v-if=\"isExpanded\">\n      <input class=\"slider\" type=\"range\" min=\"0\" max=\"1\" step=\"0.05\" v-model=\"baseVolume\" />\n    </div>\n  </transition>\n</template>\n\n<style lang=\"scss\" scoped>\n.volume-control {\n  cursor: pointer;\n}\n\n.slider {\n  bottom: 0;\n  width: 130px;\n}\n\n.slide-enter-active,\n.slide-leave-active {\n  transition: width 200ms, transform 200ms, opacity 200ms;\n  transform: scaleX(1);\n  width: 130px;\n  overflow: hidden;\n}\n\n.slide-enter-from {\n  transform: scaleX(0);\n  opacity: 0;\n  width: 0;\n  overflow: hidden;\n}\n\n.slide-leave-to {\n  transform: scale(0);\n  width: 0;\n  overflow: hidden;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from \"vue\";\nimport { useToggle } from \"@vueuse/core\";\n\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport { useObjKey } from \"@/composables/obj\";\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\nimport { useQueueState } from \"@/composables/queue\";\nimport { getContrastColor } from \"@/utils/color\";\n\nimport Bandwidth from \"./button/Bandwidth.vue\";\nimport Circle from \"./button/Circle.vue\";\nimport Donate from \"./button/Donate.vue\";\nimport News from \"./button/News.vue\";\nimport OnAir from \"./button/OnAir.vue\";\n// import Survey from \"./button/Survey.vue\";\nimport CurrentMedia from \"./CurrentMedia.vue\";\nimport CurrentNews from \"./CurrentNews.vue\";\nimport PlayerControl from \"./PlayerControl.vue\";\nimport Playhead from \"./Playhead.vue\";\nimport Queue from \"./Queue.vue\";\nimport QueueControl from \"./QueueControl.vue\";\nimport VolumeControl from \"./VolumeControl.vue\";\n\nconst { queueLength } = useQueueState();\nconst { seek } = usePlayerControls();\nconst { isVisible, isNews, media, color: bgColor } = usePlayerState();\nconst { objKey } = useObjKey(media);\nconst fgColor = computed(() => getContrastColor(bgColor.value));\nconst fgColorInverse = computed(() => getContrastColor(fgColor.value));\nconst queueVisible = ref(false);\nconst toggleQueue = useToggle(queueVisible);\n</script>\n\n<template>\n  <Queue :is-visible=\"queueVisible && queueLength > 0\" @close=\"toggleQueue(false)\" />\n  <transition name=\"slide\">\n    <div\n      v-if=\"isVisible\"\n      class=\"player\"\n      :style=\"{\n        '--c-bg': bgColor.join(' '),\n        '--c-fg': fgColor.join(' '),\n        '--c-fg-inverse': fgColorInverse.join(' '),\n      }\"\n    >\n      <Playhead class=\"playhead\" @seek=\"seek\" />\n      <div class=\"container\">\n        <div class=\"left\">\n          <CurrentNews v-if=\"isNews\" />\n          <CurrentMedia v-else :media=\"media\" />\n        </div>\n        <div class=\"center\">\n          <PlayerControl :fg-color=\"fgColor\" />\n        </div>\n        <div class=\"right\">\n          <!--\n          <Survey />\n          -->\n          <OnAir />\n          <News />\n          <Donate />\n          <Bandwidth />\n          <VolumeControl />\n          <Circle v-if=\"objKey\">\n            <UserRating color-var=\"--c-fg\" :obj-key=\"objKey\" />\n          </Circle>\n          <QueueControl\n            :queue-visible=\"queueVisible\"\n            :num-queued=\"queueLength\"\n            @toggle-visibility=\"toggleQueue()\"\n          />\n        </div>\n      </div>\n    </div>\n  </transition>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n\n$player-height: 72px;\n\n.queue {\n  z-index: 30;\n}\n\n.player {\n  position: fixed;\n  height: $player-height;\n  width: 100%;\n  bottom: 0;\n  z-index: 110;\n  color: rgb(var(--c-fg));\n  background: rgb(var(--c-bg));\n  transition: background 1000ms;\n}\n\n.playhead {\n  position: absolute;\n  bottom: 54px;\n}\n\n.container {\n  @include container.default;\n\n  padding-top: 0.25rem;\n  display: grid;\n  grid-template-columns: 4fr 2fr 4fr;\n\n  .left,\n  .center,\n  .right {\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n    height: $player-height;\n  }\n\n  .left {\n    justify-content: flex-start;\n  }\n\n  .center {\n    justify-content: center;\n  }\n\n  .right {\n    justify-content: flex-end;\n\n    .survey {\n      @include responsive.bp-large {\n        display: none;\n      }\n    }\n\n    .on-air {\n      margin-left: 1rem;\n    }\n\n    .news {\n      margin-left: 1rem;\n    }\n\n    .donate {\n      margin-left: 1rem;\n\n      @include responsive.bp-large {\n        display: none;\n      }\n    }\n\n    .bandwidth {\n      margin-left: 1rem;\n      margin-right: 1rem;\n    }\n\n    .circle-button {\n      position: relative;\n    }\n  }\n}\n\n.slide-enter-active,\n.slide-leave-active {\n  transition: transform 200ms, opacity 200ms;\n}\n\n.slide-enter-from {\n  transform: translate(0, 100%);\n  opacity: 0;\n}\n\n.slide-leave-to {\n  transform: translate(0, 100%);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport { DateTime } from \"luxon\";\nimport { isString } from \"lodash-es\";\n\ninterface Props {\n  value: string | DateTime;\n  displayDate?: boolean;\n  displayTime?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  displayDate: true,\n  displayTime: true,\n});\n\nconst parsedValue = computed(() => {\n  if (isString(props.value)) {\n    return DateTime.fromISO(props.value);\n  }\n  return props.value;\n});\nconst dateDisplay = computed(() => {\n  if (!props.displayDate) {\n    return null;\n  }\n  return parsedValue.value.setLocale(\"de-ch\").toLocaleString(DateTime.DATE_SHORT);\n});\nconst timeDisplay = computed(() => {\n  if (!props.displayTime) {\n    return null;\n  }\n  return parsedValue.value.setLocale(\"de-ch\").toLocaleString(DateTime.TIME_24_SIMPLE);\n});\n</script>\n\n<template>\n  <span class=\"datetime\">\n    <span v-if=\"dateDisplay\" class=\"date\">{{ dateDisplay }}</span>\n    <span v-if=\"dateDisplay && timeDisplay\" class=\"separator\"></span>\n    <span v-if=\"timeDisplay\" class=\"time\">{{ timeDisplay }}</span>\n  </span>\n</template>\n\n<style lang=\"scss\" scoped>\n.datetime {\n  display: inline-flex;\n\n  .date,\n  .time {\n    white-space: nowrap;\n  }\n\n  .separator {\n    padding-left: 0.5rem;\n  }\n}\n</style>\n","<script>\nexport default {\n  name: \"Money\",\n  props: {\n    value: {\n      type: Number,\n      required: true,\n    },\n    includeCurrency: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  data() {\n    return {\n      currency: {\n        symbol: \"CHF\",\n      },\n      locale: \"de-CH\",\n    };\n  },\n  computed: {\n    symbol() {\n      return this.currency.symbol;\n    },\n    valueDisplay() {\n      return \"?\"; // TODO: remove once we know the prices..\n      /*\n      const options = {\n        minimumFractionDigits: 2,\n        maximumFractionDigits: 2,\n      };\n      let valueStr = this.value.toLocaleString(this.locale, options);\n      if (valueStr.endsWith(\".00\")) {\n        valueStr = valueStr.replace(\".00\", \".-\");\n      }\n      return valueStr;\n      */\n    },\n  },\n};\n</script>\n\n<template>\n  <span class=\"money\">\n    <span v-if=\"includeCurrency\" class=\"symbol\" v-text=\"`${symbol}&nbsp;`\" />\n    <span class=\"value\" v-text=\"valueDisplay\" />\n  </span>\n</template>\n\n<style lang=\"scss\" scoped>\n.money {\n  display: inline-flex;\n  align-items: flex-end;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref } from \"vue\";\nimport { loadStripe } from \"@stripe/stripe-js/pure\";\nimport type { AxiosError } from \"axios\";\n\nimport { createStripeCheckoutSession, getPlanOptions } from \"@/api/subscription\";\nimport AsyncButton from \"@/components/ui/button/AsyncButton.vue\";\nimport Datetime from \"@/components/ui/date/Datetime.vue\";\nimport ApiErrors from \"@/components/ui/error/ApiErrors.vue\";\nimport Money from \"@/components/ui/Money.vue\";\nimport settings from \"@/settings\";\nimport type { SubscriptionOptionOption } from \"@/typings\";\n\nconst { STRIPE_PUBLISHABLE_KEY } = settings;\n\nexport default defineComponent({\n  components: {\n    AsyncButton,\n    ApiErrors,\n    Datetime,\n    Money,\n  },\n  props: {\n    next: {\n      type: String,\n      default: null,\n    },\n  },\n  setup(props) {\n    const errors = ref<Array<string | AxiosError>>([]);\n    const message = ref(null);\n    const selectedKey = ref(null);\n    const options = ref<Array<SubscriptionOptionOption>>([]);\n    const fetchOptions = async () => {\n      errors.value = [];\n      try {\n        const response = await getPlanOptions();\n        message.value = response.message;\n        options.value = response.options;\n        if (response.options.length) {\n          selectedKey.value = response.options[0].sku;\n        }\n      } catch (err: unknown) {\n        const error = err as AxiosError;\n        errors.value = [error];\n      }\n    };\n    const selectOption = (option: any) => {\n      selectedKey.value = option.sku;\n    };\n    const selectedOption = computed(() => {\n      if (!selectedKey.value) {\n        return null;\n      }\n      return options.value.find((o: any) => o.sku === selectedKey.value);\n    });\n    console.debug(\"stripeSetup\");\n    const stripePromise = loadStripe(STRIPE_PUBLISHABLE_KEY);\n    const startStripePayment = async () => {\n      const stripe = await stripePromise;\n      // @ts-ignore\n      const response = await createStripeCheckoutSession(selectedOption.value.sku, props.next);\n      // if (response) {\n      //   throw new Error('foo');\n      // }\n      console.debug(\"response\", response);\n      const sessionId = response.id;\n      console.debug(\"sessionId\", sessionId);\n      // @ts-ignore\n      const result = await stripe.redirectToCheckout({\n        sessionId,\n      });\n      if (result.error) {\n        // If `redirectToCheckout` fails due to a browser or network\n        // error, display the localized error message to your customer\n        // using `result.error.message`.\n        console.error(result.error);\n      }\n    };\n    const startPayment = async (provider: string) => {\n      errors.value = [];\n      if (provider === \"stripe\") {\n        await startStripePayment();\n      }\n    };\n\n    onMounted(() => {\n      fetchOptions();\n    });\n    return {\n      message,\n      options,\n      selectedOption,\n      selectOption,\n      errors,\n      startPayment,\n    };\n  },\n});\n</script>\n\n<template>\n  <div>\n    <div class=\"preview-mode-info\">\n      <i18n-t keypath=\"subscription.subscribe.legalRestrictionInfo\" tag=\"p\" />\n      <!--\n      <p style=\"padding-top: 1rem\">\n        We know this is disappointing, but don't worry, we've got you covered.\n        <br />\n        If you'd like to try the on-demand service, just shoot us an email at\n        <a href=\"mailto:info@openbroadcast.ch\">info@openbroadcast.ch</a>, and we'll send you a\n        voucher code.\n      </p>\n      -->\n    </div>\n    <div class=\"subscribe-plan\">\n      <section class=\"section info\">\n        <div>\n          <p class=\"message\" v-text=\"message\" />\n          <div class=\"options\">\n            <div\n              v-for=\"(option, index) in options\"\n              @click=\"selectOption(option)\"\n              :key=\"`options-${index}-${option.sku}`\"\n              class=\"option\"\n              :class=\"{ 'is-selected': option.sku === selectedOption?.sku }\"\n            >\n              <div class=\"price\">\n                <Money :value=\"option.price\" :include-currency=\"true\" />\n              </div>\n              <div class=\"separator\" />\n              <div class=\"title\" v-text=\"option.title\" />\n              <i18n-t keypath=\"subscription.creditsUntilDate\" tag=\"div\" class=\"until-date\">\n                <Datetime :value=\"option.untilDate\" :display-time=\"false\" />\n              </i18n-t>\n            </div>\n          </div>\n        </div>\n      </section>\n      <section v-if=\"selectedOption\" class=\"section total\">\n        <i18n-t keypath=\"subscription.subscribe.total.legal\" tag=\"div\" class=\"title\" />\n        <div class=\"price\">\n          <Money :value=\"selectedOption.price\" />\n        </div>\n      </section>\n      <section v-if=\"errors\" class=\"section errors\">\n        <ApiErrors :errors=\"errors\" />\n      </section>\n      <section class=\"section actions\">\n        <AsyncButton class=\"button\" @click.prevent=\"startPayment('stripe')\">\n          <i18n-t keypath=\"subscription.subscribe.payNow\" />\n        </AsyncButton>\n        <!--\n        <AsyncButton\n          class=\"button\"\n          @click.prevent=\"startPayment('paypal')\"\n        >\n          (PP) Complete Order\n        </AsyncButton>\n        -->\n      </section>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n@use \"@/style/elements/section\";\n@use \"@/style/elements/button\";\n\n/* NOTE: temporary note for preview */\n.preview-mode-info {\n  margin-top: 4rem;\n  margin-bottom: 2rem;\n  color: rgb(var(--c-red));\n\n  a {\n    text-decoration: underline;\n  }\n\n  p {\n    white-space: pre-wrap;\n  }\n}\n\n.subscribe-plan {\n  margin-bottom: 8rem;\n  pointer-events: none;\n  filter: grayscale(1);\n  opacity: 0.5;\n}\n\n.section {\n  @include section.default;\n\n  &.info {\n    .message {\n      padding: 1rem 0;\n    }\n\n    .details {\n      font-size: 150%;\n    }\n  }\n}\n\n@mixin options {\n  display: grid;\n  grid-gap: 1rem;\n  grid-template-columns: 1fr 1fr 1fr;\n\n  @include responsive.bp-medium {\n    grid-template-columns: unset;\n  }\n}\n\n@mixin option {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 1rem;\n  background: rgb(var(--c-light));\n  box-shadow: 0 0 3px rgb(var(--c-dark) / 33%);\n  cursor: pointer;\n  transition: background 100ms;\n\n  @include responsive.on-hover {\n    background: rgb(var(--c-dark) / 10%);\n  }\n\n  .price {\n    font-size: 200%;\n  }\n\n  .separator {\n    height: 1px;\n    width: 100%;\n    margin: 1rem 0;\n    background: rgb(var(--c-dark) / 20%);\n  }\n\n  .title {\n    padding: 0;\n  }\n\n  .until-date {\n    padding: 0;\n  }\n\n  &.is-selected {\n    color: rgb(var(--c-light));\n    background: rgb(var(--c-green));\n\n    .separator {\n      background: rgb(var(--c-light) / 20%);\n    }\n  }\n\n  @include responsive.bp-medium {\n    padding: 0.5rem 1rem 0.5rem 0.5rem;\n    display: grid;\n    grid-gap: 0.25rem;\n    grid-template-areas:\n      \"title price\"\n      \"date  price\";\n\n    .separator {\n      display: none;\n    }\n\n    .price {\n      grid-area: price;\n      font-size: 120%;\n      justify-self: end;\n    }\n\n    .title {\n      grid-area: title;\n    }\n\n    .until-date {\n      grid-area: date;\n\n      @include typo.small;\n    }\n  }\n}\n\n.options {\n  @include options;\n\n  .option {\n    @include option;\n  }\n}\n\n.total {\n  padding: 0.5rem;\n\n  .title {\n    margin-bottom: 0.5rem;\n  }\n\n  .price {\n    @include typo.large;\n    @include typo.bold;\n\n    @include responsive.bp-medium {\n      color: rgb(var(--c-green));\n      font-size: 150%;\n    }\n  }\n}\n\n.actions {\n  display: flex;\n  align-items: center;\n  justify-content: flex-start;\n\n  .button {\n    @include button.default(3rem);\n\n    min-width: 33%;\n    margin-right: 0.5rem;\n    margin-left: 0.5rem;\n\n    @include responsive.bp-medium {\n      width: 100%;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref } from \"vue\";\n\nconst props = defineProps<{\n  code: string;\n  isValid: boolean;\n}>();\n\nconst emit = defineEmits([\"input\"]);\n\nconst el = ref<HTMLInputElement | null>(null);\nconst inputValue = ref(props.code);\nconst parseInput = (value: string) => {\n  return value.toUpperCase().replace(/\\s/g, \"\").substring(0, 8);\n};\nconst handleInput = async (e: any) => {\n  const value = parseInput(e.target.value);\n  inputValue.value = value;\n  emit(\"input\", value);\n};\nconst limitInput = computed(() => {\n  return inputValue.value && inputValue.value.length >= 8 ? 8 : 100;\n});\nonMounted(() => {\n  handleInput({\n    target: {\n      value: inputValue.value,\n    },\n  });\n  el.value?.focus();\n});\n</script>\n\n<template>\n  <div class=\"code-input\" :class=\"{ 'is-valid': isValid }\">\n    <div class=\"input-container\">\n      <i18n-t keypath=\"subscription.voucher.code\" tag=\"label\" for=\"ti-1299\" />\n      <input\n        ref=\"el\"\n        id=\"ti-1299\"\n        class=\"input\"\n        @input=\"handleInput\"\n        :value=\"inputValue\"\n        :maxlength=\"limitInput\"\n        placeholder=\"Code: AB-CD-EF\"\n      />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/form\";\n\n.code-input {\n  @include form.default;\n\n  .input-container {\n    @include form.top-label;\n\n    > label {\n      &::after {\n        content: \":\";\n      }\n    }\n  }\n\n  .input {\n    @include form.input;\n\n    font-size: 200%;\n    transition: background 200ms;\n  }\n\n  &.is-valid {\n    .input {\n      background: rgb(var(--c-success) / 10%);\n      border-color: rgb(var(--c-success));\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\nimport { debounce } from \"lodash-es\";\nimport type { AxiosError } from \"axios\";\n\nimport { getVoucher, redeemVoucher } from \"@/api/subscription\";\nimport AsyncButton from \"@/components/ui/button/AsyncButton.vue\";\nimport Datetime from \"@/components/ui/date/Datetime.vue\";\nimport ApiErrors from \"@/components/ui/error/ApiErrors.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport type { Voucher } from \"@/typings\";\n\nimport CodeInput from \"./voucher/CodeInput.vue\";\n\nconst codeRegex = new RegExp(\"^([A-Z]{2})-?([A-Z]{2})-?([A-Z]{2})$\");\n\nexport default defineComponent({\n  components: {\n    AsyncButton,\n    ApiErrors,\n    Datetime,\n    CodeInput,\n  },\n  props: {\n    code: {\n      type: String,\n      default: \"\",\n    },\n    next: {\n      type: String,\n      default: null,\n    },\n  },\n  emits: [\"subscriptionExtended\"],\n  setup(props, { emit }) {\n    const { loadUser } = useAccount();\n    const errors = ref<Array<string | AxiosError>>([]);\n    const codeInput = ref(props.code);\n    const voucher = ref<Voucher | null>(null);\n    const isValid = computed(() => !!voucher.value);\n\n    const fetchVoucher = async (code: string) => {\n      errors.value = [];\n      try {\n        voucher.value = await getVoucher(code);\n      } catch (err: any) {\n        errors.value = [err.response];\n      }\n    };\n\n    const handleCodeInput = debounce(async (value: string) => {\n      errors.value = [];\n      if (codeRegex.test(value)) {\n        await fetchVoucher(value);\n      } else {\n        voucher.value = null;\n        // errors.value = [\n        //   {\n        //     message: \"invalid code\",\n        //   },\n        // ];\n      }\n    }, 200);\n\n    const redeem = async () => {\n      if (!voucher.value) {\n        return;\n      }\n      const code = voucher.value.code;\n      if (!codeRegex.test(code)) {\n        console.warn(\"invalid code\", code);\n        return;\n      }\n      errors.value = [];\n      try {\n        const response = await redeemVoucher(code);\n        console.debug(response);\n        await loadUser();\n        emit(\"subscriptionExtended\");\n      } catch (err: unknown) {\n        const error = err as AxiosError;\n        console.warn(error);\n        console.warn(error.response);\n        errors.value = [error];\n        throw err;\n      }\n    };\n    return {\n      errors,\n      codeInput,\n      handleCodeInput,\n      voucher,\n      isValid,\n      redeem,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"subscribe-voucher\">\n    <section class=\"section input\">\n      <div>\n        <CodeInput :code=\"codeInput\" :is-valid=\"isValid\" @input=\"handleCodeInput\" />\n      </div>\n      <div v-if=\"errors\">\n        <ApiErrors :errors=\"errors\" />\n      </div>\n    </section>\n    <section v-if=\"voucher\" class=\"section voucher\">\n      <div>\n        <i18n-t keypath=\"subscription.validNumDays\" tag=\"p\" :plural=\"voucher.numDays\" />\n        <i18n-t keypath=\"subscription.creditsUntilDate\" tag=\"p\">\n          <Datetime v-if=\"voucher.untilDate\" :value=\"voucher.untilDate\" :display-time=\"false\" />\n        </i18n-t>\n      </div>\n    </section>\n    <section class=\"section actions\">\n      <AsyncButton class=\"button\" :disabled=\"!isValid\" @click.prevent=\"redeem\">\n        <i18n-t keypath=\"subscription.subscribe.redeemNow\" />\n      </AsyncButton>\n    </section>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/section\";\n@use \"@/style/elements/button\";\n\n.subscribe-voucher {\n  margin-bottom: 4rem;\n}\n\n.section {\n  @include section.default;\n\n  &.info {\n    .message {\n      padding: 1rem 0;\n    }\n\n    .details {\n      font-size: 150%;\n    }\n  }\n\n  &.voucher {\n    @include typo.large;\n\n    padding-left: 0.5rem;\n  }\n}\n\n.actions {\n  display: flex;\n  align-items: center;\n  justify-content: flex-start;\n\n  .button {\n    @include button.default(3rem);\n\n    min-width: 33%;\n    margin-right: 0.5rem;\n    margin-left: 0.5rem;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\nimport { useRouter } from \"vue-router\";\n\nimport SubscribePlan from \"@/components/subscription/SubscribePlan.vue\";\nimport SubscribeVoucher from \"@/components/subscription/SubscribeVoucher.vue\";\nimport OverlayPanel from \"@/components/ui/panel/OverlayPanel.vue\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { useNotification } from \"@/composables/notification\";\nimport eventBus from \"@/eventBus\";\n\nexport default defineComponent({\n  components: {\n    OverlayPanel,\n    SubscribePlan,\n    SubscribeVoucher,\n  },\n  setup() {\n    const router = useRouter();\n    const { notify } = useNotification();\n    const { logUIEvent } = useAnalytics();\n    const isVisible = ref(false);\n    const intent = ref(\"plan\");\n    const next = ref(\"\");\n    const message = ref(\"\");\n    const successVisible = ref(false);\n    const close = () => {\n      isVisible.value = false;\n      successVisible.value = false;\n    };\n    const setIntent = (value: string) => {\n      intent.value = value;\n      logUIEvent(\"subscription:subscribe\", intent.value);\n    };\n    eventBus.on(\"subscription:subscribe\", (event) => {\n      isVisible.value = true;\n      intent.value = event.intent;\n      next.value = event?.next ?? \"\";\n      message.value = event?.message ?? \"\";\n      logUIEvent(\"subscription:subscribe\", intent.value);\n    });\n    const subscriptionUpdated = () => {\n      console.debug(\"show success\");\n      // successVisible.value = true;\n      close();\n      notify({\n        level: \"success\",\n        body: \"Subscription updated\",\n        ttl: 5,\n      });\n      if (next.value) {\n        router.push(next.value);\n      }\n      console.debug(\"next:\", next.value);\n    };\n    return {\n      close,\n      isVisible,\n      intent,\n      setIntent,\n      subscriptionUpdated,\n      successVisible,\n      next,\n      message,\n    };\n  },\n});\n</script>\n\n<template>\n  <OverlayPanel :is-visible=\"isVisible\" @close=\"close\">\n    <div>\n      <i18n-t keypath=\"subscription.subscribe.title\" tag=\"div\" class=\"title\" />\n      <i18n-t keypath=\"subscription.subscribe.lead\" tag=\"div\" class=\"lead\"> CHF ?.- </i18n-t>\n      <i18n-t\n        v-if=\"intent === 'plan'\"\n        keypath=\"subscription.subscribe.ctaVoucher.text\"\n        tag=\"div\"\n        class=\"cta\"\n      >\n        <i18n-t\n          @click.prevent=\"setIntent('voucher')\"\n          keypath=\"subscription.subscribe.ctaVoucher.button\"\n          tag=\"a\"\n        />\n      </i18n-t>\n      <i18n-t\n        v-if=\"intent === 'voucher'\"\n        keypath=\"subscription.subscribe.ctaBuy.text\"\n        tag=\"div\"\n        class=\"cta\"\n      >\n        <i18n-t\n          @click.prevent=\"setIntent('plan')\"\n          keypath=\"subscription.subscribe.ctaBuy.button\"\n          tag=\"a\"\n        />\n      </i18n-t>\n    </div>\n    <div class=\"subscribe\">\n      <section>\n        <transition name=\"fade\" mode=\"out-in\" appear>\n          <SubscribePlan v-if=\"intent === 'plan'\" :next=\"next\" />\n          <SubscribeVoucher\n            v-else-if=\"intent === 'voucher'\"\n            :next=\"next\"\n            @subscription-extended=\"subscriptionUpdated\"\n          />\n        </transition>\n      </section>\n    </div>\n    <template v-if=\"successVisible\" #success>\n      <!-- NOTE: success step is currently not displayed -->\n      <div class=\"subscribe-success\">\n        <h1 class=\"title\">Your Plan has been updated</h1>\n        <p class=\"message\">(( message ))</p>\n        <div class=\"cta\">\n          <button @click.prevent=\"close\" class=\"button\">Let's start exploring!</button>\n        </div>\n      </div>\n    </template>\n    <template #footer>\n      <!--\n      <div class=\"legal\">(( Legal shizzle... ))</div>\n      -->\n    </template>\n  </OverlayPanel>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/section\";\n@use \"@/style/elements/button\";\n\n.section {\n  @include section.default;\n}\n\n.button {\n  @include button.default;\n}\n\n.current-subscription-text {\n  margin: 2rem 0;\n}\n\n.title {\n  @include typo.x-large;\n  @include typo.bold;\n}\n\n.lead {\n  @include typo.large;\n\n  white-space: pre-line;\n  margin-bottom: 1rem;\n}\n\n.cta {\n  @include typo.large;\n\n  a {\n    text-decoration: underline;\n    cursor: pointer;\n  }\n}\n\n.subscribe {\n  color: inherit;\n}\n\n.current-subscription {\n  margin: 1rem 0;\n  padding: 1rem;\n}\n\n.legal {\n  font-size: 90%;\n  opacity: 0.5;\n}\n\n.subscribe-success {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  height: 100%;\n\n  .title {\n    font-size: 3rem;\n    text-align: center;\n  }\n\n  .message {\n    max-width: 75%;\n    padding: 1.5rem 0 2rem;\n    font-size: 1.75rem;\n    line-height: 130%;\n    text-align: center;\n  }\n\n  .cta {\n    .button {\n      @include button.default(4rem);\n    }\n  }\n}\n\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 100ms;\n}\n\n.fade-enter-from,\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport type { AxiosError } from \"axios\";\n\nimport { getVoucher, redeemVoucher } from \"@/api/subscription\";\nimport AsyncButton from \"@/components/ui/button/AsyncButton.vue\";\nimport Datetime from \"@/components/ui/date/Datetime.vue\";\nimport ApiErrors from \"@/components/ui/error/ApiErrors.vue\";\nimport ModalPanel from \"@/components/ui/panel/ModalPanel.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport eventBus from \"@/eventBus\";\nimport type { Voucher } from \"@/typings\";\n\nconst codeRegex = new RegExp(\"^([A-Z]{2})-?([A-Z]{2})-?([A-Z]{2})$\");\n\nexport default defineComponent({\n  components: {\n    ModalPanel,\n    ApiErrors,\n    AsyncButton,\n    Datetime,\n  },\n  setup() {\n    const router = useRouter();\n    const route = useRoute();\n    const { user, loadUser } = useAccount();\n    const errors = ref<Array<string | AxiosError>>([]);\n    const voucher = ref<Voucher | null>(null);\n    const isValid = computed(() => !!voucher.value);\n    const code = computed(() => {\n      if (!route.hash.startsWith(\"#\")) {\n        return \"\";\n      }\n      const hashValue = route.hash.replace(\"#\", \"\");\n      return codeRegex.test(hashValue) ? hashValue : null;\n    });\n    const fetchVoucher = async (codeValue: string) => {\n      voucher.value = null;\n      errors.value = [];\n      try {\n        voucher.value = await getVoucher(codeValue);\n      } catch (err: unknown) {\n        const error = err as AxiosError;\n        errors.value = [error];\n      }\n    };\n    const redeem = async () => {\n      errors.value = [];\n      if (!code.value) {\n        return;\n      }\n      try {\n        const response = await redeemVoucher(code.value);\n        console.debug(\"redeem voucher\", response);\n        await loadUser();\n        await router.replace(route.path);\n      } catch (err: unknown) {\n        const error = err as AxiosError;\n        errors.value = [error];\n        throw err;\n      }\n    };\n    const authenticateAndRedeem = () => {\n      const event = {\n        intent: \"login\",\n        next: `${route.path}#${code.value}`,\n      };\n      eventBus.emit(\"account:authenticate\", event);\n    };\n    const closePanel = () => {\n      router.push(route.path);\n    };\n    watch(\n      () => code.value,\n      async () => {\n        if (!code.value) {\n          return;\n        }\n        if (codeRegex.test(code.value)) {\n          await fetchVoucher(code.value);\n        } else {\n          voucher.value = null;\n        }\n      }\n    );\n    return {\n      user,\n      code,\n      voucher,\n      errors,\n      isValid,\n      closePanel,\n      authenticateAndRedeem,\n      redeem,\n    };\n  },\n});\n</script>\n\n<template>\n  <ModalPanel :is-visible=\"!!code\" @close=\"closePanel\">\n    <div class=\"claim-voucher\">\n      <section class=\"code\">\n        <div>\n          <p v-text=\"`Code: ${code}`\" />\n        </div>\n      </section>\n      <section v-if=\"errors && errors.length\" class=\"error\">\n        <i18n-t keypath=\"subscription.voucher.invalidCode\" tag=\"p\" class=\"error__notes\" />\n        <ApiErrors :errors=\"errors\" />\n      </section>\n      <section v-if=\"voucher\" class=\"voucher\">\n        <div class=\"voucher__details\">\n          <p>\n            <i18n-t keypath=\"subscription.validNumDays\" :plural=\"voucher.numDays\" />\n          </p>\n          <i18n-t keypath=\"subscription.validUntilDate\" tag=\"p\">\n            <Datetime v-if=\"voucher.untilDate\" :value=\"voucher.untilDate\" :display-time=\"false\" />\n          </i18n-t>\n        </div>\n      </section>\n      <section class=\"actions\">\n        <AsyncButton v-if=\"user\" class=\"button\" :disabled=\"!isValid\" @click.prevent=\"redeem\">\n          <i18n-t keypath=\"subscription.voucher.redeem\" />\n        </AsyncButton>\n        <AsyncButton\n          v-else\n          class=\"button\"\n          :disabled=\"!isValid\"\n          @click.prevent=\"authenticateAndRedeem\"\n        >\n          <i18n-t keypath=\"subscription.voucher.authenticateAndRedeem\" />\n        </AsyncButton>\n      </section>\n      <pre\n        v-if=\"false\"\n        v-text=\"{\n          user,\n          code,\n          voucher,\n          isValid,\n        }\"\n      />\n    </div>\n  </ModalPanel>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/button\";\n\n.claim-voucher {\n  .code {\n    @include typo.x-large;\n\n    padding: 0 0 1rem;\n  }\n\n  .error {\n    padding: 0 0 1rem;\n\n    &__notes {\n      @include typo.large;\n\n      padding: 0 0 1rem;\n    }\n  }\n\n  .voucher {\n    padding: 0 0 1rem;\n\n    &__details {\n      @include typo.large;\n    }\n  }\n\n  .actions {\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n    padding: 1rem 0 0;\n\n    .button {\n      @include button.default(3rem);\n\n      min-width: 33%;\n\n      @include responsive.bp-medium {\n        width: 100%;\n      }\n    }\n  }\n}\n</style>\n","export const hlsBaseConfig = {\n  maxBufferLength: 30,\n  maxMaxBufferLength: 30,\n  backBufferLength: 30,\n  liveDurationInfinity: true,\n  liveSyncDurationCount: 3,\n  lowLatencyMode: true,\n  // xhrSetup: (xhr: XMLHttpRequest, url: string) => {},\n  abrBandWidthFactor: 0.5,\n  abrBandWidthUpFactor: 0.3,\n  manifestLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: Infinity,\n      maxLoadTimeMs: 20000,\n      timeoutRetry: {\n        maxNumRetry: 200,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0,\n      },\n      errorRetry: {\n        maxNumRetry: 100,\n        retryDelayMs: 1000,\n        maxRetryDelayMs: 8000,\n      },\n    },\n  },\n  playlistLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 10000,\n      maxLoadTimeMs: 20000,\n      timeoutRetry: {\n        maxNumRetry: 200,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0,\n      },\n      errorRetry: {\n        maxNumRetry: 200,\n        retryDelayMs: 1000,\n        maxRetryDelayMs: 8000,\n      },\n    },\n  },\n};\n","interface AudioAnalyser {\n  a32: AnalyserNode;\n  a1024: AnalyserNode;\n}\n\nconst createAudioAnalyser = (audio: HTMLAudioElement): AudioAnalyser => {\n  const context = new AudioContext();\n  const source = context.createMediaElementSource(audio);\n\n  const a32 = context.createAnalyser();\n  a32.smoothingTimeConstant = 0.9;\n  a32.fftSize = 32;\n  a32.minDecibels = -80;\n  a32.maxDecibels = -5;\n  source.connect(a32);\n\n  const a1024 = context.createAnalyser();\n  a1024.smoothingTimeConstant = 0.95;\n  a1024.fftSize = 1024;\n  source.connect(a1024);\n\n  source.connect(context.destination);\n\n  return {\n    a32: a32,\n    a1024: a1024,\n  };\n};\n\nexport type { AudioAnalyser };\nexport { createAudioAnalyser };\n","import { watch } from \"vue\";\nimport { useWakeLock } from \"@vueuse/core\";\nimport Hls from \"hls.js/dist/hls.light.min.js\";\nimport log from \"loglevel\";\nimport { debounce, isEqual, round } from \"lodash-es\";\n\nimport { useDevice } from \"@/composables/device\";\nimport { useQueueControls } from \"@/composables/queue\";\nimport { useSettings } from \"@/composables/settings\";\nimport { hlsBaseConfig } from \"@/player/hlsConfig\";\nimport settings from \"@/settings\";\nimport type { State as StorePlayerState } from \"@/stores/player\";\nimport { usePlayerStore } from \"@/stores/player\";\n\nimport type { AudioAnalyser } from \"./analyser\";\nimport { createAudioAnalyser } from \"./analyser\";\n\nconst PROTECTED_MEDIA = \"https://media.openbroadcast.ch/\";\n\nconst hlsConfig = {\n  ...hlsBaseConfig,\n  debug: false,\n  xhrSetup: (xhr: XMLHttpRequest, url: string) => {\n    xhr.withCredentials = url.startsWith(PROTECTED_MEDIA);\n  },\n};\n\ntype Mode = \"live\" | \"ondemand\" | \"news\";\ntype PlayState = \"stopped\" | \"buffering\" | \"playing\" | \"paused\";\ntype NewsProvider = \"srf\" | \"bbc\" | \"dlf\" | \"rfi\";\n\ntype CueFade = {\n  cueIn: number;\n  cueOut: number;\n  fadeIn: number;\n  fadeOut: number;\n};\n\nconst getLiveUrl = (): string => {\n  return `${settings.STREAM_ENDPOINTS.hls}?${Date.now()}`;\n};\n\nconst getNewsUrl = (provider: NewsProvider): string => {\n  return `${settings.STREAM_ENDPOINTS.news}${provider}.m3u8?${Date.now()}`;\n};\n\nconst getOnDemandUrl = (uid: string): string => {\n  return `${settings.MEDIA_ENDPOINTS.hls}${uid}/hls/manifest.m3u8`;\n};\n\nconst getStepVolume = (start: number, end: number, time: number, reverse = false) => {\n  const duration = end - start;\n  const position = time - start;\n  const vol = position / duration;\n  const vol2 = reverse ? 1 - vol : vol;\n  return round(Math.sin((vol2 * Math.PI) / 2), 3);\n  // return vol ? Math.log(vol * 100) / Math.log(100) : 0;\n};\n\nclass HlsPlayer {\n  static instance: HlsPlayer;\n  private audio: HTMLAudioElement;\n  private newsAudio: HTMLAudioElement;\n  private hls: null | Hls;\n\n  private mediaUid: null | string = null;\n\n  public duration = 0;\n  public currentTime = 0;\n\n  public mode: Mode = \"live\";\n  public newsProvider: null | NewsProvider = null;\n  public playState: PlayState = \"stopped\";\n\n  private cueIn = 0;\n  private cueOut = 0;\n  private fadeIn = 0;\n  private fadeOut = 0;\n\n  private fadeActive = false;\n\n  private volume = 1;\n  public baseVolume = 1; // user-controllable volume\n  public maxBandwidth = 200000; // user-controllable bandwidth\n\n  // actions from pinia store / composables need to be mapped in the constructor\n  // as they are not ready earlier\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  setPlayerState = async (state: StorePlayerState): Promise<void> => {};\n\n  analyser: undefined | AudioAnalyser;\n\n  private debugData = {};\n\n  private constructor() {\n    const audio = document.createElement(\"audio\");\n    const newsAudio = document.createElement(\"audio\");\n\n    const { isSupported: wakeLockIsSupported, request: wakeLockRequest } = useWakeLock();\n\n    const { isWeb, isAndroid, isSafari } = useDevice();\n\n    if (!isWeb) {\n      log.info(\"HlsPlayer only available in web-mode\");\n      this.audio = audio;\n      this.newsAudio = newsAudio;\n      this.hls = null;\n      return;\n    }\n\n    // const nativeHlsSupported = isAndroid\n    //   ? false\n    //   : !!audio.canPlayType(\"application/vnd.apple.mpegurl\");\n\n    const nativeHlsSupported = !isSafari\n      ? false\n      : !!audio.canPlayType(\"application/vnd.apple.mpegurl\");\n\n    const hlsSupported = Hls.isSupported();\n\n    log.debug(\"nativeHlsSupported\", nativeHlsSupported);\n    log.debug(\"hlsSupported\", hlsSupported);\n\n    if (wakeLockIsSupported.value) {\n      log.debug(\"wakeLock requested\", wakeLockIsSupported.value);\n      wakeLockRequest(\"screen\").then(() => {\n        log.debug(\"wakeLock acquired\");\n      });\n    }\n\n    if (isAndroid) {\n      const ctx = new window.AudioContext();\n      const osc = ctx.createOscillator();\n      const gain = ctx.createGain();\n\n      gain.gain.value = 0;\n\n      osc.connect(gain);\n      gain.connect(ctx.destination);\n\n      osc.start();\n    }\n\n    const hls = nativeHlsSupported ? null : new Hls(hlsConfig);\n\n    // NOTE: without setting this explicitly audio does not work vor chrome >= 141\n    if (!nativeHlsSupported) {\n      audio.crossOrigin = \"anonymous\";\n    }\n\n    this.setupAudioEvents(audio);\n\n    if (hls) {\n      this.setupHlsEvents(hls);\n      hls.attachMedia(audio);\n    }\n\n    this.audio = audio;\n    this.newsAudio = newsAudio;\n    this.hls = hls;\n\n    this.connectStore();\n    this.connectSettings();\n\n    setInterval(async () => {\n      await this.syncStateToStore();\n    }, 5000);\n\n    setInterval(async () => {\n      await this.syncDebugDataToStore();\n    }, 1000);\n  }\n\n  public static getInstance(): HlsPlayer {\n    if (!HlsPlayer.instance) {\n      HlsPlayer.instance = new HlsPlayer();\n    }\n    return HlsPlayer.instance;\n  }\n\n  private setupAudioEvents(audio: HTMLAudioElement) {\n    // audio.addEventListener(\"audioprocess\", (e: Event) => log.debug(\"audioprocess\", e))\n    // audio.addEventListener(\"canplay\", (e: Event) => log.debug(\"canplay\", e))\n    // audio.addEventListener(\"canplaythrough\", (e: Event) => log.debug(\"canplaythrough\", e))\n    // audio.addEventListener(\"complete\", (e: Event) => log.debug(\"complete\", e))\n    // audio.addEventListener(\"durationchange\", (e: Event) => log.debug(\"durationchange\", e))\n    // audio.addEventListener(\"emptied\", (e: Event) => log.debug(\"emptied\", e))\n    // audio.addEventListener(\"ended\", (e: Event) => log.debug(\"ended\", e))\n    // audio.addEventListener(\"loadeddata\", (e: Event) => log.debug(\"loadeddata\", e))\n    // audio.addEventListener(\"loadedmetadata\", (e: Event) => log.debug(\"loadedmetadata\", e))\n    // audio.addEventListener(\"pause\", (e: Event) => log.debug(\"pause\", e))\n    // audio.addEventListener(\"play\", (e: Event) => log.debug(\"play\", e))\n    // audio.addEventListener(\"playing\", (e: Event) => log.debug(\"playing\", e))\n    // audio.addEventListener(\"seeked\", (e: Event) => log.debug(\"seeked\", e))\n    // audio.addEventListener(\"seeking\", (e: Event) => log.debug(\"seeking\", e))\n    // audio.addEventListener(\"stalled\", (e: Event) => log.debug(\"stalled\", e))\n    // audio.addEventListener(\"suspend\", (e: Event) => log.debug(\"suspend\", e))\n    // audio.addEventListener(\"timeupdate\", (e: Event) => log.debug(\"stalled\", e))\n\n    // map audio element events to \"internal\" states\n    audio.addEventListener(\"waiting\", () => this.setPlayState(\"buffering\"));\n    audio.addEventListener(\"playing\", () => this.setPlayState(\"playing\"));\n    audio.addEventListener(\"pause\", () => this.setPlayState(\"paused\"));\n    audio.addEventListener(\"emptied\", () => this.setPlayState(\"paused\"));\n    audio.addEventListener(\"ended\", () => this.setPlayState(\"stopped\"));\n\n    audio.addEventListener(\"play\", () => this.connectAnalyser());\n\n    audio.onended = async (): Promise<void> => {\n      await this.playNext();\n    };\n\n    audio.addEventListener(\"durationchange\", () => {\n      this.duration = audio.duration;\n    });\n\n    audio.addEventListener(\"timeupdate\", async () => {\n      // log.debug(\"timeupdate\", e);\n      this.currentTime = audio.currentTime;\n\n      await this.syncStateToStore();\n    });\n\n    // handler for cue & fades\n    audio.addEventListener(\"timeupdate\", this.onTimeupdate.bind(this), false);\n  }\n\n  private setupHlsEvents(hls: Hls) {\n    hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n      // this.attached = true;\n      log.debug(\"HLS:MEDIA_ATTACHED\");\n    });\n\n    // hls.on(Hls.Events.MANIFEST_PARSED, (event, data) => {\n    //   log.debug(event, data.levels);\n    // });\n\n    hls.on(Hls.Events.ERROR, (event, data) => {\n      log.debug(event, data);\n    });\n  }\n\n  // private setPlayState(playState: PlayState): void {\n  //   log.debug(\"player setPlayState:\", playState);\n  //   this.playState = playState;\n  //   this.syncStateToStore().then(() => {});\n  // }\n\n  private setPlayState = debounce(async (playState: PlayState): Promise<void> => {\n    this.playState = playState;\n    await this.syncStateToStore();\n  }, 200);\n\n  private setCueFade(cueFade: CueFade): void {\n    // log.debug(\"setCueFade\", cueFade);\n    this.cueIn = cueFade.cueIn;\n    this.cueOut = cueFade.cueOut;\n    this.fadeIn = cueFade.fadeIn;\n    this.fadeOut = cueFade.fadeOut;\n  }\n\n  private resetCueFade(): void {\n    // log.debug(\"resetCueFade\");\n    this.cueIn = 0;\n    this.cueOut = 0;\n    this.fadeIn = 0;\n    this.fadeOut = 0;\n  }\n\n  /*\n  set combined volume by given value and configured `baseVolume`\n  note: to control the volume from \"outside\" use `setBaseVolume`\n  */\n  private setVolume(value?: number): void {\n    this.volume = value !== undefined ? value : this.volume;\n    this.audio.volume = Math.min(this.volume * this.baseVolume, 1);\n  }\n\n  /*\n  handle cue-points and fade volumes\n  */\n  private async onTimeupdate(): Promise<void> {\n    if (this.fadeActive) {\n      // skip reset logic if fade is active\n      return;\n    }\n\n    if (this.mode === \"live\" || this.mode === \"news\") {\n      if (this.volume < 1) {\n        this.setVolume(1);\n      }\n      return;\n    }\n\n    const time = this.currentTime;\n    const startTime = this.cueIn;\n    const endTime = this.duration - this.cueOut;\n    const fadeInEndTime = this.fadeIn ? startTime + this.fadeIn : 0;\n    const fadeOutStartTime = this.fadeOut ? endTime - this.fadeOut : endTime;\n\n    // check if time is after cue-out point\n    // if no cue-out is set this is handled by the audio `ended` event\n    if (this.cueOut && time > endTime) {\n      await this.pause();\n      await this.playNext();\n    }\n\n    if (fadeInEndTime && startTime < time && time < fadeInEndTime) {\n      // check if fade-in should occur\n      const stepVolume = getStepVolume(startTime, fadeInEndTime, time);\n      this.setVolume(stepVolume);\n    } else if (fadeOutStartTime && endTime > time && time > fadeOutStartTime) {\n      // check if fade-out should occur\n      const stepVolume = getStepVolume(fadeOutStartTime, endTime, time, true);\n      this.setVolume(stepVolume);\n    } else if (time <= startTime) {\n      // ensure 0 volume in case play position is before cue-in\n      this.setVolume(0);\n    } else if (this.volume < 1 && time > fadeInEndTime && time < fadeOutStartTime) {\n      // ensure volume is set to max\n      this.setVolume(1);\n    }\n  }\n\n  public async playLive(): Promise<void> {\n    const url = getLiveUrl();\n    log.debug(\"playLive\", url);\n\n    await this.setPlayState(\"buffering\");\n\n    this.mode = \"live\";\n    this.mediaUid = null;\n\n    if (this.hls) {\n      this.hls.loadSource(url);\n    } else {\n      this.audio.src = url;\n    }\n\n    this.resetCueFade();\n    await this.audio.play();\n  }\n\n  public async volFadeOut(duration = 1000, callback: () => Promise<void>): Promise<void> {\n    const step = 0.05;\n    const interval = duration / (1 / step);\n\n    log.debug(\"volFadeOut\", step, interval);\n\n    this.fadeActive = true;\n\n    const fadeAudio = setInterval(async () => {\n      if (!this.fadeActive) {\n        clearInterval(fadeAudio);\n        return;\n      }\n\n      if (this.volume > step) {\n        this.setVolume(this.volume - step);\n      } else {\n        this.setVolume(0);\n        this.fadeActive = false;\n        clearInterval(fadeAudio);\n        await callback();\n      }\n    }, interval);\n  }\n\n  public async volFadeIn(duration = 1000): Promise<void> {\n    const step = 0.05;\n    const interval = duration / (1 / step);\n\n    this.fadeActive = true;\n    this.setVolume(0);\n\n    const fadeAudio = setInterval(() => {\n      if (!this.fadeActive) {\n        clearInterval(fadeAudio);\n        return;\n      }\n\n      if (this.volume < 1) {\n        this.setVolume(this.volume + step);\n      } else {\n        this.setVolume(1);\n        this.fadeActive = false;\n        clearInterval(fadeAudio);\n      }\n    }, interval);\n  }\n\n  public async playUid(uid: string, estimatedDuration?: number, cueFade?: CueFade): Promise<void> {\n    // log.debug(\"playUid:\", uid, cueFade);\n    if (estimatedDuration !== undefined) {\n      this.duration = estimatedDuration;\n    }\n    if (cueFade) {\n      this.setCueFade(cueFade);\n    } else {\n      this.resetCueFade();\n    }\n    // const url = `http://local.obr-next:3000/encoded/${uid}/hls/manifest.m3u8`;\n    const url = getOnDemandUrl(uid);\n    this.mode = \"ondemand\";\n    if (uid !== this.mediaUid || this.playState === \"buffering\") {\n      this.setPlayState(\"buffering\");\n      if (this.fadeIn) {\n        log.debug(\"fade in: set volume to 0\");\n        this.setVolume(0);\n      }\n      if (this.hls) {\n        await this.hls.loadSource(url);\n      } else {\n        this.audio.src = url;\n      }\n      this.currentTime = this.cueIn;\n      this.audio.currentTime = this.currentTime;\n      log.debug(\"seek to:\", this.currentTime);\n    }\n    this.mediaUid = uid;\n    try {\n      await this.audio.play();\n    } catch (e) {\n      log.warn(\"unable to play. try again in 1s\", e);\n      setTimeout(async () => {\n        await this.audio.play();\n      }, 1000);\n    }\n  }\n\n  public async playNews(provider: NewsProvider): Promise<void> {\n    const url = getNewsUrl(provider);\n    log.debug(\"playNews\", provider, url);\n\n    if (![\"playing\", \"buffering\"].includes(this.playState)) {\n      log.debug(\"playNews:skip - not playing or buffering\");\n      return;\n    }\n\n    await this.volFadeOut(1000, async () => {\n      this.audio.pause();\n\n      await this.setPlayState(\"buffering\");\n\n      this.mode = \"news\";\n      this.newsProvider = provider;\n      this.mediaUid = null;\n\n      if (this.hls) {\n        this.hls.loadSource(url);\n      } else {\n        this.audio.src = url;\n      }\n\n      this.resetCueFade();\n      await this.audio.play();\n    });\n  }\n\n  public async endPlayNews(provider?: NewsProvider): Promise<void> {\n    log.debug(\"endPlayNews\", provider);\n\n    if (this.mode !== \"news\" || ![\"playing\", \"buffering\"].includes(this.playState)) {\n      log.debug(\"endPlayNews:skip - not in news mode and / or not playing\");\n      return;\n    }\n\n    // NOTE: do we need this? it should already be handled\n    if (provider && provider !== this.newsProvider) {\n      log.debug(\"endPlayNews:skip - provider mismatch\");\n      return;\n    }\n\n    this.newsProvider = null;\n\n    this.setVolume(0);\n    await this.playNext();\n    await this.volFadeIn(2000);\n  }\n\n  public async pause(): Promise<void> {\n    log.debug(\"pause\");\n    this.audio.pause();\n    if (this.mode === \"live\") {\n      if (this.hls) {\n        this.hls.stopLoad();\n      } else {\n        this.audio.src = \"\";\n      }\n    }\n    // this.setPlayState(\"paused\");\n  }\n\n  public async resume(): Promise<void> {\n    log.debug(\"resume\");\n    if (this.mode === \"live\") {\n      await this.playLive();\n    } else {\n      await this.audio.play();\n    }\n  }\n\n  public async seek(p: number): Promise<void> {\n    if (this.mode === \"live\") {\n      log.debug(\"seek disabled in live mode\");\n      return;\n    }\n    log.debug(\"seek\", p);\n    const time = this.duration * p;\n    this.audio.currentTime = Math.max(time, this.cueIn);\n    await this.audio.play();\n  }\n\n  public setBaseVolume(value: number): void {\n    this.baseVolume = value;\n    this.setVolume();\n  }\n\n  public setMaxBandwidth(value: number): void {\n    log.debug(\"setMaxBandwidth\", value);\n    this.maxBandwidth = value;\n    // NOTE: manual bandwidth capping is not supported in HLS.js?\n    // hlsPlayer.hls.autoLevelCapping = 2\n  }\n\n  private async playNext(): Promise<void> {\n    const { playNext } = useQueueControls();\n    await playNext();\n  }\n\n  private connectAnalyser(): void {\n    if (!this.analyser) {\n      this.analyser = createAudioAnalyser(this.audio);\n    }\n  }\n\n  private connectStore(): void {\n    // connections to pinia store actions\n    log.debug(\"connectStore\");\n    const { setPlayerState } = usePlayerStore();\n    this.setPlayerState = setPlayerState;\n  }\n\n  private connectSettings(): void {\n    // connections to (reactive) user settings\n    const { baseVolume, maxBandwidth } = useSettings();\n    this.setBaseVolume(baseVolume.value);\n    this.setMaxBandwidth(maxBandwidth.value);\n    watch(\n      () => baseVolume.value,\n      (value) => this.setBaseVolume(value)\n    );\n    watch(\n      () => maxBandwidth.value,\n      (value) => this.setMaxBandwidth(value)\n    );\n  }\n\n  private async syncStateToStore(): Promise<void> {\n    const { mode, playState, duration, currentTime, newsProvider, hls } = this;\n\n    const state = {\n      mode,\n      playState,\n      duration: duration === Infinity ? 0 : duration,\n      currentTime,\n      newsProvider,\n      //\n      liveLatency: round(hls?.latency ?? -1, 0),\n      bandwidth: round(hls?.bandwidthEstimate ?? -1, 0),\n    };\n    await this.setPlayerState(state);\n  }\n\n  private async syncDebugDataToStore(): Promise<void> {\n    if (!this.hls) {\n      return;\n    }\n\n    const { hls, mode } = this;\n\n    const { currentLevel, maxAutoLevel, bandwidthEstimate, latency, drift, mainForwardBufferInfo } =\n      hls;\n\n    const data = {\n      mode,\n      currentLevel,\n      maxAutoLevel,\n      bandwidthEstimate,\n      latency,\n      drift,\n      mainForwardBufferInfo,\n    };\n\n    if (!isEqual(data, this.debugData)) {\n      const { setPlayerDebugData } = usePlayerStore();\n      await setPlayerDebugData(data);\n    }\n    this.debugData = data;\n  }\n}\n\nexport type { CueFade, Mode, NewsProvider, PlayState };\nexport { HlsPlayer };\n","import { watch } from \"vue\";\n\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\nimport { useQueueControls } from \"@/composables/queue\";\nimport { getImageSrc } from \"@/utils/image\";\n\nclass MediaSessionHandler {\n  session: MediaSession | null;\n\n  pause = async (): Promise<void> => {};\n  resume = async (): Promise<void> => {};\n  playNext = async (): Promise<void> => {};\n  playPrevious = async (): Promise<void> => {};\n\n  constructor() {\n    const { media, isLive } = usePlayerState();\n    const { pause: pauseFn, resume: resumeFn } = usePlayerControls();\n    const { playNext: playNextFn, playPrevious: playPreviousFn } = useQueueControls();\n    this.pause = pauseFn;\n    this.resume = resumeFn;\n    this.playNext = playNextFn;\n    this.playPrevious = playPreviousFn;\n\n    if (\"mediaSession\" in navigator) {\n      this.session = navigator.mediaSession;\n      this.setupBindings(isLive.value);\n      watch(\n        () => media.value,\n        (value) => {\n          this.setMetadata(value);\n          this.setupBindings(isLive.value);\n        }\n      );\n    } else {\n      this.session = null;\n    }\n  }\n\n  setupBindings(isLive: boolean) {\n    if (!this.session) {\n      return;\n    }\n\n    if (isLive) {\n      this.session.setActionHandler(\"pause\", this.pause);\n      this.session.setActionHandler(\"play\", this.resume);\n      this.session.setActionHandler(\"previoustrack\", null);\n      this.session.setActionHandler(\"nexttrack\", null);\n    } else {\n      this.session.setActionHandler(\"pause\", this.pause);\n      this.session.setActionHandler(\"play\", this.resume);\n      this.session.setActionHandler(\"previoustrack\", this.playPrevious);\n      this.session.setActionHandler(\"nexttrack\", this.playNext);\n    }\n  }\n\n  setMetadata(media: any) {\n    if (!(media && this.session)) {\n      return;\n    }\n\n    // TODO: implement properly\n    const release = media.releases.length ? media.releases[0] : null;\n    // const artwork: { src: string | null; sizes: string; type: string }[] = [];\n    const artwork: MediaImage[] = [];\n\n    if (release && release.image) {\n      const sizes = [96, 256];\n      sizes.forEach((size) => {\n        artwork.push({\n          src: getImageSrc(release.image, size) || \"\",\n          sizes: `${size}x${size}`,\n          type: \"image/png\",\n        });\n      });\n    }\n    // console.debug(\"artwork\", artwork);\n    this.session.metadata = new MediaMetadata({\n      title: media.name,\n      artist: media.artistDisplay,\n      album: release ? release.name : \"-\",\n      artwork,\n    });\n  }\n}\n\nexport default function () {\n  return new MediaSessionHandler();\n}\n","import { APIClient } from \"@/api/client\";\nimport settings from \"@/settings\";\n\nconst STATS_ENDPOINT = `${settings.API_BASE_URL}stats/`;\n\nasync function createPlayerEvents(events: Array<object>) {\n  const url = `${STATS_ENDPOINT}ingest/player-events/`;\n  const payload = {\n    events: [...events],\n  };\n  return await APIClient.put(url, payload);\n}\n\nasync function sendHeartbeat(payload: object) {\n  const url = `${STATS_ENDPOINT}heartbeat/`;\n  return await APIClient.put(url, payload);\n}\n\nexport { createPlayerEvents, sendHeartbeat };\n","import { computed, watch } from \"vue\";\nimport { debounce, isEqual } from \"lodash-es\";\n\nimport { sendPlayerEvent } from \"@/analytics/event\";\nimport { createPlayerEvents } from \"@/api/stats\";\nimport { usePlayerState } from \"@/composables/player\";\n\nexport interface Event {\n  state: string;\n  objKey: string;\n  objName: string;\n  source: string;\n}\n\nconst createAnalyticsEvent = (event: Event) => {\n  sendPlayerEvent({\n    state: event.state,\n    source: event.source,\n    obj_key: event.objKey,\n    obj_name: event.objName,\n  });\n};\n\n// NOTE: this is a quick-n-dirty hack. we need another way to handle news objects\nconst NEWS_OBJ_KEYS = {\n  srf: \"catalog.media:F00000F1\",\n  rfi: \"catalog.media:F00000F2\",\n};\n\nclass EventHandler {\n  constructor() {\n    const { media, isLive, isNews, playState, newsProvider } = usePlayerState();\n    let lastPlayState: string | undefined = undefined;\n    const objKey = computed(() => {\n      if (isNews.value) {\n        return NEWS_OBJ_KEYS[newsProvider.value as keyof typeof NEWS_OBJ_KEYS] || null;\n      }\n      return media.value ? `${media.value.ct}:${media.value.uid}` : null;\n    });\n    const combinedState = computed(() => {\n      return {\n        state: playState.value,\n        objKey: objKey.value,\n        objName: media.value?.name,\n        source: isNews.value ? \"news\" : isLive.value ? \"live\" : \"on-demand\",\n      };\n    });\n    const addEvent = debounce(async (event) => {\n      if (!event.objKey) {\n        return;\n      }\n\n      // NOTE: ignore repeating pause & stop\n\n      let ignoreEvent = false;\n\n      if (lastPlayState === undefined) {\n        ignoreEvent = true;\n      }\n\n      if (event.state === \"stopped\") {\n        ignoreEvent = true;\n      }\n\n      if (lastPlayState === \"paused\" && event.state === \"paused\") {\n        ignoreEvent = true;\n      }\n\n      console.debug(\"addEvent\", `skip: ${ignoreEvent}`, `last: ${lastPlayState}`, event);\n\n      if (!ignoreEvent) {\n        createAnalyticsEvent(event);\n        await createPlayerEvents([event]);\n      }\n\n      lastPlayState = event.state;\n    }, 2000);\n    watch(combinedState, (newValue, oldValue) => {\n      if (isEqual(newValue, oldValue)) {\n        return;\n      }\n      const event = {\n        ...newValue,\n        ts: new Date().getTime(),\n      };\n      addEvent(event);\n    });\n  }\n}\n\nexport default function () {\n  return new EventHandler();\n}\n","import { useDocumentVisibility, useIntervalFn } from \"@vueuse/core\";\n\nimport { sendHeartbeat } from \"@/api/stats\";\nimport { usePlayerState } from \"@/composables/player\";\n\nconst HEARTBEAT_INTERVAL = 60 * 1000;\n\nclass HeartbeatHandler {\n  constructor() {\n    useIntervalFn(async () => {\n      await this.send();\n    }, HEARTBEAT_INTERVAL);\n    this.send().then();\n  }\n\n  async send() {\n    const visibility = useDocumentVisibility();\n    const { mode, playState } = usePlayerState();\n    const payload = {\n      inForeground: visibility.value === \"visible\",\n      playerSource: mode.value,\n      playerState: playState.value,\n    };\n    await sendHeartbeat(payload);\n  }\n}\n\nexport default function () {\n  return new HeartbeatHandler();\n}\n","import { useIntervalFn } from \"@vueuse/core\";\n\nimport { useDevice } from \"@/composables/device\";\nimport { useScheduleStore } from \"@/stores/schedule\";\n\nclass Schedule {\n  constructor() {\n    const interval = 61 * 1000;\n    const { loadSchedule } = useScheduleStore();\n    const { isWeb } = useDevice();\n\n    if (isWeb) {\n      useIntervalFn(\n        async () => {\n          await loadSchedule();\n        },\n        interval,\n        { immediateCallback: true }\n      );\n    }\n  }\n}\n\nexport default function () {\n  return new Schedule();\n}\n","import { useWindowSize, watchDebounced } from \"@vueuse/core\";\nimport { storeToRefs } from \"pinia\";\n\nimport settings from \"@/settings\";\nimport { useUiStore } from \"@/stores/ui\";\nimport { getAppTheme, getContrastColor } from \"@/utils/color\";\n\nconst setDocumentThemeColor = async (color: Array<number>) => {\n  const el: HTMLElement | null = document.getElementById(\"theme-color\");\n  if (el instanceof HTMLMetaElement) {\n    el.content = `rgb(${color.join(\" \")})`;\n  }\n};\n\nconst setAppTheme = async (color: Array<number>) => {\n  const theme = getAppTheme(color);\n  await window.appBridge.send(\"ui:setTheme\", { theme });\n};\n\nconst setDocumentPrimaryColor = (color: Array<number>) => {\n  const bg = color;\n  const fg = getContrastColor(bg);\n  const fgInverse = getContrastColor(fg);\n  const { style } = document.body;\n  // console.debug(\"colors\", { bg, fg, fgInverse });\n  style.setProperty(\"--c-live-bg\", bg.join(\" \"));\n  style.setProperty(\"--c-live-fg\", fg.join(\" \"));\n  style.setProperty(\"--c-live-fg-inverse\", fgInverse.join(\" \"));\n  setTimeout(async () => {\n    await setDocumentThemeColor(color);\n  }, 50);\n  setTimeout(async () => {\n    await setAppTheme(color);\n  }, 50);\n};\n\nclass UIStateHandler {\n  constructor() {\n    // set initial color (passed via django template / settings)\n    const color = settings.COLOR;\n    if (color) {\n      setDocumentPrimaryColor(color);\n      setDocumentThemeColor(color);\n    }\n    const { primaryColor } = storeToRefs(useUiStore());\n    watchDebounced(primaryColor, setDocumentPrimaryColor, { debounce: 200 });\n\n    // window / viewport dimensions\n    const { width: vpWidth, height: vpHeight } = useWindowSize();\n    const { setWindowSize } = useUiStore();\n    watchDebounced([vpWidth, vpHeight], setWindowSize, { debounce: 50 });\n\n    // handle document leave / \"come-back\"\n    /*\n    const documentVisibility = useDocumentVisibility();\n    watch(\n      () => documentVisibility.value,\n      (visibility) => {\n        console.debug(\"UI - document visible\", visibility);\n      }\n    );\n    */\n  }\n}\n\nexport default function () {\n  return new UIStateHandler();\n}\n","import type { App } from \"vue\";\nimport type { AxiosError } from \"axios\";\n\nimport { loginByGoogleOneTap } from \"@/api/account\";\nimport { useAccount } from \"@/composables/account\";\nimport { useDevice } from \"@/composables/device\";\nimport { useNews } from \"@/composables/news\";\nimport { useNotification } from \"@/composables/notification\";\nimport type { NewsProvider } from \"@/player/hlsPlayer\";\nimport settings from \"@/settings\";\n\nconst SSE_PUBLISHER_URL = settings.SSE_PUBLISHER_URL;\nconst GOOGLE_ACCOUNTS_CLIENT_ID = settings.GOOGLE_ACCOUNTS_CLIENT_ID;\n\ninterface NewsMessage {\n  ts: number;\n  cmd: \"start\" | \"stop\";\n  provider: NewsProvider;\n}\n\nexport async function init(app: App): Promise<void> {\n  /*\n  NOTE: we run some random init steps here. likely this should be\n  refactored at some point of time\n  */\n\n  console.debug(\"init\", app);\n\n  /*\n  NOTE: SSE-handler (news)\n  */\n  const { isDesktop } = useDevice();\n  const { selectedProvider } = useNews();\n  const { playNews, endPlayNews } = useNews();\n\n  if (isDesktop) {\n    const sse = new EventSource(SSE_PUBLISHER_URL);\n\n    sse.addEventListener(\"news\", async (e): Promise<void> => {\n      const message: NewsMessage = JSON.parse(e.data) as NewsMessage;\n\n      console.debug(\"SSE-event\", message);\n\n      const { ts, cmd, provider } = message;\n\n      const delay = (ts + 4) * 1000 - Date.now();\n\n      if (cmd === \"start\") {\n        if (selectedProvider.value?.key !== provider) {\n          return;\n        }\n\n        setTimeout(async () => {\n          await playNews(provider);\n        }, delay);\n      }\n\n      if (cmd === \"stop\") {\n        if (selectedProvider.value?.key !== provider) {\n          return;\n        }\n\n        setTimeout(async () => {\n          await endPlayNews();\n        }, delay);\n      }\n    });\n  }\n\n  /*\n  NOTE: google one-tap sign-in\n  */\n  window.addEventListener(\"load\", async () => {\n    if (isDesktop && google?.accounts) {\n      const { loadUser, user } = useAccount();\n      const { notify } = useNotification();\n\n      google.accounts.id.initialize({\n        client_id: GOOGLE_ACCOUNTS_CLIENT_ID,\n        auto_select: true,\n        cancel_on_tap_outside: false,\n        context: \"use\",\n        callback: async (response: object) => {\n          try {\n            await loginByGoogleOneTap(response.credential);\n            await loadUser();\n            await notify({\n              level: \"success\",\n              body: `logged in as ${user.value?.email}`,\n              ttl: 3,\n            });\n          } catch (err: unknown) {\n            const error = err as AxiosError;\n            const message = error.response?.data.message ?? \"Login error\";\n            await notify({\n              level: \"error\",\n              body: `login error: ${message}`,\n              ttl: 30,\n            });\n          }\n        },\n      });\n\n      if (!user.value) {\n        google.accounts.id.prompt();\n      }\n    }\n  });\n}\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\nimport type { Emitter } from \"mitt\";\n\nimport { AppBridge } from \"@/app-bridge/appBridge\";\nimport AuthSidebar from \"@/components/account/auth/AuthSidebar.vue\";\nimport CompatibilityNotice from \"@/components/browser-compatibility/CompatibilityNotice.vue\";\nimport CtaPresenter from \"@/components/cta/CtaPresenter.vue\";\nimport DonateCta from \"@/components/donation/DonateCta.vue\";\nimport DonatePanel from \"@/components/donation/DonatePanel.vue\";\nimport GeoblockNotice from \"@/components/geolocation/GeoblockNotice.vue\";\nimport CookieConsent from \"@/components/legal/CookieConsent.vue\";\nimport LegalLinks from \"@/components/legal/LegalLinks.vue\";\nimport GlobalSearch from \"@/components/navigation/GlobalSearch.vue\";\nimport Navigation from \"@/components/navigation/Navigation.vue\";\nimport SideMenu from \"@/components/navigation/SideMenu.vue\";\nimport Notifications from \"@/components/notification/Notifications.vue\";\nimport MobilePlayer from \"@/components/player/mobile/Player.vue\";\nimport Player from \"@/components/player/Player.vue\";\nimport Subscribe from \"@/components/subscription/Subscribe.vue\";\nimport ClaimVoucher from \"@/components/subscription/voucher/Claim.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport { useDevice } from \"@/composables/device\";\nimport type { EventBusEvents } from \"@/eventBus\";\nimport { HlsPlayer } from \"@/player/hlsPlayer\";\nimport createMediaSessionHandler from \"@/player/mediaSession\";\nimport settings from \"@/settings\";\nimport createEventHandler from \"@/stats/event\";\nimport createHeartbeatHandler from \"@/stats/heartbeat\";\nimport createAccountHandler from \"@/utils/account\";\nimport createScheduleHandler from \"@/utils/schedule\";\nimport createUIStateHandler from \"@/utils/ui\";\n\nimport { init } from \"./init\";\n\ndeclare global {\n  interface Window {\n    eventBus: Emitter<EventBusEvents>;\n    appBridge: AppBridge;\n    hlsPlayer: HlsPlayer;\n  }\n}\n\nexport default defineComponent({\n  name: \"App\",\n  components: {\n    Navigation,\n    SideMenu,\n    GlobalSearch,\n    Notifications,\n    AuthSidebar,\n    Subscribe,\n    GeoblockNotice,\n    Player,\n    MobilePlayer,\n    DonateCta,\n    DonatePanel,\n    CtaPresenter,\n    ClaimVoucher,\n    CookieConsent,\n    CompatibilityNotice,\n    LegalLinks,\n  },\n  setup() {\n    const { isApp, isWeb, isAndroid, isSmallScreen } = useDevice();\n\n    window.hlsPlayer = HlsPlayer.getInstance();\n    window.appBridge = AppBridge.getInstance();\n\n    if (isApp) {\n      console.debug(\"initialize: app-mode\");\n    }\n\n    if (isWeb) {\n      console.debug(\"initialize: web-mode\");\n      createEventHandler();\n      createMediaSessionHandler();\n      createScheduleHandler();\n    }\n\n    if (isAndroid && \"serviceWorker\" in navigator) {\n      console.debug(\"initialize: android-mode\");\n      navigator.serviceWorker\n        .register(\"/static/pwa/service-worker.js\")\n        .then(() => console.log(\"service worker: registered\"))\n        .catch((err) => console.log(\"service worker: registration failed:\", err));\n    }\n\n    createAccountHandler();\n    createUIStateHandler();\n    createHeartbeatHandler();\n\n    const { loadUser } = useAccount();\n    loadUser();\n\n    return {\n      isSmallScreen,\n      version: settings.VERSION,\n    };\n  },\n  async mounted() {\n    await init(this);\n  },\n});\n</script>\n\n<template>\n  <Navigation />\n  <SideMenu />\n  <GlobalSearch />\n  <Notifications />\n  <router-view v-slot=\"{ Component }\">\n    <keep-alive>\n      <component :is=\"Component\" />\n    </keep-alive>\n  </router-view>\n  <AuthSidebar />\n  <Subscribe />\n  <GeoblockNotice />\n  <ClaimVoucher />\n  <MobilePlayer v-if=\"isSmallScreen\" />\n  <Player v-else />\n  <LegalLinks />\n  <DonateCta />\n  <DonatePanel />\n  <CtaPresenter />\n  <CookieConsent />\n  <CompatibilityNotice />\n  <div v-show=\"false\" id=\"app-version\" :data-version=\"version\" v-text=\"version\" />\n</template>\n","const TooltipDirective = {\n  beforeMount(el: any, binding: any) {\n    // eslint-disable-next-line no-param-reassign\n    el.style.setProperty(\"--tooltip-text\", `\"${binding.value}\"`);\n    // eslint-disable-next-line no-param-reassign\n    el.classList.add(\"has-tooltip\");\n  },\n};\n\nexport { TooltipDirective };\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nconst BASE_SIZE = 48;\n\nexport default defineComponent({\n  props: {\n    size: {\n      type: Number,\n      default: 24,\n    },\n    color: {\n      type: String,\n      default: \"rgb(var(--c-page-fg) / 100%)\",\n    },\n  },\n  setup(props) {\n    const style = computed(() => {\n      return {\n        fill: props.color,\n        stroke: \"none\",\n        strokeWidth: (2 * BASE_SIZE) / props.size,\n        strokeMiterlimit: 10,\n        transform: `scale(${props.size / BASE_SIZE})`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 60 60\"\n    :style=\"style\"\n  >\n    <path\n      d=\"M37.7,29.9h-5v18h-7.5v-18h-3.6v-6.4h3.5v-4.1c0-3,1.4-7.5,7.5-7.5h5.5V18h-4c-0.8,0-1.6,0.6-1.6,1.4\n\tc0,0.1,0,0.2,0,0.3v3.7h5.7L37.7,29.9z\"\n    />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nconst BASE_SIZE = 60;\n\nexport default defineComponent({\n  props: {\n    size: {\n      type: Number,\n      default: 24,\n    },\n    color: {\n      type: String,\n      default: \"rgb(var(--c-page-fg) / 100%)\",\n    },\n  },\n  setup(props) {\n    const style = computed(() => {\n      return {\n        fill: props.color,\n        stroke: \"none\",\n        strokeWidth: (2 * BASE_SIZE) / props.size,\n        strokeMiterlimit: 10,\n        transform: `scale(${props.size / BASE_SIZE})`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"60px\"\n    width=\"60px\"\n    viewBox=\"0 0 60 60\"\n    :style=\"style\"\n  >\n    <!-- eslint-disable max-len -->\n    <path\n      d=\"M25.8,46c0,0,0-2.7,0-4.9c-5.8,1.3-7-2.5-7-2.5c-1-2.4-2.3-3-2.3-3c-1.9-1.3,0.1-1.3,0.1-1.3\n\tc2,0.1,3.2,2.2,3.2,2.2c1.8,3.2,4.8,2.3,6,1.7c0.2-1.3,0.8-2.3,1.3-2.8c-4.6-0.5-9.5-2.3-9.5-10.2c0-2.3,0.9-4.1,2.2-5.6\n\tc-0.2-0.5-1-2.7,0.2-5.5c0,0,1.7-0.5,5.7,2.2c1.6-0.4,3.4-0.6,5.2-0.8c1.7,0,3.6,0.2,5.2,0.8c4-2.7,5.7-2.2,5.7-2.2\n\tc1.2,2.9,0.4,4.9,0.2,5.5c1.3,1.5,2.2,3.3,2.2,5.6c0,8-4.8,9.8-9.5,10.2c0.8,0.6,1.4,1.9,1.4,3.9c0,2.3,0,6.8,0,6.8H25.8z\"\n    />\n    <!-- eslint-enable max-len -->\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nconst BASE_SIZE = 48;\n\nexport default defineComponent({\n  props: {\n    size: {\n      type: Number,\n      default: 24,\n    },\n    color: {\n      type: String,\n      default: \"rgb(var(--c-page-fg) / 100%)\",\n    },\n  },\n  setup(props) {\n    const style = computed(() => {\n      return {\n        fill: props.color,\n        stroke: \"none\",\n        strokeWidth: (2 * BASE_SIZE) / props.size,\n        strokeMiterlimit: 10,\n        transform: `scale(${props.size / BASE_SIZE})`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 60 60\"\n    :style=\"style\"\n  >\n    <path\n      d=\"M30.1,25.2c-2.6-0.1-4.8,2-4.9,4.6s2,4.8,4.6,4.9c2.6,0.1,4.8-2,4.9-4.6C34.8,27.5,32.7,25.3,30.1,25.2z\"\n    />\n    <path\n      d=\"M38.4,15H21.6C18,15,15,18,15,21.6v16.8c0,3.6,3,6.6,6.6,6.6h16.8c3.6,0,6.6-3,6.6-6.6V21.6\n\tC45,18,42,15,38.4,15z M29.8,37.7c-4.3-0.1-7.6-3.7-7.5-8c0.1-4.3,3.7-7.6,8-7.5c4.3,0.1,7.6,3.7,7.5,8\n\tC37.6,34.5,34.1,37.9,29.8,37.7z M38.8,23.1c-1,0-1.9-0.8-1.9-1.9c0-1,0.8-1.9,1.9-1.9s1.9,0.8,1.9,1.9c0,0,0,0,0,0\n\tC40.7,22.3,39.8,23.1,38.8,23.1C38.8,23.1,38.8,23.1,38.8,23.1L38.8,23.1z\"\n    />\n  </svg>\n</template>\n","<script type=\"ts\">\nimport { computed, defineComponent } from 'vue';\n\nimport IconFacebook from \"@/components/ui/icon/brand/IconFacebook.vue\";\nimport IconGithub from \"@/components/ui/icon/brand/IconGithub.vue\";\nimport IconInstagram from \"@/components/ui/icon/brand/IconInstagram.vue\";\n\nexport default defineComponent({\n  components: {\n    IconInstagram,\n    IconFacebook,\n    IconGithub,\n  },\n  setup() {\n    const links = computed(() => {\n      return {\n        instagram: \"https://www.instagram.com/openbroadcastradio/\",\n        facebook: \"https://www.facebook.com/OpenBroadcast/\",\n        github: \"https://github.com/digris/obr-web\",\n      };\n    });\n    return {\n      links,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"social-media-links\">\n    <div class=\"links\">\n      <a class=\"link link--instagram\" target=\"_blank\" :href=\"links.instagram\">\n        <IconInstagram :size=\"48\" color=\"rgb(var(--c-light))\" />\n      </a>\n      <a class=\"link link--facebook\" target=\"_blank\" :href=\"links.facebook\">\n        <IconFacebook :size=\"48\" color=\"rgb(var(--c-light))\" />\n      </a>\n      <a class=\"link link--github\" target=\"_blank\" :href=\"links.github\">\n        <IconGithub :size=\"48\" color=\"rgb(var(--c-light))\" />\n      </a>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.social-media-links {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 2rem;\n\n  .links {\n    display: flex;\n\n    .link {\n      height: 56px;\n      width: 56px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      margin: 0 0.5rem;\n      color: rgb(var(--c-light));\n      background: rgb(var(--c-dark));\n      border-radius: 28px;\n\n      &:hover {\n        background: rgb(var(--c-dark) / 75%);\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport SocialMediaLinks from \"@/components/social-media/SocialMediaLinks.vue\";\n\nexport default defineComponent({\n  components: {\n    SocialMediaLinks,\n  },\n  props: {\n    title: {\n      type: String,\n      default: \"\",\n    },\n    appendixVisible: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  setup(props, { slots }) {\n    const hasLead = computed(() => !!slots.lead);\n    const hasBody = computed(() => !!slots.default);\n    return {\n      hasLead,\n      hasBody,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"page\">\n    <div class=\"title\" v-if=\"title\">\n      <h1 v-text=\"title\" />\n    </div>\n    <div v-if=\"hasLead\" class=\"lead\">\n      <slot name=\"lead\" />\n    </div>\n    <div class=\"body\">\n      <slot name=\"default\" />\n    </div>\n    <div v-if=\"appendixVisible\" class=\"appendix\">\n      <SocialMediaLinks />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n\n.page {\n  @include container.small;\n\n  .title {\n    padding: 1.5rem 0;\n\n    > h1 {\n      @include typo.x-large;\n      @include typo.bold;\n    }\n\n    @include responsive.bp-medium {\n      padding: 0.625rem 0 1rem;\n    }\n  }\n\n  .lead {\n    @include typo.large;\n\n    padding-bottom: 2rem;\n    line-height: 120%;\n  }\n\n  /*\n  .body {\n    background: yellow;\n  }\n  */\n\n  .appendix {\n    padding: 2rem 0 6rem;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\n\nimport IconBuffering from \"@/components/ui/icon/IconBuffering.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport Page from \"@/layouts/Page.vue\";\n\nexport default defineComponent({\n  components: {\n    Page,\n    IconBuffering,\n  },\n  setup() {\n    const route = useRoute();\n    const router = useRouter();\n    const { loginUserBySignedEmail } = useAccount();\n    const { loadUser } = useAccount();\n    const signedEmail = ref(route.params.signedEmail);\n    const errors = ref<Array<string>>([]);\n    const loginBySignedEmail = async (value: string | string[]) => {\n      try {\n        await loginUserBySignedEmail(value);\n        await loadUser();\n        // document.location.href = \"/account/settings/\";\n        await router.push(\"/account/settings/\");\n      } catch (err) {\n        console.warn(err);\n        errors.value = [err.message, err.response.data];\n      }\n    };\n    if (signedEmail.value) {\n      loginBySignedEmail(signedEmail.value);\n    }\n    return {\n      errors,\n      signedEmail,\n    };\n  },\n});\n</script>\n<template>\n  <Page class=\"email-login\" title=\"Login\">\n    <div class=\"loading\">\n      <IconBuffering />\n      <div class=\"text\">loading user data</div>\n    </div>\n    <div class=\"errors\" v-if=\"errors.length\">\n      <pre v-text=\"errors\" />\n    </div>\n  </Page>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/form\";\n\n.email-login {\n  flex-grow: 1;\n  display: flex;\n  flex-direction: column;\n\n  .loading {\n    flex-grow: 1;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    padding-bottom: 6rem;\n\n    > .text {\n      @include typo.small;\n    }\n  }\n\n  .errors {\n    display: none;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport AuthPanel from \"@/components/account/auth/AuthPanel.vue\";\nimport Page from \"@/layouts/Page.vue\";\n\nexport default {\n  components: {\n    Page,\n    AuthPanel,\n  },\n  setup() {\n    return {};\n  },\n};\n</script>\n<template>\n  <Page title=\"Login\">\n    <section class=\"section\">\n      <AuthPanel />\n    </section>\n  </Page>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/section\";\n\n.section {\n  @include section.default;\n}\n</style>\n","/*!\n * qrcode.vue v3.3.4\n * A Vue.js component to generate QRCode.\n * © 2017-2023 @scopewu(https://github.com/scopewu)\n * MIT License.\n */\nimport { defineComponent, ref, onUpdated, h, onMounted } from 'vue';\n\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\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\n\nvar mode$1 = {\n\tMODE_NUMBER :\t\t1 << 0,\n\tMODE_ALPHA_NUM : \t1 << 1,\n\tMODE_8BIT_BYTE : \t1 << 2,\n\tMODE_KANJI :\t\t1 << 3\n};\n\nvar mode = mode$1;\n\nfunction QR8bitByte(data) {\n\tthis.mode = mode.MODE_8BIT_BYTE;\n\tthis.data = data;\n}\n\nQR8bitByte.prototype = {\n\n\tgetLength : function(buffer) {\n\t\treturn this.data.length;\n\t},\n\t\n\twrite : function(buffer) {\n\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t// not JIS ...\n\t\t\tbuffer.put(this.data.charCodeAt(i), 8);\n\t\t}\n\t}\n};\n\nvar _8BitByte = QR8bitByte;\n\nvar ErrorCorrectLevel = {\n\tL : 1,\n\tM : 0,\n\tQ : 3,\n\tH : 2\n};\n\n// ErrorCorrectLevel\nvar ECL = ErrorCorrectLevel;\n\nfunction QRRSBlock(totalCount, dataCount) {\n\tthis.totalCount = totalCount;\n\tthis.dataCount  = dataCount;\n}\n\nQRRSBlock.RS_BLOCK_TABLE = [\n\n\t// L\n\t// M\n\t// Q\n\t// H\n\n\t// 1\n\t[1, 26, 19],\n\t[1, 26, 16],\n\t[1, 26, 13],\n\t[1, 26, 9],\n\t\n\t// 2\n\t[1, 44, 34],\n\t[1, 44, 28],\n\t[1, 44, 22],\n\t[1, 44, 16],\n\n\t// 3\n\t[1, 70, 55],\n\t[1, 70, 44],\n\t[2, 35, 17],\n\t[2, 35, 13],\n\n\t// 4\t\t\n\t[1, 100, 80],\n\t[2, 50, 32],\n\t[2, 50, 24],\n\t[4, 25, 9],\n\t\n\t// 5\n\t[1, 134, 108],\n\t[2, 67, 43],\n\t[2, 33, 15, 2, 34, 16],\n\t[2, 33, 11, 2, 34, 12],\n\t\n\t// 6\n\t[2, 86, 68],\n\t[4, 43, 27],\n\t[4, 43, 19],\n\t[4, 43, 15],\n\t\n\t// 7\t\t\n\t[2, 98, 78],\n\t[4, 49, 31],\n\t[2, 32, 14, 4, 33, 15],\n\t[4, 39, 13, 1, 40, 14],\n\t\n\t// 8\n\t[2, 121, 97],\n\t[2, 60, 38, 2, 61, 39],\n\t[4, 40, 18, 2, 41, 19],\n\t[4, 40, 14, 2, 41, 15],\n\t\n\t// 9\n\t[2, 146, 116],\n\t[3, 58, 36, 2, 59, 37],\n\t[4, 36, 16, 4, 37, 17],\n\t[4, 36, 12, 4, 37, 13],\n\t\n\t// 10\t\t\n\t[2, 86, 68, 2, 87, 69],\n\t[4, 69, 43, 1, 70, 44],\n\t[6, 43, 19, 2, 44, 20],\n\t[6, 43, 15, 2, 44, 16],\n\n\t// 11\n\t[4, 101, 81],\n\t[1, 80, 50, 4, 81, 51],\n\t[4, 50, 22, 4, 51, 23],\n\t[3, 36, 12, 8, 37, 13],\n\n\t// 12\n\t[2, 116, 92, 2, 117, 93],\n\t[6, 58, 36, 2, 59, 37],\n\t[4, 46, 20, 6, 47, 21],\n\t[7, 42, 14, 4, 43, 15],\n\n\t// 13\n\t[4, 133, 107],\n\t[8, 59, 37, 1, 60, 38],\n\t[8, 44, 20, 4, 45, 21],\n\t[12, 33, 11, 4, 34, 12],\n\n\t// 14\n\t[3, 145, 115, 1, 146, 116],\n\t[4, 64, 40, 5, 65, 41],\n\t[11, 36, 16, 5, 37, 17],\n\t[11, 36, 12, 5, 37, 13],\n\n\t// 15\n\t[5, 109, 87, 1, 110, 88],\n\t[5, 65, 41, 5, 66, 42],\n\t[5, 54, 24, 7, 55, 25],\n\t[11, 36, 12],\n\n\t// 16\n\t[5, 122, 98, 1, 123, 99],\n\t[7, 73, 45, 3, 74, 46],\n\t[15, 43, 19, 2, 44, 20],\n\t[3, 45, 15, 13, 46, 16],\n\n\t// 17\n\t[1, 135, 107, 5, 136, 108],\n\t[10, 74, 46, 1, 75, 47],\n\t[1, 50, 22, 15, 51, 23],\n\t[2, 42, 14, 17, 43, 15],\n\n\t// 18\n\t[5, 150, 120, 1, 151, 121],\n\t[9, 69, 43, 4, 70, 44],\n\t[17, 50, 22, 1, 51, 23],\n\t[2, 42, 14, 19, 43, 15],\n\n\t// 19\n\t[3, 141, 113, 4, 142, 114],\n\t[3, 70, 44, 11, 71, 45],\n\t[17, 47, 21, 4, 48, 22],\n\t[9, 39, 13, 16, 40, 14],\n\n\t// 20\n\t[3, 135, 107, 5, 136, 108],\n\t[3, 67, 41, 13, 68, 42],\n\t[15, 54, 24, 5, 55, 25],\n\t[15, 43, 15, 10, 44, 16],\n\n\t// 21\n\t[4, 144, 116, 4, 145, 117],\n\t[17, 68, 42],\n\t[17, 50, 22, 6, 51, 23],\n\t[19, 46, 16, 6, 47, 17],\n\n\t// 22\n\t[2, 139, 111, 7, 140, 112],\n\t[17, 74, 46],\n\t[7, 54, 24, 16, 55, 25],\n\t[34, 37, 13],\n\n\t// 23\n\t[4, 151, 121, 5, 152, 122],\n\t[4, 75, 47, 14, 76, 48],\n\t[11, 54, 24, 14, 55, 25],\n\t[16, 45, 15, 14, 46, 16],\n\n\t// 24\n\t[6, 147, 117, 4, 148, 118],\n\t[6, 73, 45, 14, 74, 46],\n\t[11, 54, 24, 16, 55, 25],\n\t[30, 46, 16, 2, 47, 17],\n\n\t// 25\n\t[8, 132, 106, 4, 133, 107],\n\t[8, 75, 47, 13, 76, 48],\n\t[7, 54, 24, 22, 55, 25],\n\t[22, 45, 15, 13, 46, 16],\n\n\t// 26\n\t[10, 142, 114, 2, 143, 115],\n\t[19, 74, 46, 4, 75, 47],\n\t[28, 50, 22, 6, 51, 23],\n\t[33, 46, 16, 4, 47, 17],\n\n\t// 27\n\t[8, 152, 122, 4, 153, 123],\n\t[22, 73, 45, 3, 74, 46],\n\t[8, 53, 23, 26, 54, 24],\n\t[12, 45, 15, 28, 46, 16],\n\n\t// 28\n\t[3, 147, 117, 10, 148, 118],\n\t[3, 73, 45, 23, 74, 46],\n\t[4, 54, 24, 31, 55, 25],\n\t[11, 45, 15, 31, 46, 16],\n\n\t// 29\n\t[7, 146, 116, 7, 147, 117],\n\t[21, 73, 45, 7, 74, 46],\n\t[1, 53, 23, 37, 54, 24],\n\t[19, 45, 15, 26, 46, 16],\n\n\t// 30\n\t[5, 145, 115, 10, 146, 116],\n\t[19, 75, 47, 10, 76, 48],\n\t[15, 54, 24, 25, 55, 25],\n\t[23, 45, 15, 25, 46, 16],\n\n\t// 31\n\t[13, 145, 115, 3, 146, 116],\n\t[2, 74, 46, 29, 75, 47],\n\t[42, 54, 24, 1, 55, 25],\n\t[23, 45, 15, 28, 46, 16],\n\n\t// 32\n\t[17, 145, 115],\n\t[10, 74, 46, 23, 75, 47],\n\t[10, 54, 24, 35, 55, 25],\n\t[19, 45, 15, 35, 46, 16],\n\n\t// 33\n\t[17, 145, 115, 1, 146, 116],\n\t[14, 74, 46, 21, 75, 47],\n\t[29, 54, 24, 19, 55, 25],\n\t[11, 45, 15, 46, 46, 16],\n\n\t// 34\n\t[13, 145, 115, 6, 146, 116],\n\t[14, 74, 46, 23, 75, 47],\n\t[44, 54, 24, 7, 55, 25],\n\t[59, 46, 16, 1, 47, 17],\n\n\t// 35\n\t[12, 151, 121, 7, 152, 122],\n\t[12, 75, 47, 26, 76, 48],\n\t[39, 54, 24, 14, 55, 25],\n\t[22, 45, 15, 41, 46, 16],\n\n\t// 36\n\t[6, 151, 121, 14, 152, 122],\n\t[6, 75, 47, 34, 76, 48],\n\t[46, 54, 24, 10, 55, 25],\n\t[2, 45, 15, 64, 46, 16],\n\n\t// 37\n\t[17, 152, 122, 4, 153, 123],\n\t[29, 74, 46, 14, 75, 47],\n\t[49, 54, 24, 10, 55, 25],\n\t[24, 45, 15, 46, 46, 16],\n\n\t// 38\n\t[4, 152, 122, 18, 153, 123],\n\t[13, 74, 46, 32, 75, 47],\n\t[48, 54, 24, 14, 55, 25],\n\t[42, 45, 15, 32, 46, 16],\n\n\t// 39\n\t[20, 147, 117, 4, 148, 118],\n\t[40, 75, 47, 7, 76, 48],\n\t[43, 54, 24, 22, 55, 25],\n\t[10, 45, 15, 67, 46, 16],\n\n\t// 40\n\t[19, 148, 118, 6, 149, 119],\n\t[18, 75, 47, 31, 76, 48],\n\t[34, 54, 24, 34, 55, 25],\n\t[20, 45, 15, 61, 46, 16]\n];\n\nQRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {\n\t\n\tvar rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\t\n\tif (rsBlock == undefined) {\n\t\tthrow new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel);\n\t}\n\n\tvar length = rsBlock.length / 3;\n\t\n\tvar list = new Array();\n\t\n\tfor (var i = 0; i < length; i++) {\n\n\t\tvar count = rsBlock[i * 3 + 0];\n\t\tvar totalCount = rsBlock[i * 3 + 1];\n\t\tvar dataCount  = rsBlock[i * 3 + 2];\n\n\t\tfor (var j = 0; j < count; j++) {\n\t\t\tlist.push(new QRRSBlock(totalCount, dataCount) );\t\n\t\t}\n\t}\n\t\n\treturn list;\n};\n\nQRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {\n\n\tswitch(errorCorrectLevel) {\n\tcase ECL.L :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\tcase ECL.M :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\tcase ECL.Q :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\tcase ECL.H :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\tdefault :\n\t\treturn undefined;\n\t}\n};\n\nvar RSBlock$1 = QRRSBlock;\n\nfunction QRBitBuffer() {\n\tthis.buffer = new Array();\n\tthis.length = 0;\n}\n\nQRBitBuffer.prototype = {\n\n\tget : function(index) {\n\t\tvar bufIndex = Math.floor(index / 8);\n\t\treturn ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n\t},\n\t\n\tput : function(num, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tthis.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n\t\t}\n\t},\n\t\n\tgetLengthInBits : function() {\n\t\treturn this.length;\n\t},\n\t\n\tputBit : function(bit) {\n\t\n\t\tvar bufIndex = Math.floor(this.length / 8);\n\t\tif (this.buffer.length <= bufIndex) {\n\t\t\tthis.buffer.push(0);\n\t\t}\n\t\n\t\tif (bit) {\n\t\t\tthis.buffer[bufIndex] |= (0x80 >>> (this.length % 8) );\n\t\t}\n\t\n\t\tthis.length++;\n\t}\n};\n\nvar BitBuffer$1 = QRBitBuffer;\n\nvar QRMath = {\n\n\tglog : function(n) {\n\t\n\t\tif (n < 1) {\n\t\t\tthrow new Error(\"glog(\" + n + \")\");\n\t\t}\n\t\t\n\t\treturn QRMath.LOG_TABLE[n];\n\t},\n\t\n\tgexp : function(n) {\n\t\n\t\twhile (n < 0) {\n\t\t\tn += 255;\n\t\t}\n\t\n\t\twhile (n >= 256) {\n\t\t\tn -= 255;\n\t\t}\n\t\n\t\treturn QRMath.EXP_TABLE[n];\n\t},\n\t\n\tEXP_TABLE : new Array(256),\n\t\n\tLOG_TABLE : new Array(256)\n\n};\n\t\nfor (var i = 0; i < 8; i++) {\n\tQRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n\tQRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n\t\t^ QRMath.EXP_TABLE[i - 5]\n\t\t^ QRMath.EXP_TABLE[i - 6]\n\t\t^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n\tQRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;\n}\n\nvar math$2 = QRMath;\n\nvar math$1 = math$2;\n\nfunction QRPolynomial(num, shift) {\n\n\tif (num.length == undefined) {\n\t\tthrow new Error(num.length + \"/\" + shift);\n\t}\n\n\tvar offset = 0;\n\n\twhile (offset < num.length && num[offset] == 0) {\n\t\toffset++;\n\t}\n\n\tthis.num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i++) {\n\t\tthis.num[i] = num[i + offset];\n\t}\n}\n\nQRPolynomial.prototype = {\n\n\tget : function(index) {\n\t\treturn this.num[index];\n\t},\n\t\n\tgetLength : function() {\n\t\treturn this.num.length;\n\t},\n\t\n\tmultiply : function(e) {\n\t\n\t\tvar num = new Array(this.getLength() + e.getLength() - 1);\n\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tfor (var j = 0; j < e.getLength(); j++) {\n\t\t\t\tnum[i + j] ^= math$1.gexp(math$1.glog(this.get(i) ) + math$1.glog(e.get(j) ) );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new QRPolynomial(num, 0);\n\t},\n\t\n\tmod : function(e) {\n\t\n\t\tif (this.getLength() - e.getLength() < 0) {\n\t\t\treturn this;\n\t\t}\n\t\n\t\tvar ratio = math$1.glog(this.get(0) ) - math$1.glog(e.get(0) );\n\t\n\t\tvar num = new Array(this.getLength() );\n\t\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tnum[i] = this.get(i);\n\t\t}\n\t\t\n\t\tfor (var i = 0; i < e.getLength(); i++) {\n\t\t\tnum[i] ^= math$1.gexp(math$1.glog(e.get(i) ) + ratio);\n\t\t}\n\t\n\t\t// recursive call\n\t\treturn new QRPolynomial(num, 0).mod(e);\n\t}\n};\n\nvar Polynomial$2 = QRPolynomial;\n\nvar Mode = mode$1;\nvar Polynomial$1 = Polynomial$2;\nvar math = math$2;\n\nvar QRMaskPattern = {\n\tPATTERN000 : 0,\n\tPATTERN001 : 1,\n\tPATTERN010 : 2,\n\tPATTERN011 : 3,\n\tPATTERN100 : 4,\n\tPATTERN101 : 5,\n\tPATTERN110 : 6,\n\tPATTERN111 : 7\n};\n\nvar QRUtil = {\n\n    PATTERN_POSITION_TABLE : [\n\t    [],\n\t    [6, 18],\n\t    [6, 22],\n\t    [6, 26],\n\t    [6, 30],\n\t    [6, 34],\n\t    [6, 22, 38],\n\t    [6, 24, 42],\n\t    [6, 26, 46],\n\t    [6, 28, 50],\n\t    [6, 30, 54],\t\t\n\t    [6, 32, 58],\n\t    [6, 34, 62],\n\t    [6, 26, 46, 66],\n\t    [6, 26, 48, 70],\n\t    [6, 26, 50, 74],\n\t    [6, 30, 54, 78],\n\t    [6, 30, 56, 82],\n\t    [6, 30, 58, 86],\n\t    [6, 34, 62, 90],\n\t    [6, 28, 50, 72, 94],\n\t    [6, 26, 50, 74, 98],\n\t    [6, 30, 54, 78, 102],\n\t    [6, 28, 54, 80, 106],\n\t    [6, 32, 58, 84, 110],\n\t    [6, 30, 58, 86, 114],\n\t    [6, 34, 62, 90, 118],\n\t    [6, 26, 50, 74, 98, 122],\n\t    [6, 30, 54, 78, 102, 126],\n\t    [6, 26, 52, 78, 104, 130],\n\t    [6, 30, 56, 82, 108, 134],\n\t    [6, 34, 60, 86, 112, 138],\n\t    [6, 30, 58, 86, 114, 142],\n\t    [6, 34, 62, 90, 118, 146],\n\t    [6, 30, 54, 78, 102, 126, 150],\n\t    [6, 24, 50, 76, 102, 128, 154],\n\t    [6, 28, 54, 80, 106, 132, 158],\n\t    [6, 32, 58, 84, 110, 136, 162],\n\t    [6, 26, 54, 82, 110, 138, 166],\n\t    [6, 30, 58, 86, 114, 142, 170]\n    ],\n\n    G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n    G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n    G15_MASK : (1 << 14) | (1 << 12) | (1 << 10)\t| (1 << 4) | (1 << 1),\n\n    getBCHTypeInfo : function(data) {\n\t    var d = data << 10;\n\t    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n\t\t    d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ); \t\n\t    }\n\t    return ( (data << 10) | d) ^ QRUtil.G15_MASK;\n    },\n\n    getBCHTypeNumber : function(data) {\n\t    var d = data << 12;\n\t    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n\t\t    d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ); \t\n\t    }\n\t    return (data << 12) | d;\n    },\n\n    getBCHDigit : function(data) {\n\n\t    var digit = 0;\n\n\t    while (data != 0) {\n\t\t    digit++;\n\t\t    data >>>= 1;\n\t    }\n\n\t    return digit;\n    },\n\n    getPatternPosition : function(typeNumber) {\n\t    return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n    },\n\n    getMask : function(maskPattern, i, j) {\n\t    \n\t    switch (maskPattern) {\n\t\t    \n\t    case QRMaskPattern.PATTERN000 : return (i + j) % 2 == 0;\n\t    case QRMaskPattern.PATTERN001 : return i % 2 == 0;\n\t    case QRMaskPattern.PATTERN010 : return j % 3 == 0;\n\t    case QRMaskPattern.PATTERN011 : return (i + j) % 3 == 0;\n\t    case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0;\n\t    case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 == 0;\n\t    case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 == 0;\n\t    case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 == 0;\n\n\t    default :\n\t\t    throw new Error(\"bad maskPattern:\" + maskPattern);\n\t    }\n    },\n\n    getErrorCorrectPolynomial : function(errorCorrectLength) {\n\n\t    var a = new Polynomial$1([1], 0);\n\n\t    for (var i = 0; i < errorCorrectLength; i++) {\n\t\t    a = a.multiply(new Polynomial$1([1, math.gexp(i)], 0) );\n\t    }\n\n\t    return a;\n    },\n\n    getLengthInBits : function(mode, type) {\n\n\t    if (1 <= type && type < 10) {\n\n\t\t    // 1 - 9\n\n\t\t    switch(mode) {\n\t\t    case Mode.MODE_NUMBER \t: return 10;\n\t\t    case Mode.MODE_ALPHA_NUM \t: return 9;\n\t\t    case Mode.MODE_8BIT_BYTE\t: return 8;\n\t\t    case Mode.MODE_KANJI  \t: return 8;\n\t\t    default :\n\t\t\t    throw new Error(\"mode:\" + mode);\n\t\t    }\n\n\t    } else if (type < 27) {\n\n\t\t    // 10 - 26\n\n\t\t    switch(mode) {\n\t\t    case Mode.MODE_NUMBER \t: return 12;\n\t\t    case Mode.MODE_ALPHA_NUM \t: return 11;\n\t\t    case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t    case Mode.MODE_KANJI  \t: return 10;\n\t\t    default :\n\t\t\t    throw new Error(\"mode:\" + mode);\n\t\t    }\n\n\t    } else if (type < 41) {\n\n\t\t    // 27 - 40\n\n\t\t    switch(mode) {\n\t\t    case Mode.MODE_NUMBER \t: return 14;\n\t\t    case Mode.MODE_ALPHA_NUM\t: return 13;\n\t\t    case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t    case Mode.MODE_KANJI  \t: return 12;\n\t\t    default :\n\t\t\t    throw new Error(\"mode:\" + mode);\n\t\t    }\n\n\t    } else {\n\t\t    throw new Error(\"type:\" + type);\n\t    }\n    },\n\n    getLostPoint : function(qrCode) {\n\t    \n\t    var moduleCount = qrCode.getModuleCount();\n\t    \n\t    var lostPoint = 0;\n\t    \n\t    // LEVEL1\n\t    \n\t    for (var row = 0; row < moduleCount; row++) {\n\n\t\t    for (var col = 0; col < moduleCount; col++) {\n\n\t\t\t    var sameCount = 0;\n\t\t\t    var dark = qrCode.isDark(row, col);\n\n\t\t\t\tfor (var r = -1; r <= 1; r++) {\n\n\t\t\t\t    if (row + r < 0 || moduleCount <= row + r) {\n\t\t\t\t\t    continue;\n\t\t\t\t    }\n\n\t\t\t\t    for (var c = -1; c <= 1; c++) {\n\n\t\t\t\t\t    if (col + c < 0 || moduleCount <= col + c) {\n\t\t\t\t\t\t    continue;\n\t\t\t\t\t    }\n\n\t\t\t\t\t    if (r == 0 && c == 0) {\n\t\t\t\t\t\t    continue;\n\t\t\t\t\t    }\n\n\t\t\t\t\t    if (dark == qrCode.isDark(row + r, col + c) ) {\n\t\t\t\t\t\t    sameCount++;\n\t\t\t\t\t    }\n\t\t\t\t    }\n\t\t\t    }\n\n\t\t\t    if (sameCount > 5) {\n\t\t\t\t    lostPoint += (3 + sameCount - 5);\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    // LEVEL2\n\n\t    for (var row = 0; row < moduleCount - 1; row++) {\n\t\t    for (var col = 0; col < moduleCount - 1; col++) {\n\t\t\t    var count = 0;\n\t\t\t    if (qrCode.isDark(row,     col    ) ) count++;\n\t\t\t    if (qrCode.isDark(row + 1, col    ) ) count++;\n\t\t\t    if (qrCode.isDark(row,     col + 1) ) count++;\n\t\t\t    if (qrCode.isDark(row + 1, col + 1) ) count++;\n\t\t\t    if (count == 0 || count == 4) {\n\t\t\t\t    lostPoint += 3;\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    // LEVEL3\n\n\t    for (var row = 0; row < moduleCount; row++) {\n\t\t    for (var col = 0; col < moduleCount - 6; col++) {\n\t\t\t    if (qrCode.isDark(row, col)\n\t\t\t\t\t    && !qrCode.isDark(row, col + 1)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 2)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 3)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 4)\n\t\t\t\t\t    && !qrCode.isDark(row, col + 5)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 6) ) {\n\t\t\t\t    lostPoint += 40;\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    for (var col = 0; col < moduleCount; col++) {\n\t\t    for (var row = 0; row < moduleCount - 6; row++) {\n\t\t\t    if (qrCode.isDark(row, col)\n\t\t\t\t\t    && !qrCode.isDark(row + 1, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 2, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 3, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 4, col)\n\t\t\t\t\t    && !qrCode.isDark(row + 5, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 6, col) ) {\n\t\t\t\t    lostPoint += 40;\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    // LEVEL4\n\t    \n\t    var darkCount = 0;\n\n\t    for (var col = 0; col < moduleCount; col++) {\n\t\t    for (var row = 0; row < moduleCount; row++) {\n\t\t\t    if (qrCode.isDark(row, col) ) {\n\t\t\t\t    darkCount++;\n\t\t\t    }\n\t\t    }\n\t    }\n\t    \n\t    var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n\t    lostPoint += ratio * 10;\n\n\t    return lostPoint;\t\t\n    }\n};\n\nvar util$1 = QRUtil;\n\nvar BitByte = _8BitByte;\nvar RSBlock = RSBlock$1;\nvar BitBuffer = BitBuffer$1;\nvar util = util$1;\nvar Polynomial = Polynomial$2;\n\nfunction QRCode$1(typeNumber, errorCorrectLevel) {\n\tthis.typeNumber = typeNumber;\n\tthis.errorCorrectLevel = errorCorrectLevel;\n\tthis.modules = null;\n\tthis.moduleCount = 0;\n\tthis.dataCache = null;\n\tthis.dataList = [];\n}\n\n// for client side minification\nvar proto = QRCode$1.prototype;\n\nproto.addData = function(data) {\n\tvar newData = new BitByte(data);\n\tthis.dataList.push(newData);\n\tthis.dataCache = null;\n};\n\nproto.isDark = function(row, col) {\n\tif (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n\t\tthrow new Error(row + \",\" + col);\n\t}\n\treturn this.modules[row][col];\n};\n\nproto.getModuleCount = function() {\n\treturn this.moduleCount;\n};\n\nproto.make = function() {\n\t// Calculate automatically typeNumber if provided is < 1\n\tif (this.typeNumber < 1 ){\n\t\tvar typeNumber = 1;\n\t\tfor (typeNumber = 1; typeNumber < 40; typeNumber++) {\n\t\t\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n\n\t\t\tvar buffer = new BitBuffer();\n\t\t\tvar totalDataCount = 0;\n\t\t\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\t\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < this.dataList.length; i++) {\n\t\t\t\tvar data = this.dataList[i];\n\t\t\t\tbuffer.put(data.mode, 4);\n\t\t\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\t\t\tdata.write(buffer);\n\t\t\t}\n\t\t\tif (buffer.getLengthInBits() <= totalDataCount * 8)\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.typeNumber = typeNumber;\n\t}\n\tthis.makeImpl(false, this.getBestMaskPattern() );\n};\n\nproto.makeImpl = function(test, maskPattern) {\n\t\n\tthis.moduleCount = this.typeNumber * 4 + 17;\n\tthis.modules = new Array(this.moduleCount);\n\t\n\tfor (var row = 0; row < this.moduleCount; row++) {\n\t\t\n\t\tthis.modules[row] = new Array(this.moduleCount);\n\t\t\n\t\tfor (var col = 0; col < this.moduleCount; col++) {\n\t\t\tthis.modules[row][col] = null;//(col + row) % 3;\n\t\t}\n\t}\n\n\tthis.setupPositionProbePattern(0, 0);\n\tthis.setupPositionProbePattern(this.moduleCount - 7, 0);\n\tthis.setupPositionProbePattern(0, this.moduleCount - 7);\n\tthis.setupPositionAdjustPattern();\n\tthis.setupTimingPattern();\n\tthis.setupTypeInfo(test, maskPattern);\n\t\n\tif (this.typeNumber >= 7) {\n\t\tthis.setupTypeNumber(test);\n\t}\n\n\tif (this.dataCache == null) {\n\t\tthis.dataCache = QRCode$1.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n\t}\n\n\tthis.mapData(this.dataCache, maskPattern);\n};\n\nproto.setupPositionProbePattern = function(row, col)  {\n\t\n\tfor (var r = -1; r <= 7; r++) {\n\t\t\n\t\tif (row + r <= -1 || this.moduleCount <= row + r) continue;\n\t\t\n\t\tfor (var c = -1; c <= 7; c++) {\n\t\t\t\n\t\t\tif (col + c <= -1 || this.moduleCount <= col + c) continue;\n\t\t\t\n\t\t\tif ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n\t\t\t\t\t|| (0 <= c && c <= 6 && (r == 0 || r == 6) )\n\t\t\t\t\t|| (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t} else {\n\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t}\n\t\t}\t\t\n\t}\t\t\n};\n\nproto.getBestMaskPattern = function() {\n\n\tvar minLostPoint = 0;\n\tvar pattern = 0;\n\n\tfor (var i = 0; i < 8; i++) {\n\t\t\n\t\tthis.makeImpl(true, i);\n\n\t\tvar lostPoint = util.getLostPoint(this);\n\n\t\tif (i == 0 || minLostPoint >  lostPoint) {\n\t\t\tminLostPoint = lostPoint;\n\t\t\tpattern = i;\n\t\t}\n\t}\n\n\treturn pattern;\n};\n\nproto.createMovieClip = function(target_mc, instance_name, depth) {\n\n\tvar qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n\tvar cs = 1;\n\n\tthis.make();\n\n\tfor (var row = 0; row < this.modules.length; row++) {\n\t\t\n\t\tvar y = row * cs;\n\t\t\n\t\tfor (var col = 0; col < this.modules[row].length; col++) {\n\n\t\t\tvar x = col * cs;\n\t\t\tvar dark = this.modules[row][col];\n\t\t\n\t\t\tif (dark) {\n\t\t\t\tqr_mc.beginFill(0, 100);\n\t\t\t\tqr_mc.moveTo(x, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y + cs);\n\t\t\t\tqr_mc.lineTo(x, y + cs);\n\t\t\t\tqr_mc.endFill();\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn qr_mc;\n};\n\nproto.setupTimingPattern = function() {\n\t\n\tfor (var r = 8; r < this.moduleCount - 8; r++) {\n\t\tif (this.modules[r][6] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[r][6] = (r % 2 == 0);\n\t}\n\n\tfor (var c = 8; c < this.moduleCount - 8; c++) {\n\t\tif (this.modules[6][c] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[6][c] = (c % 2 == 0);\n\t}\n};\n\nproto.setupPositionAdjustPattern = function() {\n\n\tvar pos = util.getPatternPosition(this.typeNumber);\n\t\n\tfor (var i = 0; i < pos.length; i++) {\n\t\n\t\tfor (var j = 0; j < pos.length; j++) {\n\t\t\n\t\t\tvar row = pos[i];\n\t\t\tvar col = pos[j];\n\t\t\t\n\t\t\tif (this.modules[row][col] != null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tfor (var r = -2; r <= 2; r++) {\n\t\t\t\n\t\t\t\tfor (var c = -2; c <= 2; c++) {\n\t\t\t\t\n\t\t\t\t\tif (r == -2 || r == 2 || c == -2 || c == 2\n\t\t\t\t\t\t\t|| (r == 0 && c == 0) ) {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nproto.setupTypeNumber = function(test) {\n\n\tvar bits = util.getBCHTypeNumber(this.typeNumber);\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;\n\t}\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n\t}\n};\n\nproto.setupTypeInfo = function(test, maskPattern) {\n\n\tvar data = (this.errorCorrectLevel << 3) | maskPattern;\n\tvar bits = util.getBCHTypeInfo(data);\n\n\t// vertical\t\t\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\n\t\tif (i < 6) {\n\t\t\tthis.modules[i][8] = mod;\n\t\t} else if (i < 8) {\n\t\t\tthis.modules[i + 1][8] = mod;\n\t\t} else {\n\t\t\tthis.modules[this.moduleCount - 15 + i][8] = mod;\n\t\t}\n\t}\n\n\t// horizontal\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\t\n\t\tif (i < 8) {\n\t\t\tthis.modules[8][this.moduleCount - i - 1] = mod;\n\t\t} else if (i < 9) {\n\t\t\tthis.modules[8][15 - i - 1 + 1] = mod;\n\t\t} else {\n\t\t\tthis.modules[8][15 - i - 1] = mod;\n\t\t}\n\t}\n\n\t// fixed module\n\tthis.modules[this.moduleCount - 8][8] = (!test);\n};\n\nproto.mapData = function(data, maskPattern) {\n\t\n\tvar inc = -1;\n\tvar row = this.moduleCount - 1;\n\tvar bitIndex = 7;\n\tvar byteIndex = 0;\n\t\n\tfor (var col = this.moduleCount - 1; col > 0; col -= 2) {\n\n\t\tif (col == 6) col--;\n\n\t\twhile (true) {\n\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\t\n\t\t\t\tif (this.modules[row][col - c] == null) {\n\t\t\t\t\t\n\t\t\t\t\tvar dark = false;\n\n\t\t\t\t\tif (byteIndex < data.length) {\n\t\t\t\t\t\tdark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar mask = util.getMask(maskPattern, row, col - c);\n\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tdark = !dark;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.modules[row][col - c] = dark;\n\t\t\t\t\tbitIndex--;\n\n\t\t\t\t\tif (bitIndex == -1) {\n\t\t\t\t\t\tbyteIndex++;\n\t\t\t\t\t\tbitIndex = 7;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\trow += inc;\n\n\t\t\tif (row < 0 || this.moduleCount <= row) {\n\t\t\t\trow -= inc;\n\t\t\t\tinc = -inc;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n};\n\nQRCode$1.PAD0 = 0xEC;\nQRCode$1.PAD1 = 0x11;\n\nQRCode$1.createData = function(typeNumber, errorCorrectLevel, dataList) {\n\t\n\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\t\n\tvar buffer = new BitBuffer();\n\t\n\tfor (var i = 0; i < dataList.length; i++) {\n\t\tvar data = dataList[i];\n\t\tbuffer.put(data.mode, 4);\n\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\tdata.write(buffer);\n\t}\n\n\t// calc num max data.\n\tvar totalDataCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t}\n\n\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t\tthrow new Error(\"code length overflow. (\"\n\t\t\t+ buffer.getLengthInBits()\n\t\t\t+ \">\"\n\t\t\t+  totalDataCount * 8\n\t\t\t+ \")\");\n\t}\n\n\t// end code\n\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t\tbuffer.put(0, 4);\n\t}\n\n\t// padding\n\twhile (buffer.getLengthInBits() % 8 != 0) {\n\t\tbuffer.putBit(false);\n\t}\n\n\t// padding\n\twhile (true) {\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode$1.PAD0, 8);\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode$1.PAD1, 8);\n\t}\n\n\treturn QRCode$1.createBytes(buffer, rsBlocks);\n};\n\nQRCode$1.createBytes = function(buffer, rsBlocks) {\n\n\tvar offset = 0;\n\t\n\tvar maxDcCount = 0;\n\tvar maxEcCount = 0;\n\t\n\tvar dcdata = new Array(rsBlocks.length);\n\tvar ecdata = new Array(rsBlocks.length);\n\t\n\tfor (var r = 0; r < rsBlocks.length; r++) {\n\n\t\tvar dcCount = rsBlocks[r].dataCount;\n\t\tvar ecCount = rsBlocks[r].totalCount - dcCount;\n\n\t\tmaxDcCount = Math.max(maxDcCount, dcCount);\n\t\tmaxEcCount = Math.max(maxEcCount, ecCount);\n\t\t\n\t\tdcdata[r] = new Array(dcCount);\n\t\t\n\t\tfor (var i = 0; i < dcdata[r].length; i++) {\n\t\t\tdcdata[r][i] = 0xff & buffer.buffer[i + offset];\n\t\t}\n\t\toffset += dcCount;\n\t\t\n\t\tvar rsPoly = util.getErrorCorrectPolynomial(ecCount);\n\t\tvar rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n\n\t\tvar modPoly = rawPoly.mod(rsPoly);\n\t\tecdata[r] = new Array(rsPoly.getLength() - 1);\n\t\tfor (var i = 0; i < ecdata[r].length; i++) {\n            var modIndex = i + modPoly.getLength() - ecdata[r].length;\n\t\t\tecdata[r][i] = (modIndex >= 0)? modPoly.get(modIndex) : 0;\n\t\t}\n\n\t}\n\t\n\tvar totalCodeCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalCodeCount += rsBlocks[i].totalCount;\n\t}\n\n\tvar data = new Array(totalCodeCount);\n\tvar index = 0;\n\n\tfor (var i = 0; i < maxDcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < dcdata[r].length) {\n\t\t\t\tdata[index++] = dcdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < maxEcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < ecdata[r].length) {\n\t\t\t\tdata[index++] = ecdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data;\n};\n\nvar QRCode_1 = QRCode$1;\n\nvar defaultErrorCorrectLevel = 'H';\r\n// Thanks the `qrcode.react`\r\nvar SUPPORTS_PATH2D = (function () {\r\n    try {\r\n        new Path2D().addPath(new Path2D());\r\n    }\r\n    catch (e) {\r\n        return false;\r\n    }\r\n    return true;\r\n})();\r\nfunction QRCode(data, level) {\r\n    var errorCorrectLevel = ErrorCorrectLevel[level];\r\n    // We'll use type===-1 to force QRCode to automatically pick the best type\r\n    var qrcode = new QRCode_1(-1, errorCorrectLevel);\r\n    qrcode.addData(toUTF8String(data));\r\n    qrcode.make();\r\n    return qrcode;\r\n}\r\nfunction validErrorCorrectLevel(level) {\r\n    return level in ErrorCorrectLevel;\r\n}\r\n/**\r\n * Encode UTF16 to UTF8.\r\n * See: http://jonisalonen.com/2012/from-utf-16-to-utf-8-in-javascript/\r\n * @param str {string}\r\n * @returns {string}\r\n */\r\nfunction toUTF8String(str) {\r\n    var utf8Str = '';\r\n    for (var i = 0; i < str.length; i++) {\r\n        var charCode = str.charCodeAt(i);\r\n        if (charCode < 0x0080) {\r\n            utf8Str += String.fromCharCode(charCode);\r\n        }\r\n        else if (charCode < 0x0800) {\r\n            utf8Str += String.fromCharCode(0xc0 | (charCode >> 6));\r\n            utf8Str += String.fromCharCode(0x80 | (charCode & 0x3f));\r\n        }\r\n        else if (charCode < 0xd800 || charCode >= 0xe000) {\r\n            utf8Str += String.fromCharCode(0xe0 | (charCode >> 12));\r\n            utf8Str += String.fromCharCode(0x80 | ((charCode >> 6) & 0x3f));\r\n            utf8Str += String.fromCharCode(0x80 | (charCode & 0x3f));\r\n        }\r\n        else {\r\n            // surrogate pair\r\n            i++;\r\n            // UTF-16 encodes 0x10000-0x10FFFF by\r\n            // subtracting 0x10000 and splitting the\r\n            // 20 bits of 0x0-0xFFFFF into two halves\r\n            charCode =\r\n                0x10000 + (((charCode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\r\n            utf8Str += String.fromCharCode(0xf0 | (charCode >> 18));\r\n            utf8Str += String.fromCharCode(0x80 | ((charCode >> 12) & 0x3f));\r\n            utf8Str += String.fromCharCode(0x80 | ((charCode >> 6) & 0x3f));\r\n            utf8Str += String.fromCharCode(0x80 | (charCode & 0x3f));\r\n        }\r\n    }\r\n    return utf8Str;\r\n}\r\nfunction generatePath(modules, margin) {\r\n    if (margin === void 0) { margin = 0; }\r\n    var ops = [];\r\n    modules.forEach(function (row, y) {\r\n        var start = null;\r\n        row.forEach(function (cell, x) {\r\n            if (!cell && start !== null) {\r\n                // M0 0h7v1H0z injects the space with the move and drops the comma,\r\n                // saving a char per operation\r\n                ops.push(\"M\".concat(start + margin, \" \").concat(y + margin, \"h\").concat(x - start, \"v1H\").concat(start + margin, \"z\"));\r\n                start = null;\r\n                return;\r\n            }\r\n            // end of row, clean up or skip\r\n            if (x === row.length - 1) {\r\n                if (!cell) {\r\n                    // We would have closed the op above already so this can only mean\r\n                    // 2+ light modules in a row.\r\n                    return;\r\n                }\r\n                if (start === null) {\r\n                    // Just a single dark module.\r\n                    ops.push(\"M\".concat(x + margin, \",\").concat(y + margin, \" h1v1H\").concat(x + margin, \"z\"));\r\n                }\r\n                else {\r\n                    // Otherwise finish the current line.\r\n                    ops.push(\"M\".concat(start + margin, \",\").concat(y + margin, \" h\").concat(x + 1 - start, \"v1H\").concat(start + margin, \"z\"));\r\n                }\r\n                return;\r\n            }\r\n            if (cell && start === null) {\r\n                start = x;\r\n            }\r\n        });\r\n    });\r\n    return ops.join('');\r\n}\r\nvar QRCodeProps = {\r\n    value: {\r\n        type: String,\r\n        required: true,\r\n        \"default\": ''\r\n    },\r\n    size: {\r\n        type: Number,\r\n        \"default\": 100\r\n    },\r\n    level: {\r\n        type: String,\r\n        \"default\": defaultErrorCorrectLevel,\r\n        validator: function (l) { return validErrorCorrectLevel(l); }\r\n    },\r\n    background: {\r\n        type: String,\r\n        \"default\": '#fff'\r\n    },\r\n    foreground: {\r\n        type: String,\r\n        \"default\": '#000'\r\n    },\r\n    margin: {\r\n        type: Number,\r\n        required: false,\r\n        \"default\": 0\r\n    }\r\n};\r\nvar QRCodeVueProps = __assign(__assign({}, QRCodeProps), { renderAs: {\r\n        type: String,\r\n        required: false,\r\n        \"default\": 'canvas',\r\n        validator: function (as) { return ['canvas', 'svg'].indexOf(as) > -1; }\r\n    } });\r\nvar QRCodeSvg = defineComponent({\r\n    name: 'QRCodeSvg',\r\n    props: QRCodeProps,\r\n    setup: function (props) {\r\n        var numCells = ref(0);\r\n        var fgPath = ref('');\r\n        var generate = function () {\r\n            var value = props.value, level = props.level, margin = props.margin;\r\n            var cells = QRCode(value, level).modules;\r\n            numCells.value = cells.length + margin * 2;\r\n            // Drawing strategy: instead of a rect per module, we're going to create a\r\n            // single path for the dark modules and layer that on top of a light rect,\r\n            // for a total of 2 DOM nodes. We pay a bit more in string concat but that's\r\n            // way faster than DOM ops.\r\n            // For level 1, 441 nodes -> 2\r\n            // For level 40, 31329 -> 2\r\n            fgPath.value = generatePath(cells, margin);\r\n        };\r\n        generate();\r\n        onUpdated(generate);\r\n        return function () { return h('svg', {\r\n            width: props.size,\r\n            height: props.size,\r\n            'shape-rendering': \"crispEdges\",\r\n            xmlns: 'http://www.w3.org/2000/svg',\r\n            viewBox: \"0 0 \".concat(numCells.value, \" \").concat(numCells.value)\r\n        }, [\r\n            h('path', {\r\n                fill: props.background,\r\n                d: \"M0,0 h\".concat(numCells.value, \"v\").concat(numCells.value, \"H0z\")\r\n            }),\r\n            h('path', { fill: props.foreground, d: fgPath.value }),\r\n        ]); };\r\n    }\r\n});\r\nvar QRCodeCanvas = defineComponent({\r\n    name: 'QRCodeCanvas',\r\n    props: QRCodeProps,\r\n    setup: function (props) {\r\n        var canvasEl = ref(null);\r\n        var generate = function () {\r\n            var value = props.value, level = props.level, size = props.size, margin = props.margin, background = props.background, foreground = props.foreground;\r\n            var cells = QRCode(value, level).modules;\r\n            var numCells = cells.length + margin * 2;\r\n            var canvas = canvasEl.value;\r\n            if (!canvas) {\r\n                return;\r\n            }\r\n            var ctx = canvas.getContext('2d');\r\n            if (!ctx) {\r\n                return;\r\n            }\r\n            var devicePixelRatio = window.devicePixelRatio || 1;\r\n            var scale = (size / numCells) * devicePixelRatio;\r\n            canvas.height = canvas.width = size * devicePixelRatio;\r\n            ctx.scale(scale, scale);\r\n            ctx.fillStyle = background;\r\n            ctx.fillRect(0, 0, numCells, numCells);\r\n            ctx.fillStyle = foreground;\r\n            if (SUPPORTS_PATH2D) {\r\n                ctx.fill(new Path2D(generatePath(cells, margin)));\r\n            }\r\n            else {\r\n                cells.forEach(function (row, rdx) {\r\n                    row.forEach(function (cell, cdx) {\r\n                        if (cell) {\r\n                            ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n        };\r\n        onMounted(generate);\r\n        onUpdated(generate);\r\n        return function () { return h('canvas', {\r\n            ref: canvasEl,\r\n            style: { width: \"\".concat(props.size, \"px\"), height: \"\".concat(props.size, \"px\") }\r\n        }); };\r\n    }\r\n});\r\nvar QrcodeVue = defineComponent({\r\n    name: 'Qrcode',\r\n    render: function () {\r\n        var _a = this.$props, renderAs = _a.renderAs, value = _a.value, _size = _a.size, _margin = _a.margin, _level = _a.level, background = _a.background, foreground = _a.foreground;\r\n        var size = _size >>> 0;\r\n        var margin = _margin >>> 0;\r\n        var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;\r\n        return h(renderAs === 'svg' ? QRCodeSvg : QRCodeCanvas, { value: value, size: size, margin: margin, level: level, background: background, foreground: foreground });\r\n    },\r\n    props: QRCodeVueProps\r\n});\n\nexport { QrcodeVue as default };\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        stroke: color.value,\n        fill: \"none\",\n        strokeWidth: (2 * 48) / size.value,\n        // strokeWidth: 1,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <polyline points=\"34,19.1 20.2,33 14,34 15.1,27.8 28.9,14 \" />\n    <path d=\"M25.3,16.6\" />\n    <line x1=\"28.9\" y1=\"14\" x2=\"34\" y2=\"19.1\" />\n    <line x1=\"24.8\" y1=\"18.1\" x2=\"29.9\" y2=\"23.2\" />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport IconEdit from \"@/components/ui/icon/IconEdit.vue\";\n\nexport default defineComponent({\n  components: {\n    IconEdit,\n  },\n  props: {\n    title: {\n      type: String,\n      required: false,\n      default: null,\n    },\n    outlined: {\n      type: Boolean,\n      default: true,\n    },\n    readonly: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props, { attrs, emit }) {\n    const isEditable = computed(() => {\n      if (props.readonly) {\n        return false;\n      }\n      return !!attrs.onEdit;\n    });\n    const handleEdit = () => {\n      if (!isEditable.value) {\n        return;\n      }\n      emit(\"edit\");\n    };\n    return {\n      isEditable,\n      handleEdit,\n    };\n  },\n});\n</script>\n\n<template>\n  <section\n    class=\"section\"\n    :class=\"{\n      'is-outlined': outlined,\n      'is-readonly': readonly,\n      'is-editable': isEditable,\n    }\"\n  >\n    <div class=\"title\" v-if=\"title\" v-text=\"title\" />\n    <div class=\"panel\" @click=\"handleEdit\">\n      <slot name=\"default\" />\n      <div v-if=\"isEditable\" class=\"panel-icon\">\n        <IconEdit :scale=\"0.75\" />\n      </div>\n    </div>\n  </section>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n\n.section {\n  margin: 2rem 0;\n\n  .title {\n    padding-bottom: 0.4rem;\n\n    @include responsive.bp-medium {\n      @include typo.small;\n\n      padding-bottom: 0.6rem;\n    }\n  }\n\n  &.is-readonly {\n    pointer-events: none;\n  }\n\n  &.is-outlined {\n    .panel {\n      min-height: 46px;\n      padding: 0.75rem;\n      border: 1px solid rgb(var(--c-dark) / 20%);\n\n      [data-theme=\"dark\"] & {\n        border-color: rgb(var(--c-dark) / 5%);\n        background: rgb(var(--c-dark) / 5%);\n      }\n    }\n  }\n\n  &.is-editable {\n    /* stylelint-disable-next-line no-descending-specificity */\n    .panel {\n      cursor: pointer;\n      position: relative;\n      transition: background 200ms, border 200ms;\n\n      @include responsive.on-hover {\n        background: rgb(var(--c-dark) / 10%);\n      }\n\n      .panel-icon {\n        top: 0;\n        position: absolute;\n        right: 0;\n      }\n    }\n\n    &.is-outlined {\n      .panel {\n        @include responsive.on-hover {\n          border-color: rgb(var(--c-dark) / 1%);\n        }\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { defineComponent, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { useIntervalFn } from \"@vueuse/core\";\nimport QrcodeVue from \"qrcode.vue\";\n\nimport { getSignedLoginCredentials } from \"@/api/account\";\nimport type { User } from \"@/typings/api\";\n\nimport Section from \"../settings/Section.vue\";\n\nexport default defineComponent({\n  props: {\n    user: {\n      type: Object as PropType<User>,\n      required: true,\n    },\n  },\n  components: {\n    Section,\n    QrcodeVue,\n  },\n  setup() {\n    const { t } = useI18n();\n    const signedLoginUrl = ref(\"\");\n    const size = 200;\n    const loadCredentials = async () => {\n      const response = await getSignedLoginCredentials();\n      signedLoginUrl.value = response.signedLoginUrl;\n    };\n    useIntervalFn(\n      async () => {\n        await loadCredentials();\n      },\n      5 * 60 * 1000, // every 5 minutes\n      { immediateCallback: true }\n    );\n    return {\n      t,\n      signedLoginUrl,\n      size,\n    };\n  },\n});\n</script>\n\n<template>\n  <Section class=\"qr-code-login\" :title=\"t('account.qrcode.title')\" :outlined=\"false\">\n    <div class=\"info\">\n      <p v-text=\"t('account.qrcode.info')\" />\n    </div>\n    <div class=\"code\">\n      <qrcode-vue\n        v-if=\"signedLoginUrl\"\n        class=\"qr-code\"\n        :value=\"signedLoginUrl\"\n        :size=\"size\"\n        level=\"H\"\n      />\n    </div>\n  </Section>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.qr-code-login {\n  .info {\n    padding: 0.5rem 2rem 1rem 0;\n    opacity: 0.5;\n  }\n\n  .code {\n    max-width: 240px;\n\n    .qr-code {\n      aspect-ratio: 1;\n      min-width: 100%;\n      height: 100% !important;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent, ref } from \"vue\";\n// import { types } from 'sass';\n// import Number = types.Number;\n\ntype Option = {\n  value?: string;\n  name?: string;\n  selected?: boolean;\n};\n\nexport default defineComponent({\n  props: {\n    modelValue: {\n      type: [String, Number],\n      default: null,\n      required: true,\n    },\n    options: {\n      type: Array as PropType<Array<Option>>,\n      default: () => [],\n    },\n    label: {\n      type: String,\n      default: \"\",\n    },\n    autocomplete: {\n      type: String,\n      default: \"none\",\n    },\n    placeholder: {\n      type: String,\n      default: \"\",\n    },\n    minlength: {\n      type: Number,\n      default: 0,\n    },\n    maxlength: {\n      type: Number,\n      default: 128,\n    },\n  },\n  emits: [\"keyup\", \"change\", \"update:modelValue\"],\n  setup(props, { emit }) {\n    const id = ref(`form-text-input-${Math.random().toString(36).slice(2)}`);\n    const update = (value: string) => {\n      emit(\"update:modelValue\", value);\n    };\n    const annotatedOptions = computed(() => {\n      return props.options.map((t: Option) => {\n        return {\n          ...t,\n          selected: t.value === props.modelValue,\n        };\n      });\n    });\n    return {\n      id,\n      annotatedOptions,\n      update,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"select-input\">\n    <label v-if=\"label\" :for=\"id\" v-text=\"label\" />\n    <select :id=\"id\" :value=\"modelValue\" @input=\"update(($event.target as HTMLInputElement).value)\">\n      <optgroup>\n        <option\n          v-for=\"option in annotatedOptions\"\n          :key=\"`${id}-${option.value}`\"\n          :value=\"option.value\"\n          :selected=\"modelValue === option.value\"\n          v-text=\"option.name\"\n        />\n      </optgroup>\n    </select>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/form\";\n\n.select-input {\n  display: grid;\n  grid-template-rows: 1rem auto;\n  gap: 1rem;\n  color: rgb(var(--c-dark) / 100%);\n\n  label {\n    cursor: unset;\n  }\n\n  select {\n    @include typo.large;\n    @include typo.bold;\n\n    display: grid;\n    width: 100%;\n    padding: 0.125em 0.5em;\n    color: currentcolor;\n    background: transparent;\n    border: 1px solid rgb(var(--c-dark) / 20%);\n    border-radius: 3px;\n    transition: 100ms background ease-in-out, 100ms border-color ease-in-out;\n    appearance: none; // NOTE: do we need a custom input here?\n\n    @include responsive.bp-medium {\n      min-height: 2.25rem;\n    }\n\n    &:focus {\n      background: rgb(var(--c-dark) / 10%);\n      border-color: transparent;\n      outline: none;\n    }\n\n    > optgroup {\n      @include typo.default;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    modelValue: {\n      type: [String, Number],\n      default: \"\",\n      required: true,\n    },\n    type: {\n      type: String,\n      default: \"text\",\n    },\n    label: {\n      type: String,\n      default: \"\",\n    },\n    errors: {\n      type: Array,\n      default: () => [],\n    },\n    autocomplete: {\n      type: String,\n      default: \"none\",\n    },\n    placeholder: {\n      type: String,\n      default: \"\",\n    },\n    minlength: {\n      type: Number,\n      default: 0,\n    },\n    maxlength: {\n      type: Number,\n      default: 128,\n    },\n    minValue: {\n      type: Number,\n      default: null,\n    },\n    maxValue: {\n      type: Number,\n      default: null,\n    },\n  },\n  emits: [\"keyup\", \"change\", \"update:modelValue\"],\n  setup(props, { emit }) {\n    const id = ref(`form-text-input-${Math.random().toString(36).slice(2)}`);\n    const update = (value: string) => emit(\"update:modelValue\", value);\n    const hasError = computed(() => props.errors.length > 0);\n    return {\n      id,\n      update,\n      hasError,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"text-input\" :class=\"{ 'has-error': hasError }\">\n    <div class=\"top\">\n      <label v-if=\"label\" :for=\"id\" v-text=\"label\" />\n      <div v-if=\"errors?.length\" class=\"errors\">\n        <span v-for=\"(error, index) in errors\" :key=\"`input-error-${id}-${index}`\" v-text=\"error\" />\n      </div>\n    </div>\n    <input\n      :id=\"id\"\n      :value=\"modelValue\"\n      :type=\"type\"\n      :autocomplete=\"autocomplete\"\n      :minlength=\"minlength\"\n      :maxlength=\"maxlength\"\n      :placeholder=\"placeholder\"\n      :min=\"minValue\"\n      :max=\"maxValue\"\n      @keyup=\"$emit('keyup')\"\n      @change=\"$emit('change')\"\n      @input=\"update(($event.target as HTMLInputElement).value)\"\n    />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/form\";\n\n.text-input {\n  display: grid;\n  grid-template-rows: 1rem auto;\n  column-gap: 1rem;\n  row-gap: 1rem;\n  color: rgb(var(--c-dark) / 100%);\n\n  .top {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    grid-gap: 1rem;\n    align-items: center;\n\n    label {\n      cursor: unset;\n    }\n\n    .errors {\n      @include typo.light;\n      @include typo.small;\n\n      color: rgb(var(--c-red) / 100%);\n      text-align: right;\n\n      @include responsive.bp-medium {\n        display: none;\n      }\n    }\n  }\n\n  input {\n    @include typo.large;\n    @include typo.bold;\n\n    display: grid;\n    width: 100%;\n    padding: 0.125em 0.5em;\n    color: currentcolor;\n    background: transparent;\n    border: 1px solid rgb(var(--c-dark) / 20%);\n    border-radius: 3px;\n    transition: 100ms background ease-in-out, 100ms border-color ease-in-out;\n\n    @include responsive.bp-medium {\n      min-height: 2.25rem;\n    }\n\n    &:focus {\n      background: rgb(var(--c-dark) / 10%);\n      border-color: transparent;\n      outline: none;\n    }\n\n    &:not(:valid) {\n      background: rgb(var(--c-warning) / 10%);\n    }\n  }\n\n  &.has-error {\n    input {\n      border-color: rgb(var(--c-red) / 100%);\n    }\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { onMounted, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport type { AxiosError } from \"axios\";\n\nimport { getAddressCountries, updateAddress } from \"@/api/account\";\nimport AsyncButton from \"@/components/ui/button/AsyncButton.vue\";\nimport ApiErrors from \"@/components/ui/error/ApiErrors.vue\";\nimport SelectInput from \"@/components/ui/form/SelectInput.vue\";\nimport TextInput from \"@/components/ui/form/TextInput.vue\";\nimport type { Address } from \"@/typings\";\n\nconst props = defineProps<{\n  address: Address;\n}>();\n\nconst emit = defineEmits([\"updated\"]);\n\nconst { t } = useI18n();\nconst countryOptions = ref<Array<{ value: string; name: string }>>([]);\nconst line1 = ref(props.address.line1);\nconst line2 = ref(props.address.line2);\nconst postalCode = ref(props.address.postalCode);\nconst city = ref(props.address.city);\nconst country = ref(props.address.country);\nconst errors = ref<Array<string | AxiosError>>([]);\nconst submitForm = async () => {\n  errors.value = [];\n  try {\n    await updateAddress({\n      line1: line1.value,\n      line2: line2.value,\n      postalCode: postalCode.value,\n      city: city.value,\n      country: country.value,\n    });\n    emit(\"updated\");\n  } catch (err: unknown) {\n    const error = err as AxiosError;\n    errors.value = [error];\n  }\n};\nonMounted(async () => {\n  if (!countryOptions.value.length) {\n    const countries = await getAddressCountries();\n    countryOptions.value = countries.map((item) => {\n      return { value: item.iso2Code, name: item.name };\n    });\n  }\n});\n</script>\n\n<template>\n  <form class=\"form\" @submit.prevent=\"submitForm\">\n    <div class=\"input-container\">\n      <TextInput v-model=\"line1\" type=\"text\" :label=\"t('account.settings.address.labelLine1')\" />\n    </div>\n    <div class=\"input-container\">\n      <TextInput v-model=\"line2\" type=\"text\" :label=\"t('account.settings.address.labelLine2')\" />\n    </div>\n    <div class=\"input-container input-container--1-3\">\n      <TextInput\n        v-model=\"postalCode\"\n        type=\"text\"\n        :label=\"t('account.settings.address.labelPostalCode')\"\n      />\n      <TextInput v-model=\"city\" type=\"text\" :label=\"t('account.settings.address.labelCity')\" />\n    </div>\n    <div class=\"input-container\">\n      <SelectInput\n        v-model=\"country\"\n        :options=\"countryOptions\"\n        type=\"text\"\n        :label=\"t('account.settings.address.labelCountry')\"\n      />\n    </div>\n    <div class=\"form-errors\" v-if=\"errors.length\">\n      <ApiErrors :errors=\"errors\" />\n    </div>\n    <div class=\"input-container submit\">\n      <AsyncButton class=\"button\" @click.prevent=\"submitForm\">\n        {{ t(\"formActions.save\") }}\n      </AsyncButton>\n    </div>\n  </form>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/form\";\n\n.form {\n  @include form.default;\n\n  .input-container {\n    @include form.top-label;\n\n    &--1-3 {\n      display: grid;\n      grid-gap: 1rem;\n      grid-template-columns: 1fr 3fr;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport OverlayPanel from \"@/components/ui/panel/OverlayPanel.vue\";\n\nimport Form from \"./AddressForm.vue\";\nimport Section from \"./Section.vue\";\n\nexport default defineComponent({\n  components: {\n    Section,\n    OverlayPanel,\n    Form,\n  },\n  props: {\n    address: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n  emits: [\"updated\"],\n  setup(props, { emit }) {\n    const { t } = useI18n();\n    const formVisible = ref(false);\n    const showForm = () => {\n      formVisible.value = true;\n    };\n    const hideForm = async () => {\n      formVisible.value = false;\n    };\n    const onUpdated = async () => {\n      await hideForm();\n      emit(\"updated\");\n    };\n    const onEdit = () => {\n      showForm();\n    };\n    return {\n      t,\n      onEdit,\n      formVisible,\n      hideForm,\n      onUpdated,\n    };\n  },\n});\n</script>\n\n<template>\n  <Section :title=\"t('account.settings.address.title')\" @edit=\"onEdit\">\n    <div v-if=\"address\">\n      <p v-if=\"address.line1\" v-text=\"address.line1\" />\n      <p v-if=\"address.line2\" v-text=\"address.line2\" />\n      <p>\n        <span\n          v-if=\"address.country\"\n          v-text=\"`${address.country}${address.postalCode ? '-' : ''}`\"\n        />\n        <span\n          v-if=\"address.postalCode\"\n          v-text=\"`${address.postalCode}${address.country ? ' ' : ''}`\"\n        />\n        <span v-if=\"address.city\" v-text=\"address.city\" />\n      </p>\n    </div>\n    <p v-else v-text=\"`---`\" />\n  </Section>\n  <OverlayPanel\n    :is-visible=\"formVisible\"\n    @close=\"hideForm\"\n    :title=\"t('account.settings.address.title')\"\n  >\n    <Form :address=\"address || {}\" @updated=\"onUpdated\" />\n  </OverlayPanel>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, defineProps } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport Datetime from \"@/components/ui/date/Datetime.vue\";\nimport eventBus from \"@/eventBus\";\n\nimport Section from \"./Section.vue\";\n\nconst STRIPE_SELF_SERVICE_PORTAL_URL = \"https://billing.stripe.com/p/login/4gM00jbVbcOD2405M11oI00\";\n\nconst props = defineProps<{\n  donations?: any[];\n}>();\n\nconst { t } = useI18n();\n\nconst recurringDonations = computed(() => {\n  return props.donations?.filter((d) => d.kind === \"recurring\" && d.state === \"active\") || [];\n});\n\nconst singleDonations = computed(() => {\n  return props.donations?.filter((d) => d.kind === \"single\" && d.state === \"succeeded\") || [];\n});\n\nconst createDonation = () => {\n  eventBus.emit(\"donation:showPanel\");\n};\n\nconst cancelDonation = (uid: string) => {\n  console.debug(\"cancelDonation\", uid);\n  // NOTE: for the moment we just open the stripe self-service portal\n  window.open(STRIPE_SELF_SERVICE_PORTAL_URL, \"_blank\");\n};\n</script>\n\n<template>\n  <Section :title=\"t('account.settings.donations.title')\" :outlined=\"false\">\n    <div class=\"info\">\n      <i18n-t keypath=\"account.settings.donations.info\" tag=\"p\" />\n    </div>\n    <div v-if=\"!recurringDonations.length\" class=\"create-donation\">\n      <div>\n        <button @click.prevent=\"createDonation()\">Spende einrichten</button>\n      </div>\n    </div>\n    <div v-if=\"recurringDonations.length\" class=\"donations donations--recurring\">\n      <p class=\"info\">Wiederkehrende Spenden</p>\n      <div\n        v-for=\"donation in recurringDonations\"\n        :key=\"`recurring-donation-${donation.uid}`\"\n        class=\"donation donation--recurring\"\n      >\n        <div class=\"amount\">\n          <span v-text=\"donation.currency\" />\n          <span\n            v-text=\"\n              parseFloat(donation.amount).toLocaleString('de-CH', {\n                minimumFractionDigits: 2,\n                maximumFractionDigits: 2,\n              })\n            \"\n          />\n        </div>\n        <div class=\"created\">\n          <!--\n          <Datetime :value=\"donation.created\" />\n          -->\n        </div>\n        <div class=\"state\">{{ donation.state }}</div>\n        <div class=\"actions\">\n          <button @click.prevent=\"cancelDonation(donation.uid)\" class=\"button button--cancel\">\n            Beenden\n          </button>\n        </div>\n      </div>\n    </div>\n    <div v-if=\"singleDonations.length\" class=\"donations donations--single\">\n      <p class=\"info\">Einmalige Spenden</p>\n      <div\n        v-for=\"donation in singleDonations\"\n        :key=\"`single-donation-${donation.uid}`\"\n        class=\"donation donation--single\"\n        :class=\"`donation--${donation.state}`\"\n      >\n        <div class=\"amount\">\n          <span v-text=\"donation.currency\" />\n          <span\n            v-text=\"\n              parseFloat(donation.amount).toLocaleString('de-CH', {\n                minimumFractionDigits: 2,\n                maximumFractionDigits: 2,\n              })\n            \"\n          />\n        </div>\n        <div class=\"created\">\n          <Datetime :value=\"donation.created\" />\n        </div>\n        <div class=\"state\">{{ donation.state }}</div>\n        <div />\n      </div>\n    </div>\n  </Section>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/button\";\n\n.info {\n  padding: 0 2rem 1rem 0;\n  opacity: 0.5;\n  white-space: pre-line;\n\n  @include responsive.bp-medium {\n    @include typo.small;\n  }\n}\n\n.create-donation {\n  margin-top: 1rem;\n  display: flex;\n  justify-content: center;\n\n  button {\n    @include button.outlined(2.5rem);\n\n    min-width: 33%;\n  }\n}\n\n.donations {\n  margin-top: 1rem;\n\n  .donation {\n    display: grid;\n    grid-template-columns: 120px auto 100px 120px;\n    grid-gap: 0.25rem;\n    align-items: center;\n    margin-bottom: 0.5rem;\n    padding: 0.25rem 0.25rem 0.25rem 1rem;\n    color: rgb(var(--c-dark));\n\n    &--recurring {\n      border: 1px solid rgb(var(--c-dark) / 20%);\n      border-radius: 3px;\n    }\n\n    &--single {\n      background: rgb(var(--c-dark) / 2.5%);\n      border-radius: 3px;\n    }\n\n    &--succeeded {\n      background: rgb(var(--c-green) / 10%);\n      border-radius: 3px;\n    }\n\n    > .amount {\n      display: flex;\n      gap: 0.25rem;\n    }\n\n    > .created {\n      @include typo.light;\n    }\n\n    > .state {\n      @include typo.tiny;\n      @include typo.light;\n\n      text-transform: uppercase;\n    }\n\n    > .actions {\n      .button {\n        @include typo.tiny;\n\n        min-width: 120px;\n        padding: 0.75rem 1.5rem;\n        background: rgb(var(--c-dark) / 10%);\n        border: 0;\n        cursor: pointer;\n        color: rgb(var(--c-dark));\n        text-transform: uppercase;\n\n        [data-theme=\"dark\"] & {\n          background: rgb(var(--c-dark) / 10%);\n        }\n\n        &--cancel {\n          background: rgb(var(--c-red) / 10%);\n          color: rgb(var(--c-red));\n\n          &:hover {\n            background: rgb(var(--c-red) / 15%);\n          }\n        }\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport * as EmailValidator from \"email-validator\";\nimport type { AxiosError } from \"axios\";\n\nimport { updateEmail } from \"@/api/account\";\nimport AsyncButton from \"@/components/ui/button/AsyncButton.vue\";\nimport ApiErrors from \"@/components/ui/error/ApiErrors.vue\";\nimport TextInput from \"@/components/ui/form/TextInput.vue\";\n\nconst props = defineProps<{\n  currentEmail: string;\n}>();\n\nconst emit = defineEmits([\"updated\"]);\n\nconst { t } = useI18n();\nconst email = ref(props.currentEmail);\nconst formValid = ref(false);\nconst errors = ref<Array<string | AxiosError>>([]);\nconst handleInput = () => {\n  formValid.value = EmailValidator.validate(email.value);\n};\nconst submitForm = async () => {\n  errors.value = [];\n  try {\n    await updateEmail(email.value);\n    emit(\"updated\");\n  } catch (err: unknown) {\n    const error = err as AxiosError;\n    errors.value = [error];\n  }\n};\n</script>\n\n<template>\n  <form class=\"form\" @submit.prevent=\"submitForm\">\n    <div class=\"input-container\">\n      <TextInput\n        v-model=\"email\"\n        @keyup=\"handleInput\"\n        type=\"email\"\n        :label=\"t('account.settings.email.labelEmail')\"\n        :minlength=\"8\"\n        :maxlength=\"64\"\n      />\n    </div>\n    <div class=\"form-errors\" v-if=\"errors.length\">\n      <ApiErrors :errors=\"errors\" />\n    </div>\n    <div class=\"input-container submit\">\n      <AsyncButton class=\"button\" @click.prevent=\"submitForm\" :disabled=\"!formValid\">\n        {{ t(\"formActions.save\") }}\n      </AsyncButton>\n    </div>\n  </form>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/form\";\n\n.form {\n  @include form.default;\n\n  .input-container {\n    @include form.top-label;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport OverlayPanel from \"@/components/ui/panel/OverlayPanel.vue\";\n\nimport Form from \"./EmailForm.vue\";\nimport Section from \"./Section.vue\";\n\nexport default defineComponent({\n  components: {\n    Section,\n    OverlayPanel,\n    Form,\n  },\n  props: {\n    user: {\n      type: Object,\n      required: true,\n      default: () => ({}),\n    },\n  },\n  emits: [\"updated\"],\n  setup(props, { emit }) {\n    const { t } = useI18n();\n    const formVisible = ref(false);\n    const showForm = () => {\n      formVisible.value = true;\n    };\n    const hideForm = async () => {\n      formVisible.value = false;\n    };\n    const onUpdated = async () => {\n      await hideForm();\n      emit(\"updated\");\n    };\n    const onEdit = () => {\n      showForm();\n    };\n    return {\n      t,\n      onEdit,\n      formVisible,\n      hideForm,\n      onUpdated,\n    };\n  },\n});\n</script>\n\n<template>\n  <Section :title=\"t('account.settings.email.title')\" @edit=\"onEdit\">\n    <p v-text=\"user.email\" />\n  </Section>\n  <OverlayPanel\n    :is-visible=\"formVisible\"\n    @close=\"hideForm\"\n    :title=\"t('account.settings.email.title')\"\n  >\n    <Form :current-email=\"user.email\" @updated=\"onUpdated\" />\n  </OverlayPanel>\n</template>\n","import { APIClient } from \"@/api/client\";\nimport { useAPIBaseUrl } from \"@/composables/api\";\nimport type { Newsletter } from \"@/typings/api\";\n\nconst { APIBaseUrl } = useAPIBaseUrl();\n\nconst NEWSLETTER_ENDPOINT = `${APIBaseUrl.value}newsletter/`;\n\nexport async function getNewsletters() {\n  const url = `${NEWSLETTER_ENDPOINT}newsletters/`;\n  const response = await APIClient.get<Newsletter[]>(url);\n  return response.data;\n}\n\nexport async function updateSubscriptions(subscriptions: string[] = []) {\n  const url = `${NEWSLETTER_ENDPOINT}newsletters/`;\n  const payload = {\n    newsletterUids: subscriptions,\n  };\n  const response = await APIClient.post<Newsletter[]>(url, payload);\n  return response.data;\n}\n","<script lang=\"ts\">\nimport { defineComponent, onActivated, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport { getNewsletters, updateSubscriptions } from \"@/api/newsletter\";\nimport AsyncButton from \"@/components/ui/button/AsyncButton.vue\";\nimport OverlayPanel from \"@/components/ui/panel/OverlayPanel.vue\";\nimport type { Newsletter } from \"@/typings/api\";\n\nimport Section from \"./Section.vue\";\n\nexport default defineComponent({\n  components: {\n    Section,\n    OverlayPanel,\n    AsyncButton,\n  },\n  setup() {\n    const { t } = useI18n();\n    // const newsletters = ref([]);\n    const newsletters = ref<Array<Newsletter>>([]);\n    const subscriptions = ref<Array<string>>([]);\n    const formVisible = ref(false);\n    const showForm = () => (formVisible.value = true);\n    const hideForm = async () => (formVisible.value = false);\n    const loadNewsletters = async () => {\n      newsletters.value = await getNewsletters();\n      subscriptions.value = newsletters.value.filter((n) => n.isSubscribed).map((n) => n.uid);\n    };\n    const submitForm = async () => {\n      await updateSubscriptions(subscriptions.value);\n      await loadNewsletters();\n      await hideForm();\n    };\n    onActivated(loadNewsletters);\n    return {\n      t,\n      newsletters,\n      subscriptions,\n      formVisible,\n      showForm,\n      hideForm,\n      submitForm,\n    };\n  },\n});\n</script>\n\n<template>\n  <Section :title=\"t('account.settings.newsletter.title')\" @edit=\"showForm\">\n    <div v-for=\"newsletter in newsletters\" :key=\"newsletter.uid\" class=\"newsletter\">\n      <div>\n        <span v-if=\"newsletter.isSubscribed\">&#9679;</span>\n        <span v-else>&#9675;</span>\n      </div>\n      <div>\n        <div v-text=\"newsletter.title\"></div>\n      </div>\n    </div>\n  </Section>\n  <OverlayPanel\n    :is-visible=\"formVisible\"\n    @close=\"hideForm\"\n    :title=\"t('account.settings.newsletter.title')\"\n  >\n    <form class=\"form\" @submit.prevent=\"submitForm\">\n      <div class=\"input-container subscriptions\">\n        <label\n          v-for=\"newsletter in newsletters\"\n          :key=\"`${newsletter.uid}-input`\"\n          class=\"subscription\"\n        >\n          <input\n            class=\"input\"\n            type=\"checkbox\"\n            name=\"subscriptions\"\n            :value=\"newsletter.uid\"\n            v-model=\"subscriptions\"\n          />\n          <span class=\"title\" v-text=\"newsletter.title\" />\n          <span class=\"description\" v-text=\"newsletter.description\" />\n        </label>\n      </div>\n      <div class=\"input-container submit\">\n        <AsyncButton class=\"button\" @click.prevent=\"submitForm\">\n          {{ t(\"formActions.save\") }}\n        </AsyncButton>\n      </div>\n    </form>\n  </OverlayPanel>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/form\";\n\n.newsletter {\n  display: flex;\n  gap: 1rem;\n}\n\n.form {\n  @include form.default;\n\n  .subscriptions {\n    display: flex;\n    flex-direction: column;\n\n    .subscription {\n      display: grid;\n      grid-template-areas:\n        \"checkbox title\"\n        \"checkbox description\";\n      grid-template-columns: 36px 1fr;\n      grid-column-gap: 1rem;\n      margin-bottom: 1rem;\n\n      > input {\n        height: 36px;\n        width: 36px;\n        grid-area: checkbox;\n        align-self: start;\n        margin-top: 4px;\n      }\n\n      > .title {\n        grid-area: title;\n\n        @include typo.large;\n      }\n\n      > .description {\n        grid-area: description;\n\n        @include typo.dim;\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport type { AxiosError } from \"axios\";\n\nimport { updatePassword } from \"@/api/account\";\nimport AsyncButton from \"@/components/ui/button/AsyncButton.vue\";\nimport ApiErrors from \"@/components/ui/error/ApiErrors.vue\";\nimport TextInput from \"@/components/ui/form/TextInput.vue\";\nimport { useAccount } from \"@/composables/account\";\n\nexport default defineComponent({\n  components: {\n    AsyncButton,\n    ApiErrors,\n    TextInput,\n  },\n  emits: [\"updated\"],\n  setup(props, { emit }) {\n    const { t } = useI18n();\n    const { user } = useAccount();\n    const password = ref(\"\");\n    const passwordConfirm = ref(\"\");\n    const formValid = ref(false);\n    const errors = ref<Array<string | AxiosError>>([]);\n    const handleInput = () => {\n      formValid.value = password.value.length > 0 && password.value === passwordConfirm.value;\n    };\n    const submitForm = async () => {\n      errors.value = [];\n      try {\n        await updatePassword(password.value);\n        emit(\"updated\");\n      } catch (err: unknown) {\n        const error = err as AxiosError;\n        errors.value = [error];\n      }\n    };\n    return {\n      t,\n      user,\n      password,\n      passwordConfirm,\n      errors,\n      handleInput,\n      formValid,\n      submitForm,\n    };\n  },\n});\n</script>\n\n<template>\n  <form class=\"form\" @submit.prevent=\"submitForm\">\n    <!--\n    we include a hidden reference for the \"username\" to coop with password managers\n    https://www.chromium.org/developers/design-documents/create-amazing-password-forms/\n    -->\n    <input v-show=\"false\" type=\"email\" autocomplete=\"username\" :value=\"user.email\" />\n    <div class=\"input-container\">\n      <TextInput\n        v-model=\"password\"\n        @keyup=\"handleInput\"\n        type=\"password\"\n        autocomplete=\"new-password\"\n        :label=\"t('account.settings.password.labelPassword')\"\n        :placeholder=\"t('account.settings.password.placeholderPassword')\"\n        :minlength=\"8\"\n        :maxlength=\"64\"\n      />\n    </div>\n    <div class=\"input-container\">\n      <TextInput\n        v-model=\"passwordConfirm\"\n        @keyup=\"handleInput\"\n        type=\"password\"\n        autocomplete=\"new-password\"\n        :label=\"t('account.settings.password.labelPasswordConfirm')\"\n        :placeholder=\"t('account.settings.password.placeholderPasswordConfirm')\"\n        :minlength=\"8\"\n        :maxlength=\"64\"\n      />\n    </div>\n    <div class=\"form-errors\" v-if=\"errors.length\">\n      <ApiErrors :errors=\"errors\" />\n    </div>\n    <div class=\"input-container submit\">\n      <AsyncButton class=\"button\" @click.prevent=\"submitForm\" :disabled=\"!formValid\">\n        {{ t(\"formActions.save\") }}\n      </AsyncButton>\n    </div>\n  </form>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/form\";\n\n.form {\n  @include form.default;\n\n  .input-container {\n    @include form.top-label;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport OverlayPanel from \"@/components/ui/panel/OverlayPanel.vue\";\n\nimport Form from \"./PasswordForm.vue\";\nimport Section from \"./Section.vue\";\n\nexport default defineComponent({\n  components: {\n    Section,\n    OverlayPanel,\n    Form,\n  },\n  setup() {\n    const { t } = useI18n();\n    const formVisible = ref(false);\n    const showForm = () => {\n      formVisible.value = true;\n    };\n    const hideForm = () => {\n      formVisible.value = false;\n    };\n    const onEdit = () => {\n      showForm();\n    };\n    return {\n      t,\n      onEdit,\n      formVisible,\n      hideForm,\n    };\n  },\n});\n</script>\n\n<template>\n  <Section :title=\"t('account.settings.password.title')\" @edit=\"onEdit\">\n    <p class=\"user-details\" v-text=\"`●●●●●●●●`\" />\n  </Section>\n  <OverlayPanel\n    :is-visible=\"formVisible\"\n    @close=\"hideForm\"\n    :title=\"t('account.settings.password.title')\"\n  >\n    <Form @updated=\"hideForm\" />\n  </OverlayPanel>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport type { AxiosError } from \"axios\";\n\nimport { updateUser } from \"@/api/account\";\nimport AsyncButton from \"@/components/ui/button/AsyncButton.vue\";\nimport ApiErrors from \"@/components/ui/error/ApiErrors.vue\";\nimport SelectInput from \"@/components/ui/form/SelectInput.vue\";\nimport TextInput from \"@/components/ui/form/TextInput.vue\";\n\nexport default defineComponent({\n  components: {\n    AsyncButton,\n    ApiErrors,\n    TextInput,\n    SelectInput,\n  },\n  props: {\n    user: {\n      type: Object,\n      required: true,\n      default: () => ({}),\n    },\n  },\n  emits: [\"updated\"],\n  setup(props, { emit }) {\n    const { t } = useI18n();\n    const gender = ref(props.user.gender);\n    const genderOptions = [\n      {\n        value: \"female\",\n        name: t(\"account.settings.personal.gender.options.female\"),\n      },\n      {\n        value: \"male\",\n        name: t(\"account.settings.personal.gender.options.male\"),\n      },\n      {\n        value: \"other\",\n        name: t(\"account.settings.personal.gender.options.other\"),\n      },\n    ];\n    const firstName = ref(props.user.firstName);\n    const lastName = ref(props.user.lastName);\n    const favoriteVenue = ref(props.user.favoriteVenue);\n    const yearOfBirth = ref(props.user.yearOfBirth);\n    const formValid = ref(false);\n    const errors = ref<Array<string | AxiosError>>([]);\n    const formErrors = ref<Array<string>>([]);\n    const submitForm = async () => {\n      errors.value = [];\n      formErrors.value = [];\n      try {\n        await updateUser({\n          gender: gender.value,\n          firstName: firstName.value,\n          lastName: lastName.value,\n          favoriteVenue: favoriteVenue.value,\n          yearOfBirth: yearOfBirth.value ? yearOfBirth.value : null,\n        });\n        emit(\"updated\");\n      } catch (err: unknown) {\n        const error = err as AxiosError;\n        errors.value = [error];\n        formErrors.value = error.response?.data;\n      }\n    };\n    return {\n      t,\n      gender,\n      genderOptions,\n      firstName,\n      lastName,\n      yearOfBirth,\n      favoriteVenue,\n      formValid,\n      errors,\n      formErrors,\n      submitForm,\n    };\n  },\n});\n</script>\n\n<template>\n  <form class=\"form\" @submit.prevent=\"submitForm\">\n    <div class=\"input-container\">\n      <TextInput\n        v-model=\"firstName\"\n        type=\"text\"\n        :label=\"t('account.settings.personal.labelName')\"\n      />\n    </div>\n    <div class=\"input-container\">\n      <TextInput\n        v-model=\"lastName\"\n        type=\"text\"\n        :label=\"t('account.settings.personal.labelSurname')\"\n      />\n    </div>\n    <div class=\"input-container input-container--2-2\">\n      <TextInput\n        v-model=\"yearOfBirth\"\n        type=\"number\"\n        :min-value=\"1900\"\n        :max-value=\"2022\"\n        placeholder=\"19?? / 20??\"\n        :label=\"t('account.settings.personal.labelYearOfBirth')\"\n        :errors=\"formErrors?.yearOfBirth ?? []\"\n      />\n      <SelectInput\n        v-model=\"gender\"\n        :options=\"genderOptions\"\n        type=\"text\"\n        :label=\"t('account.settings.personal.gender.label')\"\n      />\n    </div>\n    <div class=\"input-container\">\n      <TextInput\n        v-model=\"favoriteVenue\"\n        type=\"text\"\n        :label=\"t('account.settings.personal.labelFavoriteVenue')\"\n      />\n    </div>\n    <div class=\"form-errors\" v-if=\"errors.length\">\n      <ApiErrors :errors=\"errors\" />\n    </div>\n    <div class=\"input-container submit\">\n      <AsyncButton class=\"button\" @click.prevent=\"submitForm\">\n        {{ t(\"formActions.save\") }}\n      </AsyncButton>\n    </div>\n  </form>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/form\";\n\n.form {\n  @include form.default;\n\n  .input-container {\n    @include form.top-label;\n\n    :deep(input) {\n      &::placeholder {\n        color: rgb(var(--c-dark) / 20%);\n      }\n    }\n\n    &--2-2 {\n      display: grid;\n      grid-gap: 1rem;\n      grid-template-columns: 2fr 2fr;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport OverlayPanel from \"@/components/ui/panel/OverlayPanel.vue\";\n\nimport Form from \"./PersonalForm.vue\";\nimport Section from \"./Section.vue\";\n\nexport default defineComponent({\n  components: {\n    Section,\n    OverlayPanel,\n    Form,\n  },\n  props: {\n    user: {\n      type: Object,\n      required: true,\n      default: () => ({}),\n    },\n  },\n  emits: [\"updated\"],\n  setup(props, { emit }) {\n    const { t } = useI18n();\n    const fullName = computed(() => {\n      if (props.user?.firstName && props.user?.lastName) {\n        return `${props.user.firstName} ${props.user.lastName}`;\n      }\n      if (props.user?.firstName) {\n        return props.user.firstName;\n      }\n      if (props.user?.lastName) {\n        return props.user.lastName;\n      }\n      return null;\n    });\n    const formVisible = ref(false);\n    const showForm = () => {\n      formVisible.value = true;\n    };\n    const hideForm = async () => {\n      formVisible.value = false;\n    };\n    const onUpdated = async () => {\n      await hideForm();\n      emit(\"updated\");\n    };\n    const onEdit = () => {\n      showForm();\n    };\n    return {\n      t,\n      fullName,\n      onEdit,\n      formVisible,\n      hideForm,\n      onUpdated,\n    };\n  },\n});\n</script>\n\n<template>\n  <Section :title=\"t('account.settings.personal.title')\" @edit=\"onEdit\">\n    <p v-if=\"fullName\" v-text=\"fullName\" />\n    <p v-else v-text=\"`---`\" />\n  </Section>\n  <OverlayPanel\n    :is-visible=\"formVisible\"\n    @close=\"hideForm\"\n    :title=\"t('account.settings.personal.title')\"\n  >\n    <Form :user=\"user\" @updated=\"onUpdated\" />\n  </OverlayPanel>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent, onMounted, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRoute } from \"vue-router\";\n\nimport { disconnectSocialBackend, getSocialBackends } from \"@/api/account\";\nimport imgApple from \"@/assets/brand-icons/apple.svg\";\nimport imgDeezer from \"@/assets/brand-icons/deezer.svg\";\nimport imgGoogle from \"@/assets/brand-icons/google.svg\";\nimport imgSpotify from \"@/assets/brand-icons/spotify.svg\";\nimport { useDevice } from \"@/composables/device\";\n\nimport Section from \"./Section.vue\";\n\nconst ICONS = {\n  apple: imgApple,\n  google: imgGoogle,\n  spotify: imgSpotify,\n  deezer: imgDeezer,\n};\n\ninterface Backend {\n  provider: string;\n  uid: string;\n  connectUrl: string;\n  disconnectUrl: string;\n  canDisconnect: boolean;\n}\n\nconst getProviderText = (provider: string) => {\n  const key = provider.split(\"-\")[0];\n  return `${key.charAt(0).toUpperCase().toUpperCase()}${key.slice(1)}`;\n};\n\nconst getProviderLogo = (provider: string) => {\n  const key = provider.split(\"-\")[0];\n  // @ts-ignore\n  return ICONS[key];\n};\n\nconst annotateBackends = (backends: Backend[]) => {\n  return backends.map((b: Backend) => {\n    return {\n      ...b,\n      title: getProviderText(b.provider),\n      image: getProviderLogo(b.provider),\n    };\n  });\n};\n\nexport default defineComponent({\n  components: {\n    Section,\n  },\n  props: {\n    next: {\n      type: String,\n      default: null,\n    },\n  },\n  setup(props) {\n    const { t } = useI18n();\n    const { isApp } = useDevice();\n    const route = useRoute();\n    const connected = ref<Array<Backend>>([]);\n    const auth = ref<Array<Backend>>([]);\n    const sync = ref<Array<Backend>>([]);\n    const fetchBackends = async () => {\n      connected.value = [];\n      auth.value = [];\n      sync.value = [];\n      const backends = await getSocialBackends();\n      // in the API we get all AUTH enabled backend - as it is the same endpoint as used during\n      // login. so we have to remove the already connected backends here:\n      const connectedProviders = backends.connected.map((be: Backend) => be.provider);\n      const disconnectedAuth = backends.auth.filter(\n        (be: Backend) => !connectedProviders.includes(be.provider)\n      );\n      connected.value = annotateBackends(backends.connected);\n      auth.value = annotateBackends(disconnectedAuth);\n      sync.value = annotateBackends(backends.sync);\n    };\n    const beginLogin = (backend: Backend) => {\n      if (isApp && backend.provider === \"google-oauth2\") {\n        console.debug(\"continue with app native google login\");\n        window.appBridge?.send(\"googleSignin:start\");\n        return;\n      }\n\n      if (isApp && backend.provider === \"apple-id\") {\n        console.debug(\"continue with app native apple-id login\");\n        window.appBridge?.send(\"appleSignin:start\");\n        return;\n      }\n\n      let nextUrl = backend.connectUrl;\n      if (props.next) {\n        // nextUrl += `?next=${props.next}#${backend.provider}`;\n        nextUrl += `?next=${props.next}#social-connected`;\n      }\n      window.location.href = nextUrl;\n    };\n    const disconnect = async (backend: Backend) => {\n      await disconnectSocialBackend(backend.provider, backend.uid);\n      await fetchBackends();\n    };\n    onMounted(() => {\n      fetchBackends();\n      if (route.hash === \"#social-connected\") {\n        setTimeout(() => {\n          document.querySelector(\"#social-connected\")?.scrollIntoView({\n            block: \"center\",\n          });\n        }, 1);\n      }\n    });\n\n    return {\n      t,\n      connected,\n      auth,\n      sync,\n      beginLogin,\n      disconnect,\n    };\n  },\n});\n</script>\n\n<template>\n  <Section :outlined=\"false\" :title=\"t('account.settings.social.title')\">\n    <!--\n    <div class=\"info\">\n      <p v-text=\"t('account.settings.social.info')\" />\n    </div>\n    -->\n    <div id=\"social-connected\" />\n    <div\n      v-for=\"backend in connected\"\n      :key=\"`auth-backend-${backend.provider}`\"\n      class=\"backend\"\n      :class=\"`backend--${backend.provider}`\"\n    >\n      <img class=\"logo\" :src=\"backend.image\" />\n      <p class=\"title\">\n        {{ backend.title }}\n        <span v-if=\"backend.uid\" class=\"uid\" v-text=\"backend.uid\" />\n      </p>\n      <div v-if=\"backend.kind === 'sync'\" class=\"streaming-sync\">\n        <button class=\"button\" v-text=\"backend.provider\" />\n      </div>\n      <button\n        @click=\"disconnect(backend)\"\n        class=\"button button--disconnect\"\n        :class=\"{ 'is-disabled': !backend.canDisconnect }\"\n        :disabled=\"!backend.canDisconnect\"\n        v-text=\"t('account.settings.social.disconnect')\"\n      />\n    </div>\n  </Section>\n  <Section\n    v-if=\"auth.length\"\n    :outlined=\"false\"\n    :title=\"t('account.settings.social.loginAccounts.title')\"\n  >\n    <div\n      v-for=\"backend in auth\"\n      :key=\"`auth-backend-${backend.provider}`\"\n      class=\"backend\"\n      :class=\"`backend--${backend.provider}`\"\n    >\n      <img class=\"logo\" :src=\"backend.image\" />\n      <p class=\"title\" v-text=\"backend.title\" />\n      <button\n        @click=\"beginLogin(backend)\"\n        class=\"button button--connect\"\n        v-text=\"t('account.settings.social.connect')\"\n      />\n    </div>\n  </Section>\n  <Section\n    v-if=\"sync.length\"\n    :outlined=\"false\"\n    :title=\"t('account.settings.social.streamingAccounts.title')\"\n  >\n    <!---->\n    <div class=\"info\">\n      <p v-text=\"t('account.settings.social.streamingAccounts.info')\" />\n    </div>\n    <div\n      v-for=\"backend in sync\"\n      :key=\"`auth-backend-${backend.provider}`\"\n      class=\"backend\"\n      :class=\"`backend--${backend.provider}`\"\n    >\n      <img class=\"logo\" :src=\"backend.image\" />\n      <p class=\"title\" v-text=\"backend.title\" />\n      <button\n        @click=\"beginLogin(backend)\"\n        class=\"button button--connect\"\n        v-text=\"t('account.settings.social.connect')\"\n      />\n    </div>\n  </Section>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n\n.info {\n  padding: 0.5rem 2rem 1rem 0;\n  opacity: 0.5;\n  white-space: pre-line;\n\n  @include responsive.bp-medium {\n    @include typo.small;\n  }\n}\n\n.backend {\n  display: grid;\n  grid-template-columns: 28px auto 120px;\n  grid-gap: 0.25rem;\n  align-items: center;\n  margin-bottom: 0.5rem;\n  padding: 0.25rem 0.25rem 0.25rem 1rem;\n  color: rgb(var(--c-dark));\n  border: 1px solid rgb(var(--c-dark) / 20%);\n  border-radius: 3px;\n\n  &:has(.streaming-sync) {\n    grid-template-columns: 28px auto 120px 120px;\n  }\n\n  [data-theme=\"dark\"] & {\n    border-color: rgb(var(--c-dark) / 5%);\n    background: rgb(var(--c-dark) / 5%);\n  }\n\n  &:hover {\n    background: rgb(var(--c-dark) / 1%);\n  }\n\n  .logo {\n    height: 1.5rem;\n    margin-right: 1rem;\n  }\n\n  .title {\n    flex-grow: 1;\n    line-height: 1rem;\n\n    .uid {\n      @include typo.small;\n      @include typo.dim;\n\n      margin-left: 0.5rem;\n\n      @include responsive.bp-medium {\n        display: none;\n        margin-left: 0;\n      }\n    }\n  }\n\n  .button {\n    @include typo.tiny;\n\n    min-width: 120px;\n    padding: 0.75rem 1.5rem;\n    background: rgb(var(--c-dark) / 10%);\n    border: 0;\n    cursor: pointer;\n    color: rgb(var(--c-dark));\n    text-transform: uppercase;\n\n    [data-theme=\"dark\"] & {\n      background: rgb(var(--c-dark) / 10%);\n    }\n\n    &:disabled {\n      cursor: not-allowed;\n    }\n\n    &--connect {\n      background: rgb(var(--c-green) / 10%);\n      color: rgb(var(--c-green));\n\n      &:hover {\n        background: rgb(var(--c-green) / 15%);\n      }\n    }\n\n    &--disconnect {\n      background: rgb(var(--c-red) / 10%);\n      color: rgb(var(--c-red));\n\n      &:hover {\n        background: rgb(var(--c-red) / 15%);\n      }\n    }\n  }\n\n  /*\n  &--spotify {\n    color: rgb(var(--c-light));\n    background: #1877f2;\n    border-color: #1877f2;\n  }\n  */\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport { useDevice } from \"@/composables/device\";\nimport { useSettings } from \"@/composables/settings\";\n\nimport Section from \"./Section.vue\";\n\nconst BANDWITH_CHOICES = [\n  {\n    value: 720000,\n    title: \"512 Kb/s\",\n    description: \"HiFi · 200 Mb/h\",\n  },\n  {\n    value: 200000,\n    title: \"128 Kb/s\",\n    description: \"Eco · 50 Mb/h\",\n  },\n  // {\n  //   value: 56000,\n  //   title: \"36 Kb/s\",\n  //   description: \"Super-Eco: 15 Mb/h\",\n  // },\n];\n\nexport default defineComponent({\n  components: {\n    Section,\n  },\n  setup() {\n    const { t } = useI18n();\n    const { isDesktop } = useDevice();\n    const maxBandwidthChoices = BANDWITH_CHOICES;\n    const { maxBandwidth, setMaxBandwidth } = useSettings();\n    return {\n      t,\n      isDesktop,\n      maxBandwidth,\n      maxBandwidthChoices,\n      setMaxBandwidth,\n    };\n  },\n});\n</script>\n\n<template>\n  <Section :title=\"t('account.settings.stream.title')\" :outlined=\"false\">\n    <div class=\"info\">\n      <i18n-t v-if=\"isDesktop\" keypath=\"account.settings.stream.infoLong\" tag=\"p\" />\n      <i18n-t keypath=\"account.settings.stream.infoShort\" tag=\"p\" />\n    </div>\n    <div class=\"options options--bw\">\n      <div\n        v-for=\"choice in maxBandwidthChoices\"\n        :key=\"choice.value\"\n        @click.prevent=\"setMaxBandwidth(choice.value)\"\n        class=\"option\"\n        :class=\"{ 'is-current': choice.value === maxBandwidth }\"\n      >\n        <p class=\"title\" v-text=\"choice.title\" />\n        <p class=\"description\" v-text=\"choice.description\" />\n      </div>\n    </div>\n  </Section>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n\n.info {\n  padding: 0 2rem 1rem 0;\n  opacity: 0.5;\n  white-space: pre-line;\n\n  @include responsive.bp-medium {\n    @include typo.small;\n  }\n}\n\n.options {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  grid-gap: 1rem;\n\n  .option {\n    cursor: pointer;\n    padding: 0.5rem;\n    background: rgb(var(--c-light));\n    border: 1px solid rgb(var(--c-dark) / 20%);\n    border-radius: 3px;\n    transition: background 200ms;\n\n    [data-theme=\"dark\"] & {\n      border-color: rgb(var(--c-dark) / 5%);\n      background: rgb(var(--c-dark) / 5%);\n    }\n\n    &:hover {\n      background: rgb(var(--c-dark) / 10%);\n    }\n\n    &.is-current {\n      color: rgb(var(--c-light));\n      background: rgb(var(--c-green));\n      border-color: rgb(var(--c-green));\n    }\n  }\n\n  @include responsive.bp-medium {\n    grid-template-columns: unset;\n    grid-gap: 0.5rem;\n\n    .option {\n      display: flex;\n\n      .title {\n        flex-grow: 1;\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\nimport { DateTime } from \"luxon\";\n\nimport Datetime from \"@/components/ui/date/Datetime.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport eventBus from \"@/eventBus\";\n\nexport default defineComponent({\n  components: {\n    Datetime,\n  },\n  setup() {\n    const { subscription } = useAccount();\n    const faqLink = \"/faq/#42C745E4\";\n    const now = ref(DateTime.now());\n    const numDaysRemaining = computed(() => {\n      if (!subscription.value) {\n        return null;\n      }\n      const activeUntil = DateTime.fromISO(subscription.value.activeUntil);\n      const diff = activeUntil.diff(now.value, [\"days\"]);\n      return Math.round(diff.days);\n    });\n    const isActive = computed(() => subscription.value && subscription.value.isActive);\n    const isBlocked = computed(() => subscription.value && subscription.value.isBlocked != false);\n    const extendSubscription = () => {\n      if (isBlocked.value) {\n        return;\n      }\n      const event = {\n        intent: \"voucher\",\n      };\n      eventBus.emit(\"subscription:subscribe\", event);\n    };\n    return {\n      subscription,\n      faqLink,\n      isActive,\n      isBlocked,\n      numDaysRemaining,\n      extendSubscription,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"subscription\"\n    @click.stop=\"extendSubscription\"\n    :class=\"{\n      'is-active': isActive,\n      'is-blocked': isBlocked,\n      'is-expired': !isActive,\n    }\"\n  >\n    <div v-if=\"isBlocked\" class=\"details\">\n      <i18n-t keypath=\"geolocation.availability.note\" />\n    </div>\n    <div v-else-if=\"!isActive\" class=\"details\">\n      <!-- NOTE: temporary text as long as subscription is not possible\n      <i18n-t v-if=\"!isActive\" keypath=\"subscription.creditsExpired\" tag=\"p\" />\n      -->\n      <i18n-t keypath=\"subscription.noCredits\" tag=\"p\" />\n      <i18n-t keypath=\"subscription.noCreditsNote\" tag=\"p\" class=\"note\" />\n    </div>\n    <div v-else class=\"details\">\n      <i18n-t keypath=\"subscription.validNumDays\" tag=\"p\" :plural=\"numDaysRemaining\" />\n      <i18n-t v-if=\"subscription\" keypath=\"subscription.validUntilDate\" tag=\"p\">\n        <Datetime :value=\"subscription.activeUntil\" :display-time=\"false\" />\n      </i18n-t>\n    </div>\n    <div v-if=\"!isBlocked\" class=\"actions\">\n      <i18n-t\n        @click=\"extendSubscription\"\n        keypath=\"subscription.voucher.redeemCode\"\n        tag=\"button\"\n        class=\"button\"\n      />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/button\";\n\n.subscription {\n  position: relative;\n  display: grid;\n  grid-template-rows: 1fr auto;\n  color: rgb(var(--c-dark));\n  cursor: pointer;\n\n  &.is-active {\n    color: rgb(var(--c-green));\n  }\n\n  &.is-expired {\n    color: rgb(var(--c-red));\n  }\n\n  &.is-blocked {\n    color: rgb(var(--c-red));\n  }\n\n  .details {\n    .note {\n      @include typo.default;\n\n      color: rgb(var(--c-dark) / 50%);\n      white-space: pre-line;\n    }\n  }\n\n  .actions {\n    @include typo.default;\n\n    margin-top: 1.5rem;\n    margin-bottom: 0.5rem;\n    display: flex;\n    justify-content: center;\n\n    .button {\n      @include button.outlined(2.5rem);\n\n      min-width: 33%;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport QRCodeLogin from \"@/components/account/qrcode/QRCodeLogin.vue\";\nimport Address from \"@/components/account/settings/Address.vue\";\nimport Donations from \"@/components/account/settings/Donations.vue\";\nimport Email from \"@/components/account/settings/Email.vue\";\nimport Newsletter from \"@/components/account/settings/Newsletter.vue\";\nimport Password from \"@/components/account/settings/Password.vue\";\nimport Personal from \"@/components/account/settings/Personal.vue\";\nimport Section from \"@/components/account/settings/Section.vue\";\nimport Social from \"@/components/account/settings/Social.vue\";\nimport Stream from \"@/components/account/settings/Stream.vue\";\nimport CurrentSubscription from \"@/components/subscription/CurrentSubscription.vue\";\nimport { useAccount } from \"@/composables/account\";\nimport { useDevice } from \"@/composables/device\";\nimport { useSettings } from \"@/composables/settings\";\nimport Page from \"@/layouts/Page.vue\";\n\nexport default defineComponent({\n  components: {\n    Section,\n    Page,\n    CurrentSubscription,\n    Stream,\n    Email,\n    Password,\n    Personal,\n    Address,\n    Newsletter,\n    Social,\n    Donations,\n    QRCodeLogin,\n  },\n  setup() {\n    const { t } = useI18n();\n    const { isDesktop } = useDevice();\n    const { user, subscription, settings, address, loadUser } = useAccount();\n    const { userSettings } = useSettings();\n    const testingEnabled = computed(() => userSettings.value?.testingEnabled);\n    const socialNext = window.location.pathname;\n    return {\n      t,\n      user,\n      testingEnabled,\n      subscription,\n      settings,\n      address,\n      socialNext,\n      loadUser,\n      isDesktop,\n    };\n  },\n});\n</script>\n\n<template>\n  <Page v-if=\"user\" :title=\"t('account.title')\">\n    <Section\n      v-if=\"user\"\n      class=\"subscription\"\n      :title=\"t('account.settings.subscription.title')\"\n      @edit=\"\n        {\n        }\n      \"\n    >\n      <CurrentSubscription />\n    </Section>\n    <Stream />\n    <Email v-if=\"user\" :user=\"user\" @updated=\"loadUser\" />\n    <Password />\n    <Personal :user=\"user\" @updated=\"loadUser\" />\n    <Address :address=\"address\" @updated=\"loadUser\" />\n    <Newsletter />\n    <Social next=\"/account/settings/\" />\n    <Donations v-if=\"user && testingEnabled\" :donations=\"user.donations\" />\n    <QRCodeLogin v-if=\"isDesktop\" :user=\"user\" />\n  </Page>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\nsection {\n  &:first-child {\n    margin-top: 0;\n  }\n\n  &.subscription {\n    @include typo.large;\n  }\n}\n</style>\n","export default \"__VITE_ASSET__f557f2cd__\"","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\nimport QrcodeVue from \"qrcode.vue\";\n\nimport { useSettings } from \"@/composables/settings\";\n\nconst URL = \"https://itunes.apple.com/app/obr/id1643695398\";\n\nexport default defineComponent({\n  components: {\n    QrcodeVue,\n  },\n  setup() {\n    const { darkMode } = useSettings();\n    const url = URL;\n    const size = 200;\n    const bg = \"#ffffff00\";\n    const fg = computed(() => {\n      return darkMode.value ? \"#ffffff\" : \"#000000\";\n    });\n    return {\n      url,\n      size,\n      fg,\n      bg,\n    };\n  },\n});\n</script>\n\n<template>\n  <qrcode-vue\n    class=\"qr-code\"\n    :value=\"url\"\n    :size=\"size\"\n    :background=\"bg\"\n    :foreground=\"fg\"\n    level=\"H\"\n  />\n</template>\n\n<style lang=\"scss\" scoped>\n.qr-code {\n  border: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport QrcodeVue from \"qrcode.vue\";\n\nimport { useSettings } from \"@/composables/settings\";\nimport type { UserVoucher } from \"@/typings/api\";\n\nexport default defineComponent({\n  props: {\n    voucher: {\n      type: Object as PropType<UserVoucher>,\n      required: true,\n    },\n  },\n  components: {\n    QrcodeVue,\n  },\n  setup(props) {\n    const { t } = useI18n();\n    const { darkMode } = useSettings();\n    const voucherUrl = computed(() => {\n      return `https://openbroadcast.ch/#${props.voucher.codeDisplay}`;\n    });\n    const size = 200;\n    const bg = \"#ffffff00\";\n    const fg = computed(() => {\n      return darkMode.value ? \"#ffffff\" : \"#000000\";\n    });\n    return {\n      t,\n      voucherUrl,\n      size,\n      fg,\n      bg,\n    };\n  },\n});\n</script>\n\n<template>\n  <qrcode-vue\n    class=\"qr-code\"\n    :value=\"voucherUrl\"\n    :size=\"size\"\n    :background=\"bg\"\n    :foreground=\"fg\"\n    level=\"H\"\n  />\n</template>\n\n<style lang=\"scss\" scoped>\n.qr-code {\n  border: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { useClipboard, useShare } from \"@vueuse/core\";\n\nimport QRCodeVoucher from \"@/components/account/qrcode/QRCodeVoucher.vue\";\nimport Datetime from \"@/components/ui/date/Datetime.vue\";\nimport type { UserVoucher } from \"@/typings/api\";\n\nexport default defineComponent({\n  components: {\n    Datetime,\n    QRCodeVoucher,\n  },\n  props: {\n    voucher: {\n      type: Object as PropType<UserVoucher>,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { t } = useI18n();\n    const link = computed(() => {\n      const path = `/#${props.voucher.codeDisplay}`;\n      const href = `${window.location.origin}${path}`;\n      const display = `${window.location.hostname}${path}`;\n      return {\n        href,\n        display,\n      };\n    });\n    const { share, isSupported: shareSupported } = useShare();\n    const { copy: copyCode, copied: copiedCode } = useClipboard({\n      source: props.voucher.codeDisplay,\n    });\n    const shareCode = () => {\n      share({\n        title: `Code: ${props.voucher.codeDisplay}`,\n        url: link.value.href,\n      });\n    };\n    return {\n      t,\n      shareCode,\n      shareSupported,\n      copyCode,\n      copiedCode,\n      link,\n    };\n  },\n});\n</script>\n<template>\n  <div class=\"voucher\" :class=\"{ 'is-invalid': !voucher.isValid }\">\n    <QRCodeVoucher class=\"qr-code\" :voucher=\"voucher\" />\n    <div class=\"details\">\n      <div @click.prevent=\"copyCode\" class=\"code-display\">\n        {{ voucher.codeDisplay }}\n        <transition name=\"copied\">\n          <div v-if=\"copiedCode\" class=\"copied\">\n            <div class=\"copied__text\">Copied to clipboard</div>\n          </div>\n        </transition>\n      </div>\n      <div class=\"num-days\" @click=\"copyCode\">\n        <i18n-t keypath=\"subscription.validNumDays\" :plural=\"voucher.numDays\" />\n      </div>\n      <div class=\"usage\">\n        <div class=\"usage__count\">\n          <i18n-t keypath=\"subscription.numUsedAndTotal\">\n            <span v-text=\"voucher.numUsed\" />\n            <span v-text=\"voucher.maxNumUse\" />\n          </i18n-t>\n        </div>\n        <div class=\"usage__date\">\n          <i18n-t keypath=\"subscription.validUntilDate\">\n            <Datetime :value=\"voucher.validUntil\" :display-time=\"false\" />\n          </i18n-t>\n        </div>\n      </div>\n      <div v-if=\"shareSupported\" class=\"share\">\n        <span @click.prevent=\"shareCode\" class=\"button\" v-text=\"`Share Code`\" />\n      </div>\n    </div>\n    <div class=\"invalid-notice\" v-if=\"!voucher.isValid\">\n      <span>EXPIRED / USED</span>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n@use \"@/style/elements/button\";\n\n.voucher {\n  display: grid;\n  grid-gap: 2rem;\n  grid-template-columns: 169px 1fr;\n  padding: 1rem;\n  background: rgb(var(--c-dark) / 5%);\n  color: rgb(var(--c-dark));\n  position: relative;\n\n  &.is-invalid {\n    color: rgb(var(--c-dark) / 25%);\n    pointer-events: none;\n\n    .qr-code {\n      opacity: 0.25;\n    }\n\n    .invalid-notice {\n      top: 0;\n      position: absolute;\n      height: 100%;\n      left: 1rem;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      > span {\n        color: rgb(var(--c-light));\n        background: rgb(var(--c-red));\n\n        @include typo.bold;\n\n        padding: 1rem;\n        display: inline-flex;\n        width: 200px;\n        justify-content: center;\n      }\n\n      @include responsive.bp-medium {\n        height: calc(200px + 2rem);\n        width: 100%;\n        left: 0;\n      }\n    }\n  }\n\n  .details {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n\n    .code-display {\n      @include typo.x-large;\n      @include typo.bold;\n\n      line-height: var(--t-fs-x-large);\n      cursor: pointer;\n      position: relative;\n      user-select: text;\n\n      .copied {\n        @include typo.small;\n\n        top: -30px;\n        position: absolute;\n        width: 100%;\n        color: rgb(var(--c-light));\n        line-height: var(--t-fs-small);\n        display: flex;\n        justify-content: center;\n\n        &__text {\n          background: rgb(var(--c-dark));\n          padding: 0.5rem;\n        }\n      }\n    }\n\n    .num-days {\n      @include typo.large;\n\n      line-height: 1.5;\n    }\n\n    .usage {\n      align-items: center;\n      line-height: 1.5;\n      white-space: break-spaces;\n      display: flex;\n      flex-direction: column;\n      flex-grow: 1;\n      justify-content: flex-end;\n\n      &__count {\n        display: flex;\n        justify-content: center;\n        text-align: center;\n        text-transform: capitalize;\n      }\n\n      &__date {\n        display: flex;\n        text-align: center;\n        justify-content: center;\n      }\n    }\n\n    .share {\n      padding: 0.5rem 1rem 0;\n\n      > span {\n        @include typo.large;\n\n        text-decoration: underline;\n        cursor: pointer;\n      }\n    }\n  }\n\n  @include responsive.bp-medium {\n    grid-template-columns: unset;\n    grid-template-rows: 169px 1fr;\n    background: transparent;\n\n    .qr-code {\n      margin-top: 0;\n      justify-self: center;\n    }\n\n    .code-display {\n      margin: 1rem 0;\n    }\n  }\n}\n\n.copied-enter-active,\n.copied-leave-active {\n  transition: opacity 200ms, transform 200ms;\n}\n\n.copied-enter-from {\n  opacity: 0;\n  transform: translateY(30px);\n}\n\n.copied-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport srcAppStoreBadge from \"@/assets/brand-icons/app-store.svg\";\nimport QRCodeApp from \"@/components/account/qrcode/QRCodeApp.vue\";\nimport UserVoucher from \"@/components/account/voucher/UserVoucher.vue\";\nimport { useSubscription } from \"@/composables/subscription\";\nimport Page from \"@/layouts/Page.vue\";\n\nexport default defineComponent({\n  components: {\n    Page,\n    UserVoucher,\n    QRCodeApp,\n  },\n  setup() {\n    const { t } = useI18n();\n    const { userVouchers } = useSubscription();\n    return {\n      t,\n      srcAppStoreBadge,\n      userVouchers,\n    };\n  },\n});\n</script>\n\n<template>\n  <Page :title=\"t('menu.userVouchers')\">\n    <template #lead>\n      <p>Spread the sound!</p>\n    </template>\n    <div class=\"cta\">\n      <p>Share the love with your friends and invite them to join!</p>\n      <p>Simply let them scan the \"iOS App install\" QR code to install the app.</p>\n      <p>\n        Once they have the app, they can scan one of your \"Voucher\" QR codes to gain unlimited\n        access.\n      </p>\n    </div>\n    <section class=\"app\">\n      <h3>iOS App install</h3>\n      <p>Scan the QR-code to install the app</p>\n      <div class=\"qr-code-container\">\n        <QRCodeApp />\n        <div class=\"badge\">\n          <img :src=\"srcAppStoreBadge\" alt=\"\" />\n        </div>\n      </div>\n    </section>\n    <section class=\"vouchers\">\n      <h3>Vouchers</h3>\n      <UserVoucher\n        class=\"voucher\"\n        v-for=\"voucher in userVouchers\"\n        :key=\"`voucher-${voucher.uid}`\"\n        :voucher=\"voucher\"\n      />\n    </section>\n  </Page>\n</template>\n\n<style lang=\"scss\" scoped>\n.cta {\n  > p {\n    margin-bottom: 0.5rem;\n  }\n}\n\n.vouchers {\n  margin-top: 2rem;\n\n  > h3 {\n    margin-bottom: 1rem;\n  }\n\n  .voucher {\n    margin-bottom: 2rem;\n  }\n}\n\n.app {\n  margin: 2rem 0 1rem;\n\n  > p {\n    padding: 0.5rem 0;\n  }\n\n  .qr-code-container {\n    margin: 1rem 0;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n\n    .badge {\n      margin-top: 1.5rem;\n\n      > img {\n        width: 140px;\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { useObjKey } from \"@/composables/obj\";\n\nexport default defineComponent({\n  components: {\n    LazyImage,\n    CircleButton,\n    UserRating,\n  },\n  props: {\n    editor: {\n      type: Object,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { objKey } = useObjKey(props.editor);\n    const { isDesktop } = useDevice();\n    const link = `/discover/editors/${props.editor.uid}/`;\n    return {\n      objKey,\n      isDesktop,\n      link,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"card card--editor\">\n    <router-link :to=\"link\" class=\"visual\">\n      <LazyImage\n        :image=\"editor.image\"\n        :class=\"{\n          'is-grayscale': !editor.isActive,\n        }\"\n      />\n      <UserRating\n        v-if=\"!isDesktop\"\n        :obj-key=\"objKey\"\n        :readonly=\"true\"\n        :hide-if-unset=\"true\"\n        class=\"rating\"\n      />\n    </router-link>\n    <div class=\"meta\">\n      <router-link class=\"title\" v-text=\"editor.name\" :to=\"link\" />\n      <div class=\"subtitle\" v-text=\"editor.role\" />\n      <div v-if=\"isDesktop\" class=\"actions\">\n        <CircleButton :scale=\"0.75\">\n          <UserRating :obj-key=\"objKey\" :autoload=\"false\" :icon-scale=\"0.75\" />\n        </CircleButton>\n      </div>\n    </div>\n  </div>\n</template>\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/card\";\n\n.card {\n  @include card.default;\n  @include card.actions-on-hover;\n\n  .visual {\n    .lazy-image {\n      filter: grayscale(100%) brightness(90%);\n\n      // mix-blend-mode: multiply;\n\n      &.is-grayscale {\n        filter: grayscale(1);\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref } from \"vue\";\n\nimport { getEditors } from \"@/api/broadcast\";\nimport SocialMediaLinks from \"@/components/social-media/SocialMediaLinks.vue\";\nimport { useRatingStore } from \"@/stores/rating\";\n\nimport EditorCard from \"./Card.vue\";\n\nexport default defineComponent({\n  components: {\n    EditorCard,\n    SocialMediaLinks,\n  },\n  setup() {\n    const { injectRatings } = useRatingStore();\n    const editors = ref([]);\n    const fetchEditors = async (limit = 128, offset = 0) => {\n      const { results } = await getEditors(limit, offset);\n      // @ts-ignore\n      editors.value.push(...results);\n      await injectRatings(results);\n    };\n    const activeEditors = computed(() => {\n      // @ts-ignore\n      return editors.value.filter((e) => e.isActive === true);\n    });\n    const pastEditors = computed(() => {\n      // @ts-ignore\n      return editors.value.filter((e) => e.isActive === false);\n    });\n    onMounted(() => {\n      fetchEditors();\n    });\n    return {\n      activeEditors,\n      pastEditors,\n    };\n  },\n});\n</script>\n<template>\n  <div class=\"editor-list\">\n    <div class=\"grid\" v-if=\"activeEditors.length\">\n      <EditorCard v-for=\"editor in activeEditors\" :key=\"editor.uid\" :editor=\"editor\" />\n    </div>\n    <!--\n    <div class=\"former-editors\" v-if=\"pastEditors.length\">\n      <div class=\"subtitle\">\n        <div>Ehemalige</div>\n      </div>\n      <div class=\"grid\">\n        <EditorCard v-for=\"editor in pastEditors\" :key=\"editor.uid\" :editor=\"editor\" />\n      </div>\n    </div>\n    -->\n    <SocialMediaLinks />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n@use \"@/style/elements/grid\";\n\n.editor-list {\n  @include container.default;\n\n  /* margin-bottom: 4rem; */\n}\n\n.social-media-links {\n  margin-top: 4rem;\n}\n\n.grid {\n  @include grid.default;\n}\n\n/*\n.former-editors {\n  margin-top: 2rem;\n  .subtitle {\n    margin-bottom: 1rem;\n    font-size: 2rem;\n  }\n}\n*/\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: color.value,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" :style=\"style\">\n    <circle cx=\"24\" cy=\"17\" r=\"2\" />\n    <circle cx=\"24\" cy=\"24\" r=\"2\" />\n    <circle cx=\"24\" cy=\"31\" r=\"2\" />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    flipY: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: color.value,\n        stroke: \"none\",\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n    :class=\"{\n      'flip-y': flipY,\n    }\"\n  >\n    <rect x=\"14\" y=\"26\" width=\"20\" height=\"3\" />\n    <rect x=\"14\" y=\"32\" width=\"20\" height=\"3\" />\n    <polygon points=\"14,13 22,17.5 14,22\" />\n  </svg>\n</template>\n\n<style lang=\"scss\" scoped>\n.flip-y {\n  transform: scaleY(-1);\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    label: {\n      type: String,\n      required: true,\n      default: \"\",\n    },\n  },\n  emits: [\"click\"],\n  setup(props, { emit }) {\n    const onClick = () => {\n      emit(\"click\");\n    };\n    return {\n      onClick,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"action\" @click.prevent=\"onClick\">\n    <div class=\"action__icon\">\n      <slot name=\"icon\"></slot>\n    </div>\n    <div class=\"action__name\">\n      <span v-text=\"label\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.action {\n  display: flex;\n  align-items: center;\n  height: 3rem;\n  cursor: pointer;\n  border-bottom: 1px solid rgb(var(--c-dark) / 10%);\n\n  &:hover {\n    background: rgb(var(--c-dark) / 10%);\n  }\n\n  &__icon {\n    height: 48px;\n    width: 48px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  &__name {\n    display: inline-flex;\n    flex-grow: 1;\n    align-items: center;\n    justify-content: flex-start;\n    height: 48px;\n    padding-right: 1rem;\n\n    > span {\n      &::first-letter {\n        text-transform: uppercase;\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport { getMedia } from \"@/api/catalog\";\nimport IconEnueue from \"@/components/ui/icon/IconEnqueue.vue\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { useQueueControls } from \"@/composables/queue\";\nimport { requireSubscription } from \"@/utils/account\";\n\nimport Action from \"./actions/Action.vue\";\n\nexport default defineComponent({\n  props: {\n    filter: {\n      type: Object,\n      required: false,\n      default: () => ({}),\n    },\n    ordering: {\n      type: Array,\n      default: () => [],\n    },\n  },\n  components: {\n    Action,\n    IconEnueue,\n  },\n  emits: [\"close\"],\n  setup(props, { emit }) {\n    const { t } = useI18n();\n    const { logUIEvent } = useAnalytics();\n    const iconScale = 0.875;\n    const { enqueueMedia, startPlayCurrent } = useQueueControls();\n    const enqueue = async (mode: string) => {\n      const filter = { ...props.filter };\n      const ordering = props.ordering;\n      const { results } = await getMedia(100, 0, filter, ordering);\n      await enqueueMedia(results, mode);\n    };\n    const enqueueNext = requireSubscription(async () => {\n      await enqueue(\"insert\");\n      emit(\"close\");\n      logUIEvent(\"player:enqueue-next\", \"list\");\n    });\n    const enqueueEnd = requireSubscription(async () => {\n      await enqueue(\"append\");\n      await startPlayCurrent();\n      emit(\"close\");\n      logUIEvent(\"player:enqueue-end\", \"list\");\n    });\n    return {\n      t,\n      iconScale,\n      enqueueNext,\n      enqueueEnd,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"actions\">\n    <section>\n      <Action @click=\"enqueueNext\" :label=\"t('player.enqueueNext')\">\n        <template #icon>\n          <IconEnueue :scale=\"iconScale\" />\n        </template>\n      </Action>\n      <Action @click=\"enqueueEnd\" :label=\"t('player.enqueueEnd')\">\n        <template #icon>\n          <IconEnueue :scale=\"iconScale\" :flip-y=\"true\" />\n        </template>\n      </Action>\n    </section>\n  </div>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"none\",\n        stroke: color.value,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" :style=\"style\">\n    <circle stroke-width=\"3\" cx=\"14\" cy=\"24\" r=\"3.5\" />\n    <circle stroke-width=\"3\" cx=\"35\" cy=\"12\" r=\"3.5\" />\n    <circle stroke-width=\"3\" cx=\"35\" cy=\"36\" r=\"3.5\" />\n    <line x1=\"17\" y1=\"22\" x2=\"32\" y2=\"14\" stroke-width=\"3\" stroke-linecap=\"square\" />\n    <line x1=\"17\" y1=\"26\" x2=\"32\" y2=\"34\" stroke-width=\"3\" stroke-linecap=\"square\" />\n  </svg>\n</template>\n\n<style lang=\"scss\" scoped>\n.flip-y {\n  transform: scaleY(-1);\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { useShare } from \"@vueuse/core\";\nimport { debounce } from \"lodash-es\";\n\nimport IconEnueue from \"@/components/ui/icon/IconEnqueue.vue\";\nimport IconFlash from \"@/components/ui/icon/IconFlash.vue\";\nimport IconHeart from \"@/components/ui/icon/IconHeart.vue\";\nimport IconShare from \"@/components/ui/icon/IconShare.vue\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { useObjKey } from \"@/composables/obj\";\nimport { useQueueControls } from \"@/composables/queue\";\nimport { useRating } from \"@/composables/rating\";\nimport { requireSubscription } from \"@/utils/account\";\n\nimport Action from \"./actions/Action.vue\";\n\nexport default defineComponent({\n  props: {\n    obj: {\n      type: Object,\n      required: true,\n      default: () => {},\n    },\n  },\n  components: {\n    Action,\n    IconEnueue,\n    IconHeart,\n    IconFlash,\n    IconShare,\n  },\n  emits: [\"close\"],\n  setup(props, { emit }) {\n    const { t } = useI18n();\n    const { objKey } = useObjKey(props.obj);\n    const { logUIEvent } = useAnalytics();\n    const iconScale = 0.875;\n    const { ratingByKey, setRatingWithSource } = useRating();\n    const rating = computed(() => ratingByKey(objKey.value));\n    const isFavorite = computed(() => rating.value === 1);\n    const isBanned = computed(() => rating.value === -1);\n    const rate = debounce(\n      async (value: number) => {\n        await setRatingWithSource(objKey.value, value);\n      },\n      200,\n      { leading: true, trailing: false }\n    );\n    const canBan = computed(() => {\n      return props.obj?.ct && props.obj.ct === \"catalog.media\";\n    });\n    const { enqueueObj, startPlayCurrent } = useQueueControls();\n    const enqueueNext = requireSubscription(async () => {\n      await enqueueObj(props.obj, \"insert\");\n      await startPlayCurrent();\n      emit(\"close\");\n      logUIEvent(\"player:enqueue-next\", objKey.value);\n    });\n    const enqueueEnd = requireSubscription(async () => {\n      await enqueueObj(props.obj, \"append\");\n      await startPlayCurrent();\n      emit(\"close\");\n      logUIEvent(\"player:enqueue-end\", objKey.value);\n    });\n    const { share, isSupported: shareSupported } = useShare();\n    const shareObj = () => {\n      const title = props.obj?.name ?? document.title;\n      const url = props.obj?.detailUrl ?? document.location.href;\n      share({\n        title,\n        url,\n      });\n      emit(\"close\");\n      logUIEvent(\"share:start\", objKey.value);\n    };\n    return {\n      t,\n      iconScale,\n      isFavorite,\n      isBanned,\n      canBan,\n      rate,\n      enqueueNext,\n      enqueueEnd,\n      shareSupported,\n      shareObj,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"actions\">\n    <section>\n      <Action @click=\"enqueueNext\" :label=\"t('player.enqueueNext')\">\n        <template #icon>\n          <IconEnueue :scale=\"iconScale\" />\n        </template>\n      </Action>\n      <Action @click=\"enqueueEnd\" :label=\"t('player.enqueueEnd')\">\n        <template #icon>\n          <IconEnueue :scale=\"iconScale\" :flip-y=\"true\" />\n        </template>\n      </Action>\n    </section>\n    <section>\n      <Action v-if=\"!isFavorite\" @click=\"rate(1)\" :label=\"t('player.favoritesAdd')\">\n        <template #icon>\n          <IconHeart :scale=\"iconScale\" :outlined=\"true\" />\n        </template>\n      </Action>\n      <Action v-else @click=\"rate(null)\" :label=\"t('player.favoritesRemove')\">\n        <template #icon>\n          <IconHeart :scale=\"iconScale\" />\n        </template>\n      </Action>\n    </section>\n    <section v-if=\"canBan\">\n      <Action v-if=\"!isBanned\" @click=\"rate(-1)\" :label=\"t('player.bannedAdd')\">\n        <template #icon>\n          <IconFlash :scale=\"iconScale\" :outlined=\"true\" />\n        </template>\n      </Action>\n      <Action v-else @click=\"rate(0)\" :label=\"t('player.bannedRemove')\">\n        <template #icon>\n          <IconFlash :scale=\"iconScale\" />\n        </template>\n      </Action>\n    </section>\n    <section v-if=\"shareSupported\">\n      <Action @click=\"shareObj()\" :label=\"t('player.share')\">\n        <template #icon>\n          <IconShare :scale=\"iconScale\" />\n        </template>\n      </Action>\n    </section>\n  </div>\n</template>\n","<script type=\"ts\">\nimport {\n  computed,\n  defineComponent,\n  onMounted,\n  ref,\n} from 'vue';\nimport { onClickOutside } from '@vueuse/core';\n\nimport CircleButton from '@/components/ui/button/CircleButton.vue';\nimport IconContext from '@/components/ui/icon/IconContext.vue';\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { useDevice } from '@/composables/device';\nimport { useIconSize } from \"@/composables/icon\";\nimport eventBus from '@/eventBus';\n\nimport ListActions from './ListActions.vue';\nimport ObjectActions from './ObjectActions.vue';\n\nexport default defineComponent({\n  props: {\n    obj: {\n      type: Object,\n      required: false,\n      default: () => ({}),\n    },\n    list: {\n      type: Object,\n      required: false,\n      default: () => ({\n        filter: {},\n        ordering: [],\n      }),\n    },\n    iconScale: {\n      type: Number,\n      default: 1,\n    },\n  },\n  components: {\n    CircleButton,\n    IconContext,\n    ObjectActions,\n    ListActions,\n  },\n  setup(props) {\n    const { logUIEvent } = useAnalytics();\n    const root = ref(null);\n    const menu = ref(null);\n    const menuPosition = ref('bottom');\n    const { defaultIconSize } = useIconSize();\n    const iconSize = computed(() => {\n      return defaultIconSize.value * props.iconScale;\n    });\n    const { isDesktop } = useDevice();\n    const isVisible = ref(false);\n    const isObj = computed(() => Object.keys(props.obj).length);\n    const show = (e) => {\n      const { pageY } = e;\n      const height = window.innerHeight;\n      if ((height - pageY) < 240) {\n        menuPosition.value = 'top';\n      } else {\n        menuPosition.value = 'bottom';\n      }\n      isVisible.value = true;\n      logUIEvent(\"context-menu:show\");\n    };\n    const hide = () => {\n      isVisible.value = false;\n    };\n    const transitionName = computed(() => {\n      return isDesktop ? 'fade' : 'slide';\n    });\n    eventBus.on('contextMenu:show', () => {\n      hide();\n    });\n    onMounted(() => {\n      document.addEventListener('keydown', (e) => {\n        if (isVisible.value && e.code === 'Escape') {\n          hide();\n        }\n      });\n      document.addEventListener('scroll', () => {\n        if (isVisible.value) {\n          hide();\n        }\n      });\n    });\n    onClickOutside(root, () => hide());\n    onClickOutside(menu, () => hide());\n    const hideTimeout = ref(null);\n    const onMenuMouseleave = () => {\n      hideTimeout.value = setTimeout(() => {\n        hide();\n      }, 300);\n    };\n    const onMenuMouseenter = () => {\n      clearTimeout(hideTimeout.value);\n    };\n    const actions = computed(() => {\n      return [];\n    });\n    return {\n      root,\n      menu,\n      menuPosition,\n      iconSize,\n      isVisible,\n      isObj,\n      show,\n      hide,\n      transitionName,\n      onMenuMouseleave,\n      onMenuMouseenter,\n      actions,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    ref=\"root\"\n    class=\"context-menu\"\n    :style=\"{\n      '--icon-size': `${iconSize}px`,\n    }\"\n  >\n    <div class=\"context-menu__icon\" @click.prevent=\"show\">\n      <CircleButton :scale=\"iconScale\">\n        <IconContext :scale=\"iconScale\" />\n      </CircleButton>\n    </div>\n    <transition :name=\"transitionName\">\n      <div class=\"menu-container\" v-if=\"isVisible\" :class=\"`position-${menuPosition}`\">\n        <div class=\"menu\" ref=\"menu\" @mouseleave=\"onMenuMouseleave\" @mouseenter=\"onMenuMouseenter\">\n          <ObjectActions v-if=\"isObj\" :obj=\"obj\" @close=\"hide\" />\n          <ListActions v-else :filter=\"list.filter\" :ordering=\"list.ordering\" @close=\"hide\" />\n        </div>\n      </div>\n    </transition>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n\n.context-menu {\n  position: relative;\n\n  &__icon {\n    height: var(--icon-size);\n    width: var(--icon-size);\n  }\n\n  .menu-container {\n    position: absolute;\n    right: 0;\n\n    .menu {\n      position: absolute;\n      right: 0;\n      z-index: 50;\n      min-width: 300px;\n      background: rgb(0 0 0 / 100%);\n      border-radius: 4px;\n      box-shadow: 0 0 10px rgb(0 0 0 / 30%);\n\n      .actions {\n        background: rgb(var(--c-light) / 100%);\n      }\n    }\n\n    &.position-top {\n      bottom: 0;\n\n      .menu {\n        bottom: 0;\n      }\n    }\n\n    &.position-bottom {\n      top: 0;\n\n      .menu {\n        top: 0;\n      }\n    }\n\n    @include responsive.bp-medium {\n      top: 0;\n      position: fixed;\n      height: 100%;\n      width: 100%;\n      left: 0;\n      z-index: 120; // use 100 to move behind player\n      display: flex;\n      align-items: flex-end;\n      background: rgb(0 0 0 / 80%);\n\n      .menu {\n        position: unset;\n        width: 100%;\n        border-radius: unset;\n        box-shadow: unset;\n        padding-bottom: 120px;\n        background: rgb(0 0 0);\n      }\n    }\n  }\n}\n\n// desktop\n.fade-enter-active,\n.fade-leave-active {\n  opacity: 1;\n  transition: opacity 100ms linear;\n}\n\n.fade-enter,\n.fade-leave-to {\n  opacity: 0;\n}\n\n// mobile\n.slide-enter-active,\n.slide-leave-active {\n  opacity: 1;\n  transition: transform 400ms, opacity 100ms linear;\n  /* stylelint-disable-next-line no-descending-specificity */\n  .menu {\n    transition: transform 300ms;\n    transition-delay: 100ms;\n  }\n}\n\n.slide-enter-from {\n  opacity: 0;\n  /* stylelint-disable-next-line no-descending-specificity */\n  .menu {\n    transform: translate(0, 100%);\n  }\n}\n\n.slide-leave-to {\n  opacity: 0;\n  /* stylelint-disable-next-line no-descending-specificity */\n  .menu {\n    transform: translate(0, 100%);\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    tag: {\n      type: Object,\n      required: true,\n    },\n    prefix: {\n      type: String,\n      default: \"\",\n    },\n    suffix: {\n      type: String,\n      default: \"\",\n    },\n  },\n  setup(props) {\n    const display = computed(() => {\n      return `${props.prefix}${props.tag.name}${props.suffix}`;\n    });\n    return {\n      display,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"tag\" :class=\"`tag--${tag.type}`\" v-text=\"display\" />\n</template>\n\n<style lang=\"scss\" scoped>\n.tag {\n  display: inline-flex;\n  white-space: nowrap;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport Tag from \"./Tag.vue\";\n\nexport default defineComponent({\n  components: {\n    Tag,\n  },\n  props: {\n    obj: {\n      type: Object,\n      required: true,\n    },\n    prefix: {\n      type: String,\n      default: \"#\",\n    },\n    limit: {\n      type: Number,\n      default: 8,\n    },\n    types: {\n      type: Array,\n      default: () => [],\n    },\n    separator: {\n      type: String,\n      default: \", \",\n    },\n    spacing: {\n      type: String,\n      default: \"0.25rem\",\n    },\n  },\n  setup(props) {\n    const keyPrefix = computed(() => {\n      return props.obj?.uid;\n    });\n    const tags = computed(() => {\n      let objTags = props.obj && props.obj.tags ? props.obj.tags.slice(0, props.limit) : [];\n      if (props.types.length) {\n        objTags = objTags.filter((tag: any) => props.types.includes(tag.type));\n      }\n      objTags = objTags.sort((a: any, b: any) => a.name.localeCompare(b.name));\n      return objTags;\n    });\n    return {\n      keyPrefix,\n      tags,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"tags\"\n    :style=\"{\n      '--spacing': spacing,\n    }\"\n  >\n    <Tag\n      class=\"tags__tag\"\n      v-for=\"tag in tags\"\n      :key=\"`obj-tag-${keyPrefix}-${tag.uid}`\"\n      :tag=\"tag\"\n      :prefix=\"prefix\"\n      suffix=\"\"\n    />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.tags {\n  &__tag {\n    &:not(:last-child) {\n      margin-right: var(--spacing);\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport ContextMenu from \"@/components/context-menu/ContextMenu.vue\";\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport ObjectTags from \"@/components/tagging/ObjectTags.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { useObjKey } from \"@/composables/obj\";\n\nexport default defineComponent({\n  components: {\n    LazyImage,\n    PlayAction,\n    CircleButton,\n    UserRating,\n    ContextMenu,\n    ObjectTags,\n  },\n  props: {\n    artist: {\n      type: Object,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { t } = useI18n();\n    const { objKey } = useObjKey(props.artist);\n    const { isDesktop } = useDevice();\n    const link = `/discover/artists/${props.artist.uid}/`;\n    return {\n      t,\n      objKey,\n      isDesktop,\n      link,\n    };\n  },\n});\n</script>\n<template>\n  <div class=\"card card--artist\">\n    <router-link :to=\"link\" class=\"visual\">\n      <LazyImage :image=\"artist.image\">\n        <PlayAction\n          :obj-key=\"objKey\"\n          :icon-scale=\"1.5\"\n          :outlined=\"true\"\n          :filled=\"true\"\n          :color=\"[0, 0, 0]\"\n        />\n      </LazyImage>\n      <UserRating\n        v-if=\"!isDesktop\"\n        :obj-key=\"objKey\"\n        :readonly=\"true\"\n        :hide-if-unset=\"true\"\n        class=\"rating\"\n      />\n    </router-link>\n    <div class=\"meta\">\n      <router-link class=\"title\" :to=\"link\">\n        {{ artist.name }}\n        <span v-if=\"artist.countryCode\">({{ artist.countryCode }})</span>\n      </router-link>\n      <ObjectTags v-if=\"isDesktop\" class=\"tags\" :obj=\"artist\" :limit=\"4\" :types=\"['genre']\" />\n      <div class=\"subtitle\" v-text=\"t('catalog.ct.numMedia', artist.numMedia)\" />\n      <div v-if=\"isDesktop\" class=\"actions\">\n        <CircleButton :scale=\"0.75\">\n          <UserRating :obj-key=\"objKey\" :icon-scale=\"0.75\" />\n        </CircleButton>\n        <ContextMenu :obj=\"artist\" :icon-scale=\"0.75\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/card\";\n\n.card {\n  @include card.default;\n  @include card.actions-on-hover;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport IconRemove from \"@/components/ui/icon/IconRemove.vue\";\n\nexport default defineComponent({\n  components: {\n    IconRemove,\n  },\n  props: {\n    q: {\n      type: String,\n      required: true,\n    },\n  },\n  emits: [\"click\"],\n  setup(props, { emit }) {\n    const click = () => {\n      emit(\"click\", props.q);\n    };\n    return {\n      click,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"query is-selected\" @click.prevent=\"click\">\n    {{ q }}\n    <IconRemove class=\"query__clear\" color-var=\"--c-light\" :scale=\"0.5\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.query {\n  display: inline-flex;\n  align-items: center;\n  height: 2rem;\n  padding: 0.25rem 1rem;\n  color: rgb(var(--c-dark) / 100%);\n  text-transform: lowercase;\n  background: rgb(var(--c-light) / 100%);\n  border: 1px solid rgb(var(--c-page-fg) / 20%);\n  border-radius: 1rem;\n  cursor: pointer;\n\n  &:hover {\n    background: rgb(var(--c-dark) / 10%);\n  }\n\n  &.is-selected {\n    color: rgb(var(--c-light));\n    background: rgb(var(--c-dark));\n  }\n\n  &__clear {\n    margin-left: 0.5rem;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    tag: {\n      type: Object,\n      required: true,\n    },\n    selected: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: [\"click\"],\n  setup(props, { emit }) {\n    const click = () => {\n      emit(\"click\", props.tag);\n    };\n    return {\n      click,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"tag\" @click.prevent=\"click\" :class=\"{ 'is-selected': selected }\">\n    {{ tag.name }}\n    <small class=\"tag__type\" v-text=\"tag.type\" />\n    <div class=\"tag__count\">\n      <div class=\"tag__count__value\" v-text=\"tag.count\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n\n.tag {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  height: 2rem;\n  padding: 0.25rem 1rem;\n  color: rgb(255 255 255);\n  background: rgb(255 255 255 / 20%);\n  border-radius: 1rem;\n  cursor: pointer;\n  text-transform: capitalize;\n  font-weight: 400;\n\n  &.is-selected {\n    color: rgb(0 0 0);\n    background: rgb(255 255 255 / 100%);\n  }\n\n  &__type {\n    display: none;\n    padding-left: 0.5rem;\n\n    @include typo.tiny;\n    @include typo.dim;\n  }\n\n  &__count {\n    @include typo.tiny;\n\n    position: absolute;\n    bottom: 2rem;\n    display: none;\n    align-items: center;\n    justify-content: center;\n    width: calc(100% - 2rem);\n\n    &__value {\n      height: 26px;\n      width: 26px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      background: rgb(255 255 255);\n      color: rgb(0 0 0);\n      border: 1px solid rgb(0 0 0 / 20%);\n      border-radius: 12px;\n    }\n  }\n\n  @include responsive.on-hover {\n    background: rgb(255 255 255 / 30%);\n\n    .tag {\n      &__count {\n        display: flex;\n      }\n    }\n\n    &.is-selected {\n      background: rgb(255 255 255 / 80%);\n    }\n  }\n}\n</style>\n","<script lang=\"js\">\nimport { computed, defineComponent } from 'vue';\n\nimport { useAnalytics } from \"@/composables/analytics\";\n\nimport Query from './Query.vue';\nimport Tag from './Tag.vue';\n\nconst addOrRemove = (arr, item) => {\n  if (!arr) {\n    return [item];\n  }\n  return arr.includes(item) ? arr.filter((i) => i !== item) : [...arr, item];\n};\n\nexport default defineComponent({\n  components: {\n    Query,\n    Tag,\n  },\n  props: {\n    isLoading: {\n      type: Boolean,\n      default: false,\n    },\n    filter: {\n      type: Object,\n      required: true,\n      default: () => {},\n    },\n    tagList: {\n      type: Array,\n      required: true,\n      default: () => [],\n    },\n  },\n  emits: [\n    'change',\n  ],\n  setup(props, { emit }) {\n    const { logRawEvent } = useAnalytics();\n    const selectedTags = computed(() => {\n      return props.filter.tags || [];\n    });\n    const searchQuery = computed(() => {\n      return props.filter.q;\n    });\n    const moodTags = computed(() => {\n      return props.tagList.filter((t) => {\n        return t.type === 'mood';\n      }).sort((t) => {\n        return (selectedTags.value.includes(t.uid) ? -1 : 1);\n      });\n    });\n    const otherTags = computed(() => {\n      return props.tagList.filter((t) => {\n        return t.type !== 'mood';\n      }).sort((t) => {\n        return (selectedTags.value.includes(t.uid) ? -1 : 1);\n      });\n    });\n    const clearSearchQuery = () => {\n      const filter = { ...props.filter };\n      filter.q = '';\n      emit('change', filter);\n    };\n    const toggleTag = (tag) => {\n      const { tags, ...other } = { ...props.filter };\n      const filter = {\n        tags: addOrRemove(tags, tag.uid),\n        ...other,\n      };\n      emit('change', filter);\n      if (filter.tags.length) {\n        const tagNames = filter.tags.map((t) => {\n          const tagObj = props.tagList.find((el) => el.uid === t);\n          return tagObj ? tagObj.name : t;\n        }).sort((a, b) => a.localeCompare(b));\n        console.debug(\"filter\", filter, tagNames);\n        logRawEvent(\"view_search_results\", {\n          search_term: tagNames.join(','),\n          filter_type: \"tags\",\n        });\n      }\n    };\n    return {\n      selectedTags,\n      searchQuery,\n      moodTags,\n      otherTags,\n      toggleTag,\n      clearSearchQuery,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"list-filter\">\n    <div class=\"tag-list\" :class=\"{ 'is-loading': isLoading }\">\n      <div>\n        <Query v-if=\"searchQuery\" :q=\"searchQuery\" @click=\"clearSearchQuery\" />\n        <Tag\n          v-for=\"tag in moodTags\"\n          :key=\"`tag-list-tag-${tag.uid}`\"\n          :tag=\"tag\"\n          :selected=\"selectedTags.includes(tag.uid)\"\n          @click=\"toggleTag\"\n        />\n      </div>\n      <div>\n        <Tag\n          v-for=\"tag in otherTags\"\n          :key=\"`tag-list-tag-${tag.uid}`\"\n          :tag=\"tag\"\n          :selected=\"selectedTags.includes(tag.uid)\"\n          @click=\"toggleTag\"\n        />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.tag-list {\n  .query {\n    margin-right: 0.5rem;\n    margin-bottom: 0.5rem;\n  }\n\n  .tag {\n    margin-bottom: 0.25rem;\n\n    &:not(:last-child) {\n      margin-right: 0.25rem;\n    }\n  }\n\n  &.is-loading {\n    cursor: wait;\n    opacity: 0.7;\n\n    > * {\n      pointer-events: none;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    number: {\n      type: Number,\n      default: 4,\n    },\n  },\n});\n</script>\n<template>\n  <div class=\"loading-grid\">\n    <div class=\"card\" v-for=\"(item, index) in Array(number)\" :key=\"`placeholder-${item}-${index}`\">\n      <div class=\"card__visual\" />\n      <div class=\"card__meta\">\n        <div class=\"line line--primary\">\n          <div class=\"bar loading-placeholder\" />\n        </div>\n        <div class=\"line line--primary\">\n          <div class=\"bar loading-placeholder\" />\n        </div>\n        <div class=\"line line--secondary\">\n          <div class=\"bar loading-placeholder\" />\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n\n@keyframes loading {\n  from {\n    left: -100%;\n  }\n\n  to {\n    left: 100%;\n  }\n}\n\n/* animated background */\n.loading-placeholder {\n  position: relative;\n  overflow: hidden;\n\n  &::after {\n    content: \"\";\n    display: block;\n    background: rgb(128 128 128 / 5%);\n    top: 0;\n    bottom: 0;\n    position: absolute;\n    height: 100%;\n    width: 100%;\n    transform: translateX(0);\n    animation: 1.5s loading ease-in-out infinite;\n  }\n}\n\n.loading-grid {\n  display: grid;\n  grid-column-gap: 0.5rem;\n  grid-template-columns: repeat(4, 1fr);\n  width: 100%;\n\n  @include responsive.bp-medium {\n    grid-row-gap: 2rem;\n    grid-column-gap: 0.625rem;\n    grid-template-columns: repeat(2, 1fr);\n  }\n}\n\n.card {\n  &__visual {\n    width: 100%;\n    background: rgb(128 128 128 / 10%);\n    aspect-ratio: 1 / 1;\n  }\n\n  &__meta {\n    padding: 0.5rem 0 0;\n\n    .line {\n      position: relative;\n      height: 1.25rem;\n      width: 100%;\n      display: flex;\n      align-items: center;\n\n      .bar {\n        height: 1rem;\n        background: rgb(128 128 128 / 20%);\n      }\n\n      &--primary {\n        .bar {\n          height: 1.1rem;\n          width: 80%;\n        }\n      }\n\n      &--secondary {\n        .bar {\n          width: 40%;\n        }\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    number: {\n      type: Number,\n      default: 4,\n    },\n  },\n  setup() {},\n});\n</script>\n<template>\n  <div class=\"loading-table\">\n    <div\n      class=\"row\"\n      v-for=\"(item, index) in Array(number)\"\n      :key=\"`placeholder-row-${item}-${index}`\"\n    >\n      <div class=\"container\">\n        <div class=\"play\" />\n        <div class=\"name\">\n          <div class=\"line\">\n            <div class=\"bar loading-placeholder\" />\n          </div>\n        </div>\n        <div class=\"meta\">\n          <div class=\"line\">\n            <div class=\"bar loading-placeholder\" />\n          </div>\n          <div class=\"line\">\n            <div class=\"bar loading-placeholder\" />\n          </div>\n        </div>\n        <div class=\"actions\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n\n@keyframes loading {\n  from {\n    left: -100%;\n  }\n\n  to {\n    left: 100%;\n  }\n}\n\n/* animated background */\n.loading-placeholder {\n  position: relative;\n  overflow: hidden;\n\n  &::after {\n    content: \"\";\n    display: block;\n    background: rgb(128 128 128 / 5%);\n    top: 0;\n    bottom: 0;\n    position: absolute;\n    height: 100%;\n    width: 100%;\n    transform: translateX(0);\n    animation: 1.5s loading ease-in-out infinite;\n  }\n}\n\n.loading-table {\n  width: 100%;\n}\n\n.row {\n  border-bottom: 1px solid rgb(var(--c-dark) / 20%);\n\n  .container {\n    display: grid;\n    grid-gap: 1rem;\n    grid-template-columns: 48px 16fr 16fr 48px;\n    max-width: var(--container-width);\n    height: 74px;\n    margin-right: auto;\n    margin-left: auto;\n    padding: 0 1.5rem;\n  }\n\n  .line {\n    position: relative;\n    min-height: var(--t-fs-large);\n    width: 100%;\n    display: flex;\n    align-items: center;\n\n    .bar {\n      height: 16px;\n      background: rgb(128 128 128 / 10%);\n    }\n  }\n\n  .name {\n    display: flex;\n    align-items: center;\n\n    .bar {\n      height: 36px;\n      width: 90%;\n    }\n  }\n\n  .meta {\n    display: grid;\n\n    .line {\n      margin: 2px 0;\n\n      &:first-child {\n        align-items: flex-end;\n      }\n\n      &:last-child {\n        align-items: flex-start;\n      }\n    }\n\n    .bar {\n      width: 40%;\n    }\n  }\n\n  @include responsive.bp-medium {\n    .container {\n      grid-template-columns: 40px 1fr 40px;\n      grid-template-areas:\n        \"play name actions\"\n        \"play meta actions\";\n      height: 61px;\n      max-width: unset;\n      margin-right: unset;\n      margin-left: unset;\n      padding: 0 0.625rem;\n      grid-row-gap: 0;\n    }\n\n    .play {\n      grid-area: play;\n    }\n\n    .name {\n      grid-area: name;\n      height: 28px;\n      align-items: flex-end;\n\n      .bar {\n        height: 20px;\n        width: 90%;\n      }\n    }\n\n    .meta {\n      grid-area: meta;\n      height: 28px;\n      align-items: flex-start;\n\n      .line {\n        &:last-child {\n          display: none;\n        }\n      }\n\n      .bar {\n        height: 16px;\n        width: 90%;\n      }\n    }\n\n    .actions {\n      grid-area: actions;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from \"vue\";\nimport { useElementVisibility } from \"@vueuse/core\";\nimport { debounce } from \"lodash-es\";\n\nimport LoadingGrid from \"./LoadingGrid.vue\";\nimport LoadingTable from \"./LoadingTable.vue\";\n\nconst DEBOUNCE_FOR = 200;\n\nexport default defineComponent({\n  props: {\n    hasNext: {\n      type: Boolean,\n      default: false,\n    },\n    layout: {\n      type: String,\n      default: \"grid\",\n    },\n  },\n  emits: [\"onEnter\"],\n  setup(props, { emit }) {\n    const root = ref(null);\n    const inViewport = useElementVisibility(root);\n    const onEnter = debounce(\n      async () => {\n        emit(\"onEnter\");\n      },\n      DEBOUNCE_FOR,\n      { leading: true }\n    );\n    watch(\n      () => inViewport.value,\n      (state) => {\n        if (state) {\n          onEnter();\n        }\n      }\n    );\n    const placeholder = computed(() => {\n      return props.layout === \"grid\" ? LoadingGrid : LoadingTable;\n    });\n    return {\n      root,\n      onEnter,\n      placeholder,\n    };\n  },\n});\n</script>\n<template>\n  <div ref=\"root\" @enter=\"onEnter\" class=\"loading-more\" :class=\"layout\">\n    <slot name=\"default\">\n      <component :is=\"placeholder\" />\n    </slot>\n  </div>\n</template>\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n\n.loading-more {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 4rem;\n\n  &.grid {\n    margin-top: 1rem;\n\n    @include responsive.bp-medium {\n      margin-top: 0.5rem;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nexport default defineComponent({\n  props: {\n    filter: {\n      type: Object,\n      default: () => {},\n    },\n  },\n  setup(props) {\n    const { t } = useI18n();\n    const hasFilter = computed(() => {\n      if (props.filter.q) {\n        return true;\n      }\n      return !!props.filter.tags.length;\n    });\n    return {\n      t,\n      hasFilter,\n    };\n  },\n});\n</script>\n<template>\n  <div class=\"no-results\">\n    <slot name=\"default\">\n      <div v-if=\"hasFilter\" class=\"body body--no-results\">\n        <i18n-t keypath=\"loading.noResults.lead\" tag=\"p\" />\n        <i18n-t keypath=\"loading.noResults.cta\" tag=\"p\">\n          <router-link to=\"\" v-text=\"t('loading.noResults.ctaText')\" />\n        </i18n-t>\n      </div>\n      <div v-else class=\"body body--no-favorites\">\n        <i18n-t keypath=\"loading.noFavorites.lead\" tag=\"p\" />\n        <i18n-t keypath=\"loading.noFavorites.cta\" tag=\"p\">\n          <router-link to=\"/discover/\" v-text=\"t('loading.noFavorites.ctaText')\" />\n        </i18n-t>\n      </div>\n    </slot>\n  </div>\n</template>\n<style lang=\"scss\" scoped>\n.no-results {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  min-height: 4rem;\n  margin-top: 4rem;\n  margin-bottom: 4rem;\n\n  > .body {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    font-size: var(--t-fs-large);\n\n    a {\n      text-decoration: underline;\n    }\n  }\n}\n</style>\n","var _shared = {\n  pullStartY: null,\n  pullMoveY: null,\n  handlers: [],\n  styleEl: null,\n  events: null,\n  dist: 0,\n  state: 'pending',\n  timeout: null,\n  distResisted: 0,\n  supportsPassive: false,\n  supportsPointerEvents: typeof window !== 'undefined' && !!window.PointerEvent\n};\n\ntry {\n  window.addEventListener('test', null, {\n    get passive() {\n      // eslint-disable-line getter-return\n      _shared.supportsPassive = true;\n    }\n\n  });\n} catch (e) {// do nothing\n}\n\nfunction setupDOM(handler) {\n  if (!handler.ptrElement) {\n    var ptr = document.createElement('div');\n\n    if (handler.mainElement !== document.body) {\n      handler.mainElement.parentNode.insertBefore(ptr, handler.mainElement);\n    } else {\n      document.body.insertBefore(ptr, document.body.firstChild);\n    }\n\n    ptr.classList.add(((handler.classPrefix) + \"ptr\"));\n    ptr.innerHTML = handler.getMarkup().replace(/__PREFIX__/g, handler.classPrefix);\n    handler.ptrElement = ptr;\n\n    if (typeof handler.onInit === 'function') {\n      handler.onInit(handler);\n    } // Add the css styles to the style node, and then\n    // insert it into the dom\n\n\n    if (!_shared.styleEl) {\n      _shared.styleEl = document.createElement('style');\n\n      _shared.styleEl.setAttribute('id', 'pull-to-refresh-js-style');\n\n      document.head.appendChild(_shared.styleEl);\n    }\n\n    _shared.styleEl.textContent = handler.getStyles().replace(/__PREFIX__/g, handler.classPrefix).replace(/\\s+/g, ' ');\n  }\n\n  return handler;\n}\n\nfunction onReset(handler) {\n  if (!handler.ptrElement) { return; }\n  handler.ptrElement.classList.remove(((handler.classPrefix) + \"refresh\"));\n  handler.ptrElement.style[handler.cssProp] = '0px';\n  setTimeout(function () {\n    // remove previous ptr-element from DOM\n    if (handler.ptrElement && handler.ptrElement.parentNode) {\n      handler.ptrElement.parentNode.removeChild(handler.ptrElement);\n      handler.ptrElement = null;\n    } // reset state\n\n\n    _shared.state = 'pending';\n  }, handler.refreshTimeout);\n}\n\nfunction update(handler) {\n  var iconEl = handler.ptrElement.querySelector((\".\" + (handler.classPrefix) + \"icon\"));\n  var textEl = handler.ptrElement.querySelector((\".\" + (handler.classPrefix) + \"text\"));\n\n  if (iconEl) {\n    if (_shared.state === 'refreshing') {\n      iconEl.innerHTML = handler.iconRefreshing;\n    } else {\n      iconEl.innerHTML = handler.iconArrow;\n    }\n  }\n\n  if (textEl) {\n    if (_shared.state === 'releasing') {\n      textEl.innerHTML = handler.instructionsReleaseToRefresh;\n    }\n\n    if (_shared.state === 'pulling' || _shared.state === 'pending') {\n      textEl.innerHTML = handler.instructionsPullToRefresh;\n    }\n\n    if (_shared.state === 'refreshing') {\n      textEl.innerHTML = handler.instructionsRefreshing;\n    }\n  }\n}\n\nvar _ptr = {\n  setupDOM: setupDOM,\n  onReset: onReset,\n  update: update\n};\n\nvar _timeout;\n\nvar screenY = function screenY(event) {\n  if (_shared.pointerEventsEnabled && _shared.supportsPointerEvents) {\n    return event.screenY;\n  }\n\n  return event.touches[0].screenY;\n};\n\nvar _setupEvents = (function () {\n  var _el;\n\n  function _onTouchStart(e) {\n    // here, we must pick a handler first, and then append their html/css on the DOM\n    var target = _shared.handlers.filter(function (h) { return h.contains(e.target); })[0];\n\n    _shared.enable = !!target;\n\n    if (target && _shared.state === 'pending') {\n      _el = _ptr.setupDOM(target);\n\n      if (target.shouldPullToRefresh()) {\n        _shared.pullStartY = screenY(e);\n      }\n\n      clearTimeout(_shared.timeout);\n\n      _ptr.update(target);\n    }\n  }\n\n  function _onTouchMove(e) {\n    if (!(_el && _el.ptrElement && _shared.enable)) {\n      return;\n    }\n\n    if (!_shared.pullStartY) {\n      if (_el.shouldPullToRefresh()) {\n        _shared.pullStartY = screenY(e);\n      }\n    } else {\n      _shared.pullMoveY = screenY(e);\n    }\n\n    if (_shared.state === 'refreshing') {\n      if (e.cancelable && _el.shouldPullToRefresh() && _shared.pullStartY < _shared.pullMoveY) {\n        e.preventDefault();\n      }\n\n      return;\n    }\n\n    if (_shared.state === 'pending') {\n      _el.ptrElement.classList.add(((_el.classPrefix) + \"pull\"));\n\n      _shared.state = 'pulling';\n\n      _ptr.update(_el);\n    }\n\n    if (_shared.pullStartY && _shared.pullMoveY) {\n      _shared.dist = _shared.pullMoveY - _shared.pullStartY;\n    }\n\n    _shared.distExtra = _shared.dist - _el.distIgnore;\n\n    if (_shared.distExtra > 0) {\n      if (e.cancelable) {\n        e.preventDefault();\n      }\n\n      _el.ptrElement.style[_el.cssProp] = (_shared.distResisted) + \"px\";\n      _shared.distResisted = _el.resistanceFunction(_shared.distExtra / _el.distThreshold) * Math.min(_el.distMax, _shared.distExtra);\n\n      if (_shared.state === 'pulling' && _shared.distResisted > _el.distThreshold) {\n        _el.ptrElement.classList.add(((_el.classPrefix) + \"release\"));\n\n        _shared.state = 'releasing';\n\n        _ptr.update(_el);\n      }\n\n      if (_shared.state === 'releasing' && _shared.distResisted < _el.distThreshold) {\n        _el.ptrElement.classList.remove(((_el.classPrefix) + \"release\"));\n\n        _shared.state = 'pulling';\n\n        _ptr.update(_el);\n      }\n    }\n  }\n\n  function _onTouchEnd() {\n    if (!(_el && _el.ptrElement && _shared.enable)) {\n      return;\n    } // wait 1/2 sec before unmounting...\n\n\n    clearTimeout(_timeout);\n    _timeout = setTimeout(function () {\n      if (_el && _el.ptrElement && _shared.state === 'pending') {\n        _ptr.onReset(_el);\n      }\n    }, 500);\n\n    if (_shared.state === 'releasing' && _shared.distResisted > _el.distThreshold) {\n      _shared.state = 'refreshing';\n      _el.ptrElement.style[_el.cssProp] = (_el.distReload) + \"px\";\n\n      _el.ptrElement.classList.add(((_el.classPrefix) + \"refresh\"));\n\n      _shared.timeout = setTimeout(function () {\n        var retval = _el.onRefresh(function () { return _ptr.onReset(_el); });\n\n        if (retval && typeof retval.then === 'function') {\n          retval.then(function () { return _ptr.onReset(_el); });\n        }\n\n        if (!retval && !_el.onRefresh.length) {\n          _ptr.onReset(_el);\n        }\n      }, _el.refreshTimeout);\n    } else {\n      if (_shared.state === 'refreshing') {\n        return;\n      }\n\n      _el.ptrElement.style[_el.cssProp] = '0px';\n      _shared.state = 'pending';\n    }\n\n    _ptr.update(_el);\n\n    _el.ptrElement.classList.remove(((_el.classPrefix) + \"release\"));\n\n    _el.ptrElement.classList.remove(((_el.classPrefix) + \"pull\"));\n\n    _shared.pullStartY = _shared.pullMoveY = null;\n    _shared.dist = _shared.distResisted = 0;\n  }\n\n  function _onScroll() {\n    if (_el) {\n      _el.mainElement.classList.toggle(((_el.classPrefix) + \"top\"), _el.shouldPullToRefresh());\n    }\n  }\n\n  var _passiveSettings = _shared.supportsPassive ? {\n    passive: _shared.passive || false\n  } : undefined;\n\n  if (_shared.pointerEventsEnabled && _shared.supportsPointerEvents) {\n    window.addEventListener('pointerup', _onTouchEnd);\n    window.addEventListener('pointerdown', _onTouchStart);\n    window.addEventListener('pointermove', _onTouchMove, _passiveSettings);\n  } else {\n    window.addEventListener('touchend', _onTouchEnd);\n    window.addEventListener('touchstart', _onTouchStart);\n    window.addEventListener('touchmove', _onTouchMove, _passiveSettings);\n  }\n\n  window.addEventListener('scroll', _onScroll);\n  return {\n    onTouchEnd: _onTouchEnd,\n    onTouchStart: _onTouchStart,\n    onTouchMove: _onTouchMove,\n    onScroll: _onScroll,\n\n    destroy: function destroy() {\n      if (_shared.pointerEventsEnabled && _shared.supportsPointerEvents) {\n        window.removeEventListener('pointerdown', _onTouchStart);\n        window.removeEventListener('pointerup', _onTouchEnd);\n        window.removeEventListener('pointermove', _onTouchMove, _passiveSettings);\n      } else {\n        window.removeEventListener('touchstart', _onTouchStart);\n        window.removeEventListener('touchend', _onTouchEnd);\n        window.removeEventListener('touchmove', _onTouchMove, _passiveSettings);\n      }\n\n      window.removeEventListener('scroll', _onScroll);\n    }\n\n  };\n});\n\nvar _ptrMarkup = \"\\n<div class=\\\"__PREFIX__box\\\">\\n  <div class=\\\"__PREFIX__content\\\">\\n    <div class=\\\"__PREFIX__icon\\\"></div>\\n    <div class=\\\"__PREFIX__text\\\"></div>\\n  </div>\\n</div>\\n\";\n\nvar _ptrStyles = \"\\n.__PREFIX__ptr {\\n  box-shadow: inset 0 -3px 5px rgba(0, 0, 0, 0.12);\\n  pointer-events: none;\\n  font-size: 0.85em;\\n  font-weight: bold;\\n  top: 0;\\n  height: 0;\\n  transition: height 0.3s, min-height 0.3s;\\n  text-align: center;\\n  width: 100%;\\n  overflow: hidden;\\n  display: flex;\\n  align-items: flex-end;\\n  align-content: stretch;\\n}\\n\\n.__PREFIX__box {\\n  padding: 10px;\\n  flex-basis: 100%;\\n}\\n\\n.__PREFIX__pull {\\n  transition: none;\\n}\\n\\n.__PREFIX__text {\\n  margin-top: .33em;\\n  color: rgba(0, 0, 0, 0.3);\\n}\\n\\n.__PREFIX__icon {\\n  color: rgba(0, 0, 0, 0.3);\\n  transition: transform .3s;\\n}\\n\\n/*\\nWhen at the top of the page, disable vertical overscroll so passive touch\\nlisteners can take over.\\n*/\\n.__PREFIX__top {\\n  touch-action: pan-x pan-down pinch-zoom;\\n}\\n\\n.__PREFIX__release .__PREFIX__icon {\\n  transform: rotate(180deg);\\n}\\n\";\n\nvar _defaults = {\n  distThreshold: 60,\n  distMax: 80,\n  distReload: 50,\n  distIgnore: 0,\n  mainElement: 'body',\n  triggerElement: 'body',\n  ptrElement: '.ptr',\n  classPrefix: 'ptr--',\n  cssProp: 'min-height',\n  iconArrow: '&#8675;',\n  iconRefreshing: '&hellip;',\n  instructionsPullToRefresh: 'Pull down to refresh',\n  instructionsReleaseToRefresh: 'Release to refresh',\n  instructionsRefreshing: 'Refreshing',\n  refreshTimeout: 500,\n  getMarkup: function () { return _ptrMarkup; },\n  getStyles: function () { return _ptrStyles; },\n  onInit: function () {},\n  onRefresh: function () { return location.reload(); },\n  resistanceFunction: function (t) { return Math.min(1, t / 2.5); },\n  shouldPullToRefresh: function () { return !window.scrollY; }\n};\n\nvar _methods = ['mainElement', 'ptrElement', 'triggerElement'];\nvar _setupHandler = (function (options) {\n  var _handler = {}; // merge options with defaults\n\n  Object.keys(_defaults).forEach(function (key) {\n    _handler[key] = options[key] || _defaults[key];\n  }); // normalize timeout value, even if it is zero\n\n  _handler.refreshTimeout = typeof options.refreshTimeout === 'number' ? options.refreshTimeout : _defaults.refreshTimeout; // normalize elements\n\n  _methods.forEach(function (method) {\n    if (typeof _handler[method] === 'string') {\n      _handler[method] = document.querySelector(_handler[method]);\n    }\n  }); // attach events lazily\n\n\n  if (!_shared.events) {\n    _shared.events = _setupEvents();\n  }\n\n  _handler.contains = function (target) {\n    return _handler.triggerElement.contains(target);\n  };\n\n  _handler.destroy = function () {\n    // stop pending any pending callbacks\n    clearTimeout(_shared.timeout); // remove handler from shared state\n\n    var offset = _shared.handlers.indexOf(_handler);\n\n    _shared.handlers.splice(offset, 1);\n  };\n\n  return _handler;\n});\n\nvar index = {\n  setPassiveMode: function setPassiveMode(isPassive) {\n    _shared.passive = isPassive;\n  },\n\n  setPointerEventsMode: function setPointerEventsMode(isEnabled) {\n    _shared.pointerEventsEnabled = isEnabled;\n  },\n\n  destroyAll: function destroyAll() {\n    if (_shared.events) {\n      _shared.events.destroy();\n\n      _shared.events = null;\n    }\n\n    _shared.handlers.forEach(function (h) {\n      h.destroy();\n    });\n  },\n\n  init: function init(options) {\n    if ( options === void 0 ) options = {};\n\n    var handler = _setupHandler(options);\n\n    _shared.handlers.push(handler);\n\n    return handler;\n  },\n\n  // export utils for testing\n  _: {\n    setupHandler: _setupHandler,\n    setupEvents: _setupEvents,\n    setupDOM: _ptr.setupDOM,\n    onReset: _ptr.onReset,\n    update: _ptr.update\n  }\n};\n\nexport default index;\n","import type { Ref } from \"vue\";\nimport { onActivated, onDeactivated } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport PullToRefresh from \"pulltorefreshjs\";\n\nexport function usePullToRefresh(rootEl: Ref<HTMLElement | null>, handler: () => any) {\n  const { t } = useI18n();\n  onActivated(() => {\n    if (!rootEl.value) {\n      return;\n    }\n    PullToRefresh.init({\n      // @ts-ignore\n      mainElement: rootEl.value,\n      onRefresh: handler,\n      instructionsPullToRefresh: t(\"pullToRefresh.pull\"),\n      instructionsReleaseToRefresh: t(\"pullToRefresh.release\"),\n      instructionsRefreshing: t(\"pullToRefresh.refreshing\"),\n      // iconArrow: \"&#8616;\",\n      getStyles: () => \"\",\n    });\n  });\n  onDeactivated(() => {\n    if (!rootEl.value) {\n      return;\n    }\n    PullToRefresh.destroyAll();\n  });\n  return {};\n}\n","<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref, watch } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport { storeToRefs } from \"pinia\";\nimport { isEqual } from \"lodash-es\";\n\nimport { getArtists, getArtistsTags } from \"@/api/catalog\";\nimport ArtistCard from \"@/components/catalog/artist/Card.vue\";\nimport ListFilter from \"@/components/filter/ListFilter.vue\";\nimport LoadingMore from \"@/components/ui/loading/Loading.vue\";\nimport NoResults from \"@/components/ui/loading/NoResults.vue\";\nimport { usePullToRefresh } from \"@/composables/pullToRefresh\";\nimport { useRatingStore } from \"@/stores/rating\";\nimport { useUiStore } from \"@/stores/ui\";\nimport type { Artist } from \"@/typings\";\n\nexport default defineComponent({\n  components: {\n    ListFilter,\n    LoadingMore,\n    NoResults,\n    ArtistCard,\n  },\n  props: {\n    filter: {\n      type: Array,\n      default: () => [],\n    },\n    scope: {\n      type: String,\n      default: null,\n    },\n    query: {\n      type: Object,\n      default: () => {},\n    },\n    initialFilter: {\n      type: Object,\n      default: () => null,\n    },\n    disableUserFilter: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props) {\n    const route = useRoute();\n    const router = useRouter();\n    const { filterExpanded } = storeToRefs(useUiStore());\n    const { injectRatings } = useRatingStore();\n    const numResults = ref(-1);\n    const limit = 16;\n    const lastOffset = ref(0);\n    const artists = ref<Array<Artist>>([]);\n    const tagList = ref([]);\n    const tagListLoading = ref(false);\n    const hasNext = ref(false);\n    const userFilter = computed(() => {\n      return props.query;\n    });\n    const combinedFilter = computed(() => {\n      // @ts-ignore\n      const tags = [...(props.initialFilter?.tags ?? []), ...(userFilter.value?.tags ?? [])];\n      const merged = { ...props.initialFilter, ...userFilter.value };\n      // @ts-ignore\n      merged.tags = tags;\n      if (props.scope === \"collection\") {\n        // @ts-ignore\n        merged.user_rating = 1;\n      }\n      return merged;\n    });\n    const ordering = computed(() => {\n      return props.scope === \"collection\" ? [\"time_rated\"] : [];\n    });\n    // eslint-disable-next-line @typescript-eslint/no-shadow\n    const fetchArtists = async (limit = 16, offset = 0) => {\n      // NOTE: depending on the layout we need different data / expands\n      const expand = [\"tags\"];\n      const { count, next, results } = await getArtists(\n        limit,\n        offset,\n        combinedFilter.value,\n        ordering.value,\n        expand\n      );\n      hasNext.value = !!next;\n      numResults.value = count;\n      // @ts-ignore\n      artists.value.push(...results);\n      await injectRatings(results);\n    };\n    const fetchNextPage = async () => {\n      const offset = lastOffset.value + limit;\n      await fetchArtists(limit, offset);\n      lastOffset.value = offset;\n    };\n    const fetchTags = async () => {\n      tagListLoading.value = true;\n      tagList.value = await getArtistsTags(combinedFilter.value);\n      tagListLoading.value = false;\n    };\n    const showSearchBar = computed(() => {\n      return !props.disableUserFilter;\n    });\n    const showUserFilter = computed(() => {\n      if (props.disableUserFilter) {\n        return false;\n      }\n      return filterExpanded.value;\n    });\n    const updateUserFilter = (filter: any) => {\n      const query = filter;\n      const routeName = route.name || \"discoverArtists\";\n      router.push({ name: routeName, query });\n    };\n    onMounted(() => {\n      fetchArtists();\n      fetchTags().then(() => {});\n    });\n    const listEl = ref(null);\n    usePullToRefresh(listEl, () => {\n      fetchArtists();\n      fetchTags().then(() => {});\n    });\n    watch(\n      () => combinedFilter.value,\n      async (oldFilter, newFilter) => {\n        if (isEqual(oldFilter, newFilter)) {\n          return;\n        }\n        lastOffset.value = 0;\n        artists.value = [];\n        numResults.value = -1;\n        fetchArtists(limit, 0).then(() => {});\n        fetchTags().then(() => {});\n      }\n    );\n    return {\n      combinedFilter,\n      tagList,\n      tagListLoading,\n      artists,\n      hasNext,\n      numResults,\n      fetchNextPage,\n      showSearchBar,\n      showUserFilter,\n      userFilter,\n      updateUserFilter,\n      listEl,\n    };\n  },\n});\n</script>\n<template>\n  <div v-if=\"showUserFilter\" class=\"list-filter-container\">\n    <ListFilter\n      :filter=\"userFilter\"\n      :tag-list=\"tagList\"\n      :is-loading=\"tagListLoading\"\n      @change=\"updateUserFilter\"\n    />\n  </div>\n  <div ref=\"listEl\" class=\"artist-list\">\n    <LoadingMore v-if=\"numResults === -1\" />\n    <NoResults v-if=\"numResults === 0\" :filter=\"combinedFilter\" />\n    <div class=\"list-container\">\n      <ArtistCard v-for=\"artist in artists\" :key=\"artist.uid\" :artist=\"artist\" />\n    </div>\n    <LoadingMore v-if=\"artists.length && hasNext\" :has-next=\"hasNext\" @on-enter=\"fetchNextPage\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/container\";\n@use \"@/style/elements/grid\";\n\n.list-filter-container {\n  background: rgb(0 0 0);\n  padding-top: 0.75rem;\n  padding-bottom: 0.5rem;\n  margin-bottom: 1rem;\n\n  .list-filter {\n    @include container.default;\n  }\n}\n\n.artist-list {\n  margin-bottom: 4rem;\n\n  .list-container {\n    @include container.default;\n    @include grid.default;\n  }\n\n  .loading-more {\n    @include container.default;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconPlay from \"@/components/ui/icon/IconPlay.vue\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    PlayAction,\n    IconPlay,\n  },\n  props: {\n    objKey: {\n      type: String,\n      required: false,\n      default: null,\n    },\n    filter: {\n      type: Object,\n      required: false,\n      default: () => {},\n    },\n    ordering: {\n      type: Array,\n      default: () => [],\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup() {\n    return {};\n  },\n});\n</script>\n\n<template>\n  <PlayAction\n    class=\"play-all-small\"\n    :obj-key=\"objKey\"\n    :filter=\"filter\"\n    :ordering=\"ordering\"\n    :restart-queue=\"true\"\n    mode=\"replace\"\n  >\n    <div class=\"wrapper\">\n      <CircleButton\n        :outlined=\"true\"\n        :filled=\"false\"\n        :color-var=\"colorVar\"\n        fill-color-var=\"--c-white\"\n        outline-opacity=\"20%\"\n        hover-background-opacity=\"10%\"\n      >\n        <IconPlay :color-var=\"colorVar\" />\n      </CircleButton>\n      <slot name=\"default\" />\n    </div>\n  </PlayAction>\n</template>\n\n<style lang=\"scss\" scoped>\n.play-all-small {\n  transition: opacity 100ms;\n\n  .wrapper {\n    display: flex;\n    align-items: center;\n    cursor: pointer;\n    padding-right: 1rem;\n\n    .circle-button {\n      margin-right: 1rem;\n    }\n  }\n\n  &:has(.is-loading) {\n    pointer-events: none;\n    cursor: wait;\n    opacity: 0.5;\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onActivated, onDeactivated, onMounted, onUnmounted, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { DateTime } from \"luxon\";\n\nconst TIME_UPDATE_INTERVAL = 60000;\n\nconst props = defineProps<{\n  dateTime: DateTime;\n}>();\n\nconst { locale, t } = useI18n();\n\nconst now = ref(DateTime.now());\nconst isToday = computed(() => props.dateTime.hasSame(now.value, \"day\"));\nconst timeDisplay = computed(() => props.dateTime.toFormat(\"HH:mm\"));\nconst dateDisplay = computed(() => {\n  if (isToday.value) {\n    return t(\"datetime.today\");\n  }\n  return props.dateTime.setLocale(locale.value).toLocaleString(DateTime.DATE_SHORT);\n});\n\nlet interval: ReturnType<typeof setInterval>;\nconst startInterval = () => {\n  interval = setInterval(() => {\n    now.value = DateTime.now();\n  }, TIME_UPDATE_INTERVAL);\n};\nconst stopInterval = () => {\n  if (interval) {\n    clearInterval(interval);\n  }\n};\n\nonMounted(startInterval);\nonActivated(startInterval);\nonUnmounted(stopInterval);\nonDeactivated(stopInterval);\n</script>\n\n<template>\n  <span class=\"datetime\">\n    <slot name=\"default\"></slot>\n    <span class=\"date\" v-text=\"dateDisplay\" />\n    <span class=\"time\" v-text=\"timeDisplay\" />\n  </span>\n</template>\n\n<style lang=\"scss\" scoped>\n.datetime {\n  display: inline-flex;\n\n  .date {\n    text-transform: capitalize;\n    margin-right: 0.5em;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\nimport { DateTime } from \"luxon\";\n\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport MediaArtists from \"@/components/catalog/media/MediaArtists.vue\";\nimport MediaReleases from \"@/components/catalog/media/MediaReleases.vue\";\nimport ContextMenu from \"@/components/context-menu/ContextMenu.vue\";\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport RelativeDateTime from \"@/components/ui/date/RelativeDateTime.vue\";\nimport Duration from \"@/components/ui/time/Duration.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { useObjKey } from \"@/composables/obj\";\nimport { useSettings } from \"@/composables/settings\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    ContextMenu,\n    PlayAction,\n    MediaArtists,\n    MediaReleases,\n    UserRating,\n    RelativeDateTime,\n    Duration,\n  },\n  props: {\n    media: {\n      type: Object,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { objKey } = useObjKey(props.media);\n    const { isMobile } = useDevice();\n    const { darkMode, userSettings } = useSettings();\n    const testingEnabled = computed(() => userSettings.value?.testingEnabled);\n    const isHover = ref(isMobile);\n    const release = computed(() => {\n      return props.media.releases && props.media.releases.length ? props.media.releases[0] : null;\n    });\n    const latestAirplay = computed(() => {\n      if (!props.media.latestAirplay) {\n        return null;\n      }\n      return DateTime.fromISO(props.media.latestAirplay);\n    });\n    const color = computed(() => {\n      return release.value && release.value.image ? release.value.image.rgb : null;\n    });\n    return {\n      objKey,\n      testingEnabled,\n      isMobile,\n      darkMode,\n      isHover,\n      release,\n      color,\n      latestAirplay,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"media-row\"\n    @mouseenter=\"isMobile ? null : (isHover = true)\"\n    @mouseleave=\"isMobile ? null : (isHover = false)\"\n  >\n    <div class=\"container\">\n      <div class=\"play\">\n        <PlayAction\n          :obj-key=\"objKey\"\n          :outlined=\"true\"\n          :color=\"darkMode ? [255, 255, 255] : [0, 0, 0]\"\n        />\n        <div\n          v-if=\"testingEnabled\"\n          class=\"license\"\n          :class=\"`license--${media.license}`\"\n          v-text=\"media.license.charAt(0)\"\n        />\n      </div>\n      <div class=\"name\">\n        <router-link\n          :to=\"{\n            name: 'mediaDetail',\n            params: {\n              uid: media.uid,\n            },\n          }\"\n          v-text=\"media.name\"\n        />\n        <div v-if=\"media.lyricsExplicit === 'explicit'\" class=\"lyrics-explicit\">\n          <span title=\"Explicit lyrics\">E</span>\n        </div>\n      </div>\n      <div class=\"artist\">\n        <MediaArtists :artists=\"media.artists\" />\n      </div>\n      <div class=\"release\">\n        <MediaReleases :releases=\"media.releases\" />\n      </div>\n      <div class=\"airplays\">\n        <RelativeDateTime v-if=\"latestAirplay\" :date-time=\"latestAirplay\" />\n      </div>\n      <Duration class=\"duration\" :seconds=\"media.duration\" />\n      <div class=\"actions\">\n        <CircleButton>\n          <UserRating :obj-key=\"objKey\" :hide-if-unset=\"!isHover\" />\n        </CircleButton>\n        <ContextMenu :obj=\"media\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n@use \"@/style/elements/list-row\";\n\n.media-row {\n  @include list-row.default;\n}\n\n.container {\n  @include container.default;\n\n  display: grid;\n  grid-row-gap: 0;\n  grid-column-gap: 1rem;\n  grid-template-areas:\n    \"play name artist  duration actions\"\n    \"play name release airplays actions\";\n  grid-template-columns: 96px 16fr 10fr 6fr 96px;\n  height: 71px;\n  color: rgb(var(--c-dark));\n  transition: border-bottom 200ms 1400ms, color 200ms, background 200ms;\n\n  > div {\n    display: flex;\n    align-items: center;\n  }\n\n  .play {\n    position: relative;\n    grid-area: play;\n\n    & > .license {\n      top: 6px;\n      position: absolute;\n      font-size: 8px;\n      font-family: monospace;\n      font-weight: 600;\n      left: 0;\n      color: currentcolor;\n      text-transform: uppercase;\n      display: none;\n\n      &--major,\n      &--major_root {\n        display: block;\n        color: rgb(var(--c-red));\n      }\n\n      &--independent {\n        display: block;\n        color: rgb(var(--c-green));\n      }\n    }\n  }\n\n  .name {\n    grid-area: name;\n\n    @include typo.large;\n\n    min-width: 0;\n    margin-left: -48px;\n\n    > a {\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n\n    .lyrics-explicit {\n      position: relative;\n      display: flex;\n\n      > span {\n        @include typo.light;\n\n        top: -10px;\n        position: absolute;\n        display: inline-flex;\n        padding-left: 0.25em;\n        font-size: 10px;\n\n        @include responsive.bp-medium-up {\n          font-size: 12px;\n          padding-left: 0.5em;\n          top: -16px;\n        }\n      }\n    }\n  }\n\n  .artist {\n    grid-area: artist;\n    align-self: end;\n    overflow: hidden;\n\n    > div {\n      overflow: hidden;\n    }\n  }\n\n  .release {\n    grid-area: release;\n    align-self: start;\n    min-width: 0;\n\n    > div {\n      overflow: hidden;\n    }\n  }\n\n  .duration {\n    grid-area: duration;\n    align-self: end;\n  }\n\n  .airplays {\n    grid-area: airplays;\n    align-self: start;\n    overflow: hidden;\n  }\n\n  .actions {\n    grid-area: actions;\n    justify-self: flex-end;\n  }\n\n  @include responsive.bp-medium {\n    grid-template-areas:\n      \"play name   actions\"\n      \"play artist actions\";\n    grid-template-columns: 80px 1fr 80px;\n    height: 60px;\n\n    .release,\n    .airplays,\n    .duration {\n      display: none;\n    }\n\n    .name {\n      align-self: end;\n      margin-left: -40px;\n    }\n\n    .artist {\n      align-self: start;\n      margin-left: -40px;\n\n      @include typo.light;\n      @include typo.dim;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nexport default defineComponent({\n  setup() {\n    const { t } = useI18n();\n    return {\n      t,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"media-row-header\">\n    <div class=\"container\">\n      <div class=\"label\" />\n      <div class=\"label label--track\">\n        <span v-text=\"t('catalog.ct.media')\" />\n      </div>\n      <div class=\"label\" v-text=\"`${t('catalog.ct.artist')}/${t('catalog.ct.release')}`\" />\n      <div class=\"label label--airtime\" v-text=\"`${t('text.duration')}/${t('text.airtime')}:`\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/container\";\n\n.media-row-header {\n  background: rgb(var(--c-light));\n  height: 41px;\n  align-items: center;\n  display: flex;\n  border-bottom: 1px solid rgb(var(--c-dark) / 20%);\n\n  [data-theme=\"dark\"] & {\n    border-bottom: 1px solid rgb(var(--c-dark) / 10%);\n  }\n}\n\n.container {\n  @include container.default;\n\n  display: grid;\n  grid-row-gap: 0;\n  grid-column-gap: 1rem;\n  grid-template-columns: 96px 16fr 10fr 6fr 96px;\n\n  .label {\n    &::first-letter {\n      text-transform: uppercase;\n    }\n\n    &--track {\n      margin-left: -48px;\n    }\n\n    &--airtime {\n      grid-column: span 2;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, onUnmounted, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport { DateTime } from \"luxon\";\nimport { storeToRefs } from \"pinia\";\nimport { isEqual } from \"lodash-es\";\n\nimport { getMedia, getMediaTags } from \"@/api/catalog\";\nimport PlayAllAction from \"@/components/catalog/actions/PlayAllAction.vue\";\nimport MediaRow from \"@/components/catalog/media/Row.vue\";\nimport MediaRowHeader from \"@/components/catalog/media/RowHeader.vue\";\nimport ContextMenu from \"@/components/context-menu/ContextMenu.vue\";\nimport ListFilter from \"@/components/filter/ListFilter.vue\";\nimport LoadingMore from \"@/components/ui/loading/Loading.vue\";\nimport NoResults from \"@/components/ui/loading/NoResults.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { usePullToRefresh } from \"@/composables/pullToRefresh\";\nimport { useRatingStore } from \"@/stores/rating\";\nimport { useUiStore } from \"@/stores/ui\";\n\nexport default defineComponent({\n  components: {\n    ListFilter,\n    PlayAllAction,\n    ContextMenu,\n    MediaRowHeader,\n    MediaRow,\n    LoadingMore,\n    NoResults,\n  },\n  props: {\n    scope: {\n      type: String,\n      default: null,\n    },\n    query: {\n      type: Object,\n      default: () => {},\n    },\n    initialFilter: {\n      type: Object,\n      default: () => null,\n    },\n    showListActions: {\n      type: Boolean,\n      default: false,\n    },\n    disableUserFilter: {\n      type: Boolean,\n      default: false,\n    },\n    hideUpcoming: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: [\"allLoaded\", \"hasMore\"],\n  setup(props, { emit }) {\n    const { t } = useI18n();\n    const route = useRoute();\n    const router = useRouter();\n    const { isDesktop } = useDevice();\n    const { filterExpanded } = storeToRefs(useUiStore());\n    const { injectRatings } = useRatingStore();\n    const now = ref(DateTime.now());\n    const timer = ref(null);\n    const numResults = ref(-1);\n    const limit = 16;\n    const lastOffset = ref(0);\n    const mediaList = ref([]);\n    const mediaListLoading = ref(false);\n    const tagList = ref([]);\n    const tagListLoading = ref(false);\n    const hasNext = ref(false);\n    // const lastFilter = ref({});\n    // const userFilter = ref({});\n    const userFilter = computed(() => {\n      return props.query;\n    });\n    const visibleMediaList = computed(() => {\n      if (!props.hideUpcoming) {\n        return mediaList.value;\n      }\n      return mediaList.value.filter((m: any) => DateTime.fromISO(m.latestAirplay) < now.value);\n    });\n    const combinedFilter = computed(() => {\n      // @ts-ignore\n      const tags = [...(props.initialFilter?.tags ?? []), ...(userFilter.value?.tags ?? [])];\n      const merged = { ...props.initialFilter, ...userFilter.value };\n      // @ts-ignore\n      merged.tags = tags;\n      if (props.scope === \"collection\") {\n        // @ts-ignore\n        merged.user_rating = 1;\n      }\n      return merged;\n    });\n    const ordering = computed(() => {\n      return props.scope === \"collection\" ? [\"time_rated\"] : [];\n    });\n    // eslint-disable-next-line @typescript-eslint/no-shadow\n    const fetchMedia = async (limit = 16, offset = 0) => {\n      mediaListLoading.value = true;\n      const { count, next, results } = await getMedia(\n        limit,\n        offset,\n        combinedFilter.value,\n        ordering.value\n      );\n      hasNext.value = !!next;\n      numResults.value = count;\n      // @ts-ignore\n      mediaList.value.push(...results);\n      await injectRatings(results);\n      mediaListLoading.value = false;\n      if (!hasNext.value) {\n        emit(\"allLoaded\");\n      } else {\n        emit(\"hasMore\");\n      }\n    };\n    const fetchNextPage = async () => {\n      const offset = lastOffset.value + limit;\n      await fetchMedia(limit, offset);\n      lastOffset.value = offset;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-shadow\n    const fetchTags = async () => {\n      tagListLoading.value = true;\n      try {\n        tagList.value = await getMediaTags(combinedFilter.value);\n      } catch (e) {\n        console.warn(\"unable to load tag list\", e);\n      }\n      tagListLoading.value = false;\n    };\n    const showSearchBar = computed(() => {\n      return !props.disableUserFilter;\n    });\n    const showUserFilter = computed(() => {\n      if (props.disableUserFilter) {\n        return false;\n      }\n      return filterExpanded.value;\n    });\n    const updateUserFilter = (filter: any) => {\n      const query = filter;\n      const routeName = route.name || \"discoverMedia\";\n      router.push({ name: routeName, query });\n    };\n    onMounted(() => {\n      fetchMedia(limit, 0).then(() => {});\n      fetchTags().then(() => {});\n      if (props.hideUpcoming) {\n        // @ts-ignore\n        timer.value = setInterval(() => {\n          now.value = DateTime.now();\n        }, 2000);\n      }\n    });\n    onUnmounted(() => {\n      // @ts-ignore\n      clearInterval(timer.value);\n    });\n    const listEl = ref(null);\n    usePullToRefresh(listEl, () => {\n      mediaList.value = [];\n      fetchMedia(limit, 0).then(() => {});\n      fetchTags().then(() => {});\n    });\n    watch(\n      () => combinedFilter.value,\n      async (oldFilter, newFilter) => {\n        if (isEqual(oldFilter, newFilter)) {\n          return;\n        }\n        lastOffset.value = 0;\n        mediaList.value = [];\n        fetchMedia(limit, 0).then(() => {});\n        fetchTags().then(() => {});\n      }\n    );\n    return {\n      t,\n      isDesktop,\n      combinedFilter,\n      tagList,\n      ordering,\n      tagListLoading,\n      visibleMediaList,\n      mediaListLoading,\n      hasNext,\n      numResults,\n      fetchNextPage,\n      showSearchBar,\n      showUserFilter,\n      userFilter,\n      updateUserFilter,\n      now,\n      listEl,\n    };\n  },\n});\n</script>\n\n<template>\n  <div v-if=\"showUserFilter\" class=\"list-filter-container\">\n    <ListFilter\n      :filter=\"userFilter\"\n      :tag-list=\"tagList\"\n      :is-loading=\"tagListLoading\"\n      @change=\"updateUserFilter\"\n    />\n  </div>\n  <div v-if=\"showListActions\" class=\"list-actions\" :class=\"{ 'is-loading': numResults === -1 }\">\n    <div v-if=\"numResults > 0\" class=\"container\">\n      <PlayAllAction color-var=\"--c-white\" :filter=\"combinedFilter\" :ordering=\"ordering\">\n        <span v-text=\"t('catalog.list.playAllTracks', numResults)\" />\n      </PlayAllAction>\n      <ContextMenu\n        :list=\"{\n          filter: combinedFilter,\n          ordering,\n        }\"\n      />\n    </div>\n  </div>\n  <div ref=\"listEl\" class=\"media-list\">\n    <div v-if=\"isDesktop && numResults !== 0\" class=\"table-header\">\n      <MediaRowHeader />\n    </div>\n    <LoadingMore v-if=\"numResults === -1\" layout=\"table\" />\n    <NoResults v-if=\"numResults === 0\" :filter=\"combinedFilter\" />\n    <div class=\"table\">\n      <MediaRow\n        v-for=\"(media, index) in visibleMediaList\"\n        :key=\"`media-row-${index}`\"\n        :media=\"media\"\n      />\n    </div>\n    <LoadingMore v-if=\"hasNext\" :has-next=\"hasNext\" layout=\"table\" @on-enter=\"fetchNextPage\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n\n.list-filter-container {\n  background: rgb(0 0 0);\n  padding-top: 0.75rem;\n  padding-bottom: 0.5rem;\n\n  .list-filter {\n    @include container.default;\n  }\n}\n\n.list-actions {\n  background: rgb(var(--c-black));\n  transition: opacity 250ms;\n\n  [data-theme=\"dark\"] & {\n    background: rgb(var(--c-black));\n  }\n\n  &.is-loading {\n    opacity: 0;\n  }\n\n  // NOTE: for sticky we need a solid background\n  @include responsive.bp-medium-up {\n    top: 75px;\n    position: sticky;\n    z-index: 2;\n  }\n\n  > .container {\n    @include container.default;\n\n    display: grid;\n    grid-row-gap: 0;\n    grid-column-gap: 1rem;\n    grid-template-columns: auto 48px;\n    color: rgb(var(--c-white));\n    padding-top: 0.75rem;\n    padding-bottom: 0.75rem;\n\n    @include responsive.bp-medium {\n      height: 60px;\n      grid-template-columns: auto 40px;\n      align-items: center;\n    }\n  }\n}\n\n.media-list {\n  background: rgb(var(--c-light));\n}\n</style>\n","import { defineStore } from \"pinia\";\nimport { without } from \"lodash-es\";\n\nimport { getArtist, getMediaDetail, getMood, getMoods, getPlaylist } from \"@/api/catalog\";\nimport type { Artist, Media, Mood } from \"@/typings\";\n\ninterface State {\n  artists: Array<Artist>;\n  media: Array<Media>;\n  moods: Array<Mood>;\n  playlists: Array<any>;\n  //\n  loading: Array<string>;\n}\n\nexport const useCatalogStore = defineStore(\"catalog\", {\n  state: (): State => ({\n    artists: [],\n    media: [],\n    moods: [],\n    playlists: [],\n    //\n    loading: [],\n  }),\n  persist: true,\n  getters: {\n    artistByUid: (state: State) => (uid: string) => {\n      return state.artists.find((obj) => obj.uid === uid) || null;\n    },\n    mediaByUid: (state: State) => (uid: string) => {\n      return state.media.find((obj) => obj.uid === uid) || null;\n    },\n    moodByUid: (state: State) => (uid: string) => {\n      return state.moods.find((obj) => obj.uid === uid) || null;\n    },\n    playlistByUid: (state: State) => (uid: string) => {\n      return state.playlists.find((obj) => obj.uid === uid) || null;\n    },\n  },\n  actions: {\n    async loadArtist(uid: string): Promise<void> {\n      if (this.artistByUid(uid)) {\n        console.debug(`already loaded: ${uid}`);\n        return;\n      }\n      const objKey = `artist-${uid}`;\n      if (this.loading.includes(objKey)) {\n        console.debug(`already loading: ${objKey}`);\n        return;\n      }\n      this.loading.push(objKey);\n      this.artists.push(await getArtist(uid));\n      this.loading = without(this.loading, objKey);\n    },\n    async loadMedia(uid: string): Promise<void> {\n      if (!this.mediaByUid(uid)) {\n        this.media.push(await getMediaDetail(uid));\n      }\n    },\n    async loadPlaylist(uid: string): Promise<void> {\n      if (!this.playlistByUid(uid)) {\n        this.playlists.push(await getPlaylist(uid));\n      }\n    },\n    async loadMood(uid: string): Promise<void> {\n      if (!this.moodByUid(uid)) {\n        this.moods.push(await getMood(uid));\n      }\n    },\n    async loadMoods(): Promise<void> {\n      const { results } = await getMoods(100, 0);\n      this.moods = results;\n    },\n  },\n});\n","import { storeToRefs } from \"pinia\";\n\nimport { useCatalogStore } from \"@/stores/catalog\";\n\nexport const useCatalog = () => {\n  const { moods } = storeToRefs(useCatalogStore());\n  const { loadMoods } = useCatalogStore();\n  return {\n    moods,\n    loadMoods,\n  };\n};\n","<script lang=\"ts\">\nimport { computed, defineComponent, onDeactivated, ref } from \"vue\";\nimport { useElementHover } from \"@vueuse/core\";\n\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport { useObjKey } from \"@/composables/obj\";\nimport { getContrastColor } from \"@/utils/color\";\n\nexport default defineComponent({\n  components: {\n    UserRating,\n  },\n  props: {\n    mood: {\n      type: Object,\n      required: true,\n    },\n  },\n  setup(props) {\n    const el = ref();\n    const { objKey } = useObjKey(props.mood);\n    const link = `/discover/moods/${props.mood.uid}/`;\n    const isHover = useElementHover(el);\n    const cssVars = computed(() => {\n      const bg = props.mood?.rgb ?? [128, 128, 128];\n      const fg = getContrastColor(bg);\n      return {\n        \"--c-bg\": bg.join(\" \"),\n        \"--c-fg\": fg.join(\" \"),\n      };\n    });\n    onDeactivated(() => {\n      isHover.value = false;\n    });\n    return {\n      el,\n      objKey,\n      link,\n      isHover,\n      cssVars,\n    };\n  },\n});\n</script>\n<template>\n  <div ref=\"el\" class=\"card card--mood\" :style=\"cssVars\">\n    <router-link class=\"panel\" :to=\"link\">\n      <div class=\"rating\">\n        <UserRating\n          :obj-key=\"objKey\"\n          :readonly=\"true\"\n          :hide-if-unset=\"true\"\n          :color-var=\"isHover ? '--c-bg' : '--c-fg'\"\n        />\n      </div>\n      <div class=\"name\" v-text=\"mood.name\" />\n      <div class=\"teaser\" v-text=\"mood.teaser\" />\n    </router-link>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n\n.card {\n  position: relative;\n  width: 100%;\n  aspect-ratio: 1 / 1;\n  color: rgb(var(--c-fg));\n  background: rgb(var(--c-bg));\n  transition: color 200ms, background 300ms;\n\n  .panel {\n    height: 100%;\n    width: 100%;\n    display: grid;\n    color: rgb(var(--c-fg));\n\n    .rating {\n      position: absolute;\n      height: calc(50%);\n      width: 100%;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n\n    .name {\n      @include typo.large;\n\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      height: 100%;\n      padding: 1rem;\n    }\n\n    .teaser {\n      @include typo.default;\n\n      position: absolute;\n      height: 50%;\n      width: 100%;\n      bottom: 1rem;\n      align-items: flex-start;\n      padding: 3rem 1rem 1rem;\n      overflow-y: hidden;\n      text-align: center;\n    }\n  }\n\n  @include responsive.on-hover {\n    color: rgb(var(--c-bg));\n    background: rgb(var(--c-black));\n\n    .panel {\n      color: rgb(var(--c-bg));\n    }\n  }\n\n  @include responsive.bp-medium {\n    .panel {\n      .rating {\n        height: unset;\n        width: unset;\n        right: 0;\n      }\n\n      .teaser {\n        display: none;\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, onMounted, ref, watch } from \"vue\";\n\nimport { useCatalog } from \"@/composables/catalog\";\nimport { usePullToRefresh } from \"@/composables/pullToRefresh\";\nimport { useRatingStore } from \"@/stores/rating\";\n\nimport MoodCard from \"./Card.vue\";\n\nexport default defineComponent({\n  components: {\n    MoodCard,\n  },\n  setup() {\n    const { moods, loadMoods } = useCatalog();\n    const { injectRatings } = useRatingStore();\n    onMounted(async () => {\n      await loadMoods();\n    });\n    // watch(\n    //   () => moods.value,\n    //   async (value) => {\n    //     await injectRatings(value);\n    //   }\n    // );\n    watch(() => moods.value, injectRatings);\n    const listEl = ref();\n    usePullToRefresh(listEl, loadMoods);\n    return {\n      listEl,\n      moods,\n    };\n  },\n});\n</script>\n<template>\n  <div ref=\"listEl\" class=\"mood-list\">\n    <div class=\"grid\">\n      <MoodCard v-for=\"mood in moods\" :key=\"mood.uid\" :mood=\"mood\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n@use \"@/style/elements/grid\";\n\n.mood-list {\n  @include container.default;\n\n  margin-bottom: 4rem;\n}\n\n.grid {\n  @include grid.default;\n\n  grid-row-gap: 0.5rem;\n\n  @include responsive.bp-medium {\n    grid-row-gap: 0.625rem;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\nimport { DateTime } from \"luxon\";\n\nexport default defineComponent({\n  props: {\n    playlist: {\n      type: Object,\n      required: true,\n    },\n    airtime: {\n      type: Object as PropType<DateTime>,\n      required: false,\n      default: null,\n    },\n  },\n  setup(props) {\n    const title = computed(() => {\n      return {\n        name: props.playlist.series ? props.playlist.series.name : props.playlist.name,\n        appendix: props.playlist.series ? props.playlist.series.episode : null,\n      };\n    });\n    const titleDisplay = computed(() => {\n      if (title.value.name && props.airtime) {\n        return `${title.value.name} ${props.airtime.toLocaleString(DateTime.TIME_24_SIMPLE)}`;\n      }\n      if (title.value.name && title.value.appendix) {\n        return `${title.value.name} #${title.value.appendix}`;\n      }\n      return title.value.name;\n    });\n    return {\n      titleDisplay,\n    };\n  },\n});\n</script>\n\n<template>\n  <span v-text=\"titleDisplay\" />\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\nimport { DateTime } from \"luxon\";\n\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport PlaylistName from \"@/components/catalog/playlist/Name.vue\";\nimport ContextMenu from \"@/components/context-menu/ContextMenu.vue\";\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport ObjectTags from \"@/components/tagging/ObjectTags.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport RelativeDateTime from \"@/components/ui/date/RelativeDateTime.vue\";\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { useObjKey } from \"@/composables/obj\";\n\nexport default defineComponent({\n  components: {\n    LazyImage,\n    PlayAction,\n    CircleButton,\n    UserRating,\n    ContextMenu,\n    RelativeDateTime,\n    PlaylistName,\n    ObjectTags,\n  },\n  props: {\n    playlist: {\n      type: Object,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { objKey } = useObjKey(props.playlist);\n    const { isDesktop } = useDevice();\n    const link = `/discover/playlists/${props.playlist.uid}/`;\n    const latestEmission = computed(() => {\n      return DateTime.fromISO(props.playlist.latestEmissionTimeStart);\n    });\n    return {\n      objKey,\n      isDesktop,\n      link,\n      latestEmission,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"card card--playlist\">\n    <router-link :to=\"link\" class=\"visual\">\n      <LazyImage :image=\"playlist.image\">\n        <PlayAction\n          :obj-key=\"objKey\"\n          :icon-scale=\"1.5\"\n          :outlined=\"true\"\n          :filled=\"true\"\n          :color=\"[0, 0, 0]\"\n        />\n      </LazyImage>\n      <UserRating\n        v-if=\"!isDesktop\"\n        :obj-key=\"objKey\"\n        :readonly=\"true\"\n        :hide-if-unset=\"true\"\n        class=\"rating\"\n      />\n    </router-link>\n    <div class=\"meta\">\n      <router-link class=\"title\" :to=\"link\">\n        <PlaylistName :playlist=\"playlist\" />\n        <span v-if=\"isDesktop\" class=\"title__secondary\" v-text=\"playlist.name\" />\n      </router-link>\n      <ObjectTags v-if=\"isDesktop\" class=\"tags\" :obj=\"playlist\" :limit=\"4\" :types=\"['genre']\" />\n      <RelativeDateTime class=\"subtitle\" :date-time=\"latestEmission\" />\n      <div v-if=\"isDesktop\" class=\"actions\">\n        <CircleButton :scale=\"0.75\">\n          <UserRating :obj-key=\"objKey\" :icon-scale=\"0.75\" />\n        </CircleButton>\n        <ContextMenu :obj=\"playlist\" :icon-scale=\"0.75\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n@use \"@/style/elements/card\";\n\n.card {\n  @include card.default;\n  @include card.actions-on-hover;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\nimport { DateTime } from \"luxon\";\n\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport PlaylistName from \"@/components/catalog/playlist/Name.vue\";\nimport ContextMenu from \"@/components/context-menu/ContextMenu.vue\";\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport ObjectTags from \"@/components/tagging/ObjectTags.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport RelativeDateTime from \"@/components/ui/date/RelativeDateTime.vue\";\nimport Duration from \"@/components/ui/time/Duration.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { useObjKey } from \"@/composables/obj\";\nimport { useSettings } from \"@/composables/settings\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    ContextMenu,\n    PlayAction,\n    ObjectTags,\n    UserRating,\n    RelativeDateTime,\n    Duration,\n    PlaylistName,\n  },\n  props: {\n    playlist: {\n      type: Object,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { objKey } = useObjKey(props.playlist);\n    const { isMobile } = useDevice();\n    const { darkMode } = useSettings();\n    const isHover = ref(isMobile);\n    const link = `/discover/playlists/${props.playlist.uid}/`;\n    const latestEmission = computed(() => {\n      return DateTime.fromISO(props.playlist.latestEmissionTimeStart);\n    });\n    const title = computed(() => {\n      return {\n        name: props.playlist.series ? props.playlist.series.name : props.playlist.name,\n        // appendix: props.playlist.series ? props.playlist.series.episode : null,\n        appendix: latestEmission.value,\n      };\n    });\n    return {\n      objKey,\n      isHover,\n      isMobile,\n      darkMode,\n      title,\n      link,\n      latestEmission,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"playlist-row\"\n    @mouseenter=\"isMobile ? null : (isHover = true)\"\n    @mouseleave=\"isMobile ? null : (isHover = false)\"\n  >\n    <div class=\"container\">\n      <div class=\"play\">\n        <PlayAction\n          :obj-key=\"objKey\"\n          :outlined=\"true\"\n          :color=\"darkMode ? [255, 255, 255] : [0, 0, 0]\"\n        />\n      </div>\n      <div class=\"name\">\n        <router-link\n          :to=\"{\n            name: 'playlistDetail',\n            params: {\n              uid: playlist.uid,\n            },\n          }\"\n        >\n          <!--<PlaylistName :playlist=\"playlist\" :airtime=\"latestEmission\" />-->\n          <PlaylistName :playlist=\"playlist\" />\n        </router-link>\n      </div>\n      <div class=\"editor\" v-if=\"playlist.editor\">\n        <router-link\n          :to=\"{\n            name: 'editorDetail',\n            params: {\n              uid: playlist.editor.uid,\n            },\n          }\"\n          v-text=\"playlist.editor.name\"\n        />\n      </div>\n      <ObjectTags class=\"tags\" :obj=\"playlist\" :limit=\"4\" />\n      <Duration class=\"duration\" :seconds=\"playlist.duration\" :round-seconds=\"60 * 5\" />\n      <RelativeDateTime class=\"airplays\" v-if=\"latestEmission\" :date-time=\"latestEmission\" />\n      <div class=\"actions\">\n        <CircleButton>\n          <UserRating :obj-key=\"objKey\" :hide-if-unset=\"!isHover\" />\n        </CircleButton>\n        <ContextMenu :obj=\"playlist\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n@use \"@/style/elements/list-row\";\n\n.playlist-row {\n  @include list-row.default;\n}\n\n.container {\n  @include container.default;\n\n  display: grid;\n  grid-row-gap: 0;\n  grid-column-gap: 1rem;\n  grid-template-areas:\n    \"play name editor duration actions\"\n    \"play name tags   airplays actions\";\n  grid-template-columns: 96px 16fr 10fr 6fr 96px;\n  padding-top: 0.7rem;\n  padding-bottom: 0.7rem;\n  color: rgb(var(--c-dark));\n\n  > div {\n    display: flex;\n    align-items: center;\n  }\n\n  .play {\n    grid-area: play;\n  }\n\n  .name {\n    grid-area: name;\n\n    @include typo.large;\n\n    min-width: 0;\n    margin-left: -48px;\n\n    > a {\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n  }\n\n  .editor {\n    grid-area: editor;\n    align-self: end;\n    min-width: 0;\n\n    > a {\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n  }\n\n  .tags {\n    grid-area: tags;\n    align-self: start;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n  }\n\n  .airplays {\n    grid-area: airplays;\n    align-self: end;\n    overflow: hidden;\n  }\n\n  .duration {\n    grid-area: duration;\n  }\n\n  .actions {\n    grid-area: actions;\n    justify-self: flex-end;\n  }\n\n  @include responsive.bp-medium {\n    grid-template-areas:\n      \"play name   actions\"\n      \"play tags actions\";\n    grid-template-columns: 80px 1fr 80px;\n    height: 60px;\n\n    .editor,\n    .airplays,\n    .duration {\n      display: none;\n    }\n\n    .name {\n      align-self: end;\n      margin-left: -40px;\n    }\n\n    .tags {\n      align-self: start;\n      margin-left: -40px;\n\n      @include typo.light;\n      @include typo.dim;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nexport default defineComponent({\n  setup() {\n    const { t } = useI18n();\n    return {\n      t,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"playlist-row-header\">\n    <div class=\"container\">\n      <div class=\"label\" />\n      <div class=\"label label--playlist\" v-text=\"`${t('catalog.ct.playlist')}:`\" />\n      <div class=\"label\" v-text=\"`${t('broadcast.ct.editor')}:`\" />\n      <div class=\"label\" v-text=\"`${t('text.duration')}/${t('text.airtime')}:`\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/container\";\n\n.playlist-row-header {\n  background: rgb(var(--c-light));\n  height: 41px;\n  align-items: center;\n  display: flex;\n  border-bottom: 1px solid rgb(var(--c-dark) / 20%);\n\n  [data-theme=\"dark\"] & {\n    border-bottom: 1px solid rgb(var(--c-dark) / 10%);\n  }\n}\n\n.container {\n  @include container.default;\n\n  display: grid;\n  grid-row-gap: 0;\n  grid-column-gap: 1rem;\n  grid-template-columns: 96px 16fr 10fr 6fr 96px;\n\n  .label {\n    &::first-letter {\n      text-transform: uppercase;\n    }\n\n    &--playlist {\n      margin-left: -48px;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref, watch } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport { storeToRefs } from \"pinia\";\nimport { isEqual } from \"lodash-es\";\n\nimport { getPlaylists, getPlaylistsTags } from \"@/api/catalog\";\nimport PlaylistCard from \"@/components/catalog/playlist/Card.vue\";\nimport PlaylistRow from \"@/components/catalog/playlist/Row.vue\";\nimport PlaylistRowHeader from \"@/components/catalog/playlist/RowHeader.vue\";\nimport ListFilter from \"@/components/filter/ListFilter.vue\";\nimport LoadingMore from \"@/components/ui/loading/Loading.vue\";\nimport NoResults from \"@/components/ui/loading/NoResults.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { usePullToRefresh } from \"@/composables/pullToRefresh\";\nimport { useRatingStore } from \"@/stores/rating\";\nimport { useUiStore } from \"@/stores/ui\";\n\nexport default defineComponent({\n  components: {\n    ListFilter,\n    LoadingMore,\n    NoResults,\n    PlaylistRowHeader,\n    PlaylistCard,\n  },\n  props: {\n    filter: {\n      type: Array,\n      default: () => [],\n    },\n    scope: {\n      type: String,\n      default: null,\n    },\n    query: {\n      type: Object,\n      default: () => {},\n    },\n    initialFilter: {\n      type: Object,\n      default: () => null,\n    },\n    disableUserFilter: {\n      type: Boolean,\n      default: false,\n    },\n    layout: {\n      type: String,\n      default: \"grid\",\n    },\n  },\n  setup(props) {\n    const route = useRoute();\n    const router = useRouter();\n    const { filterExpanded } = storeToRefs(useUiStore());\n    const { injectRatings } = useRatingStore();\n    const { isDesktop } = useDevice();\n    const numResults = ref(-1);\n    const limit = 16;\n    const lastOffset = ref(0);\n    const playlists = ref([]);\n    const tagList = ref([]);\n    const tagListLoading = ref(false);\n    const hasNext = ref(false);\n    const userFilter = computed(() => {\n      const filter = props.query;\n      // if (filter?.tags && (typeof filter.tags === 'string' || filter.tags instanceof String)) {\n      //   return {\n      //     ...filter,\n      //     tags: [filter.tags],\n      //   };\n      // }\n      return filter;\n    });\n    const combinedFilter = computed(() => {\n      // @ts-ignore\n      const tags = [...(props.initialFilter?.tags ?? []), ...(userFilter.value?.tags ?? [])];\n      const merged = { ...props.initialFilter, ...userFilter.value };\n      // @ts-ignore\n      merged.tags = tags;\n      if (props.scope === \"collection\") {\n        // @ts-ignore\n        merged.user_rating = 1;\n      }\n      return merged;\n    });\n    const ordering = computed(() => {\n      return props.scope === \"collection\" ? [\"time_rated\"] : [];\n    });\n    const playlistComponent = computed(() => {\n      return props.layout === \"grid\" ? PlaylistCard : PlaylistRow;\n    });\n    // eslint-disable-next-line @typescript-eslint/no-shadow\n    const fetchPlaylists = async (limit = 16, offset = 0) => {\n      // NOTE: depending on the layout we need different data / expands\n      const expand = props.layout === \"grid\" ? [\"tags\"] : [\"tags\", \"editor\", \"duration\"];\n      const { count, next, results } = await getPlaylists(\n        limit,\n        offset,\n        combinedFilter.value,\n        ordering.value,\n        expand\n      );\n      hasNext.value = !!next;\n      numResults.value = count;\n      // @ts-ignore\n      playlists.value.push(...results);\n      await injectRatings(results);\n    };\n    const fetchNextPage = async () => {\n      const offset = lastOffset.value + limit;\n      await fetchPlaylists(limit, offset);\n      lastOffset.value = offset;\n    };\n    const fetchTags = async () => {\n      tagListLoading.value = true;\n      tagList.value = await getPlaylistsTags(combinedFilter.value);\n      tagListLoading.value = false;\n    };\n    const showSearchBar = computed(() => {\n      return !props.disableUserFilter;\n    });\n    const showUserFilter = computed(() => {\n      if (props.disableUserFilter) {\n        return false;\n      }\n      return filterExpanded.value;\n    });\n    const updateUserFilter = (filter: any) => {\n      const query = filter;\n      const routeName = route.name || \"discoverPlaylists\";\n      router.push({ name: routeName, query });\n    };\n    onMounted(() => {\n      fetchPlaylists();\n      fetchTags().then(() => {});\n    });\n    const listEl = ref(null);\n    usePullToRefresh(listEl, () => {\n      // playlists.value = [];\n      fetchPlaylists();\n      fetchTags().then(() => {});\n    });\n    watch(\n      () => combinedFilter.value,\n      async (oldFilter, newFilter) => {\n        if (isEqual(oldFilter, newFilter)) {\n          return;\n        }\n        lastOffset.value = 0;\n        playlists.value = [];\n        numResults.value = -1;\n        fetchPlaylists(limit, 0).then(() => {});\n        fetchTags().then(() => {});\n      }\n    );\n    return {\n      isDesktop,\n      combinedFilter,\n      tagList,\n      tagListLoading,\n      playlists,\n      playlistComponent,\n      hasNext,\n      numResults,\n      fetchNextPage,\n      showSearchBar,\n      showUserFilter,\n      userFilter,\n      updateUserFilter,\n      listEl,\n    };\n  },\n});\n</script>\n\n<template>\n  <div v-if=\"showUserFilter\" class=\"list-filter-container\">\n    <ListFilter\n      :filter=\"userFilter\"\n      :tag-list=\"tagList\"\n      :is-loading=\"tagListLoading\"\n      @change=\"updateUserFilter\"\n    />\n  </div>\n  <div ref=\"listEl\" class=\"playlist-list\">\n    <div v-if=\"layout === 'table' && isDesktop\" class=\"table-header\">\n      <PlaylistRowHeader />\n    </div>\n    <LoadingMore v-if=\"numResults === -1\" :layout=\"layout\" :class=\"`layout--${layout}`\" />\n    <NoResults v-if=\"numResults === 0\" :filter=\"combinedFilter\" />\n    <div class=\"list-container\" :class=\"`layout--${layout}`\">\n      <component\n        v-for=\"playlist in playlists\"\n        :key=\"playlist.uid\"\n        :playlist=\"playlist\"\n        :is=\"playlistComponent\"\n      />\n    </div>\n    <LoadingMore\n      v-if=\"playlists.length && hasNext\"\n      :has-next=\"hasNext\"\n      :layout=\"layout\"\n      :class=\"`layout--${layout}`\"\n      @on-enter=\"fetchNextPage\"\n    />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/container\";\n@use \"@/style/elements/grid\";\n\n.list-filter-container {\n  background: rgb(0 0 0);\n  padding-top: 0.75rem;\n  padding-bottom: 0.5rem;\n  margin-bottom: 1rem;\n\n  .list-filter {\n    @include container.default;\n  }\n}\n\n.playlist-list {\n  margin-bottom: 4rem;\n\n  .list-container {\n    &.layout {\n      &--grid {\n        @include container.default;\n        @include grid.default;\n      }\n    }\n  }\n\n  .loading-more {\n    &.layout {\n      &--grid {\n        @include container.default;\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, onActivated, onDeactivated, ref } from \"vue\";\n\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconCaret from \"@/components/ui/icon/IconCaret.vue\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconCaret,\n  },\n  props: {\n    title: {\n      type: String,\n      default: \"\",\n    },\n  },\n  setup() {\n    const scrollX = ref(0);\n    const listEl = ref();\n    const scrollLane = (smooth = false) => {\n      console.debug(\"scroll\", smooth);\n      listEl.value.scrollTo({\n        left: scrollX.value,\n        behavior: smooth ? \"smooth\" : \"auto\",\n      });\n    };\n    const scrollNext = () => {\n      scrollX.value += 400 * 4;\n      scrollLane(true);\n    };\n    const scrollPrevious = () => {\n      scrollX.value -= 400 * 4;\n      scrollLane(true);\n    };\n    // scroll-state\n    onActivated(() => {\n      console.debug(\"onActivated\", scrollX.value);\n      if (scrollX.value) {\n        listEl.value.scrollTo({\n          left: scrollX.value,\n        });\n      }\n    });\n    onDeactivated(() => {\n      console.debug(\"onDeactivated\", scrollX.value);\n    });\n    return {\n      listEl,\n      scrollNext,\n      scrollPrevious,\n    };\n  },\n});\n</script>\n\n<template>\n  <section>\n    <header>\n      <h2 v-text=\"title\" />\n      <nav>\n        <CircleButton :scale=\"1\" :disabled=\"false\" @click=\"scrollPrevious\">\n          <IconCaret :scale=\"1\" direction=\"left\" />\n        </CircleButton>\n        <CircleButton :scale=\"1\" :disabled=\"false\" @click=\"scrollNext\">\n          <IconCaret :scale=\"1\" direction=\"right\" />\n        </CircleButton>\n      </nav>\n    </header>\n    <div class=\"lane\">\n      <div class=\"container\" ref=\"listEl\">\n        <slot name=\"default\">(( SLOT ))</slot>\n      </div>\n    </div>\n  </section>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/grid\";\n@use \"@/style/base/mixins\";\n\nheader {\n  display: flex;\n  align-items: center;\n  margin-bottom: 0.5rem;\n\n  h2 {\n    flex-grow: 1;\n    font-size: var(--t-fs-large);\n  }\n}\n\n.lane {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-flow: column nowrap;\n\n  .container {\n    /*\n    @include mixins.hide-scrollbar;\n    */\n\n    display: flex;\n    overflow: auto;\n    flex: none;\n    gap: 1rem;\n    width: 100%;\n    flex-flow: row nowrap;\n    scroll-snap-type: x mandatory;\n  }\n\n  :deep(.card) {\n    min-width: 400px;\n    scroll-snap-align: start;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, onMounted, watch } from \"vue\";\n\nimport MoodCard from \"@/components/catalog/mood/Card.vue\";\nimport { useCatalog } from \"@/composables/catalog\";\nimport { useRatingStore } from \"@/stores/rating\";\n\nimport HomeSection from \"./HomeSection.vue\";\n\nexport default defineComponent({\n  components: {\n    HomeSection,\n    MoodCard,\n  },\n  setup() {\n    const { moods, loadMoods } = useCatalog();\n    const { injectRatings } = useRatingStore();\n    onMounted(async () => {\n      await loadMoods();\n    });\n    watch(() => moods.value, injectRatings);\n    return {\n      moods,\n    };\n  },\n});\n</script>\n\n<template>\n  <HomeSection title=\"Moods\">\n    <MoodCard v-for=\"mood in moods\" :key=\"mood.uid\" :mood=\"mood\" />\n  </HomeSection>\n  <HomeSection title=\"Shows\"> (( SHOWS )) </HomeSection>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n@use \"@/style/elements/grid\";\n\nsection {\n  @include container.default;\n\n  margin-bottom: 2rem;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    rotate: {\n      type: Number,\n      default: 0,\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: \"transparent\",\n        stroke: color.value,\n        strokeWidth: 2.5,\n        transform: `rotate(${props.rotate}deg)`,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" :style=\"style\">\n    <line x1=\"16.5\" y1=\"24\" x2=\"12\" y2=\"24\" />\n    <line x1=\"36\" y1=\"24\" x2=\"21.5\" y2=\"24\" />\n    <line x1=\"26.5\" y1=\"16\" x2=\"12\" y2=\"16\" />\n    <line x1=\"36\" y1=\"16\" x2=\"31.5\" y2=\"16\" />\n    <line x1=\"21.7\" y1=\"32\" x2=\"12\" y2=\"32\" />\n    <line x1=\"36\" y1=\"32\" x2=\"26.5\" y2=\"32\" />\n    <circle cx=\"29\" cy=\"16\" r=\"2.5\" />\n    <circle cx=\"24\" cy=\"32\" r=\"2.5\" />\n    <path d=\"M21.5,24c0,1.4-1.1,2.5-2.5,2.5s-2.5-1.1-2.5-2.5s1.1-2.5,2.5-2.5S21.5,22.6,21.5,24\" />\n  </svg>\n</template>\n","<script type=\"ts\">\nimport {\n  computed,\n  defineComponent, onMounted,\n  ref,\n  watch,\n} from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { storeToRefs } from \"pinia\";\n\nimport CircleButton from '@/components/ui/button/CircleButton.vue';\nimport IconClose from '@/components/ui/icon/IconClose.vue';\nimport IconFilter from '@/components/ui/icon/IconFilter.vue';\nimport IconSearch from '@/components/ui/icon/IconSearch.vue';\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { useDevice } from \"@/composables/device\";\nimport { useUiStore } from \"@/stores/ui\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconClose,\n    IconSearch,\n    IconFilter,\n  },\n  props: {\n    filter: {\n      type: Object,\n      required: false,\n      default: () => {},\n    },\n    hideFormForMobile: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props) {\n    const route = useRoute();\n    const router = useRouter();\n    const { filterExpanded } = storeToRefs(useUiStore());\n    const { isDesktop } = useDevice();\n    const { logUIEvent, logRawEvent } = useAnalytics();\n    const isFormVisible = computed(() => {\n      if (props.hideFormForMobile) {\n        return isDesktop;\n      }\n      return true;\n    })\n    const toggleFilter = () => {\n      filterExpanded.value = !filterExpanded.value;\n      logUIEvent(\"searchbar:filter\", filterExpanded.value ? \"show\" : \"hide\");\n    };\n    const q = ref('');\n    const submitSearch = () => {\n      const newQuery = { ...props.filter };\n      if (q.value) {\n        newQuery.q = q.value;\n      } else {\n        delete newQuery.q;\n      }\n      const routeName = route.name || 'discoverPlaylists';\n      router.push({ name: routeName, query: newQuery });\n\n      if (newQuery.q) {\n        logRawEvent(\"view_search_results\", {\n          search_term: newQuery.q,\n          filter_type: \"search\",\n        });\n      }\n    };\n    const searchInput = (e) => {\n      if (e.code === 'Escape') {\n        q.value = '';\n        submitSearch();\n        return;\n      }\n    };\n    const clearSearch = () => {\n      q.value = '';\n      submitSearch();\n    };\n    const hasSearchQuery = computed(() => {\n      return (props.filter && props.filter.q);\n    });\n    onMounted(() => {\n      q.value = props.filter.q || '';\n    });\n    watch(\n      () => props.filter,\n      async (newFilter) => {\n        q.value = newFilter.q;\n      },\n    );\n    return {\n      isDesktop,\n      filterExpanded,\n      isFormVisible,\n      toggleFilter,\n      q,\n      searchInput,\n      submitSearch,\n      clearSearch,\n      hasSearchQuery,\n    };\n  },\n});\n</script>\n<template>\n  <div class=\"searchbar\">\n    <form\n      v-if=\"isFormVisible\"\n      class=\"search-input\"\n      :class=\"{\n        'has-query': hasSearchQuery,\n      }\"\n      @submit.prevent=\"submitSearch\"\n    >\n      <input v-model=\"q\" @keyup=\"searchInput\" />\n      <div v-if=\"hasSearchQuery\" @click=\"clearSearch\" class=\"clear-search\">\n        <IconClose color-var=\"--c-light\" :scale=\"0.75\" />\n      </div>\n    </form>\n    <CircleButton v-if=\"isFormVisible\" class=\"search-button\" @click=\"submitSearch\">\n      <IconSearch />\n    </CircleButton>\n    <CircleButton\n      class=\"filter-button\"\n      :filled=\"filterExpanded\"\n      :hover-background-opacity=\"filterExpanded ? '80%' : '10%'\"\n      @click=\"toggleFilter\"\n    >\n      <IconFilter\n        :color-var=\"filterExpanded ? `--c-light` : `--c-fg`\"\n        :rotate=\"filterExpanded ? 180 : 0\"\n      />\n    </CircleButton>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n\n.searchbar {\n  display: flex;\n  flex-grow: 1;\n  align-items: center;\n  justify-content: flex-end;\n\n  .debug {\n    position: fixed;\n    left: 2rem;\n  }\n\n  .search-input {\n    position: relative;\n    height: 40px;\n\n    > input {\n      @include typo.default;\n\n      box-sizing: border-box;\n      height: 100%;\n      padding: 3px 0.5rem 0 1rem;\n      color: rgb(var(--c-page-fg));\n      background: transparent;\n      border: 0;\n      border-bottom: 3px solid rgb(var(--c-page-fg) / 80%);\n      transition: background 100ms, border 100ms, color 100ms, border-radius 100ms;\n\n      &:focus {\n        background: rgb(var(--c-dark) / 10%);\n        border-bottom: 3px solid rgb(var(--c-page-fg) / 0%);\n        outline: none;\n      }\n    }\n\n    &.has-query {\n      > input {\n        color: rgb(var(--c-light));\n        background: rgb(var(--c-dark));\n        border-radius: 22px;\n      }\n    }\n\n    .clear-search {\n      top: 2px;\n      position: absolute;\n      height: 36px;\n      width: 40px;\n      right: 0;\n      cursor: pointer;\n    }\n  }\n\n  @include responsive.bp-medium {\n    .search-button {\n      order: -1;\n    }\n\n    .search-input {\n      flex-grow: 1;\n\n      > input {\n        border: 1px solid rgb(var(--c-dark) / 20%);\n        width: 100%;\n      }\n    }\n  }\n}\n</style>\n","import { toRef } from \"vue\";\nimport type { Ref } from \"vue-demi\";\nimport { useTitle } from \"@vueuse/core\";\nimport type { MaybeRefOrGetter } from \"@vueuse/shared\";\n\nconst TITLE_TEMPLATE = \"%s | open broadcast radio\";\n\nconst usePageTitle = (newTitle: MaybeRefOrGetter<string | null | undefined | unknown> = null) => {\n  // @ts-ignore\n  const title: Ref<string | null | undefined> = toRef(newTitle ?? document?.title ?? null);\n  useTitle(title, { titleTemplate: TITLE_TEMPLATE });\n  return { title };\n};\n\nexport { usePageTitle };\n","<script type=\"ts\">\nimport { defineComponent, onActivated, onUpdated, ref } from 'vue';\nimport { useI18n } from \"vue-i18n\";\n\nimport Searchbar from '@/components/filter/Searchbar.vue';\n\nexport default defineComponent({\n  props: {\n    filter: {\n      type: Object,\n      required: false,\n    },\n  },\n  components: {\n    Searchbar,\n  },\n  setup() {\n    const { t } = useI18n();\n    const menuRef = ref(null);\n    const setMenuFocus = () => {\n      const el = menuRef.value.querySelector('.router-link-exact-active');\n      if (el) {\n        el.scrollIntoView();\n      }\n    };\n    onActivated(() => {\n      setMenuFocus();\n    });\n    onUpdated(() => {\n      setMenuFocus();\n    });\n    return {\n      t,\n      menuRef,\n    };\n  },\n});\n</script>\n\n<template>\n  <div>\n    <div class=\"title\">Discover</div>\n    <div class=\"list-menu\">\n      <div ref=\"menuRef\" class=\"menu menu--primary\">\n        <!--\n        <router-link :to=\"{ name: 'discoverHome' }\" v-text=\"t('menu.discover')\" />\n        -->\n        <router-link :to=\"{ name: 'discoverMoods' }\" v-text=\"t('catalog.ct.mood')\" />\n        <router-link :to=\"{ name: 'discoverMedia' }\" v-text=\"t('catalog.ct.media', 2)\" />\n        <router-link :to=\"{ name: 'discoverPlaylists' }\" v-text=\"t('catalog.ct.playlist', 2)\" />\n        <router-link :to=\"{ name: 'discoverArtists' }\" v-text=\"t('catalog.ct.artist', 2)\" />\n        <router-link :to=\"{ name: 'discoverEditors' }\" v-text=\"t('broadcast.ct.editor', 2)\" />\n      </div>\n      <div class=\"menu menu--secondary\">\n        <Searchbar v-if=\"filter\" :filter=\"filter\" />\n      </div>\n    </div>\n  </div>\n</template>\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/container\";\n@use \"@/style/elements/title\";\n@use \"@/style/elements/list-menu\";\n\n.title {\n  @include title.default;\n}\n\n.list-menu {\n  @include container.default;\n  @include list-menu.default;\n}\n</style>\n","const parseFilterQuery = (query: any) => {\n  let tags = query?.tags ?? [];\n  // const q = query?.q ?? null;\n  if (typeof tags === \"string\" || tags instanceof String) {\n    tags = [tags];\n  }\n  const filter = {\n    ...query,\n    tags,\n    // q,\n  };\n  return filter;\n};\n\nexport { parseFilterQuery };\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n  setup() {\n    return {};\n  },\n});\n</script>\n\n<template>\n  <div class=\"account\">\n    <router-view></router-view>\n  </div>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nconst SCOPE_DISPLAY = {\n  wikipedia: \"Wikipedia\",\n  musicbrainz: \"Musicbrainz\",\n  discogs: \"Discogs\",\n  soundcloud: \"SoundCloud\",\n  official: \"Official website\",\n  obp: \"OBP\",\n};\n\nexport default defineComponent({\n  props: {\n    scope: {\n      type: String,\n      required: true,\n    },\n    value: {\n      type: String,\n      required: true,\n    },\n  },\n  setup(props) {\n    const title = computed(() => {\n      if (props.scope in SCOPE_DISPLAY) {\n        // @ts-ignore\n        return SCOPE_DISPLAY[props.scope];\n      }\n      return props.scope;\n    });\n    return {\n      title,\n    };\n  },\n});\n</script>\n\n<template>\n  <a\n    class=\"identifier\"\n    :class=\"`identifier--${scope}`\"\n    :href=\"value\"\n    target=\"_blank\"\n    v-text=\"title\"\n  />\n</template>\n\n<style lang=\"scss\" scoped>\n.identifier {\n  display: inline-flex;\n  white-space: nowrap;\n  text-decoration: underline;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useAccount } from \"@/composables/account\";\nimport { useObjKey } from \"@/composables/obj\";\n\nimport Identifier from \"./Identifier.vue\";\n\nconst EXCLUDED_SCOPES = [\"isrc\", \"spotify\", \"deezer\"];\n\nexport default defineComponent({\n  components: {\n    Identifier,\n  },\n  props: {\n    obj: {\n      type: Object,\n      required: true,\n    },\n    limit: {\n      type: Number,\n      default: 8,\n    },\n    separator: {\n      type: String,\n      default: \", \",\n    },\n    spacing: {\n      type: String,\n      default: \"0.5rem\",\n    },\n  },\n  setup(props) {\n    const { isStaff } = useAccount();\n    const { objKey } = useObjKey(props.obj);\n    const keyPrefix = computed(() => props.obj?.uid);\n    const objIdentifiers = computed(() => {\n      return props.obj && props.obj.identifiers\n        ? props.obj.identifiers.slice(0, props.limit - 1)\n        : [];\n    });\n    const extraIdentifiers = computed(() => {\n      if (isStaff.value) {\n        return [\n          {\n            scope: \"obp\",\n            value: `/api/v1/redirect/obp/${objKey.value}/`,\n          },\n        ];\n      }\n      return [];\n    });\n    const identifiers = computed(() => {\n      return [\n        ...objIdentifiers.value.filter((i: any) => !EXCLUDED_SCOPES.includes(i.scope)),\n        ...extraIdentifiers.value,\n      ];\n    });\n    return {\n      objKey,\n      keyPrefix,\n      identifiers,\n      isStaff,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"identifiers\"\n    :style=\"{\n      '--spacing': spacing,\n    }\"\n  >\n    <Identifier\n      class=\"identifiers__identifier\"\n      v-for=\"identifier in identifiers\"\n      :key=\"`obj-identifier-${keyPrefix}-${identifier?.uid ?? ''}`\"\n      :scope=\"identifier.scope\"\n      :value=\"identifier.value\"\n    />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.identifiers {\n  &__identifier {\n    &:not(:last-child) {\n      margin-right: var(--spacing);\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        stroke: color.value,\n        fill: \"none\",\n        strokeWidth: (3 * 48) / size.value,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <line x1=\"12.5\" y1=\"24\" x2=\"35.5\" y2=\"24\" />\n    <polyline points=\"22,33 13,24 22,15 \" />\n  </svg>\n</template>\n","<script type=\"ts\">\nimport { defineComponent } from 'vue';\n\nimport CircleButton from '@/components/ui/button/CircleButton.vue';\nimport IconBack from '@/components/ui/icon/IconBack.vue';\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconBack,\n  },\n});\n</script>\n\n<template>\n  <CircleButton>\n    <IconBack color-var=\"--c-dark\" />\n  </CircleButton>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref } from \"vue\";\nimport { useRouter } from \"vue-router\";\n\nimport ContextMenu from \"@/components/context-menu/ContextMenu.vue\";\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport BackButton from \"@/components/ui/button/BackButton.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\n\nexport default defineComponent({\n  components: {\n    BackButton,\n    CircleButton,\n    UserRating,\n    ContextMenu,\n  },\n  props: {\n    obj: {\n      type: Object,\n      required: true,\n    },\n    layout: {\n      type: String,\n      default: \"circle\",\n    },\n    titleScope: {\n      type: String,\n      required: false,\n      default: null,\n    },\n    title: {\n      type: String,\n      required: false,\n      default: null,\n    },\n    subtitle: {\n      type: String,\n      required: false,\n      default: null,\n    },\n    showObjRating: {\n      type: Boolean,\n      default: true,\n    },\n    showContextMenu: {\n      type: Boolean,\n      default: true,\n    },\n    mobileBodyPosition: {\n      type: String,\n      default: \"bottom\",\n    },\n  },\n  setup(props) {\n    const router = useRouter();\n    const objKey = computed(() => `${props.obj.ct}:${props.obj.uid}`);\n    const canNavigateBack = ref(false);\n    const back = () => {\n      if (canNavigateBack.value) {\n        router.back();\n      }\n    };\n    onMounted(() => {\n      if (window?.history?.length > 2) {\n        canNavigateBack.value = true;\n      }\n    });\n    return {\n      objKey,\n      canNavigateBack,\n      back,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"detail-header\" :class=\"`layout-${layout}`\">\n    <div class=\"top\">\n      <div class=\"back\">\n        <BackButton v-if=\"canNavigateBack\" @click=\"back\" />\n      </div>\n      <div class=\"scope\">\n        <span v-if=\"titleScope\" v-text=\"`${titleScope}:`\" />\n      </div>\n      <div class=\"actions\">\n        <CircleButton v-if=\"showObjRating\">\n          <UserRating :obj-key=\"objKey\" :autoload=\"true\" />\n        </CircleButton>\n        <ContextMenu v-if=\"showContextMenu\" :obj=\"obj\" />\n      </div>\n    </div>\n    <div class=\"main\">\n      <div class=\"visual\">\n        <slot name=\"visual\" />\n      </div>\n      <div class=\"body\" :class=\"`mobile-position--${mobileBodyPosition}`\">\n        <div class=\"title\">\n          <h1 class=\"title--primary\" v-text=\"title\" />\n          <h2 v-if=\"subtitle\" class=\"title--secondary\" v-text=\"subtitle\" />\n        </div>\n        <div class=\"info-panel\">\n          <slot name=\"info-panel\" />\n        </div>\n      </div>\n    </div>\n    <div class=\"bottom\">\n      <div class=\"meta\">\n        <slot name=\"meta-panel\" />\n      </div>\n      <div class=\"searchbar\">\n        <slot name=\"searchbar\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n@use \"@/style/elements/container\";\n\n@mixin visual-circle {\n  height: 50vh;\n  min-height: 280px;\n  max-height: 620px;\n\n  .image {\n    height: 100%;\n  }\n\n  img {\n    border-radius: 50%;\n  }\n\n  @include responsive.bp-medium {\n    height: unset;\n  }\n}\n\n@mixin visual-square {\n  height: 50vh;\n  min-height: 280px;\n  max-height: 620px;\n  background: rgb(var(--c-page-bg) / 100%);\n\n  .image {\n    height: 100%;\n  }\n\n  img {\n    filter: grayscale(100%) brightness(125%);\n    mix-blend-mode: multiply;\n  }\n\n  @include responsive.bp-medium {\n    height: unset;\n  }\n}\n\n.detail-header {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n\n  .top,\n  .main,\n  .bottom,\n  .appendix {\n    @include container.default;\n\n    z-index: 3;\n  }\n\n  .top {\n    top: 0;\n    position: sticky;\n    height: 4rem;\n    z-index: 4;\n    display: grid;\n    grid-template-columns: 64px auto 1fr;\n    align-items: center;\n    margin-top: 0.5rem;\n    margin-bottom: 0.5rem;\n\n    > .back {\n      display: flex;\n      align-items: center;\n\n      .placeholder {\n        width: 48px;\n      }\n\n      .scope {\n        padding-left: 1rem;\n      }\n    }\n\n    > .actions {\n      display: flex;\n      justify-self: flex-end;\n    }\n  }\n\n  .bottom {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    align-items: center;\n    height: 3rem;\n    margin-top: 0.5rem;\n    margin-bottom: 0.5rem;\n\n    .meta {\n      padding-left: 0;\n    }\n\n    > .filterbar {\n      background: transparent;\n    }\n  }\n\n  .main {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    flex-grow: 1;\n    justify-content: center;\n\n    .body {\n      top: 0;\n      position: absolute;\n      width: calc(50% - 48px); // TODO: width calculation\n      margin-top: -1.5rem;\n      padding-left: calc(48px + 1rem);\n\n      .title {\n        margin-bottom: 0.5rem;\n\n        &--primary {\n          @include typo.x-large;\n\n          line-height: 4rem;\n        }\n\n        &--secondary {\n          @include typo.x-large;\n\n          line-height: 4rem;\n        }\n      }\n    }\n  }\n\n  &.layout-circle {\n    .visual {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      :deep(.image) {\n        @include visual-circle;\n      }\n    }\n  }\n\n  &.layout-square {\n    .visual {\n      display: flex;\n      align-items: center;\n      justify-content: flex-start;\n      padding-left: 50%;\n\n      :deep(.image) {\n        @include visual-square;\n      }\n    }\n  }\n\n  @include responsive.bp-medium {\n    .top {\n      grid-template-columns: 80px auto 80px;\n      margin: 0;\n      height: 60px;\n\n      .scope {\n        display: flex;\n        justify-content: center;\n      }\n    }\n\n    .main {\n      align-items: center;\n\n      .visual {\n        width: 73%; // NOTE: check calculation\n        aspect-ratio: 1;\n\n        .image {\n          aspect-ratio: 1;\n        }\n      }\n\n      .body {\n        position: relative;\n        width: unset;\n        padding: 1rem 0 0;\n        text-align: center;\n        margin-top: unset;\n\n        .title {\n          margin-bottom: 0;\n\n          &--primary {\n            @include typo.large;\n\n            line-height: unset;\n          }\n        }\n\n        /*\n          NOTE: ugly hack here: in a single case (\"mood\") we have to move the body / title\n                to the top...\n        */\n        &.mobile-position {\n          &--top {\n            top: -1rem;\n            position: absolute;\n            padding: 0;\n\n            .title {\n              &--primary {\n                @include typo.x-large;\n              }\n            }\n          }\n        }\n\n        .info-panel {\n          @include typo.light;\n\n          margin-bottom: 1rem;\n\n          :deep(div) {\n            margin: 0; // NOTE: do we really want this?\n          }\n\n          :deep(.identifiers),\n          :deep(.editor) {\n            margin-top: 1.5rem;\n            margin-bottom: 0.5rem;\n          }\n        }\n\n        :deep(a) {\n          text-decoration: underline;\n        }\n      }\n    }\n\n    &.layout-square {\n      .visual {\n        padding-left: unset;\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\nimport { useElementSize } from \"@vueuse/core\";\n\nimport SocialMediaLinks from \"@/components/social-media/SocialMediaLinks.vue\";\nimport { useDevice } from \"@/composables/device\";\n\nexport default defineComponent({\n  components: {\n    SocialMediaLinks,\n  },\n  props: {\n    appendixVisible: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  setup(props, { slots }) {\n    const { isApp } = useDevice();\n    const hasHeader = computed(() => !!slots.header);\n    const hasBody = computed(() => !!slots.default);\n    const hasBackground = computed(() => !!slots.background);\n    const headerEl = ref(null);\n    const { height: headerElHeight, width: headerWidth } = useElementSize(headerEl);\n    const headerHeight = computed(() => {\n      if (isApp) {\n        return headerElHeight.value + 140;\n      }\n      return headerElHeight.value + 78;\n    });\n    return {\n      hasHeader,\n      hasBody,\n      hasBackground,\n      headerEl,\n      headerHeight,\n      headerWidth,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"detail\">\n    <div ref=\"headerEl\" v-if=\"hasHeader\" class=\"detail__header\">\n      <slot name=\"header\" />\n    </div>\n    <section class=\"detail__body\">\n      <slot name=\"default\" />\n    </section>\n    <section class=\"detail__space\" />\n    <section class=\"detail__appendix\">\n      <slot name=\"appendix\">\n        <SocialMediaLinks v-if=\"appendixVisible\" />\n      </slot>\n    </section>\n  </div>\n  <div class=\"background\" v-if=\"hasBackground\" :style=\"{ height: `${headerHeight}px` }\">\n    <slot name=\"background\" :width=\"headerWidth\" :height=\"headerHeight\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/container\";\n\n.detail {\n  position: relative;\n  z-index: 2;\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 78px);\n\n  &__header {\n    background: transparent;\n  }\n\n  &__body {\n    background: rgb(var(--c-light) / 100%);\n  }\n\n  &__space {\n    flex-grow: 1;\n    min-height: 4rem;\n    background: rgb(var(--c-light) / 100%);\n  }\n\n  &__appendix {\n    padding: 2rem 0 6rem;\n    background: rgb(var(--c-light) / 100%);\n  }\n}\n\n.background {\n  top: 0;\n  position: absolute;\n  width: 100%;\n  z-index: 1;\n  overflow: hidden;\n  display: flex;\n  align-items: flex-end;\n}\n</style>\n","import { defineStore } from \"pinia\";\n\nimport { getEditor } from \"@/api/broadcast\";\nimport type { Editor } from \"@/typings/api\";\n\ninterface State {\n  editors: Array<Editor>;\n}\n\nexport const useBroadcastStore = defineStore(\"broadcast\", {\n  state: (): State => ({\n    editors: [],\n  }),\n  getters: {\n    editorByUid: (state: State) => {\n      return (uid: string) => state.editors.find((editor) => editor.uid === uid);\n    },\n  },\n  actions: {\n    async loadEditor(uid: string): Promise<void> {\n      const editor = await getEditor(uid);\n      const index = this.editors.findIndex((obj) => obj.uid === uid);\n      if (index > -1) {\n        this.editors[index] = editor;\n      } else {\n        this.editors.push(editor);\n      }\n    },\n  },\n});\n","<script lang=\"ts\">\nimport { computed, defineComponent, onActivated } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport PlaylistList from \"@/components/catalog/playlist/List.vue\";\nimport Searchbar from \"@/components/filter/Searchbar.vue\";\nimport ObjectIdentifiers from \"@/components/identifier/ObjectIdentifiers.vue\";\nimport ObjectTags from \"@/components/tagging/ObjectTags.vue\";\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\nimport { usePageTitle } from \"@/composables/title\";\nimport DetailHeader from \"@/layouts/DetailHeader.vue\";\nimport DetailPage from \"@/layouts/DetailPage.vue\";\nimport { useBroadcastStore } from \"@/stores/broadcast\";\n\nexport default defineComponent({\n  components: {\n    DetailPage,\n    DetailHeader,\n    LazyImage,\n    ObjectTags,\n    ObjectIdentifiers,\n    Searchbar,\n    PlaylistList,\n  },\n  props: {\n    uid: {\n      type: String,\n      required: true,\n    },\n    query: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n  setup(props) {\n    const { t } = useI18n();\n    const { loadEditor, editorByUid } = useBroadcastStore();\n    const editor = computed(() => editorByUid(props.uid));\n    const objKey = computed(() => `${editor.value?.ct}:${editor.value?.uid}`);\n    const initialFilter = computed(() => {\n      return {\n        obj_key: objKey.value,\n        tags: [],\n      };\n    });\n    const userFilter = computed(() => {\n      return props.query;\n    });\n    const combinedFilter = computed(() => {\n      // @ts-ignore\n      const tags = [...(initialFilter.value?.tags ?? []), ...(userFilter.value?.tags ?? [])];\n      const merged = { ...initialFilter.value, ...userFilter.value };\n      // @ts-ignore\n      merged.tags = tags;\n      return merged;\n    });\n    usePageTitle(computed(() => editor.value?.name));\n    onActivated(() => {\n      if (!editor.value) {\n        loadEditor(props.uid);\n      }\n    });\n    return {\n      t,\n      objKey,\n      editor,\n      initialFilter,\n      userFilter,\n      combinedFilter,\n    };\n  },\n});\n</script>\n\n<template>\n  <DetailPage v-if=\"editor\">\n    <template #header>\n      <DetailHeader\n        :obj=\"editor\"\n        layout=\"square\"\n        :show-context-menu=\"false\"\n        :show-obj-rating=\"true\"\n        :title=\"editor.name\"\n        :title-scope=\"t('broadcast.ct.editor', 1)\"\n      >\n        <template #visual>\n          <LazyImage class=\"image\" :image=\"editor.image\" />\n        </template>\n        <template #info-panel>\n          <!--\n          <div class=\"role\" v-text=\"editor.role\" />\n          -->\n          <div v-if=\"editor.location\" class=\"location\" v-text=\"editor.location\" />\n          <ObjectTags class=\"tags\" :obj=\"editor\" :limit=\"4\" />\n          <div v-if=\"editor.description\" class=\"description\" v-text=\"editor.description\" />\n          <ObjectIdentifiers class=\"identifiers\" :obj=\"editor\" :limit=\"4\" />\n        </template>\n        <template #meta-panel>\n          <span>\n            {{ editor.numPlaylists }}\n            Shows\n          </span>\n        </template>\n        <template #searchbar>\n          <Searchbar :filter=\"combinedFilter\" :hide-form-for-mobile=\"true\" />\n        </template>\n      </DetailHeader>\n    </template>\n    <PlaylistList :initial-filter=\"initialFilter\" :query=\"query\" layout=\"table\" />\n  </DetailPage>\n</template>\n\n<style lang=\"scss\" scoped>\n.location {\n  margin-top: 0.5rem;\n}\n\n.tags {\n  margin: 0 0 1rem;\n}\n\n.description {\n  margin: 1rem 0;\n  line-height: 1.25;\n  max-width: 480px;\n}\n\n.identifiers {\n  margin: 1rem 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, onMounted, ref } from \"vue\";\nimport { useRouter } from \"vue-router\";\n\nimport BackButton from \"@/components/ui/button/BackButton.vue\";\n\nexport default defineComponent({\n  components: {\n    BackButton,\n  },\n  props: {\n    titleScope: {\n      type: String,\n      required: false,\n      default: null,\n    },\n  },\n  setup() {\n    const router = useRouter();\n    const canNavigateBack = ref(false);\n    const back = () => {\n      if (canNavigateBack.value) {\n        router.back();\n      }\n    };\n    onMounted(() => {\n      if (window?.history?.length > 2) {\n        canNavigateBack.value = true;\n      }\n    });\n    return {\n      canNavigateBack,\n      back,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"detail-header\">\n    <div class=\"top\">\n      <div class=\"back\">\n        <BackButton v-if=\"canNavigateBack\" @click=\"back\" />\n      </div>\n      <div class=\"scope\">\n        <span v-if=\"titleScope\" v-text=\"`${titleScope}:`\" />\n      </div>\n    </div>\n    <div class=\"main\">\n      <div class=\"visual\">\n        <div class=\"image\" />\n      </div>\n      <div class=\"body\">\n        <div class=\"title\">\n          <h1 class=\"title--primary\" />\n        </div>\n      </div>\n    </div>\n    <div class=\"bottom\">\n      <div class=\"meta\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/typo\";\n@use \"@/style/elements/container\";\n\n@mixin visual-image {\n  height: 50vh;\n  min-height: 280px;\n  max-height: 620px;\n\n  .image {\n    height: 100%;\n  }\n\n  img {\n    border-radius: 50%;\n  }\n}\n\n.detail-header {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n\n  .top,\n  .main,\n  .bottom,\n  .appendix {\n    @include container.default;\n\n    z-index: 3;\n  }\n\n  .top {\n    top: 0;\n    position: sticky;\n    height: 4rem;\n    z-index: 4;\n    display: grid;\n    grid-template-columns: 64px auto 1fr;\n    align-items: center;\n    margin-top: 0.5rem;\n    margin-bottom: 0.5rem;\n\n    > .back {\n      display: flex;\n      align-items: center;\n\n      .scope {\n        padding-left: 1rem;\n      }\n    }\n\n    > .actions {\n      display: flex;\n      justify-self: flex-end;\n    }\n  }\n\n  .bottom {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    align-items: center;\n    height: 3rem;\n    margin-top: 0.5rem;\n    margin-bottom: 0.5rem;\n\n    .meta {\n      padding-left: 1rem;\n    }\n\n    > .filterbar {\n      background: transparent;\n    }\n  }\n\n  .main {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    flex-grow: 1;\n    justify-content: center;\n\n    .visual {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      .image {\n        @include visual-image;\n\n        height: 50vh;\n        min-height: 280px;\n        max-height: 620px;\n        background: rgb(var(--c-light) / 10%);\n        aspect-ratio: 1;\n        border-radius: 50%;\n      }\n    }\n\n    .body {\n      top: 0;\n      position: absolute;\n      width: calc(50% - 48px); // TODO: width calculation\n      margin-top: -1.5rem;\n      padding-left: calc(48px + 1rem);\n\n      .title {\n        margin-bottom: 0.5rem;\n\n        /*\n        &--scope {\n          @include typo.default;\n          @include typo.bold;\n          line-height: 1.5rem;\n        }\n        */\n        &--primary {\n          @include typo.x-large;\n          @include typo.bold;\n\n          line-height: 4rem;\n        }\n      }\n    }\n  }\n\n  @include responsive.bp-medium {\n    .top {\n      grid-template-columns: 80px auto 80px;\n      margin: 0;\n      height: 60px;\n\n      .scope {\n        display: flex;\n        justify-content: center;\n      }\n    }\n\n    .main {\n      align-items: center;\n\n      .visual {\n        width: 73%;\n        aspect-ratio: 1;\n\n        .image {\n          height: unset;\n          aspect-ratio: 1;\n        }\n      }\n    }\n\n    .bottom {\n      min-height: 175px;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onActivated, onBeforeUpdate } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport PlayAllAction from \"@/components/catalog/actions/PlayAllAction.vue\";\nimport MediaList from \"@/components/catalog/media/List.vue\";\nimport ObjectIdentifiers from \"@/components/identifier/ObjectIdentifiers.vue\";\nimport ObjectTags from \"@/components/tagging/ObjectTags.vue\";\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\nimport Duration from \"@/components/ui/time/Duration.vue\";\nimport { usePageTitle } from \"@/composables/title\";\nimport DetailHeader from \"@/layouts/DetailHeader.vue\";\nimport DetailHeaderLoading from \"@/layouts/DetailHeaderLoading.vue\";\nimport DetailPage from \"@/layouts/DetailPage.vue\";\nimport { useCatalogStore } from \"@/stores/catalog\";\n\nexport default defineComponent({\n  components: {\n    DetailPage,\n    DetailHeader,\n    DetailHeaderLoading,\n    LazyImage,\n    PlayAllAction,\n    Duration,\n    PlayAction,\n    ObjectTags,\n    ObjectIdentifiers,\n    MediaList,\n  },\n  props: {\n    uid: {\n      type: String,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { t } = useI18n();\n    const { artistByUid, loadArtist } = useCatalogStore();\n    const artist = computed(() => artistByUid(props.uid));\n    const objKey = computed(() => `catalog.artist:${props.uid}`);\n    const query = computed(() => ({\n      filter: {\n        obj_key: objKey.value,\n      },\n      search: [],\n      options: {},\n    }));\n    usePageTitle(computed(() => artist.value?.name));\n    // this is kind of bad. don't know yet how to improve...\n    // onActivated is called when component is already in keep-alive router,\n    // onBeforeUpdate is needed to switch between different objects in the already active component.\n    // it also needs some ugly bits in the store (see catalog/loadArtist):\n    // when the component is in keep-alive, and routing to here from another place both\n    // onActivated and onBeforeUpdate will fire ;(\n    onActivated(() => loadArtist(props.uid));\n    onBeforeUpdate(() => loadArtist(props.uid));\n    return {\n      t,\n      objKey,\n      artist,\n      query,\n    };\n  },\n});\n</script>\n\n<template>\n  <DetailPage>\n    <template #header>\n      <DetailHeader\n        v-if=\"artist\"\n        :obj=\"artist\"\n        :title-scope=\"t('catalog.ct.artist', 1)\"\n        :title=\"artist.name\"\n      >\n        <template #visual>\n          <LazyImage class=\"image\" :image=\"artist.image\" preload>\n            <PlayAction\n              :obj-key=\"objKey\"\n              :icon-scale=\"2\"\n              :outlined=\"true\"\n              :filled=\"true\"\n              :color=\"[0, 0, 0]\"\n            />\n          </LazyImage>\n        </template>\n        <template #info-panel>\n          <ObjectTags class=\"tags\" :obj=\"artist\" :limit=\"4\" />\n          <div v-if=\"artist.countryCode\">\n            <span v-text=\"artist.countryCode\" />\n            <span v-if=\"artist.dateStart\"> ({{ artist.dateStart.substring(0, 4) }}) </span>\n          </div>\n          <ObjectIdentifiers class=\"identifiers\" :obj=\"artist\" :limit=\"4\" />\n        </template>\n        <template #meta-panel>\n          <PlayAllAction v-if=\"artist && artist.numMedia > 1\" :obj-key=\"objKey\">\n            <span v-text=\"t('catalog.list.playAllTracks', artist.numMedia)\" />\n            &nbsp; (<Duration :seconds=\"artist.mediaTotalDuration\" />)\n          </PlayAllAction>\n        </template>\n      </DetailHeader>\n      <DetailHeaderLoading v-else title-scope=\"Künstler*in\" />\n    </template>\n    <MediaList v-if=\"artist\" :initial-filter=\"query.filter\" :disable-user-filter=\"true\" />\n  </DetailPage>\n</template>\n\n<style lang=\"scss\" scoped>\n.tags,\n.identifiers {\n  margin: 0.5rem 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onActivated } from \"vue\";\n\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport MediaArtists from \"@/components/catalog/media/MediaArtists.vue\";\nimport MediaReleases from \"@/components/catalog/media/MediaReleases.vue\";\nimport PlaylistList from \"@/components/catalog/playlist/List.vue\";\nimport ObjectIdentifiers from \"@/components/identifier/ObjectIdentifiers.vue\";\nimport ObjectTags from \"@/components/tagging/ObjectTags.vue\";\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\nimport Duration from \"@/components/ui/time/Duration.vue\";\nimport { usePageTitle } from \"@/composables/title\";\nimport DetailHeader from \"@/layouts/DetailHeader.vue\";\nimport DetailHeaderLoading from \"@/layouts/DetailHeaderLoading.vue\";\nimport DetailPage from \"@/layouts/DetailPage.vue\";\nimport { useCatalogStore } from \"@/stores/catalog\";\n\nexport default defineComponent({\n  components: {\n    DetailPage,\n    DetailHeader,\n    DetailHeaderLoading,\n    LazyImage,\n    Duration,\n    PlayAction,\n    ObjectTags,\n    ObjectIdentifiers,\n    MediaArtists,\n    MediaReleases,\n    PlaylistList,\n  },\n  props: {\n    uid: {\n      type: String,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { mediaByUid, loadMedia } = useCatalogStore();\n    const media = computed(() => mediaByUid(props.uid));\n    const objKey = computed(() => `catalog.media:${props.uid}`);\n    const query = computed(() => ({\n      filter: {\n        obj_key: objKey.value,\n      },\n      search: [],\n      options: {},\n    }));\n    const release = computed(() => {\n      if (!(media.value && media.value.releases && media.value.releases.length)) {\n        return null;\n      }\n      return media.value.releases[0];\n    });\n    const image = computed(() => {\n      return release.value && release.value.image ? release.value.image : null;\n    });\n    usePageTitle(computed(() => media.value?.name));\n    onActivated(() => loadMedia(props.uid));\n    return {\n      media,\n      objKey,\n      query,\n      release,\n      image,\n    };\n  },\n});\n</script>\n<template>\n  <DetailPage>\n    <template #header>\n      <DetailHeader v-if=\"media\" :obj=\"media\" title-scope=\"Track\" :title=\"media.name\">\n        <template #visual>\n          <LazyImage class=\"image\" :image=\"image\">\n            <PlayAction\n              :obj-key=\"objKey\"\n              :icon-scale=\"2\"\n              :outlined=\"true\"\n              :filled=\"true\"\n              :color=\"[0, 0, 0]\"\n            />\n          </LazyImage>\n        </template>\n        <template #info-panel>\n          <div class=\"artists\">\n            <MediaArtists :artists=\"media.artists\" />\n          </div>\n          <div class=\"releases\">\n            <MediaReleases show-details :releases=\"media.releases\" />\n          </div>\n          <ObjectTags class=\"tags\" :obj=\"media\" :limit=\"4\" />\n          <ObjectIdentifiers class=\"identifiers\" :obj=\"media\" :limit=\"4\" />\n        </template>\n        <template #meta-panel>\n          <Duration :seconds=\"media.duration\" />\n        </template>\n      </DetailHeader>\n      <DetailHeaderLoading v-else />\n    </template>\n    <PlaylistList :initial-filter=\"query.filter\" :disable-user-filter=\"true\" layout=\"table\" />\n  </DetailPage>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.artists {\n  margin-bottom: 1rem;\n\n  :deep(span) {\n    @include typo.large;\n  }\n\n  :deep(a) {\n    @include typo.large;\n\n    text-decoration: underline;\n  }\n}\n\n.tags,\n.identifiers {\n  margin: 0.5rem 0;\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent, onMounted, ref, watch } from \"vue\";\n\ntype RGBAColor = Array<number>;\n\ninterface Colors {\n  inner: RGBAColor;\n  outer: RGBAColor;\n}\n\ninterface RayConfig {\n  count: number;\n  spread: number;\n  width: number;\n  length: number;\n  colors: Colors;\n}\n\ninterface Ray {\n  start: number;\n  width: number;\n  length: number;\n  blend: string;\n  blur: number;\n  colors: Colors;\n}\n\nconst colorToRGBA = (color: RGBAColor) => {\n  const [r, g, b, a] = [...color];\n  return `rgb(${r} ${g} ${b} / ${a})`;\n};\n\nconst drawCanvas = async (\n  ctx: CanvasRenderingContext2D,\n  width: number,\n  height: number,\n  offsetY: number,\n  rays: Array<Ray>\n) => {\n  ctx.canvas.width = width;\n  ctx.canvas.height = height;\n  const center = {\n    x: width / 2,\n    y: height / 2 + offsetY / 2,\n  };\n  rays.forEach((ray: Ray) => {\n    const { length, colors, start, blend, blur } = ray;\n    const gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, length);\n    ctx.beginPath();\n    gradient.addColorStop(0, colorToRGBA(colors.inner));\n    gradient.addColorStop(1, colorToRGBA(colors.outer));\n    ctx.fillStyle = gradient;\n    ctx.arc(center.x, center.y, length, start, start + ray.width);\n    ctx.lineTo(center.x, center.y);\n    ctx.globalCompositeOperation = blend;\n    if (blur === 0) {\n      ctx.filter = \"\";\n    } else {\n      ctx.filter = `blur(${blur}px)`;\n    }\n    ctx.fill();\n  });\n};\n\nexport default defineComponent({\n  props: {\n    width: {\n      type: Number,\n      default: 0,\n    },\n    height: {\n      type: Number,\n      default: 0,\n    },\n    offsetY: {\n      type: Number,\n      default: 92,\n    },\n    color: {\n      type: Array,\n      default: () => [20, 20, 20],\n    },\n    rayConfig: {\n      type: Array as PropType<Array<RayConfig>>,\n      default: () => [],\n    },\n  },\n  setup(props) {\n    const canvas = ref<HTMLCanvasElement | null>(null);\n    const size = computed(() => {\n      return {\n        height: props.height,\n        width: props.width,\n      };\n    });\n    const containerStyle = computed(() => {\n      const bg = props.color.join(\" \");\n      return {\n        // TODO: implement calculation taking into account screen size\n        height: `${props.height + 300}px`,\n        background: `rgb(${bg})`,\n      };\n    });\n    const visualStyle = computed(() => {\n      return {\n        height: `${props.height}px`,\n        width: `${props.width}px`,\n      };\n    });\n    const rays = computed(() => {\n      const r: Ray[] = [];\n      props.rayConfig.forEach((conf: RayConfig) => {\n        const { count, colors, spread, width, length } = conf;\n        for (let i = 0; i < count; i++) {\n          r.push({\n            blur: 0,\n            blend: \"multiply\",\n            start: Math.PI * Math.random() * spread,\n            width: Math.PI * Math.random() * width,\n            length,\n            colors,\n          });\n        }\n      });\n      return r;\n    });\n    const updateCanvas = async () => {\n      const ctx = canvas.value?.getContext(\"2d\");\n      if (ctx) {\n        // TODO: implement offset calculation\n        await drawCanvas(ctx, props.width, props.height, props.offsetY, rays.value);\n      }\n    };\n    onMounted(async () => {\n      await updateCanvas();\n    });\n    watch(\n      () => size.value,\n      async () => {\n        await updateCanvas();\n      }\n    );\n    return {\n      canvas,\n      containerStyle,\n      visualStyle,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"visual-container\" :style=\"containerStyle\">\n    <div class=\"visual\" :style=\"visualStyle\">\n      <canvas ref=\"canvas\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.visual {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onActivated, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport PlayAllAction from \"@/components/catalog/actions/PlayAllAction.vue\";\nimport MediaList from \"@/components/catalog/media/List.vue\";\nimport Visual from \"@/components/catalog/mood/Visual.vue\";\nimport Searchbar from \"@/components/filter/Searchbar.vue\";\nimport { usePageTitle } from \"@/composables/title\";\nimport DetailHeader from \"@/layouts/DetailHeader.vue\";\nimport DetailHeaderLoading from \"@/layouts/DetailHeaderLoading.vue\";\nimport DetailPage from \"@/layouts/DetailPage.vue\";\nimport { useCatalogStore } from \"@/stores/catalog\";\nimport type { Tag } from \"@/typings\";\n\nexport default defineComponent({\n  components: {\n    DetailPage,\n    DetailHeader,\n    DetailHeaderLoading,\n    PlayAction,\n    PlayAllAction,\n    Searchbar,\n    MediaList,\n    Visual,\n  },\n  props: {\n    uid: {\n      type: String,\n      required: true,\n    },\n    query: {\n      type: Object,\n      default: () => {},\n    },\n  },\n  setup(props) {\n    const { t } = useI18n();\n    const { moodByUid, loadMood } = useCatalogStore();\n    const mood = computed(() => moodByUid(props.uid));\n    const objKey = computed(() => `catalog.mood:${props.uid}`);\n    const initialFilter = computed(() => {\n      if (!mood.value) {\n        return {};\n      }\n      return {\n        tags: mood.value.tags.map((tag: Tag) => tag.uid),\n      };\n    });\n    const userFilter = computed(() => {\n      return props.query;\n    });\n    // combinedQuery is needed for the 'play action'\n    const combinedFilter = computed(() => {\n      // @ts-ignore\n      const tags = [...(initialFilter.value?.tags ?? []), ...(userFilter.value?.tags ?? [])];\n      const merged = { ...initialFilter.value, ...userFilter.value };\n      // @ts-ignore\n      merged.tags = tags;\n      return merged;\n    });\n    usePageTitle(computed(() => mood.value?.name));\n    onActivated(() => loadMood(props.uid));\n    const allMediaLoaded = ref(false);\n    return {\n      t,\n      objKey,\n      mood,\n      initialFilter,\n      userFilter,\n      combinedFilter,\n      allMediaLoaded,\n    };\n  },\n});\n</script>\n\n<template>\n  <DetailPage :appendix-visible=\"allMediaLoaded\">\n    <template #background=\"slotProps\">\n      <Visual\n        v-if=\"mood\"\n        :color=\"mood.rgb\"\n        :ray-config=\"mood.rays\"\n        :height=\"slotProps.height\"\n        :width=\"slotProps.width\"\n      />\n    </template>\n    <template #header>\n      <DetailHeader\n        v-if=\"mood\"\n        :obj=\"mood\"\n        :show-context-menu=\"false\"\n        :title-scope=\"t('catalog.ct.mood', 1)\"\n        :title=\"mood.name\"\n        mobile-body-position=\"top\"\n      >\n        <template #visual>\n          <div\n            class=\"image\"\n            :style=\"{\n              display: 'flex',\n              alignItems: 'center',\n            }\"\n          >\n            <PlayAction\n              :obj-key=\"objKey\"\n              :filter=\"combinedFilter\"\n              :icon-scale=\"2\"\n              :outlined=\"true\"\n              :filled=\"true\"\n              :color=\"[0, 0, 0]\"\n            />\n          </div>\n        </template>\n        <!--\n        <template #info-panel>\n          <ObjectTags class=\"tags\" :obj=\"mood\" :limit=\"4\" />\n        </template>\n        -->\n        <template #meta-panel>\n          <PlayAllAction :obj-key=\"objKey\">\n            <span v-text=\"t('catalog.list.playAllTracks', 1)\" />\n          </PlayAllAction>\n        </template>\n        <template #searchbar>\n          <Searchbar :filter=\"userFilter\" :hide-form-for-mobile=\"true\" />\n        </template>\n      </DetailHeader>\n      <DetailHeaderLoading v-else title-scope=\"Mood\" />\n    </template>\n    <template #default>\n      <MediaList\n        v-if=\"objKey\"\n        :initial-filter=\"initialFilter\"\n        :query=\"query\"\n        :disable-user-filter=\"false\"\n        @allLoaded=\"allMediaLoaded = true\"\n        @hasMore=\"allMediaLoaded = false\"\n      />\n    </template>\n  </DetailPage>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref } from \"vue\";\n\nimport type { AudioAnalyser } from \"@/player/analyser\";\n\nconst drawCanvas = async (\n  ctx: CanvasRenderingContext2D,\n  width: number,\n  height: number,\n  color: string,\n  bins: Uint8Array\n) => {\n  ctx.canvas.width = width;\n  ctx.canvas.height = height;\n  // bar width: 6px for canvas of 48px\n  const barWidth = 6;\n  const heightFactor = 1 / (240 / height);\n  const numBins = bins.length;\n  const y = 0;\n  const w = barWidth;\n  for (let i = 0; i < numBins; i++) {\n    const value = bins[i] * heightFactor;\n    const x = i * (barWidth * 1.5) + barWidth / 3;\n    const h = value;\n    // ctx.fillStyle = \"rgb(255 255 255 / 100%)\";\n    ctx.fillStyle = color;\n    ctx.fillRect(x, y, w, h);\n  }\n};\n\nexport default defineComponent({\n  props: {\n    width: {\n      type: Number,\n      default: 48,\n    },\n    height: {\n      type: Number,\n      default: 48,\n    },\n    color: {\n      type: String,\n      default: \"rgb(0 0 0 / 100%)\",\n    },\n  },\n  setup(props) {\n    const canvas = ref<HTMLCanvasElement | null>(null);\n    const style = computed(() => {\n      return {\n        height: `${props.height}px`,\n        width: `${props.width}px`,\n        transform: \"scaleY(-1)\",\n      };\n    });\n    const numBins = computed(() => {\n      return Math.floor(props.width / 9); // 6px bar, 3px space;\n    });\n    onMounted(() => {\n      if (!canvas.value) {\n        return;\n      }\n      const player = window.hlsPlayer;\n      if (!player) {\n        return;\n      }\n\n      // const analyser = player.analyser;\n      // if (!analyser) {\n      //   return;\n      // }\n\n      const ctx = canvas.value?.getContext(\"2d\");\n\n      const getDrawData = (analyser: AudioAnalyser) => {\n        if (!analyser) {\n          return new Uint8Array(300);\n        }\n        // we just need one channel here\n        const a = analyser.a1024;\n        const spectrumData = new Uint8Array(300);\n        if (a && ctx) {\n          a.getByteFrequencyData(spectrumData);\n        }\n        return spectrumData.slice(0, numBins.value);\n      };\n\n      const drawLoop = () => {\n        if (player.analyser && ctx) {\n          const drawData = getDrawData(player.analyser);\n          drawCanvas(ctx, props.width, props.height, props.color, drawData);\n        }\n        requestAnimationFrame(drawLoop);\n      };\n      requestAnimationFrame(drawLoop);\n    });\n    return {\n      canvas,\n      style,\n      numBins,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"spectrum\" :style=\"style\">\n    <canvas ref=\"canvas\" />\n  </div>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport AudioVisualisation from \"./AudioVisualisation.vue\";\n\nexport default defineComponent({\n  components: {\n    AudioVisualisation,\n  },\n  props: {\n    width: {\n      type: Number,\n      default: 0,\n    },\n    height: {\n      type: Number,\n      default: 0,\n    },\n    color: {\n      type: String,\n      default: \"rgb(255 255 255 / 100%)\",\n    },\n  },\n  setup(props) {\n    const containerStyle = computed(() => {\n      return {};\n    });\n    const spectrogramStyle = computed(() => {\n      return {\n        height: `${props.height}px`,\n        width: `${props.width}px`,\n      };\n    });\n    return {\n      containerStyle,\n      spectrogramStyle,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"spectrogram-container\" :style=\"containerStyle\">\n    <div class=\"spectrogram\" :style=\"spectrogramStyle\">\n      <AudioVisualisation :width=\"width\" :height=\"height + 60\" :color=\"color\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.spectrogram-container {\n  padding-top: 0;\n  pointer-events: none;\n}\n\n.spectrogram {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: flex-end;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport type { Editor } from \"@/typings\";\n\ndefineProps<{\n  editor: Editor;\n}>();\n\nconst { isSmallScreen } = useDevice();\n</script>\n\n<template>\n  <router-link v-if=\"editor\" class=\"editor\" :to=\"`/discover/editors/${editor.uid}/`\">\n    <div v-if=\"!isSmallScreen\" class=\"visual\">\n      <LazyImage v-if=\"editor.image\" class=\"image\" :image=\"editor.image\" />\n    </div>\n    <div class=\"name\" v-text=\"editor.name\" />\n  </router-link>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n@use \"@/style/base/live-color\";\n\n.editor {\n  display: inline-flex;\n  align-items: center;\n  height: 3rem;\n  margin-top: 0.75rem;\n  border-radius: 1.5rem;\n  transition: color, background-color 200ms;\n\n  .visual {\n    height: 3rem;\n    width: 3rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    .image {\n      height: 3rem;\n      width: 3rem;\n      min-width: unset;\n      max-width: 3rem;\n      border-radius: 50%;\n      filter: grayscale(1);\n      transition: width 100ms, height 100ms;\n\n      :deep(> img) {\n        border-radius: 50%;\n      }\n    }\n  }\n\n  .name {\n    display: flex;\n    align-items: center;\n    height: 3rem;\n    padding: 0 1rem;\n  }\n\n  &:hover {\n    .image {\n      height: 2.5rem;\n      width: 2.5rem;\n    }\n  }\n\n  @include responsive.on-hover {\n    @include live-color.bg-inverse(10%);\n  }\n\n  @include responsive.bp-medium {\n    height: unset;\n    margin-top: unset;\n    border-radius: unset;\n\n    .name {\n      height: unset;\n      padding: unset;\n    }\n  }\n}\n</style>\n","const playlistTitle = (playlist: any) => {\n  // @ts-ignore\n  const name = playlist.series ? playlist.series.name : playlist.name;\n  // @ts-ignore\n  const appendix = playlist.series ? playlist.series.episode : null;\n\n  if (name && appendix) {\n    return `${name} #${appendix}`;\n  }\n  return name;\n};\n\nexport { playlistTitle };\n","<script lang=\"ts\">\nimport { computed, defineComponent, onActivated } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport Spectrogram from \"@/components/audio/Spectrogram.vue\";\nimport EditorInline from \"@/components/broadcast/editor/Inline.vue\";\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport PlayAllAction from \"@/components/catalog/actions/PlayAllAction.vue\";\nimport MediaList from \"@/components/catalog/media/List.vue\";\nimport ObjectTags from \"@/components/tagging/ObjectTags.vue\";\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\nimport Duration from \"@/components/ui/time/Duration.vue\";\nimport { usePageTitle } from \"@/composables/title\";\nimport DetailHeader from \"@/layouts/DetailHeader.vue\";\nimport DetailHeaderLoading from \"@/layouts/DetailHeaderLoading.vue\";\nimport DetailPage from \"@/layouts/DetailPage.vue\";\nimport { useCatalogStore } from \"@/stores/catalog\";\nimport { playlistTitle } from \"@/utils/catalog\";\n\nexport default defineComponent({\n  components: {\n    DetailPage,\n    DetailHeader,\n    DetailHeaderLoading,\n    LazyImage,\n    PlayAllAction,\n    Duration,\n    PlayAction,\n    ObjectTags,\n    MediaList,\n    EditorInline,\n    Spectrogram,\n  },\n  props: {\n    uid: {\n      type: String,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { t } = useI18n();\n    const { playlistByUid, loadPlaylist } = useCatalogStore();\n    const playlist = computed(() => playlistByUid(props.uid));\n    const objKey = computed(() => `catalog.playlist:${props.uid}`);\n    const title = computed(() => playlistTitle(playlist.value));\n    const mediaList = computed(() => {\n      return playlist.value.mediaSet.reduce((a: any, b: any) => a.concat({ ...b.media, ...b }), []);\n    });\n    const query = computed(() => ({\n      filter: {\n        obj_key: objKey.value,\n      },\n      search: [],\n      options: {},\n    }));\n    usePageTitle(computed(() => playlist.value?.name));\n    onActivated(() => loadPlaylist(props.uid));\n    return {\n      t,\n      objKey,\n      playlist,\n      title,\n      mediaList,\n      query,\n    };\n  },\n});\n</script>\n\n<template>\n  <DetailPage>\n    <template #background=\"slotProps\">\n      <Spectrogram\n        :height=\"slotProps.height / 3\"\n        :width=\"slotProps.width\"\n        color=\"rgb(0 0 0 / 10%)\"\n      />\n    </template>\n    <template #header>\n      <DetailHeader\n        v-if=\"playlist\"\n        :obj=\"playlist\"\n        :title=\"title\"\n        :subtitle=\"playlist.name\"\n        title-scope=\"Show\"\n      >\n        <template #visual>\n          <LazyImage class=\"image\" :image=\"playlist.image\">\n            <PlayAction\n              :obj-key=\"objKey\"\n              :icon-scale=\"2\"\n              :outlined=\"true\"\n              :filled=\"true\"\n              :color=\"[0, 0, 0]\"\n            />\n          </LazyImage>\n        </template>\n        <template #info-panel>\n          <ObjectTags class=\"tags\" :obj=\"playlist\" :limit=\"4\" />\n          <EditorInline v-if=\"playlist && playlist.editor\" :editor=\"playlist.editor\" />\n        </template>\n        <template #meta-panel>\n          <PlayAllAction v-if=\"playlist && playlist.numMedia\" :obj-key=\"objKey\">\n            <span v-text=\"t('catalog.list.playAllTracks', playlist.numMedia)\" />\n            &nbsp; (<Duration :seconds=\"playlist.duration\" :round-seconds=\"60 * 5\" />)\n          </PlayAllAction>\n        </template>\n      </DetailHeader>\n      <DetailHeaderLoading v-else title-scope=\"Show\" />\n    </template>\n    <MediaList\n      v-if=\"objKey\"\n      :initial-filter=\"query.filter\"\n      :disable-user-filter=\"true\"\n      :hide-upcoming=\"true\"\n    />\n  </DetailPage>\n</template>\n\n<style lang=\"scss\" scoped>\n.tags,\n.identifiers {\n  margin: 0.5rem 0;\n}\n</style>\n","import { APIClient } from \"@/api/client\";\nimport { useAPIBaseUrl } from \"@/composables/api\";\n\nconst { APIBaseUrl } = useAPIBaseUrl();\n\n// const PAGE_ENDPOINT = `${APIBaseUrl.value}cms/page`;\n\nasync function getPage(path: string) {\n  const url = `${APIBaseUrl.value}cms/page${path}`;\n  const response = await APIClient.get(url);\n  return response.data;\n}\n\nexport { getPage };\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        stroke: \"none\",\n        fill: color.value,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <rect x=\"14\" y=\"22.5\" width=\"20\" height=\"3\" />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        stroke: \"none\",\n        fill: color.value,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <rect x=\"22.5\" y=\"14\" width=\"3\" height=\"20\" />\n    <rect x=\"14\" y=\"22.5\" width=\"20\" height=\"3\" />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconMinus from \"@/components/ui/icon/IconMinus.vue\";\nimport IconPlus from \"@/components/ui/icon/IconPlus.vue\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconPlus,\n    IconMinus,\n  },\n  props: {\n    isExpanded: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: [\"expand\", \"condense\"],\n  setup(props, { emit }) {\n    const toggleExpanded = () => emit(props.isExpanded ? \"condense\" : \"expand\");\n    return {\n      toggleExpanded,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"expandable-section\" :class=\"{ 'is-expanded': isExpanded }\">\n    <div @click=\"toggleExpanded\" class=\"title\">\n      <div class=\"text\">\n        <slot name=\"title\"></slot>\n      </div>\n      <CircleButton>\n        <IconMinus v-if=\"isExpanded\" />\n        <IconPlus v-else />\n      </CircleButton>\n    </div>\n    <div v-if=\"isExpanded\" class=\"content\">\n      <slot name=\"default\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n\n.expandable-section {\n  border-top: 1px solid rgb(var(--c-dark) / 20%);\n  transition: background 200ms;\n\n  /*\n  &.is-expanded {\n    background: rgba(var(--c-dark), 0.025);\n  }\n  */\n  .title {\n    @include typo.large;\n\n    min-height: calc(108px - 1rem);\n    display: flex;\n    align-items: center;\n    cursor: pointer;\n\n    .text {\n      flex-grow: 1;\n      padding: 0.5rem 0;\n    }\n  }\n\n  .content {\n    margin-bottom: 2rem;\n  }\n\n  @include responsive.bp-medium {\n    .title {\n      min-height: calc(60px - 1rem);\n    }\n\n    .content {\n      margin-top: 0.25rem;\n      margin-bottom: 1rem;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent, ref } from \"vue\";\n\nimport ExpandableSection from \"@/components/ui/section/ExpandableSection.vue\";\nimport type { Section } from \"@/typings/api\";\n\nimport SectionCta from \"./SectionCta.vue\";\n\nexport default defineComponent({\n  props: {\n    section: {\n      type: Object as PropType<Section>,\n      required: true,\n    },\n  },\n  components: {\n    ExpandableSection,\n    SectionCta,\n  },\n  setup(props) {\n    const isExpanded = ref(false);\n    const isExpandable = computed(() => {\n      return !!(props.section.expandable && props.section.title);\n    });\n    return {\n      isExpanded,\n      isExpandable,\n    };\n  },\n});\n</script>\n\n<template>\n  <ExpandableSection\n    v-if=\"isExpandable\"\n    :is-expanded=\"isExpanded\"\n    @expand=\"isExpanded = true\"\n    @condense=\"isExpanded = false\"\n    class=\"section\"\n  >\n    <template #title>\n      <h2 @click.prevent v-text=\"section.title\" />\n    </template>\n    <div class=\"body\" v-html=\"section.body\" />\n    <SectionCta :section=\"section\" />\n  </ExpandableSection>\n  <section v-else class=\"section\">\n    <h2 v-if=\"section.title\" class=\"title\" v-text=\"section.title\" />\n    <div class=\"body\" v-html=\"section.body\" />\n    <SectionCta :section=\"section\" />\n  </section>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/container\";\n@use \"@/style/elements/cms\";\n\n.section {\n  .title {\n    @include typo.large;\n    @include typo.bold;\n\n    margin: 0 0 0.5rem;\n  }\n\n  :deep(.body) {\n    @include cms.content;\n    @include cms.pyembed;\n\n    img {\n      max-width: 100%;\n    }\n\n    > .toc {\n      @include cms.toc;\n    }\n\n    > .admonition {\n      @include cms.admonition;\n    }\n\n    > table {\n      @include cms.table;\n    }\n\n    > .footnote {\n      @include cms.footnote;\n    }\n  }\n}\n\n.expandable-section {\n  :deep(.title) {\n    @include typo.bold;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, onBeforeMount, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport { getPage } from \"@/api/cms\";\nimport Section from \"@/components/cms/Section.vue\";\nimport SocialMediaLinks from \"@/components/social-media/SocialMediaLinks.vue\";\nimport { useSettings } from \"@/composables/settings\";\nimport { usePageTitle } from \"@/composables/title\";\nimport type { Page } from \"@/typings/api\";\n\ninterface ErrorPage {\n  title: string;\n  message: string;\n}\n\nexport default defineComponent({\n  props: {\n    path: {\n      type: String,\n      required: true,\n    },\n  },\n  components: {\n    Section,\n    SocialMediaLinks,\n  },\n  setup(props) {\n    const { t } = useI18n();\n    const { locale } = useSettings();\n    const page = ref<Page | null>(null);\n    const errorPage = ref<ErrorPage | null>(null);\n    const loadPage = async (path: string) => {\n      page.value = null;\n      errorPage.value = null;\n      try {\n        page.value = await getPage(path);\n        errorPage.value = null;\n      } catch (err: unknown) {\n        const message = err instanceof Error ? err.message : \"\";\n        errorPage.value = {\n          title: t(\"pages.pageNotFound\"),\n          message,\n        };\n      }\n    };\n    usePageTitle(computed(() => page.value?.title));\n    onBeforeMount(async () => {\n      await loadPage(props.path);\n    });\n    watch(\n      () => props.path,\n      async (path) => {\n        await loadPage(path);\n      }\n    );\n    watch(\n      () => locale.value,\n      () => {\n        nextTick(() => {\n          loadPage(props.path);\n        });\n      }\n    );\n    return {\n      page,\n      errorPage,\n    };\n  },\n});\n</script>\n\n<template>\n  <div v-if=\"errorPage\" class=\"page has-error\">\n    <div class=\"title\">\n      <h1 v-text=\"errorPage.title\" />\n    </div>\n    <div class=\"lead\" v-if=\"errorPage.message\" v-html=\"errorPage.message\" />\n  </div>\n  <div v-if=\"page\" class=\"page\">\n    <div class=\"title\" v-if=\"page.title\">\n      <h1 v-text=\"page.title\" />\n    </div>\n    <div class=\"lead\" v-if=\"page.lead\" v-html=\"page.lead\" />\n    <div class=\"body\">\n      <Section\n        v-for=\"section in page.sections\"\n        :key=\"`${section.ct}:${section.uid}`\"\n        :section=\"section\"\n      />\n    </div>\n    <div class=\"appendix\">\n      <SocialMediaLinks />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n@use \"@/style/elements/cms\";\n\n.page {\n  @include container.small;\n\n  .title {\n    padding: 1.5rem 0;\n\n    > h1 {\n      @include typo.x-large;\n      @include typo.bold;\n    }\n\n    @include responsive.bp-medium {\n      padding: 0.625rem 0 1rem;\n    }\n  }\n\n  .lead {\n    @include typo.large;\n\n    padding-bottom: 2rem;\n    line-height: 120%;\n  }\n\n  .body {\n    padding-top: 2rem;\n    border-top: 1px solid rgb(var(--c-dark) / 20%);\n  }\n\n  .appendix {\n    padding: 2rem 0 6rem;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nexport default defineComponent({\n  setup() {\n    const { t } = useI18n();\n    return {\n      t,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"collection\">\n    <div class=\"title\" v-text=\"t('menu.collection')\" />\n    <div class=\"list-menu\">\n      <div class=\"menu menu--primary\">\n        <router-link :to=\"{ name: 'collectionMedia' }\" v-text=\"t('catalog.ct.media', 2)\" />\n        <router-link :to=\"{ name: 'collectionPlaylists' }\" v-text=\"t('catalog.ct.playlist', 2)\" />\n        <router-link :to=\"{ name: 'collectionArtists' }\" v-text=\"t('catalog.ct.artist', 2)\" />\n      </div>\n      <div class=\"menu menu--secondary\">\n        <router-view name=\"searchbar\" />\n      </div>\n    </div>\n    <div class=\"list-body\">\n      <router-view v-slot=\"{ Component }\">\n        <keep-alive>\n          <component :is=\"Component\" />\n        </keep-alive>\n      </router-view>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/container\";\n@use \"@/style/elements/title\";\n@use \"@/style/elements/list-menu\";\n\n.collection {\n  margin-bottom: 12rem;\n}\n\n.title {\n  @include title.default;\n}\n\n.list-menu {\n  @include container.default;\n  @include list-menu.default;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n  setup() {\n    return {};\n  },\n});\n</script>\n\n<template>\n  <div class=\"discover\">\n    <router-view name=\"header\" />\n    <div class=\"body\">\n      <router-view v-slot=\"{ Component }\">\n        <keep-alive :max=\"6\">\n          <component :is=\"Component\" />\n        </keep-alive>\n      </router-view>\n    </div>\n  </div>\n</template>\n\n<!---->\n<style lang=\"scss\" scoped>\n.body {\n  padding-bottom: 6rem;\n}\n</style>\n","import { APIClient } from \"@/api/client\";\nimport { useAPIBaseUrl } from \"@/composables/api\";\nimport type { Category } from \"@/typings/api\";\n\nconst { APIBaseUrl } = useAPIBaseUrl();\n\nconst FAQ_ENDPOINT = `${APIBaseUrl.value}faq/categories/`;\n\ninterface CategoryListResponse {\n  results: Array<Category>;\n}\n\nasync function getFaqCategories(limit = 100, offset = 0) {\n  const url = FAQ_ENDPOINT;\n  const params = {\n    limit,\n    offset,\n  };\n  const response = await APIClient.get<CategoryListResponse>(url, { params });\n  return response.data.results;\n}\n\nexport { Category as FaqCategory, getFaqCategories };\n","import { computed, nextTick } from 'vue-demi';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toValue } from '@vueuse/shared';\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$2.call(b, prop))\n      __defNormalProp$2(a, prop, b[prop]);\n  if (__getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(b)) {\n      if (__propIsEnum$2.call(b, prop))\n        __defNormalProp$2(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nfunction useRouteHash(defaultValue, {\n  mode = \"replace\",\n  route = useRoute(),\n  router = useRouter()\n} = {}) {\n  return computed({\n    get() {\n      var _a;\n      return (_a = route.hash) != null ? _a : defaultValue;\n    },\n    set(v) {\n      nextTick(() => {\n        router[toValue(mode)](__spreadProps$2(__spreadValues$2({}, route), { hash: v }));\n      });\n    }\n  });\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nfunction useRouteParams(name, defaultValue, options = {}) {\n  const {\n    mode = \"replace\",\n    route = useRoute(),\n    router = useRouter(),\n    transform = (value) => value\n  } = options;\n  return computed({\n    get() {\n      var _a;\n      const data = (_a = route.params[name]) != null ? _a : defaultValue;\n      return transform(data);\n    },\n    set(v) {\n      nextTick(() => {\n        router[toValue(mode)](__spreadProps$1(__spreadValues$1({}, route), { params: __spreadProps$1(__spreadValues$1({}, route.params), { [name]: v }) }));\n      });\n    }\n  });\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nlet _queue = {};\nfunction useRouteQuery(name, defaultValue, options = {}) {\n  const {\n    mode = \"replace\",\n    route = useRoute(),\n    router = useRouter(),\n    transform = (value) => value\n  } = options;\n  return computed({\n    get() {\n      var _a;\n      const data = (_a = route.query[name]) != null ? _a : defaultValue;\n      return transform(data);\n    },\n    set(v) {\n      _queue[name] = v === defaultValue || v === null ? void 0 : v;\n      nextTick(() => {\n        router[toValue(mode)](__spreadProps(__spreadValues({}, route), { query: __spreadValues(__spreadValues({}, route.query), _queue) }));\n        nextTick(() => _queue = {});\n      });\n    }\n  });\n}\n\nexport { useRouteHash, useRouteParams, useRouteQuery };\n",";/*! showdown v 2.1.0 - 21-04-2022 */\r\n(function(){\r\n/**\n * Created by Tivie on 13-07-2015.\n */\n\nfunction getDefaultOpts (simple) {\n  'use strict';\n\n  var defaultOptions = {\n    omitExtraWLInCodeBlocks: {\n      defaultValue: false,\n      describe: 'Omit the default extra whiteline added to code blocks',\n      type: 'boolean'\n    },\n    noHeaderId: {\n      defaultValue: false,\n      describe: 'Turn on/off generated header id',\n      type: 'boolean'\n    },\n    prefixHeaderId: {\n      defaultValue: false,\n      describe: 'Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic \\'section-\\' prefix',\n      type: 'string'\n    },\n    rawPrefixHeaderId: {\n      defaultValue: false,\n      describe: 'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the \" char is used in the prefix)',\n      type: 'boolean'\n    },\n    ghCompatibleHeaderId: {\n      defaultValue: false,\n      describe: 'Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)',\n      type: 'boolean'\n    },\n    rawHeaderId: {\n      defaultValue: false,\n      describe: 'Remove only spaces, \\' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids',\n      type: 'boolean'\n    },\n    headerLevelStart: {\n      defaultValue: false,\n      describe: 'The header blocks level start',\n      type: 'integer'\n    },\n    parseImgDimensions: {\n      defaultValue: false,\n      describe: 'Turn on/off image dimension parsing',\n      type: 'boolean'\n    },\n    simplifiedAutoLink: {\n      defaultValue: false,\n      describe: 'Turn on/off GFM autolink style',\n      type: 'boolean'\n    },\n    excludeTrailingPunctuationFromURLs: {\n      defaultValue: false,\n      describe: 'Excludes trailing punctuation from links generated with autoLinking',\n      type: 'boolean'\n    },\n    literalMidWordUnderscores: {\n      defaultValue: false,\n      describe: 'Parse midword underscores as literal underscores',\n      type: 'boolean'\n    },\n    literalMidWordAsterisks: {\n      defaultValue: false,\n      describe: 'Parse midword asterisks as literal asterisks',\n      type: 'boolean'\n    },\n    strikethrough: {\n      defaultValue: false,\n      describe: 'Turn on/off strikethrough support',\n      type: 'boolean'\n    },\n    tables: {\n      defaultValue: false,\n      describe: 'Turn on/off tables support',\n      type: 'boolean'\n    },\n    tablesHeaderId: {\n      defaultValue: false,\n      describe: 'Add an id to table headers',\n      type: 'boolean'\n    },\n    ghCodeBlocks: {\n      defaultValue: true,\n      describe: 'Turn on/off GFM fenced code blocks support',\n      type: 'boolean'\n    },\n    tasklists: {\n      defaultValue: false,\n      describe: 'Turn on/off GFM tasklist support',\n      type: 'boolean'\n    },\n    smoothLivePreview: {\n      defaultValue: false,\n      describe: 'Prevents weird effects in live previews due to incomplete input',\n      type: 'boolean'\n    },\n    smartIndentationFix: {\n      defaultValue: false,\n      describe: 'Tries to smartly fix indentation in es6 strings',\n      type: 'boolean'\n    },\n    disableForced4SpacesIndentedSublists: {\n      defaultValue: false,\n      describe: 'Disables the requirement of indenting nested sublists by 4 spaces',\n      type: 'boolean'\n    },\n    simpleLineBreaks: {\n      defaultValue: false,\n      describe: 'Parses simple line breaks as <br> (GFM Style)',\n      type: 'boolean'\n    },\n    requireSpaceBeforeHeadingText: {\n      defaultValue: false,\n      describe: 'Makes adding a space between `#` and the header text mandatory (GFM Style)',\n      type: 'boolean'\n    },\n    ghMentions: {\n      defaultValue: false,\n      describe: 'Enables github @mentions',\n      type: 'boolean'\n    },\n    ghMentionsLink: {\n      defaultValue: 'https://github.com/{u}',\n      describe: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.',\n      type: 'string'\n    },\n    encodeEmails: {\n      defaultValue: true,\n      describe: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities',\n      type: 'boolean'\n    },\n    openLinksInNewWindow: {\n      defaultValue: false,\n      describe: 'Open all links in new windows',\n      type: 'boolean'\n    },\n    backslashEscapesHTMLTags: {\n      defaultValue: false,\n      describe: 'Support for HTML Tag escaping. ex: \\<div>foo\\</div>',\n      type: 'boolean'\n    },\n    emoji: {\n      defaultValue: false,\n      describe: 'Enable emoji support. Ex: `this is a :smile: emoji`',\n      type: 'boolean'\n    },\n    underline: {\n      defaultValue: false,\n      describe: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`',\n      type: 'boolean'\n    },\n    ellipsis: {\n      defaultValue: true,\n      describe: 'Replaces three dots with the ellipsis unicode character',\n      type: 'boolean'\n    },\n    completeHTMLDocument: {\n      defaultValue: false,\n      describe: 'Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags',\n      type: 'boolean'\n    },\n    metadata: {\n      defaultValue: false,\n      describe: 'Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).',\n      type: 'boolean'\n    },\n    splitAdjacentBlockquotes: {\n      defaultValue: false,\n      describe: 'Split adjacent blockquote blocks',\n      type: 'boolean'\n    }\n  };\n  if (simple === false) {\n    return JSON.parse(JSON.stringify(defaultOptions));\n  }\n  var ret = {};\n  for (var opt in defaultOptions) {\n    if (defaultOptions.hasOwnProperty(opt)) {\n      ret[opt] = defaultOptions[opt].defaultValue;\n    }\n  }\n  return ret;\n}\n\nfunction allOptionsOn () {\n  'use strict';\n  var options = getDefaultOpts(true),\n      ret = {};\n  for (var opt in options) {\n    if (options.hasOwnProperty(opt)) {\n      ret[opt] = true;\n    }\n  }\n  return ret;\n}\n\r\n/**\n * Created by Tivie on 06-01-2015.\n */\n\n// Private properties\nvar showdown = {},\n    parsers = {},\n    extensions = {},\n    globalOptions = getDefaultOpts(true),\n    setFlavor = 'vanilla',\n    flavor = {\n      github: {\n        omitExtraWLInCodeBlocks:              true,\n        simplifiedAutoLink:                   true,\n        excludeTrailingPunctuationFromURLs:   true,\n        literalMidWordUnderscores:            true,\n        strikethrough:                        true,\n        tables:                               true,\n        tablesHeaderId:                       true,\n        ghCodeBlocks:                         true,\n        tasklists:                            true,\n        disableForced4SpacesIndentedSublists: true,\n        simpleLineBreaks:                     true,\n        requireSpaceBeforeHeadingText:        true,\n        ghCompatibleHeaderId:                 true,\n        ghMentions:                           true,\n        backslashEscapesHTMLTags:             true,\n        emoji:                                true,\n        splitAdjacentBlockquotes:             true\n      },\n      original: {\n        noHeaderId:                           true,\n        ghCodeBlocks:                         false\n      },\n      ghost: {\n        omitExtraWLInCodeBlocks:              true,\n        parseImgDimensions:                   true,\n        simplifiedAutoLink:                   true,\n        excludeTrailingPunctuationFromURLs:   true,\n        literalMidWordUnderscores:            true,\n        strikethrough:                        true,\n        tables:                               true,\n        tablesHeaderId:                       true,\n        ghCodeBlocks:                         true,\n        tasklists:                            true,\n        smoothLivePreview:                    true,\n        simpleLineBreaks:                     true,\n        requireSpaceBeforeHeadingText:        true,\n        ghMentions:                           false,\n        encodeEmails:                         true\n      },\n      vanilla: getDefaultOpts(true),\n      allOn: allOptionsOn()\n    };\n\n/**\n * helper namespace\n * @type {{}}\n */\nshowdown.helper = {};\n\n/**\n * TODO LEGACY SUPPORT CODE\n * @type {{}}\n */\nshowdown.extensions = {};\n\n/**\n * Set a global option\n * @static\n * @param {string} key\n * @param {*} value\n * @returns {showdown}\n */\nshowdown.setOption = function (key, value) {\n  'use strict';\n  globalOptions[key] = value;\n  return this;\n};\n\n/**\n * Get a global option\n * @static\n * @param {string} key\n * @returns {*}\n */\nshowdown.getOption = function (key) {\n  'use strict';\n  return globalOptions[key];\n};\n\n/**\n * Get the global options\n * @static\n * @returns {{}}\n */\nshowdown.getOptions = function () {\n  'use strict';\n  return globalOptions;\n};\n\n/**\n * Reset global options to the default values\n * @static\n */\nshowdown.resetOptions = function () {\n  'use strict';\n  globalOptions = getDefaultOpts(true);\n};\n\n/**\n * Set the flavor showdown should use as default\n * @param {string} name\n */\nshowdown.setFlavor = function (name) {\n  'use strict';\n  if (!flavor.hasOwnProperty(name)) {\n    throw Error(name + ' flavor was not found');\n  }\n  showdown.resetOptions();\n  var preset = flavor[name];\n  setFlavor = name;\n  for (var option in preset) {\n    if (preset.hasOwnProperty(option)) {\n      globalOptions[option] = preset[option];\n    }\n  }\n};\n\n/**\n * Get the currently set flavor\n * @returns {string}\n */\nshowdown.getFlavor = function () {\n  'use strict';\n  return setFlavor;\n};\n\n/**\n * Get the options of a specified flavor. Returns undefined if the flavor was not found\n * @param {string} name Name of the flavor\n * @returns {{}|undefined}\n */\nshowdown.getFlavorOptions = function (name) {\n  'use strict';\n  if (flavor.hasOwnProperty(name)) {\n    return flavor[name];\n  }\n};\n\n/**\n * Get the default options\n * @static\n * @param {boolean} [simple=true]\n * @returns {{}}\n */\nshowdown.getDefaultOptions = function (simple) {\n  'use strict';\n  return getDefaultOpts(simple);\n};\n\n/**\n * Get or set a subParser\n *\n * subParser(name)       - Get a registered subParser\n * subParser(name, func) - Register a subParser\n * @static\n * @param {string} name\n * @param {function} [func]\n * @returns {*}\n */\nshowdown.subParser = function (name, func) {\n  'use strict';\n  if (showdown.helper.isString(name)) {\n    if (typeof func !== 'undefined') {\n      parsers[name] = func;\n    } else {\n      if (parsers.hasOwnProperty(name)) {\n        return parsers[name];\n      } else {\n        throw Error('SubParser named ' + name + ' not registered!');\n      }\n    }\n  }\n};\n\n/**\n * Gets or registers an extension\n * @static\n * @param {string} name\n * @param {object|object[]|function=} ext\n * @returns {*}\n */\nshowdown.extension = function (name, ext) {\n  'use strict';\n\n  if (!showdown.helper.isString(name)) {\n    throw Error('Extension \\'name\\' must be a string');\n  }\n\n  name = showdown.helper.stdExtName(name);\n\n  // Getter\n  if (showdown.helper.isUndefined(ext)) {\n    if (!extensions.hasOwnProperty(name)) {\n      throw Error('Extension named ' + name + ' is not registered!');\n    }\n    return extensions[name];\n\n    // Setter\n  } else {\n    // Expand extension if it's wrapped in a function\n    if (typeof ext === 'function') {\n      ext = ext();\n    }\n\n    // Ensure extension is an array\n    if (!showdown.helper.isArray(ext)) {\n      ext = [ext];\n    }\n\n    var validExtension = validate(ext, name);\n\n    if (validExtension.valid) {\n      extensions[name] = ext;\n    } else {\n      throw Error(validExtension.error);\n    }\n  }\n};\n\n/**\n * Gets all extensions registered\n * @returns {{}}\n */\nshowdown.getAllExtensions = function () {\n  'use strict';\n  return extensions;\n};\n\n/**\n * Remove an extension\n * @param {string} name\n */\nshowdown.removeExtension = function (name) {\n  'use strict';\n  delete extensions[name];\n};\n\n/**\n * Removes all extensions\n */\nshowdown.resetExtensions = function () {\n  'use strict';\n  extensions = {};\n};\n\n/**\n * Validate extension\n * @param {array} extension\n * @param {string} name\n * @returns {{valid: boolean, error: string}}\n */\nfunction validate (extension, name) {\n  'use strict';\n\n  var errMsg = (name) ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension',\n      ret = {\n        valid: true,\n        error: ''\n      };\n\n  if (!showdown.helper.isArray(extension)) {\n    extension = [extension];\n  }\n\n  for (var i = 0; i < extension.length; ++i) {\n    var baseMsg = errMsg + ' sub-extension ' + i + ': ',\n        ext = extension[i];\n    if (typeof ext !== 'object') {\n      ret.valid = false;\n      ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given';\n      return ret;\n    }\n\n    if (!showdown.helper.isString(ext.type)) {\n      ret.valid = false;\n      ret.error = baseMsg + 'property \"type\" must be a string, but ' + typeof ext.type + ' given';\n      return ret;\n    }\n\n    var type = ext.type = ext.type.toLowerCase();\n\n    // normalize extension type\n    if (type === 'language') {\n      type = ext.type = 'lang';\n    }\n\n    if (type === 'html') {\n      type = ext.type = 'output';\n    }\n\n    if (type !== 'lang' && type !== 'output' && type !== 'listener') {\n      ret.valid = false;\n      ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: \"lang/language\", \"output/html\" or \"listener\"';\n      return ret;\n    }\n\n    if (type === 'listener') {\n      if (showdown.helper.isUndefined(ext.listeners)) {\n        ret.valid = false;\n        ret.error = baseMsg + '. Extensions of type \"listener\" must have a property called \"listeners\"';\n        return ret;\n      }\n    } else {\n      if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) {\n        ret.valid = false;\n        ret.error = baseMsg + type + ' extensions must define either a \"regex\" property or a \"filter\" method';\n        return ret;\n      }\n    }\n\n    if (ext.listeners) {\n      if (typeof ext.listeners !== 'object') {\n        ret.valid = false;\n        ret.error = baseMsg + '\"listeners\" property must be an object but ' + typeof ext.listeners + ' given';\n        return ret;\n      }\n      for (var ln in ext.listeners) {\n        if (ext.listeners.hasOwnProperty(ln)) {\n          if (typeof ext.listeners[ln] !== 'function') {\n            ret.valid = false;\n            ret.error = baseMsg + '\"listeners\" property must be an hash of [event name]: [callback]. listeners.' + ln +\n              ' must be a function but ' + typeof ext.listeners[ln] + ' given';\n            return ret;\n          }\n        }\n      }\n    }\n\n    if (ext.filter) {\n      if (typeof ext.filter !== 'function') {\n        ret.valid = false;\n        ret.error = baseMsg + '\"filter\" must be a function, but ' + typeof ext.filter + ' given';\n        return ret;\n      }\n    } else if (ext.regex) {\n      if (showdown.helper.isString(ext.regex)) {\n        ext.regex = new RegExp(ext.regex, 'g');\n      }\n      if (!(ext.regex instanceof RegExp)) {\n        ret.valid = false;\n        ret.error = baseMsg + '\"regex\" property must either be a string or a RegExp object, but ' + typeof ext.regex + ' given';\n        return ret;\n      }\n      if (showdown.helper.isUndefined(ext.replace)) {\n        ret.valid = false;\n        ret.error = baseMsg + '\"regex\" extensions must implement a replace string or function';\n        return ret;\n      }\n    }\n  }\n  return ret;\n}\n\n/**\n * Validate extension\n * @param {object} ext\n * @returns {boolean}\n */\nshowdown.validateExtension = function (ext) {\n  'use strict';\n\n  var validateExtension = validate(ext, null);\n  if (!validateExtension.valid) {\n    console.warn(validateExtension.error);\n    return false;\n  }\n  return true;\n};\n\r\n/**\n * showdownjs helper functions\n */\n\nif (!showdown.hasOwnProperty('helper')) {\n  showdown.helper = {};\n}\n\n/**\n * Check if var is string\n * @static\n * @param {string} a\n * @returns {boolean}\n */\nshowdown.helper.isString = function (a) {\n  'use strict';\n  return (typeof a === 'string' || a instanceof String);\n};\n\n/**\n * Check if var is a function\n * @static\n * @param {*} a\n * @returns {boolean}\n */\nshowdown.helper.isFunction = function (a) {\n  'use strict';\n  var getType = {};\n  return a && getType.toString.call(a) === '[object Function]';\n};\n\n/**\n * isArray helper function\n * @static\n * @param {*} a\n * @returns {boolean}\n */\nshowdown.helper.isArray = function (a) {\n  'use strict';\n  return Array.isArray(a);\n};\n\n/**\n * Check if value is undefined\n * @static\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n */\nshowdown.helper.isUndefined = function (value) {\n  'use strict';\n  return typeof value === 'undefined';\n};\n\n/**\n * ForEach helper function\n * Iterates over Arrays and Objects (own properties only)\n * @static\n * @param {*} obj\n * @param {function} callback Accepts 3 params: 1. value, 2. key, 3. the original array/object\n */\nshowdown.helper.forEach = function (obj, callback) {\n  'use strict';\n  // check if obj is defined\n  if (showdown.helper.isUndefined(obj)) {\n    throw new Error('obj param is required');\n  }\n\n  if (showdown.helper.isUndefined(callback)) {\n    throw new Error('callback param is required');\n  }\n\n  if (!showdown.helper.isFunction(callback)) {\n    throw new Error('callback param must be a function/closure');\n  }\n\n  if (typeof obj.forEach === 'function') {\n    obj.forEach(callback);\n  } else if (showdown.helper.isArray(obj)) {\n    for (var i = 0; i < obj.length; i++) {\n      callback(obj[i], i, obj);\n    }\n  } else if (typeof (obj) === 'object') {\n    for (var prop in obj) {\n      if (obj.hasOwnProperty(prop)) {\n        callback(obj[prop], prop, obj);\n      }\n    }\n  } else {\n    throw new Error('obj does not seem to be an array or an iterable object');\n  }\n};\n\n/**\n * Standardidize extension name\n * @static\n * @param {string} s extension name\n * @returns {string}\n */\nshowdown.helper.stdExtName = function (s) {\n  'use strict';\n  return s.replace(/[_?*+\\/\\\\.^-]/g, '').replace(/\\s/g, '').toLowerCase();\n};\n\nfunction escapeCharactersCallback (wholeMatch, m1) {\n  'use strict';\n  var charCodeToEscape = m1.charCodeAt(0);\n  return '¨E' + charCodeToEscape + 'E';\n}\n\n/**\n * Callback used to escape characters when passing through String.replace\n * @static\n * @param {string} wholeMatch\n * @param {string} m1\n * @returns {string}\n */\nshowdown.helper.escapeCharactersCallback = escapeCharactersCallback;\n\n/**\n * Escape characters in a string\n * @static\n * @param {string} text\n * @param {string} charsToEscape\n * @param {boolean} afterBackslash\n * @returns {XML|string|void|*}\n */\nshowdown.helper.escapeCharacters = function (text, charsToEscape, afterBackslash) {\n  'use strict';\n  // First we have to escape the escape characters so that\n  // we can build a character class out of them\n  var regexString = '([' + charsToEscape.replace(/([\\[\\]\\\\])/g, '\\\\$1') + '])';\n\n  if (afterBackslash) {\n    regexString = '\\\\\\\\' + regexString;\n  }\n\n  var regex = new RegExp(regexString, 'g');\n  text = text.replace(regex, escapeCharactersCallback);\n\n  return text;\n};\n\n/**\n * Unescape HTML entities\n * @param txt\n * @returns {string}\n */\nshowdown.helper.unescapeHTMLEntities = function (txt) {\n  'use strict';\n\n  return txt\n    .replace(/&quot;/g, '\"')\n    .replace(/&lt;/g, '<')\n    .replace(/&gt;/g, '>')\n    .replace(/&amp;/g, '&');\n};\n\nvar rgxFindMatchPos = function (str, left, right, flags) {\n  'use strict';\n  var f = flags || '',\n      g = f.indexOf('g') > -1,\n      x = new RegExp(left + '|' + right, 'g' + f.replace(/g/g, '')),\n      l = new RegExp(left, f.replace(/g/g, '')),\n      pos = [],\n      t, s, m, start, end;\n\n  do {\n    t = 0;\n    while ((m = x.exec(str))) {\n      if (l.test(m[0])) {\n        if (!(t++)) {\n          s = x.lastIndex;\n          start = s - m[0].length;\n        }\n      } else if (t) {\n        if (!--t) {\n          end = m.index + m[0].length;\n          var obj = {\n            left: {start: start, end: s},\n            match: {start: s, end: m.index},\n            right: {start: m.index, end: end},\n            wholeMatch: {start: start, end: end}\n          };\n          pos.push(obj);\n          if (!g) {\n            return pos;\n          }\n        }\n      }\n    }\n  } while (t && (x.lastIndex = s));\n\n  return pos;\n};\n\n/**\n * matchRecursiveRegExp\n *\n * (c) 2007 Steven Levithan <stevenlevithan.com>\n * MIT License\n *\n * Accepts a string to search, a left and right format delimiter\n * as regex patterns, and optional regex flags. Returns an array\n * of matches, allowing nested instances of left/right delimiters.\n * Use the \"g\" flag to return all matches, otherwise only the\n * first is returned. Be careful to ensure that the left and\n * right format delimiters produce mutually exclusive matches.\n * Backreferences are not supported within the right delimiter\n * due to how it is internally combined with the left delimiter.\n * When matching strings whose format delimiters are unbalanced\n * to the left or right, the output is intentionally as a\n * conventional regex library with recursion support would\n * produce, e.g. \"<<x>\" and \"<x>>\" both produce [\"x\"] when using\n * \"<\" and \">\" as the delimiters (both strings contain a single,\n * balanced instance of \"<x>\").\n *\n * examples:\n * matchRecursiveRegExp(\"test\", \"\\\\(\", \"\\\\)\")\n * returns: []\n * matchRecursiveRegExp(\"<t<<e>><s>>t<>\", \"<\", \">\", \"g\")\n * returns: [\"t<<e>><s>\", \"\"]\n * matchRecursiveRegExp(\"<div id=\\\"x\\\">test</div>\", \"<div\\\\b[^>]*>\", \"</div>\", \"gi\")\n * returns: [\"test\"]\n */\nshowdown.helper.matchRecursiveRegExp = function (str, left, right, flags) {\n  'use strict';\n\n  var matchPos = rgxFindMatchPos (str, left, right, flags),\n      results = [];\n\n  for (var i = 0; i < matchPos.length; ++i) {\n    results.push([\n      str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),\n      str.slice(matchPos[i].match.start, matchPos[i].match.end),\n      str.slice(matchPos[i].left.start, matchPos[i].left.end),\n      str.slice(matchPos[i].right.start, matchPos[i].right.end)\n    ]);\n  }\n  return results;\n};\n\n/**\n *\n * @param {string} str\n * @param {string|function} replacement\n * @param {string} left\n * @param {string} right\n * @param {string} flags\n * @returns {string}\n */\nshowdown.helper.replaceRecursiveRegExp = function (str, replacement, left, right, flags) {\n  'use strict';\n\n  if (!showdown.helper.isFunction(replacement)) {\n    var repStr = replacement;\n    replacement = function () {\n      return repStr;\n    };\n  }\n\n  var matchPos = rgxFindMatchPos(str, left, right, flags),\n      finalStr = str,\n      lng = matchPos.length;\n\n  if (lng > 0) {\n    var bits = [];\n    if (matchPos[0].wholeMatch.start !== 0) {\n      bits.push(str.slice(0, matchPos[0].wholeMatch.start));\n    }\n    for (var i = 0; i < lng; ++i) {\n      bits.push(\n        replacement(\n          str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),\n          str.slice(matchPos[i].match.start, matchPos[i].match.end),\n          str.slice(matchPos[i].left.start, matchPos[i].left.end),\n          str.slice(matchPos[i].right.start, matchPos[i].right.end)\n        )\n      );\n      if (i < lng - 1) {\n        bits.push(str.slice(matchPos[i].wholeMatch.end, matchPos[i + 1].wholeMatch.start));\n      }\n    }\n    if (matchPos[lng - 1].wholeMatch.end < str.length) {\n      bits.push(str.slice(matchPos[lng - 1].wholeMatch.end));\n    }\n    finalStr = bits.join('');\n  }\n  return finalStr;\n};\n\n/**\n * Returns the index within the passed String object of the first occurrence of the specified regex,\n * starting the search at fromIndex. Returns -1 if the value is not found.\n *\n * @param {string} str string to search\n * @param {RegExp} regex Regular expression to search\n * @param {int} [fromIndex = 0] Index to start the search\n * @returns {Number}\n * @throws InvalidArgumentError\n */\nshowdown.helper.regexIndexOf = function (str, regex, fromIndex) {\n  'use strict';\n  if (!showdown.helper.isString(str)) {\n    throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';\n  }\n  if (regex instanceof RegExp === false) {\n    throw 'InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp';\n  }\n  var indexOf = str.substring(fromIndex || 0).search(regex);\n  return (indexOf >= 0) ? (indexOf + (fromIndex || 0)) : indexOf;\n};\n\n/**\n * Splits the passed string object at the defined index, and returns an array composed of the two substrings\n * @param {string} str string to split\n * @param {int} index index to split string at\n * @returns {[string,string]}\n * @throws InvalidArgumentError\n */\nshowdown.helper.splitAtIndex = function (str, index) {\n  'use strict';\n  if (!showdown.helper.isString(str)) {\n    throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';\n  }\n  return [str.substring(0, index), str.substring(index)];\n};\n\n/**\n * Obfuscate an e-mail address through the use of Character Entities,\n * transforming ASCII characters into their equivalent decimal or hex entities.\n *\n * Since it has a random component, subsequent calls to this function produce different results\n *\n * @param {string} mail\n * @returns {string}\n */\nshowdown.helper.encodeEmailAddress = function (mail) {\n  'use strict';\n  var encode = [\n    function (ch) {\n      return '&#' + ch.charCodeAt(0) + ';';\n    },\n    function (ch) {\n      return '&#x' + ch.charCodeAt(0).toString(16) + ';';\n    },\n    function (ch) {\n      return ch;\n    }\n  ];\n\n  mail = mail.replace(/./g, function (ch) {\n    if (ch === '@') {\n      // this *must* be encoded. I insist.\n      ch = encode[Math.floor(Math.random() * 2)](ch);\n    } else {\n      var r = Math.random();\n      // roughly 10% raw, 45% hex, 45% dec\n      ch = (\n        r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch)\n      );\n    }\n    return ch;\n  });\n\n  return mail;\n};\n\n/**\n *\n * @param str\n * @param targetLength\n * @param padString\n * @returns {string}\n */\nshowdown.helper.padEnd = function padEnd (str, targetLength, padString) {\n  'use strict';\n  /*jshint bitwise: false*/\n  // eslint-disable-next-line space-infix-ops\n  targetLength = targetLength>>0; //floor if number or convert non-number to 0;\n  /*jshint bitwise: true*/\n  padString = String(padString || ' ');\n  if (str.length > targetLength) {\n    return String(str);\n  } else {\n    targetLength = targetLength - str.length;\n    if (targetLength > padString.length) {\n      padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed\n    }\n    return String(str) + padString.slice(0,targetLength);\n  }\n};\n\n/**\n * POLYFILLS\n */\n// use this instead of builtin is undefined for IE8 compatibility\nif (typeof (console) === 'undefined') {\n  console = {\n    warn: function (msg) {\n      'use strict';\n      alert(msg);\n    },\n    log: function (msg) {\n      'use strict';\n      alert(msg);\n    },\n    error: function (msg) {\n      'use strict';\n      throw msg;\n    }\n  };\n}\n\n/**\n * Common regexes.\n * We declare some common regexes to improve performance\n */\nshowdown.helper.regexes = {\n  asteriskDashAndColon: /([*_:~])/g\n};\n\n/**\n * EMOJIS LIST\n */\nshowdown.helper.emojis = {\n  '+1':'\\ud83d\\udc4d',\n  '-1':'\\ud83d\\udc4e',\n  '100':'\\ud83d\\udcaf',\n  '1234':'\\ud83d\\udd22',\n  '1st_place_medal':'\\ud83e\\udd47',\n  '2nd_place_medal':'\\ud83e\\udd48',\n  '3rd_place_medal':'\\ud83e\\udd49',\n  '8ball':'\\ud83c\\udfb1',\n  'a':'\\ud83c\\udd70\\ufe0f',\n  'ab':'\\ud83c\\udd8e',\n  'abc':'\\ud83d\\udd24',\n  'abcd':'\\ud83d\\udd21',\n  'accept':'\\ud83c\\ude51',\n  'aerial_tramway':'\\ud83d\\udea1',\n  'airplane':'\\u2708\\ufe0f',\n  'alarm_clock':'\\u23f0',\n  'alembic':'\\u2697\\ufe0f',\n  'alien':'\\ud83d\\udc7d',\n  'ambulance':'\\ud83d\\ude91',\n  'amphora':'\\ud83c\\udffa',\n  'anchor':'\\u2693\\ufe0f',\n  'angel':'\\ud83d\\udc7c',\n  'anger':'\\ud83d\\udca2',\n  'angry':'\\ud83d\\ude20',\n  'anguished':'\\ud83d\\ude27',\n  'ant':'\\ud83d\\udc1c',\n  'apple':'\\ud83c\\udf4e',\n  'aquarius':'\\u2652\\ufe0f',\n  'aries':'\\u2648\\ufe0f',\n  'arrow_backward':'\\u25c0\\ufe0f',\n  'arrow_double_down':'\\u23ec',\n  'arrow_double_up':'\\u23eb',\n  'arrow_down':'\\u2b07\\ufe0f',\n  'arrow_down_small':'\\ud83d\\udd3d',\n  'arrow_forward':'\\u25b6\\ufe0f',\n  'arrow_heading_down':'\\u2935\\ufe0f',\n  'arrow_heading_up':'\\u2934\\ufe0f',\n  'arrow_left':'\\u2b05\\ufe0f',\n  'arrow_lower_left':'\\u2199\\ufe0f',\n  'arrow_lower_right':'\\u2198\\ufe0f',\n  'arrow_right':'\\u27a1\\ufe0f',\n  'arrow_right_hook':'\\u21aa\\ufe0f',\n  'arrow_up':'\\u2b06\\ufe0f',\n  'arrow_up_down':'\\u2195\\ufe0f',\n  'arrow_up_small':'\\ud83d\\udd3c',\n  'arrow_upper_left':'\\u2196\\ufe0f',\n  'arrow_upper_right':'\\u2197\\ufe0f',\n  'arrows_clockwise':'\\ud83d\\udd03',\n  'arrows_counterclockwise':'\\ud83d\\udd04',\n  'art':'\\ud83c\\udfa8',\n  'articulated_lorry':'\\ud83d\\ude9b',\n  'artificial_satellite':'\\ud83d\\udef0',\n  'astonished':'\\ud83d\\ude32',\n  'athletic_shoe':'\\ud83d\\udc5f',\n  'atm':'\\ud83c\\udfe7',\n  'atom_symbol':'\\u269b\\ufe0f',\n  'avocado':'\\ud83e\\udd51',\n  'b':'\\ud83c\\udd71\\ufe0f',\n  'baby':'\\ud83d\\udc76',\n  'baby_bottle':'\\ud83c\\udf7c',\n  'baby_chick':'\\ud83d\\udc24',\n  'baby_symbol':'\\ud83d\\udebc',\n  'back':'\\ud83d\\udd19',\n  'bacon':'\\ud83e\\udd53',\n  'badminton':'\\ud83c\\udff8',\n  'baggage_claim':'\\ud83d\\udec4',\n  'baguette_bread':'\\ud83e\\udd56',\n  'balance_scale':'\\u2696\\ufe0f',\n  'balloon':'\\ud83c\\udf88',\n  'ballot_box':'\\ud83d\\uddf3',\n  'ballot_box_with_check':'\\u2611\\ufe0f',\n  'bamboo':'\\ud83c\\udf8d',\n  'banana':'\\ud83c\\udf4c',\n  'bangbang':'\\u203c\\ufe0f',\n  'bank':'\\ud83c\\udfe6',\n  'bar_chart':'\\ud83d\\udcca',\n  'barber':'\\ud83d\\udc88',\n  'baseball':'\\u26be\\ufe0f',\n  'basketball':'\\ud83c\\udfc0',\n  'basketball_man':'\\u26f9\\ufe0f',\n  'basketball_woman':'\\u26f9\\ufe0f&zwj;\\u2640\\ufe0f',\n  'bat':'\\ud83e\\udd87',\n  'bath':'\\ud83d\\udec0',\n  'bathtub':'\\ud83d\\udec1',\n  'battery':'\\ud83d\\udd0b',\n  'beach_umbrella':'\\ud83c\\udfd6',\n  'bear':'\\ud83d\\udc3b',\n  'bed':'\\ud83d\\udecf',\n  'bee':'\\ud83d\\udc1d',\n  'beer':'\\ud83c\\udf7a',\n  'beers':'\\ud83c\\udf7b',\n  'beetle':'\\ud83d\\udc1e',\n  'beginner':'\\ud83d\\udd30',\n  'bell':'\\ud83d\\udd14',\n  'bellhop_bell':'\\ud83d\\udece',\n  'bento':'\\ud83c\\udf71',\n  'biking_man':'\\ud83d\\udeb4',\n  'bike':'\\ud83d\\udeb2',\n  'biking_woman':'\\ud83d\\udeb4&zwj;\\u2640\\ufe0f',\n  'bikini':'\\ud83d\\udc59',\n  'biohazard':'\\u2623\\ufe0f',\n  'bird':'\\ud83d\\udc26',\n  'birthday':'\\ud83c\\udf82',\n  'black_circle':'\\u26ab\\ufe0f',\n  'black_flag':'\\ud83c\\udff4',\n  'black_heart':'\\ud83d\\udda4',\n  'black_joker':'\\ud83c\\udccf',\n  'black_large_square':'\\u2b1b\\ufe0f',\n  'black_medium_small_square':'\\u25fe\\ufe0f',\n  'black_medium_square':'\\u25fc\\ufe0f',\n  'black_nib':'\\u2712\\ufe0f',\n  'black_small_square':'\\u25aa\\ufe0f',\n  'black_square_button':'\\ud83d\\udd32',\n  'blonde_man':'\\ud83d\\udc71',\n  'blonde_woman':'\\ud83d\\udc71&zwj;\\u2640\\ufe0f',\n  'blossom':'\\ud83c\\udf3c',\n  'blowfish':'\\ud83d\\udc21',\n  'blue_book':'\\ud83d\\udcd8',\n  'blue_car':'\\ud83d\\ude99',\n  'blue_heart':'\\ud83d\\udc99',\n  'blush':'\\ud83d\\ude0a',\n  'boar':'\\ud83d\\udc17',\n  'boat':'\\u26f5\\ufe0f',\n  'bomb':'\\ud83d\\udca3',\n  'book':'\\ud83d\\udcd6',\n  'bookmark':'\\ud83d\\udd16',\n  'bookmark_tabs':'\\ud83d\\udcd1',\n  'books':'\\ud83d\\udcda',\n  'boom':'\\ud83d\\udca5',\n  'boot':'\\ud83d\\udc62',\n  'bouquet':'\\ud83d\\udc90',\n  'bowing_man':'\\ud83d\\ude47',\n  'bow_and_arrow':'\\ud83c\\udff9',\n  'bowing_woman':'\\ud83d\\ude47&zwj;\\u2640\\ufe0f',\n  'bowling':'\\ud83c\\udfb3',\n  'boxing_glove':'\\ud83e\\udd4a',\n  'boy':'\\ud83d\\udc66',\n  'bread':'\\ud83c\\udf5e',\n  'bride_with_veil':'\\ud83d\\udc70',\n  'bridge_at_night':'\\ud83c\\udf09',\n  'briefcase':'\\ud83d\\udcbc',\n  'broken_heart':'\\ud83d\\udc94',\n  'bug':'\\ud83d\\udc1b',\n  'building_construction':'\\ud83c\\udfd7',\n  'bulb':'\\ud83d\\udca1',\n  'bullettrain_front':'\\ud83d\\ude85',\n  'bullettrain_side':'\\ud83d\\ude84',\n  'burrito':'\\ud83c\\udf2f',\n  'bus':'\\ud83d\\ude8c',\n  'business_suit_levitating':'\\ud83d\\udd74',\n  'busstop':'\\ud83d\\ude8f',\n  'bust_in_silhouette':'\\ud83d\\udc64',\n  'busts_in_silhouette':'\\ud83d\\udc65',\n  'butterfly':'\\ud83e\\udd8b',\n  'cactus':'\\ud83c\\udf35',\n  'cake':'\\ud83c\\udf70',\n  'calendar':'\\ud83d\\udcc6',\n  'call_me_hand':'\\ud83e\\udd19',\n  'calling':'\\ud83d\\udcf2',\n  'camel':'\\ud83d\\udc2b',\n  'camera':'\\ud83d\\udcf7',\n  'camera_flash':'\\ud83d\\udcf8',\n  'camping':'\\ud83c\\udfd5',\n  'cancer':'\\u264b\\ufe0f',\n  'candle':'\\ud83d\\udd6f',\n  'candy':'\\ud83c\\udf6c',\n  'canoe':'\\ud83d\\udef6',\n  'capital_abcd':'\\ud83d\\udd20',\n  'capricorn':'\\u2651\\ufe0f',\n  'car':'\\ud83d\\ude97',\n  'card_file_box':'\\ud83d\\uddc3',\n  'card_index':'\\ud83d\\udcc7',\n  'card_index_dividers':'\\ud83d\\uddc2',\n  'carousel_horse':'\\ud83c\\udfa0',\n  'carrot':'\\ud83e\\udd55',\n  'cat':'\\ud83d\\udc31',\n  'cat2':'\\ud83d\\udc08',\n  'cd':'\\ud83d\\udcbf',\n  'chains':'\\u26d3',\n  'champagne':'\\ud83c\\udf7e',\n  'chart':'\\ud83d\\udcb9',\n  'chart_with_downwards_trend':'\\ud83d\\udcc9',\n  'chart_with_upwards_trend':'\\ud83d\\udcc8',\n  'checkered_flag':'\\ud83c\\udfc1',\n  'cheese':'\\ud83e\\uddc0',\n  'cherries':'\\ud83c\\udf52',\n  'cherry_blossom':'\\ud83c\\udf38',\n  'chestnut':'\\ud83c\\udf30',\n  'chicken':'\\ud83d\\udc14',\n  'children_crossing':'\\ud83d\\udeb8',\n  'chipmunk':'\\ud83d\\udc3f',\n  'chocolate_bar':'\\ud83c\\udf6b',\n  'christmas_tree':'\\ud83c\\udf84',\n  'church':'\\u26ea\\ufe0f',\n  'cinema':'\\ud83c\\udfa6',\n  'circus_tent':'\\ud83c\\udfaa',\n  'city_sunrise':'\\ud83c\\udf07',\n  'city_sunset':'\\ud83c\\udf06',\n  'cityscape':'\\ud83c\\udfd9',\n  'cl':'\\ud83c\\udd91',\n  'clamp':'\\ud83d\\udddc',\n  'clap':'\\ud83d\\udc4f',\n  'clapper':'\\ud83c\\udfac',\n  'classical_building':'\\ud83c\\udfdb',\n  'clinking_glasses':'\\ud83e\\udd42',\n  'clipboard':'\\ud83d\\udccb',\n  'clock1':'\\ud83d\\udd50',\n  'clock10':'\\ud83d\\udd59',\n  'clock1030':'\\ud83d\\udd65',\n  'clock11':'\\ud83d\\udd5a',\n  'clock1130':'\\ud83d\\udd66',\n  'clock12':'\\ud83d\\udd5b',\n  'clock1230':'\\ud83d\\udd67',\n  'clock130':'\\ud83d\\udd5c',\n  'clock2':'\\ud83d\\udd51',\n  'clock230':'\\ud83d\\udd5d',\n  'clock3':'\\ud83d\\udd52',\n  'clock330':'\\ud83d\\udd5e',\n  'clock4':'\\ud83d\\udd53',\n  'clock430':'\\ud83d\\udd5f',\n  'clock5':'\\ud83d\\udd54',\n  'clock530':'\\ud83d\\udd60',\n  'clock6':'\\ud83d\\udd55',\n  'clock630':'\\ud83d\\udd61',\n  'clock7':'\\ud83d\\udd56',\n  'clock730':'\\ud83d\\udd62',\n  'clock8':'\\ud83d\\udd57',\n  'clock830':'\\ud83d\\udd63',\n  'clock9':'\\ud83d\\udd58',\n  'clock930':'\\ud83d\\udd64',\n  'closed_book':'\\ud83d\\udcd5',\n  'closed_lock_with_key':'\\ud83d\\udd10',\n  'closed_umbrella':'\\ud83c\\udf02',\n  'cloud':'\\u2601\\ufe0f',\n  'cloud_with_lightning':'\\ud83c\\udf29',\n  'cloud_with_lightning_and_rain':'\\u26c8',\n  'cloud_with_rain':'\\ud83c\\udf27',\n  'cloud_with_snow':'\\ud83c\\udf28',\n  'clown_face':'\\ud83e\\udd21',\n  'clubs':'\\u2663\\ufe0f',\n  'cocktail':'\\ud83c\\udf78',\n  'coffee':'\\u2615\\ufe0f',\n  'coffin':'\\u26b0\\ufe0f',\n  'cold_sweat':'\\ud83d\\ude30',\n  'comet':'\\u2604\\ufe0f',\n  'computer':'\\ud83d\\udcbb',\n  'computer_mouse':'\\ud83d\\uddb1',\n  'confetti_ball':'\\ud83c\\udf8a',\n  'confounded':'\\ud83d\\ude16',\n  'confused':'\\ud83d\\ude15',\n  'congratulations':'\\u3297\\ufe0f',\n  'construction':'\\ud83d\\udea7',\n  'construction_worker_man':'\\ud83d\\udc77',\n  'construction_worker_woman':'\\ud83d\\udc77&zwj;\\u2640\\ufe0f',\n  'control_knobs':'\\ud83c\\udf9b',\n  'convenience_store':'\\ud83c\\udfea',\n  'cookie':'\\ud83c\\udf6a',\n  'cool':'\\ud83c\\udd92',\n  'policeman':'\\ud83d\\udc6e',\n  'copyright':'\\u00a9\\ufe0f',\n  'corn':'\\ud83c\\udf3d',\n  'couch_and_lamp':'\\ud83d\\udecb',\n  'couple':'\\ud83d\\udc6b',\n  'couple_with_heart_woman_man':'\\ud83d\\udc91',\n  'couple_with_heart_man_man':'\\ud83d\\udc68&zwj;\\u2764\\ufe0f&zwj;\\ud83d\\udc68',\n  'couple_with_heart_woman_woman':'\\ud83d\\udc69&zwj;\\u2764\\ufe0f&zwj;\\ud83d\\udc69',\n  'couplekiss_man_man':'\\ud83d\\udc68&zwj;\\u2764\\ufe0f&zwj;\\ud83d\\udc8b&zwj;\\ud83d\\udc68',\n  'couplekiss_man_woman':'\\ud83d\\udc8f',\n  'couplekiss_woman_woman':'\\ud83d\\udc69&zwj;\\u2764\\ufe0f&zwj;\\ud83d\\udc8b&zwj;\\ud83d\\udc69',\n  'cow':'\\ud83d\\udc2e',\n  'cow2':'\\ud83d\\udc04',\n  'cowboy_hat_face':'\\ud83e\\udd20',\n  'crab':'\\ud83e\\udd80',\n  'crayon':'\\ud83d\\udd8d',\n  'credit_card':'\\ud83d\\udcb3',\n  'crescent_moon':'\\ud83c\\udf19',\n  'cricket':'\\ud83c\\udfcf',\n  'crocodile':'\\ud83d\\udc0a',\n  'croissant':'\\ud83e\\udd50',\n  'crossed_fingers':'\\ud83e\\udd1e',\n  'crossed_flags':'\\ud83c\\udf8c',\n  'crossed_swords':'\\u2694\\ufe0f',\n  'crown':'\\ud83d\\udc51',\n  'cry':'\\ud83d\\ude22',\n  'crying_cat_face':'\\ud83d\\ude3f',\n  'crystal_ball':'\\ud83d\\udd2e',\n  'cucumber':'\\ud83e\\udd52',\n  'cupid':'\\ud83d\\udc98',\n  'curly_loop':'\\u27b0',\n  'currency_exchange':'\\ud83d\\udcb1',\n  'curry':'\\ud83c\\udf5b',\n  'custard':'\\ud83c\\udf6e',\n  'customs':'\\ud83d\\udec3',\n  'cyclone':'\\ud83c\\udf00',\n  'dagger':'\\ud83d\\udde1',\n  'dancer':'\\ud83d\\udc83',\n  'dancing_women':'\\ud83d\\udc6f',\n  'dancing_men':'\\ud83d\\udc6f&zwj;\\u2642\\ufe0f',\n  'dango':'\\ud83c\\udf61',\n  'dark_sunglasses':'\\ud83d\\udd76',\n  'dart':'\\ud83c\\udfaf',\n  'dash':'\\ud83d\\udca8',\n  'date':'\\ud83d\\udcc5',\n  'deciduous_tree':'\\ud83c\\udf33',\n  'deer':'\\ud83e\\udd8c',\n  'department_store':'\\ud83c\\udfec',\n  'derelict_house':'\\ud83c\\udfda',\n  'desert':'\\ud83c\\udfdc',\n  'desert_island':'\\ud83c\\udfdd',\n  'desktop_computer':'\\ud83d\\udda5',\n  'male_detective':'\\ud83d\\udd75\\ufe0f',\n  'diamond_shape_with_a_dot_inside':'\\ud83d\\udca0',\n  'diamonds':'\\u2666\\ufe0f',\n  'disappointed':'\\ud83d\\ude1e',\n  'disappointed_relieved':'\\ud83d\\ude25',\n  'dizzy':'\\ud83d\\udcab',\n  'dizzy_face':'\\ud83d\\ude35',\n  'do_not_litter':'\\ud83d\\udeaf',\n  'dog':'\\ud83d\\udc36',\n  'dog2':'\\ud83d\\udc15',\n  'dollar':'\\ud83d\\udcb5',\n  'dolls':'\\ud83c\\udf8e',\n  'dolphin':'\\ud83d\\udc2c',\n  'door':'\\ud83d\\udeaa',\n  'doughnut':'\\ud83c\\udf69',\n  'dove':'\\ud83d\\udd4a',\n  'dragon':'\\ud83d\\udc09',\n  'dragon_face':'\\ud83d\\udc32',\n  'dress':'\\ud83d\\udc57',\n  'dromedary_camel':'\\ud83d\\udc2a',\n  'drooling_face':'\\ud83e\\udd24',\n  'droplet':'\\ud83d\\udca7',\n  'drum':'\\ud83e\\udd41',\n  'duck':'\\ud83e\\udd86',\n  'dvd':'\\ud83d\\udcc0',\n  'e-mail':'\\ud83d\\udce7',\n  'eagle':'\\ud83e\\udd85',\n  'ear':'\\ud83d\\udc42',\n  'ear_of_rice':'\\ud83c\\udf3e',\n  'earth_africa':'\\ud83c\\udf0d',\n  'earth_americas':'\\ud83c\\udf0e',\n  'earth_asia':'\\ud83c\\udf0f',\n  'egg':'\\ud83e\\udd5a',\n  'eggplant':'\\ud83c\\udf46',\n  'eight_pointed_black_star':'\\u2734\\ufe0f',\n  'eight_spoked_asterisk':'\\u2733\\ufe0f',\n  'electric_plug':'\\ud83d\\udd0c',\n  'elephant':'\\ud83d\\udc18',\n  'email':'\\u2709\\ufe0f',\n  'end':'\\ud83d\\udd1a',\n  'envelope_with_arrow':'\\ud83d\\udce9',\n  'euro':'\\ud83d\\udcb6',\n  'european_castle':'\\ud83c\\udff0',\n  'european_post_office':'\\ud83c\\udfe4',\n  'evergreen_tree':'\\ud83c\\udf32',\n  'exclamation':'\\u2757\\ufe0f',\n  'expressionless':'\\ud83d\\ude11',\n  'eye':'\\ud83d\\udc41',\n  'eye_speech_bubble':'\\ud83d\\udc41&zwj;\\ud83d\\udde8',\n  'eyeglasses':'\\ud83d\\udc53',\n  'eyes':'\\ud83d\\udc40',\n  'face_with_head_bandage':'\\ud83e\\udd15',\n  'face_with_thermometer':'\\ud83e\\udd12',\n  'fist_oncoming':'\\ud83d\\udc4a',\n  'factory':'\\ud83c\\udfed',\n  'fallen_leaf':'\\ud83c\\udf42',\n  'family_man_woman_boy':'\\ud83d\\udc6a',\n  'family_man_boy':'\\ud83d\\udc68&zwj;\\ud83d\\udc66',\n  'family_man_boy_boy':'\\ud83d\\udc68&zwj;\\ud83d\\udc66&zwj;\\ud83d\\udc66',\n  'family_man_girl':'\\ud83d\\udc68&zwj;\\ud83d\\udc67',\n  'family_man_girl_boy':'\\ud83d\\udc68&zwj;\\ud83d\\udc67&zwj;\\ud83d\\udc66',\n  'family_man_girl_girl':'\\ud83d\\udc68&zwj;\\ud83d\\udc67&zwj;\\ud83d\\udc67',\n  'family_man_man_boy':'\\ud83d\\udc68&zwj;\\ud83d\\udc68&zwj;\\ud83d\\udc66',\n  'family_man_man_boy_boy':'\\ud83d\\udc68&zwj;\\ud83d\\udc68&zwj;\\ud83d\\udc66&zwj;\\ud83d\\udc66',\n  'family_man_man_girl':'\\ud83d\\udc68&zwj;\\ud83d\\udc68&zwj;\\ud83d\\udc67',\n  'family_man_man_girl_boy':'\\ud83d\\udc68&zwj;\\ud83d\\udc68&zwj;\\ud83d\\udc67&zwj;\\ud83d\\udc66',\n  'family_man_man_girl_girl':'\\ud83d\\udc68&zwj;\\ud83d\\udc68&zwj;\\ud83d\\udc67&zwj;\\ud83d\\udc67',\n  'family_man_woman_boy_boy':'\\ud83d\\udc68&zwj;\\ud83d\\udc69&zwj;\\ud83d\\udc66&zwj;\\ud83d\\udc66',\n  'family_man_woman_girl':'\\ud83d\\udc68&zwj;\\ud83d\\udc69&zwj;\\ud83d\\udc67',\n  'family_man_woman_girl_boy':'\\ud83d\\udc68&zwj;\\ud83d\\udc69&zwj;\\ud83d\\udc67&zwj;\\ud83d\\udc66',\n  'family_man_woman_girl_girl':'\\ud83d\\udc68&zwj;\\ud83d\\udc69&zwj;\\ud83d\\udc67&zwj;\\ud83d\\udc67',\n  'family_woman_boy':'\\ud83d\\udc69&zwj;\\ud83d\\udc66',\n  'family_woman_boy_boy':'\\ud83d\\udc69&zwj;\\ud83d\\udc66&zwj;\\ud83d\\udc66',\n  'family_woman_girl':'\\ud83d\\udc69&zwj;\\ud83d\\udc67',\n  'family_woman_girl_boy':'\\ud83d\\udc69&zwj;\\ud83d\\udc67&zwj;\\ud83d\\udc66',\n  'family_woman_girl_girl':'\\ud83d\\udc69&zwj;\\ud83d\\udc67&zwj;\\ud83d\\udc67',\n  'family_woman_woman_boy':'\\ud83d\\udc69&zwj;\\ud83d\\udc69&zwj;\\ud83d\\udc66',\n  'family_woman_woman_boy_boy':'\\ud83d\\udc69&zwj;\\ud83d\\udc69&zwj;\\ud83d\\udc66&zwj;\\ud83d\\udc66',\n  'family_woman_woman_girl':'\\ud83d\\udc69&zwj;\\ud83d\\udc69&zwj;\\ud83d\\udc67',\n  'family_woman_woman_girl_boy':'\\ud83d\\udc69&zwj;\\ud83d\\udc69&zwj;\\ud83d\\udc67&zwj;\\ud83d\\udc66',\n  'family_woman_woman_girl_girl':'\\ud83d\\udc69&zwj;\\ud83d\\udc69&zwj;\\ud83d\\udc67&zwj;\\ud83d\\udc67',\n  'fast_forward':'\\u23e9',\n  'fax':'\\ud83d\\udce0',\n  'fearful':'\\ud83d\\ude28',\n  'feet':'\\ud83d\\udc3e',\n  'female_detective':'\\ud83d\\udd75\\ufe0f&zwj;\\u2640\\ufe0f',\n  'ferris_wheel':'\\ud83c\\udfa1',\n  'ferry':'\\u26f4',\n  'field_hockey':'\\ud83c\\udfd1',\n  'file_cabinet':'\\ud83d\\uddc4',\n  'file_folder':'\\ud83d\\udcc1',\n  'film_projector':'\\ud83d\\udcfd',\n  'film_strip':'\\ud83c\\udf9e',\n  'fire':'\\ud83d\\udd25',\n  'fire_engine':'\\ud83d\\ude92',\n  'fireworks':'\\ud83c\\udf86',\n  'first_quarter_moon':'\\ud83c\\udf13',\n  'first_quarter_moon_with_face':'\\ud83c\\udf1b',\n  'fish':'\\ud83d\\udc1f',\n  'fish_cake':'\\ud83c\\udf65',\n  'fishing_pole_and_fish':'\\ud83c\\udfa3',\n  'fist_raised':'\\u270a',\n  'fist_left':'\\ud83e\\udd1b',\n  'fist_right':'\\ud83e\\udd1c',\n  'flags':'\\ud83c\\udf8f',\n  'flashlight':'\\ud83d\\udd26',\n  'fleur_de_lis':'\\u269c\\ufe0f',\n  'flight_arrival':'\\ud83d\\udeec',\n  'flight_departure':'\\ud83d\\udeeb',\n  'floppy_disk':'\\ud83d\\udcbe',\n  'flower_playing_cards':'\\ud83c\\udfb4',\n  'flushed':'\\ud83d\\ude33',\n  'fog':'\\ud83c\\udf2b',\n  'foggy':'\\ud83c\\udf01',\n  'football':'\\ud83c\\udfc8',\n  'footprints':'\\ud83d\\udc63',\n  'fork_and_knife':'\\ud83c\\udf74',\n  'fountain':'\\u26f2\\ufe0f',\n  'fountain_pen':'\\ud83d\\udd8b',\n  'four_leaf_clover':'\\ud83c\\udf40',\n  'fox_face':'\\ud83e\\udd8a',\n  'framed_picture':'\\ud83d\\uddbc',\n  'free':'\\ud83c\\udd93',\n  'fried_egg':'\\ud83c\\udf73',\n  'fried_shrimp':'\\ud83c\\udf64',\n  'fries':'\\ud83c\\udf5f',\n  'frog':'\\ud83d\\udc38',\n  'frowning':'\\ud83d\\ude26',\n  'frowning_face':'\\u2639\\ufe0f',\n  'frowning_man':'\\ud83d\\ude4d&zwj;\\u2642\\ufe0f',\n  'frowning_woman':'\\ud83d\\ude4d',\n  'middle_finger':'\\ud83d\\udd95',\n  'fuelpump':'\\u26fd\\ufe0f',\n  'full_moon':'\\ud83c\\udf15',\n  'full_moon_with_face':'\\ud83c\\udf1d',\n  'funeral_urn':'\\u26b1\\ufe0f',\n  'game_die':'\\ud83c\\udfb2',\n  'gear':'\\u2699\\ufe0f',\n  'gem':'\\ud83d\\udc8e',\n  'gemini':'\\u264a\\ufe0f',\n  'ghost':'\\ud83d\\udc7b',\n  'gift':'\\ud83c\\udf81',\n  'gift_heart':'\\ud83d\\udc9d',\n  'girl':'\\ud83d\\udc67',\n  'globe_with_meridians':'\\ud83c\\udf10',\n  'goal_net':'\\ud83e\\udd45',\n  'goat':'\\ud83d\\udc10',\n  'golf':'\\u26f3\\ufe0f',\n  'golfing_man':'\\ud83c\\udfcc\\ufe0f',\n  'golfing_woman':'\\ud83c\\udfcc\\ufe0f&zwj;\\u2640\\ufe0f',\n  'gorilla':'\\ud83e\\udd8d',\n  'grapes':'\\ud83c\\udf47',\n  'green_apple':'\\ud83c\\udf4f',\n  'green_book':'\\ud83d\\udcd7',\n  'green_heart':'\\ud83d\\udc9a',\n  'green_salad':'\\ud83e\\udd57',\n  'grey_exclamation':'\\u2755',\n  'grey_question':'\\u2754',\n  'grimacing':'\\ud83d\\ude2c',\n  'grin':'\\ud83d\\ude01',\n  'grinning':'\\ud83d\\ude00',\n  'guardsman':'\\ud83d\\udc82',\n  'guardswoman':'\\ud83d\\udc82&zwj;\\u2640\\ufe0f',\n  'guitar':'\\ud83c\\udfb8',\n  'gun':'\\ud83d\\udd2b',\n  'haircut_woman':'\\ud83d\\udc87',\n  'haircut_man':'\\ud83d\\udc87&zwj;\\u2642\\ufe0f',\n  'hamburger':'\\ud83c\\udf54',\n  'hammer':'\\ud83d\\udd28',\n  'hammer_and_pick':'\\u2692',\n  'hammer_and_wrench':'\\ud83d\\udee0',\n  'hamster':'\\ud83d\\udc39',\n  'hand':'\\u270b',\n  'handbag':'\\ud83d\\udc5c',\n  'handshake':'\\ud83e\\udd1d',\n  'hankey':'\\ud83d\\udca9',\n  'hatched_chick':'\\ud83d\\udc25',\n  'hatching_chick':'\\ud83d\\udc23',\n  'headphones':'\\ud83c\\udfa7',\n  'hear_no_evil':'\\ud83d\\ude49',\n  'heart':'\\u2764\\ufe0f',\n  'heart_decoration':'\\ud83d\\udc9f',\n  'heart_eyes':'\\ud83d\\ude0d',\n  'heart_eyes_cat':'\\ud83d\\ude3b',\n  'heartbeat':'\\ud83d\\udc93',\n  'heartpulse':'\\ud83d\\udc97',\n  'hearts':'\\u2665\\ufe0f',\n  'heavy_check_mark':'\\u2714\\ufe0f',\n  'heavy_division_sign':'\\u2797',\n  'heavy_dollar_sign':'\\ud83d\\udcb2',\n  'heavy_heart_exclamation':'\\u2763\\ufe0f',\n  'heavy_minus_sign':'\\u2796',\n  'heavy_multiplication_x':'\\u2716\\ufe0f',\n  'heavy_plus_sign':'\\u2795',\n  'helicopter':'\\ud83d\\ude81',\n  'herb':'\\ud83c\\udf3f',\n  'hibiscus':'\\ud83c\\udf3a',\n  'high_brightness':'\\ud83d\\udd06',\n  'high_heel':'\\ud83d\\udc60',\n  'hocho':'\\ud83d\\udd2a',\n  'hole':'\\ud83d\\udd73',\n  'honey_pot':'\\ud83c\\udf6f',\n  'horse':'\\ud83d\\udc34',\n  'horse_racing':'\\ud83c\\udfc7',\n  'hospital':'\\ud83c\\udfe5',\n  'hot_pepper':'\\ud83c\\udf36',\n  'hotdog':'\\ud83c\\udf2d',\n  'hotel':'\\ud83c\\udfe8',\n  'hotsprings':'\\u2668\\ufe0f',\n  'hourglass':'\\u231b\\ufe0f',\n  'hourglass_flowing_sand':'\\u23f3',\n  'house':'\\ud83c\\udfe0',\n  'house_with_garden':'\\ud83c\\udfe1',\n  'houses':'\\ud83c\\udfd8',\n  'hugs':'\\ud83e\\udd17',\n  'hushed':'\\ud83d\\ude2f',\n  'ice_cream':'\\ud83c\\udf68',\n  'ice_hockey':'\\ud83c\\udfd2',\n  'ice_skate':'\\u26f8',\n  'icecream':'\\ud83c\\udf66',\n  'id':'\\ud83c\\udd94',\n  'ideograph_advantage':'\\ud83c\\ude50',\n  'imp':'\\ud83d\\udc7f',\n  'inbox_tray':'\\ud83d\\udce5',\n  'incoming_envelope':'\\ud83d\\udce8',\n  'tipping_hand_woman':'\\ud83d\\udc81',\n  'information_source':'\\u2139\\ufe0f',\n  'innocent':'\\ud83d\\ude07',\n  'interrobang':'\\u2049\\ufe0f',\n  'iphone':'\\ud83d\\udcf1',\n  'izakaya_lantern':'\\ud83c\\udfee',\n  'jack_o_lantern':'\\ud83c\\udf83',\n  'japan':'\\ud83d\\uddfe',\n  'japanese_castle':'\\ud83c\\udfef',\n  'japanese_goblin':'\\ud83d\\udc7a',\n  'japanese_ogre':'\\ud83d\\udc79',\n  'jeans':'\\ud83d\\udc56',\n  'joy':'\\ud83d\\ude02',\n  'joy_cat':'\\ud83d\\ude39',\n  'joystick':'\\ud83d\\udd79',\n  'kaaba':'\\ud83d\\udd4b',\n  'key':'\\ud83d\\udd11',\n  'keyboard':'\\u2328\\ufe0f',\n  'keycap_ten':'\\ud83d\\udd1f',\n  'kick_scooter':'\\ud83d\\udef4',\n  'kimono':'\\ud83d\\udc58',\n  'kiss':'\\ud83d\\udc8b',\n  'kissing':'\\ud83d\\ude17',\n  'kissing_cat':'\\ud83d\\ude3d',\n  'kissing_closed_eyes':'\\ud83d\\ude1a',\n  'kissing_heart':'\\ud83d\\ude18',\n  'kissing_smiling_eyes':'\\ud83d\\ude19',\n  'kiwi_fruit':'\\ud83e\\udd5d',\n  'koala':'\\ud83d\\udc28',\n  'koko':'\\ud83c\\ude01',\n  'label':'\\ud83c\\udff7',\n  'large_blue_circle':'\\ud83d\\udd35',\n  'large_blue_diamond':'\\ud83d\\udd37',\n  'large_orange_diamond':'\\ud83d\\udd36',\n  'last_quarter_moon':'\\ud83c\\udf17',\n  'last_quarter_moon_with_face':'\\ud83c\\udf1c',\n  'latin_cross':'\\u271d\\ufe0f',\n  'laughing':'\\ud83d\\ude06',\n  'leaves':'\\ud83c\\udf43',\n  'ledger':'\\ud83d\\udcd2',\n  'left_luggage':'\\ud83d\\udec5',\n  'left_right_arrow':'\\u2194\\ufe0f',\n  'leftwards_arrow_with_hook':'\\u21a9\\ufe0f',\n  'lemon':'\\ud83c\\udf4b',\n  'leo':'\\u264c\\ufe0f',\n  'leopard':'\\ud83d\\udc06',\n  'level_slider':'\\ud83c\\udf9a',\n  'libra':'\\u264e\\ufe0f',\n  'light_rail':'\\ud83d\\ude88',\n  'link':'\\ud83d\\udd17',\n  'lion':'\\ud83e\\udd81',\n  'lips':'\\ud83d\\udc44',\n  'lipstick':'\\ud83d\\udc84',\n  'lizard':'\\ud83e\\udd8e',\n  'lock':'\\ud83d\\udd12',\n  'lock_with_ink_pen':'\\ud83d\\udd0f',\n  'lollipop':'\\ud83c\\udf6d',\n  'loop':'\\u27bf',\n  'loud_sound':'\\ud83d\\udd0a',\n  'loudspeaker':'\\ud83d\\udce2',\n  'love_hotel':'\\ud83c\\udfe9',\n  'love_letter':'\\ud83d\\udc8c',\n  'low_brightness':'\\ud83d\\udd05',\n  'lying_face':'\\ud83e\\udd25',\n  'm':'\\u24c2\\ufe0f',\n  'mag':'\\ud83d\\udd0d',\n  'mag_right':'\\ud83d\\udd0e',\n  'mahjong':'\\ud83c\\udc04\\ufe0f',\n  'mailbox':'\\ud83d\\udceb',\n  'mailbox_closed':'\\ud83d\\udcea',\n  'mailbox_with_mail':'\\ud83d\\udcec',\n  'mailbox_with_no_mail':'\\ud83d\\udced',\n  'man':'\\ud83d\\udc68',\n  'man_artist':'\\ud83d\\udc68&zwj;\\ud83c\\udfa8',\n  'man_astronaut':'\\ud83d\\udc68&zwj;\\ud83d\\ude80',\n  'man_cartwheeling':'\\ud83e\\udd38&zwj;\\u2642\\ufe0f',\n  'man_cook':'\\ud83d\\udc68&zwj;\\ud83c\\udf73',\n  'man_dancing':'\\ud83d\\udd7a',\n  'man_facepalming':'\\ud83e\\udd26&zwj;\\u2642\\ufe0f',\n  'man_factory_worker':'\\ud83d\\udc68&zwj;\\ud83c\\udfed',\n  'man_farmer':'\\ud83d\\udc68&zwj;\\ud83c\\udf3e',\n  'man_firefighter':'\\ud83d\\udc68&zwj;\\ud83d\\ude92',\n  'man_health_worker':'\\ud83d\\udc68&zwj;\\u2695\\ufe0f',\n  'man_in_tuxedo':'\\ud83e\\udd35',\n  'man_judge':'\\ud83d\\udc68&zwj;\\u2696\\ufe0f',\n  'man_juggling':'\\ud83e\\udd39&zwj;\\u2642\\ufe0f',\n  'man_mechanic':'\\ud83d\\udc68&zwj;\\ud83d\\udd27',\n  'man_office_worker':'\\ud83d\\udc68&zwj;\\ud83d\\udcbc',\n  'man_pilot':'\\ud83d\\udc68&zwj;\\u2708\\ufe0f',\n  'man_playing_handball':'\\ud83e\\udd3e&zwj;\\u2642\\ufe0f',\n  'man_playing_water_polo':'\\ud83e\\udd3d&zwj;\\u2642\\ufe0f',\n  'man_scientist':'\\ud83d\\udc68&zwj;\\ud83d\\udd2c',\n  'man_shrugging':'\\ud83e\\udd37&zwj;\\u2642\\ufe0f',\n  'man_singer':'\\ud83d\\udc68&zwj;\\ud83c\\udfa4',\n  'man_student':'\\ud83d\\udc68&zwj;\\ud83c\\udf93',\n  'man_teacher':'\\ud83d\\udc68&zwj;\\ud83c\\udfeb',\n  'man_technologist':'\\ud83d\\udc68&zwj;\\ud83d\\udcbb',\n  'man_with_gua_pi_mao':'\\ud83d\\udc72',\n  'man_with_turban':'\\ud83d\\udc73',\n  'tangerine':'\\ud83c\\udf4a',\n  'mans_shoe':'\\ud83d\\udc5e',\n  'mantelpiece_clock':'\\ud83d\\udd70',\n  'maple_leaf':'\\ud83c\\udf41',\n  'martial_arts_uniform':'\\ud83e\\udd4b',\n  'mask':'\\ud83d\\ude37',\n  'massage_woman':'\\ud83d\\udc86',\n  'massage_man':'\\ud83d\\udc86&zwj;\\u2642\\ufe0f',\n  'meat_on_bone':'\\ud83c\\udf56',\n  'medal_military':'\\ud83c\\udf96',\n  'medal_sports':'\\ud83c\\udfc5',\n  'mega':'\\ud83d\\udce3',\n  'melon':'\\ud83c\\udf48',\n  'memo':'\\ud83d\\udcdd',\n  'men_wrestling':'\\ud83e\\udd3c&zwj;\\u2642\\ufe0f',\n  'menorah':'\\ud83d\\udd4e',\n  'mens':'\\ud83d\\udeb9',\n  'metal':'\\ud83e\\udd18',\n  'metro':'\\ud83d\\ude87',\n  'microphone':'\\ud83c\\udfa4',\n  'microscope':'\\ud83d\\udd2c',\n  'milk_glass':'\\ud83e\\udd5b',\n  'milky_way':'\\ud83c\\udf0c',\n  'minibus':'\\ud83d\\ude90',\n  'minidisc':'\\ud83d\\udcbd',\n  'mobile_phone_off':'\\ud83d\\udcf4',\n  'money_mouth_face':'\\ud83e\\udd11',\n  'money_with_wings':'\\ud83d\\udcb8',\n  'moneybag':'\\ud83d\\udcb0',\n  'monkey':'\\ud83d\\udc12',\n  'monkey_face':'\\ud83d\\udc35',\n  'monorail':'\\ud83d\\ude9d',\n  'moon':'\\ud83c\\udf14',\n  'mortar_board':'\\ud83c\\udf93',\n  'mosque':'\\ud83d\\udd4c',\n  'motor_boat':'\\ud83d\\udee5',\n  'motor_scooter':'\\ud83d\\udef5',\n  'motorcycle':'\\ud83c\\udfcd',\n  'motorway':'\\ud83d\\udee3',\n  'mount_fuji':'\\ud83d\\uddfb',\n  'mountain':'\\u26f0',\n  'mountain_biking_man':'\\ud83d\\udeb5',\n  'mountain_biking_woman':'\\ud83d\\udeb5&zwj;\\u2640\\ufe0f',\n  'mountain_cableway':'\\ud83d\\udea0',\n  'mountain_railway':'\\ud83d\\ude9e',\n  'mountain_snow':'\\ud83c\\udfd4',\n  'mouse':'\\ud83d\\udc2d',\n  'mouse2':'\\ud83d\\udc01',\n  'movie_camera':'\\ud83c\\udfa5',\n  'moyai':'\\ud83d\\uddff',\n  'mrs_claus':'\\ud83e\\udd36',\n  'muscle':'\\ud83d\\udcaa',\n  'mushroom':'\\ud83c\\udf44',\n  'musical_keyboard':'\\ud83c\\udfb9',\n  'musical_note':'\\ud83c\\udfb5',\n  'musical_score':'\\ud83c\\udfbc',\n  'mute':'\\ud83d\\udd07',\n  'nail_care':'\\ud83d\\udc85',\n  'name_badge':'\\ud83d\\udcdb',\n  'national_park':'\\ud83c\\udfde',\n  'nauseated_face':'\\ud83e\\udd22',\n  'necktie':'\\ud83d\\udc54',\n  'negative_squared_cross_mark':'\\u274e',\n  'nerd_face':'\\ud83e\\udd13',\n  'neutral_face':'\\ud83d\\ude10',\n  'new':'\\ud83c\\udd95',\n  'new_moon':'\\ud83c\\udf11',\n  'new_moon_with_face':'\\ud83c\\udf1a',\n  'newspaper':'\\ud83d\\udcf0',\n  'newspaper_roll':'\\ud83d\\uddde',\n  'next_track_button':'\\u23ed',\n  'ng':'\\ud83c\\udd96',\n  'no_good_man':'\\ud83d\\ude45&zwj;\\u2642\\ufe0f',\n  'no_good_woman':'\\ud83d\\ude45',\n  'night_with_stars':'\\ud83c\\udf03',\n  'no_bell':'\\ud83d\\udd15',\n  'no_bicycles':'\\ud83d\\udeb3',\n  'no_entry':'\\u26d4\\ufe0f',\n  'no_entry_sign':'\\ud83d\\udeab',\n  'no_mobile_phones':'\\ud83d\\udcf5',\n  'no_mouth':'\\ud83d\\ude36',\n  'no_pedestrians':'\\ud83d\\udeb7',\n  'no_smoking':'\\ud83d\\udead',\n  'non-potable_water':'\\ud83d\\udeb1',\n  'nose':'\\ud83d\\udc43',\n  'notebook':'\\ud83d\\udcd3',\n  'notebook_with_decorative_cover':'\\ud83d\\udcd4',\n  'notes':'\\ud83c\\udfb6',\n  'nut_and_bolt':'\\ud83d\\udd29',\n  'o':'\\u2b55\\ufe0f',\n  'o2':'\\ud83c\\udd7e\\ufe0f',\n  'ocean':'\\ud83c\\udf0a',\n  'octopus':'\\ud83d\\udc19',\n  'oden':'\\ud83c\\udf62',\n  'office':'\\ud83c\\udfe2',\n  'oil_drum':'\\ud83d\\udee2',\n  'ok':'\\ud83c\\udd97',\n  'ok_hand':'\\ud83d\\udc4c',\n  'ok_man':'\\ud83d\\ude46&zwj;\\u2642\\ufe0f',\n  'ok_woman':'\\ud83d\\ude46',\n  'old_key':'\\ud83d\\udddd',\n  'older_man':'\\ud83d\\udc74',\n  'older_woman':'\\ud83d\\udc75',\n  'om':'\\ud83d\\udd49',\n  'on':'\\ud83d\\udd1b',\n  'oncoming_automobile':'\\ud83d\\ude98',\n  'oncoming_bus':'\\ud83d\\ude8d',\n  'oncoming_police_car':'\\ud83d\\ude94',\n  'oncoming_taxi':'\\ud83d\\ude96',\n  'open_file_folder':'\\ud83d\\udcc2',\n  'open_hands':'\\ud83d\\udc50',\n  'open_mouth':'\\ud83d\\ude2e',\n  'open_umbrella':'\\u2602\\ufe0f',\n  'ophiuchus':'\\u26ce',\n  'orange_book':'\\ud83d\\udcd9',\n  'orthodox_cross':'\\u2626\\ufe0f',\n  'outbox_tray':'\\ud83d\\udce4',\n  'owl':'\\ud83e\\udd89',\n  'ox':'\\ud83d\\udc02',\n  'package':'\\ud83d\\udce6',\n  'page_facing_up':'\\ud83d\\udcc4',\n  'page_with_curl':'\\ud83d\\udcc3',\n  'pager':'\\ud83d\\udcdf',\n  'paintbrush':'\\ud83d\\udd8c',\n  'palm_tree':'\\ud83c\\udf34',\n  'pancakes':'\\ud83e\\udd5e',\n  'panda_face':'\\ud83d\\udc3c',\n  'paperclip':'\\ud83d\\udcce',\n  'paperclips':'\\ud83d\\udd87',\n  'parasol_on_ground':'\\u26f1',\n  'parking':'\\ud83c\\udd7f\\ufe0f',\n  'part_alternation_mark':'\\u303d\\ufe0f',\n  'partly_sunny':'\\u26c5\\ufe0f',\n  'passenger_ship':'\\ud83d\\udef3',\n  'passport_control':'\\ud83d\\udec2',\n  'pause_button':'\\u23f8',\n  'peace_symbol':'\\u262e\\ufe0f',\n  'peach':'\\ud83c\\udf51',\n  'peanuts':'\\ud83e\\udd5c',\n  'pear':'\\ud83c\\udf50',\n  'pen':'\\ud83d\\udd8a',\n  'pencil2':'\\u270f\\ufe0f',\n  'penguin':'\\ud83d\\udc27',\n  'pensive':'\\ud83d\\ude14',\n  'performing_arts':'\\ud83c\\udfad',\n  'persevere':'\\ud83d\\ude23',\n  'person_fencing':'\\ud83e\\udd3a',\n  'pouting_woman':'\\ud83d\\ude4e',\n  'phone':'\\u260e\\ufe0f',\n  'pick':'\\u26cf',\n  'pig':'\\ud83d\\udc37',\n  'pig2':'\\ud83d\\udc16',\n  'pig_nose':'\\ud83d\\udc3d',\n  'pill':'\\ud83d\\udc8a',\n  'pineapple':'\\ud83c\\udf4d',\n  'ping_pong':'\\ud83c\\udfd3',\n  'pisces':'\\u2653\\ufe0f',\n  'pizza':'\\ud83c\\udf55',\n  'place_of_worship':'\\ud83d\\uded0',\n  'plate_with_cutlery':'\\ud83c\\udf7d',\n  'play_or_pause_button':'\\u23ef',\n  'point_down':'\\ud83d\\udc47',\n  'point_left':'\\ud83d\\udc48',\n  'point_right':'\\ud83d\\udc49',\n  'point_up':'\\u261d\\ufe0f',\n  'point_up_2':'\\ud83d\\udc46',\n  'police_car':'\\ud83d\\ude93',\n  'policewoman':'\\ud83d\\udc6e&zwj;\\u2640\\ufe0f',\n  'poodle':'\\ud83d\\udc29',\n  'popcorn':'\\ud83c\\udf7f',\n  'post_office':'\\ud83c\\udfe3',\n  'postal_horn':'\\ud83d\\udcef',\n  'postbox':'\\ud83d\\udcee',\n  'potable_water':'\\ud83d\\udeb0',\n  'potato':'\\ud83e\\udd54',\n  'pouch':'\\ud83d\\udc5d',\n  'poultry_leg':'\\ud83c\\udf57',\n  'pound':'\\ud83d\\udcb7',\n  'rage':'\\ud83d\\ude21',\n  'pouting_cat':'\\ud83d\\ude3e',\n  'pouting_man':'\\ud83d\\ude4e&zwj;\\u2642\\ufe0f',\n  'pray':'\\ud83d\\ude4f',\n  'prayer_beads':'\\ud83d\\udcff',\n  'pregnant_woman':'\\ud83e\\udd30',\n  'previous_track_button':'\\u23ee',\n  'prince':'\\ud83e\\udd34',\n  'princess':'\\ud83d\\udc78',\n  'printer':'\\ud83d\\udda8',\n  'purple_heart':'\\ud83d\\udc9c',\n  'purse':'\\ud83d\\udc5b',\n  'pushpin':'\\ud83d\\udccc',\n  'put_litter_in_its_place':'\\ud83d\\udeae',\n  'question':'\\u2753',\n  'rabbit':'\\ud83d\\udc30',\n  'rabbit2':'\\ud83d\\udc07',\n  'racehorse':'\\ud83d\\udc0e',\n  'racing_car':'\\ud83c\\udfce',\n  'radio':'\\ud83d\\udcfb',\n  'radio_button':'\\ud83d\\udd18',\n  'radioactive':'\\u2622\\ufe0f',\n  'railway_car':'\\ud83d\\ude83',\n  'railway_track':'\\ud83d\\udee4',\n  'rainbow':'\\ud83c\\udf08',\n  'rainbow_flag':'\\ud83c\\udff3\\ufe0f&zwj;\\ud83c\\udf08',\n  'raised_back_of_hand':'\\ud83e\\udd1a',\n  'raised_hand_with_fingers_splayed':'\\ud83d\\udd90',\n  'raised_hands':'\\ud83d\\ude4c',\n  'raising_hand_woman':'\\ud83d\\ude4b',\n  'raising_hand_man':'\\ud83d\\ude4b&zwj;\\u2642\\ufe0f',\n  'ram':'\\ud83d\\udc0f',\n  'ramen':'\\ud83c\\udf5c',\n  'rat':'\\ud83d\\udc00',\n  'record_button':'\\u23fa',\n  'recycle':'\\u267b\\ufe0f',\n  'red_circle':'\\ud83d\\udd34',\n  'registered':'\\u00ae\\ufe0f',\n  'relaxed':'\\u263a\\ufe0f',\n  'relieved':'\\ud83d\\ude0c',\n  'reminder_ribbon':'\\ud83c\\udf97',\n  'repeat':'\\ud83d\\udd01',\n  'repeat_one':'\\ud83d\\udd02',\n  'rescue_worker_helmet':'\\u26d1',\n  'restroom':'\\ud83d\\udebb',\n  'revolving_hearts':'\\ud83d\\udc9e',\n  'rewind':'\\u23ea',\n  'rhinoceros':'\\ud83e\\udd8f',\n  'ribbon':'\\ud83c\\udf80',\n  'rice':'\\ud83c\\udf5a',\n  'rice_ball':'\\ud83c\\udf59',\n  'rice_cracker':'\\ud83c\\udf58',\n  'rice_scene':'\\ud83c\\udf91',\n  'right_anger_bubble':'\\ud83d\\uddef',\n  'ring':'\\ud83d\\udc8d',\n  'robot':'\\ud83e\\udd16',\n  'rocket':'\\ud83d\\ude80',\n  'rofl':'\\ud83e\\udd23',\n  'roll_eyes':'\\ud83d\\ude44',\n  'roller_coaster':'\\ud83c\\udfa2',\n  'rooster':'\\ud83d\\udc13',\n  'rose':'\\ud83c\\udf39',\n  'rosette':'\\ud83c\\udff5',\n  'rotating_light':'\\ud83d\\udea8',\n  'round_pushpin':'\\ud83d\\udccd',\n  'rowing_man':'\\ud83d\\udea3',\n  'rowing_woman':'\\ud83d\\udea3&zwj;\\u2640\\ufe0f',\n  'rugby_football':'\\ud83c\\udfc9',\n  'running_man':'\\ud83c\\udfc3',\n  'running_shirt_with_sash':'\\ud83c\\udfbd',\n  'running_woman':'\\ud83c\\udfc3&zwj;\\u2640\\ufe0f',\n  'sa':'\\ud83c\\ude02\\ufe0f',\n  'sagittarius':'\\u2650\\ufe0f',\n  'sake':'\\ud83c\\udf76',\n  'sandal':'\\ud83d\\udc61',\n  'santa':'\\ud83c\\udf85',\n  'satellite':'\\ud83d\\udce1',\n  'saxophone':'\\ud83c\\udfb7',\n  'school':'\\ud83c\\udfeb',\n  'school_satchel':'\\ud83c\\udf92',\n  'scissors':'\\u2702\\ufe0f',\n  'scorpion':'\\ud83e\\udd82',\n  'scorpius':'\\u264f\\ufe0f',\n  'scream':'\\ud83d\\ude31',\n  'scream_cat':'\\ud83d\\ude40',\n  'scroll':'\\ud83d\\udcdc',\n  'seat':'\\ud83d\\udcba',\n  'secret':'\\u3299\\ufe0f',\n  'see_no_evil':'\\ud83d\\ude48',\n  'seedling':'\\ud83c\\udf31',\n  'selfie':'\\ud83e\\udd33',\n  'shallow_pan_of_food':'\\ud83e\\udd58',\n  'shamrock':'\\u2618\\ufe0f',\n  'shark':'\\ud83e\\udd88',\n  'shaved_ice':'\\ud83c\\udf67',\n  'sheep':'\\ud83d\\udc11',\n  'shell':'\\ud83d\\udc1a',\n  'shield':'\\ud83d\\udee1',\n  'shinto_shrine':'\\u26e9',\n  'ship':'\\ud83d\\udea2',\n  'shirt':'\\ud83d\\udc55',\n  'shopping':'\\ud83d\\udecd',\n  'shopping_cart':'\\ud83d\\uded2',\n  'shower':'\\ud83d\\udebf',\n  'shrimp':'\\ud83e\\udd90',\n  'signal_strength':'\\ud83d\\udcf6',\n  'six_pointed_star':'\\ud83d\\udd2f',\n  'ski':'\\ud83c\\udfbf',\n  'skier':'\\u26f7',\n  'skull':'\\ud83d\\udc80',\n  'skull_and_crossbones':'\\u2620\\ufe0f',\n  'sleeping':'\\ud83d\\ude34',\n  'sleeping_bed':'\\ud83d\\udecc',\n  'sleepy':'\\ud83d\\ude2a',\n  'slightly_frowning_face':'\\ud83d\\ude41',\n  'slightly_smiling_face':'\\ud83d\\ude42',\n  'slot_machine':'\\ud83c\\udfb0',\n  'small_airplane':'\\ud83d\\udee9',\n  'small_blue_diamond':'\\ud83d\\udd39',\n  'small_orange_diamond':'\\ud83d\\udd38',\n  'small_red_triangle':'\\ud83d\\udd3a',\n  'small_red_triangle_down':'\\ud83d\\udd3b',\n  'smile':'\\ud83d\\ude04',\n  'smile_cat':'\\ud83d\\ude38',\n  'smiley':'\\ud83d\\ude03',\n  'smiley_cat':'\\ud83d\\ude3a',\n  'smiling_imp':'\\ud83d\\ude08',\n  'smirk':'\\ud83d\\ude0f',\n  'smirk_cat':'\\ud83d\\ude3c',\n  'smoking':'\\ud83d\\udeac',\n  'snail':'\\ud83d\\udc0c',\n  'snake':'\\ud83d\\udc0d',\n  'sneezing_face':'\\ud83e\\udd27',\n  'snowboarder':'\\ud83c\\udfc2',\n  'snowflake':'\\u2744\\ufe0f',\n  'snowman':'\\u26c4\\ufe0f',\n  'snowman_with_snow':'\\u2603\\ufe0f',\n  'sob':'\\ud83d\\ude2d',\n  'soccer':'\\u26bd\\ufe0f',\n  'soon':'\\ud83d\\udd1c',\n  'sos':'\\ud83c\\udd98',\n  'sound':'\\ud83d\\udd09',\n  'space_invader':'\\ud83d\\udc7e',\n  'spades':'\\u2660\\ufe0f',\n  'spaghetti':'\\ud83c\\udf5d',\n  'sparkle':'\\u2747\\ufe0f',\n  'sparkler':'\\ud83c\\udf87',\n  'sparkles':'\\u2728',\n  'sparkling_heart':'\\ud83d\\udc96',\n  'speak_no_evil':'\\ud83d\\ude4a',\n  'speaker':'\\ud83d\\udd08',\n  'speaking_head':'\\ud83d\\udde3',\n  'speech_balloon':'\\ud83d\\udcac',\n  'speedboat':'\\ud83d\\udea4',\n  'spider':'\\ud83d\\udd77',\n  'spider_web':'\\ud83d\\udd78',\n  'spiral_calendar':'\\ud83d\\uddd3',\n  'spiral_notepad':'\\ud83d\\uddd2',\n  'spoon':'\\ud83e\\udd44',\n  'squid':'\\ud83e\\udd91',\n  'stadium':'\\ud83c\\udfdf',\n  'star':'\\u2b50\\ufe0f',\n  'star2':'\\ud83c\\udf1f',\n  'star_and_crescent':'\\u262a\\ufe0f',\n  'star_of_david':'\\u2721\\ufe0f',\n  'stars':'\\ud83c\\udf20',\n  'station':'\\ud83d\\ude89',\n  'statue_of_liberty':'\\ud83d\\uddfd',\n  'steam_locomotive':'\\ud83d\\ude82',\n  'stew':'\\ud83c\\udf72',\n  'stop_button':'\\u23f9',\n  'stop_sign':'\\ud83d\\uded1',\n  'stopwatch':'\\u23f1',\n  'straight_ruler':'\\ud83d\\udccf',\n  'strawberry':'\\ud83c\\udf53',\n  'stuck_out_tongue':'\\ud83d\\ude1b',\n  'stuck_out_tongue_closed_eyes':'\\ud83d\\ude1d',\n  'stuck_out_tongue_winking_eye':'\\ud83d\\ude1c',\n  'studio_microphone':'\\ud83c\\udf99',\n  'stuffed_flatbread':'\\ud83e\\udd59',\n  'sun_behind_large_cloud':'\\ud83c\\udf25',\n  'sun_behind_rain_cloud':'\\ud83c\\udf26',\n  'sun_behind_small_cloud':'\\ud83c\\udf24',\n  'sun_with_face':'\\ud83c\\udf1e',\n  'sunflower':'\\ud83c\\udf3b',\n  'sunglasses':'\\ud83d\\ude0e',\n  'sunny':'\\u2600\\ufe0f',\n  'sunrise':'\\ud83c\\udf05',\n  'sunrise_over_mountains':'\\ud83c\\udf04',\n  'surfing_man':'\\ud83c\\udfc4',\n  'surfing_woman':'\\ud83c\\udfc4&zwj;\\u2640\\ufe0f',\n  'sushi':'\\ud83c\\udf63',\n  'suspension_railway':'\\ud83d\\ude9f',\n  'sweat':'\\ud83d\\ude13',\n  'sweat_drops':'\\ud83d\\udca6',\n  'sweat_smile':'\\ud83d\\ude05',\n  'sweet_potato':'\\ud83c\\udf60',\n  'swimming_man':'\\ud83c\\udfca',\n  'swimming_woman':'\\ud83c\\udfca&zwj;\\u2640\\ufe0f',\n  'symbols':'\\ud83d\\udd23',\n  'synagogue':'\\ud83d\\udd4d',\n  'syringe':'\\ud83d\\udc89',\n  'taco':'\\ud83c\\udf2e',\n  'tada':'\\ud83c\\udf89',\n  'tanabata_tree':'\\ud83c\\udf8b',\n  'taurus':'\\u2649\\ufe0f',\n  'taxi':'\\ud83d\\ude95',\n  'tea':'\\ud83c\\udf75',\n  'telephone_receiver':'\\ud83d\\udcde',\n  'telescope':'\\ud83d\\udd2d',\n  'tennis':'\\ud83c\\udfbe',\n  'tent':'\\u26fa\\ufe0f',\n  'thermometer':'\\ud83c\\udf21',\n  'thinking':'\\ud83e\\udd14',\n  'thought_balloon':'\\ud83d\\udcad',\n  'ticket':'\\ud83c\\udfab',\n  'tickets':'\\ud83c\\udf9f',\n  'tiger':'\\ud83d\\udc2f',\n  'tiger2':'\\ud83d\\udc05',\n  'timer_clock':'\\u23f2',\n  'tipping_hand_man':'\\ud83d\\udc81&zwj;\\u2642\\ufe0f',\n  'tired_face':'\\ud83d\\ude2b',\n  'tm':'\\u2122\\ufe0f',\n  'toilet':'\\ud83d\\udebd',\n  'tokyo_tower':'\\ud83d\\uddfc',\n  'tomato':'\\ud83c\\udf45',\n  'tongue':'\\ud83d\\udc45',\n  'top':'\\ud83d\\udd1d',\n  'tophat':'\\ud83c\\udfa9',\n  'tornado':'\\ud83c\\udf2a',\n  'trackball':'\\ud83d\\uddb2',\n  'tractor':'\\ud83d\\ude9c',\n  'traffic_light':'\\ud83d\\udea5',\n  'train':'\\ud83d\\ude8b',\n  'train2':'\\ud83d\\ude86',\n  'tram':'\\ud83d\\ude8a',\n  'triangular_flag_on_post':'\\ud83d\\udea9',\n  'triangular_ruler':'\\ud83d\\udcd0',\n  'trident':'\\ud83d\\udd31',\n  'triumph':'\\ud83d\\ude24',\n  'trolleybus':'\\ud83d\\ude8e',\n  'trophy':'\\ud83c\\udfc6',\n  'tropical_drink':'\\ud83c\\udf79',\n  'tropical_fish':'\\ud83d\\udc20',\n  'truck':'\\ud83d\\ude9a',\n  'trumpet':'\\ud83c\\udfba',\n  'tulip':'\\ud83c\\udf37',\n  'tumbler_glass':'\\ud83e\\udd43',\n  'turkey':'\\ud83e\\udd83',\n  'turtle':'\\ud83d\\udc22',\n  'tv':'\\ud83d\\udcfa',\n  'twisted_rightwards_arrows':'\\ud83d\\udd00',\n  'two_hearts':'\\ud83d\\udc95',\n  'two_men_holding_hands':'\\ud83d\\udc6c',\n  'two_women_holding_hands':'\\ud83d\\udc6d',\n  'u5272':'\\ud83c\\ude39',\n  'u5408':'\\ud83c\\ude34',\n  'u55b6':'\\ud83c\\ude3a',\n  'u6307':'\\ud83c\\ude2f\\ufe0f',\n  'u6708':'\\ud83c\\ude37\\ufe0f',\n  'u6709':'\\ud83c\\ude36',\n  'u6e80':'\\ud83c\\ude35',\n  'u7121':'\\ud83c\\ude1a\\ufe0f',\n  'u7533':'\\ud83c\\ude38',\n  'u7981':'\\ud83c\\ude32',\n  'u7a7a':'\\ud83c\\ude33',\n  'umbrella':'\\u2614\\ufe0f',\n  'unamused':'\\ud83d\\ude12',\n  'underage':'\\ud83d\\udd1e',\n  'unicorn':'\\ud83e\\udd84',\n  'unlock':'\\ud83d\\udd13',\n  'up':'\\ud83c\\udd99',\n  'upside_down_face':'\\ud83d\\ude43',\n  'v':'\\u270c\\ufe0f',\n  'vertical_traffic_light':'\\ud83d\\udea6',\n  'vhs':'\\ud83d\\udcfc',\n  'vibration_mode':'\\ud83d\\udcf3',\n  'video_camera':'\\ud83d\\udcf9',\n  'video_game':'\\ud83c\\udfae',\n  'violin':'\\ud83c\\udfbb',\n  'virgo':'\\u264d\\ufe0f',\n  'volcano':'\\ud83c\\udf0b',\n  'volleyball':'\\ud83c\\udfd0',\n  'vs':'\\ud83c\\udd9a',\n  'vulcan_salute':'\\ud83d\\udd96',\n  'walking_man':'\\ud83d\\udeb6',\n  'walking_woman':'\\ud83d\\udeb6&zwj;\\u2640\\ufe0f',\n  'waning_crescent_moon':'\\ud83c\\udf18',\n  'waning_gibbous_moon':'\\ud83c\\udf16',\n  'warning':'\\u26a0\\ufe0f',\n  'wastebasket':'\\ud83d\\uddd1',\n  'watch':'\\u231a\\ufe0f',\n  'water_buffalo':'\\ud83d\\udc03',\n  'watermelon':'\\ud83c\\udf49',\n  'wave':'\\ud83d\\udc4b',\n  'wavy_dash':'\\u3030\\ufe0f',\n  'waxing_crescent_moon':'\\ud83c\\udf12',\n  'wc':'\\ud83d\\udebe',\n  'weary':'\\ud83d\\ude29',\n  'wedding':'\\ud83d\\udc92',\n  'weight_lifting_man':'\\ud83c\\udfcb\\ufe0f',\n  'weight_lifting_woman':'\\ud83c\\udfcb\\ufe0f&zwj;\\u2640\\ufe0f',\n  'whale':'\\ud83d\\udc33',\n  'whale2':'\\ud83d\\udc0b',\n  'wheel_of_dharma':'\\u2638\\ufe0f',\n  'wheelchair':'\\u267f\\ufe0f',\n  'white_check_mark':'\\u2705',\n  'white_circle':'\\u26aa\\ufe0f',\n  'white_flag':'\\ud83c\\udff3\\ufe0f',\n  'white_flower':'\\ud83d\\udcae',\n  'white_large_square':'\\u2b1c\\ufe0f',\n  'white_medium_small_square':'\\u25fd\\ufe0f',\n  'white_medium_square':'\\u25fb\\ufe0f',\n  'white_small_square':'\\u25ab\\ufe0f',\n  'white_square_button':'\\ud83d\\udd33',\n  'wilted_flower':'\\ud83e\\udd40',\n  'wind_chime':'\\ud83c\\udf90',\n  'wind_face':'\\ud83c\\udf2c',\n  'wine_glass':'\\ud83c\\udf77',\n  'wink':'\\ud83d\\ude09',\n  'wolf':'\\ud83d\\udc3a',\n  'woman':'\\ud83d\\udc69',\n  'woman_artist':'\\ud83d\\udc69&zwj;\\ud83c\\udfa8',\n  'woman_astronaut':'\\ud83d\\udc69&zwj;\\ud83d\\ude80',\n  'woman_cartwheeling':'\\ud83e\\udd38&zwj;\\u2640\\ufe0f',\n  'woman_cook':'\\ud83d\\udc69&zwj;\\ud83c\\udf73',\n  'woman_facepalming':'\\ud83e\\udd26&zwj;\\u2640\\ufe0f',\n  'woman_factory_worker':'\\ud83d\\udc69&zwj;\\ud83c\\udfed',\n  'woman_farmer':'\\ud83d\\udc69&zwj;\\ud83c\\udf3e',\n  'woman_firefighter':'\\ud83d\\udc69&zwj;\\ud83d\\ude92',\n  'woman_health_worker':'\\ud83d\\udc69&zwj;\\u2695\\ufe0f',\n  'woman_judge':'\\ud83d\\udc69&zwj;\\u2696\\ufe0f',\n  'woman_juggling':'\\ud83e\\udd39&zwj;\\u2640\\ufe0f',\n  'woman_mechanic':'\\ud83d\\udc69&zwj;\\ud83d\\udd27',\n  'woman_office_worker':'\\ud83d\\udc69&zwj;\\ud83d\\udcbc',\n  'woman_pilot':'\\ud83d\\udc69&zwj;\\u2708\\ufe0f',\n  'woman_playing_handball':'\\ud83e\\udd3e&zwj;\\u2640\\ufe0f',\n  'woman_playing_water_polo':'\\ud83e\\udd3d&zwj;\\u2640\\ufe0f',\n  'woman_scientist':'\\ud83d\\udc69&zwj;\\ud83d\\udd2c',\n  'woman_shrugging':'\\ud83e\\udd37&zwj;\\u2640\\ufe0f',\n  'woman_singer':'\\ud83d\\udc69&zwj;\\ud83c\\udfa4',\n  'woman_student':'\\ud83d\\udc69&zwj;\\ud83c\\udf93',\n  'woman_teacher':'\\ud83d\\udc69&zwj;\\ud83c\\udfeb',\n  'woman_technologist':'\\ud83d\\udc69&zwj;\\ud83d\\udcbb',\n  'woman_with_turban':'\\ud83d\\udc73&zwj;\\u2640\\ufe0f',\n  'womans_clothes':'\\ud83d\\udc5a',\n  'womans_hat':'\\ud83d\\udc52',\n  'women_wrestling':'\\ud83e\\udd3c&zwj;\\u2640\\ufe0f',\n  'womens':'\\ud83d\\udeba',\n  'world_map':'\\ud83d\\uddfa',\n  'worried':'\\ud83d\\ude1f',\n  'wrench':'\\ud83d\\udd27',\n  'writing_hand':'\\u270d\\ufe0f',\n  'x':'\\u274c',\n  'yellow_heart':'\\ud83d\\udc9b',\n  'yen':'\\ud83d\\udcb4',\n  'yin_yang':'\\u262f\\ufe0f',\n  'yum':'\\ud83d\\ude0b',\n  'zap':'\\u26a1\\ufe0f',\n  'zipper_mouth_face':'\\ud83e\\udd10',\n  'zzz':'\\ud83d\\udca4',\n\n  /* special emojis :P */\n  'octocat':  '<img alt=\":octocat:\" height=\"20\" width=\"20\" align=\"absmiddle\" src=\"https://assets-cdn.github.com/images/icons/emoji/octocat.png\">',\n  'showdown': '<span style=\"font-family: \\'Anonymous Pro\\', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;\">S</span>'\n};\n\r\n/**\n * Created by Estevao on 31-05-2015.\n */\n\n/**\n * Showdown Converter class\n * @class\n * @param {object} [converterOptions]\n * @returns {Converter}\n */\nshowdown.Converter = function (converterOptions) {\n  'use strict';\n\n  var\n      /**\n       * Options used by this converter\n       * @private\n       * @type {{}}\n       */\n      options = {},\n\n      /**\n       * Language extensions used by this converter\n       * @private\n       * @type {Array}\n       */\n      langExtensions = [],\n\n      /**\n       * Output modifiers extensions used by this converter\n       * @private\n       * @type {Array}\n       */\n      outputModifiers = [],\n\n      /**\n       * Event listeners\n       * @private\n       * @type {{}}\n       */\n      listeners = {},\n\n      /**\n       * The flavor set in this converter\n       */\n      setConvFlavor = setFlavor,\n\n      /**\n       * Metadata of the document\n       * @type {{parsed: {}, raw: string, format: string}}\n       */\n      metadata = {\n        parsed: {},\n        raw: '',\n        format: ''\n      };\n\n  _constructor();\n\n  /**\n   * Converter constructor\n   * @private\n   */\n  function _constructor () {\n    converterOptions = converterOptions || {};\n\n    for (var gOpt in globalOptions) {\n      if (globalOptions.hasOwnProperty(gOpt)) {\n        options[gOpt] = globalOptions[gOpt];\n      }\n    }\n\n    // Merge options\n    if (typeof converterOptions === 'object') {\n      for (var opt in converterOptions) {\n        if (converterOptions.hasOwnProperty(opt)) {\n          options[opt] = converterOptions[opt];\n        }\n      }\n    } else {\n      throw Error('Converter expects the passed parameter to be an object, but ' + typeof converterOptions +\n      ' was passed instead.');\n    }\n\n    if (options.extensions) {\n      showdown.helper.forEach(options.extensions, _parseExtension);\n    }\n  }\n\n  /**\n   * Parse extension\n   * @param {*} ext\n   * @param {string} [name='']\n   * @private\n   */\n  function _parseExtension (ext, name) {\n\n    name = name || null;\n    // If it's a string, the extension was previously loaded\n    if (showdown.helper.isString(ext)) {\n      ext = showdown.helper.stdExtName(ext);\n      name = ext;\n\n      // LEGACY_SUPPORT CODE\n      if (showdown.extensions[ext]) {\n        console.warn('DEPRECATION WARNING: ' + ext + ' is an old extension that uses a deprecated loading method.' +\n          'Please inform the developer that the extension should be updated!');\n        legacyExtensionLoading(showdown.extensions[ext], ext);\n        return;\n        // END LEGACY SUPPORT CODE\n\n      } else if (!showdown.helper.isUndefined(extensions[ext])) {\n        ext = extensions[ext];\n\n      } else {\n        throw Error('Extension \"' + ext + '\" could not be loaded. It was either not found or is not a valid extension.');\n      }\n    }\n\n    if (typeof ext === 'function') {\n      ext = ext();\n    }\n\n    if (!showdown.helper.isArray(ext)) {\n      ext = [ext];\n    }\n\n    var validExt = validate(ext, name);\n    if (!validExt.valid) {\n      throw Error(validExt.error);\n    }\n\n    for (var i = 0; i < ext.length; ++i) {\n      switch (ext[i].type) {\n\n        case 'lang':\n          langExtensions.push(ext[i]);\n          break;\n\n        case 'output':\n          outputModifiers.push(ext[i]);\n          break;\n      }\n      if (ext[i].hasOwnProperty('listeners')) {\n        for (var ln in ext[i].listeners) {\n          if (ext[i].listeners.hasOwnProperty(ln)) {\n            listen(ln, ext[i].listeners[ln]);\n          }\n        }\n      }\n    }\n\n  }\n\n  /**\n   * LEGACY_SUPPORT\n   * @param {*} ext\n   * @param {string} name\n   */\n  function legacyExtensionLoading (ext, name) {\n    if (typeof ext === 'function') {\n      ext = ext(new showdown.Converter());\n    }\n    if (!showdown.helper.isArray(ext)) {\n      ext = [ext];\n    }\n    var valid = validate(ext, name);\n\n    if (!valid.valid) {\n      throw Error(valid.error);\n    }\n\n    for (var i = 0; i < ext.length; ++i) {\n      switch (ext[i].type) {\n        case 'lang':\n          langExtensions.push(ext[i]);\n          break;\n        case 'output':\n          outputModifiers.push(ext[i]);\n          break;\n        default:// should never reach here\n          throw Error('Extension loader error: Type unrecognized!!!');\n      }\n    }\n  }\n\n  /**\n   * Listen to an event\n   * @param {string} name\n   * @param {function} callback\n   */\n  function listen (name, callback) {\n    if (!showdown.helper.isString(name)) {\n      throw Error('Invalid argument in converter.listen() method: name must be a string, but ' + typeof name + ' given');\n    }\n\n    if (typeof callback !== 'function') {\n      throw Error('Invalid argument in converter.listen() method: callback must be a function, but ' + typeof callback + ' given');\n    }\n\n    if (!listeners.hasOwnProperty(name)) {\n      listeners[name] = [];\n    }\n    listeners[name].push(callback);\n  }\n\n  function rTrimInputText (text) {\n    var rsp = text.match(/^\\s*/)[0].length,\n        rgx = new RegExp('^\\\\s{0,' + rsp + '}', 'gm');\n    return text.replace(rgx, '');\n  }\n\n  /**\n   * Dispatch an event\n   * @private\n   * @param {string} evtName Event name\n   * @param {string} text Text\n   * @param {{}} options Converter Options\n   * @param {{}} globals\n   * @returns {string}\n   */\n  this._dispatch = function dispatch (evtName, text, options, globals) {\n    if (listeners.hasOwnProperty(evtName)) {\n      for (var ei = 0; ei < listeners[evtName].length; ++ei) {\n        var nText = listeners[evtName][ei](evtName, text, this, options, globals);\n        if (nText && typeof nText !== 'undefined') {\n          text = nText;\n        }\n      }\n    }\n    return text;\n  };\n\n  /**\n   * Listen to an event\n   * @param {string} name\n   * @param {function} callback\n   * @returns {showdown.Converter}\n   */\n  this.listen = function (name, callback) {\n    listen(name, callback);\n    return this;\n  };\n\n  /**\n   * Converts a markdown string into HTML\n   * @param {string} text\n   * @returns {*}\n   */\n  this.makeHtml = function (text) {\n    //check if text is not falsy\n    if (!text) {\n      return text;\n    }\n\n    var globals = {\n      gHtmlBlocks:     [],\n      gHtmlMdBlocks:   [],\n      gHtmlSpans:      [],\n      gUrls:           {},\n      gTitles:         {},\n      gDimensions:     {},\n      gListLevel:      0,\n      hashLinkCounts:  {},\n      langExtensions:  langExtensions,\n      outputModifiers: outputModifiers,\n      converter:       this,\n      ghCodeBlocks:    [],\n      metadata: {\n        parsed: {},\n        raw: '',\n        format: ''\n      }\n    };\n\n    // This lets us use ¨ trema as an escape char to avoid md5 hashes\n    // The choice of character is arbitrary; anything that isn't\n    // magic in Markdown will work.\n    text = text.replace(/¨/g, '¨T');\n\n    // Replace $ with ¨D\n    // RegExp interprets $ as a special character\n    // when it's in a replacement string\n    text = text.replace(/\\$/g, '¨D');\n\n    // Standardize line endings\n    text = text.replace(/\\r\\n/g, '\\n'); // DOS to Unix\n    text = text.replace(/\\r/g, '\\n'); // Mac to Unix\n\n    // Stardardize line spaces\n    text = text.replace(/\\u00A0/g, '&nbsp;');\n\n    if (options.smartIndentationFix) {\n      text = rTrimInputText(text);\n    }\n\n    // Make sure text begins and ends with a couple of newlines:\n    text = '\\n\\n' + text + '\\n\\n';\n\n    // detab\n    text = showdown.subParser('detab')(text, options, globals);\n\n    /**\n     * Strip any lines consisting only of spaces and tabs.\n     * This makes subsequent regexs easier to write, because we can\n     * match consecutive blank lines with /\\n+/ instead of something\n     * contorted like /[ \\t]*\\n+/\n     */\n    text = text.replace(/^[ \\t]+$/mg, '');\n\n    //run languageExtensions\n    showdown.helper.forEach(langExtensions, function (ext) {\n      text = showdown.subParser('runExtension')(ext, text, options, globals);\n    });\n\n    // run the sub parsers\n    text = showdown.subParser('metadata')(text, options, globals);\n    text = showdown.subParser('hashPreCodeTags')(text, options, globals);\n    text = showdown.subParser('githubCodeBlocks')(text, options, globals);\n    text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n    text = showdown.subParser('hashCodeTags')(text, options, globals);\n    text = showdown.subParser('stripLinkDefinitions')(text, options, globals);\n    text = showdown.subParser('blockGamut')(text, options, globals);\n    text = showdown.subParser('unhashHTMLSpans')(text, options, globals);\n    text = showdown.subParser('unescapeSpecialChars')(text, options, globals);\n\n    // attacklab: Restore dollar signs\n    text = text.replace(/¨D/g, '$$');\n\n    // attacklab: Restore tremas\n    text = text.replace(/¨T/g, '¨');\n\n    // render a complete html document instead of a partial if the option is enabled\n    text = showdown.subParser('completeHTMLDocument')(text, options, globals);\n\n    // Run output modifiers\n    showdown.helper.forEach(outputModifiers, function (ext) {\n      text = showdown.subParser('runExtension')(ext, text, options, globals);\n    });\n\n    // update metadata\n    metadata = globals.metadata;\n    return text;\n  };\n\n  /**\n   * Converts an HTML string into a markdown string\n   * @param src\n   * @param [HTMLParser] A WHATWG DOM and HTML parser, such as JSDOM. If none is supplied, window.document will be used.\n   * @returns {string}\n   */\n  this.makeMarkdown = this.makeMd = function (src, HTMLParser) {\n\n    // replace \\r\\n with \\n\n    src = src.replace(/\\r\\n/g, '\\n');\n    src = src.replace(/\\r/g, '\\n'); // old macs\n\n    // due to an edge case, we need to find this: > <\n    // to prevent removing of non silent white spaces\n    // ex: <em>this is</em> <strong>sparta</strong>\n    src = src.replace(/>[ \\t]+</, '>¨NBSP;<');\n\n    if (!HTMLParser) {\n      if (window && window.document) {\n        HTMLParser = window.document;\n      } else {\n        throw new Error('HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM');\n      }\n    }\n\n    var doc = HTMLParser.createElement('div');\n    doc.innerHTML = src;\n\n    var globals = {\n      preList: substitutePreCodeTags(doc)\n    };\n\n    // remove all newlines and collapse spaces\n    clean(doc);\n\n    // some stuff, like accidental reference links must now be escaped\n    // TODO\n    // doc.innerHTML = doc.innerHTML.replace(/\\[[\\S\\t ]]/);\n\n    var nodes = doc.childNodes,\n        mdDoc = '';\n\n    for (var i = 0; i < nodes.length; i++) {\n      mdDoc += showdown.subParser('makeMarkdown.node')(nodes[i], globals);\n    }\n\n    function clean (node) {\n      for (var n = 0; n < node.childNodes.length; ++n) {\n        var child = node.childNodes[n];\n        if (child.nodeType === 3) {\n          if (!/\\S/.test(child.nodeValue) && !/^[ ]+$/.test(child.nodeValue)) {\n            node.removeChild(child);\n            --n;\n          } else {\n            child.nodeValue = child.nodeValue.split('\\n').join(' ');\n            child.nodeValue = child.nodeValue.replace(/(\\s)+/g, '$1');\n          }\n        } else if (child.nodeType === 1) {\n          clean(child);\n        }\n      }\n    }\n\n    // find all pre tags and replace contents with placeholder\n    // we need this so that we can remove all indentation from html\n    // to ease up parsing\n    function substitutePreCodeTags (doc) {\n\n      var pres = doc.querySelectorAll('pre'),\n          presPH = [];\n\n      for (var i = 0; i < pres.length; ++i) {\n\n        if (pres[i].childElementCount === 1 && pres[i].firstChild.tagName.toLowerCase() === 'code') {\n          var content = pres[i].firstChild.innerHTML.trim(),\n              language = pres[i].firstChild.getAttribute('data-language') || '';\n\n          // if data-language attribute is not defined, then we look for class language-*\n          if (language === '') {\n            var classes = pres[i].firstChild.className.split(' ');\n            for (var c = 0; c < classes.length; ++c) {\n              var matches = classes[c].match(/^language-(.+)$/);\n              if (matches !== null) {\n                language = matches[1];\n                break;\n              }\n            }\n          }\n\n          // unescape html entities in content\n          content = showdown.helper.unescapeHTMLEntities(content);\n\n          presPH.push(content);\n          pres[i].outerHTML = '<precode language=\"' + language + '\" precodenum=\"' + i.toString() + '\"></precode>';\n        } else {\n          presPH.push(pres[i].innerHTML);\n          pres[i].innerHTML = '';\n          pres[i].setAttribute('prenum', i.toString());\n        }\n      }\n      return presPH;\n    }\n\n    return mdDoc;\n  };\n\n  /**\n   * Set an option of this Converter instance\n   * @param {string} key\n   * @param {*} value\n   */\n  this.setOption = function (key, value) {\n    options[key] = value;\n  };\n\n  /**\n   * Get the option of this Converter instance\n   * @param {string} key\n   * @returns {*}\n   */\n  this.getOption = function (key) {\n    return options[key];\n  };\n\n  /**\n   * Get the options of this Converter instance\n   * @returns {{}}\n   */\n  this.getOptions = function () {\n    return options;\n  };\n\n  /**\n   * Add extension to THIS converter\n   * @param {{}} extension\n   * @param {string} [name=null]\n   */\n  this.addExtension = function (extension, name) {\n    name = name || null;\n    _parseExtension(extension, name);\n  };\n\n  /**\n   * Use a global registered extension with THIS converter\n   * @param {string} extensionName Name of the previously registered extension\n   */\n  this.useExtension = function (extensionName) {\n    _parseExtension(extensionName);\n  };\n\n  /**\n   * Set the flavor THIS converter should use\n   * @param {string} name\n   */\n  this.setFlavor = function (name) {\n    if (!flavor.hasOwnProperty(name)) {\n      throw Error(name + ' flavor was not found');\n    }\n    var preset = flavor[name];\n    setConvFlavor = name;\n    for (var option in preset) {\n      if (preset.hasOwnProperty(option)) {\n        options[option] = preset[option];\n      }\n    }\n  };\n\n  /**\n   * Get the currently set flavor of this converter\n   * @returns {string}\n   */\n  this.getFlavor = function () {\n    return setConvFlavor;\n  };\n\n  /**\n   * Remove an extension from THIS converter.\n   * Note: This is a costly operation. It's better to initialize a new converter\n   * and specify the extensions you wish to use\n   * @param {Array} extension\n   */\n  this.removeExtension = function (extension) {\n    if (!showdown.helper.isArray(extension)) {\n      extension = [extension];\n    }\n    for (var a = 0; a < extension.length; ++a) {\n      var ext = extension[a];\n      for (var i = 0; i < langExtensions.length; ++i) {\n        if (langExtensions[i] === ext) {\n          langExtensions.splice(i, 1);\n        }\n      }\n      for (var ii = 0; ii < outputModifiers.length; ++ii) {\n        if (outputModifiers[ii] === ext) {\n          outputModifiers.splice(ii, 1);\n        }\n      }\n    }\n  };\n\n  /**\n   * Get all extension of THIS converter\n   * @returns {{language: Array, output: Array}}\n   */\n  this.getAllExtensions = function () {\n    return {\n      language: langExtensions,\n      output: outputModifiers\n    };\n  };\n\n  /**\n   * Get the metadata of the previously parsed document\n   * @param raw\n   * @returns {string|{}}\n   */\n  this.getMetadata = function (raw) {\n    if (raw) {\n      return metadata.raw;\n    } else {\n      return metadata.parsed;\n    }\n  };\n\n  /**\n   * Get the metadata format of the previously parsed document\n   * @returns {string}\n   */\n  this.getMetadataFormat = function () {\n    return metadata.format;\n  };\n\n  /**\n   * Private: set a single key, value metadata pair\n   * @param {string} key\n   * @param {string} value\n   */\n  this._setMetadataPair = function (key, value) {\n    metadata.parsed[key] = value;\n  };\n\n  /**\n   * Private: set metadata format\n   * @param {string} format\n   */\n  this._setMetadataFormat = function (format) {\n    metadata.format = format;\n  };\n\n  /**\n   * Private: set metadata raw text\n   * @param {string} raw\n   */\n  this._setMetadataRaw = function (raw) {\n    metadata.raw = raw;\n  };\n};\n\r\n/**\n * Turn Markdown link shortcuts into XHTML <a> tags.\n */\nshowdown.subParser('anchors', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('anchors.before', text, options, globals);\n\n  var writeAnchorTag = function (wholeMatch, linkText, linkId, url, m5, m6, title) {\n    if (showdown.helper.isUndefined(title)) {\n      title = '';\n    }\n    linkId = linkId.toLowerCase();\n\n    // Special case for explicit empty url\n    if (wholeMatch.search(/\\(<?\\s*>? ?(['\"].*['\"])?\\)$/m) > -1) {\n      url = '';\n    } else if (!url) {\n      if (!linkId) {\n        // lower-case and turn embedded newlines into spaces\n        linkId = linkText.toLowerCase().replace(/ ?\\n/g, ' ');\n      }\n      url = '#' + linkId;\n\n      if (!showdown.helper.isUndefined(globals.gUrls[linkId])) {\n        url = globals.gUrls[linkId];\n        if (!showdown.helper.isUndefined(globals.gTitles[linkId])) {\n          title = globals.gTitles[linkId];\n        }\n      } else {\n        return wholeMatch;\n      }\n    }\n\n    //url = showdown.helper.escapeCharacters(url, '*_', false); // replaced line to improve performance\n    url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n\n    var result = '<a href=\"' + url + '\"';\n\n    if (title !== '' && title !== null) {\n      title = title.replace(/\"/g, '&quot;');\n      //title = showdown.helper.escapeCharacters(title, '*_', false); // replaced line to improve performance\n      title = title.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n      result += ' title=\"' + title + '\"';\n    }\n\n    // optionLinksInNewWindow only applies\n    // to external links. Hash links (#) open in same page\n    if (options.openLinksInNewWindow && !/^#/.test(url)) {\n      // escaped _\n      result += ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n    }\n\n    result += '>' + linkText + '</a>';\n\n    return result;\n  };\n\n  // First, handle reference-style links: [link text] [id]\n  text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)] ?(?:\\n *)?\\[(.*?)]()()()()/g, writeAnchorTag);\n\n  // Next, inline-style links: [link text](url \"optional title\")\n  // cases with crazy urls like ./image/cat1).png\n  text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]?<([^>]*)>(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,\n    writeAnchorTag);\n\n  // normal cases\n  text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]?<?([\\S]+?(?:\\([\\S]*?\\)[\\S]*?)?)>?(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,\n    writeAnchorTag);\n\n  // handle reference-style shortcuts: [link text]\n  // These must come last in case you've also got [link test][1]\n  // or [link test](/foo)\n  text = text.replace(/\\[([^\\[\\]]+)]()()()()()/g, writeAnchorTag);\n\n  // Lastly handle GithubMentions if option is enabled\n  if (options.ghMentions) {\n    text = text.replace(/(^|\\s)(\\\\)?(@([a-z\\d]+(?:[a-z\\d.-]+?[a-z\\d]+)*))/gmi, function (wm, st, escape, mentions, username) {\n      if (escape === '\\\\') {\n        return st + mentions;\n      }\n\n      //check if options.ghMentionsLink is a string\n      if (!showdown.helper.isString(options.ghMentionsLink)) {\n        throw new Error('ghMentionsLink option must be a string');\n      }\n      var lnk = options.ghMentionsLink.replace(/\\{u}/g, username),\n          target = '';\n      if (options.openLinksInNewWindow) {\n        target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n      }\n      return st + '<a href=\"' + lnk + '\"' + target + '>' + mentions + '</a>';\n    });\n  }\n\n  text = globals.converter._dispatch('anchors.after', text, options, globals);\n  return text;\n});\n\r\n// url allowed chars [a-z\\d_.~:/?#[]@!$&'()*+,;=-]\n\nvar simpleURLRegex  = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+?\\.[^'\">\\s]+?)()(\\1)?(?=\\s|$)(?![\"<>])/gi,\n    simpleURLRegex2 = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+\\.[^'\">\\s]+?)([.!?,()\\[\\]])?(\\1)?(?=\\s|$)(?![\"<>])/gi,\n    delimUrlRegex   = /()<(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+)()>()/gi,\n    simpleMailRegex = /(^|\\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)(?=$|\\s)/gmi,\n    delimMailRegex  = /<()(?:mailto:)?([-.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)>/gi,\n\n    replaceLink = function (options) {\n      'use strict';\n      return function (wm, leadingMagicChars, link, m2, m3, trailingPunctuation, trailingMagicChars) {\n        link = link.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n        var lnkTxt = link,\n            append = '',\n            target = '',\n            lmc    = leadingMagicChars || '',\n            tmc    = trailingMagicChars || '';\n        if (/^www\\./i.test(link)) {\n          link = link.replace(/^www\\./i, 'http://www.');\n        }\n        if (options.excludeTrailingPunctuationFromURLs && trailingPunctuation) {\n          append = trailingPunctuation;\n        }\n        if (options.openLinksInNewWindow) {\n          target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n        }\n        return lmc + '<a href=\"' + link + '\"' + target + '>' + lnkTxt + '</a>' + append + tmc;\n      };\n    },\n\n    replaceMail = function (options, globals) {\n      'use strict';\n      return function (wholeMatch, b, mail) {\n        var href = 'mailto:';\n        b = b || '';\n        mail = showdown.subParser('unescapeSpecialChars')(mail, options, globals);\n        if (options.encodeEmails) {\n          href = showdown.helper.encodeEmailAddress(href + mail);\n          mail = showdown.helper.encodeEmailAddress(mail);\n        } else {\n          href = href + mail;\n        }\n        return b + '<a href=\"' + href + '\">' + mail + '</a>';\n      };\n    };\n\nshowdown.subParser('autoLinks', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('autoLinks.before', text, options, globals);\n\n  text = text.replace(delimUrlRegex, replaceLink(options));\n  text = text.replace(delimMailRegex, replaceMail(options, globals));\n\n  text = globals.converter._dispatch('autoLinks.after', text, options, globals);\n\n  return text;\n});\n\nshowdown.subParser('simplifiedAutoLinks', function (text, options, globals) {\n  'use strict';\n\n  if (!options.simplifiedAutoLink) {\n    return text;\n  }\n\n  text = globals.converter._dispatch('simplifiedAutoLinks.before', text, options, globals);\n\n  if (options.excludeTrailingPunctuationFromURLs) {\n    text = text.replace(simpleURLRegex2, replaceLink(options));\n  } else {\n    text = text.replace(simpleURLRegex, replaceLink(options));\n  }\n  text = text.replace(simpleMailRegex, replaceMail(options, globals));\n\n  text = globals.converter._dispatch('simplifiedAutoLinks.after', text, options, globals);\n\n  return text;\n});\n\r\n/**\n * These are all the transformations that form block-level\n * tags like paragraphs, headers, and list items.\n */\nshowdown.subParser('blockGamut', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('blockGamut.before', text, options, globals);\n\n  // we parse blockquotes first so that we can have headings and hrs\n  // inside blockquotes\n  text = showdown.subParser('blockQuotes')(text, options, globals);\n  text = showdown.subParser('headers')(text, options, globals);\n\n  // Do Horizontal Rules:\n  text = showdown.subParser('horizontalRule')(text, options, globals);\n\n  text = showdown.subParser('lists')(text, options, globals);\n  text = showdown.subParser('codeBlocks')(text, options, globals);\n  text = showdown.subParser('tables')(text, options, globals);\n\n  // We already ran _HashHTMLBlocks() before, in Markdown(), but that\n  // was to escape raw HTML in the original Markdown source. This time,\n  // we're escaping the markup we've just created, so that we don't wrap\n  // <p> tags around block-level tags.\n  text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n  text = showdown.subParser('paragraphs')(text, options, globals);\n\n  text = globals.converter._dispatch('blockGamut.after', text, options, globals);\n\n  return text;\n});\n\r\nshowdown.subParser('blockQuotes', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('blockQuotes.before', text, options, globals);\n\n  // add a couple extra lines after the text and endtext mark\n  text = text + '\\n\\n';\n\n  var rgx = /(^ {0,3}>[ \\t]?.+\\n(.+\\n)*\\n*)+/gm;\n\n  if (options.splitAdjacentBlockquotes) {\n    rgx = /^ {0,3}>[\\s\\S]*?(?:\\n\\n)/gm;\n  }\n\n  text = text.replace(rgx, function (bq) {\n    // attacklab: hack around Konqueror 3.5.4 bug:\n    // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n    bq = bq.replace(/^[ \\t]*>[ \\t]?/gm, ''); // trim one level of quoting\n\n    // attacklab: clean up hack\n    bq = bq.replace(/¨0/g, '');\n\n    bq = bq.replace(/^[ \\t]+$/gm, ''); // trim whitespace-only lines\n    bq = showdown.subParser('githubCodeBlocks')(bq, options, globals);\n    bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse\n\n    bq = bq.replace(/(^|\\n)/g, '$1  ');\n    // These leading spaces screw with <pre> content, so we need to fix that:\n    bq = bq.replace(/(\\s*<pre>[^\\r]+?<\\/pre>)/gm, function (wholeMatch, m1) {\n      var pre = m1;\n      // attacklab: hack around Konqueror 3.5.4 bug:\n      pre = pre.replace(/^  /mg, '¨0');\n      pre = pre.replace(/¨0/g, '');\n      return pre;\n    });\n\n    return showdown.subParser('hashBlock')('<blockquote>\\n' + bq + '\\n</blockquote>', options, globals);\n  });\n\n  text = globals.converter._dispatch('blockQuotes.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Process Markdown `<pre><code>` blocks.\n */\nshowdown.subParser('codeBlocks', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('codeBlocks.before', text, options, globals);\n\n  // sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n  text += '¨0';\n\n  var pattern = /(?:\\n\\n|^)((?:(?:[ ]{4}|\\t).*\\n+)+)(\\n*[ ]{0,3}[^ \\t\\n]|(?=¨0))/g;\n  text = text.replace(pattern, function (wholeMatch, m1, m2) {\n    var codeblock = m1,\n        nextChar = m2,\n        end = '\\n';\n\n    codeblock = showdown.subParser('outdent')(codeblock, options, globals);\n    codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n    codeblock = showdown.subParser('detab')(codeblock, options, globals);\n    codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n    codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing newlines\n\n    if (options.omitExtraWLInCodeBlocks) {\n      end = '';\n    }\n\n    codeblock = '<pre><code>' + codeblock + end + '</code></pre>';\n\n    return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;\n  });\n\n  // strip sentinel\n  text = text.replace(/¨0/, '');\n\n  text = globals.converter._dispatch('codeBlocks.after', text, options, globals);\n  return text;\n});\n\r\n/**\n *\n *   *  Backtick quotes are used for <code></code> spans.\n *\n *   *  You can use multiple backticks as the delimiters if you want to\n *     include literal backticks in the code span. So, this input:\n *\n *         Just type ``foo `bar` baz`` at the prompt.\n *\n *       Will translate to:\n *\n *         <p>Just type <code>foo `bar` baz</code> at the prompt.</p>\n *\n *    There's no arbitrary limit to the number of backticks you\n *    can use as delimters. If you need three consecutive backticks\n *    in your code, use four for delimiters, etc.\n *\n *  *  You can use spaces to get literal backticks at the edges:\n *\n *         ... type `` `bar` `` ...\n *\n *       Turns to:\n *\n *         ... type <code>`bar`</code> ...\n */\nshowdown.subParser('codeSpans', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('codeSpans.before', text, options, globals);\n\n  if (typeof (text) === 'undefined') {\n    text = '';\n  }\n  text = text.replace(/(^|[^\\\\])(`+)([^\\r]*?[^`])\\2(?!`)/gm,\n    function (wholeMatch, m1, m2, m3) {\n      var c = m3;\n      c = c.replace(/^([ \\t]*)/g, '');\t// leading whitespace\n      c = c.replace(/[ \\t]*$/g, '');\t// trailing whitespace\n      c = showdown.subParser('encodeCode')(c, options, globals);\n      c = m1 + '<code>' + c + '</code>';\n      c = showdown.subParser('hashHTMLSpans')(c, options, globals);\n      return c;\n    }\n  );\n\n  text = globals.converter._dispatch('codeSpans.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Create a full HTML document from the processed markdown\n */\nshowdown.subParser('completeHTMLDocument', function (text, options, globals) {\n  'use strict';\n\n  if (!options.completeHTMLDocument) {\n    return text;\n  }\n\n  text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals);\n\n  var doctype = 'html',\n      doctypeParsed = '<!DOCTYPE HTML>\\n',\n      title = '',\n      charset = '<meta charset=\"utf-8\">\\n',\n      lang = '',\n      metadata = '';\n\n  if (typeof globals.metadata.parsed.doctype !== 'undefined') {\n    doctypeParsed = '<!DOCTYPE ' +  globals.metadata.parsed.doctype + '>\\n';\n    doctype = globals.metadata.parsed.doctype.toString().toLowerCase();\n    if (doctype === 'html' || doctype === 'html5') {\n      charset = '<meta charset=\"utf-8\">';\n    }\n  }\n\n  for (var meta in globals.metadata.parsed) {\n    if (globals.metadata.parsed.hasOwnProperty(meta)) {\n      switch (meta.toLowerCase()) {\n        case 'doctype':\n          break;\n\n        case 'title':\n          title = '<title>' +  globals.metadata.parsed.title + '</title>\\n';\n          break;\n\n        case 'charset':\n          if (doctype === 'html' || doctype === 'html5') {\n            charset = '<meta charset=\"' + globals.metadata.parsed.charset + '\">\\n';\n          } else {\n            charset = '<meta name=\"charset\" content=\"' + globals.metadata.parsed.charset + '\">\\n';\n          }\n          break;\n\n        case 'language':\n        case 'lang':\n          lang = ' lang=\"' + globals.metadata.parsed[meta] + '\"';\n          metadata += '<meta name=\"' + meta + '\" content=\"' + globals.metadata.parsed[meta] + '\">\\n';\n          break;\n\n        default:\n          metadata += '<meta name=\"' + meta + '\" content=\"' + globals.metadata.parsed[meta] + '\">\\n';\n      }\n    }\n  }\n\n  text = doctypeParsed + '<html' + lang + '>\\n<head>\\n' + title + charset + metadata + '</head>\\n<body>\\n' + text.trim() + '\\n</body>\\n</html>';\n\n  text = globals.converter._dispatch('completeHTMLDocument.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Convert all tabs to spaces\n */\nshowdown.subParser('detab', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('detab.before', text, options, globals);\n\n  // expand first n-1 tabs\n  text = text.replace(/\\t(?=\\t)/g, '    '); // g_tab_width\n\n  // replace the nth with two sentinels\n  text = text.replace(/\\t/g, '¨A¨B');\n\n  // use the sentinel to anchor our regex so it doesn't explode\n  text = text.replace(/¨B(.+?)¨A/g, function (wholeMatch, m1) {\n    var leadingText = m1,\n        numSpaces = 4 - leadingText.length % 4;  // g_tab_width\n\n    // there *must* be a better way to do this:\n    for (var i = 0; i < numSpaces; i++) {\n      leadingText += ' ';\n    }\n\n    return leadingText;\n  });\n\n  // clean up sentinels\n  text = text.replace(/¨A/g, '    ');  // g_tab_width\n  text = text.replace(/¨B/g, '');\n\n  text = globals.converter._dispatch('detab.after', text, options, globals);\n  return text;\n});\n\r\nshowdown.subParser('ellipsis', function (text, options, globals) {\n  'use strict';\n\n  if (!options.ellipsis) {\n    return text;\n  }\n\n  text = globals.converter._dispatch('ellipsis.before', text, options, globals);\n\n  text = text.replace(/\\.\\.\\./g, '…');\n\n  text = globals.converter._dispatch('ellipsis.after', text, options, globals);\n\n  return text;\n});\n\r\n/**\n * Turn emoji codes into emojis\n *\n * List of supported emojis: https://github.com/showdownjs/showdown/wiki/Emojis\n */\nshowdown.subParser('emoji', function (text, options, globals) {\n  'use strict';\n\n  if (!options.emoji) {\n    return text;\n  }\n\n  text = globals.converter._dispatch('emoji.before', text, options, globals);\n\n  var emojiRgx = /:([\\S]+?):/g;\n\n  text = text.replace(emojiRgx, function (wm, emojiCode) {\n    if (showdown.helper.emojis.hasOwnProperty(emojiCode)) {\n      return showdown.helper.emojis[emojiCode];\n    }\n    return wm;\n  });\n\n  text = globals.converter._dispatch('emoji.after', text, options, globals);\n\n  return text;\n});\n\r\n/**\n * Smart processing for ampersands and angle brackets that need to be encoded.\n */\nshowdown.subParser('encodeAmpsAndAngles', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('encodeAmpsAndAngles.before', text, options, globals);\n\n  // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:\n  // http://bumppo.net/projects/amputator/\n  text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\\w+);)/g, '&amp;');\n\n  // Encode naked <'s\n  text = text.replace(/<(?![a-z\\/?$!])/gi, '&lt;');\n\n  // Encode <\n  text = text.replace(/</g, '&lt;');\n\n  // Encode >\n  text = text.replace(/>/g, '&gt;');\n\n  text = globals.converter._dispatch('encodeAmpsAndAngles.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Returns the string, with after processing the following backslash escape sequences.\n *\n * attacklab: The polite way to do this is with the new escapeCharacters() function:\n *\n *    text = escapeCharacters(text,\"\\\\\",true);\n *    text = escapeCharacters(text,\"`*_{}[]()>#+-.!\",true);\n *\n * ...but we're sidestepping its use of the (slow) RegExp constructor\n * as an optimization for Firefox.  This function gets called a LOT.\n */\nshowdown.subParser('encodeBackslashEscapes', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('encodeBackslashEscapes.before', text, options, globals);\n\n  text = text.replace(/\\\\(\\\\)/g, showdown.helper.escapeCharactersCallback);\n  text = text.replace(/\\\\([`*_{}\\[\\]()>#+.!~=|:-])/g, showdown.helper.escapeCharactersCallback);\n\n  text = globals.converter._dispatch('encodeBackslashEscapes.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Encode/escape certain characters inside Markdown code runs.\n * The point is that in code, these characters are literals,\n * and lose their special Markdown meanings.\n */\nshowdown.subParser('encodeCode', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('encodeCode.before', text, options, globals);\n\n  // Encode all ampersands; HTML entities are not\n  // entities within a Markdown code span.\n  text = text\n    .replace(/&/g, '&amp;')\n  // Do the angle bracket song and dance:\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n  // Now, escape characters that are magic in Markdown:\n    .replace(/([*_{}\\[\\]\\\\=~-])/g, showdown.helper.escapeCharactersCallback);\n\n  text = globals.converter._dispatch('encodeCode.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Within tags -- meaning between < and > -- encode [\\ ` * _ ~ =] so they\n * don't conflict with their use in Markdown for code, italics and strong.\n */\nshowdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.before', text, options, globals);\n\n  // Build a regex to find HTML tags.\n  var tags     = /<\\/?[a-z\\d_:-]+(?:[\\s]+[\\s\\S]+?)?>/gi,\n      comments = /<!(--(?:(?:[^>-]|-[^>])(?:[^-]|-[^-])*)--)>/gi;\n\n  text = text.replace(tags, function (wholeMatch) {\n    return wholeMatch\n      .replace(/(.)<\\/?code>(?=.)/g, '$1`')\n      .replace(/([\\\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);\n  });\n\n  text = text.replace(comments, function (wholeMatch) {\n    return wholeMatch\n      .replace(/([\\\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);\n  });\n\n  text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Handle github codeblocks prior to running HashHTML so that\n * HTML contained within the codeblock gets escaped properly\n * Example:\n * ```ruby\n *     def hello_world(x)\n *       puts \"Hello, #{x}\"\n *     end\n * ```\n */\nshowdown.subParser('githubCodeBlocks', function (text, options, globals) {\n  'use strict';\n\n  // early exit if option is not enabled\n  if (!options.ghCodeBlocks) {\n    return text;\n  }\n\n  text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);\n\n  text += '¨0';\n\n  text = text.replace(/(?:^|\\n)(?: {0,3})(```+|~~~+)(?: *)([^\\s`~]*)\\n([\\s\\S]*?)\\n(?: {0,3})\\1/g, function (wholeMatch, delim, language, codeblock) {\n    var end = (options.omitExtraWLInCodeBlocks) ? '' : '\\n';\n\n    // First parse the github code block\n    codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n    codeblock = showdown.subParser('detab')(codeblock, options, globals);\n    codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n    codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing whitespace\n\n    codeblock = '<pre><code' + (language ? ' class=\"' + language + ' language-' + language + '\"' : '') + '>' + codeblock + end + '</code></pre>';\n\n    codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);\n\n    // Since GHCodeblocks can be false positives, we need to\n    // store the primitive text and the parsed text in a global var,\n    // and then return a token\n    return '\\n\\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n  });\n\n  // attacklab: strip sentinel\n  text = text.replace(/¨0/, '');\n\n  return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);\n});\n\r\nshowdown.subParser('hashBlock', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('hashBlock.before', text, options, globals);\n  text = text.replace(/(^\\n+|\\n+$)/g, '');\n  text = '\\n\\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\\n\\n';\n  text = globals.converter._dispatch('hashBlock.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Hash and escape <code> elements that should not be parsed as markdown\n */\nshowdown.subParser('hashCodeTags', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('hashCodeTags.before', text, options, globals);\n\n  var repFunc = function (wholeMatch, match, left, right) {\n    var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n    return '¨C' + (globals.gHtmlSpans.push(codeblock) - 1) + 'C';\n  };\n\n  // Hash naked <code>\n  text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '<code\\\\b[^>]*>', '</code>', 'gim');\n\n  text = globals.converter._dispatch('hashCodeTags.after', text, options, globals);\n  return text;\n});\n\r\nshowdown.subParser('hashElement', function (text, options, globals) {\n  'use strict';\n\n  return function (wholeMatch, m1) {\n    var blockText = m1;\n\n    // Undo double lines\n    blockText = blockText.replace(/\\n\\n/g, '\\n');\n    blockText = blockText.replace(/^\\n/, '');\n\n    // strip trailing blank lines\n    blockText = blockText.replace(/\\n+$/g, '');\n\n    // Replace the element text with a marker (\"¨KxK\" where x is its key)\n    blockText = '\\n\\n¨K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\\n\\n';\n\n    return blockText;\n  };\n});\n\r\nshowdown.subParser('hashHTMLBlocks', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('hashHTMLBlocks.before', text, options, globals);\n\n  var blockTags = [\n        'pre',\n        'div',\n        'h1',\n        'h2',\n        'h3',\n        'h4',\n        'h5',\n        'h6',\n        'blockquote',\n        'table',\n        'dl',\n        'ol',\n        'ul',\n        'script',\n        'noscript',\n        'form',\n        'fieldset',\n        'iframe',\n        'math',\n        'style',\n        'section',\n        'header',\n        'footer',\n        'nav',\n        'article',\n        'aside',\n        'address',\n        'audio',\n        'canvas',\n        'figure',\n        'hgroup',\n        'output',\n        'video',\n        'p'\n      ],\n      repFunc = function (wholeMatch, match, left, right) {\n        var txt = wholeMatch;\n        // check if this html element is marked as markdown\n        // if so, it's contents should be parsed as markdown\n        if (left.search(/\\bmarkdown\\b/) !== -1) {\n          txt = left + globals.converter.makeHtml(match) + right;\n        }\n        return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n      };\n\n  if (options.backslashEscapesHTMLTags) {\n    // encode backslash escaped HTML tags\n    text = text.replace(/\\\\<(\\/?[^>]+?)>/g, function (wm, inside) {\n      return '&lt;' + inside + '&gt;';\n    });\n  }\n\n  // hash HTML Blocks\n  for (var i = 0; i < blockTags.length; ++i) {\n\n    var opTagPos,\n        rgx1     = new RegExp('^ {0,3}(<' + blockTags[i] + '\\\\b[^>]*>)', 'im'),\n        patLeft  = '<' + blockTags[i] + '\\\\b[^>]*>',\n        patRight = '</' + blockTags[i] + '>';\n    // 1. Look for the first position of the first opening HTML tag in the text\n    while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {\n\n      // if the HTML tag is \\ escaped, we need to escape it and break\n\n\n      //2. Split the text in that position\n      var subTexts = showdown.helper.splitAtIndex(text, opTagPos),\n          //3. Match recursively\n          newSubText1 = showdown.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, 'im');\n\n      // prevent an infinite loop\n      if (newSubText1 === subTexts[1]) {\n        break;\n      }\n      text = subTexts[0].concat(newSubText1);\n    }\n  }\n  // HR SPECIAL CASE\n  text = text.replace(/(\\n {0,3}(<(hr)\\b([^<>])*?\\/?>)[ \\t]*(?=\\n{2,}))/g,\n    showdown.subParser('hashElement')(text, options, globals));\n\n  // Special case for standalone HTML comments\n  text = showdown.helper.replaceRecursiveRegExp(text, function (txt) {\n    return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n  }, '^ {0,3}<!--', '-->', 'gm');\n\n  // PHP and ASP-style processor instructions (<?...?> and <%...%>)\n  text = text.replace(/(?:\\n\\n)( {0,3}(?:<([?%])[^\\r]*?\\2>)[ \\t]*(?=\\n{2,}))/g,\n    showdown.subParser('hashElement')(text, options, globals));\n\n  text = globals.converter._dispatch('hashHTMLBlocks.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Hash span elements that should not be parsed as markdown\n */\nshowdown.subParser('hashHTMLSpans', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('hashHTMLSpans.before', text, options, globals);\n\n  function hashHTMLSpan (html) {\n    return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C';\n  }\n\n  // Hash Self Closing tags\n  text = text.replace(/<[^>]+?\\/>/gi, function (wm) {\n    return hashHTMLSpan(wm);\n  });\n\n  // Hash tags without properties\n  text = text.replace(/<([^>]+?)>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n    return hashHTMLSpan(wm);\n  });\n\n  // Hash tags with properties\n  text = text.replace(/<([^>]+?)\\s[^>]+?>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n    return hashHTMLSpan(wm);\n  });\n\n  // Hash self closing tags without />\n  text = text.replace(/<[^>]+?>/gi, function (wm) {\n    return hashHTMLSpan(wm);\n  });\n\n  /*showdown.helper.matchRecursiveRegExp(text, '<code\\\\b[^>]*>', '</code>', 'gi');*/\n\n  text = globals.converter._dispatch('hashHTMLSpans.after', text, options, globals);\n  return text;\n});\n\n/**\n * Unhash HTML spans\n */\nshowdown.subParser('unhashHTMLSpans', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('unhashHTMLSpans.before', text, options, globals);\n\n  for (var i = 0; i < globals.gHtmlSpans.length; ++i) {\n    var repText = globals.gHtmlSpans[i],\n        // limiter to prevent infinite loop (assume 10 as limit for recurse)\n        limit = 0;\n\n    while (/¨C(\\d+)C/.test(repText)) {\n      var num = RegExp.$1;\n      repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]);\n      if (limit === 10) {\n        console.error('maximum nesting of 10 spans reached!!!');\n        break;\n      }\n      ++limit;\n    }\n    text = text.replace('¨C' + i + 'C', repText);\n  }\n\n  text = globals.converter._dispatch('unhashHTMLSpans.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Hash and escape <pre><code> elements that should not be parsed as markdown\n */\nshowdown.subParser('hashPreCodeTags', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('hashPreCodeTags.before', text, options, globals);\n\n  var repFunc = function (wholeMatch, match, left, right) {\n    // encode html entities\n    var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n    return '\\n\\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n  };\n\n  // Hash <pre><code>\n  text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}<pre\\\\b[^>]*>\\\\s*<code\\\\b[^>]*>', '^ {0,3}</code>\\\\s*</pre>', 'gim');\n\n  text = globals.converter._dispatch('hashPreCodeTags.after', text, options, globals);\n  return text;\n});\n\r\nshowdown.subParser('headers', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('headers.before', text, options, globals);\n\n  var headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart),\n\n      // Set text-style headers:\n      //\tHeader 1\n      //\t========\n      //\n      //\tHeader 2\n      //\t--------\n      //\n      setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n={2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n=+[ \\t]*\\n+/gm,\n      setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n-{2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n-+[ \\t]*\\n+/gm;\n\n  text = text.replace(setextRegexH1, function (wholeMatch, m1) {\n\n    var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n        hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m1) + '\"',\n        hLevel = headerLevelStart,\n        hashBlock = '<h' + hLevel + hID + '>' + spanGamut + '</h' + hLevel + '>';\n    return showdown.subParser('hashBlock')(hashBlock, options, globals);\n  });\n\n  text = text.replace(setextRegexH2, function (matchFound, m1) {\n    var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n        hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m1) + '\"',\n        hLevel = headerLevelStart + 1,\n        hashBlock = '<h' + hLevel + hID + '>' + spanGamut + '</h' + hLevel + '>';\n    return showdown.subParser('hashBlock')(hashBlock, options, globals);\n  });\n\n  // atx-style headers:\n  //  # Header 1\n  //  ## Header 2\n  //  ## Header 2 with closing hashes ##\n  //  ...\n  //  ###### Header 6\n  //\n  var atxStyle = (options.requireSpaceBeforeHeadingText) ? /^(#{1,6})[ \\t]+(.+?)[ \\t]*#*\\n+/gm : /^(#{1,6})[ \\t]*(.+?)[ \\t]*#*\\n+/gm;\n\n  text = text.replace(atxStyle, function (wholeMatch, m1, m2) {\n    var hText = m2;\n    if (options.customizedHeaderId) {\n      hText = m2.replace(/\\s?\\{([^{]+?)}\\s*$/, '');\n    }\n\n    var span = showdown.subParser('spanGamut')(hText, options, globals),\n        hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m2) + '\"',\n        hLevel = headerLevelStart - 1 + m1.length,\n        header = '<h' + hLevel + hID + '>' + span + '</h' + hLevel + '>';\n\n    return showdown.subParser('hashBlock')(header, options, globals);\n  });\n\n  function headerId (m) {\n    var title,\n        prefix;\n\n    // It is separate from other options to allow combining prefix and customized\n    if (options.customizedHeaderId) {\n      var match = m.match(/\\{([^{]+?)}\\s*$/);\n      if (match && match[1]) {\n        m = match[1];\n      }\n    }\n\n    title = m;\n\n    // Prefix id to prevent causing inadvertent pre-existing style matches.\n    if (showdown.helper.isString(options.prefixHeaderId)) {\n      prefix = options.prefixHeaderId;\n    } else if (options.prefixHeaderId === true) {\n      prefix = 'section-';\n    } else {\n      prefix = '';\n    }\n\n    if (!options.rawPrefixHeaderId) {\n      title = prefix + title;\n    }\n\n    if (options.ghCompatibleHeaderId) {\n      title = title\n        .replace(/ /g, '-')\n        // replace previously escaped chars (&, ¨ and $)\n        .replace(/&amp;/g, '')\n        .replace(/¨T/g, '')\n        .replace(/¨D/g, '')\n        // replace rest of the chars (&~$ are repeated as they might have been escaped)\n        // borrowed from github's redcarpet (some they should produce similar results)\n        .replace(/[&+$,\\/:;=?@\"#{}|^¨~\\[\\]`\\\\*)(%.!'<>]/g, '')\n        .toLowerCase();\n    } else if (options.rawHeaderId) {\n      title = title\n        .replace(/ /g, '-')\n        // replace previously escaped chars (&, ¨ and $)\n        .replace(/&amp;/g, '&')\n        .replace(/¨T/g, '¨')\n        .replace(/¨D/g, '$')\n        // replace \" and '\n        .replace(/[\"']/g, '-')\n        .toLowerCase();\n    } else {\n      title = title\n        .replace(/[^\\w]/g, '')\n        .toLowerCase();\n    }\n\n    if (options.rawPrefixHeaderId) {\n      title = prefix + title;\n    }\n\n    if (globals.hashLinkCounts[title]) {\n      title = title + '-' + (globals.hashLinkCounts[title]++);\n    } else {\n      globals.hashLinkCounts[title] = 1;\n    }\n    return title;\n  }\n\n  text = globals.converter._dispatch('headers.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Turn Markdown link shortcuts into XHTML <a> tags.\n */\nshowdown.subParser('horizontalRule', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('horizontalRule.before', text, options, globals);\n\n  var key = showdown.subParser('hashBlock')('<hr />', options, globals);\n  text = text.replace(/^ {0,2}( ?-){3,}[ \\t]*$/gm, key);\n  text = text.replace(/^ {0,2}( ?\\*){3,}[ \\t]*$/gm, key);\n  text = text.replace(/^ {0,2}( ?_){3,}[ \\t]*$/gm, key);\n\n  text = globals.converter._dispatch('horizontalRule.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Turn Markdown image shortcuts into <img> tags.\n */\nshowdown.subParser('images', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('images.before', text, options, globals);\n\n  var inlineRegExp      = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<?([\\S]+?(?:\\([\\S]*?\\)[\\S]*?)?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n      crazyRegExp       = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<([^>]*)>(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:(?:([\"'])([^\"]*?)\\6))?[ \\t]?\\)/g,\n      base64RegExp      = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<?(data:.+?\\/.+?;base64,[A-Za-z0-9+/=\\n]+?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n      referenceRegExp   = /!\\[([^\\]]*?)] ?(?:\\n *)?\\[([\\s\\S]*?)]()()()()()/g,\n      refShortcutRegExp = /!\\[([^\\[\\]]+)]()()()()()/g;\n\n  function writeImageTagBase64 (wholeMatch, altText, linkId, url, width, height, m5, title) {\n    url = url.replace(/\\s/g, '');\n    return writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title);\n  }\n\n  function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) {\n\n    var gUrls   = globals.gUrls,\n        gTitles = globals.gTitles,\n        gDims   = globals.gDimensions;\n\n    linkId = linkId.toLowerCase();\n\n    if (!title) {\n      title = '';\n    }\n    // Special case for explicit empty url\n    if (wholeMatch.search(/\\(<?\\s*>? ?(['\"].*['\"])?\\)$/m) > -1) {\n      url = '';\n\n    } else if (url === '' || url === null) {\n      if (linkId === '' || linkId === null) {\n        // lower-case and turn embedded newlines into spaces\n        linkId = altText.toLowerCase().replace(/ ?\\n/g, ' ');\n      }\n      url = '#' + linkId;\n\n      if (!showdown.helper.isUndefined(gUrls[linkId])) {\n        url = gUrls[linkId];\n        if (!showdown.helper.isUndefined(gTitles[linkId])) {\n          title = gTitles[linkId];\n        }\n        if (!showdown.helper.isUndefined(gDims[linkId])) {\n          width = gDims[linkId].width;\n          height = gDims[linkId].height;\n        }\n      } else {\n        return wholeMatch;\n      }\n    }\n\n    altText = altText\n      .replace(/\"/g, '&quot;')\n    //altText = showdown.helper.escapeCharacters(altText, '*_', false);\n      .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n    //url = showdown.helper.escapeCharacters(url, '*_', false);\n    url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n    var result = '<img src=\"' + url + '\" alt=\"' + altText + '\"';\n\n    if (title && showdown.helper.isString(title)) {\n      title = title\n        .replace(/\"/g, '&quot;')\n      //title = showdown.helper.escapeCharacters(title, '*_', false);\n        .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n      result += ' title=\"' + title + '\"';\n    }\n\n    if (width && height) {\n      width  = (width === '*') ? 'auto' : width;\n      height = (height === '*') ? 'auto' : height;\n\n      result += ' width=\"' + width + '\"';\n      result += ' height=\"' + height + '\"';\n    }\n\n    result += ' />';\n\n    return result;\n  }\n\n  // First, handle reference-style labeled images: ![alt text][id]\n  text = text.replace(referenceRegExp, writeImageTag);\n\n  // Next, handle inline images:  ![alt text](url =<width>x<height> \"optional title\")\n\n  // base64 encoded images\n  text = text.replace(base64RegExp, writeImageTagBase64);\n\n  // cases with crazy urls like ./image/cat1).png\n  text = text.replace(crazyRegExp, writeImageTag);\n\n  // normal cases\n  text = text.replace(inlineRegExp, writeImageTag);\n\n  // handle reference-style shortcuts: ![img text]\n  text = text.replace(refShortcutRegExp, writeImageTag);\n\n  text = globals.converter._dispatch('images.after', text, options, globals);\n  return text;\n});\n\r\nshowdown.subParser('italicsAndBold', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('italicsAndBold.before', text, options, globals);\n\n  // it's faster to have 3 separate regexes for each case than have just one\n  // because of backtracing, in some cases, it could lead to an exponential effect\n  // called \"catastrophic backtrace\". Ominous!\n\n  function parseInside (txt, left, right) {\n    /*\n    if (options.simplifiedAutoLink) {\n      txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);\n    }\n    */\n    return left + txt + right;\n  }\n\n  // Parse underscores\n  if (options.literalMidWordUnderscores) {\n    text = text.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function (wm, txt) {\n      return parseInside (txt, '<strong><em>', '</em></strong>');\n    });\n    text = text.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function (wm, txt) {\n      return parseInside (txt, '<strong>', '</strong>');\n    });\n    text = text.replace(/\\b_(\\S[\\s\\S]*?)_\\b/g, function (wm, txt) {\n      return parseInside (txt, '<em>', '</em>');\n    });\n  } else {\n    text = text.replace(/___(\\S[\\s\\S]*?)___/g, function (wm, m) {\n      return (/\\S$/.test(m)) ? parseInside (m, '<strong><em>', '</em></strong>') : wm;\n    });\n    text = text.replace(/__(\\S[\\s\\S]*?)__/g, function (wm, m) {\n      return (/\\S$/.test(m)) ? parseInside (m, '<strong>', '</strong>') : wm;\n    });\n    text = text.replace(/_([^\\s_][\\s\\S]*?)_/g, function (wm, m) {\n      // !/^_[^_]/.test(m) - test if it doesn't start with __ (since it seems redundant, we removed it)\n      return (/\\S$/.test(m)) ? parseInside (m, '<em>', '</em>') : wm;\n    });\n  }\n\n  // Now parse asterisks\n  if (options.literalMidWordAsterisks) {\n    text = text.replace(/([^*]|^)\\B\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n      return parseInside (txt, lead + '<strong><em>', '</em></strong>');\n    });\n    text = text.replace(/([^*]|^)\\B\\*\\*(\\S[\\s\\S]*?)\\*\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n      return parseInside (txt, lead + '<strong>', '</strong>');\n    });\n    text = text.replace(/([^*]|^)\\B\\*(\\S[\\s\\S]*?)\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n      return parseInside (txt, lead + '<em>', '</em>');\n    });\n  } else {\n    text = text.replace(/\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*/g, function (wm, m) {\n      return (/\\S$/.test(m)) ? parseInside (m, '<strong><em>', '</em></strong>') : wm;\n    });\n    text = text.replace(/\\*\\*(\\S[\\s\\S]*?)\\*\\*/g, function (wm, m) {\n      return (/\\S$/.test(m)) ? parseInside (m, '<strong>', '</strong>') : wm;\n    });\n    text = text.replace(/\\*([^\\s*][\\s\\S]*?)\\*/g, function (wm, m) {\n      // !/^\\*[^*]/.test(m) - test if it doesn't start with ** (since it seems redundant, we removed it)\n      return (/\\S$/.test(m)) ? parseInside (m, '<em>', '</em>') : wm;\n    });\n  }\n\n\n  text = globals.converter._dispatch('italicsAndBold.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Form HTML ordered (numbered) and unordered (bulleted) lists.\n */\nshowdown.subParser('lists', function (text, options, globals) {\n  'use strict';\n\n  /**\n   * Process the contents of a single ordered or unordered list, splitting it\n   * into individual list items.\n   * @param {string} listStr\n   * @param {boolean} trimTrailing\n   * @returns {string}\n   */\n  function processListItems (listStr, trimTrailing) {\n    // The $g_list_level global keeps track of when we're inside a list.\n    // Each time we enter a list, we increment it; when we leave a list,\n    // we decrement. If it's zero, we're not in a list anymore.\n    //\n    // We do this because when we're not inside a list, we want to treat\n    // something like this:\n    //\n    //    I recommend upgrading to version\n    //    8. Oops, now this line is treated\n    //    as a sub-list.\n    //\n    // As a single paragraph, despite the fact that the second line starts\n    // with a digit-period-space sequence.\n    //\n    // Whereas when we're inside a list (or sub-list), that line will be\n    // treated as the start of a sub-list. What a kludge, huh? This is\n    // an aspect of Markdown's syntax that's hard to parse perfectly\n    // without resorting to mind-reading. Perhaps the solution is to\n    // change the syntax rules such that sub-lists must start with a\n    // starting cardinal number; e.g. \"1.\" or \"a.\".\n    globals.gListLevel++;\n\n    // trim trailing blank lines:\n    listStr = listStr.replace(/\\n{2,}$/, '\\n');\n\n    // attacklab: add sentinel to emulate \\z\n    listStr += '¨0';\n\n    var rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0| {0,3}([*+-]|\\d+[.])[ \\t]+))/gm,\n        isParagraphed = (/\\n[ \\t]*\\n(?!¨0)/.test(listStr));\n\n    // Since version 1.5, nesting sublists requires 4 spaces (or 1 tab) indentation,\n    // which is a syntax breaking change\n    // activating this option reverts to old behavior\n    if (options.disableForced4SpacesIndentedSublists) {\n      rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0|\\2([*+-]|\\d+[.])[ \\t]+))/gm;\n    }\n\n    listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {\n      checked = (checked && checked.trim() !== '');\n\n      var item = showdown.subParser('outdent')(m4, options, globals),\n          bulletStyle = '';\n\n      // Support for github tasklists\n      if (taskbtn && options.tasklists) {\n        bulletStyle = ' class=\"task-list-item\" style=\"list-style-type: none;\"';\n        item = item.replace(/^[ \\t]*\\[(x|X| )?]/m, function () {\n          var otp = '<input type=\"checkbox\" disabled style=\"margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;\"';\n          if (checked) {\n            otp += ' checked';\n          }\n          otp += '>';\n          return otp;\n        });\n      }\n\n      // ISSUE #312\n      // This input: - - - a\n      // causes trouble to the parser, since it interprets it as:\n      // <ul><li><li><li>a</li></li></li></ul>\n      // instead of:\n      // <ul><li>- - a</li></ul>\n      // So, to prevent it, we will put a marker (¨A)in the beginning of the line\n      // Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser\n      item = item.replace(/^([-*+]|\\d\\.)[ \\t]+[\\S\\n ]*/g, function (wm2) {\n        return '¨A' + wm2;\n      });\n\n      // m1 - Leading line or\n      // Has a double return (multi paragraph) or\n      // Has sublist\n      if (m1 || (item.search(/\\n{2,}/) > -1)) {\n        item = showdown.subParser('githubCodeBlocks')(item, options, globals);\n        item = showdown.subParser('blockGamut')(item, options, globals);\n      } else {\n        // Recursion for sub-lists:\n        item = showdown.subParser('lists')(item, options, globals);\n        item = item.replace(/\\n$/, ''); // chomp(item)\n        item = showdown.subParser('hashHTMLBlocks')(item, options, globals);\n\n        // Colapse double linebreaks\n        item = item.replace(/\\n\\n+/g, '\\n\\n');\n        if (isParagraphed) {\n          item = showdown.subParser('paragraphs')(item, options, globals);\n        } else {\n          item = showdown.subParser('spanGamut')(item, options, globals);\n        }\n      }\n\n      // now we need to remove the marker (¨A)\n      item = item.replace('¨A', '');\n      // we can finally wrap the line in list item tags\n      item =  '<li' + bulletStyle + '>' + item + '</li>\\n';\n\n      return item;\n    });\n\n    // attacklab: strip sentinel\n    listStr = listStr.replace(/¨0/g, '');\n\n    globals.gListLevel--;\n\n    if (trimTrailing) {\n      listStr = listStr.replace(/\\s+$/, '');\n    }\n\n    return listStr;\n  }\n\n  function styleStartNumber (list, listType) {\n    // check if ol and starts by a number different than 1\n    if (listType === 'ol') {\n      var res = list.match(/^ *(\\d+)\\./);\n      if (res && res[1] !== '1') {\n        return ' start=\"' + res[1] + '\"';\n      }\n    }\n    return '';\n  }\n\n  /**\n   * Check and parse consecutive lists (better fix for issue #142)\n   * @param {string} list\n   * @param {string} listType\n   * @param {boolean} trimTrailing\n   * @returns {string}\n   */\n  function parseConsecutiveLists (list, listType, trimTrailing) {\n    // check if we caught 2 or more consecutive lists by mistake\n    // we use the counterRgx, meaning if listType is UL we look for OL and vice versa\n    var olRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?\\d+\\.[ \\t]/gm : /^ {0,3}\\d+\\.[ \\t]/gm,\n        ulRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?[*+-][ \\t]/gm : /^ {0,3}[*+-][ \\t]/gm,\n        counterRxg = (listType === 'ul') ? olRgx : ulRgx,\n        result = '';\n\n    if (list.search(counterRxg) !== -1) {\n      (function parseCL (txt) {\n        var pos = txt.search(counterRxg),\n            style = styleStartNumber(list, listType);\n        if (pos !== -1) {\n          // slice\n          result += '\\n\\n<' + listType + style + '>\\n' + processListItems(txt.slice(0, pos), !!trimTrailing) + '</' + listType + '>\\n';\n\n          // invert counterType and listType\n          listType = (listType === 'ul') ? 'ol' : 'ul';\n          counterRxg = (listType === 'ul') ? olRgx : ulRgx;\n\n          //recurse\n          parseCL(txt.slice(pos));\n        } else {\n          result += '\\n\\n<' + listType + style + '>\\n' + processListItems(txt, !!trimTrailing) + '</' + listType + '>\\n';\n        }\n      })(list);\n    } else {\n      var style = styleStartNumber(list, listType);\n      result = '\\n\\n<' + listType + style + '>\\n' + processListItems(list, !!trimTrailing) + '</' + listType + '>\\n';\n    }\n\n    return result;\n  }\n\n  /** Start of list parsing **/\n  text = globals.converter._dispatch('lists.before', text, options, globals);\n  // add sentinel to hack around khtml/safari bug:\n  // http://bugs.webkit.org/show_bug.cgi?id=11231\n  text += '¨0';\n\n  if (globals.gListLevel) {\n    text = text.replace(/^(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,\n      function (wholeMatch, list, m2) {\n        var listType = (m2.search(/[*+-]/g) > -1) ? 'ul' : 'ol';\n        return parseConsecutiveLists(list, listType, true);\n      }\n    );\n  } else {\n    text = text.replace(/(\\n\\n|^\\n?)(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,\n      function (wholeMatch, m1, list, m3) {\n        var listType = (m3.search(/[*+-]/g) > -1) ? 'ul' : 'ol';\n        return parseConsecutiveLists(list, listType, false);\n      }\n    );\n  }\n\n  // strip sentinel\n  text = text.replace(/¨0/, '');\n  text = globals.converter._dispatch('lists.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Parse metadata at the top of the document\n */\nshowdown.subParser('metadata', function (text, options, globals) {\n  'use strict';\n\n  if (!options.metadata) {\n    return text;\n  }\n\n  text = globals.converter._dispatch('metadata.before', text, options, globals);\n\n  function parseMetadataContents (content) {\n    // raw is raw so it's not changed in any way\n    globals.metadata.raw = content;\n\n    // escape chars forbidden in html attributes\n    // double quotes\n    content = content\n      // ampersand first\n      .replace(/&/g, '&amp;')\n      // double quotes\n      .replace(/\"/g, '&quot;');\n\n    content = content.replace(/\\n {4}/g, ' ');\n    content.replace(/^([\\S ]+): +([\\s\\S]+?)$/gm, function (wm, key, value) {\n      globals.metadata.parsed[key] = value;\n      return '';\n    });\n  }\n\n  text = text.replace(/^\\s*«««+(\\S*?)\\n([\\s\\S]+?)\\n»»»+\\n/, function (wholematch, format, content) {\n    parseMetadataContents(content);\n    return '¨M';\n  });\n\n  text = text.replace(/^\\s*---+(\\S*?)\\n([\\s\\S]+?)\\n---+\\n/, function (wholematch, format, content) {\n    if (format) {\n      globals.metadata.format = format;\n    }\n    parseMetadataContents(content);\n    return '¨M';\n  });\n\n  text = text.replace(/¨M/g, '');\n\n  text = globals.converter._dispatch('metadata.after', text, options, globals);\n  return text;\n});\n\r\n/**\n * Remove one level of line-leading tabs or spaces\n */\nshowdown.subParser('outdent', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('outdent.before', text, options, globals);\n\n  // attacklab: hack around Konqueror 3.5.4 bug:\n  // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n  text = text.replace(/^(\\t|[ ]{1,4})/gm, '¨0'); // attacklab: g_tab_width\n\n  // attacklab: clean up hack\n  text = text.replace(/¨0/g, '');\n\n  text = globals.converter._dispatch('outdent.after', text, options, globals);\n  return text;\n});\n\r\n/**\n *\n */\nshowdown.subParser('paragraphs', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('paragraphs.before', text, options, globals);\n  // Strip leading and trailing lines:\n  text = text.replace(/^\\n+/g, '');\n  text = text.replace(/\\n+$/g, '');\n\n  var grafs = text.split(/\\n{2,}/g),\n      grafsOut = [],\n      end = grafs.length; // Wrap <p> tags\n\n  for (var i = 0; i < end; i++) {\n    var str = grafs[i];\n    // if this is an HTML marker, copy it\n    if (str.search(/¨(K|G)(\\d+)\\1/g) >= 0) {\n      grafsOut.push(str);\n\n    // test for presence of characters to prevent empty lines being parsed\n    // as paragraphs (resulting in undesired extra empty paragraphs)\n    } else if (str.search(/\\S/) >= 0) {\n      str = showdown.subParser('spanGamut')(str, options, globals);\n      str = str.replace(/^([ \\t]*)/g, '<p>');\n      str += '</p>';\n      grafsOut.push(str);\n    }\n  }\n\n  /** Unhashify HTML blocks */\n  end = grafsOut.length;\n  for (i = 0; i < end; i++) {\n    var blockText = '',\n        grafsOutIt = grafsOut[i],\n        codeFlag = false;\n    // if this is a marker for an html block...\n    // use RegExp.test instead of string.search because of QML bug\n    while (/¨(K|G)(\\d+)\\1/.test(grafsOutIt)) {\n      var delim = RegExp.$1,\n          num   = RegExp.$2;\n\n      if (delim === 'K') {\n        blockText = globals.gHtmlBlocks[num];\n      } else {\n        // we need to check if ghBlock is a false positive\n        if (codeFlag) {\n          // use encoded version of all text\n          blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text, options, globals);\n        } else {\n          blockText = globals.ghCodeBlocks[num].codeblock;\n        }\n      }\n      blockText = blockText.replace(/\\$/g, '$$$$'); // Escape any dollar signs\n\n      grafsOutIt = grafsOutIt.replace(/(\\n\\n)?¨(K|G)\\d+\\2(\\n\\n)?/, blockText);\n      // Check if grafsOutIt is a pre->code\n      if (/^<pre\\b[^>]*>\\s*<code\\b[^>]*>/.test(grafsOutIt)) {\n        codeFlag = true;\n      }\n    }\n    grafsOut[i] = grafsOutIt;\n  }\n  text = grafsOut.join('\\n');\n  // Strip leading and trailing lines:\n  text = text.replace(/^\\n+/g, '');\n  text = text.replace(/\\n+$/g, '');\n  return globals.converter._dispatch('paragraphs.after', text, options, globals);\n});\n\r\n/**\n * Run extension\n */\nshowdown.subParser('runExtension', function (ext, text, options, globals) {\n  'use strict';\n\n  if (ext.filter) {\n    text = ext.filter(text, globals.converter, options);\n\n  } else if (ext.regex) {\n    // TODO remove this when old extension loading mechanism is deprecated\n    var re = ext.regex;\n    if (!(re instanceof RegExp)) {\n      re = new RegExp(re, 'g');\n    }\n    text = text.replace(re, ext.replace);\n  }\n\n  return text;\n});\n\r\n/**\n * These are all the transformations that occur *within* block-level\n * tags like paragraphs, headers, and list items.\n */\nshowdown.subParser('spanGamut', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('spanGamut.before', text, options, globals);\n  text = showdown.subParser('codeSpans')(text, options, globals);\n  text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);\n  text = showdown.subParser('encodeBackslashEscapes')(text, options, globals);\n\n  // Process anchor and image tags. Images must come first,\n  // because ![foo][f] looks like an anchor.\n  text = showdown.subParser('images')(text, options, globals);\n  text = showdown.subParser('anchors')(text, options, globals);\n\n  // Make links out of things like `<http://example.com/>`\n  // Must come after anchors, because you can use < and >\n  // delimiters in inline links like [this](<url>).\n  text = showdown.subParser('autoLinks')(text, options, globals);\n  text = showdown.subParser('simplifiedAutoLinks')(text, options, globals);\n  text = showdown.subParser('emoji')(text, options, globals);\n  text = showdown.subParser('underline')(text, options, globals);\n  text = showdown.subParser('italicsAndBold')(text, options, globals);\n  text = showdown.subParser('strikethrough')(text, options, globals);\n  text = showdown.subParser('ellipsis')(text, options, globals);\n\n  // we need to hash HTML tags inside spans\n  text = showdown.subParser('hashHTMLSpans')(text, options, globals);\n\n  // now we encode amps and angles\n  text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals);\n\n  // Do hard breaks\n  if (options.simpleLineBreaks) {\n    // GFM style hard breaks\n    // only add line breaks if the text does not contain a block (special case for lists)\n    if (!/\\n\\n¨K/.test(text)) {\n      text = text.replace(/\\n+/g, '<br />\\n');\n    }\n  } else {\n    // Vanilla hard breaks\n    text = text.replace(/  +\\n/g, '<br />\\n');\n  }\n\n  text = globals.converter._dispatch('spanGamut.after', text, options, globals);\n  return text;\n});\n\r\nshowdown.subParser('strikethrough', function (text, options, globals) {\n  'use strict';\n\n  function parseInside (txt) {\n    if (options.simplifiedAutoLink) {\n      txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);\n    }\n    return '<del>' + txt + '</del>';\n  }\n\n  if (options.strikethrough) {\n    text = globals.converter._dispatch('strikethrough.before', text, options, globals);\n    text = text.replace(/(?:~){2}([\\s\\S]+?)(?:~){2}/g, function (wm, txt) { return parseInside(txt); });\n    text = globals.converter._dispatch('strikethrough.after', text, options, globals);\n  }\n\n  return text;\n});\n\r\n/**\n * Strips link definitions from text, stores the URLs and titles in\n * hash references.\n * Link defs are in the form: ^[id]: url \"optional title\"\n */\nshowdown.subParser('stripLinkDefinitions', function (text, options, globals) {\n  'use strict';\n\n  var regex       = /^ {0,3}\\[([^\\]]+)]:[ \\t]*\\n?[ \\t]*<?([^>\\s]+)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n+|(?=¨0))/gm,\n      base64Regex = /^ {0,3}\\[([^\\]]+)]:[ \\t]*\\n?[ \\t]*<?(data:.+?\\/.+?;base64,[A-Za-z0-9+/=\\n]+?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n\\n|(?=¨0)|(?=\\n\\[))/gm;\n\n  // attacklab: sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n  text += '¨0';\n\n  var replaceFunc = function (wholeMatch, linkId, url, width, height, blankLines, title) {\n\n    // if there aren't two instances of linkId it must not be a reference link so back out\n    linkId = linkId.toLowerCase();\n    if (text.toLowerCase().split(linkId).length - 1 < 2) {\n      return wholeMatch;\n    }\n    if (url.match(/^data:.+?\\/.+?;base64,/)) {\n      // remove newlines\n      globals.gUrls[linkId] = url.replace(/\\s/g, '');\n    } else {\n      globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url, options, globals);  // Link IDs are case-insensitive\n    }\n\n    if (blankLines) {\n      // Oops, found blank lines, so it's not a title.\n      // Put back the parenthetical statement we stole.\n      return blankLines + title;\n\n    } else {\n      if (title) {\n        globals.gTitles[linkId] = title.replace(/\"|'/g, '&quot;');\n      }\n      if (options.parseImgDimensions && width && height) {\n        globals.gDimensions[linkId] = {\n          width:  width,\n          height: height\n        };\n      }\n    }\n    // Completely remove the definition from the text\n    return '';\n  };\n\n  // first we try to find base64 link references\n  text = text.replace(base64Regex, replaceFunc);\n\n  text = text.replace(regex, replaceFunc);\n\n  // attacklab: strip sentinel\n  text = text.replace(/¨0/, '');\n\n  return text;\n});\n\r\nshowdown.subParser('tables', function (text, options, globals) {\n  'use strict';\n\n  if (!options.tables) {\n    return text;\n  }\n\n  var tableRgx       = /^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n      //singeColTblRgx = /^ {0,3}\\|.+\\|\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n(?: {0,3}\\|.+\\|\\n)+(?:\\n\\n|¨0)/gm;\n      singeColTblRgx = /^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm;\n\n  function parseStyles (sLine) {\n    if (/^:[ \\t]*--*$/.test(sLine)) {\n      return ' style=\"text-align:left;\"';\n    } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n      return ' style=\"text-align:right;\"';\n    } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n      return ' style=\"text-align:center;\"';\n    } else {\n      return '';\n    }\n  }\n\n  function parseHeaders (header, style) {\n    var id = '';\n    header = header.trim();\n    // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility\n    if (options.tablesHeaderId || options.tableHeaderId) {\n      id = ' id=\"' + header.replace(/ /g, '_').toLowerCase() + '\"';\n    }\n    header = showdown.subParser('spanGamut')(header, options, globals);\n\n    return '<th' + id + style + '>' + header + '</th>\\n';\n  }\n\n  function parseCells (cell, style) {\n    var subText = showdown.subParser('spanGamut')(cell, options, globals);\n    return '<td' + style + '>' + subText + '</td>\\n';\n  }\n\n  function buildTable (headers, cells) {\n    var tb = '<table>\\n<thead>\\n<tr>\\n',\n        tblLgn = headers.length;\n\n    for (var i = 0; i < tblLgn; ++i) {\n      tb += headers[i];\n    }\n    tb += '</tr>\\n</thead>\\n<tbody>\\n';\n\n    for (i = 0; i < cells.length; ++i) {\n      tb += '<tr>\\n';\n      for (var ii = 0; ii < tblLgn; ++ii) {\n        tb += cells[i][ii];\n      }\n      tb += '</tr>\\n';\n    }\n    tb += '</tbody>\\n</table>\\n';\n    return tb;\n  }\n\n  function parseTable (rawTable) {\n    var i, tableLines = rawTable.split('\\n');\n\n    for (i = 0; i < tableLines.length; ++i) {\n      // strip wrong first and last column if wrapped tables are used\n      if (/^ {0,3}\\|/.test(tableLines[i])) {\n        tableLines[i] = tableLines[i].replace(/^ {0,3}\\|/, '');\n      }\n      if (/\\|[ \\t]*$/.test(tableLines[i])) {\n        tableLines[i] = tableLines[i].replace(/\\|[ \\t]*$/, '');\n      }\n      // parse code spans first, but we only support one line code spans\n      tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);\n    }\n\n    var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}),\n        rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}),\n        rawCells = [],\n        headers = [],\n        styles = [],\n        cells = [];\n\n    tableLines.shift();\n    tableLines.shift();\n\n    for (i = 0; i < tableLines.length; ++i) {\n      if (tableLines[i].trim() === '') {\n        continue;\n      }\n      rawCells.push(\n        tableLines[i]\n          .split('|')\n          .map(function (s) {\n            return s.trim();\n          })\n      );\n    }\n\n    if (rawHeaders.length < rawStyles.length) {\n      return rawTable;\n    }\n\n    for (i = 0; i < rawStyles.length; ++i) {\n      styles.push(parseStyles(rawStyles[i]));\n    }\n\n    for (i = 0; i < rawHeaders.length; ++i) {\n      if (showdown.helper.isUndefined(styles[i])) {\n        styles[i] = '';\n      }\n      headers.push(parseHeaders(rawHeaders[i], styles[i]));\n    }\n\n    for (i = 0; i < rawCells.length; ++i) {\n      var row = [];\n      for (var ii = 0; ii < headers.length; ++ii) {\n        if (showdown.helper.isUndefined(rawCells[i][ii])) {\n\n        }\n        row.push(parseCells(rawCells[i][ii], styles[ii]));\n      }\n      cells.push(row);\n    }\n\n    return buildTable(headers, cells);\n  }\n\n  text = globals.converter._dispatch('tables.before', text, options, globals);\n\n  // find escaped pipe characters\n  text = text.replace(/\\\\(\\|)/g, showdown.helper.escapeCharactersCallback);\n\n  // parse multi column tables\n  text = text.replace(tableRgx, parseTable);\n\n  // parse one column tables\n  text = text.replace(singeColTblRgx, parseTable);\n\n  text = globals.converter._dispatch('tables.after', text, options, globals);\n\n  return text;\n});\n\r\nshowdown.subParser('underline', function (text, options, globals) {\n  'use strict';\n\n  if (!options.underline) {\n    return text;\n  }\n\n  text = globals.converter._dispatch('underline.before', text, options, globals);\n\n  if (options.literalMidWordUnderscores) {\n    text = text.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function (wm, txt) {\n      return '<u>' + txt + '</u>';\n    });\n    text = text.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function (wm, txt) {\n      return '<u>' + txt + '</u>';\n    });\n  } else {\n    text = text.replace(/___(\\S[\\s\\S]*?)___/g, function (wm, m) {\n      return (/\\S$/.test(m)) ? '<u>' + m + '</u>' : wm;\n    });\n    text = text.replace(/__(\\S[\\s\\S]*?)__/g, function (wm, m) {\n      return (/\\S$/.test(m)) ? '<u>' + m + '</u>' : wm;\n    });\n  }\n\n  // escape remaining underscores to prevent them being parsed by italic and bold\n  text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback);\n\n  text = globals.converter._dispatch('underline.after', text, options, globals);\n\n  return text;\n});\n\r\n/**\n * Swap back in all the special characters we've hidden.\n */\nshowdown.subParser('unescapeSpecialChars', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('unescapeSpecialChars.before', text, options, globals);\n\n  text = text.replace(/¨E(\\d+)E/g, function (wholeMatch, m1) {\n    var charCodeToReplace = parseInt(m1);\n    return String.fromCharCode(charCodeToReplace);\n  });\n\n  text = globals.converter._dispatch('unescapeSpecialChars.after', text, options, globals);\n  return text;\n});\n\r\nshowdown.subParser('makeMarkdown.blockquote', function (node, globals) {\n  'use strict';\n\n  var txt = '';\n  if (node.hasChildNodes()) {\n    var children = node.childNodes,\n        childrenLength = children.length;\n\n    for (var i = 0; i < childrenLength; ++i) {\n      var innerTxt = showdown.subParser('makeMarkdown.node')(children[i], globals);\n\n      if (innerTxt === '') {\n        continue;\n      }\n      txt += innerTxt;\n    }\n  }\n  // cleanup\n  txt = txt.trim();\n  txt = '> ' + txt.split('\\n').join('\\n> ');\n  return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.codeBlock', function (node, globals) {\n  'use strict';\n\n  var lang = node.getAttribute('language'),\n      num  = node.getAttribute('precodenum');\n  return '```' + lang + '\\n' + globals.preList[num] + '\\n```';\n});\n\r\nshowdown.subParser('makeMarkdown.codeSpan', function (node) {\n  'use strict';\n\n  return '`' + node.innerHTML + '`';\n});\n\r\nshowdown.subParser('makeMarkdown.emphasis', function (node, globals) {\n  'use strict';\n\n  var txt = '';\n  if (node.hasChildNodes()) {\n    txt += '*';\n    var children = node.childNodes,\n        childrenLength = children.length;\n    for (var i = 0; i < childrenLength; ++i) {\n      txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n    }\n    txt += '*';\n  }\n  return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.header', function (node, globals, headerLevel) {\n  'use strict';\n\n  var headerMark = new Array(headerLevel + 1).join('#'),\n      txt = '';\n\n  if (node.hasChildNodes()) {\n    txt = headerMark + ' ';\n    var children = node.childNodes,\n        childrenLength = children.length;\n\n    for (var i = 0; i < childrenLength; ++i) {\n      txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n    }\n  }\n  return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.hr', function () {\n  'use strict';\n\n  return '---';\n});\n\r\nshowdown.subParser('makeMarkdown.image', function (node) {\n  'use strict';\n\n  var txt = '';\n  if (node.hasAttribute('src')) {\n    txt += '![' + node.getAttribute('alt') + '](';\n    txt += '<' + node.getAttribute('src') + '>';\n    if (node.hasAttribute('width') && node.hasAttribute('height')) {\n      txt += ' =' + node.getAttribute('width') + 'x' + node.getAttribute('height');\n    }\n\n    if (node.hasAttribute('title')) {\n      txt += ' \"' + node.getAttribute('title') + '\"';\n    }\n    txt += ')';\n  }\n  return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.links', function (node, globals) {\n  'use strict';\n\n  var txt = '';\n  if (node.hasChildNodes() && node.hasAttribute('href')) {\n    var children = node.childNodes,\n        childrenLength = children.length;\n    txt = '[';\n    for (var i = 0; i < childrenLength; ++i) {\n      txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n    }\n    txt += '](';\n    txt += '<' + node.getAttribute('href') + '>';\n    if (node.hasAttribute('title')) {\n      txt += ' \"' + node.getAttribute('title') + '\"';\n    }\n    txt += ')';\n  }\n  return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.list', function (node, globals, type) {\n  'use strict';\n\n  var txt = '';\n  if (!node.hasChildNodes()) {\n    return '';\n  }\n  var listItems       = node.childNodes,\n      listItemsLenght = listItems.length,\n      listNum = node.getAttribute('start') || 1;\n\n  for (var i = 0; i < listItemsLenght; ++i) {\n    if (typeof listItems[i].tagName === 'undefined' || listItems[i].tagName.toLowerCase() !== 'li') {\n      continue;\n    }\n\n    // define the bullet to use in list\n    var bullet = '';\n    if (type === 'ol') {\n      bullet = listNum.toString() + '. ';\n    } else {\n      bullet = '- ';\n    }\n\n    // parse list item\n    txt += bullet + showdown.subParser('makeMarkdown.listItem')(listItems[i], globals);\n    ++listNum;\n  }\n\n  // add comment at the end to prevent consecutive lists to be parsed as one\n  txt += '\\n<!-- -->\\n';\n  return txt.trim();\n});\n\r\nshowdown.subParser('makeMarkdown.listItem', function (node, globals) {\n  'use strict';\n\n  var listItemTxt = '';\n\n  var children = node.childNodes,\n      childrenLenght = children.length;\n\n  for (var i = 0; i < childrenLenght; ++i) {\n    listItemTxt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n  }\n  // if it's only one liner, we need to add a newline at the end\n  if (!/\\n$/.test(listItemTxt)) {\n    listItemTxt += '\\n';\n  } else {\n    // it's multiparagraph, so we need to indent\n    listItemTxt = listItemTxt\n      .split('\\n')\n      .join('\\n    ')\n      .replace(/^ {4}$/gm, '')\n      .replace(/\\n\\n+/g, '\\n\\n');\n  }\n\n  return listItemTxt;\n});\n\r\n\n\nshowdown.subParser('makeMarkdown.node', function (node, globals, spansOnly) {\n  'use strict';\n\n  spansOnly = spansOnly || false;\n\n  var txt = '';\n\n  // edge case of text without wrapper paragraph\n  if (node.nodeType === 3) {\n    return showdown.subParser('makeMarkdown.txt')(node, globals);\n  }\n\n  // HTML comment\n  if (node.nodeType === 8) {\n    return '<!--' + node.data + '-->\\n\\n';\n  }\n\n  // process only node elements\n  if (node.nodeType !== 1) {\n    return '';\n  }\n\n  var tagName = node.tagName.toLowerCase();\n\n  switch (tagName) {\n\n    //\n    // BLOCKS\n    //\n    case 'h1':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 1) + '\\n\\n'; }\n      break;\n    case 'h2':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 2) + '\\n\\n'; }\n      break;\n    case 'h3':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 3) + '\\n\\n'; }\n      break;\n    case 'h4':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 4) + '\\n\\n'; }\n      break;\n    case 'h5':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 5) + '\\n\\n'; }\n      break;\n    case 'h6':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 6) + '\\n\\n'; }\n      break;\n\n    case 'p':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.paragraph')(node, globals) + '\\n\\n'; }\n      break;\n\n    case 'blockquote':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.blockquote')(node, globals) + '\\n\\n'; }\n      break;\n\n    case 'hr':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.hr')(node, globals) + '\\n\\n'; }\n      break;\n\n    case 'ol':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ol') + '\\n\\n'; }\n      break;\n\n    case 'ul':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ul') + '\\n\\n'; }\n      break;\n\n    case 'precode':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.codeBlock')(node, globals) + '\\n\\n'; }\n      break;\n\n    case 'pre':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.pre')(node, globals) + '\\n\\n'; }\n      break;\n\n    case 'table':\n      if (!spansOnly) { txt = showdown.subParser('makeMarkdown.table')(node, globals) + '\\n\\n'; }\n      break;\n\n    //\n    // SPANS\n    //\n    case 'code':\n      txt = showdown.subParser('makeMarkdown.codeSpan')(node, globals);\n      break;\n\n    case 'em':\n    case 'i':\n      txt = showdown.subParser('makeMarkdown.emphasis')(node, globals);\n      break;\n\n    case 'strong':\n    case 'b':\n      txt = showdown.subParser('makeMarkdown.strong')(node, globals);\n      break;\n\n    case 'del':\n      txt = showdown.subParser('makeMarkdown.strikethrough')(node, globals);\n      break;\n\n    case 'a':\n      txt = showdown.subParser('makeMarkdown.links')(node, globals);\n      break;\n\n    case 'img':\n      txt = showdown.subParser('makeMarkdown.image')(node, globals);\n      break;\n\n    default:\n      txt = node.outerHTML + '\\n\\n';\n  }\n\n  // common normalization\n  // TODO eventually\n\n  return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.paragraph', function (node, globals) {\n  'use strict';\n\n  var txt = '';\n  if (node.hasChildNodes()) {\n    var children = node.childNodes,\n        childrenLength = children.length;\n    for (var i = 0; i < childrenLength; ++i) {\n      txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n    }\n  }\n\n  // some text normalization\n  txt = txt.trim();\n\n  return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.pre', function (node, globals) {\n  'use strict';\n\n  var num  = node.getAttribute('prenum');\n  return '<pre>' + globals.preList[num] + '</pre>';\n});\n\r\nshowdown.subParser('makeMarkdown.strikethrough', function (node, globals) {\n  'use strict';\n\n  var txt = '';\n  if (node.hasChildNodes()) {\n    txt += '~~';\n    var children = node.childNodes,\n        childrenLength = children.length;\n    for (var i = 0; i < childrenLength; ++i) {\n      txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n    }\n    txt += '~~';\n  }\n  return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.strong', function (node, globals) {\n  'use strict';\n\n  var txt = '';\n  if (node.hasChildNodes()) {\n    txt += '**';\n    var children = node.childNodes,\n        childrenLength = children.length;\n    for (var i = 0; i < childrenLength; ++i) {\n      txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n    }\n    txt += '**';\n  }\n  return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.table', function (node, globals) {\n  'use strict';\n\n  var txt = '',\n      tableArray = [[], []],\n      headings   = node.querySelectorAll('thead>tr>th'),\n      rows       = node.querySelectorAll('tbody>tr'),\n      i, ii;\n  for (i = 0; i < headings.length; ++i) {\n    var headContent = showdown.subParser('makeMarkdown.tableCell')(headings[i], globals),\n        allign = '---';\n\n    if (headings[i].hasAttribute('style')) {\n      var style = headings[i].getAttribute('style').toLowerCase().replace(/\\s/g, '');\n      switch (style) {\n        case 'text-align:left;':\n          allign = ':---';\n          break;\n        case 'text-align:right;':\n          allign = '---:';\n          break;\n        case 'text-align:center;':\n          allign = ':---:';\n          break;\n      }\n    }\n    tableArray[0][i] = headContent.trim();\n    tableArray[1][i] = allign;\n  }\n\n  for (i = 0; i < rows.length; ++i) {\n    var r = tableArray.push([]) - 1,\n        cols = rows[i].getElementsByTagName('td');\n\n    for (ii = 0; ii < headings.length; ++ii) {\n      var cellContent = ' ';\n      if (typeof cols[ii] !== 'undefined') {\n        cellContent = showdown.subParser('makeMarkdown.tableCell')(cols[ii], globals);\n      }\n      tableArray[r].push(cellContent);\n    }\n  }\n\n  var cellSpacesCount = 3;\n  for (i = 0; i < tableArray.length; ++i) {\n    for (ii = 0; ii < tableArray[i].length; ++ii) {\n      var strLen = tableArray[i][ii].length;\n      if (strLen > cellSpacesCount) {\n        cellSpacesCount = strLen;\n      }\n    }\n  }\n\n  for (i = 0; i < tableArray.length; ++i) {\n    for (ii = 0; ii < tableArray[i].length; ++ii) {\n      if (i === 1) {\n        if (tableArray[i][ii].slice(-1) === ':') {\n          tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii].slice(-1), cellSpacesCount - 1, '-') + ':';\n        } else {\n          tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount, '-');\n        }\n      } else {\n        tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount);\n      }\n    }\n    txt += '| ' + tableArray[i].join(' | ') + ' |\\n';\n  }\n\n  return txt.trim();\n});\n\r\nshowdown.subParser('makeMarkdown.tableCell', function (node, globals) {\n  'use strict';\n\n  var txt = '';\n  if (!node.hasChildNodes()) {\n    return '';\n  }\n  var children = node.childNodes,\n      childrenLength = children.length;\n\n  for (var i = 0; i < childrenLength; ++i) {\n    txt += showdown.subParser('makeMarkdown.node')(children[i], globals, true);\n  }\n  return txt.trim();\n});\n\r\nshowdown.subParser('makeMarkdown.txt', function (node) {\n  'use strict';\n\n  var txt = node.nodeValue;\n\n  // multiple spaces are collapsed\n  txt = txt.replace(/ +/g, ' ');\n\n  // replace the custom ¨NBSP; with a space\n  txt = txt.replace(/¨NBSP;/g, ' ');\n\n  // \", <, > and & should replace escaped html entities\n  txt = showdown.helper.unescapeHTMLEntities(txt);\n\n  // escape markdown magic characters\n  // emphasis, strong and strikethrough - can appear everywhere\n  // we also escape pipe (|) because of tables\n  // and escape ` because of code blocks and spans\n  txt = txt.replace(/([*_~|`])/g, '\\\\$1');\n\n  // escape > because of blockquotes\n  txt = txt.replace(/^(\\s*)>/g, '\\\\$1>');\n\n  // hash character, only troublesome at the beginning of a line because of headers\n  txt = txt.replace(/^#/gm, '\\\\#');\n\n  // horizontal rules\n  txt = txt.replace(/^(\\s*)([-=]{3,})(\\s*)$/, '$1\\\\$2$3');\n\n  // dot, because of ordered lists, only troublesome at the beginning of a line when preceded by an integer\n  txt = txt.replace(/^( {0,3}\\d+)\\./gm, '$1\\\\.');\n\n  // +, * and -, at the beginning of a line becomes a list, so we need to escape them also (asterisk was already escaped)\n  txt = txt.replace(/^( {0,3})([+-])/gm, '$1\\\\$2');\n\n  // images and links, ] followed by ( is problematic, so we escape it\n  txt = txt.replace(/]([\\s]*)\\(/g, '\\\\]$1\\\\(');\n\n  // reference URIs must also be escaped\n  txt = txt.replace(/^ {0,3}\\[([\\S \\t]*?)]:/gm, '\\\\[$1]:');\n\n  return txt;\n});\n\r\nvar root = this;\n\n// AMD Loader\nif (typeof define === 'function' && define.amd) {\n  define(function () {\n    'use strict';\n    return showdown;\n  });\n\n// CommonJS/nodeJS Loader\n} else if (typeof module !== 'undefined' && module.exports) {\n  module.exports = showdown;\n\n// Regular Browser loader\n} else {\n  root.showdown = showdown;\n}\n}).call(this);\r\n\n//# sourceMappingURL=showdown.js.map\r\n","<script lang=\"ts\" setup>\nimport { computed, onActivated, onMounted, ref } from \"vue\";\nimport { useRouter } from \"vue-router\";\nimport { useEventListener, whenever } from \"@vueuse/core\";\nimport { useRouteHash } from \"@vueuse/router\";\nimport showdown from \"showdown\";\n\nimport ExpandableSection from \"@/components/ui/section/ExpandableSection.vue\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport type { Topic } from \"@/typings/api\";\n\nconst props = defineProps<{\n  topic: Topic;\n}>();\n\nconst converter = new showdown.Converter({\n  openLinksInNewWindow: true,\n});\n\nconst router = useRouter();\nconst hash = useRouteHash();\nconst { logUIEvent } = useAnalytics();\nconst linkEl = ref<HTMLAnchorElement | null>(null);\nconst uid = computed(() => props.topic.uid);\nconst isExpanded = computed(() => hash.value === `#${uid.value}`);\nconst onExpand = () => {\n  hash.value = `#${uid.value}`;\n  logUIEvent(\"faq:expand\", props.topic.question);\n};\nconst onCondense = () => (hash.value = \"\");\nconst answerHtml = computed(() => converter.makeHtml(props.topic.answer));\n\n// override link handling\nconst answerEl = ref<HTMLElement | null>(null);\nuseEventListener(answerEl, \"click\", (e) => {\n  const origin = (e.target as Element).closest(\"a\");\n  const href = origin?.getAttribute(\"href\");\n  if (!href) {\n    return;\n  }\n  if (href.startsWith(\"/\")) {\n    console.debug(\"FAQ: internal link - navigate via router\", href);\n    e.preventDefault();\n    e.stopPropagation();\n    e.stopImmediatePropagation();\n    router.push(href);\n  }\n});\n\nconst scrollTo = () => {\n  if (isExpanded.value && linkEl.value) {\n    // @ts-ignore\n    linkEl.value?.scrollIntoViewIfNeeded({\n      block: \"start\",\n      behavior: \"smooth\",\n    });\n  }\n};\nwhenever(isExpanded, scrollTo);\nonActivated(scrollTo);\nonMounted(scrollTo);\n</script>\n\n<template>\n  <ExpandableSection\n    :is-expanded=\"isExpanded\"\n    @expand=\"onExpand\"\n    @condense=\"onCondense\"\n    class=\"topic\"\n  >\n    <template #title>\n      <a ref=\"linkEl\" :href=\"`#${topic.uid}`\" @click.prevent v-text=\"topic.question\" />\n    </template>\n    <div ref=\"answerEl\" class=\"answer markdown\" v-html=\"answerHtml\" />\n  </ExpandableSection>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/markdown\";\n\n.topic {\n  border-top: 0;\n  border-bottom: 1px solid rgb(var(--c-dark) / 20%);\n\n  &.is-expanded {\n    color: rgb(var(--c-green) / 100%);\n  }\n\n  :deep(.answer) {\n    @include markdown.default;\n\n    p {\n      max-width: 800px;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, onActivated, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport { getFaqCategories } from \"@/api/faq\";\nimport Topic from \"@/components/faq/Topic.vue\";\nimport SocialMediaLinks from \"@/components/social-media/SocialMediaLinks.vue\";\nimport type { Category } from \"@/typings/api\";\n\nexport default defineComponent({\n  components: {\n    Topic,\n    SocialMediaLinks,\n  },\n  setup() {\n    const { t } = useI18n();\n    const categories = ref<Array<Category>>([]);\n    onActivated(async () => {\n      categories.value = await getFaqCategories();\n    });\n    return {\n      t,\n      categories,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"faq\">\n    <div class=\"title\">\n      <h1 v-text=\"t('menu.faq')\" />\n    </div>\n    <div class=\"body\">\n      <section\n        v-for=\"category in categories\"\n        :key=\"`faq-category-${category.uid}`\"\n        class=\"category\"\n      >\n        <h2 v-text=\"category.name\" />\n        <div class=\"topics\">\n          <Topic v-for=\"topic in category.topics\" :key=\"`faq-topic-${topic.uid}`\" :topic=\"topic\" />\n        </div>\n      </section>\n    </div>\n    <div class=\"appendix\">\n      <SocialMediaLinks v-if=\"categories.length\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/container\";\n@use \"@/style/elements/title\";\n\n.faq {\n  @include container.small;\n\n  .title {\n    padding: 1.5rem 0;\n\n    > h1 {\n      @include typo.x-large;\n      @include typo.bold;\n    }\n  }\n\n  .body {\n    .category {\n      margin-bottom: 4rem;\n\n      > h2 {\n        @include typo.default;\n\n        margin-bottom: 0.5rem;\n      }\n    }\n\n    .topics {\n      border-top: 1px solid rgb(var(--c-dark) / 20%);\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    path: {\n      type: String,\n      required: true,\n    },\n  },\n  setup(props) {\n    console.debug(\"props\", props);\n  },\n});\n</script>\n\n<template>\n  <div class=\"not-found\">\n    <div class=\"header\">\n      <div class=\"title\">\n        <i18n-t keypath=\"pages.pageNotFound\" tag=\"h1\" />\n      </div>\n    </div>\n    <div class=\"body\">\n      <p>{{ path }}</p>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/elements/container\";\n@use \"@/style/elements/detail-header\";\n\n.not-found {\n  @include container.default;\n\n  margin-bottom: 12rem;\n}\n\n.header {\n  @include detail-header.default;\n}\n</style>\n","export default \"__VITE_ASSET__ca6f259a__\"","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport SocialMediaLinks from \"@/components/social-media/SocialMediaLinks.vue\";\n\nexport default defineComponent({\n  components: {\n    SocialMediaLinks,\n  },\n  props: {\n    title: {\n      type: String,\n      default: \"\",\n    },\n  },\n  setup(props, { slots }) {\n    const hasLead = computed(() => !!slots.lead);\n    return {\n      hasLead,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"page\">\n    <div class=\"title\">\n      <h1 v-text=\"title\" />\n    </div>\n    <div v-if=\"hasLead\" class=\"lead\">\n      <slot name=\"lead\" />\n    </div>\n    <div class=\"body\">\n      <slot name=\"default\" />\n    </div>\n    <div class=\"appendix\">\n      <SocialMediaLinks />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/container\";\n\n.page {\n  @include container.small;\n\n  .title {\n    padding: 1.5rem 0;\n\n    > h1 {\n      @include typo.x-large;\n      @include typo.bold;\n    }\n  }\n\n  .lead {\n    @include typo.large;\n\n    margin: 0 0 2rem;\n    padding: 0 0 2rem;\n    border-bottom: 1px solid rgb(var(--c-dark) / 20%);\n  }\n\n  .body {\n    background: inherit;\n  }\n\n  .appendix {\n    padding: 2rem 0 6rem;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport twintQrCode from \"@/assets/pages/donate/twint-qr-code.png\";\nimport Page from \"@/views/pages/Page.vue\";\n\nexport default defineComponent({\n  components: {\n    Page,\n  },\n  setup() {\n    const { t } = useI18n();\n    return {\n      t,\n      twintQrCode,\n    };\n  },\n});\n</script>\n\n<i18n lang=\"yaml\">\nde:\n  title: Spenden\n  lead: Wir erweitern unser Programm kontinuierlich. Das kostet Geld.\n  lead2: Mit einer Spende hilfst du uns, dir noch mehr Musik aus der ganzen Welt präsentieren zu können.\n  bankTransfer: Überweisung\n  thankYou: Wir danken für die Unterstützung!\nen:\n  title: Donate\n  lead: We are constantly expanding our program. That costs money.\n  lead2: With a donation you help us to present you even more music from all over the world.\n  bankTransfer: Bank Transfer\n  thankYou: Thank you for your support!\n</i18n>\n\n<template>\n  <Page :title=\"t('title')\">\n    <template #lead>\n      {{ t(\"lead\") }}\n      <br />\n      {{ t(\"lead2\") }}\n    </template>\n    <div class=\"donate\">\n      <div class=\"method transfer\">\n        <h3 v-text=\"t('bankTransfer')\" />\n        <p>\n          IBAN: CH68 0900 0000 8537 9408 6<br />\n          PC: 85-379408-6<br />\n          BIC: POFICHBEXXX\n        </p>\n      </div>\n      <div class=\"method twint\">\n        <h3>Twint</h3>\n        <a href=\"https://pay.raisenow.io/kytbj\" target=\"_blank\">\n          <img class=\"logo\" :src=\"twintQrCode\" />\n        </a>\n      </div>\n    </div>\n    <!--\n    <div class=\"note\">\n      <p v-text=\"t('thankYou')\" />\n    </div>\n    -->\n    <i18n-t keypath=\"thankYou\" class=\"note\" />\n  </Page>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n\n.donate {\n  display: grid;\n  grid-gap: 1rem;\n  grid-template-columns: 1fr 1fr;\n\n  .method {\n    h3 {\n      margin-bottom: 1rem;\n    }\n\n    &.twint {\n      img {\n        max-width: 50%;\n      }\n    }\n  }\n\n  @include responsive.bp-medium {\n    grid-template-columns: unset;\n\n    .method {\n      margin-bottom: 2rem;\n\n      &.twint {\n        > a {\n          display: flex;\n          justify-content: center;\n        }\n\n        img {\n          max-width: 75%;\n        }\n      }\n    }\n  }\n}\n\n.note {\n  margin-top: 1rem;\n}\n</style>\n","import { DateTime } from \"luxon\";\nimport { defineStore } from \"pinia\";\n\nimport { getProgram } from \"@/api/broadcast\";\nimport type { Emission } from \"@/typings/api\";\n\nexport type AnnotatedEmission = Emission & {\n  dtStart: DateTime;\n  dtEnd: DateTime;\n};\n\ninterface State {\n  emissions: Array<AnnotatedEmission>;\n}\n\nconst annotateEmissions = (emissions: Array<Emission>): Array<AnnotatedEmission> => {\n  return emissions.map((emission: Emission) => {\n    return {\n      ...emission,\n      // @ts-ignore\n      dtStart: DateTime.fromISO(emission.timeStart),\n      // @ts-ignore\n      dtEnd: DateTime.fromISO(emission.timeEnd),\n    };\n  });\n};\n\nexport const useProgramStore = defineStore(\"program\", {\n  state: (): State => ({\n    emissions: [],\n  }),\n  // persist: true,\n  actions: {\n    async loadEmissions(date: DateTime): Promise<void> {\n      const program = await getProgram(date.toISODate());\n      this.emissions = annotateEmissions(program.emissions);\n    },\n  },\n});\n","<script lang=\"ts\">\nimport { computed, defineComponent, onActivated, onMounted, onUnmounted, ref, watch } from \"vue\";\nimport { DateTime } from \"luxon\";\n\nimport { getEmission } from \"@/api/broadcast\";\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport ButtonPlay from \"@/components/player/button/ButtonPlay.vue\";\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport ObjectTags from \"@/components/tagging/ObjectTags.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconCaret from \"@/components/ui/icon/IconCaret.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { useObjKey } from \"@/composables/obj\";\nimport { usePlayerControls } from \"@/composables/player\";\nimport { useSettings } from \"@/composables/settings\";\n\nexport default defineComponent({\n  components: {\n    ButtonPlay,\n    PlayAction,\n    ObjectTags,\n    UserRating,\n    CircleButton,\n    IconCaret,\n  },\n  props: {\n    emission: {\n      type: Object,\n      required: true,\n    },\n    isPast: {\n      type: Boolean,\n      default: false,\n    },\n    isUpcoming: {\n      type: Boolean,\n      default: false,\n    },\n    isCurrent: {\n      type: Boolean,\n      default: false,\n    },\n    isExpanded: {\n      type: Boolean,\n      default: false,\n    },\n    currentLinkToHome: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  emits: [\"navigate\", \"toggleExpanded\"],\n  setup(props, { emit }) {\n    const root = ref<HTMLElement | null>(null);\n    const { objKey } = useObjKey(props.emission.playlist);\n    const isHover = ref(false);\n    const { isDesktop } = useDevice();\n    const { darkMode } = useSettings();\n    const now = ref(DateTime.now());\n    const timer = ref(null);\n\n    const playlist = computed(() => {\n      return props.emission.playlist;\n    });\n\n    const scrollIntoView = (force = false) => {\n      if (!root.value) {\n        return;\n      }\n      if (force) {\n        root.value.scrollIntoView({\n          block: \"start\",\n          behavior: \"smooth\",\n        });\n      } else {\n        root.value?.scrollIntoViewIfNeeded({\n          block: \"end\",\n          behavior: \"smooth\",\n        });\n      }\n    };\n    onActivated(() => {\n      if (props.isCurrent) {\n        scrollIntoView();\n      }\n    });\n    onMounted(() => {\n      if (props.isCurrent) {\n        scrollIntoView();\n      }\n      // @ts-ignore\n      timer.value = setInterval(() => {\n        now.value = DateTime.now();\n      }, 2000);\n    });\n    onUnmounted(() => {\n      // @ts-ignore\n      clearInterval(timer.value);\n    });\n    watch(\n      () => props.isCurrent,\n      async () => {\n        if (props.isCurrent) {\n          scrollIntoView();\n        }\n      }\n    );\n    const routeTo = computed(() => {\n      if (props.currentLinkToHome && props.isCurrent) {\n        return {\n          path: \"/\",\n        };\n      }\n      if (props.isPast || props.isCurrent) {\n        return {\n          name: \"playlistDetail\",\n          params: {\n            uid: playlist.value.uid,\n          },\n        };\n      }\n      return {};\n    });\n    const { playLive } = usePlayerControls();\n    const play = () => {\n      if (props.isCurrent) {\n        playLive();\n      }\n      return null;\n    };\n    const pause = () => {\n      console.debug(\"pause\");\n    };\n    const navigate = () => {\n      emit(\"navigate\");\n    };\n    const title = computed(() => {\n      return {\n        name: props.emission.series ? props.emission.series.name : props.emission.name,\n        appendix: props.emission.series ? props.emission.series.episode : null,\n        secondary: props.emission.name,\n      };\n    });\n    const tagsDisplay = computed(() => {\n      return props.emission.tags.slice(0, 4).join(\", \");\n    });\n    const timeStartDisplay = computed(() => {\n      if (!props.emission?.dtStart) {\n        return null;\n      }\n      return props.emission.dtStart.setLocale(\"de-ch\").toLocaleString(DateTime.TIME_24_SIMPLE);\n    });\n    const mediaSet = ref([]);\n    watch(\n      () => props.isExpanded,\n      async (newValue) => {\n        if (newValue) {\n          const data = await getEmission(props.emission.uid);\n          mediaSet.value = data.mediaSet;\n          scrollIntoView(true);\n        }\n      }\n    );\n    const toggleExpanded = () => {\n      emit(\"toggleExpanded\");\n    };\n    return {\n      root,\n      objKey,\n      isHover,\n      isDesktop,\n      darkMode,\n      routeTo,\n      play,\n      pause,\n      navigate,\n      title,\n      tagsDisplay,\n      timeStartDisplay,\n      toggleExpanded,\n      mediaSet,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"emission-row\" @mouseenter=\"isHover = true\" @mouseleave=\"isHover = false\">\n    <div class=\"play\">\n      <PlayAction\n        v-if=\"isPast\"\n        :obj-key=\"`${emission.playlist.ct}:${emission.playlist.uid}`\"\n        :outlined=\"true\"\n        :color=\"darkMode ? [255, 255, 255] : [0, 0, 0]\"\n      />\n      <ButtonPlay\n        v-if=\"isCurrent\"\n        :style=\"{\n          '--c-fg': 'var(--c-white)',\n          '--c-bg': 'var(--c-black)',\n        }\"\n        @play=\"play\"\n        @pause=\"pause\"\n      />\n    </div>\n    <div class=\"name\">\n      <router-link v-if=\"!isUpcoming\" :to=\"routeTo\" @click=\"navigate\">\n        {{ title.name }}\n        <span v-if=\"title.appendix\" v-text=\"`#${title.appendix}`\" />\n        <!--<small v-text=\"title.secondary\" />-->\n      </router-link>\n      <span v-else>\n        {{ title.name }}\n        <span v-if=\"title.appendix\" v-text=\"`#${title.appendix}`\" />\n      </span>\n    </div>\n    <div class=\"editor\" v-if=\"emission.editor\" v-text=\"emission.editor.name\" />\n    <ObjectTags class=\"tags\" :obj=\"emission\" :limit=\"4\" />\n    <div class=\"time-start\">\n      {{ timeStartDisplay }}\n    </div>\n    <div v-if=\"isPast || isCurrent\" class=\"actions\">\n      <CircleButton v-if=\"isDesktop\">\n        <UserRating\n          :obj-key=\"objKey\"\n          :autoload=\"true\"\n          :hide-if-unset=\"!isHover\"\n          color-var=\"--c-fg\"\n        />\n      </CircleButton>\n      <CircleButton @click=\"toggleExpanded\">\n        <IconCaret :direction=\"isExpanded ? 'up' : 'down'\" />\n      </CircleButton>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n\n.emission-row {\n  @include container.default;\n\n  display: grid;\n  grid-row-gap: 0;\n  grid-column-gap: 1rem;\n  grid-template-areas:\n    \"play name editor  time-start actions\"\n    \"play name tags    time-start actions\";\n  grid-template-columns: 48px 9fr 8fr 2fr 96px;\n  padding: 0.75rem 1.5rem;\n  background: rgb(var(--c-bg));\n\n  @include responsive.on-hover {\n    background: rgb(var(--c-bg-hover));\n  }\n\n  > div {\n    display: flex;\n    align-items: center;\n  }\n\n  .play {\n    position: relative;\n    grid-area: play;\n    max-height: 48px;\n    align-self: center;\n  }\n\n  .name {\n    grid-area: name;\n\n    @include typo.large;\n\n    min-width: 0;\n\n    > a,\n    > span {\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n  }\n\n  .editor {\n    grid-area: editor;\n    overflow: hidden;\n  }\n\n  .tags {\n    grid-area: tags;\n    overflow: hidden;\n  }\n\n  .time-start {\n    grid-area: time-start;\n\n    @include typo.large;\n\n    justify-content: flex-end;\n  }\n\n  .actions {\n    grid-area: actions;\n  }\n\n  @include responsive.bp-medium {\n    grid-row-gap: 0;\n    grid-column-gap: 1rem;\n    grid-template-areas: \"play name time-start actions\";\n    grid-template-columns: 40px 8fr 4fr 40px;\n    min-height: 60px;\n\n    .play {\n      margin-left: 4px;\n    }\n\n    .tags {\n      display: none;\n    }\n\n    .editor {\n      display: none;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\nimport { DateTime } from \"luxon\";\n\nimport PlayAction from \"@/components/catalog/actions/PlayAction.vue\";\nimport MediaArtists from \"@/components/catalog/media/MediaArtists.vue\";\nimport MediaReleases from \"@/components/catalog/media/MediaReleases.vue\";\nimport ContextMenu from \"@/components/context-menu/ContextMenu.vue\";\nimport UserRating from \"@/components/rating/UserRating.vue\";\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport { useDevice } from \"@/composables/device\";\nimport { useSettings } from \"@/composables/settings\";\n\nexport default defineComponent({\n  components: {\n    PlayAction,\n    ContextMenu,\n    MediaArtists,\n    MediaReleases,\n    UserRating,\n    CircleButton,\n  },\n  props: {\n    emissionMedia: {\n      type: Object,\n      required: true,\n    },\n  },\n  setup(props) {\n    const isHover = ref(false);\n    const { isDesktop } = useDevice();\n    const { darkMode } = useSettings();\n    const media = computed(() => {\n      return props.emissionMedia?.media;\n    });\n    const objKey = computed(() => {\n      return `catalog.media:${media.value.uid}`;\n    });\n    const timeStart = computed(() => {\n      return DateTime.fromISO(props.emissionMedia.timeStart);\n    });\n    const timeStartDisplay = computed(() => {\n      return timeStart.value.setLocale(\"de-ch\").toLocaleString(DateTime.TIME_24_SIMPLE);\n    });\n    return {\n      media,\n      objKey,\n      isHover,\n      isDesktop,\n      darkMode,\n      timeStartDisplay,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"media-row\" @mouseenter=\"isHover = true\" @mouseleave=\"isHover = false\">\n    <div class=\"play\">\n      <PlayAction\n        :obj-key=\"objKey\"\n        :outlined=\"true\"\n        :color=\"darkMode ? [255, 255, 255] : [0, 0, 0]\"\n      />\n    </div>\n    <div class=\"name\">\n      <router-link\n        :to=\"{\n          name: 'mediaDetail',\n          params: {\n            uid: media.uid,\n          },\n        }\"\n        v-text=\"media.name\"\n      />\n      <!--\n      <span>{{ media.name }}</span>\n      -->\n    </div>\n    <div class=\"artist\">\n      <MediaArtists :artists=\"media.artists\" :link=\"false\" />\n    </div>\n    <div class=\"release\">\n      <MediaReleases :releases=\"media.releases\" />\n    </div>\n    <div class=\"time-start\">\n      {{ timeStartDisplay }}\n    </div>\n    <div class=\"actions\">\n      <CircleButton v-if=\"isDesktop\">\n        <UserRating :obj-key=\"objKey\" :autoload=\"true\" :hide-if-unset=\"!isHover\" />\n      </CircleButton>\n      <ContextMenu :obj=\"media\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n\n.media-row {\n  @include container.default;\n\n  display: grid;\n  grid-row-gap: 0;\n  grid-column-gap: 1rem;\n  grid-template-areas:\n    \"play name artist  time-start actions\"\n    \"play name release    time-start actions\";\n  grid-template-columns: 48px 9fr 8fr 2fr 96px;\n  padding: 0.75rem 1.5rem 0.75rem 1rem;\n  color: rgb(var(--c-dark));\n\n  > div {\n    display: flex;\n    align-items: center;\n  }\n\n  .play {\n    position: relative;\n    grid-area: play;\n    max-height: 48px;\n    align-self: center;\n  }\n\n  .name {\n    grid-area: name;\n\n    @include typo.large;\n\n    min-width: 0;\n\n    > a,\n    > span {\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n  }\n\n  .artist {\n    grid-area: artist;\n    overflow: hidden;\n\n    > div {\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n  }\n\n  .release {\n    grid-area: release;\n    overflow: hidden;\n\n    > div {\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n  }\n\n  .time-start {\n    grid-area: time-start;\n\n    @include typo.large;\n\n    justify-content: flex-end;\n  }\n\n  .actions {\n    grid-area: actions;\n  }\n\n  @include responsive.bp-medium {\n    grid-row-gap: 0;\n    grid-column-gap: 1rem;\n    grid-template-areas:\n      \"play name   time-start actions\"\n      \"play artist time-start actions\";\n    grid-template-columns: 40px 8fr 4fr 40px;\n    min-height: 60px;\n    padding-left: 0;\n\n    .play {\n      margin-left: 4px;\n    }\n\n    .release {\n      display: none;\n    }\n\n    .name {\n      line-height: 1.25rem;\n      align-self: end;\n    }\n\n    .artist {\n      @include typo.dim;\n      @include typo.light;\n\n      line-height: 1.25rem;\n      align-self: start;\n      white-space: nowrap;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\nimport { DateTime } from \"luxon\";\nimport { storeToRefs } from \"pinia\";\n\nimport Duration from \"@/components/ui/time/Duration.vue\";\nimport { useTimeStore } from \"@/stores/time\";\nimport type { Media } from \"@/typings/api\";\n\nimport MediaRow from \"./MediaRow.vue\";\n\nexport default defineComponent({\n  components: {\n    MediaRow,\n    Duration,\n  },\n  props: {\n    mediaSet: {\n      // type: Array,\n      type: Array as PropType<Array<Media>>,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { time } = storeToRefs(useTimeStore());\n    const visibleMediaSet = computed(() => {\n      return props.mediaSet.filter((m: any) => DateTime.fromISO(m.timeStart) < time.value);\n    });\n    const numHidden = computed(() => {\n      return props.mediaSet.length - visibleMediaSet.value.length;\n    });\n    const nextMedia = computed(() => {\n      return props.mediaSet.find((m: any) => DateTime.fromISO(m.timeStart) > time.value);\n    });\n    const nextStartInSeconds = computed(() => {\n      if (!nextMedia.value) {\n        return 0;\n      }\n      return time.value.diff(DateTime.fromISO(nextMedia.value.timeStart), \"seconds\").seconds;\n    });\n    return {\n      time,\n      visibleMediaSet,\n      numHidden,\n      nextStartInSeconds,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"media-set\">\n    <TransitionGroup name=\"list\">\n      <MediaRow\n        v-for=\"(media, index) in visibleMediaSet\"\n        :emission-media=\"media\"\n        :key=\"`emission-media-${index}-${media.uid}`\"\n      />\n    </TransitionGroup>\n    <div class=\"feature-media\" v-if=\"numHidden > 0\">\n      <Duration class=\"next-start\" :seconds=\"nextStartInSeconds * -1\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n\n.media-set {\n  .media-row {\n    &:not(&:first-child) {\n      border-top: 1px solid rgb(var(--c-dark) / 20%);\n    }\n  }\n\n  .feature-media {\n    border-top: 1px solid rgb(var(--c-dark) / 20%);\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n    color: rgb(var(--c-dark) / 20%);\n    padding: 1rem 1rem 1rem calc(2rem + 48px);\n\n    .next-start {\n      @include typo.large;\n    }\n\n    @include responsive.bp-medium {\n      padding: 1rem;\n      justify-content: center;\n    }\n  }\n}\n\n.list-enter-active,\n.list-leave-active {\n  transition: opacity 0.5s ease;\n}\n\n.list-enter-from,\n.list-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onActivated, onMounted, onUnmounted, ref, watch } from \"vue\";\nimport { DateTime } from \"luxon\";\n\nimport { getEmission } from \"@/api/broadcast\";\nimport { usePlayerControls } from \"@/composables/player\";\n\nimport EmissionRow from \"./EmissionRow.vue\";\nimport MediaSet from \"./MediaSet.vue\";\n\nexport default defineComponent({\n  components: {\n    EmissionRow,\n    MediaSet,\n  },\n  props: {\n    emission: {\n      type: Object,\n      required: true,\n    },\n    currentLinkToHome: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  emits: [\"navigate\"],\n  setup(props, { emit }) {\n    // const root = ref(null);\n    const root = ref<HTMLElement | null>(null);\n    const now = ref(DateTime.now());\n    const timer = ref(null);\n    const isExpanded = ref(false);\n    const isPast = computed(() => {\n      return props.emission.dtEnd < now.value;\n    });\n    const isUpcoming = computed(() => {\n      return props.emission.dtStart > now.value;\n    });\n    const isCurrent = computed(() => {\n      return props.emission.dtStart < now.value && props.emission.dtEnd > now.value;\n    });\n\n    const scrollIntoView = (force = false) => {\n      if (!root.value) {\n        return;\n      }\n      if (force || !root.value.scrollIntoViewIfNeeded) {\n        root.value.scrollIntoView({\n          block: \"start\",\n          behavior: \"smooth\",\n        });\n      } else {\n        root.value.scrollIntoViewIfNeeded({\n          block: \"end\",\n          behavior: \"smooth\",\n        });\n      }\n    };\n    onActivated(() => {\n      if (isCurrent.value) {\n        scrollIntoView();\n      }\n    });\n    onMounted(() => {\n      if (isCurrent.value) {\n        scrollIntoView();\n      }\n      // @ts-ignore\n      timer.value = setInterval(() => {\n        now.value = DateTime.now();\n      }, 2000);\n    });\n    onUnmounted(() => {\n      // @ts-ignore\n      clearInterval(timer.value);\n    });\n    watch(\n      () => isCurrent.value,\n      async () => {\n        if (isCurrent.value) {\n          scrollIntoView();\n        }\n      }\n    );\n    const routeTo = computed(() => {\n      if (props.currentLinkToHome && isCurrent.value) {\n        return {\n          path: \"/\",\n        };\n      }\n      if (isPast.value || isCurrent.value) {\n        return {\n          name: \"playlistDetail\",\n          params: {\n            uid: props.emission.playlist?.uid,\n          },\n        };\n      }\n      return {};\n    });\n    const { playLive } = usePlayerControls();\n    const play = () => {\n      if (isCurrent.value) {\n        playLive();\n      }\n      return null;\n    };\n    const pause = () => {\n      console.debug(\"pause\");\n    };\n    const navigate = () => {\n      emit(\"navigate\");\n    };\n    const title = computed(() => {\n      return {\n        name: props.emission.series ? props.emission.series.name : props.emission.name,\n        appendix: props.emission.series ? props.emission.series.episode : null,\n      };\n    });\n    const tagsDisplay = computed(() => {\n      return props.emission.tags.slice(0, 4).join(\", \");\n    });\n    const timeStartDisplay = computed(() => {\n      if (!props.emission?.dtStart) {\n        return null;\n      }\n      return props.emission.dtStart.setLocale(\"de-ch\").toLocaleString(DateTime.TIME_24_SIMPLE);\n    });\n    const cssVars = computed(() => {\n      let fg = \"var(--c-dark)\";\n      let bg = \"var(--c-light)\";\n      let bgHover = \"var(--c-dark) / 5%\";\n\n      if (isExpanded.value) {\n        fg = \"var(--c-dark)\";\n        bg = \"var(--c-gray-500)\";\n        bgHover = \"var(--c-gray-500)\";\n      }\n\n      if (isCurrent.value) {\n        fg = \"var(--c-white)\";\n        bg = \"var(--c-black) / 100%\";\n        bgHover = \"var(--c-black) / 100%\";\n      }\n\n      if (isUpcoming.value) {\n        bg = \"var(--c-light)\";\n        fg = \"var(--c-gray-500)\";\n        bgHover = \"var(--c-dark) / 0%\";\n      }\n      return {\n        \"--c-fg\": fg,\n        \"--c-bg\": bg,\n        \"--c-bg-hover\": bgHover,\n      };\n    });\n    const mediaSet = ref([]);\n    const loadMediaSet = async () => {\n      const mediaSetData = await getEmission(props.emission.uid);\n      mediaSet.value = mediaSetData.mediaSet;\n    };\n    const showMedia = async () => {\n      isExpanded.value = true;\n      await loadMediaSet();\n      scrollIntoView(true);\n    };\n    const hideMedia = () => {\n      isExpanded.value = false;\n    };\n    const toggleExpanded = () => {\n      if (isExpanded.value) {\n        hideMedia();\n      } else {\n        showMedia();\n      }\n    };\n    return {\n      root,\n      isPast,\n      isCurrent,\n      isUpcoming,\n      routeTo,\n      play,\n      pause,\n      navigate,\n      title,\n      tagsDisplay,\n      timeStartDisplay,\n      cssVars,\n      isExpanded,\n      showMedia,\n      hideMedia,\n      toggleExpanded,\n      mediaSet,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    ref=\"root\"\n    class=\"emission\"\n    :style=\"cssVars\"\n    :class=\"{\n      'is-past': isPast,\n      'is-current': isCurrent,\n      'is-upcoming': isUpcoming,\n      'is-expanded': isExpanded,\n    }\"\n  >\n    <EmissionRow\n      class=\"emission-row\"\n      :emission=\"emission\"\n      :is-past=\"isPast\"\n      :is-current=\"isCurrent\"\n      :is-upcoming=\"isUpcoming\"\n      :is-expanded=\"isExpanded\"\n      @toggle-expanded=\"toggleExpanded\"\n    />\n    <transition>\n      <MediaSet class=\"media-set\" v-if=\"isExpanded\" :media-set=\"mediaSet\" />\n    </transition>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/container\";\n\n.emission {\n  color: rgb(var(--c-fg));\n  border-bottom: 1px solid rgb(var(--c-dark) / 20%);\n  transition: background 200ms;\n\n  &.is-expanded {\n    position: relative;\n\n    .emission-row {\n      top: 0;\n      position: sticky;\n      z-index: 1;\n    }\n\n    .media-set {\n      position: relative;\n      min-height: 72px;\n      overflow: hidden;\n      border-left: solid 0.5rem rgb(var(--c-bg));\n      background: rgb(var(--c-light));\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\n\nimport IconProgram from \"@/components/ui/icon/IconProgram.vue\";\n\nexport default defineComponent({\n  components: {\n    IconProgram,\n  },\n  props: {\n    modelValue: {\n      type: String,\n      default: \"\",\n      required: true,\n    },\n    label: {\n      type: String,\n      default: \"\",\n    },\n    min: {\n      type: String,\n      default: \"\",\n    },\n    max: {\n      type: String,\n      default: \"\",\n    },\n  },\n  emits: [\"keyup\", \"change\", \"update:modelValue\"],\n\n  setup(props, { emit }) {\n    const id = ref(`form-date-input-${Math.random().toString(36).slice(2)}`);\n    const update = (value: string) => {\n      emit(\"update:modelValue\", value);\n    };\n    const onClick = () => {\n      const el = document.getElementById(id.value);\n      if (el) {\n        try {\n          el.showPicker();\n        } catch (err) {} // eslint-disable-line no-empty\n      }\n    };\n    return {\n      id,\n      update,\n      onClick,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"date-input\" @click=\"onClick\">\n    <label v-if=\"label\" :for=\"id\" v-text=\"label\" />\n    <input\n      :id=\"id\"\n      :value=\"modelValue\"\n      :min=\"min\"\n      :max=\"max\"\n      type=\"date\"\n      required\n      @keyup=\"$emit('keyup')\"\n      @change=\"$emit('change')\"\n      @input=\"update(($event.target as HTMLInputElement).value)\"\n    />\n    <div class=\"icon\">\n      <IconProgram :scale=\"0.825\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/form\";\n\n.date-input {\n  position: relative;\n\n  input {\n    display: grid;\n    height: 100%;\n    grid-template-columns: 1fr 32px;\n    width: 100%;\n    padding: 0.25em 0.5em;\n    color: currentcolor;\n    border: 3px solid currentcolor;\n    border-radius: 3px;\n    transition: 100ms background ease-in-out, 100ms border-color ease-in-out;\n    background: rgb(var(--c-light));\n\n    &:focus {\n      background: rgb(var(--c-dark) / 10%);\n      border-color: transparent;\n      outline: none;\n    }\n\n    &:hover {\n      background: rgb(var(--c-dark) / 10%);\n      outline: none;\n      cursor: pointer;\n    }\n\n    &:not(:valid) {\n      background: rgb(var(--c-warning) / 10%);\n    }\n\n    &::-webkit-calendar-picker-indicator {\n      height: 100%;\n      width: 30px;\n      opacity: 0;\n      z-index: 1;\n      cursor: pointer;\n    }\n  }\n\n  .icon {\n    top: 0;\n    position: absolute;\n    height: 100%;\n    right: 0;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    pointer-events: none;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent, ref } from \"vue\";\nimport { watchDebounced } from \"@vueuse/core\";\nimport { DateTime } from \"luxon\";\n\nimport DateInput from \"@/components/ui/form/DateInput.vue\";\n\nexport type Filter = {\n  date: DateTime;\n};\n\nexport default defineComponent({\n  components: {\n    DateInput,\n  },\n  props: {\n    modelValue: {\n      type: Object as PropType<Filter>,\n      required: true,\n    },\n  },\n  emits: [\"update:modelValue\"],\n  setup(props, { emit }) {\n    const date = computed(() => {\n      return props.modelValue.date;\n    });\n    const today = DateTime.now();\n    const dateInput = ref(date.value.toISODate());\n    const dateInputMin = \"2019-01-01\";\n    const dateInputMax = computed(() => {\n      return today.toISODate();\n    });\n    const userFilter = computed(() => {\n      const filterDate = DateTime.fromISO(dateInput.value);\n      return {\n        date: filterDate,\n      };\n    });\n    const update = (value: Filter) => {\n      emit(\"update:modelValue\", value);\n    };\n    watchDebounced(() => userFilter.value, update, { debounce: 200 });\n    return {\n      dateInput,\n      dateInputMin,\n      dateInputMax,\n    };\n  },\n});\n</script>\n\n<template>\n  <div>\n    <div class=\"filter\">\n      <DateInput v-model=\"dateInput\" :min=\"dateInputMin\" :max=\"dateInputMax\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/responsive\";\n\n.filter {\n  position: relative;\n  height: 38px;\n  display: flex;\n  min-width: 240px;\n\n  > .date-input {\n    width: 100%;\n\n    :deep(> input) {\n      width: 240px;\n      padding: 0 0.5rem;\n      font-size: 1rem;\n      text-align: center;\n      font-family: var(--font-family);\n      border: 1px solid rgb(var(--c-dark) / 20%);\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent, onActivated, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { DateTime } from \"luxon\";\nimport { storeToRefs } from \"pinia\";\nimport { isEqual } from \"lodash-es\";\n\nimport { useProgramStore } from \"@/stores/program\";\n\nimport Emission from \"./emission/Emission.vue\";\nimport Filter from \"./Filter.vue\";\n\nexport default defineComponent({\n  components: {\n    Filter,\n    Emission,\n  },\n  props: {\n    date: {\n      type: Object as PropType<DateTime>,\n      required: true,\n    },\n    title: {\n      type: String,\n      default: \"Program\",\n    },\n    currentLinkToHome: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  emits: [\"navigate\", \"dateUpdate\"],\n  setup(props, { emit }) {\n    const { t } = useI18n();\n    const { emissions } = storeToRefs(useProgramStore());\n    const { loadEmissions } = useProgramStore();\n    const navigate = () => {\n      emit(\"navigate\");\n    };\n    const timeInFuture = computed(() => {\n      return props.date > DateTime.now();\n    });\n    const filter = ref({\n      date: props.date,\n    });\n\n    onActivated(() => loadEmissions(props.date));\n    watch(\n      () => props.date,\n      (newValue, oldValue) => {\n        if (!isEqual(newValue, oldValue)) {\n          loadEmissions(newValue);\n        }\n      }\n    );\n    watch(\n      () => filter.value,\n      (newValue, oldValue) => {\n        if (!isEqual(newValue.date, oldValue.date)) {\n          emit(\"dateUpdate\", newValue.date);\n        }\n      }\n    );\n    return {\n      t,\n      timeInFuture,\n      filter,\n      emissions,\n      navigate,\n    };\n  },\n});\n</script>\n<template>\n  <div class=\"program\">\n    <div class=\"header\">\n      <div class=\"title\" v-text=\"title\" />\n      <div class=\"filter-container\">\n        <Filter class=\"filter\" v-model=\"filter\" />\n      </div>\n    </div>\n    <div class=\"body\">\n      <div v-if=\"timeInFuture\" class=\"invalid-date\">\n        <i18n-t keypath=\"program.timeInFuture.lead\" tag=\"p\" />\n        <i18n-t keypath=\"program.timeInFuture.cta\" tag=\"p\">\n          <router-link to=\"/program/\" v-text=\"t('program.timeInFuture.ctaText')\" />\n        </i18n-t>\n      </div>\n      <div class=\"emissions\">\n        <Emission\n          v-for=\"(emission, index) in emissions\"\n          :key=\"`program-emission-${emission.uid}-${index}`\"\n          :emission=\"emission\"\n          :current-link-to-home=\"currentLinkToHome\"\n          @navigate=\"navigate\"\n        />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/elements/title\";\n\n.program {\n  display: flex;\n  flex-direction: column;\n  max-height: 80vh;\n}\n\n.header {\n  border-bottom: 1px solid rgb(var(--c-dark) / 20%);\n\n  .title {\n    @include title.default;\n  }\n\n  .filter-container {\n    padding: 0.5rem 0 1.5rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n}\n\n.body {\n  flex-grow: 1;\n  min-height: 0; /* without min-height/height:0 flex:1 doesn't work */\n  overflow: auto;\n\n  > .invalid-date {\n    min-height: 4rem;\n    margin-top: 4rem;\n    margin-bottom: 4rem;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    font-size: var(--t-fs-large);\n\n    a {\n      text-decoration: underline;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\n/*\n * NOTE: the naming here is kind of confusing and maybe should be changed.\n * this view (views/Program.view) is used as top-level view bound to /program/\n * the actual program data is handled by components/broadcast/program/Program.vue\n */\nimport { useI18n } from \"vue-i18n\";\nimport { useRouter } from \"vue-router\";\nimport type { DateTime } from \"luxon\";\n\nimport Program from \"@/components/broadcast/program/Program.vue\";\n\ndefineProps<{\n  date: DateTime;\n}>();\n\nconst { t } = useI18n();\nconst router = useRouter();\nconst onDateUpdate = (date: DateTime) => {\n  router.push({\n    name: \"program\",\n    params: {\n      date: date.toISODate(),\n    },\n  });\n};\n</script>\n\n<template>\n  <div class=\"program-view\">\n    <Program :title=\"t('menu.program')\" :date=\"date\" @date-update=\"onDateUpdate\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.program-view {\n  flex-grow: 1;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nenum Mode {\n  default = \"default\",\n  play = \"play\",\n  pause = \"pause\",\n  playing = \"playing\",\n}\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    outlineWidth: {\n      type: Number,\n      default: 2.25,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    mode: {\n      type: String,\n      default: Mode.default,\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      // const mode: Mode = Mode[props.mode as keyof typeof Mode];\n      return {\n        fill: \"none\",\n        stroke: color.value,\n        // NOTE: add strokeWidth calculations\n        strokeWidth: props.outlineWidth,\n        strokeMiterlimit: 10,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n      };\n    });\n    return {\n      style,\n      Mode,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"48px\"\n    width=\"48px\"\n    viewBox=\"0 0 48 48\"\n    :style=\"style\"\n  >\n    <!-- eslint-disable max-len -->\n    <transition name=\"icon\">\n      <g v-if=\"mode === Mode.default\">\n        <polygon points=\"43.902439 24 10.369338 39.554007 10.369338 8.44599303\" />\n        <rect x=\"10.369338\" y=\"7.77700348\" width=\"9.95121951\" height=\"32.445993\" />\n        <rect x=\"27.6794425\" y=\"7.77700348\" width=\"9.95121951\" height=\"32.445993\" />\n      </g>\n      <g v-else-if=\"mode === Mode.play\">\n        <polyline\n          points=\"20.3205575 34.9379791 20.3205575 40.2229965 10.369338 40.2229965 10.369338 7.77700348 20.3205575 7.77700348 20.3205575 12.6940767\"\n        />\n        <polyline\n          points=\"37.630662 26.9101045 37.630662 40.2229965 27.6794425 40.2229965 27.6794425 31.9275261\"\n        />\n        <polyline\n          points=\"27.6794425 16.4738676 27.6794425 7.77700348 37.630662 7.77700348 37.630662 21.0898955\"\n        />\n        <polygon points=\"43.902439 24 10.369338 39.554007 10.369338 8.44599303\" />\n      </g>\n      <g v-else-if=\"mode === Mode.pause\">\n        <line x1=\"27.6794425\" y1=\"31.5261324\" x2=\"20.3205575\" y2=\"34.9379791\" />\n        <polyline points=\"37.630662 21.0898955 43.902439 24 37.630662 26.9101045\" />\n        <line x1=\"20.3205575\" y1=\"13.0620209\" x2=\"27.4452962\" y2=\"16.3651568\" />\n        <rect x=\"10.369338\" y=\"7.77700348\" width=\"9.95121951\" height=\"32.445993\" />\n        <rect x=\"27.6794425\" y=\"7.77700348\" width=\"9.95121951\" height=\"32.445993\" />\n      </g>\n      <g v-else-if=\"mode === Mode.playing\" class=\"playing\">\n        <!--\n        <rect class=\"playing--left\" x=\"10.369338\" y=\"26.7930314\" width=\"9.95121951\" height=\"13.4299652\" />\n        <rect class=\"playing--right\" x=\"27.6794425\" y=\"10.9379791\" width=\"9.95121951\" height=\"29.2850174\" />\n        -->\n        <rect\n          class=\"playing--right\"\n          x=\"10.369338\"\n          y=\"7.77700348\"\n          width=\"9.95121951\"\n          height=\"32.445993\"\n        />\n        <rect\n          class=\"playing--left\"\n          x=\"27.6794425\"\n          y=\"7.77700348\"\n          width=\"9.95121951\"\n          height=\"32.445993\"\n        />\n      </g>\n    </transition>\n    <!-- eslint-enable max-len -->\n  </svg>\n</template>\n\n<style lang=\"scss\">\n// TODO: how to implement keyframes / animations scoped?\n@keyframes eq-left {\n  0%,\n  100% {\n    height: 14px;\n  }\n\n  10% {\n    height: 32px;\n  }\n\n  20% {\n    height: 26px;\n  }\n\n  30% {\n    height: 32px;\n  }\n\n  40% {\n    height: 20px;\n  }\n\n  50% {\n    height: 30px;\n  }\n\n  60% {\n    height: 22px;\n  }\n\n  70% {\n    height: 26px;\n  }\n\n  82% {\n    height: 20px;\n  }\n\n  90% {\n    height: 30px;\n  }\n}\n</style>\n\n<style lang=\"scss\" scoped>\nsvg {\n  &:hover {\n    background: transparent;\n  }\n\n  .playing {\n    transform: rotate(180deg);\n    transform-origin: center;\n\n    &--left {\n      animation: eq-left 2000ms infinite;\n      animation-timing-function: ease-in-out;\n    }\n\n    &--right {\n      animation: eq-left 2000ms infinite;\n      animation-timing-function: linear;\n      animation-delay: 20ms;\n    }\n  }\n}\n\n.icon-enter-active,\n.icon-leave-active {\n  opacity: 1;\n  transition: opacity 20ms ease-in-out;\n}\n\n.icon-enter,\n.icon-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent, ref } from \"vue\";\nimport { storeToRefs } from \"pinia\";\n\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconLogo from \"@/components/ui/icon/IconLogo.vue\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { useDevice } from \"@/composables/device\";\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\nimport { useQueueControls } from \"@/composables/queue\";\nimport type { AnnotatedSchedule } from \"@/stores/schedule\";\nimport { useScheduleStore } from \"@/stores/schedule\";\nimport { requireSubscription } from \"@/utils/account\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconLogo,\n  },\n  props: {\n    item: {\n      type: Object as PropType<AnnotatedSchedule>,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { isMobile } = useDevice();\n    // state & controls\n    // queue states\n    const { current: currentScheduleItem } = storeToRefs(useScheduleStore());\n    const isCurrentScheduleItem = computed(() => currentScheduleItem.value?.key === props.item.key);\n    // mapped player states\n    const {\n      media: currentPlayerMedia,\n      isPlaying: playerIsPlaying,\n      isBuffering: playerIsBuffering,\n      isPaused: playerIsPaused,\n    } = usePlayerState();\n    const { logUIEvent } = useAnalytics();\n    const isCurrentPlayerMedia = computed(\n      () => currentPlayerMedia.value?.uid === props.item.media.uid\n    );\n    const isPlaying = computed(() => isCurrentPlayerMedia.value && playerIsPlaying.value);\n    const isBuffering = computed(() => isCurrentPlayerMedia.value && playerIsBuffering.value);\n    const isPaused = computed(() => isCurrentPlayerMedia.value && playerIsPaused.value);\n    // controls\n    const { playLive } = usePlayerControls();\n    const { pause: pausePlayer, resume: resumePlayer } = usePlayerControls();\n    const { enqueueObj, startPlayCurrent } = useQueueControls();\n    const startPlayMedia = requireSubscription(async (media: any) => {\n      await enqueueObj(media, \"replace\");\n      await startPlayCurrent(true);\n    });\n    // appearance / ui\n    const isHover = ref(false);\n    const iconMode = computed(() => {\n      if (isBuffering.value || isPlaying.value) {\n        return \"pause\";\n      }\n      return \"play\";\n    });\n    const handleClick = async () => {\n      if (isBuffering.value || isPlaying.value) {\n        await pausePlayer();\n        logUIEvent(\"player:pause\");\n        return;\n      }\n      if (isCurrentScheduleItem.value) {\n        await playLive();\n        logUIEvent(\"player:play\", \"live\");\n      } else if (isPaused.value) {\n        await resumePlayer();\n        logUIEvent(\"player:resume\", \"on-demand\");\n      } else {\n        startPlayMedia(props.item.media);\n        logUIEvent(\"player:play\", \"on-demand\");\n      }\n    };\n    return {\n      isMobile,\n      isHover,\n      iconMode,\n      handleClick,\n    };\n  },\n});\n</script>\n\n<template>\n  <CircleButton\n    :scale=\"3.35\"\n    outline-opacity=\"100%\"\n    :outline-width=\"6\"\n    :filled=\"true\"\n    :outlined=\"true\"\n    :outline-on-hover=\"true\"\n    color-var=\"--c-fg\"\n    @mouseover=\"isMobile ? null : (isHover = true)\"\n    @mouseleave=\"isMobile ? null : (isHover = false)\"\n    @click=\"handleClick\"\n  >\n    <IconLogo :mode=\"iconMode\" :scale=\"3.35\" :outline-width=\"1.8\" color-var=\"--c-fg\" />\n  </CircleButton>\n</template>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent, nextTick, onMounted, ref, watch } from \"vue\";\nimport { useElementBounding, useThrottleFn, useWindowSize } from \"@vueuse/core\";\nimport { DateTime } from \"luxon\";\nimport { round } from \"lodash-es\";\n\nimport Debug from \"@/components/dev/Debug.vue\";\nimport LazyImage from \"@/components/ui/LazyImage.vue\";\nimport eventBus from \"@/eventBus\";\nimport type { AnnotatedSchedule } from \"@/stores/schedule\";\nimport { getContrastColor } from \"@/utils/color\";\n\nimport FlowItemPlay from \"./FlowItemPlay.vue\";\nimport Ticker from \"./ticker/Ticker.vue\";\n\nconst BASE_Z_INDEX = 12;\n\nexport default defineComponent({\n  components: {\n    LazyImage,\n    FlowItemPlay,\n    Ticker,\n    Debug,\n  },\n  props: {\n    item: {\n      type: Object as PropType<AnnotatedSchedule>,\n      required: true,\n    },\n    containerX: {\n      type: Number,\n      default: 0,\n    },\n  },\n  emits: [\"onFocused\"],\n  setup(props, { emit }) {\n    const el = ref<HTMLElement | null>(null);\n    const elX = ref(0);\n    const { width: vpWidth } = useWindowSize();\n    const { width } = useElementBounding(el);\n\n    const offset = computed(() => {\n      return round(elX.value - vpWidth.value / 2, 2);\n    });\n\n    const focus = computed(() => {\n      const rawFocus = 1 - (offset.value * -1) / vpWidth.value;\n      const roundedFocus = round(rawFocus, 3);\n      return Math.max(Math.min(roundedFocus, 2), 0);\n    });\n\n    const timeStart = computed(() => {\n      return props.item.dtStart.toLocaleString(DateTime.TIME_24_WITH_SECONDS);\n    });\n\n    const timeEnd = computed(() => {\n      return props.item.dtEnd.toLocaleString(DateTime.TIME_24_WITH_SECONDS);\n    });\n\n    const relativePosition = computed(() => {\n      return round(offset.value / width.value, 3);\n    });\n\n    const hasFocus = computed(() => {\n      return relativePosition.value > -0.7 && relativePosition.value < 0.3;\n    });\n\n    const isVisible = computed(() => {\n      return relativePosition.value > -4;\n    });\n\n    const media = computed(() => {\n      return props.item.media;\n    });\n\n    const release = computed(() => {\n      if (!media.value.releases) {\n        return null;\n      }\n      return media.value.releases[0];\n    });\n\n    const image = computed(() => {\n      return release.value?.image ?? null;\n    });\n    const updateElPosition = () => {\n      if (!el.value) {\n        return;\n      }\n      const { left: elLeft, width: elWidth } = el.value.getBoundingClientRect();\n      elX.value = round(elLeft + elWidth / 2, 1);\n    };\n    onMounted(updateElPosition);\n    watch(() => props.containerX, updateElPosition);\n    eventBus.on(\"radio:flow\", (event) => {\n      if (event === \"itemAdded\") {\n        nextTick(updateElPosition);\n      }\n      if (event === \"reset\") {\n        nextTick(updateElPosition);\n      }\n    });\n\n    // handle item focus\n    const throttledOnFocused = useThrottleFn(() => {\n      emit(\"onFocused\");\n    }, 50);\n    watch(\n      () => relativePosition.value,\n      (value) => {\n        if (value > -0.7 && value < 0.3) {\n          throttledOnFocused();\n        }\n      }\n    );\n\n    // transforms\n    const translateX = computed(() => {\n      if (relativePosition.value > 0) {\n        return round((relativePosition.value * vpWidth.value) / 2, 3);\n      }\n      const n = Math.abs(relativePosition.value);\n      if (vpWidth.value > 1024) {\n        // stacked layout\n        return round(width.value * n - width.value * n * 0.1, 3);\n      } else {\n        // coverflow layout\n        return round(width.value * n * 0.125, 3);\n      }\n    });\n    const scale = computed(() => {\n      if (relativePosition.value > 0) {\n        const rawScale = relativePosition.value * 1.1 + 1;\n        return Math.min(round(rawScale, 3), 1.2);\n      }\n      const n = Math.abs(relativePosition.value);\n      const rawScale = 1 - n * 0.25;\n      return Math.max(round(rawScale, 3), 0.2);\n    });\n    const opacity = computed(() => {\n      if (relativePosition.value > 0) {\n        const n = relativePosition.value;\n        return Math.max(round(1 - n * 2, 3), 0);\n      }\n      const n = Math.abs(relativePosition.value);\n      return Math.max(round(1 - n / 3, 3), 0);\n    });\n    const style = computed(() => {\n      return {\n        zIndex: BASE_Z_INDEX + round(relativePosition.value),\n        opacity: opacity.value,\n        // NOTE: grayscale filter has performance issues on iOS\n        // filter: `grayscale(${1 - opacity.value})`,\n        // filter: `grayscale(${grayscale.value})` ,\n      };\n    });\n    const cssVars = computed(() => {\n      const bg = image.value?.rgb ?? [0, 0, 0];\n      const fg = getContrastColor(bg);\n      return {\n        \"--c-bg\": bg.join(\" \"),\n        \"--c-fg\": fg.join(\" \"),\n      };\n    });\n\n    return {\n      el,\n      elX,\n      offset,\n      focus,\n      relativePosition,\n      hasFocus,\n      isVisible,\n      style,\n      cssVars,\n      image,\n      release,\n      timeStart,\n      timeEnd,\n      translateX,\n      scale,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    v-if=\"item\"\n    class=\"flow-item\"\n    :style=\"{\n      ...style,\n      ...cssVars,\n    }\"\n  >\n    <div\n      v-if=\"isVisible\"\n      class=\"translate-x\"\n      :style=\"{\n        transform: `translateX(${translateX}px)`,\n      }\"\n    >\n      <div\n        class=\"scale\"\n        :style=\"{\n          transform: `scale(${scale})`,\n        }\"\n      >\n        <LazyImage :image=\"image\" />\n        <transition name=\"fade\">\n          <div v-if=\"hasFocus\" class=\"actions\">\n            <FlowItemPlay :item=\"item\" />\n          </div>\n        </transition>\n        <Ticker v-if=\"release?.isNew\" text=\"New Release\" />\n      </div>\n    </div>\n    <Debug :value=\"{ timeStart, timeEnd }\" position=\"absolute\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n/*\nvariables defined in parent component(s):\n --item-size\n*/\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n\n.flow-item {\n  position: relative;\n  height: var(--item-size);\n  width: var(--item-size);\n  display: none;\n  flex-direction: column;\n  font-size: 12px;\n  will-change: auto;\n\n  .translate-x {\n    top: 0;\n    position: absolute;\n    height: var(--item-size);\n    width: var(--item-size);\n    left: 0;\n    will-change: auto;\n  }\n\n  .scale {\n    top: 0;\n    position: absolute;\n    height: var(--item-size);\n    width: var(--item-size);\n    left: 0;\n    background: rgb(var(--c-bg) / 90%);\n    transform-origin: left;\n    box-shadow: 0 0 20px rgb(0 0 0 / 50%);\n  }\n\n  .actions {\n    top: 0;\n    position: absolute;\n    height: 100%;\n    width: 100%;\n    left: 0;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    .circle-button {\n      background: rgb(var(--c-bg) / 100%);\n\n      &:hover {\n        background: rgb(var(--c-bg) / 80%);\n      }\n    }\n  }\n\n  .ticker {\n    @include typo.large;\n\n    top: 20px;\n    position: absolute;\n    width: 100%;\n    left: 0;\n\n    @include responsive.bp-medium {\n      top: 10px;\n    }\n  }\n}\n\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 200ms;\n}\n\n.fade-enter-from {\n  opacity: 0;\n}\n\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n  },\n  setup(props) {\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        fill: color.value,\n        stroke: \"none\",\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"40px\"\n    width=\"68px\"\n    viewBox=\"0 0 68 40\"\n    :style=\"style\"\n  >\n    <path\n      d=\"M61.441 0.0692088L6.54523 11.7268C3.93063 12.3784 0.00634766 14.3309 0.00634766 20.2001V31.0407C0.00634766 35.1655 2.66107 39.493 8.15819 39.8204H59.8811C64.3344 39.5675 67.9928 36.8787 67.9928 31.0407V20.2001C67.9928 15.7438 65.6801 11.4001 59.1664 11.4001H21.9262L62.2407 2.59192C62.9397 2.37158 63.3273 1.62853 63.1056 0.931582C62.9275 0.367514 62.4052 0.00683594 61.8415 0.00683594C61.7089 0.00683594 61.5743 0.0271749 61.441 0.0692088ZM47.5921 31.0407V20.2001C47.5921 18.1533 46.84 15.274 44.7041 13.4245H59.1664C63.5211 13.4245 65.9623 16.5465 65.9623 20.2001V31.0407C65.9623 34.8035 63.4613 37.8163 59.1664 37.8163H44.6402C46.4905 36.3743 47.5921 34.1594 47.5921 31.0407ZM33.3441 31.2631C32.1398 30.0624 31.5285 28.5913 31.5285 26.8916V17.0692C31.5285 16.6726 31.6631 16.3363 31.9283 16.0719C32.1949 15.8068 32.5308 15.6733 32.9293 15.6733C33.3189 15.6733 33.6535 15.8062 33.9261 16.0679C34.2009 16.3336 34.3403 16.6706 34.3403 17.0692V21.7065C35.3283 21.0455 36.4666 20.7099 37.7287 20.7099C39.4185 20.7099 40.8934 21.318 42.1113 22.5187C42.7138 23.1119 43.1721 23.7831 43.474 24.514C43.7766 25.2441 43.9289 26.0435 43.9289 26.8916C43.9289 28.6055 43.3169 30.0767 42.1113 31.2645C40.8934 32.4645 39.4185 33.0733 37.7287 33.0733C36.0246 33.0733 34.549 32.4645 33.3441 31.2631ZM13.0209 17.0692C13.0209 16.6719 13.1555 16.3363 13.4214 16.0719C13.6866 15.8068 14.0232 15.6733 14.4224 15.6733C14.8113 15.6733 15.1466 15.8062 15.4186 16.0679C15.694 16.3343 15.8334 16.6706 15.8334 17.0692V26.8916C15.8334 28.6055 15.222 30.0767 14.0164 31.2645C12.7972 32.4645 11.3222 33.0733 9.63311 33.0733C7.92903 33.0733 6.45343 32.4645 5.24847 31.2631C4.04351 30.0624 3.43287 28.5913 3.43287 26.8916C3.43287 25.1926 4.04351 23.7214 5.24847 22.5194C6.45343 21.3194 7.92835 20.7099 9.63311 20.7099C10.8809 20.7099 12.0199 21.0441 13.0209 21.7038V17.0692ZM19.2007 31.2631C17.9958 30.0618 17.3851 28.5913 17.3851 26.8923C17.3851 25.1926 17.9958 23.7221 19.2007 22.5201C20.405 21.3194 21.8806 20.7099 23.5847 20.7099C25.2752 20.7099 26.7494 21.318 27.968 22.5194C29.1736 23.7221 29.7849 25.1926 29.7849 26.8923V31.6767C29.7849 32.0597 29.6469 32.3919 29.3742 32.6638C29.1022 32.9357 28.769 33.0733 28.3848 33.0733C27.9925 33.0733 27.6559 32.9357 27.3832 32.6638C27.2009 32.4814 27.0778 32.2713 27.0173 32.036C26.5923 32.3194 26.1395 32.5485 25.6682 32.7194C25.0208 32.9546 24.3204 33.0733 23.5847 33.0733C21.8806 33.0733 20.405 32.4645 19.2007 31.2631ZM55.1217 20.6604V24.5987H51.1737C50.4257 24.5987 49.8198 25.2035 49.8198 25.9485C49.8198 26.6936 50.4257 27.2984 51.1737 27.2984H55.1217V31.2346C55.1217 31.9797 55.7283 32.5845 56.4756 32.5845C57.223 32.5845 57.8295 31.9797 57.8295 31.2346V27.2984H61.7776C62.5249 27.2984 63.1315 26.6936 63.1315 25.9485C63.1315 25.2035 62.5249 24.5987 61.7776 24.5987H57.8295V20.6604C57.8295 19.9146 57.223 19.3112 56.4756 19.3112C55.7283 19.3112 55.1217 19.9146 55.1217 20.6604ZM22.2546 23.7818C21.8446 23.9607 21.4835 24.2048 21.1822 24.5085C20.881 24.8116 20.6389 25.1736 20.4608 25.5845C20.2853 25.9919 20.1962 26.4319 20.1962 26.8916C20.1962 27.3513 20.2853 27.7906 20.4608 28.198C20.6389 28.6096 20.881 28.9716 21.1822 29.2746C21.4828 29.5777 21.8439 29.8218 22.2546 30.0014C23.072 30.3574 24.0865 30.358 24.9039 30.0014C25.3146 29.8231 25.677 29.5763 25.983 29.2685C26.2877 28.9621 26.5325 28.5994 26.7086 28.1919C26.8841 27.7885 26.9731 27.3506 26.9731 26.8916C26.9731 26.4333 26.8841 25.9953 26.7086 25.5906C26.5318 25.1831 26.287 24.8204 25.9824 24.514C25.6784 24.2075 25.3153 23.9614 24.9039 23.7818C24.4959 23.6041 24.0518 23.514 23.5854 23.514C23.1107 23.514 22.6633 23.6041 22.2546 23.7818ZM36.3986 23.7818C35.9879 23.9614 35.6261 24.2062 35.3263 24.5085C35.0243 24.8109 34.7823 25.1736 34.6048 25.5851C34.4293 25.9919 34.3403 26.4319 34.3403 26.8909C34.3403 27.3519 34.4293 27.7919 34.6048 28.198C34.7823 28.6096 35.0243 28.9716 35.3256 29.274C35.6261 29.5777 35.9879 29.8231 36.3986 30.0014C37.2153 30.358 38.2305 30.3574 39.0479 30.0014C39.4586 29.8231 39.8217 29.5757 40.1264 29.2685C40.4317 28.9607 40.6758 28.5987 40.8526 28.1919C41.0287 27.7885 41.1171 27.3506 41.1171 26.8909C41.1171 26.4326 41.0287 25.9946 40.8526 25.5913C40.6751 25.1831 40.4303 24.8211 40.1264 24.514C39.8217 24.2075 39.4586 23.9614 39.0479 23.7818C38.6392 23.6041 38.1952 23.514 37.7287 23.514C37.2547 23.514 36.8073 23.6041 36.3986 23.7818ZM8.30303 23.7818C7.89163 23.9614 7.53055 24.2062 7.22931 24.5085C6.92875 24.8123 6.68599 25.175 6.50987 25.5845C6.33375 25.9919 6.24467 26.4319 6.24467 26.8909C6.24467 27.3519 6.33375 27.7919 6.50987 28.198C6.68599 28.6082 6.92875 28.9702 7.22931 29.274C7.53055 29.5777 7.89163 29.8218 8.30303 30.0014C9.12039 30.358 10.1356 30.358 10.9523 30.0014C11.363 29.8231 11.7262 29.5757 12.0308 29.2692C12.3354 28.9621 12.5796 28.6001 12.7564 28.1919C12.9325 27.7885 13.0209 27.3506 13.0209 26.8909C13.0209 26.4326 12.9325 25.9946 12.7564 25.5906C12.5796 25.1831 12.3354 24.8211 12.0308 24.514C11.7262 24.2068 11.3637 23.9614 10.9523 23.7818C10.5443 23.6041 10.1003 23.514 9.63311 23.514C9.15915 23.514 8.71103 23.6041 8.30303 23.7818Z\"\n    />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconDAB from \"@/components/ui/icon/brand/IconDAB.vue\";\nimport IconLogo from \"@/components/ui/icon/IconLogo.vue\";\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconLogo,\n    IconDAB,\n  },\n  setup() {\n    const { isPlaying, isBuffering } = usePlayerState();\n    const { playLive, pause: pausePlayer } = usePlayerControls();\n    const iconMode = computed(() => (isBuffering.value || isPlaying.value ? \"pause\" : \"play\"));\n    const handleClick = async () => {\n      if (isBuffering.value || isPlaying.value) {\n        pausePlayer();\n        return;\n      }\n      const startTime = -10;\n      await playLive(startTime);\n    };\n    return {\n      iconMode,\n      handleClick,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"placeholder-item\">\n    <CircleButton\n      :scale=\"3.35\"\n      outline-opacity=\"100%\"\n      :outline-width=\"6\"\n      :filled=\"true\"\n      :outlined=\"true\"\n      :outline-on-hover=\"true\"\n      color-var=\"--c-page-fg\"\n      @click=\"handleClick\"\n    >\n      <IconLogo :mode=\"iconMode\" :scale=\"3.35\" :outline-width=\"1.8\" color-var=\"--c-page-fg\" />\n    </CircleButton>\n    <div class=\"icon-dab\">\n      <IconDAB :mode=\"iconMode\" :scale=\"1\" color-var=\"--c-page-bg\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.placeholder-item {\n  position: relative;\n  height: var(--item-size);\n  width: var(--item-size);\n  background: rgb(var(--c-page-fg));\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  box-shadow: 0 0 20px rgb(0 0 0 / 50%);\n\n  .circle-button {\n    background: rgb(var(--c-page-bg));\n  }\n\n  .icon-dab {\n    position: absolute;\n    bottom: 6px;\n    right: 8px;\n    pointer-events: none;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent, nextTick, onActivated, onDeactivated, ref, watch } from \"vue\";\nimport { useDocumentVisibility, useScroll, useThrottleFn, useWindowSize } from \"@vueuse/core\";\n\nimport { useDevice } from \"@/composables/device\";\nimport eventBus from \"@/eventBus\";\nimport type { AnnotatedSchedule } from \"@/stores/schedule\";\n\nimport FlowItem from \"./FlowItem.vue\";\nimport FlowPlaceholderItem from \"./FlowPlaceholderItem.vue\";\n\nexport default defineComponent({\n  components: {\n    FlowItem,\n    FlowPlaceholderItem,\n  },\n  props: {\n    items: {\n      type: Array as PropType<Array<AnnotatedSchedule>>,\n      default: () => [],\n    },\n    itemSize: {\n      type: Number,\n      default: 0,\n    },\n  },\n  emits: [\"onItemFocused\"],\n  setup(props, { emit }) {\n    const panelEl = ref<HTMLElement | null>(null);\n    const follow = ref(true);\n    const { width: vpWidth, height: vpHeight } = useWindowSize();\n    const documentVisible = useDocumentVisibility();\n    const { isSafari, isMobile } = useDevice();\n    const panelStyle = computed(() => {\n      const padding = (vpWidth.value - props.itemSize) / 2;\n      return {\n        paddingLeft: `${padding}px`,\n        paddingRight: `${padding}px`,\n      };\n    });\n    const { x: scrollX, y } = useScroll(panelEl);\n    const scrollPanelTo = (pos: number, smooth = true) => {\n      if (!panelEl.value) {\n        return;\n      }\n      if (smooth) {\n        panelEl.value.scrollTo({\n          top: 0,\n          left: pos,\n          // behavior: \"smooth\", // NOTE: likely we have to use \"auto\" on safari\n          behavior: isSafari && !isMobile ? \"auto\" : \"smooth\",\n        });\n      } else {\n        panelEl.value.scrollLeft = pos;\n      }\n    };\n    watch(\n      () => scrollX.value,\n      (value) => {\n        if (value > -10) {\n          follow.value = true;\n        } else {\n          follow.value = false;\n        }\n      }\n    );\n    watch(\n      () => vpWidth.value * vpHeight.value,\n      () => {\n        eventBus.emit(\"radio:flow\", \"reset\");\n      }\n    );\n    watch(\n      () => documentVisible.value,\n      (value) => {\n        if (value) {\n          eventBus.emit(\"radio:flow\", \"reset\");\n        }\n      }\n    );\n    // focus\n    const onItemFocused = useThrottleFn((item: AnnotatedSchedule) => {\n      emit(\"onItemFocused\", item);\n    }, 100);\n    // events & controls\n    eventBus.on(\"radio:flow\", (event) => {\n      if (event === \"focusNext\") {\n        scrollPanelTo(scrollX.value + props.itemSize);\n      }\n      if (event === \"focusPrevious\") {\n        scrollPanelTo(scrollX.value - props.itemSize);\n      }\n      if (event === \"releaseFocus\") {\n        scrollPanelTo(0);\n      }\n      //\n      if (event === \"itemAdded\") {\n        nextTick(() => {\n          scrollPanelTo(scrollX.value - props.itemSize, false);\n          if (follow.value) {\n            setTimeout(() => {\n              scrollPanelTo(0);\n            }, 20);\n          }\n        });\n      }\n      //\n      if (event === \"reset\") {\n        // NOTE: check browser differences\n        nextTick(() => {\n          if (follow.value) {\n            setTimeout(() => {\n              scrollPanelTo(0);\n            }, 20);\n          }\n        });\n      }\n    });\n    const lastScrollX = ref(0);\n    onDeactivated(() => {\n      lastScrollX.value = scrollX.value;\n    });\n    onActivated(() => {\n      nextTick(() => {\n        scrollPanelTo(lastScrollX.value, false);\n        eventBus.emit(\"radio:flow\", \"reset\");\n      });\n    });\n    return {\n      panelEl,\n      panelStyle,\n      scrollX,\n      follow,\n      y,\n      //\n      onItemFocused,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"flow\"\n    :style=\"{\n      '--item-size': `${itemSize}px`,\n    }\"\n  >\n    <div ref=\"panelEl\" v-if=\"items.length > 1\" class=\"panel\" :style=\"panelStyle\" id=\"scrollPanel\">\n      <FlowItem\n        v-for=\"(item, index) in items\"\n        :key=\"`flow-item-${item ? item.key : index}`\"\n        :item=\"item\"\n        :container-x=\"scrollX\"\n        @on-focused=\"onItemFocused(item)\"\n      />\n      <!--\n      <div class=\"cta\">\n        <p>\n          Looking for music played earlier?\n          <br />\n          See <a href=\"#\">Program</a>!\n        </p>\n      </div>\n      -->\n    </div>\n    <transition name=\"fade\">\n      <div v-if=\"items.length < 1\" class=\"placeholder\">\n        <FlowPlaceholderItem />\n      </div>\n    </transition>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/mixins\";\n\n.flow {\n  position: relative;\n  height: calc(var(--item-size) + 120px);\n  width: 100%;\n\n  > .panel {\n    @include mixins.hide-scrollbar;\n\n    height: 100%;\n    width: 100%;\n    overflow-x: scroll;\n    overflow-y: hidden;\n    display: flex;\n    scroll-snap-type: x mandatory;\n    direction: rtl;\n\n    .flow-item {\n      direction: ltr;\n      flex: 0 0 var(--item-size);\n      margin: 60px 0;\n      display: flex;\n      scroll-snap-align: center;\n    }\n\n    .cta {\n      height: var(--item-size);\n      width: var(--item-size);\n      direction: ltr;\n      flex: 0 0 var(--item-size);\n      margin: 60px 100px 60px 0;\n      display: flex;\n      scroll-snap-align: center;\n      align-items: center;\n      justify-content: center;\n      text-align: center;\n    }\n  }\n\n  .placeholder {\n    top: 0;\n    position: absolute;\n    height: 100%;\n    width: 100%;\n    left: 0;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    z-index: 15;\n  }\n}\n\n// placeholder transitions\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 300ms;\n}\n\n.fade-enter-from {\n  opacity: 0;\n}\n\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useNews } from \"@/composables/news\";\n\ndefineProps({\n  itemSize: {\n    type: Number,\n    default: 0,\n  },\n});\n\nconst { selectedProvider: provider } = useNews();\n</script>\n\n<template>\n  <div\n    class=\"flow-news\"\n    :style=\"{\n      '--item-size': `${itemSize}px`,\n    }\"\n  >\n    <div class=\"panel\">\n      <div v-if=\"provider\" class=\"item\">\n        <div class=\"label\">News</div>\n        <div class=\"provider\">\n          <div class=\"provider__key\" v-text=\"provider.key\" />\n          <div class=\"provider__title\" v-text=\"provider.title\" />\n          <div class=\"provider__link\">\n            <a\n              :href=\"`https://${provider.url}`\"\n              v-text=\"provider.url\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            />\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/mixins\";\n@use \"@/style/base/typo\";\n\n.flow-news {\n  top: 0;\n  position: absolute;\n  height: var(--item-size);\n  width: 100%;\n  z-index: 15;\n\n  > .panel {\n    height: 100%;\n    width: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    > .item {\n      flex: 0 0 var(--item-size);\n      flex-direction: column;\n      height: var(--item-size);\n      width: var(--item-size);\n      margin: 60px 0;\n      display: flex;\n      background: rgb(70 70 70 / 100%);\n      box-shadow: 0 0 20px rgb(0 0 0 / 50%);\n      padding: 1rem 1rem 1rem 2rem;\n      color: rgb(var(--c-white));\n\n      > .label {\n        &::after {\n          content: \":\";\n        }\n      }\n\n      .provider {\n        padding-top: 2rem;\n\n        &__key {\n          @include typo.x-large;\n          @include typo.bold;\n\n          text-transform: uppercase;\n        }\n\n        &__link {\n          > a {\n            text-decoration: underline;\n          }\n        }\n      }\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport { useIconSize } from \"@/composables/icon\";\n\nexport default defineComponent({\n  props: {\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    colorVar: {\n      type: String,\n      default: \"--c-fg\",\n    },\n    rotate: {\n      type: Number,\n      default: 0,\n    },\n  },\n  setup(props) {\n    const { iconSize: size } = useIconSize(props.scale);\n    const color = computed(() => `rgb(var(${props.colorVar}) / 100%)`);\n    const style = computed(() => {\n      return {\n        stroke: color.value,\n        fill: \"none\",\n        strokeWidth: (6.5 * 120) / size.value,\n        width: `${size.value}px`,\n        height: `${size.value}px`,\n        transform: `rotate(${props.rotate}deg)`,\n      };\n    });\n    return {\n      style,\n    };\n  },\n});\n</script>\n\n<template>\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"120px\"\n    width=\"120px\"\n    viewBox=\"0 0 120 120\"\n    :style=\"style\"\n  >\n    <polyline points=\"56,100 96,60 56,20\" />\n    <polyline points=\"35,100 75,60 35,20\" />\n  </svg>\n</template>\n","<script lang=\"ts\">\nimport { defineComponent } from \"vue\";\n\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconPaginate from \"@/components/ui/icon/IconPaginate.vue\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconPaginate,\n  },\n  props: {\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n    rotate: {\n      type: Number,\n      default: 0,\n    },\n  },\n  setup() {\n    return {};\n  },\n});\n</script>\n\n<template>\n  <CircleButton :scale=\"2.5\" :disabled=\"disabled\">\n    <IconPaginate :scale=\"2.5\" :rotate=\"rotate\" color-var=\"--c-page-fg\" />\n  </CircleButton>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\n\nimport EditorInline from \"@/components/broadcast/editor/Inline.vue\";\n\nexport default defineComponent({\n  props: {\n    emission: {\n      type: Object,\n      required: true,\n      default: () => null,\n    },\n    playlist: {\n      type: Object,\n      required: true,\n      default: () => null,\n    },\n  },\n  components: {\n    EditorInline,\n  },\n  setup(props) {\n    const displayName = computed(() => {\n      const name = props.playlist?.series?.name || props.playlist.name;\n      const appendix = props.playlist?.series?.episode;\n      return name && appendix ? `${name} #${appendix}` : name;\n    });\n    const link = computed(() => {\n      return {\n        name: \"playlistDetail\",\n        params: {\n          uid: props.playlist.uid,\n        },\n      };\n    });\n    const editor = computed(() => {\n      return props.playlist?.editor;\n    });\n    return {\n      displayName,\n      link,\n      editor,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"metadata metadata--emission\">\n    <i18n-t keypath=\"catalog.ct.playlist\" tag=\"div\" class=\"context\" />\n    <router-link :to=\"link\" v-text=\"displayName\" class=\"title\" />\n    <div>\n      <EditorInline v-if=\"editor\" :editor=\"editor\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/live-color\";\n@use \"@/style/base/responsive\";\n\n.context {\n  @include typo.default;\n\n  text-transform: capitalize;\n\n  &::after {\n    content: \":\";\n  }\n}\n\n.title {\n  @include typo.large;\n}\n\na {\n  transition: color, background-color 200ms;\n\n  @include responsive.on-hover {\n    @include live-color.bg-inverse(10%);\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\nimport { DateTime } from \"luxon\";\n\nimport MediaArtists from \"@/components/catalog/media/MediaArtists.vue\";\nimport MediaReleases from \"@/components/catalog/media/MediaReleases.vue\";\n\nexport default defineComponent({\n  props: {\n    media: {\n      type: Object,\n      true: false,\n      default: () => null,\n    },\n    item: {\n      type: Object,\n      required: false,\n    },\n  },\n  components: {\n    MediaArtists,\n    MediaReleases,\n  },\n  setup(props) {\n    const title = computed(() => {\n      return props.media.name;\n    });\n    const link = computed(() => {\n      return {\n        name: \"mediaDetail\",\n        params: {\n          uid: props.media.uid,\n        },\n      };\n    });\n    const timeDisplay = computed(() => {\n      if (!props.item) {\n        return null;\n      }\n      return `${props.item.timeStart.toLocaleString(\n        DateTime.TIME_24_WITH_SECONDS\n      )} - ${props.item.timeEnd.toLocaleString(DateTime.TIME_24_WITH_SECONDS)}`;\n    });\n    return {\n      title,\n      link,\n      timeDisplay,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"metadata metadata--media\">\n    <i18n-t keypath=\"catalog.ct.media\" tag=\"div\" class=\"context\" />\n    <div class=\"title\">\n      <router-link :to=\"`/discover/tracks/${media.uid}/`\" v-text=\"title\" />\n    </div>\n    <div class=\"subtitle subtitle--artists\">\n      <i18n-t\n        keypath=\"catalog.ct.artist\"\n        tag=\"span\"\n        class=\"subtitle--label\"\n        :plural=\"media.artists.length\"\n      />\n      <MediaArtists :artists=\"media.artists\" />\n    </div>\n    <div class=\"subtitle subtitle--releases\">\n      <i18n-t keypath=\"catalog.ct.release\" tag=\"span\" class=\"subtitle--label\" />\n      <MediaReleases :releases=\"media.releases\" />\n    </div>\n    <!--\n    <br />\n    <div v-if=\"timeDisplay\" v-text=\"timeDisplay\" />\n    -->\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/live-color\";\n@use \"@/style/base/responsive\";\n\n.context {\n  @include typo.default;\n\n  text-transform: capitalize;\n\n  &::after {\n    content: \":\";\n  }\n}\n\n.title {\n  @include typo.large;\n}\n\n.subtitle {\n  display: flex;\n  margin-top: 0;\n\n  &--artists {\n    margin-top: 0.75rem;\n  }\n\n  &--label {\n    margin-right: 0.25rem;\n\n    &::first-letter {\n      text-transform: uppercase;\n    }\n\n    &::after {\n      content: \": \";\n    }\n  }\n\n  .media-artists {\n    max-width: 100%;\n  }\n\n  .media-releases {\n    max-width: 100%;\n\n    :deep(a),\n    :deep(span) {\n      white-space: unset;\n    }\n  }\n}\n\na {\n  transition: color, background-color 200ms;\n\n  @include responsive.on-hover {\n    @include live-color.bg-inverse(10%);\n  }\n}\n</style>\n","const zeroPad = (n: number) => {\n  return n > 9 ? `${n}` : `0${n}`;\n};\n\nexport { zeroPad };\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\nimport { DateTime } from \"luxon\";\n\nimport IconClose from \"@/components/ui/icon/IconClose.vue\";\nimport { zeroPad } from \"@/utils/format\";\n\nexport default defineComponent({\n  components: {\n    IconClose,\n  },\n  props: {\n    time: {\n      type: DateTime,\n      required: true,\n    },\n  },\n  setup(props) {\n    const hour = computed(() => {\n      return zeroPad(props.time.hour);\n    });\n    const minute = computed(() => {\n      return zeroPad(props.time.minute);\n    });\n    return {\n      hour,\n      minute,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"history-time\">\n    <div class=\"bubble\">\n      <div class=\"time\">\n        <span class=\"hour\" v-text=\"hour\" />\n        <span class=\"separator separator--minute\" v-text=\"`:`\" />\n        <span class=\"minute\" v-text=\"minute\" />\n      </div>\n      <div class=\"icon\">\n        <IconClose :scale=\"0.825\" color-var=\"--c-page-fg-inverse\" />\n      </div>\n    </div>\n  </div>\n</template>\n<style lang=\"scss\">\n@keyframes pulsate {\n  50% {\n    opacity: 0;\n  }\n}\n</style>\n<style lang=\"scss\" scoped>\n@use \"@/style/base/live-color\";\n\n.history-time {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  .bubble {\n    border-radius: 24px;\n\n    @include live-color.bg-inverse;\n    @include live-color.fg-inverse;\n\n    transition: background-color 600ms, color 100ms 1ms, font-size 200ms;\n    height: 48px;\n    align-items: center;\n    justify-content: center;\n    font-size: 20px;\n    padding: 0 0 0 24px;\n    display: flex;\n\n    > .time {\n      flex-grow: 1;\n      display: grid;\n      grid-template-columns: 20px 12px 20px;\n\n      > span {\n        justify-self: center;\n      }\n\n      .hour,\n      .minute {\n        font-weight: 600;\n      }\n\n      .separator {\n        padding-top: 2px;\n        font-size: 16px;\n        animation: pulsate 2s linear infinite;\n      }\n    }\n\n    .icon {\n      cursor: pointer;\n      width: 50px;\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent } from \"vue\";\nimport { storeToRefs } from \"pinia\";\n\nimport { useTimeStore } from \"@/stores/time\";\nimport { zeroPad } from \"@/utils/format\";\n\nexport default defineComponent({\n  setup() {\n    const { time } = storeToRefs(useTimeStore());\n    const hour = computed(() => {\n      return zeroPad(time.value.hour);\n    });\n    const minute = computed(() => {\n      return zeroPad(time.value.minute);\n    });\n    const second = computed(() => {\n      return zeroPad(time.value.second);\n    });\n    return {\n      hour,\n      minute,\n      second,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"station-time\">\n    <span class=\"hour\" v-text=\"hour\" />\n    <span class=\"separator separator--minute\" v-text=\"`:`\" />\n    <span class=\"minute\" v-text=\"minute\" />\n    <!--\n    <span class=\"separator separator--minute\" v-text=\"`:`\" />\n    <span class=\"second\" v-text=\"second\" />\n    -->\n  </div>\n</template>\n<style lang=\"scss\">\n@keyframes pulsate {\n  50% {\n    opacity: 0;\n  }\n}\n</style>\n<style lang=\"scss\" scoped>\n@use \"@/style/base/live-color\";\n\n.station-time {\n  display: grid;\n  grid-template-columns: 1em 0.5em 1em;\n  align-items: center;\n  justify-content: center;\n  font-size: 64px;\n  transition: background-color 20ms, color 100ms, font-size 200ms;\n\n  > span {\n    justify-self: center;\n  }\n\n  .hour,\n  .minute {\n    font-weight: 600;\n    font-size: 1em;\n  }\n\n  .separator {\n    font-size: 0.5em;\n    animation: pulsate 2s linear infinite;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\nimport { storeToRefs } from \"pinia\";\n\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport IconProgram from \"@/components/ui/icon/IconProgram.vue\";\nimport type { AnnotatedSchedule } from \"@/stores/schedule\";\nimport { useTimeStore } from \"@/stores/time\";\n\nimport HistoryTime from \"./station-time/HistoryTime.vue\";\nimport StationTime from \"./station-time/StationTime.vue\";\n\nexport default defineComponent({\n  components: {\n    CircleButton,\n    IconProgram,\n    StationTime,\n    HistoryTime,\n  },\n  props: {\n    item: {\n      type: Object as PropType<AnnotatedSchedule>,\n      required: false,\n    },\n  },\n  emits: [\"releaseFocus\"],\n  setup(props, { emit }) {\n    const { time } = storeToRefs(useTimeStore());\n    const isHistory = computed(() => {\n      if (!props?.item?.dtEnd) {\n        return false;\n      }\n      return props?.item?.dtEnd < time.value;\n    });\n    const releaseFocus = () => {\n      emit(\"releaseFocus\");\n    };\n    return {\n      time,\n      isHistory,\n      releaseFocus,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"radio-header\">\n    <router-link class=\"program\" :to=\"{ name: 'programRedirect' }\">\n      <CircleButton>\n        <IconProgram color-var=\"--c-page-fg\" />\n      </CircleButton>\n    </router-link>\n    <div class=\"time\">\n      <transition name=\"time\" mode=\"out-in\">\n        <HistoryTime v-if=\"isHistory && item?.dtStart\" :time=\"item.dtStart\" @click=\"releaseFocus\" />\n        <StationTime v-else />\n      </transition>\n    </div>\n    <div class=\"time-shift\" />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.radio-header {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  .program {\n    height: 48px;\n    width: 60px;\n  }\n\n  .time {\n    flex-grow: 1;\n  }\n\n  .time-shift {\n    width: 60px;\n    opacity: 0;\n  }\n}\n\n.time-enter-active {\n  transition: opacity 500ms;\n}\n\n.time-enter-from {\n  opacity: 0;\n}\n\n.time-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    modelValue: {\n      type: String,\n      default: \"\",\n      required: true,\n    },\n    name: {\n      type: String,\n      default: \"\",\n      required: true,\n    },\n    value: {\n      type: String,\n      default: \"\",\n      required: true,\n    },\n    label: {\n      type: String,\n      default: \"\",\n      required: true,\n    },\n    size: {\n      type: Number,\n      default: 24,\n    },\n  },\n  emits: [\"update:modelValue\"],\n  setup(props, { emit }) {\n    const id = ref(`form-radio-input-${Math.random().toString(36).slice(2)}`);\n    const isSelected = computed(() => {\n      return props.value === props.modelValue;\n    });\n    const update = (value: string) => {\n      emit(\"update:modelValue\", value);\n    };\n    return {\n      id,\n      isSelected,\n      update,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"radio-input\"\n    :style=\"{\n      '--size': `${size}px`,\n    }\"\n  >\n    <input\n      type=\"radio\"\n      :id=\"id\"\n      :name=\"name\"\n      :value=\"value\"\n      :checked=\"isSelected\"\n      @input=\"update(($event.target as HTMLInputElement).value)\"\n    />\n    <label :for=\"id\" v-text=\"label\" />\n    <!--\n    <pre\n      v-text=\"{\n        modelValue,\n        value,\n        label,\n        isSelected,\n        id,\n      }\"\n    />\n    -->\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.radio-input {\n  display: grid;\n  grid-template-columns: 1rem auto;\n  gap: 1rem;\n  line-height: 1.1;\n\n  + .radio-input {\n    margin-top: 0.5rem;\n  }\n\n  input[type=\"radio\"] {\n    height: var(--size);\n    width: var(--size);\n    display: grid;\n    margin: 0;\n    color: currentcolor;\n    font: inherit;\n\n    /* For iOS < 15 to remove gradient background */\n    background-color: rgb(var(--c-light));\n    border: 3px solid currentcolor;\n    border-radius: 50%;\n    cursor: pointer;\n    appearance: none;\n    place-content: center;\n\n    &::before {\n      height: var(--size);\n      width: var(--size);\n      border-radius: 50%;\n      box-shadow: inset var(--size) var(--size) rgb(var(--c-dark));\n      transform: scale(0);\n      transition: 50ms transform ease-in-out;\n      content: \"\";\n    }\n\n    &:focus {\n      outline: none;\n    }\n\n    &:checked::before {\n      transform: scale(1);\n    }\n  }\n\n  label {\n    padding-top: 4px;\n    cursor: pointer;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\";\n\nexport default defineComponent({\n  props: {\n    modelValue: {\n      type: String,\n      default: \"\",\n      required: true,\n    },\n    label: {\n      type: String,\n      default: \"\",\n      required: false,\n    },\n    maxlength: {\n      type: Number,\n      default: 128,\n    },\n  },\n  emits: [\"update:modelValue\"],\n  setup(props, { emit }) {\n    const id = ref(`form-textarea-input-${Math.random().toString(36).slice(2)}`);\n    const update = (value: string) => {\n      emit(\"update:modelValue\", value);\n    };\n    return {\n      id,\n      update,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"textarea-input\">\n    <label v-if=\"label\" :for=\"id\" v-text=\"label\" />\n    <textarea\n      :id=\"id\"\n      :value=\"modelValue\"\n      :maxlength=\"maxlength\"\n      @input=\"update(($event.target as HTMLInputElement).value)\"\n    />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.textarea-input {\n  display: grid;\n  grid-template-rows: 1rem auto;\n  gap: 1rem;\n  color: rgb(var(--c-dark) / 100%);\n\n  label {\n    cursor: unset;\n  }\n\n  textarea {\n    display: grid;\n    width: 100%;\n    min-height: 6rem;\n    padding: 0.25em 0.5em;\n    color: currentcolor;\n    font-size: 2em;\n    font-family: var(--font-family);\n    border: 3px solid currentcolor;\n    border-radius: 3px;\n    transition: 100ms background ease-in-out, 100ms border-color ease-in-out;\n\n    &:focus {\n      background: rgb(var(--c-dark) / 10%);\n      border-color: transparent;\n      outline: none;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { debounce } from \"lodash-es\";\n\nimport CircleButton from \"@/components/ui/button/CircleButton.vue\";\nimport RadioInput from \"@/components/ui/form/RadioInput.vue\";\nimport TextareaInput from \"@/components/ui/form/TextareaInput.vue\";\nimport IconFlash from \"@/components/ui/icon/IconFlash.vue\";\nimport IconHeart from \"@/components/ui/icon/IconHeart.vue\";\nimport OverlayPanel from \"@/components/ui/panel/OverlayPanel.vue\";\nimport { useRating } from \"@/composables/rating\";\nimport type { Media } from \"@/typings/api\";\n\nconst props = defineProps<{\n  media: Media;\n}>();\n\nconst downvoteScopes = computed(() => {\n  return [\n    {\n      value: \"track\",\n      label: t(\"rating.downvoteScope.track\"),\n    },\n    {\n      value: \"genre\",\n      label: t(\"rating.downvoteScope.genre\"),\n    },\n    {\n      value: \"emission\",\n      label: t(\"rating.downvoteScope.emission\"),\n    },\n    {\n      value: \"daytime\",\n      label: t(\"rating.downvoteScope.daytime\"),\n    },\n    {\n      value: \"repetition\",\n      label: t(\"rating.downvoteScope.repetition\"),\n    },\n  ];\n});\n\nconst { t } = useI18n();\nconst objKey = computed(() => `${props.media.ct}:${props.media.uid}`);\nconst { ratingByKey, loadRating, setRatingWithSource } = useRating();\nconst rating = computed(() => ratingByKey(objKey.value));\nconst promptVisible = ref(false);\nconst scope = ref(\"track\");\nconst comment = ref(\"\");\n\nconst showPrompt = () => {\n  promptVisible.value = true;\n};\nconst hidePrompt = () => {\n  comment.value = \"\";\n  promptVisible.value = false;\n};\n\nconst upvoteIconFlipped = ref(false);\nconst flipUpvoteIcon = async () => {\n  upvoteIconFlipped.value = true;\n  return new Promise<void>((resolve) => {\n    setTimeout(() => {\n      upvoteIconFlipped.value = false;\n      resolve();\n    }, 200);\n  });\n};\n\nconst upvote = async () => {\n  await setRatingWithSource(objKey.value, 1);\n};\n\nconst downvote = async () => {\n  await setRatingWithSource(objKey.value, -1, {\n    scope: scope.value,\n    comment: comment.value,\n  });\n  hidePrompt();\n  /*\n  await notify({\n    level: \"success\",\n    ttl: 5,\n    body: t(\"rating.downvoteThankYou\"),\n  });\n  */\n};\n\nconst clearVote = async () => {\n  await setRatingWithSource(objKey.value, null);\n};\n\nconst onUpvote = debounce(\n  async () => {\n    await flipUpvoteIcon();\n    if (rating.value === 1) {\n      await clearVote();\n    } else {\n      await upvote();\n    }\n  },\n  200,\n  { leading: true, trailing: false }\n);\n\nconst onDownvote = debounce(\n  async () => {\n    if (rating.value === -1) {\n      await clearVote();\n    } else {\n      showPrompt();\n    }\n  },\n  200,\n  { leading: true, trailing: false }\n);\n\nonMounted(async () => {\n  if (rating.value === undefined) {\n    await loadRating(objKey.value);\n  }\n});\nwatch(objKey, async (key) => {\n  await loadRating(key);\n});\n</script>\n\n<template>\n  <div class=\"rating\">\n    <div class=\"total\">?</div>\n    <div>\n      <CircleButton @click=\"onUpvote\" :outlined=\"true\">\n        <div\n          class=\"flip-container\"\n          :class=\"{\n            'is-flipped': upvoteIconFlipped,\n          }\"\n        >\n          <IconHeart :outlined=\"rating !== 1\" color-var=\"--c-page-fg\" />\n        </div>\n      </CircleButton>\n    </div>\n    <div>\n      <CircleButton @click=\"onDownvote\" :outlined=\"true\">\n        <IconFlash :outlined=\"rating !== -1\" color-var=\"--c-page-fg\" />\n      </CircleButton>\n    </div>\n    <div class=\"total\">?</div>\n  </div>\n  <OverlayPanel :is-visible=\"promptVisible\" @close=\"hidePrompt\" :title=\"t('rating.downvoteTitle')\">\n    <div class=\"prompt\">\n      <div class=\"prompt__lead\">\n        <p v-text=\"t('rating.downvoteLead')\" />\n      </div>\n      <div class=\"prompt__scopes\">\n        <RadioInput\n          v-for=\"s in downvoteScopes\"\n          v-model=\"scope\"\n          name=\"scope\"\n          :key=\"`scope-${s.value}`\"\n          :value=\"s.value\"\n          :label=\"s.label\"\n          class=\"scope\"\n        />\n      </div>\n      <div class=\"prompt__comment\">\n        <TextareaInput v-model=\"comment\" :maxlength=\"256\" :label=\"t('rating.downvoteComment')\" />\n      </div>\n      <div class=\"prompt__actions\">\n        <button class=\"button\" @click=\"downvote\" v-text=\"t('formActions.send')\" />\n      </div>\n    </div>\n  </OverlayPanel>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n@use \"@/style/base/responsive\";\n@use \"@/style/elements/button\";\n\n.rating {\n  display: grid;\n  grid-template-columns: repeat(4, 4rem);\n\n  > div {\n    align-self: center;\n    justify-self: center;\n  }\n\n  .total {\n    @include typo.dim;\n    @include typo.light;\n\n    opacity: 0;\n  }\n\n  .flip-container {\n    height: 100%;\n    width: 100%;\n    transition: opacity 200ms ease-in-out, transform 200ms ease-in;\n\n    &.is-flipped {\n      transform: rotateY(89deg);\n    }\n  }\n\n  @include responsive.bp-medium {\n    grid-template-columns: auto 52px 52px auto;\n  }\n}\n\n.prompt {\n  margin-bottom: calc(72px + 1rem); /* player height + margin */\n\n  &__lead {\n    padding: 0 0 1rem;\n\n    @include typo.large;\n  }\n\n  &__scopes {\n    padding: 1rem 0;\n  }\n\n  &__comment {\n    padding: 1rem 0;\n\n    textarea {\n      @include typo.large;\n\n      width: 100%;\n      min-height: 4rem;\n      padding: 0.54rem;\n    }\n  }\n\n  &__actions {\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n    padding: 1rem 0;\n\n    .button {\n      @include button.default(3rem);\n\n      min-width: 33%;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from \"vue\";\nimport { useWindowSize, whenever } from \"@vueuse/core\";\nimport { storeToRefs } from \"pinia\";\nimport { round } from \"lodash-es\";\n\nimport Spectrogram from \"@/components/audio/Spectrogram.vue\";\nimport { useAnalytics } from \"@/composables/analytics\";\nimport { usePlayerControls, usePlayerState } from \"@/composables/player\";\nimport { useSettings } from \"@/composables/settings\";\nimport eventBus from \"@/eventBus\";\nimport type { AnnotatedSchedule } from \"@/stores/schedule\";\nimport { useScheduleStore } from \"@/stores/schedule\";\nimport { useTimeStore } from \"@/stores/time\";\nimport { useUiStore } from \"@/stores/ui\";\nimport { getContrastColor } from \"@/utils/color\";\n\nimport Flow from \"./flow/Flow.vue\";\nimport FlowNews from \"./flow/FlowNews.vue\";\nimport PaginateButton from \"./flow/PaginateButton.vue\";\nimport FocusedEmission from \"./focused/FocusedEmission.vue\";\nimport FocusedMedia from \"./focused/FocusedMedia.vue\";\nimport RadioHeader from \"./RadioHeader.vue\";\nimport Rating from \"./rating/Rating.vue\";\n\nexport default defineComponent({\n  components: {\n    RadioHeader,\n    Flow,\n    FlowNews,\n    FocusedEmission,\n    FocusedMedia,\n    PaginateButton,\n    Rating,\n    Spectrogram,\n  },\n  setup() {\n    const { time } = storeToRefs(useTimeStore());\n    const { endPlayNews } = usePlayerControls();\n    const { isLive, isNews } = usePlayerState();\n    const { setPrimaryColor } = useUiStore();\n    const { userSettings } = useSettings();\n    const { items, current: currentItem } = storeToRefs(useScheduleStore());\n    const { width: vpWidth, height: vpHeight } = useWindowSize();\n    const { logUIEvent } = useAnalytics();\n    const itemSize = computed(() => {\n      const maxByWidth = round(vpWidth.value * 0.7);\n      // NOTE: vpHeight minus menu, time, rating & player\n      const maxByHeight = vpHeight.value - 380;\n      const max = Math.min(maxByWidth, maxByHeight);\n      return Math.max(Math.min(max, 800), 240);\n    });\n    const debugOffset = ref(0);\n    const offset = computed(() => {\n      return debugOffset.value;\n    });\n    const paginatedItems = computed(() => {\n      const numItems = 8;\n      return items.value.slice(offset.value, offset.value + numItems);\n    });\n    const focusedItemKey = ref(\"\");\n    const onItemFocused = (item: AnnotatedSchedule) => {\n      focusedItemKey.value = item.key;\n    };\n    const focusedItem = computed((): AnnotatedSchedule | null => {\n      // NOTE: we use all items here (not paginatedItems)\n      const item = items.value.find((i: AnnotatedSchedule) => i.key === focusedItemKey.value);\n      return item ? item : null;\n    });\n    watch(\n      () => focusedItem.value,\n      (item: AnnotatedSchedule | null) => {\n        const rgb = item?.media?.image?.rgb;\n        if (rgb) {\n          setPrimaryColor(rgb);\n        }\n      }\n    );\n    watch(\n      () => currentItem.value,\n      () => {\n        eventBus.emit(\"radio:flow\", \"reset\");\n      }\n    );\n    const hasNext = computed(() => {\n      if (!focusedItem.value) {\n        return false;\n      }\n      const index = items.value.findIndex((i: AnnotatedSchedule) => i.key === focusedItemKey.value);\n      return index > 0;\n    });\n    const hasPrevious = computed(() => {\n      if (!focusedItem.value) {\n        return false;\n      }\n      // if (isNews.value) {\n      //   return false;\n      // }\n      const index = paginatedItems.value.findIndex(\n        (i: AnnotatedSchedule) => i.key === focusedItemKey.value\n      );\n      return index < paginatedItems.value.length - 1;\n    });\n    const focusNext = () => {\n      eventBus.emit(\"radio:flow\", \"focusNext\");\n      logUIEvent(\"cover-flow:next\");\n    };\n    const focusPrevious = () => {\n      eventBus.emit(\"radio:flow\", \"focusPrevious\");\n      logUIEvent(\"cover-flow:previous\");\n    };\n    const releaseFocus = () => {\n      eventBus.emit(\"radio:flow\", \"releaseFocus\");\n      logUIEvent(\"cover-flow:reset\");\n    };\n    whenever(isLive, () => eventBus.emit(\"radio:flow\", \"releaseFocus\"));\n\n    // visualisation\n    const spectrogramVisible = computed(() => userSettings.value?.testingEnabled);\n    const { primaryColor } = storeToRefs(useUiStore());\n    const spectrogramColor = computed(() => {\n      const fg = getContrastColor(primaryColor.value);\n      return `rgb(${fg.join(\" \")} / 10%)`;\n    });\n    return {\n      time,\n      itemSize,\n      paginatedItems,\n      debugOffset,\n      onItemFocused,\n      focusedItemKey,\n      focusedItem,\n      //\n      endPlayNews,\n      isNews,\n      //\n      hasNext,\n      hasPrevious,\n      focusNext,\n      focusPrevious,\n      releaseFocus,\n      // visualisation\n      primaryColor,\n      spectrogramVisible,\n      spectrogramColor,\n      vpWidth,\n    };\n  },\n});\n</script>\n\n<template>\n  <div\n    class=\"radio\"\n    :style=\"{\n      '--item-size': `${itemSize}px`,\n    }\"\n    :class=\"{\n      'is-news': isNews,\n    }\"\n  >\n    <div class=\"header-container\">\n      <RadioHeader :item=\"focusedItem\" @release-focus=\"releaseFocus\" />\n    </div>\n    <div class=\"main\">\n      <div class=\"left\">\n        <FocusedEmission\n          v-if=\"focusedItem?.emission\"\n          :emission=\"focusedItem.emission\"\n          :playlist=\"focusedItem.playlist\"\n        />\n        <div class=\"paginate\">\n          <PaginateButton :disabled=\"!hasPrevious\" :rotate=\"180\" @click=\"focusPrevious\" />\n        </div>\n      </div>\n      <div class=\"flow\">\n        <Flow\n          v-show=\"true\"\n          :items=\"paginatedItems\"\n          :item-size=\"itemSize\"\n          @on-item-focused=\"onItemFocused\"\n          :style=\"{\n            opacity: isNews ? 0.125 : 1,\n          }\"\n        />\n        <transition name=\"news\">\n          <FlowNews v-show=\"isNews\" :item-size=\"itemSize\" />\n        </transition>\n      </div>\n      <div class=\"right\">\n        <FocusedMedia v-if=\"focusedItem?.media\" :media=\"focusedItem.media\" />\n        <div class=\"paginate\">\n          <PaginateButton :disabled=\"!hasNext\" @click=\"focusNext\" />\n        </div>\n        <div v-if=\"isNews\" @click=\"endPlayNews\" class=\"skip-news\">\n          <div class=\"skip-news__label\">Skip News</div>\n          <PaginateButton />\n        </div>\n      </div>\n    </div>\n    <div class=\"rating\">\n      <Rating v-if=\"focusedItem?.media\" :media=\"focusedItem.media\" />\n    </div>\n  </div>\n  <Spectrogram v-if=\"spectrogramVisible\" :height=\"200\" :width=\"vpWidth\" :color=\"spectrogramColor\" />\n</template>\n\n<style lang=\"scss\" scoped>\n.radio {\n  position: relative;\n\n  > .header-container {\n    position: relative;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    height: 124px;\n    z-index: 10;\n\n    > .radio-header {\n      position: absolute;\n      width: var(--item-size);\n    }\n  }\n\n  > .main {\n    display: flex;\n    position: relative;\n\n    > .flow {\n      overflow: hidden;\n      top: 0;\n      width: 100%;\n      margin: -60px 0;\n    }\n\n    > .flow-news {\n      overflow: hidden;\n      top: 0;\n      width: 100%;\n      margin: -60px 0;\n    }\n\n    > .left,\n    > .right {\n      top: 0;\n      position: absolute;\n      height: 100%;\n      width: 25%;\n      display: flex;\n      justify-content: center;\n      z-index: 19;\n\n      .metadata {\n        width: 100%;\n      }\n\n      .paginate {\n        top: calc(var(--item-size) / 2 - 60px);\n        position: absolute;\n        height: 120px;\n        width: 120px;\n        cursor: pointer;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        z-index: 18;\n      }\n    }\n\n    > .left {\n      padding-left: 1rem;\n    }\n\n    > .right {\n      right: 0;\n      padding-right: 1rem;\n\n      .skip-news {\n        top: calc(var(--item-size) / 2 - 60px);\n        position: absolute;\n        height: 120px;\n        width: 120px;\n        cursor: pointer;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        z-index: 18;\n\n        &__label {\n          position: absolute;\n          height: 120px;\n          right: 120px;\n          white-space: nowrap;\n          padding-right: 1rem;\n          display: flex;\n          align-items: center;\n        }\n      }\n    }\n  }\n\n  > .rating {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    height: 124px;\n  }\n\n  &.is-news {\n    > .main {\n      > .left,\n      > .right {\n        cursor: wait;\n\n        .metadata {\n          opacity: 0.5;\n          pointer-events: none;\n        }\n      }\n\n      > .left {\n        .paginate {\n          display: none;\n        }\n      }\n\n      > .right {\n        .paginate {\n          display: none;\n        }\n      }\n    }\n\n    > .rating {\n      opacity: 0.5;\n      pointer-events: none;\n      cursor: wait;\n    }\n  }\n}\n\n.spectrogram-container {\n  position: fixed;\n  bottom: 72px;\n}\n\n// news panel transition\n.news-enter-active,\n.news-leave-active {\n  transition: opacity 200ms;\n}\n\n.news-enter-from {\n  opacity: 0;\n}\n\n.news-leave-to {\n  opacity: 0;\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport type { ScheduleEmission, SchedulePlaylist } from \"@/typings/api\";\n\nexport default defineComponent({\n  props: {\n    emission: {\n      type: Object as PropType<ScheduleEmission>,\n      required: true,\n    },\n    playlist: {\n      type: Object as PropType<SchedulePlaylist>,\n      required: true,\n    },\n  },\n  setup(props) {\n    const { t } = useI18n();\n    const link = computed(() => {\n      return {\n        name: \"playlistDetail\",\n        params: {\n          uid: props.playlist.uid,\n        },\n      };\n    });\n    const titleDisplay = computed(() => {\n      const name = props.playlist?.series?.name || props.playlist.name;\n      const appendix = props.playlist?.series?.episode;\n      return name && appendix ? `${name} #${appendix}` : name;\n    });\n    const editorDisplay = computed(() => {\n      return props.playlist?.editor?.name ?? \"\";\n    });\n    return {\n      t,\n      link,\n      titleDisplay,\n      editorDisplay,\n    };\n  },\n});\n</script>\n\n<template>\n  <router-link :to=\"link\" class=\"focused-emission\">\n    <div class=\"title\">\n      <span class=\"label\">{{ t(\"catalog.ct.playlist\") }}: </span>\n      {{ titleDisplay }}\n    </div>\n    <div v-if=\"editorDisplay\" class=\"editor\">\n      <span class=\"label\">by </span>\n      {{ editorDisplay }}\n    </div>\n  </router-link>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.focused-emission {\n  max-width: 100%;\n  line-height: 20px;\n\n  .title,\n  .editor {\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  .title {\n    &::first-letter {\n      text-transform: uppercase;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\n\nimport type { Media } from \"@/typings/api\";\n\nexport default defineComponent({\n  props: {\n    media: {\n      type: Object as PropType<Media>,\n      required: true,\n    },\n  },\n  setup(props) {\n    const link = computed(() => {\n      return {\n        name: \"mediaDetail\",\n        params: {\n          uid: props.media.uid,\n        },\n      };\n    });\n    return {\n      link,\n    };\n  },\n});\n</script>\n\n<template>\n  <router-link :to=\"link\" class=\"focused-media\">\n    <div class=\"name\">\n      <span class=\"label\">Track: </span>\n      {{ media.name }}\n    </div>\n    <div class=\"artist\">\n      <span class=\"label\">by </span>\n      {{ media.artistDisplay }}\n    </div>\n  </router-link>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/style/base/typo\";\n\n.focused-media {\n  max-width: 100%;\n  line-height: 20px;\n\n  .name,\n  .artist {\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from \"vue\";\nimport { useWindowSize, whenever } from \"@vueuse/core\";\nimport { storeToRefs } from \"pinia\";\nimport { round } from \"lodash-es\";\n\nimport { usePlayerState } from \"@/composables/player\";\nimport eventBus from \"@/eventBus\";\nimport type { AnnotatedSchedule } from \"@/stores/schedule\";\nimport { useScheduleStore } from \"@/stores/schedule\";\nimport { useUiStore } from \"@/stores/ui\";\nimport { preloadImage } from \"@/utils/image\";\n\nimport Flow from \"./flow/Flow.vue\";\nimport FocusedEmission from \"./focused/FocusedEmissionMobile.vue\";\nimport FocusedMedia from \"./focused/FocusedMediaMobile.vue\";\nimport Rating from \"./rating/Rating.vue\";\n\nexport default defineComponent({\n  components: {\n    Flow,\n    FocusedEmission,\n    FocusedMedia,\n    Rating,\n  },\n  setup() {\n    const { isLive } = usePlayerState();\n    const { setPrimaryColor } = useUiStore();\n    const { items, current: currentItem, next: nextItem } = storeToRefs(useScheduleStore());\n    const { width: vpWidth, height: vpHeight } = useWindowSize();\n    const itemSize = computed(() => {\n      const maxByWidth = round(vpWidth.value * 0.7);\n      // NOTE: vpHeight minus menu, time, rating & player\n      const maxByHeight = vpHeight.value - 360;\n      const max = Math.min(maxByWidth, maxByHeight);\n      return Math.max(Math.min(max, 800), 240);\n    });\n    const debugOffset = ref(0);\n    const offset = computed(() => {\n      return debugOffset.value;\n    });\n    const paginatedItems = computed(() => {\n      const numItems = 12;\n      return items.value.slice(offset.value, offset.value + numItems);\n    });\n    const focusedItemKey = ref(\"\");\n    const onItemFocused = (item: AnnotatedSchedule) => {\n      focusedItemKey.value = item.key;\n    };\n    const focusedItem = computed((): AnnotatedSchedule | null => {\n      // NOTE: we use all items here (not paginatedItems)\n      const item = items.value.find((i: AnnotatedSchedule) => i.key === focusedItemKey.value);\n      return item ? item : null;\n    });\n    watch(\n      () => focusedItem.value,\n      (item: AnnotatedSchedule | null) => {\n        const rgb = item?.media?.image?.rgb;\n        if (rgb) {\n          setPrimaryColor(rgb);\n        }\n      }\n    );\n    watch(\n      () => currentItem.value,\n      () => {\n        eventBus.emit(\"radio:flow\", \"reset\");\n      }\n    );\n    whenever(isLive, () => eventBus.emit(\"radio:flow\", \"releaseFocus\"));\n    // NOTE: preload upcoming images\n    const nextImage = computed(() => {\n      return nextItem.value?.media?.releases?.length\n        ? nextItem.value.media.releases[0].image\n        : null;\n    });\n    watch(\n      () => nextImage.value,\n      (imageObj) => preloadImage(imageObj)\n    );\n    return {\n      itemSize,\n      paginatedItems,\n      debugOffset,\n      onItemFocused,\n      focusedItemKey,\n      focusedItem,\n      nextImage,\n    };\n  },\n});\n</script>\n\n<template>\n  <div class=\"radio\">\n    <div class=\"emission\">\n      <FocusedEmission\n        v-if=\"focusedItem?.emission\"\n        :emission=\"focusedItem.emission\"\n        :playlist=\"focusedItem.playlist\"\n      />\n    </div>\n    <div class=\"flow\">\n      <Flow :items=\"paginatedItems\" :item-size=\"itemSize\" @on-item-focused=\"onItemFocused\" />\n    </div>\n    <div class=\"media\">\n      <FocusedMedia v-if=\"focusedItem?.media\" :media=\"focusedItem.media\" />\n    </div>\n    <div class=\"rating\">\n      <Rating v-if=\"focusedItem?.media\" :media=\"focusedItem.media\" />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.radio {\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  margin-bottom: 200px;\n  justify-content: flex-start;\n\n  > .emission {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    height: 68px;\n    padding: 0 1rem;\n    width: 100%;\n    text-align: center;\n\n    .focused-emission {\n      position: absolute;\n      z-index: 15;\n      padding: inherit;\n    }\n  }\n\n  > .flow {\n    background: transparent;\n    margin: -60px 0;\n  }\n\n  > .media {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    height: 68px;\n    text-align: center;\n    padding: 0 1rem;\n\n    .focused-media {\n      position: absolute;\n      z-index: 15;\n      padding: inherit;\n    }\n  }\n\n  > .rating {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport Radio from \"@/components/broadcast/radio/Radio.vue\";\nimport RadioMobile from \"@/components/broadcast/radio/RadioMobile.vue\";\nimport { useDevice } from \"@/composables/device\";\n\nconst { isSmallScreen } = useDevice();\n</script>\n\n<template>\n  <RadioMobile v-if=\"isSmallScreen\" />\n  <Radio v-else />\n</template>\n","import { createRouter, createWebHistory } from \"vue-router\";\nimport { DateTime } from \"luxon\";\nimport { isEqual } from \"lodash-es\";\n\nimport { getUser } from \"@/api/account\";\nimport AccountEmailLogin from \"@/components/account/EmailLogin.vue\";\nimport AccountLogin from \"@/components/account/Login.vue\";\nimport AccountSettings from \"@/components/account/Settings.vue\";\nimport AccountUserVouchers from \"@/components/account/UserVouchers.vue\";\nimport EditorList from \"@/components/broadcast/editor/List.vue\";\nimport ArtistList from \"@/components/catalog/artist/List.vue\";\nimport MediaList from \"@/components/catalog/media/List.vue\";\nimport MoodList from \"@/components/catalog/mood/List.vue\";\nimport PlaylistList from \"@/components/catalog/playlist/List.vue\";\nimport DiscoverHome from \"@/components/discover/Home.vue\";\nimport Searchbar from \"@/components/filter/Searchbar.vue\";\nimport { usePageTitle } from \"@/composables/title\";\nimport DiscoverHeader from \"@/layouts/DiscoverHeader.vue\";\nimport { setBodyColorTheme } from \"@/utils/color\";\nimport { parseFilterQuery } from \"@/utils/filter\";\nimport Account from \"@/views/Account.vue\";\nimport EditorDetail from \"@/views/broadcast/EditorDetail.vue\";\nimport ArtistDetail from \"@/views/catalog/ArtistDetail.vue\";\nimport MediaDetail from \"@/views/catalog/MediaDetail.vue\";\nimport MoodDetail from \"@/views/catalog/MoodDetail.vue\";\nimport PlaylistDetail from \"@/views/catalog/PlaylistDetail.vue\";\nimport Page from \"@/views/cms/Page.vue\";\nimport Collection from \"@/views/Collection.vue\";\nimport Discover from \"@/views/Discover.vue\";\nimport Faq from \"@/views/faq/Faq.vue\";\nimport NotFound from \"@/views/NotFound.vue\";\nimport Donate from \"@/views/pages/Donate.vue\";\nimport Program from \"@/views/Program.vue\";\nimport Radio from \"@/views/Radio.vue\";\n\nconst isAuthenticated = async () => {\n  return await getUser();\n};\n\nconst routes = [\n  {\n    path: \"/\",\n    name: \"home\",\n    component: Radio,\n    meta: {\n      title: \"Play\",\n      colorTheme: \"live\",\n    },\n  },\n  {\n    path: \"/program/\",\n    name: \"programRedirect\",\n    redirect: () => {\n      const now = DateTime.now();\n      return {\n        name: \"program\",\n        params: {\n          date: now.toISODate(),\n        },\n      };\n    },\n  },\n  {\n    path: \"/program/:date(\\\\d{4}-\\\\d{2}-\\\\d{2})/\",\n    // path: \"/program/:date(\\\\d{4}-\\\\d{2}-\\\\d{2})/:time(\\\\d{2}:\\\\d{2})?/\",\n    name: \"program\",\n    components: {\n      default: Program,\n    },\n    meta: {\n      title: \"Program\",\n    },\n    props: {\n      default: (route: any) => ({\n        date: DateTime.fromISO(route.params.date),\n        // timeStr: route.params.time,\n      }),\n    },\n  },\n  {\n    path: \"/discover/\",\n    name: \"discover\",\n    component: Discover,\n    redirect: {\n      name: \"discoverMoods\",\n    },\n    meta: {\n      title: \"Discover\",\n    },\n    children: [\n      {\n        path: \"home/\",\n        name: \"discoverHome\",\n        components: {\n          default: DiscoverHome,\n          header: DiscoverHeader,\n        },\n        meta: {\n          title: \"Moods\",\n        },\n      },\n      {\n        path: \"moods/\",\n        name: \"discoverMoods\",\n        // component: MoodList,\n        components: {\n          default: MoodList,\n          header: DiscoverHeader,\n        },\n        meta: {\n          title: \"Moods\",\n        },\n      },\n      {\n        path: \"playlists/\",\n        name: \"discoverPlaylists\",\n        components: {\n          default: PlaylistList,\n          header: DiscoverHeader,\n        },\n        props: {\n          default: (route: any) => ({\n            // query: route.query,\n            query: parseFilterQuery(route.query),\n          }),\n          header: (route: any) => ({\n            filter: route.query,\n          }),\n        },\n      },\n      {\n        path: \"artists/\",\n        name: \"discoverArtists\",\n        components: {\n          default: ArtistList,\n          header: DiscoverHeader,\n        },\n        props: {\n          default: (route: any) => ({\n            // query: route.query,\n            query: parseFilterQuery(route.query),\n          }),\n          header: (route: any) => ({\n            filter: route.query,\n          }),\n        },\n      },\n      {\n        path: \"tracks/\",\n        name: \"discoverMedia\",\n        components: {\n          default: MediaList,\n          header: DiscoverHeader,\n        },\n        props: {\n          default: (route: any) => ({\n            query: parseFilterQuery(route.query),\n            showListActions: true,\n          }),\n          header: (route: any) => ({\n            filter: route.query,\n          }),\n        },\n      },\n      {\n        path: \"editors/\",\n        name: \"discoverEditors\",\n        components: {\n          default: EditorList,\n          header: DiscoverHeader,\n        },\n      },\n      // testing nested detail components\n      {\n        path: \"/discover/moods/:uid/\",\n        name: \"moodDetail\",\n        components: {\n          default: MoodDetail,\n        },\n        props: {\n          default: (route: any) => ({\n            uid: route.params.uid,\n            query: parseFilterQuery(route.query),\n          }),\n        },\n        meta: {\n          colorTheme: \"dark\",\n        },\n      },\n      {\n        path: \"/discover/playlists/:uid/\",\n        name: \"playlistDetail\",\n        components: {\n          default: PlaylistDetail,\n        },\n        props: {\n          default: (route: any) => ({\n            uid: route.params.uid,\n          }),\n        },\n        meta: {\n          colorTheme: \"dark\",\n        },\n      },\n      {\n        path: \"/discover/artists/:uid/\",\n        name: \"artistDetail\",\n        components: {\n          default: ArtistDetail,\n        },\n        props: {\n          default: (route: any) => ({\n            uid: route.params.uid,\n          }),\n        },\n        meta: {\n          colorTheme: \"dark\",\n        },\n      },\n      {\n        path: \"/discover/tracks/:uid/\",\n        name: \"mediaDetail\",\n        components: {\n          default: MediaDetail,\n        },\n        props: {\n          default: (route: any) => ({\n            uid: route.params.uid,\n          }),\n        },\n        meta: {\n          colorTheme: \"dark\",\n        },\n      },\n      {\n        path: \"/discover/editors/:uid/\",\n        name: \"editorDetail\",\n        components: {\n          default: EditorDetail,\n        },\n        props: {\n          default: (route: any) => ({\n            uid: route.params.uid,\n            query: parseFilterQuery(route.query),\n          }),\n        },\n        meta: {\n          colorTheme: \"dark\",\n        },\n      },\n    ],\n  },\n  // {\n  //   path: '/discover/playlists/:uid/',\n  //   name: 'playlistDetail',\n  //   component: PlaylistDetail,\n  //   props: (route: any) => ({\n  //     uid: route.params.uid,\n  //   }),\n  //   meta: {\n  //     colorTheme: 'dark',\n  //   },\n  // },\n  // {\n  //   path: '/discover/moods/:uid/',\n  //   name: 'moodDetail',\n  //   component: MoodDetail,\n  //   props: (route: any) => ({\n  //     uid: route.params.uid,\n  //     query: parseFilterQuery(route.query),\n  //   }),\n  //   meta: {\n  //     colorTheme: 'dark',\n  //   },\n  // },\n  // {\n  //   path: '/discover/artists/:uid/',\n  //   name: 'artistDetail',\n  //   component: ArtistDetail,\n  //   props: (route: any) => ({\n  //     uid: route.params.uid,\n  //   }),\n  //   meta: {\n  //     colorTheme: 'dark',\n  //   },\n  // },\n  // {\n  //   path: \"/discover/tracks/:uid/\",\n  //   name: \"mediaDetail\",\n  //   component: MediaDetail,\n  //   props: (route: any) => ({\n  //     uid: route.params.uid,\n  //   }),\n  //   meta: {\n  //     colorTheme: \"dark\",\n  //   },\n  // },\n  // {\n  //   path: '/discover/editors/:uid/',\n  //   name: 'editorDetail',\n  //   component: EditorDetail,\n  //   props: (route: any) => ({\n  //     uid: route.params.uid,\n  //   }),\n  //   meta: {\n  //     colorTheme: 'dark',\n  //   },\n  // },\n  {\n    path: \"/collection/\",\n    name: \"collection\",\n    component: Collection,\n    meta: {\n      title: \"Favourites\",\n    },\n    /*\n    beforeEnter: async (to: any, from: any, next: any) => {\n      const authenticated = await isAuthenticated();\n      if (!authenticated) {\n        next({ name: 'accountLogin' });\n      } else {\n        next();\n      }\n    },\n    */\n    redirect: {\n      name: \"collectionMedia\",\n      // name: \"collectionPlaylists\",\n    },\n    children: [\n      {\n        path: \"tracks/\",\n        name: \"collectionMedia\",\n        components: {\n          default: MediaList,\n          searchbar: Searchbar,\n        },\n        props: {\n          default: (route: any) => ({\n            scope: \"collection\",\n            query: route.query,\n            showListActions: true,\n          }),\n          searchbar: (route: any) => ({\n            filter: route.query,\n          }),\n        },\n      },\n      {\n        path: \"shows/\",\n        name: \"collectionPlaylists\",\n        components: {\n          default: PlaylistList,\n          searchbar: Searchbar,\n        },\n        props: {\n          default: (route: any) => ({\n            scope: \"collection\",\n            query: route.query,\n          }),\n          searchbar: (route: any) => ({\n            filter: route.query,\n          }),\n        },\n      },\n      {\n        path: \"artists/\",\n        name: \"collectionArtists\",\n        components: {\n          default: ArtistList,\n          searchbar: Searchbar,\n        },\n        props: {\n          default: (route: any) => ({\n            scope: \"collection\",\n            query: route.query,\n          }),\n          searchbar: (route: any) => ({\n            filter: route.query,\n          }),\n        },\n      },\n    ],\n  },\n  {\n    path: \"/account/\",\n    name: \"Account\",\n    component: Account,\n    meta: {\n      title: \"Account\",\n    },\n    redirect: {\n      name: \"accountSettings\",\n    },\n    children: [\n      {\n        path: \"login/\",\n        name: \"accountLogin\",\n        component: AccountLogin,\n        beforeEnter: async (to: any, from: any, next: any) => {\n          const authenticated = await isAuthenticated();\n          if (authenticated) {\n            next({ name: \"accountSettings\" });\n          } else {\n            next();\n          }\n        },\n      },\n      {\n        path: \"settings/\",\n        name: \"accountSettings\",\n        component: AccountSettings,\n        beforeEnter: async (to: any, from: any, next: any) => {\n          const authenticated = await isAuthenticated();\n          if (!authenticated) {\n            next({ name: \"accountLogin\" });\n          } else {\n            next();\n          }\n        },\n      },\n      {\n        path: \"vouchers/\",\n        name: \"accountUserVouchers\",\n        component: AccountUserVouchers,\n        beforeEnter: async (to: any, from: any, next: any) => {\n          const authenticated = await isAuthenticated();\n          if (!authenticated) {\n            next({ name: \"accountLogin\" });\n          } else {\n            next();\n          }\n        },\n      },\n      {\n        path: \"email-login/:signedEmail?/\",\n        name: \"accountEmailLogin\",\n        component: AccountEmailLogin,\n      },\n    ],\n  },\n  {\n    path: \"/faq/\",\n    name: \"faq\",\n    component: Faq,\n    meta: {\n      title: \"FAQ\",\n    },\n  },\n  // non-cms pages\n  {\n    path: \"/donate/\",\n    name: \"donate\",\n    component: Donate,\n    meta: {\n      title: \"Donate\",\n    },\n  },\n  // \"cms\" pages\n  {\n    path: \"/:pathMatch(.*)*\",\n    name: \"page\",\n    component: Page,\n    props: (route: any) => ({\n      path: route.path,\n    }),\n  },\n  {\n    path: \"/:pathMatch(.*)*\",\n    name: \"NotFound\",\n    component: NotFound,\n    meta: {\n      title: \"404\",\n    },\n  },\n];\n\nconst router = createRouter({\n  history: createWebHistory(\"/\"),\n  // @ts-ignore\n  routes,\n  scrollBehavior(to, from, savedPosition) {\n    if (from && to.name === from.name && isEqual(to.params, from.params)) {\n      return false;\n    }\n    return savedPosition || { left: 0, top: 0 };\n  },\n});\n\nrouter.beforeEach((to, from, next) => {\n  const theme = to.meta?.colorTheme ?? \"light\";\n  // @ts-ignore\n  setBodyColorTheme(theme);\n  next();\n});\n\nrouter.beforeEach(async (to, from, next) => {\n  const node = to.matched\n    .slice()\n    .reverse()\n    .find((r) => r.meta && r.meta.title);\n  if (node && node.meta.title) {\n    usePageTitle(node.meta.title);\n  }\n  next();\n});\n\nrouter.afterEach(async (to) => {\n  // TODO: this likely should be implemented outside of router logic\n  if (window.appBridge) {\n    await window.appBridge.send(\"web:setPath\", { path: to.path });\n  }\n});\n\n// router.beforeEach((to, from, next) => {\n//   // eslint-disable-next-line no-param-reassign\n//   to.meta.activated = true;\n//   // eslint-disable-next-line no-param-reassign\n//   from.meta.activated = false;\n//   next();\n// });\n\n// router.afterEach((to, from) => {\n//   const toDepth = to.path.split('/').length;\n//   const fromDepth = from.path.split('/').length;\n//   // eslint-disable-next-line no-param-reassign\n//   to.meta.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left';\n// });\n\nexport default router;\n","import { createApp } from \"vue\";\nimport { createI18n } from \"vue-i18n\";\n// import { Integrations } from \"@sentry/tracing\";\n// import * as Sentry from \"@sentry/vue\";\nimport log from \"loglevel\";\nimport { onCLS, onINP, onLCP, onTTFB } from \"web-vitals/attribution\";\nimport { createPinia } from \"pinia\";\nimport piniaPluginPersistedstate from \"pinia-plugin-persistedstate\";\n\n// @ts-ignore\nimport de from \"@/locales/de.yml\";\n// @ts-ignore\nimport en from \"@/locales/en.yml\";\n// import settings from \"@/settings\";\n// import createEventHandler from \"@/stats/event\";\nimport { useSettingsStore } from \"@/stores/settings\";\n// import createAccountHandler from \"@/utils/account\";\n// import createScheduleHandler from \"@/utils/schedule\";\nimport setDocumentTheme from \"@/utils/theme\";\n\n// import createUIStateHandler from \"@/utils/ui\";\nimport App from \"./App.vue\";\n// directives\nimport { TooltipDirective } from \"./directives/tooltip\";\nimport router from \"./router\";\n\nimport \"./style/main.scss\";\n\nlog.setLevel(\"TRACE\");\n\nconst pinia = createPinia();\npinia.use(piniaPluginPersistedstate);\n\nconst app = createApp(App);\napp.use(pinia);\n\nconst settingsStore = useSettingsStore();\n\nsetDocumentTheme();\n\n// createEventHandler();\n// createScheduleHandler();\n// createAccountHandler();\n// createUIStateHandler();\n// createMediaSessionHandler();\n\n// import { numberFormats } from \"@/locales/formats\";\n\nconst i18n = createI18n({\n  legacy: false,\n  locale: settingsStore.locale,\n  fallbackLocale: \"de\",\n  globalInjection: false,\n  messages: {\n    de,\n    en,\n  },\n  // numberFormats,\n});\n\napp.use(router);\napp.use(i18n);\napp.directive(\"tooltip\", TooltipDirective);\n\n// if (settings.SENTRY_DSN) {\n//   Sentry.init({\n//     app,\n//     dsn: settings.SENTRY_DSN,\n//     integrations: [\n//       new Integrations.BrowserTracing({\n//         routingInstrumentation: Sentry.vueRouterInstrumentation(router),\n//         tracePropagationTargets: [\n//           \"local.obr-next\",\n//           \"openbroadcast.ch\",\n//           /^\\//,\n//         ],\n//       }),\n//       new Sentry.Replay({\n//         maskAllText: false,\n//         blockAllMedia: false,\n//       }),\n//     ],\n//     trackComponents: true,\n//     tracesSampleRate: 1.0,\n//     replaysSessionSampleRate: 0.1,\n//     replaysOnErrorSampleRate: 1.0,\n//   });\n// }\n\n// if (settings.SENTRY_DSN) {\n//   Sentry.init({\n//     app,\n//     dsn: settings.SENTRY_DSN,\n//   });\n// }\n\napp.mount(\"#app\");\n\n// @ts-ignore\nwindow.pinia = pinia;\n\n// @ts-ignore\nwindow.app = app;\n\n// @ts-ignore\nwindow.router = router;\n\n// @ts-ignore\n// window.tracker = tracker;\n\nfunction wvSend(metric: any) {\n  console.debug(\"metric\", metric);\n  // @ts-ignore\n  window.dataLayer = window.dataLayer || [];\n  // @ts-ignore\n  window.dataLayer.push({\n    event: \"web_vitals\",\n    event_category: \"Web Vitals\",\n    event_action: metric.name,\n    event_label: metric.id,\n    value: Math.round(metric.value),\n    non_interaction: true,\n  });\n}\n\nonCLS(wvSend);\nonLCP(wvSend);\nonTTFB(wvSend);\nonINP(wvSend);\n"],"names":["makeMap","str","expectsLowerCase","map","list","i","val","EMPTY_OBJ","EMPTY_ARR","NOOP","NO","onRE","isOn","key","isModelListener","extend","remove","arr","el","hasOwnProperty","hasOwn","isArray","isMap","toTypeString","isSet","isDate","isRegExp","isFunction","isString","isSymbol","isObject","isPromise","objectToString","value","toRawType","isPlainObject","isIntegerKey","isReservedProp","cacheStringFunction","fn","cache","camelizeRE","camelize","_","c","hyphenateRE","hyphenate","capitalize","toHandlerKey","hasChanged","oldValue","invokeArrayFns","fns","arg","def","obj","looseToNumber","n","toNumber","_globalThis","getGlobalThis","normalizeStyle","res","item","normalized","parseStringStyle","listDelimiterRE","propertyDelimiterRE","styleCommentRE","cssText","ret","tmp","normalizeClass","name","specialBooleanAttrs","isSpecialBooleanAttr","includeBooleanAttr","looseCompareArrays","a","b","equal","looseEqual","aValidType","bValidType","aKeysCount","bKeysCount","aHasKey","bHasKey","looseIndexOf","toDisplayString","replacer","_key","entries","val2","activeEffectScope","EffectScope","detached","currentEffectScope","fromParent","l","last","effectScope","recordEffectScope","effect","scope","getCurrentScope","onScopeDispose","createDep","effects","dep","wasTracked","trackOpBit","newTracked","initDepMarkers","deps","finalizeDepMarkers","ptr","targetMap","effectTrackDepth","maxMarkerBits","activeEffect","ITERATE_KEY","MAP_KEY_ITERATE_KEY","ReactiveEffect","scheduler","parent","lastShouldTrack","shouldTrack","cleanupEffect","effect2","trackStack","pauseTracking","resetTracking","track","target","type","depsMap","trackEffects","debuggerEventExtraInfo","shouldTrack2","trigger","newValue","oldTarget","newLength","key2","triggerEffects","triggerEffect","getDepFromReactive","object","_a","isNonTrackableKeys","builtInSymbols","get$1","createGetter","shallowGet","readonlyGet","arrayInstrumentations","createArrayInstrumentations","instrumentations","args","toRaw","isReadonly2","shallow","receiver","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","targetIsArray","isRef","readonly","reactive","set$1","createSetter","shallowSet","isReadonly","isShallow","hadKey","result","deleteProperty","has$1","ownKeys","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","toShallow","getProto","v","get","rawTarget","rawKey","has2","wrap","toReadonly","toReactive","has","size","add","set","get2","deleteEntry","clear","hadItems","createForEach","callback","thisArg","observed","createIterableMethod","method","targetIsMap","isPair","isKeyOnly","innerIterator","done","createReadonlyMethod","createInstrumentations","mutableInstrumentations2","shallowInstrumentations2","readonlyInstrumentations2","shallowReadonlyInstrumentations2","mutableInstrumentations","readonlyInstrumentations","shallowInstrumentations","shallowReadonlyInstrumentations","createInstrumentationGetter","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","targetTypeMap","rawType","getTargetType","createReactiveObject","shallowReactive","baseHandlers","collectionHandlers","proxyMap","existingProxy","targetType","proxy","isReactive","isProxy","raw","markRaw","trackRefValue","ref2","triggerRefValue","newVal","r","ref","createRef","shallowRef","rawValue","RefImpl","__v_isShallow","useDirectValue","unref","shallowUnwrapHandlers","proxyRefs","objectWithRefs","CustomRefImpl","factory","customRef","toRefs","propertyToRef","ObjectRefImpl","_object","_defaultValue","GetterRefImpl","_getter","toRef","source","defaultValue","ComputedRefImpl","getter","_setter","isSSR","self","computed","getterOrOptions","debugOptions","setter","onlyGetter","callWithErrorHandling","instance","err","handleError","callWithAsyncErrorHandling","values","throwInDev","contextVNode","cur","exposedInstance","errorInfo","errorCapturedHooks","appErrorHandler","logError","isFlushing","isFlushPending","queue","flushIndex","pendingPostFlushCbs","activePostFlushCbs","postFlushIndex","resolvedPromise","currentFlushPromise","nextTick","p","findInsertionIndex","id","start","end","middle","getId","queueJob","job","queueFlush","flushJobs","invalidateJob","queuePostFlushCb","cb","flushPreFlushCbs","seen","flushPostFlushCbs","deduped","comparator","diff","check","emit","event","rawArgs","props","modelArg","modifiersKey","number","trim","handlerName","handler","onceHandler","normalizeEmitsOptions","comp","appContext","asMixin","cached","hasExtends","extendEmits","raw2","normalizedFromExtend","isEmitListener","options","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","prev","pushScopeId","popScopeId","withCtx","ctx","isNonScopedSlot","renderFnWithContext","setBlockTracking","prevInstance","renderComponentRoot","Component","vnode","withProxy","propsOptions","slots","attrs","render","renderCache","data","setupState","inheritAttrs","fallthroughAttrs","proxyToUse","normalizeVNode","render2","getFunctionalFallthrough","blockStack","createVNode","Comment","root","keys","shapeFlag","filterModelListeners","cloneVNode","shouldUpdateComponent","prevVNode","nextVNode","optimized","prevProps","prevChildren","component","nextProps","nextChildren","patchFlag","emits","hasPropsChanged","dynamicProps","emitsOptions","nextKeys","updateHOCHostEl","isSuspense","queueEffectWithSuspense","suspense","watchEffect","doWatch","INITIAL_WATCHER_VALUE","watch","immediate","deep","flush","onTrack","onTrigger","currentInstance","forceTrigger","isMultiSource","isShallow$1","s","traverse","cleanup","onCleanup","baseGetter","ssrCleanup","isInSSRComponentSetup","useSSRContext","queuePostRenderEffect","unwatch","instanceWatch","publicThis","createPathGetter","setCurrentInstance","unsetCurrentInstance","path","segments","withDirectives","directives","internalInstance","getExposeProxy","bindings","dir","modifiers","invokeDirectiveHook","oldBindings","binding","hook","useTransitionState","state","onMounted","onBeforeUnmount","TransitionHookValidator","BaseTransitionPropsValidators","BaseTransitionImpl","getCurrentInstance","prevTransitionKey","children","getTransitionRawChildren","child","rawProps","mode","emptyPlaceholder","innerChild","getKeepAliveChild","enterHooks","resolveTransitionHooks","setTransitionHooks","oldChild","oldInnerChild","transitionKeyChanged","getTransitionKey","isSameVNodeType","leavingHooks","earlyRemove","delayedLeave","leavingVNodesCache","getLeavingNodesForType","BaseTransition","leavingVNodes","appear","persisted","onBeforeEnter","onEnter","onAfterEnter","onEnterCancelled","onBeforeLeave","onLeave","onAfterLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAfterAppear","onAppearCancelled","callHook","callAsyncHook","hook2","hooks","leavingVNode","afterHook","cancelHook","called","cancelled","vnode2","isKeepAlive","keepComment","parentKey","keyedFragmentCount","Fragment","defineComponent","extraOptions","isAsyncWrapper","KeepAliveImpl","sharedContext","current","parentSuspense","patch","move","_unmount","createElement","storageContainer","container","anchor","isSVG","instance2","vnodeHook","invokeVNodeHook","unmount","resetShapeFlag","pruneCache","filter","getComponentName","pruneCacheEntry","include","exclude","matches","pendingCacheKey","cacheSubtree","getInnerChild","onUpdated","subTree","da","rawVNode","isVNode","max","cachedVNode","KeepAlive","pattern","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","prepend","createHook","lifecycle","onBeforeMount","onBeforeUpdate","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","COMPONENTS","resolveComponent","maybeSelfReference","resolveAsset","NULL_DYNAMIC_COMPONENT","resolveDynamicComponent","warnMissing","selfName","resolve","registry","renderList","renderItem","index","createSlots","dynamicSlots","slot","j","renderSlot","fallback","noSlotted","openBlock","validSlotContent","ensureValidVNode","rendered","createBlock","vnodes","getPublicInstance","isStatefulComponent","publicPropertiesMap","resolveMergedOptions","hasSetupBinding","PublicInstanceProxyHandlers","accessCache","normalizedProps","shouldCacheAccess","publicGetter","cssModule","globalProperties","descriptor","normalizePropsOrEmits","applyOptions","dataOptions","computedOptions","methods","watchOptions","provideOptions","injectOptions","created","beforeMount","mounted","beforeUpdate","updated","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","components","filters","resolveInjections","methodHandler","opt","createWatcher","provides","provide","registerLifecycleHook","register","_hook","exposed","checkDuplicateProperties","normalizeInject","inject","h","base","mixins","extendsOptions","globalMixins","optionMergeStrategies","resolved","m","mergeOptions","to","from","strats","strat","internalOptionMergeStrats","mergeDataFn","mergeEmitsOrPropsOptions","mergeObjectOptions","mergeAsArray","mergeWatchOptions","mergeInject","merged","createAppContext","uid$1","createAppAPI","hydrate","rootComponent","rootProps","context","installedPlugins","isMounted","app","version","plugin","mixin","directive","rootContainer","isHydrate","currentApp","parentProvides","treatDefaultAsFactory","initProps","isStateful","InternalObjectKey","setFullProps","updateProps","rawPrevProps","rawCurrentProps","hasAttrsChanged","propsToUpdate","camelizedKey","resolvePropValue","kebabKey","needCastKeys","rawCastValues","camelKey","castValues","isAbsent","hasDefault","propsDefaults","normalizePropsOptions","extendProps","normalizedKey","validatePropName","prop","booleanIndex","getTypeIndex","stringIndex","getType","ctor","match","isSameType","expectedTypes","t","isInternalKey","normalizeSlotValue","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","normalizeVNodeSlots","initSlots","updateSlots","needDeletionCheck","deletionComparisonTarget","setRef","rawRef","oldRawRef","isUnmount","refValue","owner","oldRef","refs","_isString","_isRef","doSet","existing","createRenderer","baseCreateRenderer","createHydrationFns","hostInsert","hostRemove","hostPatchProp","hostCreateElement","hostCreateText","hostCreateComment","hostSetText","hostSetElementText","hostParentNode","hostNextSibling","hostSetScopeId","hostInsertStaticContent","n1","n2","parentComponent","slotScopeIds","getNextHostNode","Text","processText","processCommentNode","Static","mountStaticNode","processFragment","processElement","processComponent","internals","moveStaticNode","nextSibling","next","removeStaticNode","mountElement","patchElement","transition","dirs","mountChildren","setScopeId","unmountChildren","needCallTransitionHooks","scopeId","parentVNode","cloneIfMounted","dynamicChildren","oldProps","newProps","toggleRecurse","areChildrenSVG","patchBlockChildren","patchChildren","patchProps","oldChildren","newChildren","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","fragmentSlotScopeIds","traverseStaticChildren","mountComponent","updateComponent","initialVNode","createComponentInstance","setupComponent","setupRenderEffect","placeholder","updateComponentPreRender","componentUpdateFn","bu","u","originNext","nextTree","prevTree","bm","isAsyncWrapperVNode","hydrateNode","hydrateSubTree","scopedInitialVNode","update","c1","prevShapeFlag","c2","patchKeyedChildren","patchUnkeyedChildren","oldLength","commonLength","nextChild","parentAnchor","l2","e1","e2","nextPos","s1","s2","keyToNewIndexMap","patched","toBePatched","moved","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","newIndex","increasingNewIndexSequence","getSequence","nextIndex","moveType","leave","delayLeave","afterLeave","remove2","performLeave","doRemove","shouldInvokeDirs","shouldInvokeVnodeHook","unmountComponent","removeFragment","performRemove","bum","um","allowed","ch1","ch2","len","arrI","isTeleport","isTeleportDisabled","isTargetSVG","resolveTarget","select","targetSelector","TeleportImpl","insert","querySelector","createText","createComment","disabled","mainAnchor","targetAnchor","mount","container2","anchor2","wasDisabled","currentContainer","currentAnchor","moveTeleport","nextTarget","updateCssVars","hydrateTeleport","isReorder","node","parentNode","hydrateChildren","targetNode","Teleport","currentBlock","disableTracking","closeBlock","isBlockTreeEnabled","setupBlock","createElementBlock","createBaseVNode","normalizeKey","normalizeRef","ref_key","ref_for","isBlockNode","needFullChildrenNormalization","normalizeChildren","_createVNode","cloned","isClassComponent","guardReactiveProps","klass","style","extraProps","mergeRef","mergedProps","mergeProps","createTextVNode","text","flag","createStaticVNode","content","numberOfNodes","createCommentVNode","asBlock","slotFlag","toMerge","incoming","emptyAppContext","uid","internalSetCurrentInstance","globalCurrentInstanceSetters","settersKey","setupResult","setupStatefulComponent","setup","setupContext","createSetupContext","resolvedResult","handleSetupResult","e","finishComponentSetup","compile","skipOptions","template","isCustomElement","compilerOptions","delimiters","componentCompilerOptions","finalCompilerOptions","getAttrsProxy","includeInferred","computed$1","propsOrChildren","ssrContextKey","svgNS","doc","templateContainer","nodeOps","tag","is","selector","before","wrapper","patchClass","transitionClasses","patchStyle","isCssString","setStyle","currentDisplay","importantRE","prefixed","autoPrefix","prefixes","prefixCache","rawName","xlinkNS","patchAttr","isBoolean","patchDOMProp","needRemove","addEventListener","removeEventListener","patchEvent","prevValue","nextValue","invokers","existingInvoker","parseName","invoker","createInvoker","optionsModifierRE","cachedNow","getNow","initialValue","patchStopImmediatePropagation","originalStop","nativeOnRE","patchProp","shouldSetAsProp","TRANSITION","ANIMATION","Transition","resolveTransitionProps","DOMTransitionPropsValidators","TransitionPropsValidators","h2","hasExplicitCallback","baseProps","duration","enterFromClass","enterActiveClass","enterToClass","appearFromClass","appearActiveClass","appearToClass","leaveFromClass","leaveActiveClass","leaveToClass","durations","normalizeDuration","enterDuration","leaveDuration","finishEnter","isAppear","removeTransitionClass","finishLeave","makeEnterHook","nextFrame","addTransitionClass","whenTransitionEnds","forceReflow","NumberOf","cls","_vtc","endId","expectedType","explicitTimeout","resolveIfNotStale","timeout","propCount","getTransitionInfo","endEvent","ended","onEnd","styles","getStyleProperties","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","d","toMs","positionMap","newPositionMap","TransitionGroupImpl","moveClass","hasCSSTransform","callPendingCbs","recordPosition","movedChildren","applyTranslation","cssTransitionProps","removeMode","TransitionGroup","oldPos","newPos","dx","dy","clone","getModelAssigner","onCompositionStart","onCompositionEnd","vModelText","lazy","castToNumber","domValue","vModelCheckbox","modelValue","elementValue","getValue","checked","assign","found","filtered","getCheckboxValue","setChecked","vModelSelect","isSetModel","selectedVal","o","setSelected","_binding","isMultiple","option","optionValue","systemModifiers","modifierGuards","withModifiers","guard","vShow","setDisplay","rendererOptions","renderer","ensureRenderer","createApp","containerOrSelector","normalizeContainer","inBrowser","hasSymbol","makeSymbol","generateFormatCacheKey","locale","friendlyJSONstringify","json","isNumber","isEmptyObject","warn","msg","escapeHtml","rawText","CompileErrorCodes","createCompileError","code","loc","domain","messages","error","pathStateMachine","literalValueRE","isLiteral","exp","stripQuotes","getPathCharType","ch","formatSubPath","trimmed","parse","subPathDepth","newChar","action","typeMap","actions","maybeUnescapeQuote","nextChar","resolveWithKeyValue","resolveValue","hit","DEFAULT_MODIFIER","DEFAULT_MESSAGE","DEFAULT_MESSAGE_DATA_TYPE","DEFAULT_NORMALIZE","DEFAULT_INTERPOLATE","pluralDefault","choice","choicesLength","getPluralIndex","normalizeNamed","pluralIndex","createMessageContext","pluralRule","orgPluralRule","plural","_list","_named","named","message","_modifier","normalize","interpolate","arg1","arg2","modifier","fallbackWithSimple","fallbackWithLocaleChain","startLocale","DEFAULT_LOCALE","chain","block","appendBlockToChain","defaults","blocks","follow","appendLocaleToChain","tokens","appendItemToChain","VERSION","NOT_REOSLVED","MISSING_RESOLVE_VALUE","getDefaultLinkedModifiers","_compiler","_resolver","registerMessageResolver","resolver","_fallbacker","registerLocaleFallbacker","fallbacker","_cid","createCoreContext","fallbackLocale","datetimeFormats","numberFormats","pluralRules","missing","missingWarn","fallbackWarn","fallbackFormat","unresolving","postTranslation","processor","warnHtmlMessage","escapeParameter","messageCompiler","messageResolver","localeFallbacker","fallbackContext","onWarn","internalOptions","__datetimeFormatters","__numberFormatters","__meta","handleMissing","updateFallbackLocale","inc","CoreErrorCodes","createCoreError","NOOP_MESSAGE_FUNCTION","isMessageFunction","translate","parseTranslateArgs","resolvedMessage","defaultMsgOrKey","enableDefaultMsg","escapeParams","formatScope","targetLocale","resolveMessageFormat","format","cacheBaseKey","occurred","errorDetector","compileMessageFormat","ctxOptions","getMessageContextOptions","msgContext","messaged","evaluateMessage","locales","missingRet","getCompileOptions","msgCtx","arg3","datetime","overrides","parseDateTimeArgs","part","datetimeFormat","formatter","DATETIME_FORMAT_OPTIONS_KEYS","arg4","dateTime","clearDateTimeFormat","parseNumberArgs","numberFormat","NUMBER_FORMAT_OPTIONS_KEYS","clearNumberFormat","I18nErrorCodes","createI18nError","TransrateVNodeSymbol","DatetimePartsSymbol","NumberPartsSymbol","SetPluralRulesSymbol","InejctWithOption","handleFlatJson","subKeys","lastIndex","currentObj","getLocaleMessages","__i18n","flatJson","custom","resource","deepCopy","isNotObjectOrIsArray","src","des","getComponentOptions","adjustI18nResources","global","componentOptions","createTextNode","composerID","defineCoreMissingHandler","createComposer","VueI18nLegacy","__root","_isGlobal","_inheritLocale","_locale","_fallbackLocale","_messages","_datetimeFormats","_numberFormats","_missingWarn","_fallbackWarn","_fallbackRoot","_fallbackFormat","_missing","_runtimeMissing","_postTranslation","_warnHtmlMessage","_escapeParameter","_modifiers","_pluralRules","_context","trackReactivityValues","getPostTranslationHandler","setPostTranslationHandler","getMissingHandler","setMissingHandler","wrapWithDeps","argumentParser","warnType","fallbackSuccess","fallbackFail","successCondition","rt","transrateVNode","numberParts","datetimeParts","setPluralRules","rules","te","getLocaleMessage","resolveMessages","targetLocaleMessages","messageValue","tm","setLocaleMessage","mergeLocaleMessage","getDateTimeFormat","setDateTimeFormat","mergeDateTimeFormat","getNumberFormat","setNumberFormat","mergeNumberFormat","composer","baseFormatProps","getInterpolateArg","getFragmentableTag","Translation","i18n","useI18n","assignedAttrs","renderFormatter","slotKeys","partFormatter","parts","NumberFormat","DatetimeFormat","getComposer$2","i18nInternal","vueI18n","vTDirective","_process","parsedValue","parseValue","makeParams","textContent","apply","pluginOptions","useI18nComponentName","I18nInjectionKey","createI18n","__globalInjection","__allowComposition","__instances","globalScope","__global","createGlobal","symbol","__getInstance","__setInstance","__deleteInstance","injectGlobalFields","unmountApp","getI18nInstance","getGlobalComposer","getScope","getComposer","composerOptions","setupLifeCycle","legacyMode","useComponent","globalExportProps","globalExportMethods","desc","definition","module","this","noop","undefinedType","isIE","logMethods","bindMethod","methodName","traceForIE","realMethod","replaceLoggingMethods","level","loggerName","enableLoggingWhenConsoleArrives","defaultMethodFactory","Logger","defaultLevel","currentLevel","storageKey","persistLevelIfPossible","levelNum","levelName","getPersistedLevel","storedLevel","cookie","location","clearPersistedLevel","persist","initialLevel","defaultLogger","_loggersByName","logger","_log","t$2","__publicField","f","g","y","M","T","D","E","P","L","S","k","F","B","C","O","I","A","W","q","x","N","R","U","V","$","H","z","isVue2","activePinia","setActivePinia","pinia","piniaSymbol","MutationType","createPinia","_p","toBeInstalled","addSubscription","subscriptions","removeSubscription","idx","triggerSubscriptions","mergeReactiveObjects","patchToApply","subPatch","targetValue","skipHydrateSymbol","shouldHydrate","isComputed","createOptionsStore","hot","getters","initialState","store","localState","computedGetters","createSetupStore","$id","isOptionsStore","optionsForPlugin","$subscribeOptions","isListening","isSyncListening","actionSubscriptions","debuggerEvents","activeListener","$patch","partialStateOrMutator","subscriptionMutation","myListenerId","$reset","newState","$state","$dispose","wrapAction","afterCallbackList","onErrorCallbackList","after","onError","partialStore","stopWatcher","setupStore","actionValue","extender","defineStore","idOrOptions","setupOptions","isSetupStore","useStore","storeToRefs","normalizeOptions","factoryOptions","pick","baseState","paths","substate","pathArray","hydrateStore","storage","serializer","debug","fromStorage","persistState","toStore","createPersistedState","auto","persistences","beforeRestore","afterRestore","persistence","runHooks","_mutation","src_default","Alben","Shows","1 Track","Alle Tracks spielen","Konto Einstellungen","Admin","Gutschein Codes","Radio","Erkunden","Favoriten","Programm","Empfang","Shop","FAQ","Über uns","Kontakt","Spenden","Entwickler*innen","Impressum","Datenschutzerklärung","Nutzungsbedingungen","Anmelden","Abmelden","Suche","Sorry! Keine Einträge gefunden.","Durchsuche das open broadcast Archiv.","Du kannst nach Tracks, Releases oder Namen von Künstler*innen suchen.","Delorean error.","Back to ","!","now","Dauer","Airtime","heute","Als nächstes spielen","Ans Ende der Warteschlange","Zu meinen Favoriten","Aus Favoriten entfernen","Mag ich nicht","Mag ich doch","Teilen","Feedback","Wir feilen ständig am Programm – und deine Rückmeldung macht unser Radio noch besser.\n Was können wir noch feiner abstimmen?","Dieser Titel gefällt mir einfach nicht","Diese Musikrichtung ist nicht mein Geschmack","Diese Sendung spricht mich nicht an","Die Musikrichtung oder Sendung passt nicht zur Tageszeit","Ich habe diesen Titel schon zu oft gehört","Magst du uns noch etwas dazu sagen?","Vielen Dank für dein feedback!","Pull down to refresh","Release to refresh","Refreshing","Keine Resultate.","Please refine or ","Du hast noch keine Favoriten.","Go ahead and ","discover","Speichern","Senden","Konto","Konto erstellen","Passwort","Code senden","Mit einem bestehenden Konto","Mit deiner E-Mail Adresse","Passwort vergessen?","Login mit E-Mail-Bestätigung","Konto bereits vorhanden. Klicke auf \"Code senden\"","Login-Code","Eine E-Mail mit einem Login-Code wurde an ","Falls du keine Nachricht erhalten hast, prüfe deinen Spam-Ordner.","E-Mail erneut senden","0","Mobile Login","Scanne den QR-Code mit deinem Mobiltelefon","Get eclectic!","Streaming in bester Qualität","Immer informiert","Höre unseren ganzen Katalog – wann und wo","Guthaben für kostenpflichtige Inhalte","Streaming Qualität / Umweltbelastung","Per \"default\" liefern wir dir unseren Content in der bestmöglichen Qualität.\n Die Übertragungsrate wird laufend an die Qualität deiner Internetverbindung angepasst.","Zur Minimierung deines Datenvolumens / der Umweltbelastung kannst du eine maximale Übertragungsrate festlegen:","E-Mail","E-Mail Adresse","Neues Passwort","Passwort bestătigen","Adresse","Zusatz","PLZ","Ort","Land","Persönliche Angaben","Name","Nachname","Jahrgang","Lieblingsclub","Pronomen","sie/ihr","er/sein","they/their","Newsletter","Verbundene Konten","Verbundene Logins","verbinden","trennen","Login-Konten","Streaming-Konten","Verbinde deine streaming-Konten:\n Deine Library wird automatisch synchronisiert und deine Likes werden als Playliste \"open broadcast\" gespeichert.","Montaliche Spenden helfen uns, den Betrieb von open broadcast zu finanzieren.","Guthaben","Kein Guthaben","Aus rechtlichen Gründen ist im Moment kein Kauf von Guthaben möglich.\n Du kannst jedoch einen Gratis-Code einlösen, um Guthaben zu erhalten.","Guthaben abgelaufen","1 Tag","eingelöst: ","Gratis-Code","Gratis-Code Einlösen","Ungültiger Gutschein-Code","Jetzt Einlösen","Anmelden und einlösen","Keine Abos - dafür Prepaid-Guthaben!\n Die von uns gespielten Inhalte jederzeit hören für ","Hast du einen ","Guthaben kaufen.","Momentan kannst du dich nicht für unseren On-Demand-Service anmelden.\nWir warten auf rechtliche Klärungen damit wir vollen Zugang anbieten können.\n","Total inkl. aller Steuern und Gebühren","Jetzt Bezahlen","Derzeit können wir unseren On-Demand-Dienst nur für Personen mit Wohnsitz in der Schweiz anbieten.","Mehr dazu im unter ",".","Es scheint, dass dein Browser (",") nicht offiziell unterstützt wird.","Seite nicht gefunden","Spende noch heute","Deine Unterstützung zählt!","Jetzt nicht","Unterstütze unsere Arbeit","Deine Beiträge helfen uns, das Projekt am Leben zu erhalten!","Einmalig","Monatlich","Vielen Dank!","Deine Spende hilft uns, ein unabhängiges und vielfältiges Radioprogramm am Leben zu erhalten.","❤️❤️❤️❤️❤️❤️","Mit deinem Beitrag ermöglichst du die fortlaufende, sorgfältige Musikkuration jenseits des Mainstreams – handverlesen, überraschend und frei von kommerziellen Interessen.","Du hast bereits eine wiederkehrende Spende eingerichtet.","Wenn du deine regelmäßige Spende ändern oder kündigen möchtest, findest du alles Nötige in deinem Konto.","Weiter","Zurück","Individueller Betrag","Möchtest du monatlich spenden?","Bitte melde dich zuerst an oder erstelle ein Konto — das hilft dir, falls du deine Spende später einmal kündigen möchtest. 😉","Albums","Play all tracks"," tracks","Account Settings","Coupon Codes","Discover","Favourites","Programme","Reception","About","Contact","Donate","Developers","Imprint","Privacy Policy","Terms & Conditions","Sign in","Sign out","Search","Sorry! No entries found.","Search the open broadcast archive.","You can search by track, release or artist name.","Duration","Today","Play next","At the end of the queue","To my favourites","Remove from favorites","I do not like it","I like it","Share","What bothers you?","In order to constantly improve the radio programme, we need your feedback!","I don't like this title","I don't like this kind of music","I don't like this show","The track or show does not match the time of day","I've heard this track too many times","Thank you for your feedback!","refreshing","No results.","You don't have any favorites yet.","Save","Send","Account","Create account","Password","Send code","With an existing account","With your email address","Forgot Password?","Login with email confirmation","Account already exists. Click on \"Send code\"","Login code","An email with a login code was sent to ","If you haven't received a message, check your spam folder.","Resend email","Terms of Service","Mobile login","Scan the QR code with your mobile phone","High-Quality Streaming","Always up to date","Listen to the whole catalog when & where","Credit for Paid Content","Streaming quality / environmental impact","By \"default\" we deliver our content in the best possible quality.\n The transfer rate is continuously adjusted to the quality of your internet connection.","To minimize your data volume / environmental impact, you can set a maximum transfer rate:","E-mail","E-mail address","New Password","Confirm Password","address","additive","Postcode","country","Personal Information","Surname","Year of birth","Favorite club or venue","Pronoun","she/her","he/his","they/them","Connected accounts","Connected login accounts","Connect","Disconnect","Login accounts","Streaming accounts","Connect your streaming accounts","Donations","Credits","No Credits","For legal reasons it is currently not possible to buy credits.","Credit expired","1 day","redeemed: ","Voucher code","Redeem Voucher","Invalid Coupon Code","Redeem now","Sign up and redeem","No subscriptions - but prepaid credit!\n Listen to the content we play anytime for ","Do you have a ","Buy credits.","We're sorry to say that you can't subscribe to our on-demand service at the moment.\nWe're waiting for some legal clarification before we can offer full access.\n","Total including all taxes and fees","Pay now","Redeem Now","Currently we can only provide access to our on-demand service for people living in Switzerland.","More about in the ","It looks like your browser (","Read more in our ","Page not found","Donate today","Your support matters!","Not now","Support our work","Your contributions help us keep the project alive!","One-time","Monthly","Thank you!","Your donation helps us keep an independent and diverse radio program alive.","With your contribution you make ongoing, carefully curated music possible — beyond the mainstream, handpicked, surprising, and free from commercial interests.","You’ve already set up a recurring donation.","If you’d like to change or cancel your regular donation, you’ll find everything you need in your account.","Continue","Back","Custom amount","Would you like to donate monthly?","Please log in or create an account first — this helps if you ever want to cancel your donation later. 😉","tryOnScopeDispose","toValue","isClient","notNullish","isIOS","getIsIOS","createFilterWrapper","reject","bypassFilter","invoke","debounceFilter","ms","timer","maxTimer","lastRejector","_clearTimeout","timer2","maxDuration","throttleFilter","trailing","leading","rejectOnCancel","lastExec","isLeading","lastValue","_invoke","elapsed","pausableFilter","extendFilter","isActive","pause","resume","eventFilter","promiseTimeout","throwOnTimeout","reason","toRef$1","refAutoReset","afterMs","resetAfter","useDebounceFn","useThrottleFn","tryOnMounted","sync","createUntil","isNot","toMatch","condition","stop","promises","toBe","v1","v2","toBeTruthy","toBeNull","toBeUndefined","toBeNaN","toContains","array","changed","changedTimes","count","until","useIntervalFn","interval","immediateCallback","clean","intervalValue","stopWatch","useTimeoutFn","isPending","useToggle","truthyValue","falsyValue","valueIsRef","_value","toggle","truthy","__getOwnPropSymbols$8","__hasOwnProp$8","__propIsEnum$8","__objRest$5","watchWithFilter","__defProp$6","__defProps$6","__getOwnPropDescs$6","__getOwnPropSymbols$6","__hasOwnProp$6","__propIsEnum$6","__defNormalProp$6","__spreadValues$6","__spreadProps$6","__objRest$3","watchDebounced","debounce","maxWait","__defProp$2","__defProps$2","__getOwnPropDescs$2","__getOwnPropSymbols$2","__hasOwnProp$2","__propIsEnum$2","__defNormalProp$2","__spreadValues$2","__spreadProps$2","__objRest$1","watchPausable","whenever","ov","onInvalidate","unrefElement","elRef","plain","defaultWindow","defaultDocument","defaultNavigator","useEventListener","events","listeners","cleanups","listener","options2","_iOSWorkaround","onClickOutside","window","ignore","capture","detectIframe","shouldListen","shouldIgnore","target2","useMounted","useSupported","useMediaQuery","query","isSupported","mediaQuery","useClipboard","navigator","read","copiedDuring","legacy","isClipboardApiSupported","copied","updateText","legacyRead","copy","legacyCopy","ta","_b","_c","_global","globalKey","handlers","getHandlers","getSSRHandler","guessSerializerType","rawInit","__defProp$k","__getOwnPropSymbols$n","__hasOwnProp$n","__propIsEnum$n","__defNormalProp$k","__spreadValues$k","StorageSerializers","customStorageEventName","useStorage","listenToStorageChanges","writeDefaults","mergeDefaults","_a2","pauseWatch","resumeWatch","pausableWatch","write","updateFromCustomEvent","serialized","__getOwnPropSymbols$l","__hasOwnProp$l","__propIsEnum$l","useMutationObserver","mutationOptions","observer","useDocumentVisibility","document","visibility","__getOwnPropSymbols$g","__hasOwnProp$g","__propIsEnum$g","__objRest$2","useResizeObserver","observerOptions","targets","els","_el","useElementBounding","reset","windowResize","windowScroll","height","bottom","left","right","top","width","rect","ele","useElementHover","delayEnter","isHovered","entering","delay","useElementSize","initialSize","box","entry","boxSize","$elem","formatBoxSize","acc","inlineSize","blockSize","useIntersectionObserver","rootMargin","threshold","_target","targets2","root2","useElementVisibility","element","scrollTarget","elementIsVisible","isIntersecting","ARRIVED_STATE_THRESHOLD_PIXELS","useScroll","throttle","idle","onStop","onScroll","offset","eventListenerOptions","behavior","internalX","internalY","x2","scrollTo","y2","_x","_y","_element","isScrolling","arrivedState","directions","onScrollEnd","onScrollEndDebounced","setArrivedState","display","flexDirection","scrollLeft","scrollTop","onScrollHandler","eventTarget","DefaultMagicKeysAliasMap","useMagicKeys","useReactive","aliasMap","passive","onEventFired","metaDeps","usedKeys","setRefs","updateRefs","rec","BuiltinExtractors","useMouse","touch","resetOnTouchEnds","sourceType","extractor","mouseHandler","touchHandler","mouseHandlerWrapper","touchHandlerWrapper","useMouseInElement","handleOutside","targetRef","elementX","elementY","elementPositionX","elementPositionY","elementHeight","elementWidth","isOutside","elX","elY","useNavigatorLanguage","language","__defProp$5","__getOwnPropSymbols$5","__hasOwnProp$5","__propIsEnum$5","__defNormalProp$5","__spreadValues$5","useShare","shareOptions","_navigator","overrideOptions","granted","useSwipe","onSwipe","onSwipeEnd","onSwipeStart","coordsStart","coordsEnd","diffX","diffY","abs","isThresholdExceeded","isSwiping","direction","getTouchEventCoords","updateCoordsStart","updateCoordsEnd","listenerOptions","isPassiveEventSupported","checkPassiveEventSupport","onTouchEnd","stops","supportsPassive","optionsBlock","useTitle","newTitle","title","useVibrate","patternRef","intervalControls","vibrate","pattern2","useWakeLock","wakeLock","onVisibilityChange","request","release","useWindowSize","initialWidth","initialHeight","listenOrientation","includeScrollbar","BROWSER_ALIASES_MAP","BROWSER_MAP","PLATFORMS_MAP","OS_MAP","ENGINE_MAP","Utils","regexp","ua","_const","versionA","versionB","isLoose","versionAPrecision","versionBPrecision","precision","lastPrecision","chunks","delta","_version","chunk","iterator","predicate","assigners","assigner","browserName","browserAlias","commonVersionIdentifier","browsersList","browser","parser","notLikeAndroid","butAndroid","regexpWithoutDeviceSpec","regexpWithDeviceSpec","osParsersList","versionName","os","platformParsersList","model","platform","iDevice","likeIDevice","osMajorVersion","enginesParsersList","engine","isGecko","likeGecko","Parser","UA","skipParsing","regex","browserDescriptor","browserParsersList","_browser","toLowerCase","_os","_platform","_engine","checkTree","platformsAndOSes","platformsAndOSCounter","browsers","browsersCounter","currentDefinition","platformsAndOSNames","OSMatchingDefinition","osResult","platformMatchingDefinition","platformResult","browserNames","matchingDefinition","includingAlias","defaultBrowserName","browserNameLower","alias","expectedResults","comparableVersion","currentBrowserVersion","osName","platformType","engineName","anything","anythings","Bowser","SEMVER_SPEC_VERSION","MAX_LENGTH","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","RELEASE_TYPES","constants","debug_1","require$$0","require$$1","exports","re","safeRe","createToken","isGlobal","safe","looseOption","emptyOpts","parseOptions","parseOptions_1","numeric","compareIdentifiers","anum","bnum","rcompareIdentifiers","identifiers","require$$2","require$$3","require$$4","SemVer$d","SemVer","num","other","identifier","identifierBase","prerelease","semver","throwErrors","er","parse_1","valid","valid_1","clean_1","inc_1","version1","version2","comparison","v1Higher","highVersion","lowVersion","highHasPre","prefix","diff_1","major","loose","major_1","minor","minor_1","patch_1","parsed","prerelease_1","compare","compare_1","rcompare","rcompare_1","compareLoose","compareLoose_1","compareBuild","compareBuild_1","sort","sort_1","rsort","rsort_1","gt","gt_1","lt","lt_1","eq","eq_1","neq","neq_1","gte","gte_1","lte","lte_1","require$$5","cmp","op","cmp_1","coerce","coerce_1","Yallist","walker","yallist","Node","head","tail","push","unshift","thisp","initial","deleteCount","nodes","inserted","MAX","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","LRUCache","lc","mL","allowStale","mA","lC","forEachStep","isStale","maxAge","del","Entry","expiresAt","doUse","length","lruCache","Range","range","Comparator","first","isNullSet","isAny","comps","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","hr","hyphenReplace","comparatorTrimReplace","tildeTrimReplace","caretTrimReplace","rangeList","parseComparator","replaceGTE0","rangeMap","comparators","thisComparators","isSatisfiable","rangeComparators","thisComparator","rangeComparator","testSet","LRU","require$$6","remainingComparators","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","pr","replaceCaret","replaceXRange","gtlt","xM","xm","xp","anyX","incPr","$0","fM","fm","fp","fpr","fb","tM","tp","tpr","tb","ANY","satisfies","satisfies_1","toComparators","toComparators_1","maxSatisfying","versions","maxSV","rangeObj","maxSatisfying_1","minSatisfying","min","minSV","minSatisfying_1","minVersion","minver","setMin","compver","minVersion_1","validRange","require$$7","outside","hilo","gtfn","ltefn","ltfn","ecomp","high","low","outside_1","gtr","gtr_1","ltr","ltr_1","intersects","r1","r2","intersects_1","simplify","ranges","simplified","original","subset","sub","dom","sawNonNull","OUTER","simpleSub","simpleDom","isSub","simpleSubset","minimumVersionWithPreRelease","minimumVersion","eqSet","higherGT","lowerLT","gtltComp","higher","lower","hasDomLT","hasDomGT","needDomLTPre","needDomGTPre","subset_1","internalRe","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","simplifyRange","require$$39","require$$40","settings","userSettings","useUiStore","parseAppUA","semVer","semverCoerce","browserPlatform","log","useDevice","isMobile","isDesktop","isIos","isAndroid","isSafari","isApp","appVersion","isWeb","vpWidth","vpHeight","isSmallScreen","getDefaultLanguage","getDefaultDarkMode","useSettingsStore","shams","sym","symObj","symVal","syms","origSymbol","hasSymbolSham","hasSymbols","ERROR_MESSAGE","slice","toStr","funcType","implementation","that","bound","binder","boundLength","boundArgs","Empty","functionBind","bind","undefined","$SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","$gOPD","throwTypeError","ThrowTypeError","needsEval","TypedArray","INTRINSICS","errorProto","doEval","gen","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","$exec","rePropName","reEscapeChar","stringToPath","string","quote","subString","getBaseIntrinsic","allowMissing","intrinsicName","getIntrinsic","intrinsicBaseName","intrinsic","intrinsicRealName","skipFurtherCaching","isOwn","GetIntrinsic","$apply","$call","$reflectApply","$defineProperty","$max","originalFunction","func","applyBind","callBind","$indexOf","callBound","replace","percentTwenties","Format","formats","hexTable","compactQueue","compacted","arrayToObject","merge","mergeTarget","targetItem","decode","decoder","charset","strWithoutPlus","encode","defaultEncoder","kind","out","compact","isBuffer","combine","maybeMap","mapped","utils","toISO","defaultFormat","toString","isUndefined","isArrayBuffer","isFormData","isArrayBufferView","prototype","isFile","isBlob","isStream","isURLSearchParams","isStandardBrowserEnv","forEach","assignValue","stripBOM","buildURL","url","params","paramsSerializer","serializedParams","hashmarkIndex","InterceptorManager","fulfilled","rejected","InterceptorManager_1","normalizeHeaderName","headers","normalizedName","enhanceError","config","response","transitional","createError","settle","validateStatus","cookies","expires","secure","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","ignoreDuplicateOf","parseHeaders","line","isURLSameOrigin","msie","urlParsingNode","originURL","resolveURL","href","requestURL","Cancel","Cancel_1","transitionalDefaults","xhr","requestData","requestHeaders","responseType","onCanceled","username","password","fullPath","onloadend","responseHeaders","responseData","timeoutErrorMessage","xsrfValue","cancel","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","getDefaultAdapter","adapter","stringifySafely","encoder","silentJSONParsing","forcedJSONParsing","strictJSONParsing","status","defaults_1","transformData","isCancel","throwIfCancellationRequested","dispatchRequest","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","validators","thing","deprecatedWarnings","validator","formatMessage","opts","assertOptions","schema","allowUnknown","Axios","instanceConfig","configOrUrl","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","newConfig","onFulfilled","onRejected","Axios_1","CancelToken","executor","resolvePromise","token","onfulfilled","_resolve","CancelToken_1","spread","isAxiosError","payload","createInstance","defaultConfig","axios","axiosModule","denyList","isRetryAllowed","asyncGeneratorStep","_next","_throw","info","_asyncToGenerator","enumerableOnly","symbols","_objectSpread","_defineProperty","namespace","isNetworkError","SAFE_HTTP_METHODS","IDEMPOTENT_HTTP_METHODS","isRetryableError","isSafeRequestError","isIdempotentRequestError","isNetworkOrIdempotentRequestError","noDelay","exponentialDelay","retryNumber","randomSum","getCurrentState","currentState","getRequestOptions","defaultOptions","fixConfig","shouldRetry","_x2","_x3","_x4","_shouldRetry","retries","retryCondition","shouldRetryOrPromise","shouldRetryPromiseResult","axiosRetry","_ref","retryDelay","shouldResetTimeout","onRetry","lastRequestDuration","_x5","APIClient","retryAfter","useAPIBaseUrl","APIBaseUrl","ACCOUNT_ENDPOINT","login","email","logout","checkLoginEmail","sendLoginEmail","loginByToken","getSignedLoginCredentials","loginBySignedEmail","signedEmail","loginByAppleId","idToken","authorizationCode","profile","loginByGoogleIdToken","loginByGoogleOneTap","credential","getUser","updateUser","updateEmail","updatePassword","updateAddress","updateSettings","getSocialBackends","disconnectSocialBackend","provider","getAddressCountries","useAccount","user","isNew","subscription","useAccountStore","isStaff","isAdmin","loginUser","logoutUser","loadUser","loginUserBySignedEmail","loginUserByAppleId","loginUserByGoogleIdToken","loginUserByToken","sendGA4Event","GA4Event","sendEvent","rest","sendPlayerEvent","sendRawEvent","useAnalytics","logEvent","credentials","useSettings","appBridge","darkMode","maxBandwidth","shuffleMode","baseVolume","setMaxBandwidthWeb","setDarkMode","toggleShuffleMode","bandwidth","channel","DATA_ATTRIBUTE","setDocumentTheme","theme","freeGlobal","freeGlobal$1","freeSelf","root$1","Symbol","Symbol$2","objectProto","nativeObjectToString","symToStringTag","getRawTag","unmasked","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","arrayMap","iteratee","isArray$2","INFINITY","symbolProto","symbolToString","baseToString","reWhitespace","trimmedEndIndex","reTrimStart","baseTrim","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","isBinary","MAX_INTEGER","toFinite","sign","toInteger","remainder","identity","asyncTag","funcTag","genTag","proxyTag","coreJsData","coreJsData$1","maskSrcKey","isMasked","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","getNative","WeakMap","WeakMap$2","copyArray","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","lastCalled","stamp","remaining","constant","defineProperty","defineProperty$1","baseSetToString","baseSetToString$1","setToString","setToString$1","baseFindIndex","fromIndex","fromRight","baseIsNaN","strictIndexOf","baseIndexOf","arrayIncludes","reIsUint","isIndex","nativeMax","overRest","transform","otherArgs","baseRest","isLength","isArrayLike","isPrototype","Ctor","proto","baseTimes","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","isArguments$1","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer$1","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","types","nodeUtil$1","nodeIsTypedArray","isTypedArray","isTypedArray$1","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","overArg","nativeKeys","nativeKeys$1","baseKeys","nativeCreate","nativeCreate$1","hashClear","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","listCacheClear","assocIndexOf","arrayProto","splice","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","Map$2","mapCacheClear","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","arrayPush","nativeIsFinite","nativeMin","createRound","pair","stackClear","stackDelete","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","arrayFilter","resIndex","stubArray","nativeGetSymbols","getSymbols","getSymbols$1","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","DataView","DataView$2","Promise","Promise$2","Set","Set$2","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","getTag$1","Uint8Array","Uint8Array$2","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","arrStacked","othStacked","arrValue","othValue","compared","othIndex","mapToArray","setToArray","symbolValueOf","equalByTag","convert","stacked","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objValue","objCtor","othCtor","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","now$2","FUNC_ERROR_TEXT","wait","lastArgs","lastThis","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","time","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","debounced","isInvoking","isArrayLikeObject","arrayIncludesWith","baseDifference","includes","isCommon","valuesLength","outer","valuesIndex","baseValues","isEqual","nativeFloor","nativeRandom","baseRandom","upper","round","round$1","shuffleSelf","rand","arrayShuffle","baseShuffle","collection","shuffle","without","without$1","usePlayerStore","visible","useQueueStore","media","splitAt","force","currentIndex","LuxonError","InvalidDateTimeError","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","unit","InvalidArgumentError","ZoneIsAbstractError","DATE_SHORT","DATE_MED","DATE_MED_WITH_WEEKDAY","DATE_FULL","DATE_HUGE","TIME_SIMPLE","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","isInteger","hasRelative","maybeArray","bestBy","by","best","integerBetween","floorMod","padStart","input","isNeg","padded","parseInteger","parseFloating","parseMillis","fraction","roundTo","digits","towardZero","factor","isLeapYear","year","daysInYear","daysInMonth","month","modMonth","modYear","objToLocalTS","weeksInWeekYear","weekYear","p1","p2","untruncateYear","parseZoneInfo","ts","offsetFormat","timeZone","date","intlOpts","modified","signedOffset","offHourStr","offMinuteStr","offHour","offMin","offMinSigned","asNumber","numericValue","normalizeObject","normalizer","formatOffset","hours","minutes","timeObject","ianaRegex","monthsLong","monthsShort","monthsNarrow","months","weekdaysLong","weekdaysShort","weekdaysNarrow","weekdays","meridiems","erasLong","erasShort","erasNarrow","eras","meridiemForDateTime","dt","weekdayForDateTime","monthForDateTime","eraForDateTime","formatRelativeTime","narrow","units","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","stringifyTokens","splits","tokenToString","macroTokenToFormatOpts","Formats.DATE_SHORT","Formats.DATE_MED","Formats.DATE_FULL","Formats.DATE_HUGE","Formats.TIME_SIMPLE","Formats.TIME_WITH_SECONDS","Formats.TIME_WITH_SHORT_OFFSET","Formats.TIME_WITH_LONG_OFFSET","Formats.TIME_24_SIMPLE","Formats.TIME_24_WITH_SECONDS","Formats.TIME_24_WITH_SHORT_OFFSET","Formats.TIME_24_WITH_LONG_OFFSET","Formats.DATETIME_SHORT","Formats.DATETIME_MED","Formats.DATETIME_FULL","Formats.DATETIME_HUGE","Formats.DATETIME_SHORT_WITH_SECONDS","Formats.DATETIME_MED_WITH_SECONDS","Formats.DATETIME_FULL_WITH_SECONDS","Formats.DATETIME_HUGE_WITH_SECONDS","Formatter","fmt","currentFull","bracketed","formatOpts","knownEnglish","useDateTimeFormatter","extract","meridiem","English.meridiemForDateTime","standalone","English.monthForDateTime","weekday","English.weekdayForDateTime","maybeMacro","era","English.eraForDateTime","dur","tokenToField","lildur","realTokens","literal","collapsed","Invalid","explanation","Zone","otherZone","singleton","SystemZone","dtfCache","makeDTF","zone","typeToPos","hackyOffset","dtf","formatted","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","partsOffset","filled","pos","ianaZoneCache","IANAZone","day","adOrBc","hour","minute","second","asUTC","asTS","over","FixedOffsetZone","InvalidZone","zoneName","normalizeZone","defaultZone","lowered","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","throwOnInvalid","Settings","numberingSystem","outputCalendar","Locale","intlLFCache","getCachedLF","locString","intlDTCache","getCachedDTF","intlNumCache","getCachedINF","inf","intlRelCache","getCachedRTF","cacheKeyOpts","sysLocaleCache","systemLocale","parseLocaleString","localeStr","uIndex","smaller","calendar","intlConfigString","mapMonths","DateTime","mapWeekdays","listStuff","defaultOK","englishFn","intlFn","supportsFastNumbers","PolyNumberFormatter","intl","forceSimple","padTo","floor","otherOpts","fixed","PolyDateFormatter","gmtOffset","offsetZ","PolyRelFormatter","isEnglish","English.formatRelativeTime","defaultToEN","specifiedLocale","localeR","numberingSystemR","outputCalendarR","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","isActuallyEn","hasNoWeirdness","alts","English.months","formatStr","English.weekdays","English.meridiems","English.eras","field","df","results","matching","combineRegexes","regexes","full","combineExtractors","extractors","mergedVals","mergedZone","cursor","ex","patterns","simpleParse","offsetRegex","isoExtendedZone","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","isoYmdRegex","isoWeekRegex","isoOrdinalRegex","extractISOWeekData","extractISOOrdinalData","sqlYmdRegex","sqlTimeRegex","sqlTimeExtensionRegex","int","extractISOYmd","extractISOTime","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","obsOffsets","fromStrings","weekdayStr","English.monthsShort","English.weekdaysLong","English.weekdaysShort","rfc2822","extractRFC2822","obsOffset","milOffset","preprocessRFC2822","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","parseISODate","parseRFC2822Date","parseHTTPDate","parseISODuration","extractISOTimeOnly","parseISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","parseSQL","INVALID","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","conf","antiTrunc","matrix","fromMap","fromUnit","toMap","toUnit","conv","sameSign","added","normalizeValues","vals","previous","Duration$1","accurate","durationLike","invalid","fmtOpts","millis","mixed","conversionAccuracy","built","accumulated","lastUnit","own","ak","down","negated","validateStartEnd","Interval","builtStart","friendlyDateTime","builtEnd","validateError","startIsValid","endIsValid","dateTimes","sorted","numberOfParts","intervals","final","sofar","currentCount","ends","flattened","dateFormat","separator","mapFn","Info","locObj","dayDiff","earlier","later","utcDayStart","highOrderDiffs","differs","days","lowestOrder","highWater","differ","remainingMillis","lowerOrderUnits","numberingSystems","numberingSystemsUTF16","hanidecChars","parseDigits","digitRegex","append","MISSING_FTP","intUnit","post","NBSP","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","groups","simple","escapeToken","unitForToken","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","partTypeStyleToTokenVal","tokenForPart","buildRegex","all","matchIndex","dateTimeFromMatches","toField","specificOffset","dummyDateTimeCache","getDummyDateTime","maybeExpandMacroToken","expandMacroTokens","explainFromTokens","disqualifyingUnit","regexString","rawMatches","parseFromTokens","invalidReason","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","js","computeOrdinal","uncomputeOrdinal","ordinal","table","month0","gregorianToWeek","gregObj","weekNumber","weekToGregorian","weekData","weekdayOfJan4","yearInDays","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","hasInvalidWeekData","validYear","validWeek","validWeekday","hasInvalidOrdinalData","validOrdinal","hasInvalidGregorianData","validMonth","validDay","hasInvalidTimeData","millisecond","validHour","validMinute","validSecond","validMillisecond","MAX_DATE","unsupportedZone","possiblyCachedWeekData","inst","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","setZone","interpretationZone","toTechFormat","allowZ","toISODate","extended","longFormat","toISOTime","suppressSeconds","suppressMilliseconds","includeOffset","extendedZone","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","normalizeUnit","quickDT","tsNow","offsetProvis","diffRelative","lastOpts","argList","ot","zoneToUse","milliseconds","seconds","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","higherOrderInvalid","gregorian","tsFinal","offsetFinal","localeToUse","keepLocalTime","keepCalendarTime","newTS","offsetGuess","asObj","settingWeekStuff","normalizedUnit","ext","includePrefix","includeZone","includeOffsetSpace","otherDateTime","durOpts","otherIsLater","diffed","inputMs","adjustedToZone","padding","Formats.DATE_MED_WITH_WEEKDAY","Formats.DATETIME_MED_WITH_WEEKDAY","dateTimeish","SCHEDULE_ENDPOINT","PROGRAM_ENDPOINT","EMISSION_ENDPOINT","EDITOR_ENDPOINT","getSchedule","getProgram","getEditors","limit","getEditor","getEmission","INTERVAL","FIXED_LATENCY","useTimeStore","streamLatency","latency","useScheduleStore","dtStart","isBrowser","isESModule","applyToParams","newParams","TRAILING_SLASH_RE","removeTrailingSlash","parseURL","parseQuery","currentLocation","searchString","hash","hashPos","searchPos","resolveRelativePath","stringifyURL","stringifyQuery","stripBase","pathname","isSameRouteLocation","aLastIndex","bLastIndex","isSameRouteRecord","isSameRouteLocationParams","isSameRouteLocationParamsValue","isEquivalentArray","fromSegments","toSegments","lastToSegment","position","toPosition","segment","NavigationType","NavigationDirection","normalizeBase","baseEl","BEFORE_HASH_RE","createHref","getElementPosition","docRect","elRect","computeScrollPosition","scrollToPosition","scrollToOptions","positionEl","isIdSelector","getScrollKey","scrollPositions","saveScrollPosition","scrollPosition","getSavedScrollPosition","scroll","createBaseLocation","createCurrentLocation","search","slicePos","pathFromHash","useHistoryListeners","historyState","teardowns","pauseState","popStateHandler","fromState","pauseListeners","listen","teardown","beforeUnloadListener","history","destroy","buildState","back","forward","replaced","computeScroll","useHistoryStateNavigation","changeLocation","hashIndex","createWebHistory","historyNavigation","historyListeners","go","triggerListeners","routerHistory","isRouteLocation","route","isRouteName","START_LOCATION_NORMALIZED","NavigationFailureSymbol","NavigationFailureType","createRouterError","isNavigationFailure","BASE_PARAM_PATTERN","BASE_PATH_PARSER_OPTIONS","REGEX_CHARS_RE","tokensToParser","score","segmentScores","tokenIndex","subSegmentScore","repeatable","optional","subPattern","stringify","avoidDuplicatedSlash","param","compareScoreArray","comparePathParserScore","aScore","bScore","isLastScoreNegative","ROOT_TOKEN","VALID_PARAM_RE","tokenizePath","crash","buffer","previousState","finalizeSegment","char","customRe","consumeBuffer","addCharToBuffer","createRouteRecordMatcher","record","matcher","createRouterMatcher","routes","globalOptions","matchers","matcherMap","getRecordMatcher","addRoute","originalRecord","isRootAdd","mainNormalizedRecord","normalizeRouteRecord","normalizedRecords","aliases","originalMatcher","normalizedRecord","parentPath","connectingSlash","isAliasRecord","removeRoute","insertMatcher","matcherRef","getRoutes","isRecordChildOf","paramsFromLocation","matched","parentMatcher","mergeMetaFields","normalizeRecordProps","propsObject","meta","partialOptions","HASH_RE","AMPERSAND_RE","SLASH_RE","EQUAL_RE","IM_RE","PLUS_RE","ENC_BRACKET_OPEN_RE","ENC_BRACKET_CLOSE_RE","ENC_CARET_RE","ENC_BACKTICK_RE","ENC_CURLY_OPEN_RE","ENC_PIPE_RE","ENC_CURLY_CLOSE_RE","ENC_SPACE_RE","commonEncode","encodeHash","encodeQueryValue","encodeQueryKey","encodePath","encodeParam","searchParams","searchParam","eqPos","currentValue","normalizeQuery","normalizedQuery","matchedRouteKey","viewDepthKey","routerKey","routeLocationKey","routerViewLocationKey","useCallbacks","guardToPromiseFn","enterCallbackArray","guardReturn","guardCall","extractComponentsGuards","guardType","guards","rawComponent","isRouteComponent","componentPromise","resolvedComponent","useLink","router","currentRoute","activeRecordIndex","routeMatched","currentMatched","parentRecordPath","getOriginalPath","includesParams","isExactActive","navigate","guardEvent","RouterLinkImpl","link","elClass","getLinkClass","RouterLink","inner","innerValue","outerValue","propClass","globalClass","defaultClass","RouterViewImpl","injectedRoute","routeToDisplay","injectedDepth","depth","initialDepth","matchedRoute","matchedRouteRef","viewRef","oldInstance","oldName","currentName","ViewComponent","routePropsOption","routeProps","slotContent","RouterView","createRouter","parseQuery$1","stringifyQuery$1","beforeGuards","beforeResolveGuards","afterGuards","pendingLocation","normalizeParams","paramValue","encodeParams","decodeParams","parentOrRoute","recordMatcher","routeMatcher","hasRoute","rawLocation","locationNormalized","matcherLocation","targetParams","locationAsObject","checkCanceledNavigation","pushWithRedirect","handleRedirectRecord","lastMatched","redirect","newTargetLocation","redirectedFrom","targetLocation","shouldRedirect","toLocation","failure","handleScroll","markAsReady","triggerError","finalizeNavigation","triggerAfterEach","checkCanceledNavigationAndReject","runWithContext","installedApps","leavingRecords","updatingRecords","enteringRecords","extractChangingRecords","canceledNavigationCheck","runGuardQueue","beforeEnter","isPush","isFirstNavigation","removeHistoryListener","setupListeners","_from","readyHandlers","errorHandlers","ready","isReady","scrollBehavior","started","reactiveRoute","recordFrom","recordTo","useRouter","useRoute","useNotificationStore","ttl","useNotification","notify","setMessageSeen","mitt","eventBus","useAppleIdLogin","useGoogleIdTokenLogin","HEARTBEAT_INTERVAL","HEARTBEAT_APP_ACTIVE_DELAY","HEARTBEAT_APP_FOREGROUND_DELAY","HEARTBEAT_HEARTBEAT_DELAY","_AppBridge","pauseHeartbeat","setQueueData","setPlayerState","playerState","setMaxBandwidth","setShuffleMode","setSchedule","sceneName","eventName","errorMessage","errorCode","origin","AppBridge","tester","validate","domainParts","_sfc_main$3G","button","isLoading","isSuccess","hasError","classes","setSuccess","displayFor","setError","handleClick","computedAttrs","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_mergeProps","_renderSlot","_hoisted_2","_createTextVNode","getErrorMessage","annotateErrors","errors","annotatedErrors","hasErrors","_sfc_main$3E","_normalizeClass","emailValid","emailExists","promptPassword","buttonText","flow","updateAccount","account","handleEmailChanged","EmailValidator.validate","submitEmailLogin","submitPasswordLogin","submitForm","resetPassword","_sfc_main$3C","inputEl","parseInput","_resolveComponent","_hoisted_1","_component_i18n_t","_withDirectives","_createElementVNode","$event","tokenRegex","tokenValid","handleTokenInput","imgApple","imgDeezer","imgGoogle","imgSpotify","useIconSize","scale","defaultIconSize","defaultIconStrokeWidth","iconSize","iconStrokeWidth","_sfc_main$3A","color","_withScopeId","_pushScopeId","_popScopeId","_hoisted_3","_hoisted_4","_hoisted_5","ICONS","_sfc_main$3z","IconLoading","authBackends","iOSMaskVisible","fetchBackends","backends","availableBackends","getProviderLogo","getProviderText","beginLogin","backend","connectUrl","disconnect","_Fragment","_renderList","_component_IconLoading","_Transition","_withCtx","_createCommentVNode","_sfc_main$3y","SocialLogin","EmailLoginForm","EmailLoginVerify","socialLoginVisible","emailLoginVisible","emailLoginVerifyVisible","emailSentTo","_component_EmailLoginForm","_component_EmailLoginVerify","_sfc_main$3x","_normalizeStyle","_sfc_main$3w","_sfc_main","CircleButton","IconClose","_createBlock","_component_CircleButton","_component_IconClose","_sfc_main$3u","CloseButton","hasAside","close","_withModifiers","_component_CloseButton","faqUrl","tosUrl","ppUrl","_sfc_main$3q","SidePanel","AuthPanel","ServiceInfoAside","Availability","Terms","isVisible","newUser","_component_SidePanel","_component_Availability","_component_Terms","_component_ServiceInfoAside","_sfc_main$3p","hasFooter","hasSuccess","_hoisted_8","_hoisted_9","_hoisted_7","FAQ_LINK","BROWSER_REQUIREMENTS","uaParser","isDismissed","browserDisplay","navigateToFaq","targetEl","targetPos","targetX","targetY","targetWidth","linePos","_sfc_main$3m","CTA_SHOW_AGAIN_AFTER","CTA_SHOW_AFTER_SECONDS","documentVisible","documentVisibleSeconds","ctaDismissed","hasActiveDonation","dismiss","confirm","pure","_typeof","V3_URL","V3_URL_REGEX","EXISTING_SCRIPT_MESSAGE","findScript","scripts","script","injectScript","queryString","headOrBody","registerWrapper","stripe","startTime","stripePromise","loadScript","initStripe","maybeStripe","validateLoadParams","loadParams","loadStripeCalled","loadStripe","_len","validatedParams","parameterKeys","sameParameters","previousValue","_loadParams","STRIPE_PUBLISHABLE_KEY","PaymentFlow","emitFn","errorsRef","formEl","priceId","amount","currency","expressEl","cardEl","paymentIntentId","submitPayment","setStep","step","authenticate","optionsDisplay","setPriceId","AMOUNT_OPTIONS","customAmount","amountValid","setAmount","updateActiveDonation","newHash","setKind","successData","currencies","infoVisible","navVisible","flowVisible","successVisible","onStep","onSuccess","_sfc_main$3e","_sfc_main$3d","OverlayPanel","faqLink","_component_OverlayPanel","_component_router_link","CookieConsent","_config","_cookieconsent","user_config","saved_cookie_content","cookie_data","consent_date","last_consent_update","consent_uuid","invalid_consent","consent_modal_exists","consent_modal_visible","settings_modal_visible","clicked_inside_modal","current_modal_focusable","all_table_headers","all_blocks","onAccept","onChange","onFirstAction","revision_enabled","valid_revision","changed_settings","reload_page","accept_type","accepted_categories","rejected_categories","default_enabled_categories","is_bot","last_elem_before_modal","last_consent_modal_btn_focus","consent_modal_focusable","settings_modal_focusable","toggle_states","all_categories","readonly_categories","html_dom","main_container","all_modals_container","consent_modal","consent_modal_title","consent_modal_description","consent_primary_btn","consent_secondary_btn","consent_buttons","consent_modal_inner","settings_container","settings_inner","settings_title","settings_close_btn","settings_blocks","new_settings_blocks","settings_buttons","settings_save_btn","settings_accept_all_btn","settings_reject_all_btn","_setConfig","_user_config","_resolveCurrentLang","_addDataButtonListeners","elem","show_settings","_getElements","accept_all","accept_necessary","accept_custom_selection","_addEvent","_acceptAction","data_role","_getValidatedLanguage","lang","all_languages","_getKeys","_getModalFocusableData","allowed_focusable_types","_getAllFocusableElements","modal","_array","focus_later","focus_first","focusable_elems","attr","_createConsentModal","_addClass","_createNode","consent_modal_inner_inner","overlay","consent_modal_title_value","description","primary_btn_data","secondary_btn_data","_accept_type","gui_options_data","_createSettingsModal","settings_container_valign","settings_container_inner","settings_header","settings_close_btn_container","evt","n_blocks","title_data","description_data","toggle_data","cookie_table_data","remove_cookie_tables","isExpandable","block_section","block_table_container","block_desc","block_title_container","accordion_id","block_title_btn","block_switch_label","block_switch","block_switch_span","label_text_span","block_switch_span_on_icon","block_switch_span_off_icon","cookie_category","_inArray","accordion","btn","_hasClass","_removeClass","block_title","tr_tmp_fragment","th1","new_column_key","tr_tmp","thead","block_table","tbody_fragment","tr","td_tmp","tbody","reject_all_btn_text","_createCookieConsentHTML","rootEl","new_validated_lang","_autoclearCookies","clearOnFirstAction","all_cookies_array","_getCookie","domains","non_www_domain","curr_block","category_just_disabled","curr_cookie_table","ckey","clen","curr_domains","curr_row","found_cookies","curr_cookie_name","is_regex","curr_cookie_domain","curr_cookie_path","found_index","_eraseCookies","_saveCookiePreferences","category_toggles","_uuidv4","_getAcceptType","_getCurrentCategoriesState","_setCookie","_manageExistingScripts","print_msg","optional_param","languages","requested_language","_getBrowserLang","browser_lang","_handleFocusTrap","tabbedOutsideDiv","tabbedInsideModal","_guiManager","gui_options","only_consent_modal","consent_modal_options","settings_modal_options","_setLayout","allowed_layouts","allowed_positions","allowed_transitions","layout","allowed_categories","cookie_consent_accepted","rfc_prop_exists","must_enable_categories","_loadScripts","curr_script","curr_script_category","fresh_script","destination","attributes","attr_name","_setCookieData","new_data","same_type","cookie_name","category","currentCategoriesState","necessary_categories_length","function_defined","create_modal","_categories","_exclusions","categories","exclusions","to_accept","_getCurrentPreferences","toggles","states","_cookies","_path","_domain","cookie_expiration","cookieStr","get_value","custom_path","isPassive","classname","className","init","cc","OPTIONS","_sfc_main$3c","changed_preferences","SEARCH_ENDPOINT","getGlobalMediaSearchResults","_sfc_main$3a","searchInput","MOOD_ENDPOINT","PLAYLIST_ENDPOINT","ARTIST_ENDPOINT","MEDIA_ENDPOINT","getMoods","getMood","getArtists","ordering","expand","getArtistsTags","getArtist","getMedia","getMediaTags","getMediaDetail","getPlaylists","getPlaylistsTags","getPlaylist","_sfc_main$39","_sfc_main$38","_sfc_main$37","_sfc_main$36","CONTRAST_BREAKPOINT","getContrastColor","rgb","getAppTheme","setBodyColorTheme","body","_sfc_main$35","logUIEvent","isHover","icon","IconBuffering","IconPause","IconPlaying","IconPlayQueued","IconPlay","fgColor","bgColor","isOutlined","isFilled","hoverBgOpacity","_resolveDynamicComponent","useObjKey","objKey","setObjKey","useObjCtUid","objCt","objUid","usePlayerState","isLive","isNews","isOndemand","isBuffering","isPlaying","isPaused","playState","currentTime","newsProvider","relPosition","liveLatency","debugData","scheduleMedia","scheduleNextMedia","queueMedia","queueNextMedia","nextMedia","image","usePlayerControls","player","setVisibility","playLive","playNews","endPlayNews","playUid","estimatedDuration","cueFade","annotateMedia","mediaObj","artistKeys","artistObj","mappedScope","getAppBridgeQueueChannel","useQueueState","previousIndex","currentMedia","numMedia","queuedMedia","useQueueControls","playMedia","enqueue","setIndex","deleteAtIndexWeb","clearQueueWeb","shuffleQueueWeb","hasPrevious","hasNext","enqueueObj","enqueueMedia","startPlayCurrent","playNext","playFromIndex","playPrevious","VOTE_ENDPOINT","getRating","postRating","useRatingStore","ratings","totals","rating","ct","userRating","isBuiltin","wat","isThenable","isGlobalObj","GLOBAL_OBJ","getGlobalObject","getGlobalSingleton","creator","gbl","__SENTRY__","PREFIX","CONSOLE_LEVELS","consoleSandbox","originalConsole","wrappedLevels","originalWrappedFunc","makeLogger","enabled","dropUndefinedKeys","inputValue","_dropUndefinedKeys","memoizationMap","memoVal","returnValue","uuid4","crypto","getRandomByte","arrayify","isBrowserBundle","isNodeEnv","dynamicRequire","mod","States","RESOLVED","REJECTED","SyncPromise","onrejected","onfinally","isRejected","cachedHandlers","WINDOW","dateTimestampSource","getBrowserPerformance","performance","timeOrigin","getNodePerformance","platformPerformance","timestampSource","dateTimestampInSeconds","timestampInSeconds","performanceNow","dateNow","timeOriginDelta","timeOriginIsReliable","navigationStart","navigationStartDelta","navigationStartIsReliable","DEFAULT_ENVIRONMENT","makeSession","startingTime","session","sessionToJSON","updateSession","closeSession","DEFAULT_MAX_BREADCRUMBS","Scope","newScope","requestSession","tags","extras","extra","fingerprint","span","captureContext","updatedScope","breadcrumb","maxBreadcrumbs","maxCrumbs","mergedBreadcrumb","attachment","hint","transactionName","getGlobalEventProcessors","newData","processors","API_VERSION","DEFAULT_BREADCRUMBS","Hub","client","exception","eventId","syntheticException","beforeBreadcrumb","finalBreadcrumb","oldHub","makeMain","integration","customSamplingContext","endSession","environment","userAgent","currentSession","sentry","getMainCarrier","hub","getHubFromCarrier","setHubOnCarrier","getCurrentHub","hasHubOnCarrier","getHubFromActiveDomain","activeDomain","registryHubTopStack","carrier","configureScope","SUBSCRIPTION_ENDPOINT","getPlanOptions","createStripeCheckoutSession","sku","getVoucher","redeemVoucher","getUserVouchers","useSubscriptionStore","useSubscription","userVouchers","loadUserVouchers","FAST_POLLING_INTERVAL","SLOW_POLLING_INTERVAL","updateAppBridgeAccount","updateSentryScope","Sentry.configureScope","AccountHandler","oldUser","createAccountHandler","requireSubscription","_sfc_main$34","ButtonPlay","shiftKey","injectRatings","currentQueueIndex","currentColor","inScope","queueIndex","queuePosition","inQueue","objIsPlaying","objIsBuffering","objIsPaused","baseColor","activeColor","fillColor","play","mediaScope","_component_ButtonPlay","Intersect","RESIZER_IMAGE_WITHS","RESIZER_MAX_WIDTH","IMAGE_RESIZER_ENDPOINT","getImageSrc","resizeSize","getImageColor","preloadImage","img","PLACEHOLDER_SRC","imageEl","isLoaded","imageSrc","imageHeight","imageWidth","calculatedSize","loadImage","cssVars","_component_Intersect","_sfc_main$32","LazyImage","PlayAction","linkTo","_component_LazyImage","_component_PlayAction","_toDisplayString","_sfc_main$31","Result","_component_Result","_sfc_main$30","SearchInput","SearchResults","resultsTotalCount","show","logRawEvent","searchResults","_component_SearchInput","_component_SearchResults","_sfc_main$2$","_sfc_main$2_","_sfc_main$2Z","_sfc_main$2Y","IconAlert","numDaysRemaining","isBlocked","_component_IconAlert","strokeWidth","IconMenu","initials","_component_IconMenu","IconSearch","_component_IconSearch","_sfc_main$2T","_sfc_main$2S","BASE_SIZE","_sfc_main$2R","_hoisted_6","showSideMenu","showGlobalSearch","_sfc_main$2P","settingsStore","availableLocales","toggleMode","_sfc_main$2N","LanguageChooser","ToggleDarkModeButton","primaryPages","pages","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_component_ToggleDarkModeButton","page","_sfc_main$2J","_sfc_main$2I","_sfc_main$2H","baseStyle","useRating","ratingByKey","totalsByKey","loadRating","setRating","playerIsLive","playerIsPlaying","playerMedia","getRatingSource","_sfc_main$2G","IconHeart","IconFlash","setRatingWithSource","totalsDisplay","isFlipped","flipIcon","rate","isEmpty","opacity","_component_IconHeart","_component_IconFlash","_sfc_main$2F","deleteAtIndex","canRemove","scrollIntoView","Rotate","_sfc_main$2D","rotate","_sfc_main$2C","_sfc_main$2B","_createStaticVNode","_sfc_main$2A","IconShuffle","Circle","shuffleQueue","_component_Circle","_component_IconShuffle","_sfc_main$2z","QueueMedia","ShuffleControl","IconCaret","queueLength","clearQueue","_component_QueueMedia","_component_ShuffleControl","_component_IconCaret","_sfc_main$2y","sn","kt","nn","bt","Pt","Q","w","Jt","Ht","Wt","Gt","G","J","K","X","Y","Z","tt","nt","et","it","ut","at","st","ft","ht","pt","vt","yt","_t","mt","wt","Ot","St","jt","Mt","Et","At","Tt","It","Ft","xt","Ct","Dt","qt","Qt","Bt","Nt","Rt","zt","Ut","$t","Lt","Vt","Kt","Xt","Yt","Zt","tn","en","rn","on","un","an","_sfc_main$2x","tweenValue","fromValue","tween","isTweening","onClick","onTweenStart","onTweenEnd","_sfc_main$2v","MediaArtists","_component_MediaArtists","_sfc_main$2u","_sfc_main$2t","IconSkip","_component_IconSkip","_sfc_main$2s","ButtonSkip","_component_ButtonSkip","_sfc_main$2r","roundedSeconds","dateStr","_sfc_main$2q","rootWidth","cueIn","cueOut","seekPosition","isSeeking","progress","rangeStart","timeLeft","rangeMin","rangeMax","rangeEnd","rangeWidth","onInput","fadeInWidth","fadeOutWidth","_component_Duration","_sfc_main$2p","UserRating","CurrentMedia","Playhead","PlayerControl","seek","bg","lengthY","nextImage","imageObj","_component_UserRating","_component_CurrentMedia","_component_Playhead","_component_PlayerControl","_sfc_main$2o","_sfc_main$2n","Panel","Queue","QueueControl","OnAir","PlayerPlayButton","playerVisible","queueVisible","hideQueue","toggleQueue","panelVisible","hidePanel","togglePanel","fg","fgInverse","testingEnabled","_component_Panel","_component_Queue","_component_PlayerPlayButton","_component_OnAir","_component_QueueControl","_sfc_main$2m","modeDisplay","_sfc_main$2k","useNewsStore","schedule","providerKey","NEWS_PROVIDERS","useNews","localProviderKey","providers","selectedProvider","setProvider","toggleProvider","_sfc_main$2i","overlayVisible","skipVisible","News Settings","_sfc_main$2g","iconRFI","iconSrc","dt2hhmmss","s2hhmmss","_sfc_main$2e","logFn","currentTimeDisplay","totalTimeDisplay","_sfc_main$2d","_sfc_main$2c","_sfc_main$2b","PlayheadHandle","PlayheadTime","mouseX","playheadTime","playheadTimeX","posX","playheadHandleX","seekTo","_component_PlayheadHandle","_component_PlayheadTime","_sfc_main$2a","_sfc_main$29","IconSpeaker","isExpanded","fgColorInverse","dateDisplay","timeDisplay","_sfc_main$25","AsyncButton","ApiErrors","Datetime","Money","selectedKey","fetchOptions","selectOption","selectedOption","startStripePayment","sessionId","startPayment","_component_Money","_component_Datetime","_component_AsyncButton","handleInput","limitInput","codeRegex","_sfc_main$23","CodeInput","codeInput","voucher","isValid","fetchVoucher","handleCodeInput","_component_CodeInput","_sfc_main$22","SubscribePlan","SubscribeVoucher","intent","setIntent","_createSlots","_component_SubscribePlan","_component_SubscribeVoucher","_sfc_main$21","ModalPanel","hashValue","codeValue","redeem","authenticateAndRedeem","closePanel","_component_ModalPanel","hlsBaseConfig","createAudioAnalyser","audio","a32","a1024","PROTECTED_MEDIA","hlsConfig","getLiveUrl","getNewsUrl","getOnDemandUrl","getStepVolume","reverse","vol","vol2","_HlsPlayer","newsAudio","wakeLockIsSupported","wakeLockRequest","nativeHlsSupported","hlsSupported","Hls","osc","gain","hls","endTime","fadeInEndTime","fadeOutStartTime","stepVolume","fadeAudio","maxAutoLevel","bandwidthEstimate","drift","mainForwardBufferInfo","setPlayerDebugData","HlsPlayer","MediaSessionHandler","pauseFn","resumeFn","playNextFn","playPreviousFn","artwork","createMediaSessionHandler","STATS_ENDPOINT","createPlayerEvents","sendHeartbeat","createAnalyticsEvent","NEWS_OBJ_KEYS","EventHandler","lastPlayState","combinedState","addEvent","ignoreEvent","createEventHandler","HeartbeatHandler","createHeartbeatHandler","Schedule","loadSchedule","createScheduleHandler","setDocumentThemeColor","setAppTheme","setDocumentPrimaryColor","UIStateHandler","primaryColor","setWindowSize","createUIStateHandler","SSE_PUBLISHER_URL","GOOGLE_ACCOUNTS_CLIENT_ID","cmd","_sfc_main$20","Navigation","SideMenu","GlobalSearch","Notifications","AuthSidebar","Subscribe","GeoblockNotice","Player","MobilePlayer","DonateCta","DonatePanel","CtaPresenter","ClaimVoucher","CompatibilityNotice","LegalLinks","_component_Navigation","_component_SideMenu","_component_GlobalSearch","_component_Notifications","_component_router_view","_KeepAlive","_component_AuthSidebar","_component_Subscribe","_component_GeoblockNotice","_component_ClaimVoucher","_component_Player","_component_LegalLinks","_component_DonateCta","_component_DonatePanel","_component_CtaPresenter","_component_CookieConsent","_component_CompatibilityNotice","TooltipDirective","_sfc_main$1$","_sfc_main$1_","_sfc_main$1Z","IconInstagram","IconFacebook","IconGithub","_component_IconInstagram","_component_IconFacebook","_component_IconGithub","_sfc_main$1X","SocialMediaLinks","hasLead","hasBody","_sfc_main$1W","Page","_component_Page","_component_IconBuffering","_sfc_main$1V","__assign","mode$1","QR8bitByte","_8BitByte","ErrorCorrectLevel","ECL","QRRSBlock","totalCount","dataCount","typeNumber","errorCorrectLevel","rsBlock","RSBlock$1","QRBitBuffer","bufIndex","bit","BitBuffer$1","QRMath","math$2","math$1","QRPolynomial","shift","ratio","Polynomial$2","Mode","Polynomial$1","math","QRMaskPattern","QRUtil","digit","maskPattern","errorCorrectLength","qrCode","moduleCount","lostPoint","row","col","sameCount","dark","darkCount","util$1","BitByte","RSBlock","BitBuffer","util","Polynomial","QRCode$1","rsBlocks","totalDataCount","test","minLostPoint","target_mc","instance_name","qr_mc","cs","bits","bitIndex","byteIndex","mask","dataList","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","rsPoly","rawPoly","modPoly","modIndex","totalCodeCount","QRCode_1","defaultErrorCorrectLevel","SUPPORTS_PATH2D","QRCode","qrcode","toUTF8String","validErrorCorrectLevel","utf8Str","charCode","generatePath","modules","margin","ops","cell","QRCodeProps","QRCodeVueProps","as","QRCodeSvg","numCells","fgPath","generate","cells","QRCodeCanvas","canvasEl","background","foreground","canvas","devicePixelRatio","rdx","cdx","QrcodeVue","renderAs","_size","_margin","_level","_sfc_main$1U","_sfc_main$1T","IconEdit","isEditable","_sfc_main$1S","Section","signedLoginUrl","loadCredentials","_component_Section","_component_qrcode_vue","_sfc_main$1R","annotatedOptions","_sfc_main$1Q","countryOptions","line1","line2","postalCode","city","countries","_sfc_main$1O","Form","formVisible","showForm","hideForm","_component_Form","STRIPE_SELF_SERVICE_PORTAL_URL","recurringDonations","singleDonations","createDonation","cancelDonation","formValid","_sfc_main$1L","NEWSLETTER_ENDPOINT","getNewsletters","updateSubscriptions","_sfc_main$1K","newsletters","loadNewsletters","newsletter","_vModelCheckbox","_sfc_main$1J","TextInput","passwordConfirm","_vShow","_component_TextInput","_sfc_main$1I","_sfc_main$1H","SelectInput","gender","genderOptions","firstName","lastName","favoriteVenue","yearOfBirth","formErrors","_component_SelectInput","_sfc_main$1G","fullName","annotateBackends","_sfc_main$1F","connected","auth","connectedProviders","be","disconnectedAuth","nextUrl","_hoisted_14","BANDWITH_CHOICES","_sfc_main$1E","maxBandwidthChoices","_sfc_main$1D","_sfc_main$1C","CurrentSubscription","Stream","Email","Personal","Address","Social","QRCodeLogin","socialNext","_component_Stream","_component_Email","_component_Password","_component_Personal","_component_Address","_component_Newsletter","_component_Social","_component_Donations","_component_QRCodeLogin","srcAppStoreBadge","URL","_sfc_main$1B","_sfc_main$1A","voucherUrl","_sfc_main$1z","QRCodeVoucher","share","shareSupported","copyCode","copiedCode","_component_QRCodeVoucher","_sfc_main$1y","UserVoucher","QRCodeApp","_component_QRCodeApp","_component_UserVoucher","_sfc_main$1x","_sfc_main$1w","EditorCard","editors","fetchEditors","activeEditors","pastEditors","editor","_component_EditorCard","_sfc_main$1v","_sfc_main$1u","_sfc_main$1t","_sfc_main$1s","Action","IconEnueue","iconScale","enqueueNext","enqueueEnd","_component_Action","_component_IconEnueue","_sfc_main$1r","_sfc_main$1q","IconShare","isFavorite","isBanned","canBan","_component_IconShare","IconContext","ObjectActions","ListActions","menu","menuPosition","isObj","pageY","hide","transitionName","hideTimeout","onMenuMouseleave","onMenuMouseenter","_component_IconContext","_component_ObjectActions","_component_ListActions","_sfc_main$1o","_sfc_main$1n","Tag","keyPrefix","objTags","_component_Tag","_sfc_main$1m","ContextMenu","ObjectTags","_component_ObjectTags","_component_ContextMenu","_sfc_main$1l","IconRemove","_component_IconRemove","_sfc_main$1k","addOrRemove","_sfc_main$1j","Query","selectedTags","searchQuery","moodTags","otherTags","tagNames","tagObj","_component_Query","_sfc_main$1i","_sfc_main$1h","DEBOUNCE_FOR","_sfc_main$1g","inViewport","LoadingGrid","LoadingTable","_sfc_main$1f","hasFilter","_shared","setupDOM","onReset","iconEl","textEl","_ptr","_timeout","screenY","_setupEvents","_onTouchStart","_onTouchMove","_onTouchEnd","retval","_onScroll","_passiveSettings","_ptrMarkup","_ptrStyles","_defaults","_methods","_setupHandler","_handler","isEnabled","usePullToRefresh","PullToRefresh","_sfc_main$1e","ListFilter","LoadingMore","NoResults","ArtistCard","filterExpanded","numResults","lastOffset","artists","tagList","tagListLoading","userFilter","combinedFilter","fetchArtists","fetchNextPage","fetchTags","showSearchBar","showUserFilter","updateUserFilter","routeName","listEl","oldFilter","newFilter","_component_ListFilter","_component_NoResults","artist","_component_ArtistCard","_component_LoadingMore","_sfc_main$1d","TIME_UPDATE_INTERVAL","isToday","startInterval","stopInterval","_sfc_main$1b","MediaReleases","RelativeDateTime","latestAirplay","_component_MediaReleases","_component_RelativeDateTime","_sfc_main$1a","_sfc_main$19","PlayAllAction","MediaRowHeader","MediaRow","mediaList","mediaListLoading","visibleMediaList","fetchMedia","_component_PlayAllAction","_component_MediaRow","useCatalogStore","useCatalog","moods","loadMoods","_sfc_main$18","_sfc_main$17","MoodCard","_component_MoodCard","mood","_sfc_main$16","_sfc_main$15","PlaylistName","latestEmission","_component_PlaylistName","_sfc_main$14","_sfc_main$13","_sfc_main$12","PlaylistRowHeader","PlaylistCard","playlists","playlistComponent","PlaylistRow","fetchPlaylists","playlist","_sfc_main$11","scrollX","scrollLane","smooth","scrollNext","scrollPrevious","_sfc_main$10","HomeSection","_component_HomeSection","_sfc_main$$","IconFilter","isFormVisible","toggleFilter","submitSearch","newQuery","clearSearch","hasSearchQuery","_component_IconFilter","TITLE_TEMPLATE","usePageTitle","Searchbar","menuRef","setMenuFocus","_component_Searchbar","parseFilterQuery","_sfc_main$Y","SCOPE_DISPLAY","_sfc_main$X","EXCLUDED_SCOPES","_sfc_main$W","Identifier","objIdentifiers","extraIdentifiers","_component_Identifier","_sfc_main$V","IconBack","_component_IconBack","_sfc_main$T","BackButton","canNavigateBack","_component_BackButton","_sfc_main$S","hasHeader","hasBackground","headerEl","headerElHeight","headerWidth","headerHeight","_component_SocialMediaLinks","useBroadcastStore","_sfc_main$R","DetailPage","DetailHeader","ObjectIdentifiers","PlaylistList","loadEditor","editorByUid","initialFilter","_component_DetailPage","_component_DetailHeader","_component_ObjectIdentifiers","_component_PlaylistList","_sfc_main$Q","_sfc_main$P","DetailHeaderLoading","MediaList","artistByUid","loadArtist","_component_DetailHeaderLoading","_component_MediaList","_sfc_main$O","mediaByUid","loadMedia","colorToRGBA","drawCanvas","offsetY","rays","center","ray","colors","blend","blur","gradient","_sfc_main$N","containerStyle","visualStyle","updateCanvas","_sfc_main$M","Visual","moodByUid","loadMood","allMediaLoaded","slotProps","_component_Visual","bins","barWidth","heightFactor","numBins","_sfc_main$L","getDrawData","analyser","spectrumData","drawLoop","drawData","_sfc_main$K","AudioVisualisation","spectrogramStyle","_component_AudioVisualisation","playlistTitle","appendix","_sfc_main$I","EditorInline","Spectrogram","playlistByUid","loadPlaylist","_component_Spectrogram","_component_EditorInline","getPage","_sfc_main$H","_sfc_main$G","_sfc_main$F","IconPlus","IconMinus","_component_IconMinus","_component_IconPlus","_sfc_main$D","ExpandableSection","SectionCta","_component_ExpandableSection","_sfc_main$C","errorPage","loadPage","section","_sfc_main$B","_sfc_main$A","FAQ_ENDPOINT","getFaqCategories","useRouteHash","getDefaultOpts","allOptionsOn","showdown","parsers","extensions","setFlavor","flavor","preset","validExtension","extension","errMsg","baseMsg","ln","validateExtension","escapeCharactersCallback","wholeMatch","m1","charCodeToEscape","charsToEscape","afterBackslash","txt","rgxFindMatchPos","flags","matchPos","replacement","repStr","finalStr","lng","indexOf","mail","targetLength","padString","converterOptions","langExtensions","outputModifiers","setConvFlavor","metadata","_constructor","gOpt","_parseExtension","legacyExtensionLoading","validExt","rTrimInputText","rsp","rgx","evtName","globals","ei","nText","HTMLParser","substitutePreCodeTags","mdDoc","pres","presPH","extensionName","ii","writeAnchorTag","linkText","linkId","m5","m6","wm","escape","mentions","lnk","simpleURLRegex","simpleURLRegex2","delimUrlRegex","simpleMailRegex","delimMailRegex","replaceLink","leadingMagicChars","m2","m3","trailingPunctuation","trailingMagicChars","lnkTxt","lmc","tmc","replaceMail","bq","pre","codeblock","doctype","doctypeParsed","leadingText","numSpaces","emojiRgx","emojiCode","comments","delim","repFunc","blockText","blockTags","inside","opTagPos","rgx1","patLeft","patRight","subTexts","newSubText1","hashHTMLSpan","html","repText","headerLevelStart","setextRegexH1","setextRegexH2","spanGamut","hID","headerId","hLevel","hashBlock","matchFound","atxStyle","hText","header","inlineRegExp","crazyRegExp","base64RegExp","referenceRegExp","refShortcutRegExp","writeImageTagBase64","altText","writeImageTag","gUrls","gTitles","gDims","parseInside","lead","processListItems","listStr","trimTrailing","isParagraphed","m4","taskbtn","bulletStyle","otp","wm2","styleStartNumber","listType","parseConsecutiveLists","olRgx","ulRgx","counterRxg","parseCL","parseMetadataContents","wholematch","grafs","grafsOut","grafsOutIt","codeFlag","base64Regex","replaceFunc","blankLines","tableRgx","singeColTblRgx","parseStyles","sLine","parseCells","subText","buildTable","tblLgn","parseTable","rawTable","tableLines","rawHeaders","rawStyles","rawCells","charCodeToReplace","childrenLength","innerTxt","headerLevel","headerMark","listItems","listItemsLenght","listNum","bullet","listItemTxt","childrenLenght","spansOnly","tagName","tableArray","headings","rows","headContent","allign","cols","cellContent","cellSpacesCount","strLen","converter","linkEl","onExpand","onCondense","answerHtml","answerEl","_sfc_main$y","Topic","topic","_component_Topic","_sfc_main$x","twintQrCode","_sfc_main$w","_sfc_main$v","Wir erweitern unser Programm kontinuierlich. Das kostet Geld.","Mit einer Spende hilfst du uns, dir noch mehr Musik aus der ganzen Welt präsentieren zu können.","Überweisung","Wir danken für die Unterstützung!","We are constantly expanding our program. That costs money.","Thank you for your support!","annotateEmissions","emissions","emission","useProgramStore","program","_sfc_main$u","routeTo","tagsDisplay","timeStartDisplay","mediaSet","_sfc_main$t","timeStart","_sfc_main$s","visibleMediaSet","numHidden","nextStartInSeconds","_TransitionGroup","_sfc_main$r","EmissionRow","MediaSet","isPast","isUpcoming","isCurrent","bgHover","loadMediaSet","mediaSetData","showMedia","hideMedia","_component_EmissionRow","_component_MediaSet","_sfc_main$q","IconProgram","_sfc_main$p","DateInput","today","dateInput","dateInputMin","dateInputMax","_component_DateInput","_sfc_main$o","Filter","Emission","loadEmissions","timeInFuture","_component_Emission","_component_Filter","onDateUpdate","_sfc_main$m","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_sfc_main$l","IconLogo","currentScheduleItem","isCurrentScheduleItem","currentPlayerMedia","playerIsBuffering","playerIsPaused","isCurrentPlayerMedia","pausePlayer","resumePlayer","startPlayMedia","iconMode","_component_IconLogo","BASE_Z_INDEX","_sfc_main$j","FlowItemPlay","Ticker","Debug","focus","rawFocus","roundedFocus","timeEnd","relativePosition","hasFocus","updateElPosition","elLeft","elWidth","throttledOnFocused","translateX","rawScale","_component_Debug","_component_Ticker","_sfc_main$i","_sfc_main$h","IconDAB","_component_IconDAB","_sfc_main$g","FlowItem","FlowPlaceholderItem","panelEl","panelStyle","scrollPanelTo","onItemFocused","lastScrollX","_component_FlowItem","_sfc_main$e","_sfc_main$d","IconPaginate","_component_IconPaginate","_sfc_main$c","displayName","_sfc_main$b","zeroPad","_sfc_main$a","_sfc_main$9","_sfc_main$8","StationTime","HistoryTime","isHistory","_component_HistoryTime","_component_StationTime","_sfc_main$7","isSelected","_sfc_main$6","downvoteScopes","promptVisible","comment","showPrompt","hidePrompt","upvoteIconFlipped","flipUpvoteIcon","upvote","downvote","clearVote","onUpvote","onDownvote","_sfc_main$4","RadioHeader","Flow","FlowNews","FocusedEmission","FocusedMedia","PaginateButton","Rating","setPrimaryColor","items","currentItem","itemSize","maxByWidth","maxByHeight","debugOffset","paginatedItems","focusedItemKey","focusedItem","focusNext","focusPrevious","releaseFocus","spectrogramVisible","spectrogramColor","_component_RadioHeader","_component_FocusedEmission","_component_PaginateButton","_component_Flow","_component_FlowNews","_component_FocusedMedia","_component_Rating","_sfc_main$3","titleDisplay","editorDisplay","_sfc_main$2","_sfc_main$1","nextItem","isAuthenticated","Program","DiscoverHome","DiscoverHeader","MoodList","ArtistList","EditorList","MoodDetail","PlaylistDetail","ArtistDetail","MediaDetail","EditorDetail","Collection","AccountLogin","AccountSettings","AccountUserVouchers","AccountEmailLogin","Faq","NotFound","savedPosition","piniaPluginPersistedstate","App","de","wvSend","metric","onCLS","onLCP","onTTFB","onINP"],"mappings":"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AU,0JACV,KAAM,SACP,EACD,iBAAkB,CAChB,aAAc,GACd,SAAU,gCACV,KAAM,SACP,EACD,mBAAoB,CAClB,aAAc,GACd,SAAU,sCACV,KAAM,SACP,EACD,mBAAoB,CAClB,aAAc,GACd,SAAU,iCACV,KAAM,SACP,EACD,mCAAoC,CAClC,aAAc,GACd,SAAU,sEACV,KAAM,SACP,EACD,0BAA2B,CACzB,aAAc,GACd,SAAU,mDACV,KAAM,SACP,EACD,wBAAyB,CACvB,aAAc,GACd,SAAU,+CACV,KAAM,SACP,EACD,cAAe,CACb,aAAc,GACd,SAAU,oCACV,KAAM,SACP,EACD,OAAQ,CACN,aAAc,GACd,SAAU,6BACV,KAAM,SACP,EACD,eAAgB,CACd,aAAc,GACd,SAAU,6BACV,KAAM,SACP,EACD,aAAc,CACZ,aAAc,GACd,SAAU,6CACV,KAAM,SACP,EACD,UAAW,CACT,aAAc,GACd,SAAU,mCACV,KAAM,SACP,EACD,kBAAmB,CACjB,aAAc,GACd,SAAU,kEACV,KAAM,SACP,EACD,oBAAqB,CACnB,aAAc,GACd,SAAU,kDACV,KAAM,SACP,EACD,qCAAsC,CACpC,aAAc,GACd,SAAU,oEACV,KAAM,SACP,EACD,iBAAkB,CAChB,aAAc,GACd,SAAU,gDACV,KAAM,SACP,EACD,8BAA+B,CAC7B,aAAc,GACd,SAAU,6EACV,KAAM,SACP,EACD,WAAY,CACV,aAAc,GACd,SAAU,2BACV,KAAM,SACP,EACD,eAAgB,CACd,aAAc,yBACd,SAAU,yFACV,KAAM,QACP,EACD,aAAc,CACZ,aAAc,GACd,SAAU,0IACV,KAAM,SACP,EACD,qBAAsB,CACpB,aAAc,GACd,SAAU,gCACV,KAAM,SACP,EACD,yBAA0B,CACxB,aAAc,GACd,SAAU,oDACV,KAAM,SACP,EACD,MAAO,CACL,aAAc,GACd,SAAU,sDACV,KAAM,SACP,EACD,UAAW,CACT,aAAc,GACd,SAAU,gLACV,KAAM,SACP,EACD,SAAU,CACR,aAAc,GACd,SAAU,0DACV,KAAM,SACP,EACD,qBAAsB,CACpB,aAAc,GACd,SAAU,mF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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,287,290,295,323,324,349,350,351,352,353,354,355,356,357,358,359,360,361,362,404,461,506,558,559]}