{"version":3,"mappings":"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A,OACA,MACA,IACA,IACA,IACA,IACA,OACA,MACA,MACA,SACA,MACA,OACA,QACA,YACA,QACA,SACA,YACA,WACA,QACA,SACA,UACA,WACA,YACA,MACA,OACA,MACA,SACA,OACA,eACA,UACA,SACA,qBACA,aACA,iBACA,KACA,mBACA,MACA,OACA,OACA,SACA,YACA,QACA,aACA,mBACA,OACA,eACA,cACA,gBACA,YACA,WACA,WACA,gBACA,cACA,eACA,cACA,aACA,iBACA,iBACA,YACA,YACA,UACA,OACA,aACA,YACA,cACA,SACA,SACA,UACA,UACA,WACA,SACA,UACA,UACA,iBACA,SACA,qBACA,UACA,oBACA,SACA,MACA,KACA,OACF,EACMC,IAAwB,IAAI,IAAYD,GAAiB,EAExD,SAASE,IAAiBn6G,EAA2C,CACnE,OAAAk6G,IAAsB,IAAIl6G,CAAG,CACtC,CAEO,SAASo6G,GACd3O,EAC8B,CACvB,OAAAuO,GAAiB,MAAM,IAAIvO,CAAI,CACxC,CAEO,SAAS4O,IAAoBC,EAA2C,CAC7E,OAAAN,GAAiB,MAAM,IAAIM,EAAM,KAAMA,CAAK,EACrCA,CACT,CAEO,SAASC,KAA8B,CAC5CvqG,GAAWgqG,EAAgB,CAC7B,CAuCA,SAASQ,GACPnM,EACAoM,EACAxgG,EACAvR,EACA,CACA,OAAIA,IAAS,QACJ+xG,EAAQ,QAASz6G,GAAgBmL,GAAIkjG,EAAQruG,EAAK,CAAE,EAAC,EAGvD,OAAO,QACZowE,GACEqqC,EAAQ,OAAO,CAACloC,EAAKvyE,KAAS,CAAE,GAAGuyE,EAAK,GAAGpnE,GAAIkjG,EAAQruG,EAAK,CAAE,EAAE,GAAI,EAAE,EACtEia,CACF,EAEJ,CAEA,SAASygG,IAMPJ,EAAoE,CACpE,KAAM,CAAE,IAAAt6G,EAAK,QAAAia,EAAS,eAAA0gG,EAAgB,cAAAC,EAAe,KAAAlyG,EAAM,UAAAmyG,CAAc,EAAAP,EAElE,OACL,IAAKK,EAEL,KAAAjyG,EAEA,WAAW2lG,EAAyB,CAClC,OAAI3lG,IAAS,QACJ8xG,GAAuBnM,EAAQuM,EAAe3gG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AAM,OAAQ,GACnCvqC,GAAUlmB,EAAQkwD,CAAW,EAE3BhtE,EAAQ,OAAO,YACnB,OAAO,QAAQlsB,CAAO,EAAE,OAAO,CAAC,CAAC/iB,CAAG,IAAM,CAACw8G,EAAM,IAAIx8G,CAAG,CAAC,GAGrDixC,EAAM+0C,KACZ,OAAA/0C,EAAI,SAAWtX,EACXsX,EAAA,OAAS,IAAI,gBAAgBgnE,GAAcD,GAAO/oE,CAAK,CAAC,CAAC,EAAE,WACxDgC,CACT,CCjZO,MAAMyrE,IAA8B,GAE9BC,IAA4B,CACvC,WACA,WACA,SACA,OACA,WACA,UACA,QACA,cACA,IACA,UACA,WACA,WACA,UACA,SACA,QACA,OACA,MACA,IACA,IACA,IACA,IACA,OACA,MACA,MACA,SACA,MACA,OACA,QACA,YACA,QACA,SACA,YACA,WACA,QACA,SACA,UACA,WACA,YACA,MACA,OACA,MACA,SACA,OACA,eACA,UACA,SACA,qBACA,aACA,iBACA,KACA,mBACA,MACA,OACA,OACA,SACA,YACA,QACA,aACA,mBACA,OACA,eACA,cACA,gBACA,YACA,WACA,WACA,gBACA,cACA,eACA,cACA,aACA,iBACA,iBACA,YACA,YACA,UACA,OACA,aACA,YACA,cACA,SACA,SACA,UACA,UACA,WACA,SACA,UACA,UACA,iBACA,SACA,qBACA,UACA,oBACA,SACA,MACA,KACA,QACA,QACA,WACA,YACA,SACF,EAUO,SAASC,GACdpwD,EACiB,CACX,MAACgzC,EAASoI,CAAQ,EAAI,CAACp7C,EAAO,QAASA,EAAO,QAAQ,EAAE,IAAKzP,GACjEA,EAAOqiD,GAAariD,CAAI,EAAI,QAG9B,OAAOqzB,GAAK,CAAE,GAAG5jB,EAAQ,QAAAgzC,EAAS,SAAAoI,CAAA,EAAY+U,GAAyB,CACzE,CAUgB,SAAAE,GACdjyG,EACAqkC,EACA,C9Z1IF,IAAAxpC,EAAA+rC,E8Z2IQ,MAAAu/C,GAAOtrF,EAAAwpC,EAAM,OAAN,KAAAxpC,EAAc,EACrBq3G,GAAWtrE,EAAAvC,EAAM,WAAN,KAAAuC,EAAkBkrE,IAEnC,OA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","names":["makeMap","str","expectsLowerCase","set","val","EMPTY_OBJ","EMPTY_ARR","NOOP","NO","isOn","key","isModelListener","extend","remove","arr","el","i","hasOwnProperty","hasOwn","isArray","isMap","toTypeString","isSet","isDate","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","writable","looseToNumber","n","toNumber","_globalThis","getGlobalThis","normalizeStyle","res","item","normalized","parseStringStyle","listDelimiterRE","propertyDelimiterRE","styleCommentRE","cssText","ret","tmp","normalizeClass","name","normalizeProps","props","klass","style","specialBooleanAttrs","isSpecialBooleanAttr","includeBooleanAttr","looseCompareArrays","a","b","equal","looseEqual","aValidType","bValidType","aKeysCount","bKeysCount","aHasKey","bHasKey","looseIndexOf","isRef","toDisplayString","replacer","_key","entries","val2","stringifySymbol","v","_a","activeEffectScope","EffectScope","detached","currentEffectScope","fromParent","l","last","effectScope","recordEffectScope","effect","scope","getCurrentScope","onScopeDispose","activeEffect","ReactiveEffect","trigger","scheduler","pauseTracking","dep","triggerComputed","resetTracking","lastShouldTrack","shouldTrack","lastEffect","preCleanupEffect","postCleanupEffect","computed","effect2","cleanupDepEffect","trackId","pauseScheduleStack","trackStack","pauseScheduling","resetScheduling","queueEffectSchedulers","trackEffect","debuggerEventExtraInfo","oldDep","triggerEffects","dirtyLevel","tracking","createDep","cleanup","targetMap","ITERATE_KEY","MAP_KEY_ITERATE_KEY","track","target","type","depsMap","newValue","oldTarget","deps","newLength","key2","getDepFromReactive","object","isNonTrackableKeys","builtInSymbols","arrayInstrumentations","createArrayInstrumentations","instrumentations","args","toRaw","BaseReactiveHandler","_isReadonly","_isShallow","receiver","isReadonly2","isShallow2","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","targetIsArray","readonly","reactive","MutableReactiveHandler","isOldValueReadonly","isReadonly","isShallow","hadKey","result","ReadonlyReactiveHandler","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","toShallow","getProto","get","rawTarget","rawKey","has2","wrap","toReadonly","toReactive","has","size","add","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","shallow","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","targetTypeMap","rawType","getTargetType","createReactiveObject","shallowReactive","baseHandlers","collectionHandlers","proxyMap","existingProxy","targetType","proxy","isReactive","isProxy","raw","markRaw","ComputedRefImpl","getter","_setter","isSSR","triggerRefValue","self","trackRefValue","getterOrOptions","debugOptions","setter","onlyGetter","ref2","newVal","oldVal","r","ref","createRef","shallowRef","rawValue","RefImpl","__v_isShallow","useDirectValue","triggerRef","unref","toValue","source","shallowUnwrapHandlers","proxyRefs","objectWithRefs","CustomRefImpl","factory","customRef","toRefs","propertyToRef","ObjectRefImpl","_object","_defaultValue","GetterRefImpl","_getter","toRef","defaultValue","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","middleJob","middleJobId","getId","queueJob","job","queueFlush","flushJobs","invalidateJob","queuePostFlushCb","cb","flushPreFlushCbs","seen","flushPostFlushCbs","deduped","comparator","diff","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","prev","pushScopeId","popScopeId","withScopeId","_id","withCtx","ctx","isNonScopedSlot","renderFnWithContext","setBlockTracking","prevInstance","withDirectives","vnode","directives","getComponentPublicInstance","bindings","dir","modifiers","traverse","invokeDirectiveHook","prevVNode","oldBindings","binding","hook","leaveCbKey","enterCbKey","useTransitionState","state","onMounted","onBeforeUnmount","TransitionHookValidator","BaseTransitionPropsValidators","recursiveGetSubtree","subTree","BaseTransitionImpl","slots","getCurrentInstance","children","getTransitionRawChildren","child","Comment","rawProps","mode","emptyPlaceholder","innerChild","getKeepAliveChild","enterHooks","resolveTransitionHooks","hooks","setTransitionHooks","oldChild","oldInnerChild","isSameVNodeType","leavingHooks","earlyRemove","delayedLeave","leavingVNodesCache","getLeavingNodesForType","BaseTransition","leavingVNodes","postClone","appear","persisted","onBeforeEnter","onEnter","onAfterEnter","onEnterCancelled","onBeforeLeave","onLeave","onAfterLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAfterAppear","onAppearCancelled","callHook","callAsyncHook","hook2","leavingVNode","afterHook","cancelHook","called","cancelled","vnode2","hooks2","isKeepAlive","cloneVNode","shapeFlag","keepComment","parentKey","keyedFragmentCount","Fragment","defineComponent","options","extraOptions","isAsyncWrapper","defineAsyncComponent","loader","loadingComponent","errorComponent","delay","timeout","suspensible","userOnError","pendingRequest","resolvedComp","retries","retry","load","thisRequest","resolve","reject","comp","currentInstance","createInnerComp","onError","isInSSRComponentSetup","createVNode","loaded","error","delayed","parent","ce","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","current","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","prepend","reset","setCurrentInstance","createHook","lifecycle","onBeforeMount","onBeforeUpdate","onUpdated","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","COMPONENTS","DIRECTIVES","resolveComponent","maybeSelfReference","resolveAsset","NULL_DYNAMIC_COMPONENT","resolveDynamicComponent","component","resolveDirective","warnMissing","Component","selfName","getComponentName","registry","renderList","renderItem","index","cached","keys","createSlots","dynamicSlots","slot","j","renderSlot","fallback","noSlotted","openBlock","validSlotContent","ensureValidVNode","rendered","createBlock","vnodes","isVNode","toHandlers","preserveCaseIfNecessary","getPublicInstance","isStatefulComponent","publicPropertiesMap","resolveMergedOptions","instanceWatch","hasSetupBinding","PublicInstanceProxyHandlers","setupState","data","accessCache","appContext","normalizedProps","shouldCacheAccess","publicGetter","cssModule","globalProperties","propsOptions","descriptor","useSlots","getContext","createSetupContext","normalizePropsOrEmits","mergeModels","withAsyncContext","getAwaitable","awaitable","unsetCurrentInstance","e","applyOptions","publicThis","dataOptions","computedOptions","methods","watchOptions","provideOptions","injectOptions","created","beforeMount","mounted","beforeUpdate","updated","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","render","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","inheritAttrs","components","filters","resolveInjections","methodHandler","opt","createWatcher","provides","provide","registerLifecycleHook","register","_hook","exposed","checkDuplicateProperties","normalizeInject","inject","h","createPathGetter","handler","watch","base","mixins","extendsOptions","globalMixins","optionMergeStrategies","resolved","m","mergeOptions","to","from","strats","asMixin","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","namespace","lastApp","currentApp","parentProvides","treatDefaultAsFactory","hasInjectionContext","internalObjectProto","createInternalObject","isInternalObject","initProps","isStateful","attrs","setFullProps","updateProps","rawPrevProps","optimized","patchFlag","rawCurrentProps","hasAttrsChanged","propsToUpdate","isEmitListener","camelizedKey","resolvePropValue","kebabKey","needCastKeys","rawCastValues","camelKey","castValues","isAbsent","hasDefault","propsDefaults","mixinPropsCache","normalizePropsOptions","hasExtends","extendProps","raw2","normalizedKey","validatePropName","prop","propType","shouldCast","shouldCastTrue","typeName","isInternalKey","normalizeSlotValue","normalizeVNode","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","normalizeVNodeSlots","assignSlots","initSlots","updateSlots","needDeletionCheck","deletionComparisonTarget","setRef","rawRef","oldRawRef","parentSuspense","isUnmount","refValue","owner","oldRef","refs","_isString","_isRef","doSet","existing","queuePostRenderEffect","TeleportEndKey","isTeleport","isTeleportDisabled","isTargetSVG","isTargetMathML","resolveTarget","select","targetSelector","TeleportImpl","n1","n2","container","anchor","parentComponent","slotScopeIds","internals","mountChildren","patchChildren","patchBlockChildren","insert","querySelector","createText","createComment","disabled","dynamicChildren","placeholder","mainAnchor","targetAnchor","prepareAnchor","mount","container2","anchor2","wasDisabled","currentContainer","currentAnchor","traverseStaticChildren","moveTeleport","nextTarget","updateCssVars","unmount","hostRemove","doRemove","targetStart","shouldRemove","hydrateTeleport","parentAnchor","move","moveType","isReorder","node","nextSibling","parentNode","hydrateChildren","targetNode","Teleport","hasLoggedMismatchError","logMismatchError","isSVGContainer","isMathMLContainer","getContainerType","isComment","createHydrationFunctions","rendererInternals","mountComponent","patch","patchProp","hydrateNode","isFragmentStart","onMismatch","handleMismatch","domType","nextNode","Text","isTemplateNode","replaceNode","Static","needToAdoptContent","hydrateFragment","hydrateElement","locateClosingAnchor","createTextVNode","dirs","transition","forcePatch","needCallTransitionHooks","needTransition","content","next","isCustomElement","vnodeHooks","invokeVNodeHook","queueEffectWithSuspense","parentVNode","isText","fragmentSlotScopeIds","isFragment","next2","open","close","match","newNode","oldNode","parentNode2","createRenderer","baseCreateRenderer","createHydrationRenderer","createHydrationFns","hostInsert","hostPatchProp","hostCreateElement","hostCreateText","hostCreateComment","hostSetText","hostSetElementText","hostParentNode","hostNextSibling","hostSetScopeId","hostInsertStaticContent","getNextHostNode","processText","processCommentNode","mountStaticNode","processFragment","processElement","processComponent","moveStaticNode","removeStaticNode","mountElement","patchElement","vnodeHook","resolveChildrenNamespace","setScopeId","scopeId","cloneIfMounted","oldProps","newProps","toggleRecurse","patchProps","oldChildren","newChildren","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","updateComponent","initialVNode","createComponentInstance","setupComponent","setupRenderEffect","shouldUpdateComponent","updateComponentPreRender","componentUpdateFn","bu","u","nonHydratedAsyncRoot","locateNonHydratedAsyncRoot","originNext","nextTree","renderComponentRoot","prevTree","updateHOCHostEl","bm","isAsyncWrapperVNode","hydrateSubTree","scopedInitialVNode","update","nextVNode","prevProps","c1","prevShapeFlag","c2","patchKeyedChildren","patchUnkeyedChildren","unmountChildren","oldLength","commonLength","nextChild","l2","e1","e2","nextPos","s1","s2","keyToNewIndexMap","patched","toBePatched","moved","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","newIndex","increasingNewIndexSequence","getSequence","nextIndex","leave","delayLeave","afterLeave","remove2","performLeave","cacheIndex","shouldInvokeDirs","shouldInvokeVnodeHook","unmountComponent","removeFragment","performRemove","bum","um","invalidateMount","teleportEnd","currentNamespace","allowed","ch1","ch2","len","arrI","subComponent","ssrContextKey","useSSRContext","watchEffect","doWatch","watchSyncEffect","INITIAL_WATCHER_VALUE","immediate","deep","flush","once","onTrack","onTrigger","_cb","unwatch","reactiveGetter","source2","forceTrigger","isMultiSource","s","onCleanup","baseGetter","ssrCleanup","path","segments","depth","useModel","camelizedName","hyphenatedName","getModelModifiers","localValue","prevSetValue","prevEmittedValue","propValue","emittedValue","i2","modelName","emit","event","rawArgs","handlerName","onceHandler","normalizeEmitsOptions","extendEmits","normalizedFromExtend","withProxy","renderCache","fallthroughAttrs","proxyToUse","thisProxy","render2","getFunctionalFallthrough","blockStack","root","filterModelListeners","filterSingleRoot","recurse","singleRoot","prevChildren","nextProps","nextChildren","emits","hasPropsChanged","dynamicProps","emitsOptions","nextKeys","isSuspense","suspenseId","SuspenseImpl","mountSuspense","patchSuspense","hydrateSuspense","normalizeSuspenseChildren","Suspense","triggerEvent","eventListener","createElement","hiddenContainer","suspense","createSuspenseBoundary","setActiveBranch","newBranch","newFallback","activeBranch","pendingBranch","isInFallback","isHydrating","pendingId","parentSuspenseId","isSuspensible","isVNodeSuspensible","initialAnchor","resume","sync","effects","parentComponent2","delayEnter","hasUnresolvedAncestor","fallbackVNode","namespace2","mountFallback","optimized2","isInPendingSuspense","hydratedEl","asyncSetupResult","handleSetupResult","parentSuspense2","isSlotChildren","normalizeSuspenseSlot","block","trackBlock","isBlockTreeEnabled","currentBlock","closeBlock","branch","disableTracking","setupBlock","createElementBlock","createBaseVNode","normalizeKey","normalizeRef","ref_key","ref_for","isBlockNode","needFullChildrenNormalization","normalizeChildren","_createVNode","cloned","isClassComponent","guardReactiveProps","extraProps","mergeRef","cloneTransition","mergedProps","mergeProps","text","flag","createStaticVNode","numberOfNodes","createCommentVNode","asBlock","slotFlag","toMerge","incoming","emptyAppContext","uid","internalSetCurrentInstance","setInSSRSetupState","g","registerGlobalSetter","setters","setupResult","setupStatefulComponent","setup","setupContext","resolvedResult","finishComponentSetup","compile","skipOptions","template","compilerOptions","delimiters","componentCompilerOptions","finalCompilerOptions","attrsProxyHandlers","includeInferred","computed$1","propsOrChildren","svgNS","mathmlNS","doc","templateContainer","nodeOps","tag","is","selector","before","wrapper","TRANSITION","ANIMATION","vtcKey","Transition","resolveTransitionProps","DOMTransitionPropsValidators","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","propCount","getTransitionInfo","endEvent","ended","onEnd","styles","getStyleProperties","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","d","toMs","patchClass","isSVG","transitionClasses","vShowOriginalDisplay","vShowHidden","vShow","setDisplay","CSS_VAR_TEXT","displayRE","patchStyle","isCssString","hasControlledDisplay","prevStyle","setStyle","cssVarText","importantRE","prefixed","autoPrefix","prefixes","prefixCache","rawName","xlinkNS","patchAttr","isBoolean","patchDOMProp","needRemove","addEventListener","removeEventListener","veiKey","patchEvent","prevValue","nextValue","invokers","existingInvoker","parseName","invoker","createInvoker","optionsModifierRE","cachedNow","getNow","initialValue","patchStopImmediatePropagation","originalStop","isNativeOn","shouldSetAsProp","getModelAssigner","onCompositionStart","onCompositionEnd","assignKey","vModelText","lazy","trim","number","castToNumber","domValue","elValue","vModelCheckbox","modelValue","elementValue","getValue","checked","assign","found","filtered","getCheckboxValue","setChecked","vModelRadio","vModelSelect","isSetModel","selectedVal","o","setSelected","_binding","isMultiple","isArrayValue","option","optionValue","optionType","systemModifiers","modifierGuards","withModifiers","cacheKey","guard","keyNames","withKeys","eventKey","k","rendererOptions","renderer","enabledHydration","ensureRenderer","ensureHydrationRenderer","createApp","containerOrSelector","normalizeContainer","resolveRootNamespace","createSSRApp","suspectProtoRx","suspectConstructorRx","JsonSigRx","jsonParseTransform","warnKeyDropped","destr","_value","_lval","HASH_RE","AMPERSAND_RE","SLASH_RE","EQUAL_RE","IM_RE","PLUS_RE","ENC_CARET_RE","ENC_BACKTICK_RE","ENC_PIPE_RE","ENC_SPACE_RE","ENC_ENC_SLASH_RE","encode","encodeQueryValue","input","encodeQueryKey","encodePath","encodeParam","decode","decodeQueryKey","decodeQueryValue","parseQuery","parametersString","parameter","encodeQueryItem","stringifyQuery","query","PROTOCOL_STRICT_REGEX","PROTOCOL_REGEX","PROTOCOL_RELATIVE_REGEX","PROTOCOL_SCRIPT_RE","TRAILING_SLASH_RE","JOIN_LEADING_SLASH_RE","hasProtocol","inputString","opts","isScriptProtocol","protocol","hasTrailingSlash","respectQueryAndFragment","withoutTrailingSlash","fragment","fragmentIndex","s0","withTrailingSlash","hasLeadingSlash","withLeadingSlash","withBase","isEmptyURL","_base","joinURL","withoutBase","trimmed","withQuery","parsed","parseURL","mergedQuery","stringifyParsedURL","url","isNonEmptyURL","segment","url2","_segment","joinRelativeURL","_input","_b","_c","_d","JOIN_SEGMENT_SPLIT_RE","segmentsDepth","sindex","isEqual","protocolRelative","defaultProto","_specialProtoMatch","_proto","_pathname","parsePath","auth","hostAndPath","host","pathname","search","hash","FetchError","message","createFetchError","_e","errorMessage","requestStr","statusStr","fetchError","refKey","payloadMethods","isPayloadMethod","isJSONSerializable","textTypes","JSON_RE","detectResponseType","_contentType","contentType","resolveFetchOptions","request","defaults","Headers","headers","mergeHeaders","callHooks","retryStatusCodes","nullBodyResponses","createFetch","globalOptions","fetch","AbortController","isAbort","responseCode","retryDelay","$fetchRaw","_request","_options","abortTimeout","controller","responseType","parseFunction","$fetch","defaultOptions","customGlobalOptions","ofetch","useRuntimeConfig","appConfig","baseURL","buildAssetsDir","buildAssetsURL","publicAssetsURL","publicBase","flatHooks","configHooks","parentName","subHook","defaultTask","function_","_createTask","createTask","serialTaskCaller","task","promise","hookFunction","parallelTaskCaller","callEachWith","callbacks","arg0","Hookable","originalName","_unreg","_function","arguments_","deprecated","_hooks","deprecatedHooks","removeFns","unreg","caller","createHooks","createContext","isSingleton","checkConflict","als","_AsyncLocalStorage","_getCurrentInstance","_instance","replace","onRestore","asyncHandlers","createNamespace","defaultOpts","contexts","globalKey","defaultNamespace","asyncHandlersKey","executeAsync","restores","leaveHandler","restore2","restore","nuxtLinkDefaults","asyncDataDefaults","nuxtDefaultErrorValue","fetchDefaults","vueAppRootContainer","appId","outdatedBuildInterval","getNuxtAppCtx","appName","NuxtPluginIndicator","createNuxtApp","hydratingCount","nuxtApp","callWithNuxt","$name","defineGetter","useNuxtApp","runtimeConfig","registerPluginHooks","applyPlugin","applyPlugins","plugins","resolvedPlugins","unresolvedPlugins","parallels","errors","promiseDepth","executePlugin","unresolvedPluginsForThisPlugin","dependsOn","unexecutedPlugin","defineNuxtPlugin","_name","nuxt","tryUseNuxtApp","nuxtAppInstance","_event","parse","dec","eqIdx","endIdx","tryDecode","decode2","fieldContentRegExp","serialize","enc","encodedValue","maxAge","objectHash","hasher","createHasher","defaultPrototypesKeys","buff","write","objString","objType","objectLength","objectNumber","extraKeys","isNativeFunction","dispatchForKey","unordered","entry","contextAdditions","date","sym","bool","string","xml","regex","map","file","nativeFunc","nativeFuncLength","f","__defProp$1","__defNormalProp$1","__publicField$1","WordArray","words","sigBytes","encoder","Hex","wordArray","thatByte","hexChars","bite","Base64","keyStr","base64Chars","byte1","byte2","byte3","triplet","Latin1","latin1Str","latin1StrLength","Utf8","utf8Str","BufferedBlockAlgorithm","_dataWords","_offset","doFlush","processedWords","nBlocksReady","nWordsReady","nBytesReady","offset","Hasher","messageUpdate","__defProp","__defNormalProp","__publicField","H","K","W","SHA256","M","H2","gamma0x","gamma0","gamma1x","gamma1","ch","maj","sigma0","sigma1","t1","t2","nBitsTotal","nBitsLeft","sha256base64","hashed","object1","object2","hashOptions","_createMatcher","table","strictTrailingSlash","_matchRoutes","_createTableFromExport","matcherExport","property","createMatcherFromExport","matches","_sortRoutesMap","subPath","staticMatch","prototype","_defu","baseObject","merger","createDefu","defu","hasProp","__defProp$2","__defNormalProp$2","__publicField$2","H3Error","sanitizeStatusCode","sanitizeStatusMessage","createError","isError","originalMessage","DISALLOWED_STATUS_CHARS","statusMessage","statusCode","defaultStatusCode","PageRouteSymbol","useRouter","useRoute","isProcessingMiddleware","navigateTo","toPath","resolveRouteObject","windowFeatures","features","feature","isExternalHost","isExternal","inMiddleware","router","NUXT_ERROR_SIGNATURE","useError","showError","nuxtError","error2","clearError","isNuxtError","createH3Error","decode64","binaryString","asciiToBinary","arraybuffer","dv","KEY_STRING","output","buffer","accumulatedBits","UNDEFINED","HOLE","NAN","POSITIVE_INFINITY","NEGATIVE_INFINITY","NEGATIVE_ZERO","serialized","revivers","unflatten","hydrated","standalone","reviver","TypedArrayConstructor","base64","typedArray","array","TagsWithInnerContent","HasElementTags","ValidHeadTags","UniqueTags","TagConfigKeys","IsBrowser","hashCode","hashTag","thenable","thenFn","normaliseTag","tagName","normaliseProps","normaliseStyleClassProps","sep","v2","nestedNormaliseProps","virtual","startIndex","isDataKey","resolvedProps","TagEntityBits","nestedNormaliseEntryTags","headTags","tagPromises","tags","normaliseEntryTags","t","NetworkEvents","TAG_WEIGHTS","TAG_ALIASES","tagWeight","priority","weight","SortModifiers","allowedMetaProperties","tagDedupeKey","sepSub","sub","token","dotIndex","sepSubRe","processTemplateParams","decoded","tokens","hasSepSub","re","resolveTitleTemplate","title","renderDOMHead","head","dom","beforeRenderCtx","takenDedupeKeys","dedupeKey","trackCtx","$el","isAttrTag","ck","propIndex","k2","pending","frag","shouldRender","pos","debouncedRenderDOMHead","fn2","DomPlugin","initialPayload","head2","UsesMergeStrategy","DedupePlugin","generatedKey","dedupe","deduping","dupedTag","strategy","newTags","dupes","ValidEventTags","EventHandlersPlugin","dataset","ek","DupeableTags","HashKeyedPlugin","PayloadPlugin","payload","hasPayload","SortPlugin","prefix","position","tag2","aWeight","bWeight","SupportedAttrs","contentAttrs","TemplateParamsPlugin","templateParams","params","TitleTemplatePlugin","titleTag","titleTemplateTag","newTitle","XSSPlugin","activeHead","createHead","createHeadCore","filterMode","ssr","entryCount","p2","entryOptions","input2","resolveCtx","tagCtx","getActiveHead","Vue3","resolveUnref","resolveUnrefHeadInput","VueReactivityPlugin","headSymbol","vueInstall","createHead$1","_global","setHeadInjectionHandler","injectHead","useHead","clientUseHead","resolvedInput","manifest","matcher","fetchManifest","getAppManifest","getRouteRules","loadPayload","payloadURL","_getPayloadURL","isPrerendered","prerendered","_importPayload","filename","config","cdnURL","baseOrCdnURL","payloadPromise","parsePayload","rules","payloadCache","getNuxtClientPayload","inlineData","externalData","definePayloadReviver","revive","revive_payload_client_4sVQNw7RlN","__temp","__restore","__executeAsync","unheadPlugins","unhead_KgADcZ0jPj","createClientHead","pauseDOMUpdates","syncHead","klona","x","useRequestHeaders","include","useRequestFetch","CookieDefaults","store","useCookie","_opts","cookies","readRawCookies","hasExpired","cookieValue","cookie","cookieRef","channel","writeClientCookie","handleChange","watchPaused","hasScope","changeHandler","cookie2","serializeCookie","MAX_TIMEOUT_DELAY","shouldWatch","unsubscribe","elapsed","internalRef","createExpirationTimeout","timeRemaining","timeoutLength","freeGlobal","freeSelf","Symbol","objectProto","nativeObjectToString","symToStringTag","getRawTag","isOwn","unmasked","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","arrayMap","iteratee","length","INFINITY","symbolProto","symbolToString","baseToString","reWhitespace","trimmedEndIndex","reTrimStart","baseTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","isBinary","MAX_INTEGER","toFinite","sign","identity","asyncTag","funcTag","genTag","proxyTag","coreJsData","maskSrcKey","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","getNative","WeakMap","objectCreate","baseCreate","proto","apply","copyArray","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","count","lastCalled","stamp","remaining","constant","defineProperty","baseSetToString","setToString","arrayEach","baseFindIndex","predicate","fromIndex","fromRight","baseIsNaN","strictIndexOf","baseIndexOf","MAX_SAFE_INTEGER","reIsUint","isIndex","baseAssignValue","eq","assignValue","objValue","copyObject","customizer","isNew","nativeMax","overRest","transform","otherArgs","baseRest","isLength","isArrayLike","isIterateeCall","isPrototype","Ctor","baseTimes","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","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","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","overArg","nativeKeys","baseKeys","nativeKeysIn","baseKeysIn","isProto","keysIn","reIsDeepProp","reIsPlainProp","isKey","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","listCacheClear","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","FUNC_ERROR_TEXT","memoize","resolver","memoized","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","quote","subString","toString","castPath","toKey","baseGet","arrayPush","spreadableSymbol","isFlattenable","baseFlatten","isStrict","flatten","flatRest","getPrototype","objectCtorString","baseSlice","castSlice","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","reHasUnicode","hasUnicode","asciiToArray","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","reUnicode","unicodeToArray","stringToArray","createCaseFirst","methodName","strSymbols","chr","trailing","upperFirst","reAsciiWord","asciiWords","reHasUnicodeWord","hasUnicodeWord","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsBreakRange","rsApos","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsOrdLower","rsOrdUpper","rsEmoji","reUnicodeWord","unicodeWords","baseClamp","lower","upper","clamp","stackClear","stackDelete","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","baseAssign","baseAssignIn","allocUnsafe","cloneBuffer","isDeep","arrayFilter","resIndex","stubArray","nativeGetSymbols","getSymbols","symbol","copySymbols","getSymbolsIn","copySymbolsIn","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","getAllKeysIn","DataView","Promise","Set","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","initCloneArray","Uint8Array","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolValueOf","cloneSymbol","cloneTypedArray","initCloneByTag","initCloneObject","baseIsMap","nodeIsMap","baseIsSet","nodeIsSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","bitmask","stack","isFlat","isFull","isFunc","stacked","subValue","compact","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","arrValue","othValue","compared","othIndex","mapToArray","setToArray","equalByTag","convert","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","matchData","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","baseHasIn","hasPath","hasFunc","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","baseIteratee","createBaseFor","iterable","baseFor","baseForOwn","createBaseEach","eachFunc","collection","baseEach","now","nativeMin","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","debounced","isInvoking","isArrayLikeObject","baseToPairs","setToPairs","createToPairs","toPairs","reHasRegExpChar","escapeRegExp","baseMap","fromPairs","pair","isEmpty","mapKeys","mapValues","negate","baseUnset","customOmitClone","omit","paths","baseSet","nested","basePickBy","pickBy","omitBy","baseSortBy","comparer","compareAscending","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","compareMultiple","orders","objCriteria","othCriteria","ordersLength","order","baseOrderBy","iteratees","criteria","basePick","pick","nativeCeil","baseRange","step","createRange","range","sortBy","charsEndIndex","chrSymbols","charsStartIndex","chars","unzip","group","zip","baseZipObject","assignFunc","valsLength","zipObject","objectsEqual","removeFalsy","removeEmpty","sortKeys","unsorted","LANGUAGE_PREFIX_REGEXP","getPublicUrl","domain","getUrlFullPath","parsedUrl","getUrlWithoutProtocol","buildPath","elements","normalizePath","deleteFromPath","deletions","deletion","acc","addUrlParams","initialUrl","removeUrlParams","param","removeLanguagePrefix","isInterchaletUrl","searchParamsToSortedObject","searchParams","_typeof","toInteger","dirtyNumber","requiredArgs","required","toDate","argument","argStr","addDays","dirtyDate","dirtyAmount","amount","addMonths","dayOfMonth","endOfDesiredMonth","daysInMonth","addMilliseconds","timestamp","MILLISECONDS_IN_HOUR","addHours","getDefaultOptions","getTimezoneOffsetInMilliseconds","utcDate","startOfDay","MILLISECONDS_IN_DAY","differenceInCalendarDays","dirtyDateLeft","dirtyDateRight","startOfDayLeft","startOfDayRight","timestampLeft","timestampRight","addSeconds","max","dirtyDatesArray","datesArray","currentDate","millisecondsInMinute","millisecondsInHour","millisecondsInSecond","isSameDay","dateLeftStartOfDay","dateRightStartOfDay","isValid","compareLocalAsc","dateLeft","dateRight","differenceInDays","difference","isLastDayNotFull","differenceInMilliseconds","eachDayOfInterval","dirtyInterval","_options$step","interval","startDate","endDate","endTime","dates","subMilliseconds","getUTCDayOfYear","startOfYearTimestamp","startOfUTCISOWeek","weekStartsOn","day","getUTCISOWeekYear","year","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","startOfUTCISOWeekYear","fourthOfJanuary","MILLISECONDS_IN_WEEK","getUTCISOWeek","startOfUTCWeek","_ref","_ref2","_ref3","_options$weekStartsOn","_options$locale","_options$locale$optio","_defaultOptions$local","_defaultOptions$local2","getUTCWeekYear","_options$firstWeekCon","firstWeekContainsDate","firstWeekOfNextYear","firstWeekOfThisYear","startOfUTCWeekYear","firstWeek","getUTCWeek","addLeadingZeros","targetLength","formatters","signedYear","month","dayPeriodEnumValue","numberOfDigits","milliseconds","fractionalSeconds","dayPeriodEnum","localize","era","lightFormatters","signedWeekYear","weekYear","twoDigitYear","isoWeekYear","quarter","week","isoWeek","dayOfYear","dayOfWeek","localDayOfWeek","isoDayOfWeek","hours","_localize","originalDate","timezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","dirtyDelimiter","absOffset","minutes","delimiter","dateLongFormatter","formatLong","timeLongFormatter","dateTimeLongFormatter","matchResult","datePattern","timePattern","dateTimeFormat","longFormatters","protectedDayOfYearTokens","protectedWeekYearTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","throwProtectedError","format","formatDistanceLocale","formatDistance","tokenValue","buildFormatLongFn","width","dateFormats","timeFormats","dateTimeFormats","formatRelativeLocale","formatRelative","_date","_baseDate","buildLocalizeFn","dirtyIndex","valuesArray","defaultWidth","_defaultWidth","_width","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","rem100","buildMatchFn","matchPattern","matchedString","parsePatterns","findIndex","findKey","rest","buildMatchPatternFn","parseResult","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","locale","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","dirtyFormatStr","_ref4","_options$locale2","_options$locale2$opti","_ref5","_ref6","_ref7","_options$locale3","_options$locale3$opti","_defaultOptions$local3","_defaultOptions$local4","formatStr","defaultLocale","formatterOptions","substring","firstCharacter","longFormatter","cleanEscapedString","formatter","matched","formatISO","_options$format","_options$representati","representation","tzOffset","dateDelimiter","timeDelimiter","absoluteOffset","hourOffset","minuteOffset","hour","minute","second","separator","isAfter","dirtyDateToCompare","dateToCompare","isBefore","isFuture","isPast","subDays","minutesToMilliseconds","parseISO","_options$additionalDi","additionalDigits","dateStrings","splitDateString","parseYearResult","parseYear","parseDate","parseTime","parseTimezone","patterns","dateRegex","timeRegex","timezoneRegex","dateString","timeString","captures","century","isWeekDate","parseDateUnit","validateWeekDate","dayOfISOWeekYear","validateDate","validateDayOfYearDate","parseTimeUnit","seconds","validateTime","timezoneString","validateTimezone","fourthOfJanuaryDay","daysInMonths","isLeapYearIndex","_year","_hours","REDIRECTED_FROM_COOKIE_LIFETIME_S","useRedirection","fromInterchalet","save","_00_45redirect_45global","useStateKeyPrefix","useState","autoKey","init","_01_45ip_45global","useParams","useStores","useUseragent","useAB","useConsent","usePopups","useIDs","useToggler","useTracking","useAuth","useBookmarks","useConfdata","useFlexTrip","usePageHead","usePartner","useReviews","useSearch","useSettings","useUser","useUserSurvey","_02_45params_45global","_03_45partner_45global","_04_45ids_45global","useRequestURL","Subscribable","listener","isServer","noop","functionalUpdate","updater","isValidTimeout","timeUntilStale","updatedAt","staleTime","resolveStaleTime","resolveEnabled","enabled","matchQuery","exact","fetchStatus","queryKey","stale","hashQueryKeyByOptions","partialMatchKey","isActive","matchMutation","mutation","status","mutationKey","hashKey","replaceEqualDeep","isPlainArray","aItems","aSize","bItems","bSize","copy","equalItems","shallowEqualObjects","hasObjectPrototype","ctor","prot","sleep","replaceData","prevData","addToEnd","items","newItems","addToStart","skipToken","ensureQueryFn","fetchOptions","_focused","_cleanup","_setup","FocusManager","__privateAdd","__privateSet","onFocus","__privateGet","focused","isFocused","focusManager","_online","OnlineManager","onOnline","onlineListener","offlineListener","online","onlineManager","pendingThenable","_resolve","_reject","finalize","reason","defaultRetryDelay","failureCount","canFetch","networkMode","CancelledError","isCancelledError","createRetryer","isRetryCancelled","isResolved","continueFn","cancelOptions","cancelRetry","continueRetry","canContinue","canStart","pause","continueResolve","run","promiseOrValue","initialPromise","shouldRetry","createNotifyManager","transactions","notifyFn","batchNotifyFn","scheduleFn","schedule","originalQueue","notifyManager","_gcTimeout","Removable","newGcTime","_initialState","_revertState","_cache","_retryer","_defaultOptions","_abortSignalConsumed","_Query_instances","dispatch_fn","Query","getDefaultState","newData","__privateMethod","setStateOptions","observer","abortController","addSignalProperty","fetchFn","queryFn","queryFnContext","action","reducer","fetchState","hasData","initialDataUpdatedAt","_queries","QueryCache","client","queryHash","queryInMap","defaultedFilters","queries","_observers","_mutationCache","_Mutation_instances","Mutation","variables","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","restored","isPaused","_mutations","_mutationId","MutationCache","__privateWrapper","scopeFor","mutations","firstPendingMutation","foundMutation","pausedMutations","infiniteQueryBehavior","pages","direction","oldPages","oldPageParams","currentPage","fetchPage","previous","page","maxPages","addTo","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pageParams","_queryCache","_queryDefaults","_mutationDefaults","_mountCount","_unsubscribeFocus","_unsubscribeOnline","QueryClient","cachedData","defaultedOptions","queryCache","refetchFilters","defaultedCancelOptions","promises","queryDefault","_client","_currentQuery","_currentQueryInitialState","_currentResult","_currentResultState","_currentResultOptions","_currentThenable","_selectError","_selectFn","_selectResult","_lastQueryWithDefinedData","_staleTimeoutId","_refetchIntervalId","_currentRefetchInterval","_trackedProps","_QueryObserver_instances","executeFetch_fn","updateStaleTimeout_fn","computeRefetchInterval_fn","updateRefetchInterval_fn","updateTimers_fn","clearStaleTimeout_fn","clearRefetchInterval_fn","updateQuery_fn","notify_fn","QueryObserver","shouldFetchOnMount","shouldFetchOn","notifyOptions","prevOptions","prevQuery","shouldFetchOptionally","nextRefetchInterval","shouldAssignObserverCurrentProperties","onPropTracked","trackedResult","prevResult","prevResultState","prevResultOptions","queryInitialState","newState","isPlaceholderData","fetchOnMount","fetchOptionally","errorUpdatedAt","selectError","placeholderData","isFetching","isPending","isLoading","nextResult","isStale","finalizeThenableIfPossible","recreateThenable","prevThenable","defaultNotifyOptions","shouldNotifyListeners","notifyOnChangeProps","notifyOnChangePropsValue","includedProps","typedKey","nextInterval","shouldLoadOnMount","field","optimisticResult","_currentMutation","_mutateOptions","_MutationObserver_instances","updateResult_fn","MutationObserver","defaultTransformerFn","dehydratedState","mutationCache","deserializeData","mutationOptions","meta","_ignored","serializedState","isVue2","VUE_QUERY_CLIENT","getClientKey","suffix","updateState","_cloneDeep","customize","currentKey","currentLevel","cloneDeep","cloneDeepUnref","unrefGetters","level","shouldThrowError","throwOnError","useQueryClient","queryClient","QC","MC","vueQueryConfig","filtersCloned","optionsCloned","VueQueryPlugin","clientKey","clientConfig","persisterUnmount","originalUnmount","useBaseQuery","Observer","clonedOptions","defaulted","isRestoring","refetch","stopWatch","useQuery","useMutation","mutate","mutateOptions","resultRefs","useConfDataQuery","requestFetch","urlWithoutProtocol","queryParams","urlString","useCurrentURL","currentRoute","useConfDataURL","currentUrl","partner","_06_45conf_45global","location","redirectCode","external","_07_45ab_45global","useL10N","formatDatetime","timezone","formats","isValidDate","tryParseInt","tryParseFloat","positiveMod","modulus","exports","module","tzTokenizeDate","timeZone","dtf","getDateTimeFormat","partsOffset","hackyOffset","typeToPos","formatted","filled","dtfCache","testDateFormatted","hourCycleSupported","newDateUTC","fullYear","millisecond","MILLISECONDS_IN_MINUTE","tzParseTimezone","isUtcDate","isValidTimezoneIANAString","toUtcDate","calcOffset","fixedOffset","fixOffset","asUTC","asTS","over","localTS","utcGuess","o2","o3","validIANATimezoneCache","timeZoneString","tzPattern","DEFAULT_ADDITIONAL_DIGITS","dirtyOptions","restDateString","parts","patternYYY","patternYYYYY","yearString","centuryString","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","isLeapYear","utcToZonedTime","offsetMilliseconds","resultDate","tryParseDate","sameDay","first","dateBefore","dateAfter","dateBetween","datesEqual","inFuture","inPast","daysBefore","daysAdd","days","monthsAdd","months","daysSub","hoursAdd","toServerDate","toDateFormat","calculateDuration","calculateCheckoutDate","checkin","daysSubWithLimit","limit","parsedDate","parsedLimit","pastDate","isWinter","formatDateRange","dateFormat","toLocaldate","isDateRangeValid","getDateRangeInDays","toShortDate","getDateRangeEachDay","isValidDatePeriod","isFlexDatePeriod","isFuzzyDatePeriod","eec","productImpression","productClick","productDetailImpression","addToCart","removeFromCart","getDiscount","basePrice","reduction","createCartObject","accom","effectivePrice","brand","pushElem","createImpressions","accoms","pagetype","price","seoify","accommodation","typeMapping","detailType","detailTypeMapping","country","region","place","category","createProduct","pageload","dataLayerPageLoad","detailPageEvent","myrentPageEvent","homePageEvent","searchPageEvent","contentPageEvent","reviewsPageEvent","newsletterPageEvent","bookmarksPageEvent","unknownPageEvent","pushEvent","PageLoadHandler","addDetailData","addMyrentData","addHomeData","addSearchData","addContentData","addReviewsData","addNewsletterData","addBookmarksData","addUnknownData","confData","redirectParams","active","allFeatures","partnerBlock","accomBlock","conf","pagetypeCluster","filter","pageType","pageTypeVue","common","allCountriesClick","showCompleteEditableTextClick","reviewsDetailsOpened","reviewsDetailsClosed","reviewsShowTranslation","reviewsHideTranslation","displayState","sorting","toggleBookmark","objectMap","generalMap","paging","headerImpression","objectImpression","freeCancellationImpression","topRegionsImpression","topPlacesImpression","seoTextImpression","requestTravelguide","topNaturalSightsRequest","topNaturalSightsImpression","seoContentImpression","footerImpression","labelImpression","objectTeaserViewed","objectTeaserClicked","weatherInfoImpression","articleTeaserVisible","articleTeaserScrollClick","articleTeaserDetails","zeroResultsBannerDisplayed","results","resultCount","datesArrivalSelect","datesDurationSelect","datesModeSwitch","datesDurationSelectFlex","datesClear","datesApply","criterion","total","_trackContentAssets","eventAction","eventNonInteraction","getVirtPath","destination","virtpath","OBJECT_TEASER_TYPE_NAMES","OBJECT_TEASER_BLOCK_NAMES","trip","countryEN","regionEN","placeEN","checkout","_detectSearchType","flexible","searchType","detail","galleryNavigation","sidebarArrivalDate","sidebarDateClick","calendarDurationOpened","calendarDurationSelect","datepickerInteraction","ratingHeartsClick","addToWishlist","deleteFromWishlist","openRecommendationLayer","recommendByMail","paxSelected","contactClick","generalRequestClick","offerRequestClick","labelClick","attributeImpression","descriptionImpression","showDescriptionText","mapImpression","calendarImpression","costOverviewImpression","reviewsImpression","tooltipAdditionalCosts","mouseoverCostoverviewInfo","houseAccommodationsClick","generalRequestSubmitSuccess","generalRequestSubmitError","monthlyPricesSelect","monthlyPricesNext","monthlyPricesPrevious","allImages","imageClick","galleryImageClick","galleryAddFavorite","galleryRemoveFavorite","galleryOpenRecommend","galleryClose","lightboxNextImage","lightboxPreviousImage","lightboxAddFavorite","lightboxRemoveFavorite","lightboxOpenRecommend","lightboxClose","closeLayers","cancelConditions","externalUserSurvey","linkedObjectsTeaserViewed","linkedObjectsTeaserClicked","accommodationCode","eventLabel","labels","rating","contactType","contactTypes","label","code","monthName","nonInteraction","teaser","heroSliderElementImpression","facettedHeaderElementImpression","facettedHeaderElementClick","topCountryTeaserElementImpression","topCountryTeaserElementClick","topRegionTeaserElementImpression","topRegionTeaserElementClick","holidayIdeasElementImpression","holidayIdeasElementClick","landingPageElementImpression","landingPageElementClick","landingTeaserElementImpression","landingTeaserElementClick","creative","sequenceNumber","numberedIndex","virtPathOrigin","virtPathTarget","landingTeaserElementEvent","teasers","link","header","logoClick","sitenavigationClick","languageSwitch","currencySwitch","uspClosed","phoneClick","historyOpened","historyItemClick","headerItemClick","enterGuestWorld","lang","currencyCode","uspIndex","millisecondsDisplayed","dispayTimeRoundedToHalfSeconds","accommodationID","facette","delta","facets","generateAction","generateLabelValue","generateCount","attributes","filterMapping","cat","labelname","quicksearch","submitSearch","autosuggestItemSelected","numberPax","pax","start$1","editableTextblockImpression","showedTeaserToBooking","clickedTeaserToBooking","closedTeaserToBooking","newsletter","registration","registrationHeID","registrationFailed","registrationFailedAdditional","optIn","optInHeID","unsubscribeSubmit","bannerDisplayed","bannerSubscribe","heid","recommendation$1","display","toggleWishlist","view","scroll","sendEvent","send","contentAssets","secretSpotsDisplayed","secretSpotsReadMore","threeDaySummaryDisplayed","threeDaySummaryReadMore","touristicActivitiesDisplayed","touristicActivitiesReadMore","impression","searchTeaser","recommendation","interchaletMigration","popupDisplayed","popupReadMore","trackPopup","landingPages","topicsImpression","topicsClicked","topicsTracking","homepage","whyElementImpression","footerElementImpression","footerChangeCountryAndLanguage","footerSocialMediaLinkElementClick","newsletterBannerImpression","newsletterBannerSubscribe","safetyInformationsImpression","safetyInformationsClick","headerLogoClick","headerContactUsClick","headerWishlistClick","headerSelectLanguage","headerSiteNavigation","popularDestinationLinksImpression","popularDestinationLinksClick","uniqueSellingPointsImpression","rentalSpecialistImpression","homeOwnerTeaserImpression","homeOwnerTeaserClick","topCategorySliderDisplayed","topCategorySliderView","topCategorySliderNext","topCategorySliderPrevious","homePageTracking","media","HEADER_NAVIGATION_LABELS","topCategorySliderTracking","topics","replacePlaceholders","pluralize","textResource","choices","extractAccommodationCode","extractQueryParamValue","cleanedStr","dateToString","accomodationCategory","translatedAccommodationToProductItem","resultDocumentCategory","isResultDocument","resultDocumentsToProductItems","removeFromWishlist","selectItem","listId","selectPromotion","viewItem","viewItemList","documents","viewPromotion","discount","ecommerce","imageCarousel","displayed","announcements","route","announcement","handpicked","wishlists","addProperty","createWishlist","addPropertyRedirect","addPropertyRedirectSuccess","handlers","_10_45tracking_45global","getFeatureVariantEnabled","isEnabled","toggleFeature","variant","useFeature","$unleash","replaceAbbreviation","variants","toggle","word","useFlag","DESTINATION_PARAMS","DATE_PARAMS","PAX_PARAMS","ROOM_PARAMS","NUMBER_PARAMS","ACCOMMODATION_TYPE_PARAMS","REDESIGN_ACCOMMODATION_TYPE_PARAMS","REDESIGN_PROPERTY_TYPE_PARAMS","SPECIAL_PARAMS","STARS_PARAMS","POOL_PARAMS","PETS_PARAMS","DISTANCE_PARAMS","FEATURE_PARAMS","OFFER_PARAMS","PRICE_PARAMS","HOLIDAY_TYPE_PARAMS","ACTIVITY_PARAMS","TEXT_PARAMS","GEO_COORD_PARAMS","SEASON_PARAMS","PAGE_PARAMS","SORT_PARAMS","ALLOWED_SEARCH_PARAMS","ALLOWED_QUERY_PARAMS","unpack","asQueryParams","hasDateParams","addDatesFuzziness","fuzziness","SORT_DEFAULT","getDestinationName","getDestinationQuery","countryCode","regionCode","placeCode","buildCode","codes","geoByCode","getLegacyGeoCode","splitDestinationPath","joinDestinationPath","getDestinationForFilter","urlPath","extra","filterParams","pickFiltered","FILTERS_BEDROOMS_MIN","FILTERS_BEDROOMS_MAX","FILTERS_BATHROOMS_MIN","FILTERS_BATHROOMS_MAX","FILTERS_PAX_MIN","FILTERS_PAX_MAX","FILTERS_PETS_MIN","FILTERS_PETS_MAX","SEARCH_PAGE_TYPE","SEARCH_PAGE_DEFAULT_PATH","DESTINATIONS_MAP","SEARCH_URL_PARAMS","SEARCH_URL_PARAMS_SET","isSearchURLParam","getDestinationFacetByCode","addDestinationFacet","facet","triggerDestinationFacetsRef","extractFacetsApiValues","apiKeys","defineFacetConf","searchStateKey","searchApiKeys","valueType","newSearchStateKey","mapSearchStateToSearchApiParams","FILTER_FACETS","FACETS_MAP","searchParamsKeysToObject","searchAppUrlParamsToDatesState","fuzzyness","datesStateToSearchApiParams","flexDays","enumerationParamsToMultiSelect","names","list","enumerationParamsToSingleSelect","mapSearchStateToURLParams","searchApiParams","mapSearchParamsToSearchState","lat","lon","buildSearchUrl","defaultPath","filtersConf","countrySlug","regionSlug","placeSlug","maxPathLength","confs","slugs","slug","SEARCH_API_PAGESIZE_DEFAULT","SEARCH_API_ALLOWED_PARAMS","mapSearchApiParams","setDocPosition","pagesize","useRedesignSearchQuery","l10n","__","q","signal","useRedesignSearchAccommodationsQuery","propToRef","objRef","useI18n","getInitialDatePeriodFromFlexTrip","flexTrip","useDatesTripText","dateState","getDatesTripText","getDatesDurationText","getDatesFuzzinessText","durationVal","useRouteSearchState","observingUrl","currentURL","dataValue","mapRouteConfToSearchState","paramsFromURLQueryParams","defineSearchState","initialState","stateRef","useSyncDestinationsFacet","searchState","facetData","destFacet","useSearchGeneratedUrl","prefixSearchPage","langPrefix","searchfilterconfs","useSearchResults","isSearchLoading","totalPages","useFacets","useFacet","facetConf","generateUniqueKey","facetPending","facetLoading","countsData","countsPending","countsLoading","counts","countsMap","useSearchDestinationBreadcrumbs","useSelectedSearchStateValues","skipKeys","trPrefixFacets","trPrefixSearch","toLabel","selected","min","innerKey","innerValue","removeAll","SEARCH_DEBOUNCE_TIME","createSearchQuery","searchFilterConfs","pathParts","filterName","iframe","_11_45search_45global","previousPagetype","searchQuery","manifest_45route_45rule","globalMiddleware","_08_45auth_45global","_09_45user_45global","getRouteFromPath","fullPath","router_CaKIoANnI2","initialURL","routes","registerHook","handleNavigation","middleware","route2","navigate","initialLayout","middlewareEntries","routeRules","PARTNER_ID_REGEXP","getPartnerId","hex2hsl","hex","cmin","cmax","hsl2hex","color","__unimport_colors","colors","applyIframeParamsColors","siteColors","tryParseBoolean","getQueryLegacyParams","distanceParams","legacyParams","sortingMap","distanceMap","getQueryTripParams","getQueryCoordinatesParams","radius","heading","params_plugin_dpdsDh23tL","ssrParams","persistent","redirect","all","currency","$params","rawQuery","getUnifiedParams","parsedParams","otherParams","requestIdleCallback","idleDeadline","cancelIdleCallback","onNuxtReady","tryOnScopeDispose","objectRef","isClient","notNullish","isIOS","getIsIOS","createFilterWrapper","bypassFilter","invoke","debounceFilter","ms","timer","maxTimer","lastRejector","_clearTimeout","timer2","maxDuration","pausableFilter","extendFilter","eventFilter","directiveHooks","getLifeCycleTarget","toRef$1","useDebounceFn","refDebounced","watchWithFilter","watchPausable","toRefs$1","newObject","tryOnMounted","useToggle","truthyValue","falsyValue","valueIsRef","truthy","watchOnce","stop","unrefElement","elRef","plain","defaultWindow","useEventListener","events","listeners","cleanups","options2","optionsClone","_iOSWorkaround","onClickOutside","window","ignore","capture","detectIframe","shouldListen","shouldIgnore","target2","useMounted","useSupported","useMutationObserver","isSupported","targets","targets2","takeRecords","useActiveElement","triggerOnRemoval","document","getDeepActiveElement","_a2","element","activeElement","getHandlers","getSSRHandler","guessSerializerType","rawInit","StorageSerializers","customStorageEventName","useStorage","storage","listenToStorageChanges","writeDefaults","mergeDefaults","initOnMounted","serializer","pauseWatch","resumeWatch","pausableWatch","updateFromCustomEvent","dispatchWriteEvent","read","useIntersectionObserver","rootMargin","threshold","_target","root2","useEventBus","on","_off","off","_listener","useFocus","focusVisible","preventScroll","innerFocused","targetElement","useFocusWithin","resolveElement","useLocalStorage","checkOverflowScroll","ele","preventDefault","rawEvent","elInitialOverflow","useScrollLock","isLocked","stopTouchMoveListener","initialOverflow","lock","unlock","BREAKPOINTS_MAP","BREAKPOINTS_ENTRIES","HAS_RESIZE_OBSERVER_SUPPORT","runtime_screen_plugin_533699b7_Tw2FoQhacS","viewportWidth","serverWidth","height","pageSize","getPageSize","breakpoints","useBreakpoints","$screen","getBreakpointNameByWidth","observers","newPageSize","viewportHeight","getViewportSize","debouncedUpdate","resizeObserver","stopThis","sizeName","breakpoint","createTranslationMap","propName","getTranslation","translations","i18n_VfGcjrvSkj","combineTranslations","translationsObj","pageTranslations","pageLocale","pageLanguage","language","translationMap","plural","newTranslations","newLanguage","newLocale","$i18nMimic","$t","$l10n","isDefer","useAsyncData","_handler","getDefault","getDefaultCachedData","hasCachedData","asyncData","_result","clearNuxtDataByKey","initialFetch","fetchOnServer","cbs","unsub","asyncDataPromise","newObj","useFetch","arg1","arg2","generateOptionSegments","server","defaultFn","getCachedData","_fetchOptions","_asyncDataOptions","timeoutId","_obj","unwrapped","preloadRouteComponents","reloadNuxtApp","handledPath","clientOnlySymbol","__nuxt_component_2$3","fallbackStr","fallbackTag","ATTR_KEY","SEPARATOR","useId","instanceIndex","ids","firstNonUndefined","defineNuxtLink","componentName","resolveTrailingSlashBehavior","applyTrailingSlashBehavior","useNuxtLink","hasTarget","isAbsoluteUrl","builtinRouterLink","useBuiltinLink","href","href2","prefetched","isSlowConnection","idleId","unobserve","useObserver","routerLinkProps","rel","__nuxt_component_0$5","trailingSlash","normalizeFn","observe","callback2","cn","activePinia","setActivePinia","pinia","piniaSymbol","MutationType","createPinia","toBeInstalled","addSubscription","subscriptions","removeSubscription","idx","triggerSubscriptions","fallbackRunWithContext","ACTION_MARKER","ACTION_NAME","mergeReactiveObjects","patchToApply","subPatch","targetValue","skipHydrateSymbol","skipHydrate","shouldHydrate","isComputed","createOptionsStore","hot","actions","getters","localState","computedGetters","createSetupStore","$id","isOptionsStore","optionsForPlugin","$subscribeOptions","isListening","isSyncListening","actionSubscriptions","debuggerEvents","activeListener","$patch","partialStateOrMutator","subscriptionMutation","myListenerId","$reset","$state","$dispose","wrappedAction","afterCallbackList","onErrorCallbackList","after","partialStore","stopWatcher","setupStore","actionValue","extender","defineStore","idOrOptions","setupOptions","isSetupStore","useStore","hasContext","storeToRefs","undefined","LIBVERSION","EMPTY","UNKNOWN","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","UA_MAX_LENGTH","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","EDGE","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","CHROMIUM_OS","MAC_OS","regexes","extensions","mergedRegexes","enumerize","enums","str1","str2","lowerize","majorize","rgxMapper","ua","arrays","strMapper","oldSafariMap","windowsVersionMap","UAParser","_navigator","_ua","_uach","_rgxmap","_isSelfNav","_browser","_cpu","_device","_engine","_os","$","parser","this","useUseragentStore","useragent","usePageHeadStore","pageHeader","useSettingsStore","settings","urlAlphabet","nanoid","bytes","scopedUrlAlphabet","useIDsStore","useUserSessionCookies","user","session","cycle","useTogglerStore","toggler","toggles","toggleElement","STORAGE_KEY","useConsentStore","consent","configOpen","useGuestWorldApi","addAccommodationToWishlist","wishlistId","accommCode","deleteAccommodationFromWishlist","Ie","fe","pe","me","J","he","Oe","be","Pe","ie","ge","Le","$e","Be","qe","Me","E","T","N","S","I","ee","D","F","we","te","Re","Fe","Ce","Ue","w","xe","le","de","A","De","ke","He","ne","Ae","it","se","C","Ee","Q","ye","ze","ae","Y","P","G","je","Ge","Ve","V","Te","Qe","We","B","z","Ke","Z","Ye","Ze","Xe","Je","et","oe","tt","nt","Ne","at","ot","st","y","O","U","R","ue","rt","Se","X","ve","lt","dt","L","ut","ct","ft","TOAST_DURATION_DEFAULT","useToaster","show","toast","warning","success","info","untyped","useWishlistStore","accommodationMap","wishlist","rawAccom","closeWishlistEvt","createWishlistMutation","wishlistName","addAccommodationMutation","deleteAccommodationMutation","selectAccommodationToAdd","useUserStore","signedIn","email","firstName","lastName","initials","avatarUrl","profileImg","toFormData","formData","useWebccApi","gaCookie","gaUserId","jwt","reviews","recommendations","accommodationImages","season","accommodationReviews","accommodationVacancies","accommodationCheckTrip","translate","emailsSubscribe","emailsUnsubscribe","emailsConfirm","emailsOptIn","personalCatalogCreate","personalCatalog","usePartnerStore","usePartnerCookies","directEncashment","salesoffice","getPartner","validPartnerId","_jwt","getPartnerFromJwt","PARTNER_ID_WHITELIST","getPartnerIdForReferrer","referrer","substrings","useTrackingStore","gtag","useGtag","pageloadHandler","trackPageLoad","initialConsent","trackConsentDefault","loadGTM","pageLoadEvents","isPageLoadEvent","createConsentEventData","createConsentDetailedEventData","trackConsentUpdate","gtmID","script","statistics","isFreeCancellation","percent","getFreeCancellationRange","conditions","useConfApi","useConfdataStore","globalParams","company","domainInEnvironment","baseData","currencies","siteSettings","paymentForms","siteCode","footer","links","additionalBody","body","seoLinks","languagePrefix","domainsCountryCode","sites","logoCaption","pageID","prefixSearchpage","prefixReviewspage","bodyComponentsByName","signupEnabled","freeCancellationRange","description","image","viewport","canonical","ogURL","additional","existingData","requestData","requestError","newPath","getLocalizedUrl","newQuery","localeUrl","isCanonicalPage","canonicalUrl","useABStore","allABs","sessionStorageKeys","ab","tests","testsFromQuery","test","createAB","validDomain","validDevice","numericalId","stringToNumber","weightedVariants","curr","useBookmarksStore","catalog","append","accommCodes","createPersonalCatalog","loadPersonalCatalog","bind","getPrototypeOf","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isArrayBufferView","isNumber","isFile","isBlob","isFileList","isStream","isFormData","kind","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","forEach","allOwnKeys","isContextDefined","merge","caseless","targetKey","stripBOM","inherits","constructor","superConstructor","descriptors","toFlatObject","sourceObj","destObj","propFilter","endsWith","searchString","toArray","TypedArray","forEachEntry","iterator","matchAll","regExp","isHTMLForm","toCamelCase","p1","isRegExp","reduceDescriptors","reducedDescriptors","freezeMethods","toObjectSet","arrayOrString","define","toFiniteNumber","ALPHA","DIGIT","ALPHABET","generateString","alphabet","isSpecCompliantForm","toJSONObject","visit","reducedValue","isAsyncFn","isThenable","_setImmediate","setImmediateSupported","postMessageSupported","asap","utils$3","AxiosError","response","utils","customProps","axiosError","httpAdapter","isVisitable","removeBrackets","renderKey","dots","isFlatArray","predicates","metaTokens","visitor","defaultVisitor","indexes","useBlob","convertValue","exposedHelpers","build","charMap","AxiosURLSearchParams","_encode","buildURL","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","fulfilled","rejected","transitionalDefaults","URLSearchParams$1","FormData$1","Blob$1","platform$1","URLSearchParams","FormData","Blob","hasBrowserEnv","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","origin","platform","toURLEncodedForm","helpers","parsePropPath","arrayToObject","formDataToJSON","isNumericKey","isLast","stringifySafely","hasJSONContentType","isObjectPayload","_FormData","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","ignoreDuplicateOf","parseHeaders","rawHeaders","line","$internals","normalizeHeader","normalizeValue","parseTokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","char","buildAccessors","accessorName","arg3","AxiosHeaders$1","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","setHeaders","deleted","deleteHeader","asStrings","accessors","defineAccessor","AxiosHeaders","mapped","headerValue","transformData","isCancel","CanceledError","settle","validateStatus","parseProtocol","speedometer","samplesCount","timestamps","tail","firstSampleTS","chunkLength","startedAt","bytesCount","passed","throttle","freq","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","progressBytes","rate","inRange","progressEventDecorator","throttled","lengthComputable","asyncDecorator","isURLSameOrigin","msie","urlParsingNode","originURL","resolveURL","requestURL","expires","secure","isAbsoluteURL","combineURLs","relativeURL","buildFullPath","requestedURL","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","resolveConfig$1","newConfig","withXSRFToken","xsrfHeaderName","xsrfCookieName","xsrfValue","isXHRAdapterSupported","xhrAdapter","_config","resolveConfig","requestHeaders","onUploadProgress","onDownloadProgress","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","onloadend","responseHeaders","timeoutErrorMessage","composeSignals","signals","aborted","onabort","streamChunk","chunk","chunkSize","readBytes","readStream","stream","reader","trackStream","onProgress","onFinish","_onFinish","loadedBytes","isFetchSupported","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","DEFAULT_CHUNK_SIZE","supportsResponseStream","resolvers","getBodyLength","resolveBodyLength","fetchAdapter","cancelToken","withCredentials","composedSignal","requestContentLength","contentTypeHeader","isCredentialsSupported","isStreamResponse","responseContentLength","responseData","knownAdapters","renderReason","isResolvedHandle","adapter","adapters$1","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","dispatchRequest","validators","deprecatedWarnings","validator","formatMessage","desc","assertOptions","schema","allowUnknown","Axios$1","instanceConfig","configOrUrl","dummy","paramsSerializer","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","chain","onFulfilled","onRejected","Axios","generateHTTPMethod","isForm","CancelToken$1","CancelToken","executor","resolvePromise","onfulfilled","abort","spread","isAxiosError","HttpStatusCode","createInstance","defaultConfig","axios","Cancel","formToJSON","getAdapter","BASE_PATH","BaseAPI","configuration","basePath","globalAxios","RequiredError","msg","operationServerMap","DUMMY_BASE_URL","assertParamExists","functionName","paramName","paramValue","setFlattenedQueryParams","urlSearchParams","setSearchParams","objects","serializeDataIfNeeded","requestOptions","nonString","toPathString","createRequestFunction","axiosArgs","axiosRequestArgs","__awaiter","_arguments","generator","adopt","FrontendApiAxiosParamCreator","refresh","aal","returnTo","loginChallenge","organization","via","localVarPath","localVarUrlObj","baseOptions","localVarRequestOptions","localVarHeaderParameter","localVarQueryParameter","headersFromBaseOptions","afterVerificationReturnTo","xSessionToken","returnSessionTokenExchangeCode","initCode","returnToCode","perPage","pageToken","performNativeLogoutBody","tokenizeAs","flow","updateLoginFlowBody","updateRecoveryFlowBody","updateRegistrationFlowBody","updateSettingsFlowBody","updateVerificationFlowBody","FrontendApiFp","localVarAxiosParamCreator","localVarAxiosArgs","operationBasePath","FrontendApi","requestParameters","Configuration","mime","jsonMime","useAuthStore","orySessionCookie","orySessionCookieAvailable","ory","getOryAPIUrl","logoutFlow","isAuthorized","logout","updateBookmarks","hostname","useUserSurveyStore","_createState","visible","setStatus","lifetime","useReviewsStore","reviewCount","loading","review","loadReviews","geo","bestReviews","pathelements","searchfilterconf","filtername","DURATION_MIN","DURATION_MAX","DURATION_MAX_FLEX","DURATION_DEFAULT","getTripDuration","trPrefix","useFlexTripStore","isFlexEnabled","updateKey","flexDuration","flexibleCalendar","i18n","flexibleSearch","valid","durationText","getDurationText","fuzzynessText","tripText","rangeStart","rangeEnd","changeDuration","useURLs","buildUrl","geoConfs","buildAccommodationUrl","buildBookingUrl","buildImageUrl","imageId","transformation","buildReviewsUrl","buildValidUrl","buildRedirectUrl","buildGuestWorldUrl","buildLoginUrl","buildLoginUrlWishAccomCode","buildLoginToWishlistUrl","buildBookmarksUrl","buildProfileUrl","buildWishlistUrl","buildBookingsUrl","buildNewsletterUrl","getSeason","SEASON_NAMES","parseSeason","useSeason","keepPreviousDataPlaceholder","previousData","TYPES_ORDER","flatSuggestions","mapDestinationToSuggestion","mapTeaserToSuggestion","allCountries","useSearchQuery","useSearchMultiQuery","requests","stringifyParams","useSearchAccommodationsQuery","useSearchRegionPlacesQuery","SUGGESTIONS_FUZZINESS_DEFAULT","SUGGESTIONS_STALE_TIME_MINUTES","useSearchApiSuggestionsQuery","normalizedParams","useSearchStore","lastChanged","isRedesign","pagesizeDefault","docs","dataObj","facetsData","loadingFilters","changed","regionFilter","allRegions","allPlaces","geoAll","geoCurrent","paramsFromFilters","setFilter","updates","newFilters","usePopupsStore","popups","storesOrder","mutateStores","stores","storeFn","piniaStorePlugin","$pinia","$stores","vue_query_wrmMkNpEpe","vueQueryState","payload_client_yVLowv6hDl","navigation_repaint_client_bs2bWDGRIE","check_outdated_build_client_8vK7RkfGxZ","getLatestManifest","currentManifest","chunk_reload_client_UciE0i6zes","chunkErrors","reloadAppAtPath","lazyGlobalComponents","LazyWebccBreadcrumb","LazyWebccButton","LazyWebccCancellationStepper","LazyWebccCaptcha","LazyWebccCompanyLogo","LazyWebccDateRangePlusMinusDays","LazyWebccDateRangeSearchFlex","LazyWebccDateRangeSearchSimple","LazyWebccDaterangeSearch","LazyWebccDestinationPicker","LazyWebccExpandable","LazyWebccFieldset","LazyWebccFreeCancellationInfo","LazyWebccHeading","LazyWebccIcon","LazyWebccLink","LazyWebccLoader","LazyWebccLoaderOverlay","LazyWebccMarkdown","LazyWebccModal","LazyWebccPagination","LazyWebccRadioSwitch","LazyWebccScroll","LazyWebccSearch","LazyWebccTooltip","LazyWebccTripPicker","LazyWebccCheckbox","LazyWebccDateRangepicker","LazyWebccDatepicker","LazyWebccForm","LazyWebccFormfield","LazyWebccInput","LazyWebccRadio","LazyWebccSelect","LazyWebccSwitch","LazyBlocks","LazyBlocksBreadcrumbs","LazyBlocksCatalogs","LazyBlocksColumns","LazyBlocksHeading","LazyBlocksHero","LazyBlocksLSODetail","LazyBlocksLSOList","LazyBlocksLSOMedia","LazyBlocksLandingContainer","LazyBlocksLandingH1","LazyBlocksLandingHero","LazyBlocksLandingIFrame","LazyBlocksLandingImageCarouselWithText","LazyBlocksLandingMarkdown","LazyBlocksLandingRecommendations","LazyBlocksLandingTeasers","LazyBlocksLandingTextCarousel","LazyBlocksLandingTextWithImage","LazyBlocksMedia","LazyBlocksMenu","LazyBlocksObjectList","LazyBlocksRichtext","LazyBlocksSearchBar","LazyBlocksStartHeaderTeasers","LazyBlocksStartInspirations","LazyBlocksStartOwnerTeaser","LazyBlocksStartRecommendations","LazyBlocksStartSEOLinks","LazyBlocksStartSeoTeaser","LazyBlocksStartTopDestinations","LazyBlocksStartUSPBar","LazyBlocksStartUSPCards","LazyBlocksStartUSPColumns","LazyBlocksTeaserGrid","LazyBlocksTeaserList","LazyBlocksTextColumns","LazyBlocksUSPBarBlock","LazyBlocksUSPCardsBlock","LazyBlocksUSPColumnsBlock","LazyBlocksUSPCorona","LazyErrorContent","LazyErrorFull","LazyPageBookmarks","LazyPageContent","LazyPageDetails","LazyPageEmails","LazyPageMyrent","LazyPageNewsletter","LazyPageReviews","LazyPageSearch","LazyPageStart","LazyPageUnknown","LazyLiveness","LazyReadiness","LazyStartup","components_plugin_KR1HBZs4kY","top","bottom","right","left","auto","basePlacements","clippingParents","popper","reference","variationPlacements","placement","placements","beforeRead","afterRead","beforeMain","main","afterMain","beforeWrite","afterWrite","modifierPhases","getNodeName","getWindow","ownerDocument","isElement","OwnElement","isHTMLElement","isShadowRoot","applyStyles","initialStyles","styleProperties","attribute","applyStyles$1","getBasePlacement","round","getUAString","uaData","isLayoutViewport","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","visualViewport","addVisualOffsets","getLayoutRect","contains","rootNode","getComputedStyle","isTableElement","getDocumentElement","getParentNode","getTrueOffsetParent","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","getOffsetParent","offsetParent","getMainAxisFromPlacement","within","mathMax","mathMin","withinMaxClamp","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","hashMap","toPaddingObject","padding","arrow","_state$modifiersData$","arrowElement","popperOffsets","basePlacement","axis","isVertical","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","center","axisProp","_options$element","arrow$2","getVariation","unsetSides","roundOffsetsByDPR","win","dpr","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","_Object$assign","computeStyles","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","computeStyles$1","passive","_options$scroll","_options$resize","resize","scrollParents","scrollParent","eventListeners","getOppositePlacement","getOppositeVariationPlacement","getWindowScroll","scrollLeft","scrollTop","getWindowScrollBarX","getViewportRect","html","layoutViewport","getDocumentRect","_element$ownerDocumen","winScroll","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","isBody","updatedList","rectToClientRect","rect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","getExpandedFallbackPlacements","oppositePlacement","flip","_options$mainAxis","checkMainAxis","_options$altAxis","checkAltAxis","specifiedFallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","fallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","check","numberOfChecks","_loop","fittingPlacement","_ret","flip$2","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","hide","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hide$1","distanceAndSkiddingToXY","rects","invertDistance","skidding","distance","_options$offset","_data$state$placement","offset$2","popperOffsets$1","getAltAxis","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","altAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","preventOverflow$1","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","documentElement","visited","modifier","sort","requires","depModifier","orderModifiers","orderedModifiers","phase","mergeByName","DEFAULT_OPTIONS","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","runModifierEffects","_state$elements","_state$orderedModifie","_state$orderedModifie2","_ref$options","cleanupFn","noopFn","createPopper","commonjsGlobal","getDefaultExportFromCjs","objectProto$g","hasOwnProperty$d","baseHas$1","_baseHas","isArray$c","isArray_1","freeGlobal$1","_freeGlobal","root$8","_root","root$7","Symbol$5","_Symbol","Symbol$4","objectProto$f","hasOwnProperty$c","nativeObjectToString$1","symToStringTag$1","getRawTag$1","_getRawTag","objectProto$e","objectToString$1","_objectToString","Symbol$3","baseGetTag$a","_baseGetTag","isObjectLike$b","isObjectLike_1","baseGetTag$9","isObjectLike$a","symbolTag$1","isSymbol$3","isSymbol_1","isArray$b","isSymbol$2","isKey$3","_isKey","isObject$a","isObject_1","baseGetTag$8","isObject$9","funcTag$1","isFunction$3","isFunction_1","root$6","coreJsData$1","_coreJsData","isMasked$1","_isMasked","funcProto$2","funcToString$2","toSource$2","_toSource","isFunction$2","isObject$8","toSource$1","funcProto$1","objectProto$d","funcToString$1","hasOwnProperty$b","baseIsNative$1","_baseIsNative","getValue$1","_getValue","getNative$7","_getNative","getNative$6","nativeCreate$4","_nativeCreate","nativeCreate$3","hashClear$1","_hashClear","hashDelete$1","_hashDelete","nativeCreate$2","HASH_UNDEFINED$2","objectProto$c","hasOwnProperty$a","hashGet$1","data2","_hashGet","nativeCreate$1","objectProto$b","hasOwnProperty$9","hashHas$1","_hashHas","HASH_UNDEFINED$1","hashSet$1","_hashSet","Hash$1","index2","_Hash","listCacheClear$1","_listCacheClear","eq$6","eq_1","eq$5","assocIndexOf$4","_assocIndexOf","assocIndexOf$3","listCacheDelete$1","_listCacheDelete","assocIndexOf$2","listCacheGet$1","_listCacheGet","assocIndexOf$1","listCacheHas$1","_listCacheHas","listCacheSet$1","_listCacheSet","ListCache$4","_ListCache","getNative$5","root$5","Map$3","_Map","ListCache$3","Map$2","mapCacheClear$1","_mapCacheClear","isKeyable$1","_isKeyable","getMapData$4","_getMapData","getMapData$3","mapCacheDelete$1","_mapCacheDelete","getMapData$2","mapCacheGet$1","_mapCacheGet","getMapData$1","mapCacheHas$1","_mapCacheHas","mapCacheSet$1","_mapCacheSet","MapCache$3","_MapCache","MapCache$2","memoize$1","memoize_1","memoizeCapped$1","_memoizeCapped","stringToPath$1","_stringToPath","arrayMap$1","_arrayMap","Symbol$2","isArray$a","isSymbol$1","INFINITY$1","symbolProto$1","baseToString$1","_baseToString","toString$1","toString_1","isArray$9","isKey$2","castPath$2","_castPath","baseGetTag$7","isObjectLike$9","argsTag$2","baseIsArguments$1","_baseIsArguments","isObjectLike$8","objectProto$a","hasOwnProperty$8","propertyIsEnumerable$1","isArguments$3","isArguments_1","MAX_SAFE_INTEGER$1","isIndex$3","_isIndex","isLength$3","isLength_1","toKey$4","_toKey","castPath$1","isArguments$2","isArray$8","isIndex$2","isLength$2","toKey$3","hasPath$2","_hasPath","baseHas","hasPath$1","has$1","has_1","baseGetTag$6","isObjectLike$7","dateTag$2","baseIsDate$1","_baseIsDate","baseUnary$2","_baseUnary","_nodeUtilExports","_nodeUtil","freeGlobal2","nodeUtil2","baseIsDate","baseUnary$1","nodeUtil$1","nodeIsDate","isDate$1","isDate_1","baseGetTag$5","isArray$7","isObjectLike$6","stringTag$2","isString_1","arraySome$2","_arraySome","ListCache$2","stackClear$1","_stackClear","stackDelete$1","_stackDelete","stackGet$1","_stackGet","stackHas$1","_stackHas","ListCache$1","Map$1","MapCache$1","stackSet$1","_stackSet","Stack$3","_Stack","setCacheAdd$1","_setCacheAdd","setCacheHas$1","_setCacheHas","SetCache$1","_SetCache","cacheHas$1","_cacheHas","arraySome$1","COMPARE_PARTIAL_FLAG$5","COMPARE_UNORDERED_FLAG$3","equalArrays$2","othValue2","_equalArrays","root$4","Uint8Array$2","_Uint8Array","mapToArray$1","_mapToArray","setToArray$1","_setToArray","Symbol$1","Uint8Array$1","eq$4","equalArrays$1","COMPARE_PARTIAL_FLAG$4","COMPARE_UNORDERED_FLAG$2","boolTag$2","dateTag$1","errorTag$1","mapTag$2","numberTag$2","regexpTag$1","setTag$2","stringTag$1","arrayBufferTag$1","dataViewTag$2","equalByTag$1","_equalByTag","arrayPush$1","_arrayPush","isArray$6","baseGetAllKeys$1","_baseGetAllKeys","arrayFilter$1","_arrayFilter","stubArray$1","stubArray_1","objectProto$9","getSymbols$1","_getSymbols","baseTimes$1","_baseTimes","isBufferExports","isBuffer$3","stubFalse_1","stubFalse2","Buffer2","isBuffer2","baseGetTag$4","isLength$1","isObjectLike$5","argsTag$1","arrayTag$1","boolTag$1","mapTag$1","numberTag$1","objectTag$3","setTag$1","weakMapTag$1","dataViewTag$1","baseIsTypedArray$1","_baseIsTypedArray","isTypedArray$3","isTypedArray_1","isArguments$1","isArray$5","isBuffer$2","isIndex$1","isTypedArray$2","objectProto$8","hasOwnProperty$7","arrayLikeKeys$2","_arrayLikeKeys","objectProto$7","isPrototype$3","_isPrototype","overArg$2","_overArg","overArg$1","nativeKeys$1","_nativeKeys","isPrototype$2","objectProto$6","hasOwnProperty$6","baseKeys$1","_baseKeys","isFunction$1","isArrayLike$5","isArrayLike_1","arrayLikeKeys$1","isArrayLike$4","keys$3","keys_1","keys$2","getAllKeys$1","_getAllKeys","COMPARE_PARTIAL_FLAG$3","objectProto$5","hasOwnProperty$5","equalObjects$1","_equalObjects","getNative$4","root$3","DataView$1","_DataView","getNative$3","root$2","Promise$2","_Promise","getNative$2","root$1","Set$1","_Set","getNative$1","WeakMap$1","_WeakMap","Promise$1","baseGetTag$3","objectTag$2","getTag$1","_getTag","Stack$2","isArray$4","isBuffer$1","isTypedArray$1","COMPARE_PARTIAL_FLAG$2","objectTag$1","objectProto$4","hasOwnProperty$4","baseIsEqualDeep$1","_baseIsEqualDeep","isObjectLike$4","baseIsEqual$2","_baseIsEqual","Stack$1","baseIsEqual$1","COMPARE_PARTIAL_FLAG$1","COMPARE_UNORDERED_FLAG$1","baseIsMatch$1","noCustomizer","_baseIsMatch","isObject$7","isStrictComparable$2","_isStrictComparable","isStrictComparable$1","keys$1","getMatchData$1","_getMatchData","matchesStrictComparable$2","_matchesStrictComparable","matchesStrictComparable$1","baseMatches$1","_baseMatches","toKey$2","baseGet$2","_baseGet","baseGet$1","get$1","get_1","baseHasIn$1","_baseHasIn","hasIn$1","hasIn_1","isKey$1","toKey$1","baseMatchesProperty$1","_baseMatchesProperty","identity$3","identity_1","baseProperty$1","_baseProperty","basePropertyDeep$1","_basePropertyDeep","property$1","property_1","identity$2","isArray$3","baseIteratee$2","_baseIteratee","createBaseFor$1","_createBaseFor","baseFor$2","_baseFor","baseFor$1","baseForOwn$2","_baseForOwn","isArrayLike$3","createBaseEach$1","_createBaseEach","baseForOwn$1","baseEach$1","_baseEach","baseSome$1","collection2","_baseSome","eq$3","isArrayLike$2","isObject$6","isIterateeCall$3","_isIterateeCall","baseIteratee$1","baseSome","isArray$2","isIterateeCall$2","some","some_1","baseGetTag$2","isObjectLike$3","isBoolean_1","baseGetTag$1","isObjectLike$2","isNumber_1","defineProperty$2","_defineProperty","defineProperty$1","baseAssignValue$4","_baseAssignValue","baseAssignValue$3","eq$2","objectProto$3","hasOwnProperty$3","assignValue$1","_assignValue","baseAssignValue$2","mapValues_1","apply$2","_apply","apply$1","overRest$1","_overRest","constant$1","constant_1","identity$1","baseSetToString$1","_baseSetToString","shortOut$1","_shortOut","setToString$1","_setToString","baseRest$3","_baseRest","nativeKeysIn$1","_nativeKeysIn","isObject$5","isPrototype$1","objectProto$2","hasOwnProperty$2","baseKeysIn$1","_baseKeysIn","isArrayLike$1","keysIn$3","keysIn_1","baseRest$2","eq$1","isIterateeCall$1","keysIn$2","objectProto$1","hasOwnProperty$1","sources","propsIndex","propsLength","defaults_1","baseAssignValue$1","assignMergeValue$2","_assignMergeValue","_cloneBufferExports","_cloneBuffer","cloneBuffer2","Uint8Array2","cloneArrayBuffer$1","_cloneArrayBuffer","cloneTypedArray$1","_cloneTypedArray","copyArray$1","_copyArray","isObject$4","baseCreate$1","_baseCreate","getPrototype$2","_getPrototype","getPrototype$1","initCloneObject$1","_initCloneObject","isObjectLike$1","isArrayLikeObject$1","isArrayLikeObject_1","isPlainObject$1","isPlainObject_1","safeGet$2","_safeGet","copyObject$1","_copyObject","keysIn$1","toPlainObject$1","toPlainObject_1","assignMergeValue$1","isArray$1","isObject$3","safeGet$1","toPlainObject","baseMergeDeep$1","srcIndex","mergeFunc","isCommon","isTyped","_baseMergeDeep","assignMergeValue","baseMergeDeep","isObject$2","safeGet","baseMerge$2","_baseMerge","baseMerge$1","isObject$1","customDefaultsMerge$1","_customDefaultsMerge","baseRest$1","createAssigner$1","assigner","_createAssigner","baseMerge","createAssigner","mergeWith$1","mergeWith_1","customDefaultsMerge","mergeWith","defaultsDeep","defaultsDeep_1","head_1","last_1","getType","hasAny","pad","arrayHasItems","resolveEl","elementContains","onSpaceOrEnter","keys2","num","toIntegerExports","toInteger$2","toInteger2","toInteger$1","getTimezoneOffsetInMillisecondsExports","getTimezoneOffsetInMilliseconds$2","getTimezoneOffsetInMilliseconds2","getTimezoneOffsetInMilliseconds$1","MILLISECONDS_IN_HOUR$1","MILLISECONDS_IN_MINUTE$1","patterns$1","token2","hours2","tzPattern$1","toDate$1","parseDate$1","obj2","startOfWeek$1","defaultOptions2","MILLISECONDS_IN_WEEK$2","differenceInCalendarWeeks","startOfWeekLeft","startOfWeekRight","lastDayOfMonth","startOfMonth","getWeeksInMonth","getWeekYear","startOfWeekYear","MILLISECONDS_IN_WEEK$1","getWeek","startOfISOWeek","getISOWeekYear","startOfISOWeekYear","getISOWeek","addYears","viewAddressKeys","getDays","monthComps","prevMonthComps","nextMonthComps","firstDayOfWeek","firstWeekday","isoWeeknumbers","weeknumbers","numDays","numWeeks","prevMonthDaysToShow","daysInWeek","prevMonth","thisMonth","nextMonth","dayFromEnd","weekdayOrdinal","weekdayOrdinalFromEnd","weekFromEnd","today","todayDay","todayMonth","todayYear","weeksInMonth","weekday","noonDate","weekdayPosition","weekdayPositionFromEnd","weeknumber","isoWeeknumber","isToday","isFirstDay","isLastDay","onTop","onBottom","onLeft","onRight","dayIndex","getDayIndex","getWeeks","showWeeknumbers","showIsoWeeknumbers","result2","weekIndex","fromDay","toDay","getWeekdays","getPageId","getPageAddressForDate","addPages","newDate","pageIsValid","pageIsBeforePage","comparePage","pageIsAfterPage","pageIsBetweenPages","fromPage","toPage","pageIsEqualToPage","aPage","bPage","pageRangeToArray","getPageKey","getCachedPage","weeks","weekdays2","getPage","cachedPage","trimWeeks","dayObj","weekObj","Cache","createKey","createItem","removeKey","DateRange","Locale","span","repeat","DateRepeat","ranges","dayParts","startDayIndex","endDayIndex","DateRangeContext","_b2","MS_PER_DAY","record","cell","records","onStart","startTime","allDay","locales","localeSettings","dow","weekdays","navMonths","inputDateTime","inputDateTime24hr","inputTime","inputTime24hr","dayPopover","model","iso","masks","maxSwipeTime","minHorizontalSwipeDistance","maxVerticalSwipeDistance","touch","defaultLocales","setupDefaults","userDefaults","DEFAULT_MONTH_CACHE_SIZE","DEFAULT_PAGE_CACHE_SIZE","locales2","detLocale","localeKeys","validKey","lk","defLocale","masks2","monthCacheSize","pageCacheSize","getMonthPartsKey","getMonthParts","getDayNames","getMonthNames","getRelativeTimeNames","formatDate","mask","nullDate","fillDate","isDateParts","fillParts","DatePatchKeys","applyRulesForDateParts","dte","getDateParts","getDateFromParts","getHourDates","GroupRuleType","GroupRuleType2","IntervalRuleType","IntervalRuleType2","ComponentRuleType","ComponentRuleType2","OrdinalComponentRuleType","OrdinalComponentRuleType2","IntervalRule","dateParts","diffInDays","diffInWeeks","diffInMonths","diffInYears","ComponentRule","components2","DaysRule","WeekdaysRule","WeeksRule","MonthsRule","YearsRule","isDayInMonth","isDayOfWeek","isWeekInMonth","isMonthInYear","OrdinalComponentRule","numOrArray","isOrdinalWeekInMonth","ordinalWeek","ordinalWeekday","FunctionRule","dayInMonth","weekInMonth","monthInYear","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","maskMacros","DATE_PART_RANGES","literal","formatFlags","twoDigits","threeDigits","fourDigits","monthUpdate","arrName","parseFlags","cent","normalizeMasks","startOfWeek","daysToAdd","d1","d2","hrs","sec","tzDate","monthParts","inLeapYear","firstDayOfMonth","getWeekdayDates","localeId","units","rtf","unit","getMonthDates","datePartIsValid","part","rule","getDatePartOptions","getDatePartsOptions","getNearestDatePart","diffPrev","dp","$0","literals","$1","attrKey","Attribute","theme","simpleRanges","repeatRanges","showPopover","hidePopover","togglePopover","getPopoverEventHandlers","visibility","click","hover","hoverFocus","focus","hovered","clickHandler","mouseMoveHandler","mouseLeaveHandler","focusInHandler","focusOutHandler","removeHandlers","addHandlers","popoverDirective","oldVisibility","newVisibility","addHorizontalSwipeHandler","maxSwipeTime2","minHorizontalSwipeDistance2","maxVerticalSwipeDistance2","startX","startY","isSwiping","touchStart","touchEnd","deltaX","deltaY","watchSkippers","skipWatcher","watcher","durationMs","handleWatcher","dateTime","windowExists","windowHasFeature","useDarkMode","isDark","displayMode","mediaQuery","mutationObserver","mqListener","ev","setupSystem","moListener","darkClass","setupClass","stopObservers","targetProps","displayProps","_defaultProfile","normalizeConfig","defaultProfile","rootColor","targetConfig","targetColor","HighlightRenderer","glyphs","highlight","highlights","BaseRenderer","collectionType","ContentRenderer","DotRenderer","BarRenderer","Theme","attr","contextKey$4","propsDef$2","createBase","minDate","maxDate","disabledDates","disabledAttribute","useOrCreateBase","contextKey$3","slotKey","provideSlots","remap","useSlot","propsDef$1","emitsDef","contextKey$2","createCalendar","containerRef","focusedDay","focusableDay","inTransition","navPopoverId","dayPopoverId","_view","_pages","transitionName","transitionPromise","removeHandlers2","firstPage","lastPage","minPage","getDateAddress","maxPage","navVisibility","isMonthly","isWeekly","isDaily","onTransitionBeforeEnter","onTransitionAfterEnter","addPages$1","address","count2","refreshDisabled","attributeContext","refreshFocusable","forDays","hasAttributes","dayCells","getWeeknumberPosition","column","columnFromEnd","showWeeknumbers2","getPageForAttributes","attr2","getDefaultInitialPage","getTargetPageRange","force","pagesToAdd","getPageTransition","oldPage","newPage","defaultTransition","moveNext2","movePrev2","refreshPages","position2","row","rowFromEnd","weeknumberPosition","targetBy","canMove","canMoveBy","canMovePrev","canMoveNext","moveBy","movePrev","moveNext","tryFocusDate","inMonth","daySelector","focusableEl","focusDate","onDayClick","onDayMouseenter","onDayMouseleave","onDayFocusin","onDayFocusout","onDayKeydown","onKeydown","onWeeknumberClick","toLeft","toRight","useCalendar","_sfc_main$k","popoverRef","state2","updateDirection","onPopperUpdate","popperOptions","alignment","isLeftRight","alignment2","destroyPopper","setupPopper","setTimer","isCurrentTarget","onDocumentClick","popperRef","onDocumentKeydown","onDocumentShowPopover","onDocumentHidePopover","onDocumentTogglePopover","addEvents","removeEvents","beforeEnter","afterEnter","beforeLeave","onClick","onMouseOver","onMouseLeave","onFocusIn","onFocusOut","cleanupRO","_export_sfc","sfc","_sfc_render$7","_ctx","$props","$setup","$data","$options","createElementVNode","Popover","_hoisted_1$c","_hoisted_2$b","_hoisted_3$9","_sfc_main$j","__props","indicator","dot","bar","popover","__default__$3","_sfc_main$i","_hoisted_1$b","_hoisted_2$a","_sfc_main$h","dayTitle","_sfc_main$g","_hoisted_1$a","_hoisted_2$9","_hoisted_3$8","_sfc_render$6","IconChevronRight","_sfc_main$f","_hoisted_1$9","_hoisted_2$8","_hoisted_3$7","_sfc_render$5","IconChevronLeft","_sfc_main$e","_hoisted_1$8","_hoisted_2$7","_hoisted_3$6","_sfc_render$4","IconChevronDown","_sfc_main$d","_hoisted_1$7","_hoisted_2$6","_hoisted_3$5","_sfc_render$3","IconClock","icons","_sfc_main$c","icon","_hoisted_1$6","_hoisted_2$5","_hoisted_3$4","_hoisted_4$3","_sfc_main$b","navPlacement","navPopoverOptions","titleLeft","titleRight","layout_","gridStyle","contextKey$1","createPage","getMonthItems","thisYear","getYearItems","startYear","endYear","usePage","_hoisted_1$5","_hoisted_2$4","_hoisted_3$3","_hoisted_4$2","_hoisted_5$2","_sfc_main$a","monthMode","yearGroupCount","selectedYear","selectedYearGroup","getYearGroupIndex","navContainer","focusFirstItem","toggleMode","getStartYear","groupIndex","getEndYear","prevItemsEnabled","movePrevYear","movePrevYearGroup","nextItemsEnabled","moveNextYear","moveNextYearGroup","monthItems","prevMonthItems","prevMonthItemsEnabled","nextMonthItems","nextMonthItemsEnabled","yearItems","prevYearItems","prevYearItemsEnabled","nextYearItems","nextYearItemsEnabled","activeItems","firstYear","lastYear","title2","_sfc_main$9","_sfc_main$8","_sfc_main$7","attributeCells","attributedDay","processPopover","popovers2","customData","resolvedPopover","hasHighlights","hasDots","bars","hasBars","popovers","popoverAttrs","dayContentSlot","dayClasses","dayContentProps","tabindex","classes","dayContentEvents","dayPopover2","_hoisted_1$4","_hoisted_2$3","_hoisted_3$2","_hoisted_4$1","_hoisted_5$1","_sfc_render$2","_component_CalendarSlot","_directive_popover","wrapperClass","bgClass","CalendarDay","_hoisted_1$3","_hoisted_2$2","__default__$2","_sfc_main$6","$event","_sfc_main$5","_hoisted_1$2","_sfc_render$1","_component_CalendarHeader","_component_CalendarPage","_component_CalendarPageProvider","_component_CalendarDayPopover","_component_CalendarNavPopover","Calendar","contextKey","propsDef","createDatePicker","baseCtx","showCalendar","datePickerPopoverId","dateValue","dragValue","inputValues","calendarRef","updateTimeout","dragTrackingValue","watchValue","isRange","valueStart","valueEnd","isDateMode","isDateTimeMode","isTimeMode","isDragging","modelConfig","normalizeConfig2","getDateParts2","inputMask","inputMaskHasTime","inputMaskHasDate","inputMaskPatch","popoverEvents","inputValue","inputEvents","onInputInput","onInputChange","onInputKeyup","selectAttribute","hasValue","dragAttribute","getAutoRules","_rules","accuracy","normalizeDateConfig","hasDateValue","hasRangeValue","valuesAreEqual","aIsDate","bIsDate","valueIsDisabled","targetPriority","sortRange","denormalizeValue","updateValue","forceUpdateValue","clearIfEqual","fInput","hPopover","dragging","mValue","normalizedConfig","normalizedValue","valueRef","notify","denormalizedValue","hidePopover$1","formatInput","moveToValue","onInputUpdate","inputValue2","cancelDrag","onPopoverBeforeShow","onPopoverAfterShow","onPopoverBeforeHide","onPopoverAfterHide","handleDayClick","onDayMouseEnter","showPopover$1","togglePopover$1","dValue","useDatePicker","_amOptions","_pmOptions","createTimePicker","is24hr","hideTimeHeader","timeAccuracy","updateDpValue","updateParts","newParts","isStart","partsValid","showHeader","date2","isAM","hValue","amHourOptions","ho","pmHourOptions","hourOptions","isAMOptions","_hoisted_1$1","_hoisted_2$1","_hoisted_3$1","__default__$1","_sfc_main$4","selectedLabel","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_sfc_main$3","timePicker","_sfc_main$2","positions","__default__","_sfc_main$1","_sfc_main","datePicker","slotCtx","_sfc_render","_component_DatePickerPopover","_component_DatePickerBase","DatePicker","plugin_client_RZVNejKJBe","calendarOptions","setupCalendar","PERSISTED_UNLEASH_STATE","FEATURE_COOKIE_PREFIX","getFeatureCookieName","getFeaturesFromCookies","prefixRegExp","featureCookies","isFeatureCookieDefined","parseFeatureCookieValue","toFeatureCookieValue","applyFeatureCookies","cookieFeatures","unleash_plugin_client_FsacaZbo7x","unleashState","cookieName","newFeatures","newPayloads","base64ToUtf8","base64ToBytes","binString","KEY","_getUID","logDebug","getConnectionSpeed","webVitals","sendToAnalytics","onCLS","onFID","onLCP","onTTFB","onFCP","onINP","__vitePreload","metric","webVitalsOptions","sendVitals","plugin_client_Fdvg3o8568","sides","alignments","oppositeSideMap","oppositeAlignmentMap","evaluate","getSide","getAlignment","getOppositeAxis","getAxisLength","getSideAxis","getAlignmentAxis","getAlignmentSides","rtl","alignmentAxis","mainAlignmentSide","getExpandedPlacements","getOppositeAlignmentPlacement","getSideList","lr","rl","tb","bt","getOppositeAxisPlacements","flipAlignment","expandPaddingObject","getPaddingObject","computeCoordsFromPlacement","floating","sideAxis","alignLength","commonAlign","coords","computePosition","validMiddleware","statefulPlacement","middlewareData","resetCount","nextX","nextY","_await$platform$isEle","offsetScale","arrowDimensions","isYAxis","clientProp","largestPossiblePadding","minPadding","maxPadding","min$1","shouldAddOffset","alignmentOffset","getPlacementList","autoAlignment","autoPlacement","_middlewareData$autoP","_middlewareData$autoP2","_placementsThatFitOnE","crossAxis","detectOverflowOptions","placements$1","currentIndex","currentPlacement","alignmentSides","currentOverflows","allOverflows","nextPlacement","placementsSortedByMostSpace","resetPlacement","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkCrossAxis","fallbackStrategy","fallbackAxisSideDirection","initialSideAxis","hasFallbackAxisSideDirection","overflowsData","_middlewareData$flip2","_overflowsData$filter","_overflowsData$filter2","currentSideAxis","convertValueToCoords","mainAxisMulti","crossAxisMulti","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","_state$middlewareData","_state$middlewareData2","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","pt","ht","mt","gt","wt","vt","yt","Tt","Pt","St","Mt","Et","kt","Vt","floating_vue_EIcJ7xiw0h","vTooltip","vClosePopper","errorWarning","information","cross","__variableDynamicImportRuntimeHelper","Vue3Toastify","renderIcon","closeButton","wat","isInstanceOf","isBuiltin","className","isErrorEvent","isDOMError","isDOMException","isParameterizedString","isPrimitive","isEvent","isSyntheticEvent","isVueViewModel","truncate","safeJoin","isMatchingPattern","requireExactStringMatch","stringMatchesSomePattern","testString","applyAggregateErrorsToEvent","exceptionFromErrorImplementation","maxValueLimit","hint","originalException","truncateAggregateExceptions","aggregateExceptionsFromError","prevExceptions","exception","exceptionId","newExceptions","applyExceptionGroupFieldsForParentException","newException","newExceptionId","applyExceptionGroupFieldsForChildException","childError","parentId","exceptions","maxValueLength","SDK_VERSION","GLOBAL_OBJ","getGlobalSingleton","creator","gbl","__SENTRY__","versionedCarrier","WINDOW","DEFAULT_MAX_STRING_LENGTH","htmlTreeAsString","elem","currentElem","MAX_TRAVERSE_HEIGHT","out","sepLength","nextStr","keyAttrs","maxStringLength","_htmlElementAsString","keyAttrPairs","keyAttr","keyAttrPair","allowedAttrs","getLocationHref","getDomElement","DEBUG_BUILD","PREFIX","CONSOLE_LEVELS","originalConsoleMethods","consoleSandbox","console","wrappedFuncs","wrappedLevels","originalConsoleMethod","makeLogger","logger","DSN_REGEX","isValidProtocol","dsnToString","dsn","withPassword","pass","port","projectId","publicKey","dsnFromString","lastPath","split","projectMatch","dsnFromComponents","validateDsn","makeDsn","SentryError","logLevel","fill","replacementFactory","original","wrapped","markFunctionWrapped","addNonEnumerableProperty","getOriginalFunction","urlEncode","convertToPlainObject","getOwnProperties","serializeEventTarget","extractedProps","extractExceptionKeysForMessage","maxLength","firstKey","includedKeys","dropUndefinedKeys","_dropUndefinedKeys","memoizationMap","isPojo","memoVal","returnValue","STACKTRACE_FRAME_LIMIT","UNKNOWN_FUNCTION","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","createStackParser","parsers","sortedParsers","skipFirstLines","framesToPop","frames","lines","cleanedLine","frame","stripSentryFramesAndReverse","stackParserFromStackParserOptions","stackParser","localStack","getLastStackFrame","defaultFunctionName","getFunctionName","getFramesFromEvent","instrumented","addHandler","maybeInstrument","instrumentFn","triggerHandlers","typeHandlers","addConsoleInstrumentationHandler","instrumentConsole","log","supportsFetch","supportsNativeFetch","sandbox","ONE_SECOND_IN_MS","dateTimestampInSeconds","createUnixTimestampInSecondsFunc","performance","approxStartingTimeOrigin","timeOrigin","timestampInSeconds","browserPerformanceTimeOrigin","performanceNow","dateNow","timeOriginDelta","timeOriginIsReliable","navigationStart","navigationStartDelta","navigationStartIsReliable","addFetchInstrumentationHandler","skipNativeFetchCheck","instrumentFetch","addFetchEndInstrumentationHandler","streamHandler","onFetchResolved","originalFetch","parseFetchArgs","handlerData","virtualStackTrace","resolveResponse","onFinishedResolving","responseReader","consumeChunks","clonedResponseForResolving","getUrlFromResource","resource","fetchArgs","_oldOnErrorHandler","addGlobalErrorInstrumentationHandler","instrumentError","_oldOnUnhandledRejectionHandler","addGlobalUnhandledRejectionInstrumentationHandler","instrumentUnhandledRejection","isBrowserBundle","getSDKSource","isNodeEnv","isBrowser","isElectronNodeRenderer","memoBuilder","hasWeakSet","inner","unmemoize","uuid4","crypto","getRandomByte","getFirstException","getEventDescription","eventId","firstException","addExceptionTypeValue","addExceptionMechanism","newMechanism","defaultMechanism","currentMechanism","mergedData","checkOrSetAlreadyCaught","arrayify","maybeArray","normalize","maxProperties","normalizeToSize","maxSize","jsonSize","memo","stringified","stringifyValue","remainingDepth","valueWithToJSON","jsonValue","numAdded","visitable","visitKey","visitValue","objName","getConstructorName","utf8Length","States","RESOLVED","REJECTED","resolvedSyncPromise","SyncPromise","rejectedSyncPromise","onrejected","onfinally","isRejected","cachedHandlers","makePromiseBuffer","isReady","taskProducer","drain","counter","capturedSetTimeout","parseUrl","validSeverityLevels","severityLevelFromString","BAGGAGE_HEADER_NAME","SENTRY_BAGGAGE_KEY_PREFIX","SENTRY_BAGGAGE_KEY_PREFIX_REGEX","MAX_BAGGAGE_STRING_LENGTH","baggageHeaderToDynamicSamplingContext","baggageHeader","baggageObject","parseBaggageHeader","dynamicSamplingContext","nonPrefixedKey","dynamicSamplingContextToSentryBaggageHeader","sentryPrefixedDSC","dscKey","dscValue","objectToBaggageHeader","currBaggageObject","baggageHeaderToObject","baggageEntry","keyOrValue","objectKey","objectValue","newBaggageHeader","TRACEPARENT_REGEXP","extractTraceparentData","traceparent","parentSampled","propagationContextFromHeaders","sentryTrace","baggage","traceparentData","traceId","parentSpanId","generateSentryTraceHeader","spanId","sampled","sampledString","createEnvelope","addItemToEnvelope","envelope","newItem","forEachEnvelopeItem","envelopeItems","envelopeItem","envelopeItemType","encodeUTF8","serializeEnvelope","envHeaders","itemHeaders","stringifiedPayload","concatBuffers","buffers","totalLength","buf","createSpanEnvelopeItem","spanJson","createAttachmentEnvelopeItem","attachment","ITEM_TYPE_TO_DATA_CATEGORY_MAP","envelopeItemTypeToDataCategory","getSdkMetadataForEnvelopeHeader","metadataOrEvent","createEventEnvelopeHeaders","sdkInfo","tunnel","createClientReportEnvelope","discarded_events","clientReportItem","DEFAULT_RETRY_AFTER","parseRetryAfterHeader","headerDelay","headerDate","disabledUntil","limits","dataCategory","isRateLimited","updateRateLimits","updatedRateLimits","rateLimitHeader","retryAfterHeader","retryAfter","categories","namespaces","_nullishCoalesce","lhs","rhsFn","_optionalChain","ops","lastAccessLHS","op","generatePropagationContext","supportsHistory","chromeVar","isChromePackagedApp","hasHistoryApi","getMainCarrier","getSentryCarrier","carrier","makeSession","startingTime","sessionToJSON","updateSession","closeSession","SCOPE_SPAN_FIELD","_setSpanForScope","_getSpanForScope","DEFAULT_MAX_BREADCRUMBS","ScopeClass","newScope","lastEventId","requestSession","extras","fingerprint","captureContext","scopeToMerge","scopeInstance","Scope","propagationContext","breadcrumb","maxBreadcrumbs","maxCrumbs","mergedBreadcrumb","breadcrumbs","syntheticException","getDefaultCurrentScope","getDefaultIsolationScope","AsyncContextStack","isolationScope","assignedScope","assignedIsolationScope","maybePromiseResult","getAsyncContextStack","sentry","withScope","withSetScope","withIsolationScope","getStackAsyncContextStrategy","_isolationScope","getAsyncContextStrategy","getIsolationScope","getGlobalScope","acs","getClient","METRICS_SPAN_FIELD","getMetricSummaryJsonForSpan","exportKey","summary","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON","SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT","SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE","SEMANTIC_ATTRIBUTE_PROFILE_ID","SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME","SPAN_STATUS_UNSET","SPAN_STATUS_OK","SPAN_STATUS_ERROR","getSpanStatusFromHttpCode","httpStatus","setHttpStatus","spanStatus","TRACE_FLAG_NONE","TRACE_FLAG_SAMPLED","spanToTransactionTraceContext","span_id","trace_id","parent_span_id","spanToJSON","spanToTraceContext","spanToTraceHeader","spanIsSampled","spanTimeInputToSeconds","ensureTimestampInSeconds","spanIsSentrySpan","spanIsOpenTelemetrySdkTraceBaseSpan","getStatusMessage","castSpan","traceFlags","CHILD_SPANS_FIELD","ROOT_SPAN_FIELD","addChildSpanToSpan","childSpan","rootSpan","removeChildSpanFromSpan","getSpanDescendants","resultSet","addSpanChildren","childSpans","getRootSpan","getActiveSpan","errorsInstrumented","registerSpanErrorInstrumentation","errorCallback","activeSpan","SCOPE_ON_START_SPAN_FIELD","ISOLATION_SCOPE_ON_START_SPAN_FIELD","setCapturedScopesOnSpan","getCapturedScopesOnSpan","hasTracingEnabled","maybeOptions","SentryNonRecordingSpan","spanContext","_timestamp","_values","_status","_attributesOrStartTime","_startTime","_link","_links","_exception","_time","DEFAULT_ENVIRONMENT","FROZEN_DSC_FIELD","freezeDscOnSpan","dsc","getDynamicSamplingContextFromClient","public_key","getDynamicSamplingContextFromSpan","frozenDsc","traceState","traceStateDsc","dscOnTraceState","jsonSpan","maybeSampleRate","logSpanStart","isRootSpan","infoParts","logSpanEnd","parseSampleRate","sampleRate","sampleSpan","samplingContext","parsedSampleRate","enhanceEventWithSdkInfo","createSessionEnvelope","metadata","envelopeHeaders","createEventEnvelope","eventType","createSpanEnvelope","spans","dscHasRequiredProps","beforeSendSpan","convertToSpanJSON","setMeasurement","timedEventsToMeasurements","measurements","MAX_SPAN_COUNT","SentrySpan","timeInput","endTimestamp","attributesOrStartTime","isSpanTimeInput","sendSpanEnvelope","transactionEvent","isFullFinishedSpan","capturedSpanScope","capturedSpanIsolationScope","isStandaloneSpan","transaction","spanItems","transport","SUPPRESS_TRACING_KEY","startInactiveSpan","getAcs","spanArguments","parseSentrySpanArguments","forceTransaction","customParentSpan","withActiveSpan","parentSpan","getParentSpan","createChildOrRootSpan","_startChildSpan","_startRootSpan","initialCtx","TRACING_DEFAULTS","FINISH_REASON_HEARTBEAT_FAILED","FINISH_REASON_IDLE_TIMEOUT","FINISH_REASON_FINAL_TIMEOUT","FINISH_REASON_EXTERNAL_FINISH","startIdleSpan","startSpanOptions","activities","_finished","_idleTimeoutID","_finishReason","_autoFinishAllowed","_cleanupHooks","idleTimeout","finalTimeout","childSpanTimeout","beforeSpanEnd","previousActiveSpan","_startIdleSpan","definedEndTimestamp","spanEndTimestamp","onIdleSpanEnded","childEndTimestamps","latestSpanEndTimestamp","spanStartTimestamp","_cancelIdleTimeout","_restartIdleTimeout","_restartChildSpanTimeout","_pushActivity","_popActivity","spanJSON","startTimestamp","discardedSpans","childSpanJSON","childEndTimestamp","childStartTimestamp","spanStartedBeforeIdleSpanEnd","timeoutWithMarginOfError","spanEndedBeforeFinalTimeout","stringifiedSpan","startedSpan","endedSpan","spanToAllowAutoFinish","notifyEventProcessors","processors","processor","final","applyScopeDataToEvent","sdkProcessingMetadata","applyDataToEvent","applySpanToEvent","applyFingerprintToEvent","applyBreadcrumbsToEvent","applySdkMetadataToEvent","mergeScopeData","mergeData","eventProcessors","attachments","transactionName","mergeAndOverwriteScopeData","mergeVal","cleanedExtra","cleanedTags","cleanedUser","cleanedContexts","mergedBreadcrumbs","prepareEvent","normalizeDepth","normalizeMaxBreadth","prepared","integrations","applyClientOptions","applyIntegrationsMetadata","applyDebugIds","finalScope","getFinalScope","clientEventProcessors","isolationData","finalScopeData","evt","applyDebugMeta","normalizeEvent","environment","release","dist","debugIdStackParserCache","debugIdMap","debugIdStackFramesCache","cachedDebugIdStackFrameCache","filenameDebugIdMap","debugIdStackTrace","debugIdValue","parsedStack","cachedParsedStack","stackFrame","images","debug_id","integrationNames","maxBreadth","parseEventHintOrCaptureContext","hintIsScopeOrFunction","hintIsScopeContext","captureContextKeys","captureException","captureEvent","setContext","addEventProcessor","startSession","currentScope","userAgent","currentSession","endSession","_sendSessionUpdate","captureSession","SENTRY_API_VERSION","getBaseApiEndpoint","_getIngestEndpoint","_encodedAuth","getEnvelopeEndpointWithUrlEncodedAuth","installedIntegrations","filterDuplicates","integrationsByName","existingInstance","getIntegrationsToSetup","defaultIntegrations","userIntegrations","integration","finalIntegrations","debugIndex","debugInstance","setupIntegrations","integrationIndex","setupIntegration","afterSetupIntegrations","ALREADY_SEEN_ERROR","BaseClient","hintWithEventId","eventMessage","promisedEvent","clientFinished","transportFlushed","eventProcessor","integrationName","isAlreadyInstalled","env","sendResponse","eventOrCount","cbIndex","crashed","errored","ex","mechanism","sessionNonTerminal","ticked","tick","finalEvent","sentryError","isTransaction","isTransactionEvent","beforeSendLabel","processBeforeSend","_validateBeforeSendResult","processedEvent","spanCount","spanCountBefore","spanCountAfter","droppedSpanCount","transactionInfo","outcomes","quantity","beforeSendResult","invalidValueError","beforeSend","beforeSendTransaction","processedSpans","processedSpan","initAndBind","clientClass","setCurrentClient","DEFAULT_TRANSPORT_BUFFER_SIZE","createTransport","makeRequest","rateLimits","filteredEnvelopeItems","getEventForEnvelopeItem","filteredEnvelope","recordEnvelopeLoss","requestTask","isSentryRequestUrl","checkDsn","checkTunnel","removeTrailingSlash","applySdkMetadata","DEFAULT_BREADCRUMBS","addBreadcrumb","beforeBreadcrumb","finalBreadcrumb","originalFunctionToString","INTEGRATION_NAME","SETUP_CLIENTS","_functionToStringIntegration","originalFunction","functionToStringIntegration","DEFAULT_IGNORE_ERRORS","_inboundFiltersIntegration","_hint","clientOptions","mergedOptions","_mergeOptions","_shouldDropEvent","inboundFiltersIntegration","internalOptions","_isSentryError","_isIgnoredError","_isUselessError","_isIgnoredTransaction","_isDeniedUrl","_getEventFilterUrl","_isAllowedUrl","ignoreErrors","_getPossibleEventMessages","ignoreTransactions","denyUrls","allowUrls","possibleMessages","lastException","_getLastValidUrl","_dedupeIntegration","previousEvent","currentEvent","dedupeIntegration","_isSameMessageEvent","_isSameExceptionEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","previousException","_getExceptionFromEvent","currentException","currentFrames","previousFrames","frameA","frameB","currentFingerprint","previousFingerprint","instrumentFetchRequest","shouldCreateSpan","shouldAttachHeaders","spanOrigin","shouldCreateSpanResult","endSpan","fullUrl","getFullURL","hasParent","addTracingHeadersToFetchRequest","sentryTraceHeader","sentryBaggageHeader","newHeaders","existingBaggageHeader","newBaggageHeaders","contentLength","contentLengthNum","ignoreOnError","shouldIgnoreOnError","ignoreNextOnError","sentryWrapped","wrappedArguments","exceptionFromError","parseStackFrames","extractMessage","eventFromPlainObject","isUnhandledRejection","errorFromProp","getErrorPropertyFromObject","getNonErrorObjectExceptionValue","eventFromError","stacktrace","skipLines","getSkipFirstStackStringLines","getPopFirstTopFrames","reactMinifiedRegexp","eventFromException","attachStacktrace","eventFromUnknownInput","eventFromMessage","eventFromString","domException","__sentry_template_string__","__sentry_template_values__","captureType","getObjectClassName","createUserFeedbackEnvelope","feedback","createUserFeedbackEnvelopeItem","BrowserClient","sdkSource","getRating","thresholds","bindReporter","reportAllChanges","forceReport","generateUniqueID","getNavigationEntry","getActivationStart","navEntry","initMetric","navigationType","po","onHidden","onHiddenOrPageHide","runOnce","firstHiddenTime","initHiddenTime","onVisibilityUpdate","addChangeListeners","getVisibilityWatcher","whenActivated","FCPThresholds","onReport","visibilityWatcher","report","CLSThresholds","sessionValue","sessionEntries","handleEntries","firstSessionEntry","lastSessionEntry","FIDThresholds","handleEntry","interactionCountEstimate","minKnownInteractionId","maxKnownInteractionId","updateEstimate","getInteractionCount","initInteractionCountPolyfill","INPThresholds","prevInteractionCount","getInteractionCountForNavigation","MAX_INTERACTIONS_TO_CONSIDER","longestInteractionList","longestInteractionMap","processEntry","minLongestInteraction","existingInteraction","interaction","estimateP98LongestInteraction","candidateInteractionIndex","prevEntry","inp","LCPThresholds","reportedMetricIDs","lastEntry","stopListening","TTFBThresholds","whenReady","responseStart","_previousCls","_previousFid","_previousLcp","_previousTtfb","_previousInp","addClsInstrumentationHandler","stopOnCallback","addMetricObserver","instrumentCls","addLcpInstrumentationHandler","instrumentLcp","addFidInstrumentationHandler","instrumentFid","addTtfbInstrumentationHandler","instrumentTtfb","addInpInstrumentationHandler","instrumentInp","addPerformanceInstrumentationHandler","instrumentPerformanceObserver","getCleanupCallback","previousValue","isPerformanceEventTiming","isMeasurementValue","startAndEndSpan","startTimeInSeconds","parentStartTime","startStandaloneWebVitalSpan","passedAttributes","replay","replayId","userDisplay","profileId","getBrowserPerformanceAPI","msToSec","trackClsAsStandaloneSpan","standaloneCLsValue","standaloneClsEntry","pageloadSpanId","supportsLayoutShift","sentSpan","_collectClsOnce","sendStandaloneClsSpan","cleanupClsHandler","unsubscribeStartNavigation","_2","clsValue","_3","_4","routeName","_5","_6","_7","_8","_9","_10","_11","_12","_13","_14","_15","MAX_INT_AS_BYTES","_performanceCursor","_measurements","_lcpEntry","_clsEntry","startTrackingWebVitals","recordClsStandaloneSpans","fidCleanupCallback","_trackFID","lcpCleanupCallback","_trackLCP","ttfbCleanupCallback","_trackTtfb","clsCleanupCallback","_trackCLS","startTrackingLongTasks","startTrackingLongAnimationFrames","initialScript","invokerType","sourceURL","sourceFunctionName","sourceCharPosition","startTrackingInteractions","spanOptions","addPerformanceEntries","performanceEntries","transactionStartTime","_addNavigationSpans","_addMeasureSpans","firstHidden","shouldRecord","_addResourceSpans","_trackNavigator","_addTtfbRequestTimeToMeasurements","measurement","measurementTimestamp","fidMark","measurementName","_tagMetricInfo","requestTime","measureStartTimestamp","startTimeStamp","measureEndTimestamp","_addPerformanceNavigationTiming","_addRequest","eventEnd","requestStartTimestamp","responseEndTimestamp","responseStartTimestamp","resourceUrl","setResourceEntrySizeData","navigator","connection","dataKey","entryVal","requestStart","DEBOUNCE_DURATION","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","addClickKeypressInstrumentationHandler","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","originalAddEventListener","handlerForType","originalRemoveEventListener","isSimilarToLastCapturedEvent","shouldSkipDOMEvent","globalListener","getEventTarget","lastHref","addHistoryInstrumentationHandler","instrumentHistory","oldOnPopState","historyReplacementFunction","originalHistoryFunction","cachedImplementations","getNativeImplementation","impl","contentWindow","clearCachedImplementation","setTimeout","SENTRY_XHR_DATA_KEY","addXhrInstrumentationHandler","instrumentXHR","xhrproto","originalOpen","onreadystatechangeHandler","xhrInfo","readyStateArgs","setRequestHeaderArgs","originalSend","sentryXhrData","LAST_INTERACTIONS","INTERACTIONS_SPAN_MAP","startTrackingINP","inpCallback","_trackINP","INP_ENTRY_MAP","interactionId","interactionType","spanToUse","registerInpInteractionListener","_latestRoute","activeRootSpan","makeFetchTransport","nativeFetch","pendingBodySize","pendingCount","requestSize","CHROME_PRIORITY","GECKO_PRIORITY","createFrame","lineno","colno","chromeRegexNoFnName","chromeRegex","chromeEvalRegex","chromeStackParserFn","noFnParts","col","subMatch","extractSafariExtensionDetails","chromeStackLineParser","geckoREgex","geckoEvalRegex","gecko","geckoStackLineParser","defaultStackLineParsers","defaultStackParser","isSafariExtension","isSafariWebExtension","MAX_ALLOWED_STRING_LENGTH","_breadcrumbsIntegration","_getConsoleBreadcrumbHandler","_getDomBreadcrumbHandler","_getXhrBreadcrumbHandler","_getFetchBreadcrumbHandler","_getHistoryBreadcrumbHandler","_getSentryBreadcrumbHandler","breadcrumbsIntegration","_isEvent","status_code","parsedLoc","parsedFrom","parsedTo","DEFAULT_EVENT_TARGET","_browserApiErrorsIntegration","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","browserApiErrorsIntegration","originalCallback","xhr","wrapOptions","globalObject","eventName","wrappedEventHandler","originalEventHandler","_globalHandlersIntegration","_installGlobalOnErrorHandler","globalHandlerLog","_installGlobalOnUnhandledRejectionHandler","globalHandlersIntegration","getOptions","_enhanceEventWithInitialFrame","_getUnhandledRejectionError","_eventFromRejectionWithPrimitive","ev0","ev0s","ev0sf","httpContextIntegration","DEFAULT_KEY","DEFAULT_LIMIT","_linkedErrorsIntegration","linkedErrorsIntegration","getDefaultIntegrations","applyDefaultOptions","optionsArg","shouldShowBrowserExtensionError","windowWithMaybeExtension","extensionKey","extensionObject","runtimeId","extensionProtocols","isDedicatedExtensionPage","isNWjs","browserOptions","startSessionTracking","REPLAY_SESSION_KEY","REPLAY_EVENT_NAME","UNABLE_TO_SEND_REPLAY","SESSION_IDLE_PAUSE_DURATION","SESSION_IDLE_EXPIRE_DURATION","DEFAULT_FLUSH_MIN_DELAY","DEFAULT_FLUSH_MAX_DELAY","BUFFER_CHECKOUT_TIME","RETRY_BASE_INTERVAL","RETRY_MAX_COUNT","NETWORK_BODY_MAX_SIZE","CONSOLE_ARG_MAX_SIZE","SLOW_CLICK_THRESHOLD","SLOW_CLICK_SCROLL_TIMEOUT","REPLAY_MAX_EVENT_BUFFER_SIZE","MIN_REPLAY_DURATION","MIN_REPLAY_DURATION_LIMIT","MAX_REPLAY_DURATION","_nullishCoalesce$1","_optionalChain$5","NodeType$1","NodeType","isElement$1","isNativeShadowDom","shadowRoot","fixBrowserCompatibilityIssuesInCSS","escapeImportStatement","statement","stringifyStylesheet","stringifyRule","importStringified","isCSSImportRule","isCSSStyleRule","fixSafariColons","cssStringified","Mirror","childNode","createMirror","shouldMaskInput","maskInputOptions","maskInputValue","maskInputFn","toLowerCase","toUpperCase","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","canvas","getImageData","originalGetImageData","pixel","getInputType","getInputValue","extractFileExtension","cachedImplementations$1","getImplementation$1","setTimeout$2","clearTimeout$2","tagNameRegex","IGNORED_NODE","genId","getValidTagName","processedTagName","extractOrigin","canvasService","canvasCtx","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","quote1","path1","quote2","path2","path3","filePath","maybeQuote","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","attributeValue","collectCharacters","regEx","absoluteToDoc","descriptorsStr","inParens","isSVGElement","getHref","transformAttribute","maskAttributeFn","ignoreAttribute","_isBlockedElement","blockClass","blockSelector","unblockSelector","eIndex","elementClassMatchesRegex","distanceToMatch","matchPredicate","createMatchPredicate","needMaskingText","maskTextClass","maskTextSelector","unmaskTextClass","unmaskTextSelector","maskAllText","autocomplete","maskDistance","unmaskDistance","onceIframeLoaded","iframeEl","iframeLoadTimeout","fired","readyState","blankUrl","onceStylesheetLoaded","styleSheetLoadTimeout","styleSheetLoaded","serializeNode","mirror","inlineStylesheet","maskTextFn","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","rootId","getRootId","serializeElementNode","serializeTextNode","docId","parentTagName","textContent","isStyle","isScript","isTextarea","forceMask","isInputMasked","needBlock","stylesheet","canvasDataURL","blankCanvas","blankCanvasDataURL","recordInlineImage","lowerIfExists","maybeAttr","slimDOMExcluded","sn","slimDOMOptions","serializeNodeWithId","skipChild","onSerialize","onIframeLoad","onStylesheetLoad","stylesheetLoadTimeout","preserveWhiteSpace","_serializedNode","serializedNode","recordChild","bypassOptions","childN","serializedChildNode","iframeDoc","serializedIframeNode","serializedLinkNode","snapshot","maskAllInputs","slimDOM","_optionalChain$4","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","throttle$1","clearTimeout$1","setTimeout$1","hookSetter","isRevoked","replacement","nowTimestamp","getWindowHeight","getWindowWidth","closestElementOfNode","isBlocked","checkAncestors","blockedPredicate","isUnblocked","blockDistance","unblockDistance","isSerialized","isIgnored","isAncestorRemoved","legacy_isTouchEvent","polyfill","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","_18","StyleSheetMirror","newId","getShadowHost","shadowHost","_19","_20","_21","getRootShadowHost","rootShadowHost","shadowHostInDom","inDom","getImplementation","onRequestAnimationFrame","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","_optionalChain$3","isNodeInLinkedList","DoubleLinkedList","moveKey","MutationBuffer","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","childSn","isParentRemoved","isAncestorInSet","candidate","tailNode","_node","unhandledNode","diffAsStr","unchangedAsStr","attributeName","old","pname","newPriority","nodeId","deepDelete","targetId","addsSet","removes","_isParentRemoved","_isAncestorInSet","errorHandler","registerErrorHandler","unregisterErrorHandler","callbackWrapper","_optionalChain$2","mutationBuffers","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","angularZoneSymbol","initMoveObserver","mousemoveCb","sampling","callbackThreshold","timeBaseline","wrappedCb","totalOffset","updatePosition","clientX","clientY","initMouseInteractionObserver","mouseInteractionCb","disableMap","currentPointerType","getHandler","pointerType","thisEventKey","initScrollObserver","scrollCb","scrollLeftTop","initViewportResizeObserver","viewportResizeCb","lastH","lastW","updateDimension","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","lastInputValue","currentWindow","propertyDescriptor","hookProperties","getNestedCSSRulePositions","childRule","hasNestedCSSRule","getIdAndStyleId","sheet","styleMirror","styleId","initStyleSheetObserver","styleSheetRuleCb","stylesheetManager","insertRule","argumentsList","deleteRule","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","hostId","patchTarget","originalPropertyDescriptor","sheets","_16","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","_17","removeProperty","initMediaInteractionObserver","mediaInteractionCb","currentTime","volume","muted","playbackRate","initFontObserver","fontCb","fontMap","originalFontFace","family","fontFace","restoreHandler","initSelectionObserver","selectionCb","collapsed","updateSelection","selection","startContainer","startOffset","endContainer","endOffset","initCustomElementObserver","customElementCb","initObservers","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","customElementObserver","pluginHandlers","_22","_23","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","remoteIdToIdMap","_optionalChain$1","IframeManagerNoop","IframeManager","crossOriginMessageEvent","transformedEvent","iframeMirror","ShadowDomManagerNoop","ShadowDomManager","iframeElement","manager","CanvasManagerNoop","StylesheetManager","linkEl","adoptedStyleSheetData","ProcessedNodeManager","thisBuffer","wrappedEmit","_takeFullSnapshot","cleanFrame","checkoutEveryNms","checkoutEveryNth","_maskInputOptions","_slimDOMOptions","maxCanvasSize","packFn","mousemoveWait","recordDOM","recordCrossOriginIframes","recordAfter","collectFonts","onMutation","getCanvasManager","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","isCheckout","exceedCount","exceedTime","takeFullSnapshot","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","iframeManager","processedNodeManager","canvasManager","_getCanvasManager","shadowDomManager","getCanvasManagerFn","_addBreadcrumb","makeReplayLogger","_capture","_trace","_logger","logger$1","ReplayEventTypeIncrementalSnapshot","ReplayEventTypeCustom","timestampToMs","timestampToS","addBreadcrumbEvent","INTERACTIVE_SELECTOR","getClosestInteractive","getClickTargetNode","getTargetNode","isEventWithTarget","onWindowOpen","monkeyPatchWindowOpen","originalWindowOpen","handleClick","clickDetector","clickBreadcrumb","ClickDetector","slowClickConfig","_addBreadcrumbEvent","cleanupWindowOpen","nowInSeconds","ignoreElement","isClickBreadcrumb","newClick","timedOutClicks","hadScroll","hadMutation","isSlowClick","clickCount","timeAfterClickMs","endReason","setTimeout$3","SLOW_CLICK_TAGS","updateClickDetectorForRecordingEvent","isIncrementalEvent","isIncrementalMouseInteraction","createBreadcrumb","ATTRIBUTES_TO_RECORD","getAttributesToRecord","handleDomListener","handleDom","isClick","getBaseDomBreadcrumb","getDomTarget","handleKeyboardEvent","getKeyboardBreadcrumb","metaKey","shiftKey","ctrlKey","altKey","isInputElement","hasModifierKey","isCharacterKey","baseBreadcrumb","ENTRY_TYPES","createResourceEntry","createPaintEntry","createNavigationEntry","webVitalHandler","createPerformanceEntries","createPerformanceEntry","entryType","getAbsoluteTime","decodedBodySize","domComplete","encodedBodySize","domContentLoadedEventStart","domContentLoadedEventEnd","domInteractive","loadEventStart","loadEventEnd","redirectCount","transferSize","initiatorType","responseEnd","responseStatus","getLargestContentfulPaint","getWebVital","getCumulativeLayoutShift","nodes","getFirstInputDelay","getInteractionToNextPaint","setupPerformanceObserver","addPerformanceEntry","onEntries","clearCallbacks","clearCallback","EventBufferSizeExceededError","EventBufferArray","eventSize","eventsRet","WorkerHandler","worker","EventBufferCompressionWorker","EventBufferProxy","hasCheckout","addEventPromises","createEventBuffer","useCompression","customWorkerUrl","_loadWorker","workerUrl","_getWorkerUrl","hasSessionStorage","clearSession","deleteSession","isSampled","started","lastActivity","segmentId","previousSessionId","saveSession","getSessionSampleType","sessionSampleRate","allowBuffering","createSession","stickySession","fetchSession","sessionStringFromStorage","sessionObj","isExpired","initialTime","expiry","targetTime","isSessionExpired","maxReplayDuration","sessionIdleExpire","shouldRefreshSession","loadOrCreateSession","sessionOptions","existingSession","isCustomEvent","addEventSync","shouldAddEvent","_addEvent","addEvent","replayOptions","eventAfterPossibleCallback","maybeApplyCallback","timestampInMs","isReplayEvent","isFeedbackEvent","handleAfterSendEvent","handleTransactionEvent","handleErrorEvent","replayContext","beforeErrorSampling","handleBeforeSendEvent","handleHydrationError","exceptionValue","handleBreadcrumbs","beforeAddBreadcrumb","isBreadcrumbWithCategory","normalizeBreadcrumb","normalizeConsoleBreadcrumb","isTruncated","normalizedArgs","normalizedArg","isRrwebError","addFeedbackBreadcrumb","shouldSampleForBufferEvent","handleGlobalEventListener","createPerformanceSpans","handleHistory","handleHistorySpanListener","shouldFilterRequest","addNetworkBreadcrumb","getBodySize","textEncoder","formDataStr","_serializeFormData","parseContentLengthHeader","getBodyString","mergeWarning","newMeta","existingWarnings","makeNetworkReplayBreadcrumb","buildSkippedNetworkRequestOrResponse","bodySize","buildNetworkRequestOrResponse","normalizedBody","warnings","normalizeNetworkBody","getAllowedHeaders","allowedHeaders","filteredHeaders","exceedsSizeLimit","isProbablyJson","_strIsProbablyJson","truncatedBody","urlMatches","urls","getFullUrl","baseURI","fixedUrl","captureFetchBreadcrumbToReplay","_prepareFetchData","enrichFetchBreadcrumb","_getFetchRequestArgBody","reqSize","resSize","requestBodySize","responseBodySize","captureDetails","_getRequestInfo","_getResponseInfo","networkCaptureBodies","networkRequestHeaders","getRequestHeaders","requestBody","bodyStr","networkResponseHeaders","getAllHeaders","bodyText","_parseFetchResponseBody","getResponseData","_tryCloneResponse","_tryGetResponseText","allHeaders","getHeadersFromOptions","_getResponseText","txt","captureXhrBreadcrumbToReplay","_prepareXhrData","enrichXhrBreadcrumb","_getBodySize","getResponseHeaders","requestWarning","responseBody","responseWarning","_getXhrResponseBody","_parseXhrResponse","handleNetworkBreadcrumbs","networkDetailAllowUrls","networkDetailDenyUrls","beforeAddNetworkBreadcrumb","_isXhrBreadcrumb","_isXhrHint","_isFetchBreadcrumb","_isFetchHint","addGlobalListeners","feedbackEvent","addMemoryEntry","createMemoryEntry","memoryEntry","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","callbackReturnValue","maxTimerId","cancelTimers","getHandleRecordingEmit","hadFirstEvent","_isCheckout","addSettingsEvent","earliestEvent","createOptionsEvent","createReplayEnvelope","replayEvent","recordingData","prepareRecordingData","payloadWithSequence","replayHeaders","sequence","prepareReplayEvent","event_id","eventHint","preparedEvent","sendReplayRequest","segment_id","eventContext","preparedRecordingData","errorIds","traceIds","initialTimestamp","baseEvent","TransportStatusCodeError","RateLimitError","sendReplay","replayData","retryConfig","THROTTLED","SKIPPED","maxCount","durationSeconds","_getTotalCount","isThrottled","wasThrottled","ReplayContainer","recordingOptions","slowClickTimeout","slowClickIgnoreSelectors","experiments","errorSampleRate","requiresManualStart","canvasOptions","forceFlush","continueRecording","activityTime","hasStoppedRecording","cbResult","lastActiveSpan","lastRootSpan","_lastActivity","eventBuffer","_context","tooShort","tooLong","mutationLimit","mutationBreadcrumbLimit","overMutationLimit","getOption","selectors","defaultSelectors","getPrivacyOptions","unmask","unblock","defaultBlockedElements","maskSelector","unmaskSelector","maskAttribute","maskAttributes","privacyOptions","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","_initialized","replayIntegration","Replay","flushMinDelay","flushMaxDelay","minReplayDuration","_experiments","blockAllMedia","maskFn","beforeAddRecordingEvent","_getMergedNetworkHeaders","finalOptions","loadReplayOptionsFromClient","canvasIntegration","initialOptions","replaysSessionSampleRate","replaysOnErrorSampleRate","responseToSpanId","spanIdToEndTimestamp","defaultRequestInstrumentationOptions","instrumentOutgoingRequests","traceFetch","traceXHR","shouldCreateSpanForRequest","enableHTTPTimings","tracePropagationTargets","shouldAttachHeadersWithTargets","updatedTimestamp","createdSpan","addHTTPTimings","xhrCallback","isPerformanceResourceTiming","resourceTimingEntryToSpanData","extractNetworkProtocol","nextHopProtocol","resourceTiming","timingSpanData","targetUrl","resolvedUrl","currentOrigin","isSameOriginRequest","isRelativeSameOriginRequest","addTracingHeadersToXhrRequest","setHeaderOnXhr","registerBackgroundTabDetection","cancelledStatus","BROWSER_TRACING_INTEGRATION_ID","DEFAULT_BROWSER_TRACING_OPTIONS","browserTracingIntegration","enableInp","enableLongTask","enableLongAnimationFrame","enableInteractions","enableStandaloneClsSpans","beforeStartSpan","markBackgroundSpan","instrumentPageLoad","instrumentNavigation","_collectWebVitals","latestRoute","_createRouteSpan","isPageloadTransaction","finalStartSpanOptions","idleSpan","emitFinish","startingUrl","traceOptions","getMetaContent","oldPropagationContext","startBrowserTracingPageLoadSpan","startBrowserTracingNavigationSpan","registerInteractionListener","metaName","metaTag","inflightInteractionSpan","registerInteractionTransaction","currentRootSpanOp","DEFAULT_HOOKS","classifyRE","classify","ROOT_COMPONENT_NAME","ANONYMOUS_COMPONENT_NAME","formatComponentName","vm","includeFile","generateComponentTrace","tree","currentRecursiveSequence","attachErrorHandler","warnHandler","silent","lifecycleHook","trace","hasConsole","VUE_OP","HOOKS","finishRootSpan","createTracingMixins","operation","internalHooks","internalHook","isRoot","oldSpan","globalWithVue","DEFAULT_CONFIG","_vueIntegration","integrationOptions","_setupIntegration","vueIntegration","vueInit","appWithInstance","init$1","instrumentVueRouter","startNavigationSpanFn","isFirstPageLoad","isPageLoadNavigation","spanName","transactionSource","getActiveRootSpan","browserTracingIntegration$1","routeLabel","SENTRY_ERROR_CODES_TO_IGNORE","sentry_client_shVUlIjFLk","tracesSampleRate","Sentry.init","Sentry.browserTracingIntegration","Sentry.replayIntegration","tracking_RJtqiU4YuV","setupTrackingImpressionObserver","setupImpressionObserver","eventBinding","callHandler","stores_BlraoXqTo0","plugin_vue3_YdLad5Mpq3","vue3_toastify_plugin_client_rOZcJZoOUW","colors_SVBUrxEU7r","componentKey","labelWidth","inputWidth","labelHover","labelText","sizeclasses","showTooltip","handleResize","delayedResize","VARIANT_BASED_CLASSES","SIZE_BASED_CLASSES","noText","iconClasses","fontClasses","outline","framed","_default","emailaddress","subscribeTracking","newsletterAction","useScreen","newlyRendered","menuToggle","blocks","navigateToAnchor","md","hashRef","getDeps","depTime","newDeps","resultTime","depEndTime","resultEndTime","resultFpsPercentage","notUndefined","approxEqual","targetWindow","defaultKeyExtractor","defaultRangeExtractor","observeElementRect","box","addEventListenerOptions","supportsScrollend","observeElementOffset","createHandler","isScrolling","horizontal","isRtl","endHandler","measureElement","elementScroll","adjustments","behavior","toOffset","Virtualizer","_ro","opts2","scrollElement","furthestMeasurementsFound","furthestMeasurements","previousFurthestMeasurement","paddingStart","scrollMargin","getItemKey","itemSizeCache","furthestMeasurement","measuredSize","lane","outerSize","scrollOffset","calculateRange","rangeExtractor","overscan","indexStr","prevNode","itemSize","virtualItems","findNearestBinarySearch","align","scrollSizeProp","initialAlign","offsetAndAlign","latestOffset","low","high","getCurrentValue","currentValue","endIndex","useVirtualizerBase","virtualizer","useVirtualizer","e.useId","e.inject","s$5","define_process_env_default","_useModel","topDestinations","countries","regions","suggestion","handleFocus","handleInput","handleQueryChange","handleClear","screen","isOpen","vOnClickOutside","onScrollLock","calendar","__emit","firstPossibleArrival","selectedDay","hoveredDay","hoveredDayLabel","focusedDate","initialPage","initialPagePosition","rightColumnMonth","lastMonthClicked","currentYear","yearStart","yearEnd","currentRangeKey","vcAttributes","attributeDeparture","attributesRange","attributesNotSelected","rangeDates","startDay","contentClasses","dateWithOffset","getDotValueForOverallAttributes","isSpecial","isInPast","isInRange","isRangeEndsWithSpecial","dateDiff","handlePageUpdate","onFocusDate","vcDay","onDayHover","onDayPress","cancelDayPress","isSelectable","getCustomData","determineBoundaries","trPrefixSearchDates","trPrefixFlexibleDates","__expose","focusOnFirstDate","presetDurations","dateRangeCalendar","tab","tabValue","datePeriod","newDuration","calculatedDuration","selectDuration","getCalendarEventState","onStartDateSelect","eventState","onDateRangeRange","onDatePickerTabChange","onReset","onApply","period","handleInputChange","decreasable","incresable","handleButtons","guests","hasSelectedValues","datesPeriod","pets","isCollapsed","performSearch","presetQuery","renderAsAnchor","hashParam","lead","countryPath","regionPath","placePath","useStorageReady","bookmarks","trPrefixCommon","LOADING_COUNT","STEP","DEBOUNCE","useColors","lim","p2b","n2b","b2n","n2p","map$1","h1","isShort","hexParse","alpha","hexString","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","hueValue","rgb2hsl","calln","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","rotate","deg","hslString","names$1","unpacked","tkeys","ok","nk","nameParse","RGB_RE","rgbParse","rgbString","interpolate","rgb1","rgb2","modHSL","ratio","clone","fromObject","functionParse","Color","w2","w1","isNullOrUndef","isNumberFinite","finiteOrDefault","valueOrDefault","toDimension","dimension","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","klen","isValidKey","_merger","tval","sval","mergeIf","_mergerIf","keyResolvers","_splitKey","_getKeyResolver","resolveObjectKey","_capitalize","defined","setsEqual","_isClickEvent","PI","TAU","HALF_PI","log10","almostEquals","epsilon","niceNum","roundedRange","niceRange","fraction","_factorize","sqrt","isNonPrimitive","almostWhole","rounded","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","cmp","hi","lo","mid","_lookupByKey","ti","_rlookupByKey","_filterBetween","arrayEvents","listenArrayEvents","unlistenArrayEvents","stub","_arrayUnique","requestAnimFrame","argsToUse","ticking","_toLeftRightCenter","_alignStartEnd","atEdge","elasticIn","elasticOut","isPatternOrGradient","getHoverColor","numbers","applyAnimationsDefaults","applyLayoutsDefaults","intlCache","getNumberFormat","formatNumber","tickValue","ticks","notation","maxTick","calculateDelta","logDelta","numDecimal","remain","Ticks","applyScaleDefaults","overrides","getScope$1","Defaults","_descriptors","_appliers","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","appliers","toFontString","font","_measureText","gc","longest","textWidth","_alignPixel","chart","devicePixelRatio","halfWidth","clearCanvas","_isPointInArea","point","area","margin","clipArea","unclipArea","setRenderOpts","decorateText","metrics","yDecoration","drawBackdrop","oldColor","renderText","stroke","addRoundedRectPath","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","toTRBL","toTRBLCorners","toPadding","toFont","inputs","_addGrace","minmax","grace","beginAtZero","change","keepZero","parentContext","_createResolver","scopes","rootScopes","getTarget","finalRootScopes","_cached","_resolveWithPrefixes","getKeysFromAllScopes","_attachContext","subProxy","descriptorDefaults","_resolveWithContext","_scriptable","_indexable","_allKeys","readKey","needsSubResolver","_proxy","_subProxy","_resolveScriptable","_resolveArray","_stack","createSubResolver","isIndexable","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getStyle","getPositionedStyle","useOffsetPos","getCanvasPosition","touches","getRelativePosition","currentDevicePixelRatio","borderBox","paddings","borders","xOffset","yOffset","getContainerSize","maxWidth","maxHeight","containerStyle","containerBorder","containerPadding","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","Animator","anims","numSteps","draw","charts","animator","transparent","interpolators","factor","c0","Animation","cfg","loop","rej","Animations","animationOptions","animatedProps","newOptions","resolveTargetOptions","animations","awaitAll","running","animation","properties","anim","scaleClip","scale","allowedOverflow","defaultClip","xScale","yScale","toClip","getSortedDatasetIndices","filterVisible","metasets","applyStack","dsIndex","singleMode","datasetIndex","otherValue","convertObjectDataToArray","iScale","vScale","iAxisKey","vAxisKey","adata","isStacked","getStackKey","indexScale","valueScale","getUserBounds","minDefined","maxDefined","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","updateStacks","iAxis","vAxis","itemStacks","visualValues","getFirstScaleId","scales","createDatasetContext","createDataContext","clearStacks","isDirectUpdateMode","cloneIfNotShared","shared","createStack","canStack","DatasetController","chooseId","xid","yid","rid","indexAxis","iid","vid","scaleID","_data","resetNewElements","stackChanged","oldStacked","scopeKeys","_stacked","sorted","isNotInOrderComparedToPrev","singleScale","xAxisKey","yAxisKey","parsedValue","_parsed","otherScale","otherMin","otherMax","_skip","drawActiveElementsOnTop","elementType","sharing","sharedOptions","firstOpts","previouslySharedOptions","includeOptions","numMeta","numData","removed","newCount","getAllScaleValues","visibleMetas","computeMinSampleSize","updateMinAndPrev","computeFitCategoryTraits","ruler","stackCount","thickness","computeFlexCategoryTraits","pixels","parseFloatBar","startValue","endValue","barStart","barEnd","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","borderProps","setBorderSkipped","edge","parseEdge","swap","startEnd","orig","setInflateAmount","inflateAmount","BarController","vpixels","ipixels","dataIndex","currentParsed","iScaleValue","skipNull","barThickness","baseValue","minBarLength","startPixel","endPixel","halfGrid","maxBarThickness","stackIndex","abstract","DateAdapterBase","members","binarySearch","metaset","intersect","_sorted","spanGaps","lookupMethod","distanceToDefinedLo","distanceToDefinedHi","evaluateInteractionItems","getDistanceMetricForAxis","useX","useY","pt1","pt2","getIntersectItems","useFinalPosition","includeInvisible","getNearestRadialItems","evaluationFunc","startAngle","endAngle","getNearestCartesianItems","distanceMetric","minDistance","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","setLayoutDims","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","buildLayoutBoxes","centerHorizontal","centerVertical","getCombinedMax","chartArea","updateMaxPadding","boxPadding","updateDims","newWidth","newHeight","widthChanged","heightChanged","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","same","setBoxDims","placeBoxes","userPadding","layoutItem","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","nodeListContains","nodeList","createAttachObserver","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","releaseObserver","createProxyAndListen","DomPlatform","initial","proxies","_detectPlatform","Element$2","autoSkip","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","majorIndices","getMajorIndices","numMajorIndices","newTicks","skipMajors","spacing","calculateSpacing","avgMajorSpacing","skip","tickLength","maxScale","maxChart","evenMajorSpacing","getEvenSpacing","factors","majorStart","majorEnd","reverseAlign","offsetFromEdge","getTicksLimit","ticksLength","maxTicksLimit","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","garbageCollect","caches","gcLen","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","titleAlign","titleArgs","rotation","titleX","titleY","positionAxisID","Scale","Element","_userMin","_userMax","_suggestedMin","_suggestedMax","metas","sampleSize","samplingEnabled","reversePixels","numTicks","minRotation","maxRotation","labelRotation","tickWidth","maxLabelDiagonal","labelSizes","maxLabelWidth","maxLabelHeight","minSize","titleOpts","gridOpts","isHorizontal","titleHeight","widest","highest","tickPadding","angleRadians","cos","sin","labelHeight","isRotated","labelsBelowTicks","offsetLeft","offsetRight","paddingLeft","paddingRight","paddingTop","paddingBottom","widths","heights","widestLabelSize","highestLabelSize","jlen","tickFont","fontString","lineHeight","nestedLabel","valueAt","decimal","optionTicks","rot","grid","border","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","optsAtIndex","optsAtIndexBorder","lineWidth","lineColor","borderDash","borderDashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","tickAndPadding","hTickAndPadding","textAlign","lineCount","textOffset","textBaseline","halfCount","strokeColor","strokeWidth","tickTextAlign","backdrop","labelPadding","backgroundColor","drawLine","lastLineWidth","renderTextOptions","tz","gz","bz","axisID","fontSize","TypedRegistry","override","parentScope","isIChartComponent","registerDefaults","itemDefaults","routeDefaults","propertyParts","sourceName","sourceScope","Registry","typedRegistry","reg","itemReg","camelMethod","PluginService","allPlugins","createDescriptors","previousDescriptors","localIds","getOpts","pluginOpts","getIndexAxis","datasetDefaults","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","datasetType","mainScope","resetCache","_scopeCache","keyLists","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","isScriptable","scriptable","indexable","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","onAnimationsComplete","onAnimationProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","getSizeForArea","getDatasetArea","Chart$1","invalidatePlugins","userConfig","initialCanvas","existingChart","maintainAspectRatio","_aspectRatio","newSize","newRatio","scalesOptions","axisOptions","scaleOpts","isRadial","scaleType","scaleClass","hasUpdated","datasets","newControllers","ControllerClass","datasetElementType","dataElementType","animsDisabled","_active","_lastEvent","existingEvents","newEvents","_hiddenIndices","changes","_dataChanges","datasetCount","makeSet","changeSet","noArea","layers","clip","useClip","_add","_remove","attached","activeElements","lastActive","pluginId","hoverOptions","Chart","getBarBounds","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","enableBorderRadius","maxR","enableBorder","boundingRects","bounds","skipX","skipY","hasRadius","addNormalRectPath","inflateRect","refRect","BarElement","borderColor","outer","addRectPath","mouseX","mouseY","addIfString","addedLabels","findOrAddLabel","_getLabelForValue","CategoryScale","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","rad","LinearScaleBase","setMin","setMax","minSign","maxSign","stepSize","numericGeneratorOptions","LinearScale","INTERVALS","UNITS","sorter","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","determineUnitForFormatting","determineMajorUnit","addTick","setMajorTicks","majorUnit","major","ticksFromTimestamps","TimeScale","_applyBounds","timeOpts","minor","hasWeekday","fmt","minorFormat","majorFormat","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","displayFormats","exampleLabel","prevSource","nextSource","prevTarget","TimeSeriesScale","CommonProps","A11yProps","Props","compatProps","toRawIfProxy","cloneProxy","src","setOptions","nextOptions","setLabels","currentData","nextLabels","setDatasets","nextDatasets","datasetIdKey","addedDatasets","nextDataset","currentDataset","cloneData","nextData","canvasRef","chartRef","renderChart","clonedData","proxiedData","destroyChart","param1","nextOptionsProxy","nextDataProxy","prevOptionsProxy","prevDataProxy","shouldUpdate","prevLabels","prevDatasets","createTypedChart","registerables","reforwardRef","Bar","BAR_THICKNESS","BAR_OPTIONS","loadingBars","y$2","et$2","DOT_SIZE_REM","RAIL_HEIGHT_REM","OPTIONS_SAMPLE","priceRange","setKey","resetKey","submitKey","formdataKey","fieldErrorsKey","setFieldErrorsKey","registerKey","modelKey","internalModel","_openBlock","_component_HeadlessDisclosure","_withCtx","_Transition","_component_HeadlessDisclosurePanel","_component_HeadlessDisclosureButton","_createTextVNode","_toDisplayString","_createElementBlock","_mergeProps","STARS_MAX","stars","resolvedComponent","sizing","fonts","titles","OPTIONS","MODE_CLASSES","isTopRated","getTripDateRange","isTripValid","getTripOrigPrice","dateRangeText","isBookmarked","maxDots","dotsStyle","slides","isMoreThenOneSlide","slideButtons","setImages","slider","useKeenSlider","onSlideChangeIntent","loadImagesAround","loadImageAt","relativeIndex","slideTo","onSlideButtonClick","slideFn","paginationDots","useAccomImageCollection","getTransformationFn","_images","buildImage","accomPrefix","typeText","caption","alt","accomData","createAccomImage","toAccomData","mapResultDoc","mapTranslatedAccom","useAccommodation","getImages","getVacancies","IMAGE_NEXT_PLACEHOLDER_ID","gallery","isLoaded","loadImageKeys","imageIds","imageMeta","_imageMeta","img","createMapper","createOperationsGenerator","keyMap","joinWith","valueMap","valueKey","mapper","parseSize","parseDensities","densities","density","checkDensities","parseSizes","sizes","createImage","getImage","resolveImage","$img","presetName","getMeta","getSizes","provider","getProvider","preset","getPreset","inputHost","expectedFormat","hwRatio","sizeVariants","srcsetVariants","getSizesVariant","getVariantSrc","finaliseSizeVariants","finaliseSrcsetVariants","defaultVariant","sizesVal","srcsetVal","screenMaxWidth","isFluid","_cWidth","_cHeight","previousMedia","sizeVariant","previousWidth","operationsGenerator","validateDomains","supportsAlias","imageOptions","ipxRuntime$6fvceTRRcZ","useImage","markFeatureUsage","featureName","baseImageProps","useBaseImage","imgProps","__nuxt_component_0$2","placeholderLoaded","imgEl","attrs2","placeholder2","mainSrc","isResponsive","initialLoad","_createBlock","_component_VTooltip","isVisible","RATING_MIN","RATING_MAX","RATING_DELIM","roundRating","roundRatingToDecimal","formatRating","getRatingText","getRatingHearts","useRating","delim","formatCurrency","numberFormatOptions","useMoneyFormat","toMoney","hasDiscount","perNight","findTargetA","isEnterOrSpaceKey","card","gap","handleKeydown","openDetailPage","PAGE_SIZE","STUB_ITEMS","isGridView","getIndexWithOffset","getPageNumbers","even","onSelect","sliderRef","reviewsCount","geoTitle","confTitle","filtersText","translation","sliderEnd","initSlider","KeenSlider","sliderMove","numberOfSlides","currentSlide","moveIdx","newIdx","topRated","slugparts","textsize","toSearchURL","breadcrumbPlace","modifiedSearch","iconclasses","showFreeCancellationInfo","lastFreeCancellationDate","lastFreeCancellationDateShort","lastFreeCancellationDateFull","tooltip","mapRef","changeZoom","loadGoogleMaps","Loader","newmap","addToWishlistEvt","deleteFromWishlistEvt","mapVisibilityState","isPricePerNightEnabled","priceText","formatPrice","pricePerNightText","allowBookmark","dateRageText","legalinfo","dependentPrice","priceAfterInput","addCosts","addCostsLong","zoom","onBookmarkClick","processAsPartner","IMAGE_TRANSFORMATIONS","onPropertyClick","MIN_HITS_TO_DISPLAY","MIN_RESULTS_TO_DISPLAY","PLACE_ONLY_BLOCKS","TYPE_BLOCKS","TYPE_FILTERS","BLOCK_FILTERS","destinationName","typeFilter","apiResponse","contentSight","observeContentSights","isIntersecting","sights","maxSights","sightsToShow","onReadMoreClick","sun","rain","act","BOTTOM","HEIGHT","minTemp","maxTemp","posOf","relativeTemp","imageUrl","scroller","lastIndexes","intersectionObserver","emitItemsDisplay","scrollCounter","hovering","visibleButtons","offsetWidth","scrollWidth","scrollTo","clientWidth","indexesChanged","getIndexesChanged","getDirection","onScrollClick","useNovaApi","getContentAssets","useContentAssets","getDestinationCode","getLocale","assets","useSearchApi","getLinkedObjects","searchFacets","hasFilters","nonEmptyFacets","key1","value1","filtersToDisplay","filterCopy","filterconf","filterValue","updateFacets","subDestinations","minContentHeight","expanded","slotContent","maxContentHeight","fadeClasses","btnClasses","contentHeight","expand","onSeoTextClick","targetA","entities","require$$0","encodeCache","getEncodeCache","exclude","keepEscaped","nextCode","encode_1","decodeCache","getDecodeCache","seq","b1","b2","b3","b4","decode_1","Url","protocolPattern","portPattern","simplePathPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","urlParse","slashesDenoteHost","lowerProto","hec","slashes","simplePath","hostEnd","atSign","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","qm","mdurl","require$$1","require$$2","require$$3","uc_micro","require$$4","_class","_hasOwnProperty","arrayReplaceAt","newElements","isValidEntityCode","fromCodePoint","surrogate1","surrogate2","UNESCAPE_MD_RE","ENTITY_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","unescapeMd","unescapeAll","escaped","entity","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","escapeHtml","REGEXP_ESCAPE_RE","escapeRE","isSpace","isWhiteSpace","UNICODE_PUNCT_RE","isPunctChar","isMdAsciiPunct","normalizeReference","parse_link_label","disableNested","marker","prevPos","labelEnd","oldPos","parse_link_destination","parse_link_title","default_rules","slf","langName","langAttrs","highlighted","tmpAttrs","tmpToken","Renderer","nextToken","needLf","Ruler","chains","altName","beforeName","ruleName","afterName","ignoreInvalid","chainName","NEWLINES_RE","NULL_RE","inline","tok","isLinkOpen","isLinkClose","linkify","currentToken","ln","lastPos","htmlLinkLevel","urlText","blockTokens","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","replacements","blkIdx","QUOTE_TEST_RE","QUOTE_RE","APOSTROPHE","replaceAt","process_inlines","thisLevel","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","canOpen","canClose","isSingle","openQuote","closeQuote","OUTER","smartquotes","text_join","Token","nesting","attrData","StateCore","state_core","require$$5","require$$6","require$$7","Core","require$$8","parser_core","getLine","escapedSplit","isEscaped","startLine","endLine","lineText","nextLine","columns","columnCount","aligns","tableLines","tbodyLines","oldParentType","terminate","terminatorRules","firstCh","secondCh","fence","mem","markup","haveEndMarker","blockquote","adjustTab","lastLineEmpty","oldBMarks","oldBSCount","oldIndent","oldSCount","oldTShift","spaceAfterMarker","isOutdented","oldLineMax","hr","cnt","skipBulletListMarker","skipOrderedListMarker","markTightParagraphs","contentStart","indent","indentAfterMarker","isOrdered","itemLines","listLines","listTokIdx","markerCharCode","markerValue","oldListIndent","oldTight","posAfterMarker","prevEmptyEnd","isTerminatingParagraph","tight","_endLine","destEndPos","destEndLineNo","html_blocks","attr_name","unquoted","single_quoted","double_quoted","attr_value","open_tag","close_tag","comment","processing","declaration","cdata","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","html_re","block_names","HTML_SEQUENCES","html_block","lheading","paragraph","StateBlock","indent_found","begin","keepLastLF","lineIndent","lineStart","state_block","require$$9","require$$10","require$$11","ParserBlock","prevLine","hasEmptyLines","maxNesting","outTokens","require$$12","parser_block","isTerminatorChar","SCHEME_RE","newline","pmax","ws","ESCAPED","_escape","origStr","escapedStr","backticks","matchStart","matchEnd","openerLength","closerLength","strikethrough","scanned","postProcess","startDelim","endDelim","loneMarkers","tokens_meta","emphasis","isStrong","labelStart","parseReference","EMAIL_RE","AUTOLINK_RE","autolink","isLetter","lc","html_inline","DIGITAL_RE","NAMED_RE","processDelimiters","closerIdx","openerIdx","closer","opener","minOpenerIdx","newMinOpenerIdx","isOddMatch","lastJump","openersBottom","headerIdx","lastTokenIdx","jumps","balance_pairs","fragments_join","StateInline","token_meta","canSplitWord","can_open","can_close","left_flanking","right_flanking","state_inline","_rules2","require$$13","require$$14","ParserInline","require$$15","parser_inline","text_separators","isOptionsObj","defaultSchemas","tlds_2ch_src_re","tlds_default","resetScanCache","createValidator","createNormalizer","tlds","untpl","tpl","aliases","schemaError","compiled","alias","slist","Match","createMatch","LinkifyIt","schemas","definition","ml","tld_pos","at_pos","keepOld","linkifyIt","maxInt","tMin","tMax","skew","damp","initialBias","initialN","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","floor","stringFromCharCode","mapDomain","encoded","ucs2decode","ucs2encode","codePoints","basicToDigit","codePoint","digitToBasic","digit","adapt","numPoints","firstTime","inputLength","bias","basic","oldi","baseMinusT","basicLength","handledCPCount","handledCPCountPlusOne","qMinusT","toUnicode","toASCII","punycode","zero","commonmark","ParserCore","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","RECODE_HOSTNAME_FOR","normalizeLink","normalizeLinkText","MarkdownIt","presets","missed","lib","markdownIt","VueMarkdown","LAYOUT_DEFAULT","OBJECT_TEASERS_MIN_RESULTS_TO_DISPLAY","OBJECT_TEASERS_FILTERS_TO_DISPLAY","CONTENT_ASSETS_FILTERS_TO_DISPLAY","isContentAssetsEnabled","debouncedState","searchUrl","searchResults","destinationFilter","destinationFilterKey","filtersKey","objectTeasersEnabled","objectTeasersVisible","contentAssetsEnabled","previousUrl","subTitles","toNewsletter","linkMap","tpIDs","labelSizeclasses","valueOf","TOGGLE_KEY","DEFAULT_VALUE","optionsList","optionsMobile","optionsDesktop","iconPath","sortedOptions","mobile","switchFlexible","trackArrival","arrival","trackDeparture","dateRangeSearch","openFocusCalendar","clearTrip","maxPrice","increaseMaxAmount","decreaseMaxAmount","trPrefixDistance","trPrefixLabels","trPrefixSelect","THEME_FACET_MAP","hyphenToUnderscore","NUMBER_FILTERS","DISTANCE_FILTERS","DISTANCE_PRESET_VALUES","facetToNumberOptions","buckets","cumulative","facetToDistanceOptions","onCountryChange","onRegionChange","onPlaceChange","fullPlace","cW","SKIP_PARAMS","BATCH_RESET","prettyFilters","toPrettyFilter","labelFor","removeFilter","_imports_0$2","_imports_1$1","COLOR_CLASSES","heart","colorClasses","pricePerNight","origPrice","ctaClick","toggleMap","DISPLAY_COUNT_MAX","FUZZINESS","accommodations","openAccommodation","nextAccommodation","prevAccommodation","WORLD_DIM","ZOOM_MAX","latRadOf","radX2","calcZoom","mapPx","worldPx","calcBoundsZoomLevel","mapDim","latFraction","lngDiff","lngFraction","latZoom","lngZoom","getBoundsEmpty","getBoundsDefault","getBoundsFromViewport","south","north","east","west","getBoundsFromCoords","nw","isViewportValid","autoMaxZoom","deClusterLevel","mapBoundsPadding","infoWindowRef","infoWindow","infoWindowIsVisible","markers","preventZoomChangeEvent","searchresult","searchresultInv","debugInfo","renderDebugInfo","renderDebugBorders","getCoordEmpty","triggerMapBoundsSearch","MapOverlay","searchForBounds","newBounds","newZoom","hasFiltersByGeo","resultInv","inverseGeoParams","fitBounds","renderMarkers","clearProposal","geoAnalysis","sw","prepareItems","itemsInv","createMarker","inbound","sum","distinctCoords","cardinality","handleMarkerClick","zoomAndPanMapTo","showAccommodation","triggerViewportSearch","getMapBounds","_v","_w","_x","_y","_z","_A","_B","_C","_D","_E","_F","_G","destProposal","geoProposal","searchresultProp","geoRad","renderDebugCircle","placeRegex","geoPlace","geoProposalPlace","placeRegion","placeCountry","regionRegex","geoRegion","geoProposalRegion","regionCountry","countryRegex","geoCountry","geoProposalCountry","CoordMapType","coordMapType","hideDebugBorders","showDebugBorders","hideDebugCircle","oldBounds","showDebugCircle","mapMode","filterOpen","destProposalString","testmapInfo","scrollpoint","pageActive","pagesTotal","updateHeight","onSort","loadPage","setDestUpdate","setDestination","onToDetailpage","newsletterSignupVisible","newFilter","oldFilter","onInteraction","selectedItem","defaultItems","toAutosuggestItem","handleBlur","handleTextChange","handleKeyup","partnerid","whatsAppLink","trail","showSlider","onSlideChange","SIZES","transformations","openGalleryModal","imgId","appendToEl","toTransformString","setWidthHeight","LOAD_STATE","specialKeyUsed","getElementsFromOption","legacySelector","isPswpClass","isSafari","PhotoSwipeEvent","details","Eventable","_this$_filters$name","_this$_filters$name2","_this$pswp","f1","f2","_this$_filters$name3","_this$_listeners$name","_this$pswp2","_this$pswp3","_this$_listeners$name2","Placeholder","imageSrc","_this$element","Content","itemData","isLazy","reload","placeholderEl","placeholderSrc","_this$data$src","_this$data$alt","imageElement","slide","isInitialSizeUpdate","sizesWidth","_this$instance$option","_this$instance$option2","errorMsgEl","supportsDecode","pswp","newViewportSize","parsePaddingOption","viewportSize","paddingValue","legacyPropName","getPanAreaSize","MAX_IMAGE_WIDTH","ZoomLevel","panAreaSize","elementSize","hRatio","vRatio","optionPrefix","optionName","currZoomLevel","lazyLoadData","zoomLevel","lazyLoadSlide","PhotoSwipeBase","_this$options","dataSource","slideData","_this$options2","dataSourceItem","galleryElement","_this$options3","_this$options4","thumbnailEl","_thumbnailEl$getAttri","PhotoSwipeLightbox","initialPoint","clickedIndex","clickedTarget","clickedChildIndex","galleryElements","promiseArray","pswpModuleType","iterableModules","mainModule","share","lightbox","closeModal","handleBookmark","showSocialShare","checkScrollTo","imgDefault","img2XL","imgXL","imgL","imgM","openLightbox","handleClose","handleGalleryClose","TOP_RATED_THRESHOLD","showTopRated","premises","displaySchemes","viewsWidth","distWidth","viewClasses","distClasses","views","sortedDistances","alist","sustattrs","sustattr","scheme","activeScheme","distanceWithUnit","mType","internalCheckIn","filteredDescriptions","startDates","maxValidTo","descSorted","newDescription","minEndDateInside","minEndDateOutside","idxInside","idxOutside","defaultIndex","isoDate","activeIndex","activeDescription","nv","ov","general","summer","winter","showSecondMonth","numElems","calcNumElems","sliderprev","slidernext","VacancyDayStatus","useVacancyDays","selectedStartDate","firstPossibleStart","maxRange","dayOf","getSpecialDates","isClickable","getAvailableDates","getStatus","getTooltip","minDay","daysDiff","getDurations","monthFrom","monthTo","arrivalSelected","durationOptions","foo","onDurationOpen","onUpdatePageDates","gotoMonth","inszLink","co2Link","susu2Link","mouseenterEvent","hideTooltip","mouseleaveEvent","SERVICE_ORDER","SERVICE_GROUPS","groups","sortServices","services","inPriceIncluded","service","refund","steps","onFilterChange","newvalue","travelWith","showDetails","showTips","showTranslation","translatedReview","translationDone","loadTranslation","customizedReview","hasReviewDetails","reviewDate","displayTranslationButton","toggleDetails","toggleTranslation","translateReview","targetlang","webccApi","_withAsyncContext","review1","review2","CheckPriceState","useCheckPrice","minPrice","optionPossible","alerts","loadFinal","adults","vacancyOpen","areaId","titleClasses","vacancyPopover","titleClass","toggleVacancyPopover","tooltips","handleDateClick","trackDateClick","onBookingClick","isOption","toggleName","isTripSelected","formattedRange","formattedPrice","additionalCostsTooltip","onAdditionalCostsTooltipMouseEnter","createBookingPending","useBookingsPending","lastBookingStorage","booking","getLast","verify","dismissLast","vacancies","loadAccommodation","galleryModalOpen","scrollImg","vacanciesRef","costsRef","reviewsRef","sidebarRef","minPriceTrip","regular","checkPrice","navigationLinks","scrollToImg","noFacettedGallery","paxUpTo","validities","validity","validFrom","validTo","casa","swisspeakResort","swissTourism","lso","descriptionsDerived","showDescriptionsDerived","getCheckPriceFinal","tripValue","onUpdateTrip","updateURL","book","scrollto","section","toggleGallery","searchApi","fields","showRandomField","sectionclasses","headlineclasses","buttonclasses","toInfos","consentVisible","getAccommodationDestination","isContactBoxEnabled","topRef","screenSize","setScreenSize","CUSTOM_BACKGROUND_COMPONENTS","_imports_0$1","reviewDestination","loadReviewPage","inpage","arraysEqual","formdata","fieldErrors","setFieldErrors","validate","validationState","normalizedOptions","validOrMessage","validation","captchaRef","loadCaptchaFunctionName","updateTokenFunctionName","windowWithReCAPTCHA","sitekey","loadCaptcha","updateToken","_sfc_main$N","combined","splitTranslation","formFields","form","scrollToError","registerFormField","formField","setField","hasErrors","submit","useValidation","formRef","captcha","emailError","paxOptions","sendCatalog","showModal","favorites","sortorder","hideInfobox","paxDependentPrice","filteredList","elem1","elem2","clearFavorites","HASH_PLACEHOLDER","useEmails","_parseAction","queryAction","defaultParams","getActionUrl","subscribe","confirm","registrationType","emailValidationResult","toStartpage","selectedOption","confCurrency","logoHref","changeLanguage","changeCurrency","MENU_BLOCKS","activeItem","menu","toMenuItem","hideModal","_component_Colors","_component_MyRentHeader","_component_DetailsAccommodation","_createElementVNode","toggling","menuItems","trackNavigation","ll","sl","Kt","fr","il","Qr","ul","xl","ni","oi","Va","zo","li","Dl","di","Vn","Gt","vi","jn","ja","Ua","gn","Pn","Ci","wi","Ga","xi","Si","Ei","ha","mr","cl","Ai","Ft","Pa","Da","Cn","Ol","Oi","ki","Mi","ya","Vi","Ml","Xn","pl","Fn","Ki","$a","qi","Yi","jt","Zi","Ji","Nl","zl","Kl","Ma","wn","Wo","Oa","eu","Jn","jo","tu","au","nu","ou","Uo","lu","Ya","Qn","Wl","hu","yu","gu","Cu","wu","mf","toProfile","toBookings","toggleMenu","closeMenu","menuItemClick","bookmarksURL","signIn","trackingLogo","trackContactUs","toWishlist","navigateToFavourites","navigateToWishlists","Smooch","iconPublicUrl","privacyPolicyUrl","themeColor","ctaColor","isDetailPage","setBranding","getMessenger","removeBranding","logo","getMessageContainer","_imports_0","_imports_1","readMore","toaster","displayedPopups","redirection","notifySignedIn","notifyInterchaletMigration","__nuxt_component_0","lastBooking","toBooking","apiKey","__nuxt_component_22","_error","_props","WebccModal","getUrlWithParams","languageTracking","isDomainSwitcherEnabled","isPhoneNumberEnabled","trimmedPhoneNumber","domains","paymentMethods","showFooterLinks","currentDomain","domLangOpen","openConfig","openDomainSwitcher","closeDomainSwitcher","sizeClasses","_Fragment","_renderList","__unimport_unref_","__unimport_useAB","_component_WebccSwitch","TABS","COLOR_GROUPS","openTab","colorGroups","pickGroupColors","usedConsent","sendChoice","windowScrollLock","xs","isScreenSmall","decision","openPrivacypolicy","closeConfig","saveChoice","onCardClick","requiredValidator","forbiddenChars","createNew","selectWishlist","saveWishlist","backToWishlists","openModal","modalShown","layoutAndComponent","__nuxt_component_1","__nuxt_component_2","__nuxt_component_3","__nuxt_component_4","__nuxt_component_5","__nuxt_component_6","__nuxt_component_7","__nuxt_component_8","__nuxt_component_9","__nuxt_component_10","accommodationToLinkParam","signedInParam","routeChanged","openWishlistModal","checkWishlistModal","iframeResize","accommodationToLink","cleanQuery","IslandRenderer","onResolve","removeErrorHook","SingleRenderer","abortRender","hookError","islandContext","vueAppPromise","vueApp","RootComponent","handleVueError"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,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,72,73,74,75,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,121,122,123,124,125,126,127,128,129,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,259,260,261,262,263,264,265,266,267,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,327,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,372,373,374,375,376,377,378,379,422,423,424,433,434,435,436,437,440,441,442,443,444,445,446,447,448,452,453,458,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,604,605,606,607,608,609,610,611,612,613,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,753,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,811,816,829,830,831,832,834,843,852,853,856,857,858,865,870,871,872,873,874,875,876,877,878,895,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,1038,1111,1112,1123,1139,1140],"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/destr/dist/index.mjs","../../../../node_modules/ufo/dist/index.mjs","../../../../node_modules/ofetch/dist/shared/ofetch.03887fc3.mjs","../../../../node_modules/ofetch/dist/index.mjs","../../../../virtual:nuxt:/myapp/.nuxt/nitro.client.mjs","../../../../virtual:nuxt:/myapp/.nuxt/paths.mjs","../../../../virtual:nuxt:/myapp/.nuxt/fetch.mjs","../../../../node_modules/hookable/dist/index.mjs","../../../../node_modules/unctx/dist/index.mjs","../../../../virtual:nuxt:/myapp/.nuxt/nuxt.config.mjs","../../../../node_modules/nuxt/dist/app/nuxt.js","../../../../node_modules/cookie-es/dist/index.mjs","../../../../node_modules/ohash/dist/index.mjs","../../../../node_modules/radix3/dist/index.mjs","../../../../node_modules/defu/dist/defu.mjs","../../../../node_modules/h3/dist/index.mjs","../../../../node_modules/nuxt/dist/app/components/injections.js","../../../../node_modules/nuxt/dist/app/composables/router.js","../../../../node_modules/nuxt/dist/app/composables/error.js","../../../../node_modules/devalue/src/base64.js","../../../../node_modules/devalue/src/constants.js","../../../../node_modules/devalue/src/parse.js","../../../../node_modules/@unhead/shared/dist/index.mjs","../../../../node_modules/@unhead/dom/dist/index.mjs","../../../../node_modules/unhead/dist/index.mjs","../../../../node_modules/@unhead/vue/dist/shared/vue.f49591ad.mjs","../../../../node_modules/@unhead/vue/dist/shared/vue.8fc199ce.mjs","../../../../node_modules/nuxt/dist/app/composables/manifest.js","../../../../node_modules/nuxt/dist/app/composables/payload.js","../../../../node_modules/nuxt/dist/app/plugins/revive-payload.client.js","../../../../virtual:nuxt:/myapp/.nuxt/unhead-plugins.mjs","../../../../node_modules/nuxt/dist/head/runtime/plugins/unhead.js","../../../../node_modules/klona/dist/index.mjs","../../../../node_modules/nuxt/dist/app/composables/ssr.js","../../../../node_modules/nuxt/dist/app/composables/cookie.js","../../../../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/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/_baseCreate.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/_arrayEach.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/_isIndex.js","../../../../node_modules/lodash-es/_baseAssignValue.js","../../../../node_modules/lodash-es/eq.js","../../../../node_modules/lodash-es/_assignValue.js","../../../../node_modules/lodash-es/_copyObject.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/_isIterateeCall.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/_nativeKeysIn.js","../../../../node_modules/lodash-es/_baseKeysIn.js","../../../../node_modules/lodash-es/keysIn.js","../../../../node_modules/lodash-es/_isKey.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/memoize.js","../../../../node_modules/lodash-es/_memoizeCapped.js","../../../../node_modules/lodash-es/_stringToPath.js","../../../../node_modules/lodash-es/toString.js","../../../../node_modules/lodash-es/_castPath.js","../../../../node_modules/lodash-es/_toKey.js","../../../../node_modules/lodash-es/_baseGet.js","../../../../node_modules/lodash-es/get.js","../../../../node_modules/lodash-es/_arrayPush.js","../../../../node_modules/lodash-es/_isFlattenable.js","../../../../node_modules/lodash-es/_baseFlatten.js","../../../../node_modules/lodash-es/flatten.js","../../../../node_modules/lodash-es/_flatRest.js","../../../../node_modules/lodash-es/_getPrototype.js","../../../../node_modules/lodash-es/isPlainObject.js","../../../../node_modules/lodash-es/_baseSlice.js","../../../../node_modules/lodash-es/_castSlice.js","../../../../node_modules/lodash-es/_hasUnicode.js","../../../../node_modules/lodash-es/_asciiToArray.js","../../../../node_modules/lodash-es/_unicodeToArray.js","../../../../node_modules/lodash-es/_stringToArray.js","../../../../node_modules/lodash-es/_createCaseFirst.js","../../../../node_modules/lodash-es/upperFirst.js","../../../../node_modules/lodash-es/capitalize.js","../../../../node_modules/lodash-es/_asciiWords.js","../../../../node_modules/lodash-es/_hasUnicodeWord.js","../../../../node_modules/lodash-es/_unicodeWords.js","../../../../node_modules/lodash-es/words.js","../../../../node_modules/lodash-es/_baseClamp.js","../../../../node_modules/lodash-es/clamp.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/_baseAssign.js","../../../../node_modules/lodash-es/_baseAssignIn.js","../../../../node_modules/lodash-es/_cloneBuffer.js","../../../../node_modules/lodash-es/_arrayFilter.js","../../../../node_modules/lodash-es/stubArray.js","../../../../node_modules/lodash-es/_getSymbols.js","../../../../node_modules/lodash-es/_copySymbols.js","../../../../node_modules/lodash-es/_getSymbolsIn.js","../../../../node_modules/lodash-es/_copySymbolsIn.js","../../../../node_modules/lodash-es/_baseGetAllKeys.js","../../../../node_modules/lodash-es/_getAllKeys.js","../../../../node_modules/lodash-es/_getAllKeysIn.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/_initCloneArray.js","../../../../node_modules/lodash-es/_Uint8Array.js","../../../../node_modules/lodash-es/_cloneArrayBuffer.js","../../../../node_modules/lodash-es/_cloneDataView.js","../../../../node_modules/lodash-es/_cloneRegExp.js","../../../../node_modules/lodash-es/_cloneSymbol.js","../../../../node_modules/lodash-es/_cloneTypedArray.js","../../../../node_modules/lodash-es/_initCloneByTag.js","../../../../node_modules/lodash-es/_initCloneObject.js","../../../../node_modules/lodash-es/_baseIsMap.js","../../../../node_modules/lodash-es/isMap.js","../../../../node_modules/lodash-es/_baseIsSet.js","../../../../node_modules/lodash-es/isSet.js","../../../../node_modules/lodash-es/_baseClone.js","../../../../node_modules/lodash-es/compact.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/_baseIsMatch.js","../../../../node_modules/lodash-es/_isStrictComparable.js","../../../../node_modules/lodash-es/_getMatchData.js","../../../../node_modules/lodash-es/_matchesStrictComparable.js","../../../../node_modules/lodash-es/_baseMatches.js","../../../../node_modules/lodash-es/_baseHasIn.js","../../../../node_modules/lodash-es/_hasPath.js","../../../../node_modules/lodash-es/hasIn.js","../../../../node_modules/lodash-es/_baseMatchesProperty.js","../../../../node_modules/lodash-es/_baseProperty.js","../../../../node_modules/lodash-es/_basePropertyDeep.js","../../../../node_modules/lodash-es/property.js","../../../../node_modules/lodash-es/_baseIteratee.js","../../../../node_modules/lodash-es/_createBaseFor.js","../../../../node_modules/lodash-es/_baseFor.js","../../../../node_modules/lodash-es/_baseForOwn.js","../../../../node_modules/lodash-es/_createBaseEach.js","../../../../node_modules/lodash-es/_baseEach.js","../../../../node_modules/lodash-es/now.js","../../../../node_modules/lodash-es/debounce.js","../../../../node_modules/lodash-es/isArrayLikeObject.js","../../../../node_modules/lodash-es/last.js","../../../../node_modules/lodash-es/_baseToPairs.js","../../../../node_modules/lodash-es/_setToPairs.js","../../../../node_modules/lodash-es/_createToPairs.js","../../../../node_modules/lodash-es/toPairs.js","../../../../node_modules/lodash-es/escapeRegExp.js","../../../../node_modules/lodash-es/_baseMap.js","../../../../node_modules/lodash-es/fromPairs.js","../../../../node_modules/lodash-es/isString.js","../../../../node_modules/lodash-es/_parent.js","../../../../node_modules/lodash-es/isEmpty.js","../../../../node_modules/lodash-es/mapKeys.js","../../../../node_modules/lodash-es/mapValues.js","../../../../node_modules/lodash-es/negate.js","../../../../node_modules/lodash-es/_baseUnset.js","../../../../node_modules/lodash-es/_customOmitClone.js","../../../../node_modules/lodash-es/omit.js","../../../../node_modules/lodash-es/_baseSet.js","../../../../node_modules/lodash-es/_basePickBy.js","../../../../node_modules/lodash-es/pickBy.js","../../../../node_modules/lodash-es/omitBy.js","../../../../node_modules/lodash-es/_baseSortBy.js","../../../../node_modules/lodash-es/_compareAscending.js","../../../../node_modules/lodash-es/_compareMultiple.js","../../../../node_modules/lodash-es/_baseOrderBy.js","../../../../node_modules/lodash-es/_basePick.js","../../../../node_modules/lodash-es/pick.js","../../../../node_modules/lodash-es/_baseRange.js","../../../../node_modules/lodash-es/_createRange.js","../../../../node_modules/lodash-es/range.js","../../../../node_modules/lodash-es/set.js","../../../../node_modules/lodash-es/sortBy.js","../../../../node_modules/lodash-es/_charsEndIndex.js","../../../../node_modules/lodash-es/_charsStartIndex.js","../../../../node_modules/lodash-es/trim.js","../../../../node_modules/lodash-es/unzip.js","../../../../node_modules/lodash-es/zip.js","../../../../node_modules/lodash-es/_baseZipObject.js","../../../../node_modules/lodash-es/zipObject.js","../../../../utils/objects.ts","../../../../utils/urls.ts","../../../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../../../node_modules/date-fns/esm/_lib/toInteger/index.js","../../../../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../../../../node_modules/date-fns/esm/toDate/index.js","../../../../node_modules/date-fns/esm/addDays/index.js","../../../../node_modules/date-fns/esm/addMonths/index.js","../../../../node_modules/date-fns/esm/addMilliseconds/index.js","../../../../node_modules/date-fns/esm/addHours/index.js","../../../../node_modules/date-fns/esm/_lib/defaultOptions/index.js","../../../../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","../../../../node_modules/date-fns/esm/startOfDay/index.js","../../../../node_modules/date-fns/esm/differenceInCalendarDays/index.js","../../../../node_modules/date-fns/esm/addSeconds/index.js","../../../../node_modules/date-fns/esm/max/index.js","../../../../node_modules/date-fns/esm/constants/index.js","../../../../node_modules/date-fns/esm/isSameDay/index.js","../../../../node_modules/date-fns/esm/isDate/index.js","../../../../node_modules/date-fns/esm/isValid/index.js","../../../../node_modules/date-fns/esm/differenceInDays/index.js","../../../../node_modules/date-fns/esm/differenceInMilliseconds/index.js","../../../../node_modules/date-fns/esm/eachDayOfInterval/index.js","../../../../node_modules/date-fns/esm/subMilliseconds/index.js","../../../../node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","../../../../node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","../../../../node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","../../../../node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","../../../../node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","../../../../node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","../../../../node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","../../../../node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","../../../../node_modules/date-fns/esm/_lib/getUTCWeek/index.js","../../../../node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","../../../../node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","../../../../node_modules/date-fns/esm/_lib/format/formatters/index.js","../../../../node_modules/date-fns/esm/_lib/format/longFormatters/index.js","../../../../node_modules/date-fns/esm/_lib/protectedTokens/index.js","../../../../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","../../../../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","../../../../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","../../../../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","../../../../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","../../../../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","../../../../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../../../../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../../../../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../../../../node_modules/date-fns/esm/locale/en-US/index.js","../../../../node_modules/date-fns/esm/format/index.js","../../../../node_modules/date-fns/esm/formatISO/index.js","../../../../node_modules/date-fns/esm/isAfter/index.js","../../../../node_modules/date-fns/esm/isBefore/index.js","../../../../node_modules/date-fns/esm/isFuture/index.js","../../../../node_modules/date-fns/esm/isPast/index.js","../../../../node_modules/date-fns/esm/subDays/index.js","../../../../node_modules/date-fns/esm/minutesToMilliseconds/index.js","../../../../node_modules/date-fns/esm/parseISO/index.js","../../../../composables/useRedirection.ts","../../../../middleware/00.redirect.global.ts","../../../../node_modules/nuxt/dist/app/composables/state.js","../../../../middleware/01.ip.global.ts","../../../../modules/params/composables/useParams.ts","../../../../composables/stores.ts","../../../../middleware/02.params.global.ts","../../../../middleware/03.partner.global.ts","../../../../middleware/04.ids.global.ts","../../../../node_modules/nuxt/dist/app/composables/url.js","../../../../node_modules/@tanstack/query-core/build/modern/subscribable.js","../../../../node_modules/@tanstack/query-core/build/modern/utils.js","../../../../node_modules/@tanstack/query-core/build/modern/focusManager.js","../../../../node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../../../node_modules/@tanstack/query-core/build/modern/thenable.js","../../../../node_modules/@tanstack/query-core/build/modern/retryer.js","../../../../node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../../../node_modules/@tanstack/query-core/build/modern/removable.js","../../../../node_modules/@tanstack/query-core/build/modern/query.js","../../../../node_modules/@tanstack/query-core/build/modern/queryCache.js","../../../../node_modules/@tanstack/query-core/build/modern/mutation.js","../../../../node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../../../node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../../node_modules/@tanstack/query-core/build/modern/queryClient.js","../../../../node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../../../node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../../../../node_modules/@tanstack/query-core/build/modern/hydration.js","../../../../node_modules/nuxt/dist/app/compat/vue-demi.js","../../../../node_modules/@tanstack/vue-query/build/modern/utils.js","../../../../node_modules/@tanstack/vue-query/build/modern/useQueryClient.js","../../../../node_modules/@tanstack/vue-query/build/modern/queryCache.js","../../../../node_modules/@tanstack/vue-query/build/modern/mutationCache.js","../../../../node_modules/@tanstack/vue-query/build/modern/queryClient.js","../../../../node_modules/@tanstack/vue-query/build/modern/vueQueryPlugin.js","../../../../node_modules/@tanstack/vue-query/build/modern/useBaseQuery.js","../../../../node_modules/@tanstack/vue-query/build/modern/useQuery.js","../../../../node_modules/@tanstack/vue-query/build/modern/useMutation.js","../../../../api/conf-api.ts","../../../../composables/useCurrentURL.ts","../../../../composables/confdata.composables.ts","../../../../middleware/06.conf.global.ts","../../../../middleware/07.ab.global.ts","../../../../middleware/08.auth.global.ts","../../../../middleware/09.user.global.ts","../../../../composables/@ihgroup/l10n/useL10N.ts","../../../../composables/@ihgroup/l10n/formatDatetime.ts","../../../../utils/numbers.ts","../../../../node_modules/date-fns/_lib/toInteger/index.js","../../../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds/index.js","../../../../node_modules/date-fns-tz/esm/_lib/tzTokenizeDate/index.js","../../../../node_modules/date-fns-tz/esm/_lib/newDateUTC/index.js","../../../../node_modules/date-fns-tz/esm/_lib/tzParseTimezone/index.js","../../../../node_modules/date-fns-tz/esm/_lib/tzPattern/index.js","../../../../node_modules/date-fns-tz/esm/toDate/index.js","../../../../node_modules/date-fns-tz/esm/utcToZonedTime/index.js","../../../../utils/dates.ts","../../../../resources/tracking/01-eec.ts","../../../../resources/tracking/02-pageload.ts","../../../../resources/tracking/03-common.ts","../../../../resources/tracking/04-search.ts","../../../../resources/tracking/05-detail.ts","../../../../resources/tracking/06-teaser.ts","../../../../resources/tracking/07-header.ts","../../../../resources/tracking/08-facette-search.ts","../../../../resources/tracking/09-quicksearch.ts","../../../../resources/tracking/999-start.ts","../../../../resources/tracking/11-newsletter.ts","../../../../resources/tracking/12-recommendation.ts","../../../../resources/tracking/13-content-assets.ts","../../../../resources/tracking/impression.ts","../../../../resources/tracking/14-interchalet-migration.ts","../../../../resources/tracking/15-landing-pages.ts","../../../../resources/tracking/homepage.ts","../../../../utils/strings.ts","../../../../resources/tracking/ecommerce.ts","../../../../resources/tracking/16-image-carousel.ts","../../../../resources/tracking/17-announcements.ts","../../../../resources/tracking/handpicked.ts","../../../../resources/tracking/18-wishlists.ts","../../../../resources/tracking/index.ts","../../../../middleware/10.tracking.global.ts","../../../../modules/unleash/feature.ts","../../../../modules/unleash/runtime/composables/useFeature.ts","../../../../modules/unleash/runtime/composables/useFlag.ts","../../../../utils/params.ts","../../../../utils/destination.ts","../../../../utils/filters.ts","../../../../composables/search.conf.ts","../../../../composables/search.mappers.ts","../../../../api/search-api.shared.ts","../../../../api/search-api.redesign.ts","../../../../utils/reactivity.ts","../../../../composables/@ihgroup/l10n/useI18n.ts","../../../../composables/dates.composables.ts","../../../../composables/search.composables.ts","../../../../utils/search.ts","../../../../middleware/11.search.global.ts","../../../../node_modules/nuxt/dist/app/middleware/manifest-route-rule.js","../../../../virtual:nuxt:/myapp/.nuxt/middleware.mjs","../../../../node_modules/nuxt/dist/app/plugins/router.js","../../../../utils/partner.ts","../../../../utils/colors.ts","../../../../plugins/colors.ts","../../../../utils/boolean.ts","../../../../modules/params/getters/legacy-params.ts","../../../../modules/params/getters/trip-params.ts","../../../../modules/params/getters/coordinates-params.ts","../../../../modules/params/params.plugin.ts","../../../../node_modules/nuxt/dist/app/compat/idle-callback.js","../../../../node_modules/nuxt/dist/app/composables/ready.js","../../../../node_modules/@vueuse/shared/index.mjs","../../../../node_modules/@vueuse/core/index.mjs","../../../../virtual:nuxt:/myapp/.nuxt/runtime.screen.plugin.533699b7.ts","../../../../utils/translations.ts","../../../../plugins/i18n.ts","../../../../node_modules/nuxt/dist/app/composables/asyncData.js","../../../../node_modules/nuxt/dist/app/composables/fetch.js","../../../../node_modules/nuxt/dist/app/composables/preload.js","../../../../node_modules/nuxt/dist/app/composables/chunk.js","../../../../node_modules/nuxt/dist/app/components/client-only.js","../../../../node_modules/nuxt/dist/app/composables/id.js","../../../../node_modules/nuxt/dist/app/components/nuxt-link.js","../../../../node_modules/pinia/dist/pinia.mjs","../../../../node_modules/ua-parser-js/src/ua-parser.js","../../../../composables/@ihgroup/useragent/useUseragentStore.ts","../../../../composables/usePageHeadStore.ts","../../../../composables/useSettingsStore.ts","../../../../node_modules/nanoid/url-alphabet/index.js","../../../../node_modules/nanoid/index.browser.js","../../../../composables/@ihgroup/useIDsStore.ts","../../../../composables/@ihgroup/useTogglerStore.ts","../../../../composables/@ihgroup/useConsentStore.ts","../../../../composables/api/useGuestWorldApi.ts","../../../../node_modules/vue3-toastify/dist/index.mjs","../../../../modules/toaster/runtime/composables/useToaster.ts","../../../../composables/useWishlistStore.ts","../../../../composables/useUserStore.ts","../../../../utils/forms.ts","../../../../composables/api/useWebccApi.ts","../../../../composables/usePartnerStore.ts","../../../../composables/@ihgroup/useTrackingStore.ts","../../../../utils/cancellation.ts","../../../../composables/api/useConfApi.ts","../../../../composables/useConfdataStore.ts","../../../../composables/@ihgroup/useABStore.ts","../../../../composables/useBookmarksStore.ts","../../../../node_modules/axios/lib/helpers/bind.js","../../../../node_modules/axios/lib/utils.js","../../../../node_modules/axios/lib/core/AxiosError.js","../../../../node_modules/axios/lib/helpers/null.js","../../../../node_modules/axios/lib/helpers/toFormData.js","../../../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../../../../node_modules/axios/lib/helpers/buildURL.js","../../../../node_modules/axios/lib/core/InterceptorManager.js","../../../../node_modules/axios/lib/defaults/transitional.js","../../../../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../../../../node_modules/axios/lib/platform/browser/classes/FormData.js","../../../../node_modules/axios/lib/platform/browser/classes/Blob.js","../../../../node_modules/axios/lib/platform/browser/index.js","../../../../node_modules/axios/lib/platform/common/utils.js","../../../../node_modules/axios/lib/platform/index.js","../../../../node_modules/axios/lib/helpers/toURLEncodedForm.js","../../../../node_modules/axios/lib/helpers/formDataToJSON.js","../../../../node_modules/axios/lib/defaults/index.js","../../../../node_modules/axios/lib/helpers/parseHeaders.js","../../../../node_modules/axios/lib/core/AxiosHeaders.js","../../../../node_modules/axios/lib/core/transformData.js","../../../../node_modules/axios/lib/cancel/isCancel.js","../../../../node_modules/axios/lib/cancel/CanceledError.js","../../../../node_modules/axios/lib/core/settle.js","../../../../node_modules/axios/lib/helpers/parseProtocol.js","../../../../node_modules/axios/lib/helpers/speedometer.js","../../../../node_modules/axios/lib/helpers/throttle.js","../../../../node_modules/axios/lib/helpers/progressEventReducer.js","../../../../node_modules/axios/lib/helpers/isURLSameOrigin.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/core/mergeConfig.js","../../../../node_modules/axios/lib/helpers/resolveConfig.js","../../../../node_modules/axios/lib/adapters/xhr.js","../../../../node_modules/axios/lib/helpers/composeSignals.js","../../../../node_modules/axios/lib/helpers/trackStream.js","../../../../node_modules/axios/lib/adapters/fetch.js","../../../../node_modules/axios/lib/adapters/adapters.js","../../../../node_modules/axios/lib/core/dispatchRequest.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/helpers/HttpStatusCode.js","../../../../node_modules/axios/lib/axios.js","../../../../node_modules/axios/index.js","../../../../node_modules/@ory/client/dist/esm/base.js","../../../../node_modules/@ory/client/dist/esm/common.js","../../../../node_modules/@ory/client/dist/esm/api.js","../../../../node_modules/@ory/client/dist/esm/configuration.js","../../../../composables/useAuthStore.ts","../../../../composables/useUserSurveyStore.ts","../../../../composables/useReviewsStore.ts","../../../../utils/duration.ts","../../../../composables/useFlexTripStore.ts","../../../../composables/useURLs.ts","../../../../utils/season.ts","../../../../composables/useSeason.ts","../../../../utils/query.ts","../../../../utils/suggestions.ts","../../../../api/search-api.ts","../../../../composables/useSearchStore.ts","../../../../composables/@ihgroup/usePopupsStore.ts","../../../../plugins/stores.ts","../../../../plugins/vue-query.ts","../../../../node_modules/nuxt/dist/app/plugins/payload.client.js","../../../../node_modules/nuxt/dist/app/plugins/navigation-repaint.client.js","../../../../node_modules/nuxt/dist/app/plugins/check-outdated-build.client.js","../../../../node_modules/nuxt/dist/app/plugins/chunk-reload.client.js","../../../../node_modules/@pinia/nuxt/dist/runtime/plugin.vue3.js","../../../../virtual:nuxt:/myapp/.nuxt/components.plugin.mjs","../../../../node_modules/@popperjs/core/lib/enums.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../../../node_modules/@popperjs/core/lib/utils/math.js","../../../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../../../node_modules/@popperjs/core/lib/utils/within.js","../../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../../../node_modules/@popperjs/core/lib/utils/debounce.js","../../../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../../../node_modules/@popperjs/core/lib/createPopper.js","../../../../node_modules/@popperjs/core/lib/popper.js","../../../../node_modules/v-calendar/dist/es/index.js","../../../../node_modules/@samk-dev/nuxt-vcalendar/dist/runtime/plugin.client.js","../../../../modules/unleash/runtime/unleash.shared.ts","../../../../modules/unleash/runtime/unleash.plugin.client.ts","../../../../node_modules/@nuxtjs/web-vitals/dist/runtime/utils.mjs","../../../../node_modules/@nuxtjs/web-vitals/dist/runtime/web-vitals.mjs","../../../../node_modules/@nuxtjs/web-vitals/dist/runtime/providers/gtm.mjs","../../../../virtual:nuxt:/myapp/.nuxt/web-vitals-config.mjs","../../../../node_modules/@nuxtjs/web-vitals/dist/runtime/plugin.client.mjs","../../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../../node_modules/floating-vue/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.min.mjs","../../../../node_modules/floating-vue/dist/floating-vue.mjs","../../../../virtual:nuxt:/myapp/.nuxt/floating-vue.mjs","../../../../modules/toaster/runtime/vue3-toastify.plugin.client.ts","../../../../node_modules/@sentry/utils/build/esm/is.js","../../../../node_modules/@sentry/utils/build/esm/string.js","../../../../node_modules/@sentry/utils/build/esm/aggregate-errors.js","../../../../node_modules/@sentry/utils/build/esm/version.js","../../../../node_modules/@sentry/utils/build/esm/worldwide.js","../../../../node_modules/@sentry/utils/build/esm/browser.js","../../../../node_modules/@sentry/utils/build/esm/debug-build.js","../../../../node_modules/@sentry/utils/build/esm/logger.js","../../../../node_modules/@sentry/utils/build/esm/dsn.js","../../../../node_modules/@sentry/utils/build/esm/error.js","../../../../node_modules/@sentry/utils/build/esm/object.js","../../../../node_modules/@sentry/utils/build/esm/stacktrace.js","../../../../node_modules/@sentry/utils/build/esm/instrument/handlers.js","../../../../node_modules/@sentry/utils/build/esm/instrument/console.js","../../../../node_modules/@sentry/utils/build/esm/supports.js","../../../../node_modules/@sentry/utils/build/esm/time.js","../../../../node_modules/@sentry/utils/build/esm/instrument/fetch.js","../../../../node_modules/@sentry/utils/build/esm/instrument/globalError.js","../../../../node_modules/@sentry/utils/build/esm/instrument/globalUnhandledRejection.js","../../../../node_modules/@sentry/utils/build/esm/env.js","../../../../node_modules/@sentry/utils/build/esm/node.js","../../../../node_modules/@sentry/utils/build/esm/isBrowser.js","../../../../node_modules/@sentry/utils/build/esm/memo.js","../../../../node_modules/@sentry/utils/build/esm/misc.js","../../../../node_modules/@sentry/utils/build/esm/normalize.js","../../../../node_modules/@sentry/utils/build/esm/syncpromise.js","../../../../node_modules/@sentry/utils/build/esm/promisebuffer.js","../../../../node_modules/@sentry/utils/build/esm/url.js","../../../../node_modules/@sentry/utils/build/esm/severity.js","../../../../node_modules/@sentry/utils/build/esm/baggage.js","../../../../node_modules/@sentry/utils/build/esm/tracing.js","../../../../node_modules/@sentry/utils/build/esm/envelope.js","../../../../node_modules/@sentry/utils/build/esm/clientreport.js","../../../../node_modules/@sentry/utils/build/esm/ratelimit.js","../../../../node_modules/@sentry/utils/build/esm/buildPolyfills/_nullishCoalesce.js","../../../../node_modules/@sentry/utils/build/esm/buildPolyfills/_optionalChain.js","../../../../node_modules/@sentry/utils/build/esm/propagationContext.js","../../../../node_modules/@sentry/utils/build/esm/vendor/supportsHistory.js","../../../../node_modules/@sentry/core/build/esm/debug-build.js","../../../../node_modules/@sentry/core/build/esm/carrier.js","../../../../node_modules/@sentry/core/build/esm/session.js","../../../../node_modules/@sentry/core/build/esm/utils/spanOnScope.js","../../../../node_modules/@sentry/core/build/esm/scope.js","../../../../node_modules/@sentry/core/build/esm/defaultScopes.js","../../../../node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js","../../../../node_modules/@sentry/core/build/esm/asyncContext/index.js","../../../../node_modules/@sentry/core/build/esm/currentScopes.js","../../../../node_modules/@sentry/core/build/esm/metrics/metric-summary.js","../../../../node_modules/@sentry/core/build/esm/semanticAttributes.js","../../../../node_modules/@sentry/core/build/esm/tracing/spanstatus.js","../../../../node_modules/@sentry/core/build/esm/utils/spanUtils.js","../../../../node_modules/@sentry/core/build/esm/tracing/errors.js","../../../../node_modules/@sentry/core/build/esm/tracing/utils.js","../../../../node_modules/@sentry/core/build/esm/utils/hasTracingEnabled.js","../../../../node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js","../../../../node_modules/@sentry/core/build/esm/constants.js","../../../../node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js","../../../../node_modules/@sentry/core/build/esm/tracing/logSpans.js","../../../../node_modules/@sentry/core/build/esm/utils/parseSampleRate.js","../../../../node_modules/@sentry/core/build/esm/tracing/sampling.js","../../../../node_modules/@sentry/core/build/esm/envelope.js","../../../../node_modules/@sentry/core/build/esm/tracing/measurement.js","../../../../node_modules/@sentry/core/build/esm/tracing/sentrySpan.js","../../../../node_modules/@sentry/core/build/esm/tracing/trace.js","../../../../node_modules/@sentry/core/build/esm/tracing/idleSpan.js","../../../../node_modules/@sentry/core/build/esm/eventProcessors.js","../../../../node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js","../../../../node_modules/@sentry/core/build/esm/utils/prepareEvent.js","../../../../node_modules/@sentry/core/build/esm/exports.js","../../../../node_modules/@sentry/core/build/esm/api.js","../../../../node_modules/@sentry/core/build/esm/integration.js","../../../../node_modules/@sentry/core/build/esm/baseclient.js","../../../../node_modules/@sentry/core/build/esm/sdk.js","../../../../node_modules/@sentry/core/build/esm/transports/base.js","../../../../node_modules/@sentry/core/build/esm/utils/isSentryRequestUrl.js","../../../../node_modules/@sentry/core/build/esm/utils/sdkMetadata.js","../../../../node_modules/@sentry/core/build/esm/breadcrumbs.js","../../../../node_modules/@sentry/core/build/esm/integrations/functiontostring.js","../../../../node_modules/@sentry/core/build/esm/integrations/inboundfilters.js","../../../../node_modules/@sentry/core/build/esm/integrations/dedupe.js","../../../../node_modules/@sentry/core/build/esm/fetch.js","../../../../node_modules/@sentry/browser/build/npm/esm/helpers.js","../../../../node_modules/@sentry/browser/build/npm/esm/debug-build.js","../../../../node_modules/@sentry/browser/build/npm/esm/eventbuilder.js","../../../../node_modules/@sentry/browser/build/npm/esm/userfeedback.js","../../../../node_modules/@sentry/browser/build/npm/esm/client.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/types.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/generateUniqueID.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onFCP.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getCLS.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getFID.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getINP.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getLCP.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onTTFB.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/cls.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/browserMetrics.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/instrument/dom.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/instrument/history.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/getNativeImplementation.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/instrument/xhr.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/inp.js","../../../../node_modules/@sentry/browser/build/npm/esm/transports/fetch.js","../../../../node_modules/@sentry/browser/build/npm/esm/stack-parsers.js","../../../../node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js","../../../../node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js","../../../../node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js","../../../../node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js","../../../../node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js","../../../../node_modules/@sentry/browser/build/npm/esm/sdk.js","../../../../node_modules/@sentry-internal/replay/build/npm/esm/index.js","../../../../node_modules/@sentry/browser/build/npm/esm/tracing/request.js","../../../../node_modules/@sentry/browser/build/npm/esm/tracing/backgroundtab.js","../../../../node_modules/@sentry/browser/build/npm/esm/tracing/browserTracingIntegration.js","../../../../node_modules/@sentry/vue/build/esm/constants.js","../../../../node_modules/@sentry/vue/build/esm/debug-build.js","../../../../node_modules/@sentry/vue/build/esm/vendor/components.js","../../../../node_modules/@sentry/vue/build/esm/errorhandler.js","../../../../node_modules/@sentry/vue/build/esm/tracing.js","../../../../node_modules/@sentry/vue/build/esm/integration.js","../../../../node_modules/@sentry/vue/build/esm/sdk.js","../../../../node_modules/@sentry/vue/build/esm/router.js","../../../../node_modules/@sentry/vue/build/esm/browserTracingIntegration.js","../../../../utils/errors.ts","../../../../plugins/sentry.client.ts","../../../../plugins/tracking.ts","../../../../virtual:nuxt:/myapp/.nuxt/plugins/client.mjs","../../../../components/@ihgroup/form/WebccInput.vue","../../../../components/@ihgroup/components/WebccLoader.vue","../../../../components/@ihgroup/components/WebccButton.vue","../../../../components/pages/start/StartNewsletterSignup.vue","../../../../modules/screen/runtime/composables/useScreen.ts","../../../../components/global/PageStart.vue","../../../../components/pages/search/redesign/RedesignSearchBarCollapsed.vue","../../../../node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../../../node_modules/@tanstack/virtual-core/dist/esm/index.js","../../../../node_modules/@tanstack/vue-virtual/dist/esm/index.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-controllable.js","../../../../node_modules/@headlessui/vue/dist/utils/micro-task.js","../../../../node_modules/@headlessui/vue/dist/utils/disposables.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-disposables.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-frame-debounce.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-id.js","../../../../node_modules/@headlessui/vue/dist/utils/dom.js","../../../../node_modules/@headlessui/vue/dist/utils/match.js","../../../../node_modules/@headlessui/vue/dist/utils/env.js","../../../../node_modules/@headlessui/vue/dist/utils/owner.js","../../../../node_modules/@headlessui/vue/dist/utils/focus-management.js","../../../../node_modules/@headlessui/vue/dist/utils/platform.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-document-event.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-window-event.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-outside-click.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-resolve-button-type.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-tracked-pointer.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-tree-walker.js","../../../../node_modules/@headlessui/vue/dist/utils/render.js","../../../../node_modules/@headlessui/vue/dist/internal/hidden.js","../../../../node_modules/@headlessui/vue/dist/internal/open-closed.js","../../../../node_modules/@headlessui/vue/dist/keyboard.js","../../../../node_modules/@headlessui/vue/dist/mouse.js","../../../../node_modules/@headlessui/vue/dist/utils/document-ready.js","../../../../node_modules/@headlessui/vue/dist/utils/active-element-history.js","../../../../node_modules/@headlessui/vue/dist/utils/calculate-active-index.js","../../../../node_modules/@headlessui/vue/dist/utils/form.js","../../../../node_modules/@headlessui/vue/dist/components/combobox/combobox.js","../../../../components/pages/search/redesign/RedesignSearchDestinationSelect.vue","../../../../node_modules/@headlessui/vue/dist/hooks/use-event-listener.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-tab-direction.js","../../../../node_modules/@headlessui/vue/dist/components/focus-trap/focus-trap.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-store.js","../../../../node_modules/@headlessui/vue/dist/utils/store.js","../../../../node_modules/@headlessui/vue/dist/hooks/document-overflow/adjust-scrollbar-padding.js","../../../../node_modules/@headlessui/vue/dist/hooks/document-overflow/handle-ios-locking.js","../../../../node_modules/@headlessui/vue/dist/hooks/document-overflow/prevent-scroll.js","../../../../node_modules/@headlessui/vue/dist/hooks/document-overflow/overflow-store.js","../../../../node_modules/@headlessui/vue/dist/hooks/document-overflow/use-document-overflow.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-inert.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-root-containers.js","../../../../node_modules/@headlessui/vue/dist/internal/portal-force-root.js","../../../../node_modules/@headlessui/vue/dist/internal/stack-context.js","../../../../node_modules/@headlessui/vue/dist/components/description/description.js","../../../../node_modules/@headlessui/vue/dist/components/portal/portal.js","../../../../node_modules/@headlessui/vue/dist/components/dialog/dialog.js","../../../../components/pages/search/redesign/RedesignWebccPopupDialog.vue","../../../../node_modules/@vueuse/components/index.mjs","../../../../components/@ihgroup/form/WebccDateRangepicker.vue","../../../../components/@ihgroup/components/WebccDateRangePlusMinusDays.vue","../../../../components/pages/search/redesign/RedesignDateRangeSearchCalendar.vue","../../../../components/pages/search/redesign/RedesignSearchDateRangePicker.vue","../../../../node_modules/@headlessui/vue/dist/components/popover/popover.js","../../../../components/pages/search/redesign/RedesignWebccNumberInput.vue","../../../../components/pages/search/redesign/RedesignWebccStepper.vue","../../../../components/pages/search/redesign/RedesignSearchGuestsSelect.vue","../../../../components/pages/search/redesign/RedesignSearchBar.vue","../../../../components/@ihgroup/components/WebccLink.vue","../../../../components/pages/search/SearchBreadcrumb.vue","../../../../composables/@ihgroup/useStorageReady.ts","../../../../components/common/navigation/BookmarkLink.vue","../../../../components/pages/search/redesign/RedesignFilterSelected.vue","../../../../components/pages/search/redesign/RedesignStepperInput.vue","../../../../components/pages/search/redesign/RedesignWebccCurrencyInput.vue","../../../../composables/useColors.ts","../../../../node_modules/@kurkle/color/dist/color.esm.js","../../../../node_modules/chart.js/dist/chunks/helpers.segment.js","../../../../node_modules/chart.js/dist/chart.js","../../../../node_modules/vue-chartjs/dist/index.js","../../../../components/pages/search/redesign/RedesignWebccHistogram.vue","../../../../node_modules/vue-3-slider-component/dist/vue-3-slider-component.mjs","../../../../components/pages/search/redesign/RedesignWebccSlider.vue","../../../../components/pages/search/redesign/RedesignWebccPriceRangePicker.vue","../../../../components/@ihgroup/form/InjectionKeys.ts","../../../../components/pages/search/redesign/RedesignWebccRadio.vue","../../../../components/pages/search/redesign/RedesignWebccRadioGroup.vue","../../../../components/pages/search/redesign/RedesignSingleSelectInput.vue","../../../../components/pages/search/redesign/RedesignTextLoading.vue","../../../../components/pages/search/redesign/RedesignWebccCheckbox.vue","../../../../node_modules/@headlessui/vue/dist/components/disclosure/disclosure.js","../../../../components/pages/search/redesign/RedesignWebccDisclosure.vue","../../../../components/pages/search/redesign/RedesignWebccCheckboxGroup.vue","../../../../components/pages/search/redesign/RedesignMultiSelectInput.vue","../../../../components/pages/search/redesign/RedesignWebccStars.vue","../../../../components/pages/search/redesign/RedesignFilter.vue","../../../../components/@ihgroup/components/WebccHeading.vue","../../../../components/pages/search/SearchResultsHeader.vue","../../../../components/pages/search/SearchResultsHeaderCount.vue","../../../../node_modules/@headlessui/vue/dist/components/label/label.js","../../../../node_modules/@headlessui/vue/dist/components/radio-group/radio-group.js","../../../../components/@ihgroup/components/WebccRadioSwitch.vue","../../../../components/pages/search/SearchResultLayoutSwitch.vue","../../../../node_modules/@headlessui/vue/dist/utils/get-text-value.js","../../../../node_modules/@headlessui/vue/dist/hooks/use-text-value.js","../../../../node_modules/@headlessui/vue/dist/components/listbox/listbox.js","../../../../components/pages/search/redesign/RedesignWebccDropdown.vue","../../../../components/pages/search/redesign/RedesignSearchSorting.vue","../../../../components/pages/search/redesign/RedesignAccomCardTags.vue","../../../../utils/trip.ts","../../../../components/pages/search/redesign/RedesignAccomCardTripTags.vue","../../../../components/pages/search/redesign/RedesignAccomCardBookmark.vue","../../../../node_modules/keen-slider/vue.es.js","../../../../components/common/info/ImageSlider.vue","../../../../composables/useAccomImageCollection.ts","../../../../composables/useAccommodation.ts","../../../../components/pages/search/redesign/RedesignAccomCardGallery.vue","../../../../node_modules/@nuxt/image/dist/runtime/utils/meta.mjs","../../../../node_modules/@nuxt/image/dist/runtime/utils/index.mjs","../../../../node_modules/@nuxt/image/dist/runtime/image.mjs","../../../../node_modules/@nuxt/image/dist/runtime/providers/ipx.mjs","../../../../virtual:nuxt:/myapp/.nuxt/image-options.mjs","../../../../node_modules/@nuxt/image/dist/runtime/composables.mjs","../../../../node_modules/@nuxt/image/dist/runtime/utils/performance.mjs","../../../../node_modules/@nuxt/image/dist/runtime/components/_base.mjs","../../../../node_modules/@nuxt/image/dist/runtime/components/nuxt-img.mjs","../../../../components/@ihgroup/components/WebccTooltip.vue","../../../../components/pages/search/redesign/RedesignAccomCardEco.vue","../../../../components/pages/search/redesign/RedesignAccomCardFeatures.vue","../../../../utils/rating.ts","../../../../composables/useRating.ts","../../../../components/pages/search/redesign/RedesignAccomCardRating.vue","../../../../composables/@ihgroup/l10n/formatCurrency.ts","../../../../composables/useMoneyFormat.ts","../../../../components/pages/search/redesign/RedesignAccomCardPrice.vue","../../../../utils/dom.ts","../../../../components/pages/search/redesign/RedesignAccomCard.vue","../../../../components/pages/search/redesign/RedesignSearchAreaResults.vue","../../../../components/@ihgroup/components/WebccPagination.vue","../../../../components/pages/search/redesign/RedesignSearchPagination.vue","../../../../components/pages/search/redesign/RedesignSearchAreaNoResults.vue","../../../../composables/@ihgroup/l10n/formatNumber.ts","../../../../node_modules/keen-slider/keen-slider.es.js","../../../../components/pages/search/SearchRatingBox.vue","../../../../components/pages/search/redesign/RedesignSearchBreadcrumb.vue","../../../../components/common/hitbox/HitboxGallery.vue","../../../../components/common/hitbox/HitboxTags.vue","../../../../components/common/hitbox/HitboxBreadcrumb.vue","../../../../components/common/hitbox/HitboxTitle.vue","../../../../components/@ihgroup/components/WebccFreeCancellationInfo.vue","../../../../components/common/functional/GoogleMaps.vue","../../../../components/common/hitbox/HitboxCard.vue","../../../../components/pages/search/SearchObjectTeaser.vue","../../../../components/pages/search/SearchObjectTeasers.vue","../../../../components/pages/search/content/SearchContentAssetsIntro.vue","../../../../components/pages/search/content/SearchSightsAndContentItem.vue","../../../../components/pages/search/content/SearchSightsAndContent.vue","../../../../components/pages/search/content/SearchNaturalSights.vue","../../../../components/pages/search/content/SearchWeatherInfoMonth.vue","../../../../components/pages/search/content/SearchWeatherInfo.vue","../../../../components/pages/search/content/SearchSecretSpot.vue","../../../../components/pages/search/content/SearchThreeDaySummary.vue","../../../../components/pages/search/content/SearchTouristicActivities.vue","../../../../components/pages/search/content/SearchArticleTeaserItem.vue","../../../../components/@ihgroup/components/WebccScroll.vue","../../../../components/pages/search/content/SearchArticleTeaser.vue","../../../../composables/api/useNovaApi.ts","../../../../composables/useContentAssets.ts","../../../../components/pages/search/content/SearchContentAssets.vue","../../../../composables/api/useSearchApi.ts","../../../../components/pages/search/SearchTeaserFilters.vue","../../../../components/common/seo/TeaserSubDestinations.vue","../../../../components/@ihgroup/components/WebccExpandable.vue","../../../../components/pages/search/SearchTeaser.vue","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/common/entities.js","../../../../node_modules/vue-markdown-render/node_modules/uc.micro/categories/P/regex.js","../../../../node_modules/vue-markdown-render/node_modules/mdurl/encode.js","../../../../node_modules/vue-markdown-render/node_modules/mdurl/decode.js","../../../../node_modules/vue-markdown-render/node_modules/mdurl/format.js","../../../../node_modules/vue-markdown-render/node_modules/mdurl/parse.js","../../../../node_modules/vue-markdown-render/node_modules/mdurl/index.js","../../../../node_modules/vue-markdown-render/node_modules/uc.micro/properties/Any/regex.js","../../../../node_modules/vue-markdown-render/node_modules/uc.micro/categories/Cc/regex.js","../../../../node_modules/vue-markdown-render/node_modules/uc.micro/categories/Cf/regex.js","../../../../node_modules/vue-markdown-render/node_modules/uc.micro/categories/Z/regex.js","../../../../node_modules/vue-markdown-render/node_modules/uc.micro/index.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/common/utils.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/helpers/parse_link_label.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/helpers/parse_link_destination.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/helpers/parse_link_title.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/helpers/index.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/renderer.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/ruler.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_core/normalize.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_core/block.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_core/inline.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_core/linkify.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_core/replacements.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_core/smartquotes.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_core/text_join.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/token.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_core/state_core.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/parser_core.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/table.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/code.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/fence.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/blockquote.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/hr.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/list.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/reference.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/common/html_blocks.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/common/html_re.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/html_block.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/heading.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/lheading.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/paragraph.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_block/state_block.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/parser_block.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/text.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/linkify.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/newline.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/escape.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/backticks.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/strikethrough.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/emphasis.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/link.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/image.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/autolink.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/html_inline.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/entity.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/balance_pairs.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/fragments_join.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/rules_inline/state_inline.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/parser_inline.js","../../../../node_modules/vue-markdown-render/node_modules/linkify-it/lib/re.js","../../../../node_modules/vue-markdown-render/node_modules/linkify-it/index.js","../../../../node_modules/punycode/punycode.es6.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/presets/default.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/presets/zero.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/presets/commonmark.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/lib/index.js","../../../../node_modules/vue-markdown-render/node_modules/markdown-it/index.js","../../../../node_modules/vue-markdown-render/dist/VueMarkdown.js","../../../../components/common/info/USPWhy.vue","../../../../components/common/footer/FooterNewsletterSignup.vue","../../../../components/pages/search/redesign/RedesignPageSearch.vue","../../../../components/pages/search/SearchHeader.vue","../../../../components/pages/search/SearchNewsletterSignup.vue","../../../../components/pages/details/TrustPilot.vue","../../../../components/@ihgroup/form/WebccSelect.vue","../../../../components/pages/search/SortingDropdown.vue","../../../../components/pages/search/FilterDropdown.vue","../../../../components/pages/search/FilterGroup.vue","../../../../components/@ihgroup/components/WebccDateRangeSearchFlex.vue","../../../../components/@ihgroup/components/WebccDateRangeSearchSimple.vue","../../../../components/@ihgroup/components/WebccDaterangeSearch.vue","../../../../components/pages/search/FilterDateRange.vue","../../../../components/pages/search/FilterSelect.vue","../../../../components/pages/search/FilterSelectMulti.vue","../../../../components/pages/search/FilterCheckbox.vue","../../../../components/pages/search/FilterCheckboxes.vue","../../../../components/pages/search/FilterStepper.vue","../../../../components/pages/search/Filter.vue","../../../../components/@ihgroup/components/WebccLoaderOverlay.vue","../../../../components/pages/search/FilterTags.vue","../../../../virtual:public?%2Fimages%2Fapartment_classification.png","../../../../virtual:public?%2Fimages%2Fresort.png","../../../../components/common/reviews/RatingHearts.vue","../../../../components/common/hitbox/HitboxRating.vue","../../../../components/common/hitbox/HitboxFeatures.vue","../../../../components/common/hitbox/HitboxPrice.vue","../../../../components/common/hitbox/HitboxOrig.vue","../../../../components/pages/search/SearchAreaNoResult.vue","../../../../components/pages/search/MapSearchInfoWindow.vue","../../../../utils/map.ts","../../../../components/pages/search/MapSearch.vue","../../../../components/pages/search/SearchAreaV5.vue","../../../../components/global/PageSearch.vue","../../../../components/@ihgroup/components/WebccDestinationPicker.vue","../../../../components/common/functional/SearchBox.vue","../../../../components/pages/details/SocialShare.vue","../../../../components/pages/details/Breadcrumbs.vue","../../../../components/common/info/DetailsGallery.vue","../../../../components/common/info/FacettedGallery.vue","../../../../components/@ihgroup/components/WebccModal.vue","../../../../node_modules/photoswipe/dist/photoswipe-lightbox.esm.js","../../../../components/pages/details/ModalGallery.vue","../../../../components/pages/details/Title.vue","../../../../components/pages/details/Features.vue","../../../../components/pages/details/Attributes.vue","../../../../components/ui/Alert.vue","../../../../components/pages/details/Description.vue","../../../../components/pages/details/Residence.vue","../../../../components/pages/details/DestinationDescription.vue","../../../../components/pages/details/Map.vue","../../../../components/pages/details/MonthlyPrices.vue","../../../../components/pages/details/PaxSelector.vue","../../../../composables/useVacancyDays.ts","../../../../components/pages/details/Vacancy.vue","../../../../components/pages/details/ServiceItem.vue","../../../../components/pages/details/Services.vue","../../../../components/@ihgroup/components/WebccCancellationStepper.vue","../../../../components/pages/details/CancelConditions.vue","../../../../components/common/reviews/ReviewDetails.vue","../../../../components/common/reviews/ReviewSummary.vue","../../../../components/common/reviews/ReviewFilter.vue","../../../../components/common/reviews/ReviewItem.vue","../../../../components/pages/details/Reviews.vue","../../../../components/pages/details/Rating.vue","../../../../composables/useCheckPrice.ts","../../../../components/pages/details/SidebarAvailabilityCard.vue","../../../../components/pages/details/SidebarContactCard.vue","../../../../components/pages/details/BottomAvailabilityCard.vue","../../../../utils/booking.ts","../../../../composables/useBookingsPending.ts","../../../../components/pages/details/Accommodation.vue","../../../../components/pages/details/LinkedObjects.vue","../../../../components/@ihgroup/blocks/BlocksUSPCorona.vue","../../../../components/pages/details/UserSurvey.vue","../../../../utils/accommodations.ts","../../../../components/global/PageDetails.vue","../../../../components/global/PageContent.vue","../../../../virtual:public?%2Fimages%2Fteaser_kundenbewertungen.jpg","../../../../components/common/reviews/ReviewTeaserTop.vue","../../../../components/pages/reviews/ReviewBreadcrumb.vue","../../../../components/global/PageReviews.vue","../../../../components/pages/bookmarks/Breadcrumbs.vue","../../../../components/pages/bookmarks/Infobox.vue","../../../../components/pages/bookmarks/Success.vue","../../../../utils/arrays.ts","../../../../components/@ihgroup/form/WebccFormfield.vue","../../../../components/@ihgroup/components/WebccCaptcha.vue","../../../../components/@ihgroup/l10n/TextHTML.vue","../../../../components/pages/bookmarks/Error.vue","../../../../components/@ihgroup/form/WebccForm.vue","../../../../composables/useValidation.ts","../../../../components/pages/bookmarks/PersonalCatalog.vue","../../../../components/pages/bookmarks/Actions.vue","../../../../components/global/PageBookmarks.vue","../../../../composables/useEmails.ts","../../../../components/global/PageNewsletter.vue","../../../../components/pages/emails/Confirm.vue","../../../../components/pages/emails/Optin.vue","../../../../components/pages/emails/Unsubscribe.vue","../../../../components/pages/emails/Actions.vue","../../../../components/global/PageEmails.vue","../../../../components/common/header/HeaderSelect.vue","../../../../components/pages/my-rent/Header.vue","../../../../components/pages/my-rent/Footer.vue","../../../../components/global/PageMyrent.vue","../../../../components/global/PageUnknown.vue","../../../../components/common/info/GeneralInfoBar.vue","../../../../components/common/b2b/B2BInfoBar.vue","../../../../components/common/info/Announcements.vue","../../../../components/common/navigation/MobileNavigation.vue","../../../../components/common/navigation/Navigation.vue","../../../../components/common/header/HeaderLangSelect.vue","../../../../components/common/header/UserCard.vue","../../../../node_modules/radix-vue/dist/index.js","../../../../node_modules/vaul-vue/dist/index.js","../../../../components/common/header/HeaderUserButton.vue","../../../../components/common/header/Header.vue","../../../../components/ui/Chatbot.vue","../../../../virtual:public?%2Flogos%2Finterchalet.svg","../../../../virtual:public?%2Flogos%2Finterhome.svg","../../../../components/ui/InterchaletMigrationPopup.vue","../../../../components/common/info/Notifications.vue","../../../../components/ui/BookingTeaser.vue","../../../../components/ui/BugHerd.vue","../../../../components/global/ErrorContent.vue","../../../../node_modules/nuxt/dist/app/components/nuxt-error-boundary.js","../../../../components/common/footer/SocialMediaLink.vue","../../../../components/common/footer/DomainLanguageSwitcher.vue","../../../../components/common/footer/Footer.vue","../../../../components/@ihgroup/form/WebccRadio.vue","../../../../components/common/technical/Features.vue","../../../../components/common/technical/AB.vue","../../../../components/common/technical/DebugInfo.vue","../../../../components/@ihgroup/consent/ConsentConfig.vue","../../../../components/@ihgroup/consent/ConsentBanner.vue","../../../../components/@ihgroup/consent/Consent.vue","../../../../components/global/ErrorFull.vue","../../../../components/common/wishlist/Wishlist.vue","../../../../components/common/wishlist/WishlistModal.vue","../../../../app.vue","../../../../error.vue","../../../../node_modules/nuxt/dist/app/components/nuxt-root.vue","../../../../node_modules/nuxt/dist/app/entry.js"],"sourcesContent":["/**\n* @vue/shared v3.4.38\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str, expectsLowerCase) {\n  const set = new Set(str.split(\",\"));\n  return expectsLowerCase ? (val) => set.has(val.toLowerCase()) : (val) => set.has(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 isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\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)) && 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((str) => {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction((str) => {\n  const s = str ? `on${capitalize(str)}` : ``;\n  return s;\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, writable = false) => {\n  Object.defineProperty(obj, key, {\n    configurable: true,\n    enumerable: false,\n    writable,\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 PatchFlags = {\n  \"TEXT\": 1,\n  \"1\": \"TEXT\",\n  \"CLASS\": 2,\n  \"2\": \"CLASS\",\n  \"STYLE\": 4,\n  \"4\": \"STYLE\",\n  \"PROPS\": 8,\n  \"8\": \"PROPS\",\n  \"FULL_PROPS\": 16,\n  \"16\": \"FULL_PROPS\",\n  \"NEED_HYDRATION\": 32,\n  \"32\": \"NEED_HYDRATION\",\n  \"STABLE_FRAGMENT\": 64,\n  \"64\": \"STABLE_FRAGMENT\",\n  \"KEYED_FRAGMENT\": 128,\n  \"128\": \"KEYED_FRAGMENT\",\n  \"UNKEYED_FRAGMENT\": 256,\n  \"256\": \"UNKEYED_FRAGMENT\",\n  \"NEED_PATCH\": 512,\n  \"512\": \"NEED_PATCH\",\n  \"DYNAMIC_SLOTS\": 1024,\n  \"1024\": \"DYNAMIC_SLOTS\",\n  \"DEV_ROOT_FRAGMENT\": 2048,\n  \"2048\": \"DEV_ROOT_FRAGMENT\",\n  \"HOISTED\": -1,\n  \"-1\": \"HOISTED\",\n  \"BAIL\": -2,\n  \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n  [1]: `TEXT`,\n  [2]: `CLASS`,\n  [4]: `STYLE`,\n  [8]: `PROPS`,\n  [16]: `FULL_PROPS`,\n  [32]: `NEED_HYDRATION`,\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 ShapeFlags = {\n  \"ELEMENT\": 1,\n  \"1\": \"ELEMENT\",\n  \"FUNCTIONAL_COMPONENT\": 2,\n  \"2\": \"FUNCTIONAL_COMPONENT\",\n  \"STATEFUL_COMPONENT\": 4,\n  \"4\": \"STATEFUL_COMPONENT\",\n  \"TEXT_CHILDREN\": 8,\n  \"8\": \"TEXT_CHILDREN\",\n  \"ARRAY_CHILDREN\": 16,\n  \"16\": \"ARRAY_CHILDREN\",\n  \"SLOTS_CHILDREN\": 32,\n  \"32\": \"SLOTS_CHILDREN\",\n  \"TELEPORT\": 64,\n  \"64\": \"TELEPORT\",\n  \"SUSPENSE\": 128,\n  \"128\": \"SUSPENSE\",\n  \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n  \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n  \"COMPONENT_KEPT_ALIVE\": 512,\n  \"512\": \"COMPONENT_KEPT_ALIVE\",\n  \"COMPONENT\": 6,\n  \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n  \"STABLE\": 1,\n  \"1\": \"STABLE\",\n  \"DYNAMIC\": 2,\n  \"2\": \"DYNAMIC\",\n  \"FORWARDED\": 3,\n  \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n  [1]: \"STABLE\",\n  [2]: \"DYNAMIC\",\n  [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"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,Error\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n  start = Math.max(0, Math.min(start, source.length));\n  end = Math.max(0, Math.min(end, source.length));\n  if (start > end) return \"\";\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) 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) || 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    if (isString(value) || typeof value === \"number\") {\n      const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\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) 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 MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\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 isMathMLTag = /* @__PURE__ */ makeMap(MATH_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,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nfunction isRenderableAttrValue(value) {\n  if (value == null) {\n    return false;\n  }\n  const type = typeof value;\n  return type === \"string\" || type === \"number\" || type === \"boolean\";\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) 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) 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 isRef = (val) => {\n  return !!(val && val.__v_isRef === true);\n};\nconst toDisplayString = (val) => {\n  return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n  if (isRef(val)) {\n    return replacer(_key, val.value);\n  } else if (isMap(val)) {\n    return {\n      [`Map(${val.size})`]: [...val.entries()].reduce(\n        (entries, [key, val2], i) => {\n          entries[stringifySymbol(key, i) + \" =>\"] = val2;\n          return entries;\n        },\n        {}\n      )\n    };\n  } else if (isSet(val)) {\n    return {\n      [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n    };\n  } else if (isSymbol(val)) {\n    return stringifySymbol(val);\n  } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n    return String(val);\n  }\n  return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n  var _a;\n  return (\n    // Symbol.description in es2019+ so we need to cast here to pass\n    // the lib: es2016 check\n    isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n  );\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, genPropsAccessExp, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, 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","/**\n* @vue/reactivity v3.4.38\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { NOOP, extend, isArray, isSymbol, isMap, isIntegerKey, hasOwn, hasChanged, isObject, makeMap, capitalize, toRawType, def, isFunction } 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\nlet activeEffect;\nclass ReactiveEffect {\n  constructor(fn, trigger, scheduler, scope) {\n    this.fn = fn;\n    this.trigger = trigger;\n    this.scheduler = scheduler;\n    this.active = true;\n    this.deps = [];\n    /**\n     * @internal\n     */\n    this._dirtyLevel = 4;\n    /**\n     * @internal\n     */\n    this._trackId = 0;\n    /**\n     * @internal\n     */\n    this._runnings = 0;\n    /**\n     * @internal\n     */\n    this._shouldSchedule = false;\n    /**\n     * @internal\n     */\n    this._depsLength = 0;\n    recordEffectScope(this, scope);\n  }\n  get dirty() {\n    if (this._dirtyLevel === 2 || this._dirtyLevel === 3) {\n      this._dirtyLevel = 1;\n      pauseTracking();\n      for (let i = 0; i < this._depsLength; i++) {\n        const dep = this.deps[i];\n        if (dep.computed) {\n          triggerComputed(dep.computed);\n          if (this._dirtyLevel >= 4) {\n            break;\n          }\n        }\n      }\n      if (this._dirtyLevel === 1) {\n        this._dirtyLevel = 0;\n      }\n      resetTracking();\n    }\n    return this._dirtyLevel >= 4;\n  }\n  set dirty(v) {\n    this._dirtyLevel = v ? 4 : 0;\n  }\n  run() {\n    this._dirtyLevel = 0;\n    if (!this.active) {\n      return this.fn();\n    }\n    let lastShouldTrack = shouldTrack;\n    let lastEffect = activeEffect;\n    try {\n      shouldTrack = true;\n      activeEffect = this;\n      this._runnings++;\n      preCleanupEffect(this);\n      return this.fn();\n    } finally {\n      postCleanupEffect(this);\n      this._runnings--;\n      activeEffect = lastEffect;\n      shouldTrack = lastShouldTrack;\n    }\n  }\n  stop() {\n    if (this.active) {\n      preCleanupEffect(this);\n      postCleanupEffect(this);\n      this.onStop && this.onStop();\n      this.active = false;\n    }\n  }\n}\nfunction triggerComputed(computed) {\n  return computed.value;\n}\nfunction preCleanupEffect(effect2) {\n  effect2._trackId++;\n  effect2._depsLength = 0;\n}\nfunction postCleanupEffect(effect2) {\n  if (effect2.deps.length > effect2._depsLength) {\n    for (let i = effect2._depsLength; i < effect2.deps.length; i++) {\n      cleanupDepEffect(effect2.deps[i], effect2);\n    }\n    effect2.deps.length = effect2._depsLength;\n  }\n}\nfunction cleanupDepEffect(dep, effect2) {\n  const trackId = dep.get(effect2);\n  if (trackId !== void 0 && effect2._trackId !== trackId) {\n    dep.delete(effect2);\n    if (dep.size === 0) {\n      dep.cleanup();\n    }\n  }\n}\nfunction effect(fn, options) {\n  if (fn.effect instanceof ReactiveEffect) {\n    fn = fn.effect.fn;\n  }\n  const _effect = new ReactiveEffect(fn, NOOP, () => {\n    if (_effect.dirty) {\n      _effect.run();\n    }\n  });\n  if (options) {\n    extend(_effect, options);\n    if (options.scope) 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;\nlet pauseScheduleStack = 0;\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 pauseScheduling() {\n  pauseScheduleStack++;\n}\nfunction resetScheduling() {\n  pauseScheduleStack--;\n  while (!pauseScheduleStack && queueEffectSchedulers.length) {\n    queueEffectSchedulers.shift()();\n  }\n}\nfunction trackEffect(effect2, dep, debuggerEventExtraInfo) {\n  var _a;\n  if (dep.get(effect2) !== effect2._trackId) {\n    dep.set(effect2, effect2._trackId);\n    const oldDep = effect2.deps[effect2._depsLength];\n    if (oldDep !== dep) {\n      if (oldDep) {\n        cleanupDepEffect(oldDep, effect2);\n      }\n      effect2.deps[effect2._depsLength++] = dep;\n    } else {\n      effect2._depsLength++;\n    }\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      (_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));\n    }\n  }\n}\nconst queueEffectSchedulers = [];\nfunction triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) {\n  var _a;\n  pauseScheduling();\n  for (const effect2 of dep.keys()) {\n    let tracking;\n    if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {\n      effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0);\n      effect2._dirtyLevel = dirtyLevel;\n    }\n    if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {\n      if (!!(process.env.NODE_ENV !== \"production\")) {\n        (_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));\n      }\n      effect2.trigger();\n      if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) {\n        effect2._shouldSchedule = false;\n        if (effect2.scheduler) {\n          queueEffectSchedulers.push(effect2.scheduler);\n        }\n      }\n    }\n  }\n  resetScheduling();\n}\n\nconst createDep = (cleanup, computed) => {\n  const dep = /* @__PURE__ */ new Map();\n  dep.cleanup = cleanup;\n  dep.computed = computed;\n  return dep;\n};\n\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"iterate\" : \"\");\nconst MAP_KEY_ITERATE_KEY = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"Map key iterate\" : \"\");\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(() => depsMap.delete(key)));\n    }\n    trackEffect(\n      activeEffect,\n      dep,\n      !!(process.env.NODE_ENV !== \"production\") ? {\n        target,\n        type,\n        key\n      } : void 0\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\" || !isSymbol(key2) && 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  pauseScheduling();\n  for (const dep of deps) {\n    if (dep) {\n      triggerEffects(\n        dep,\n        4,\n        !!(process.env.NODE_ENV !== \"production\") ? {\n          target,\n          type,\n          key,\n          newValue,\n          oldValue,\n          oldTarget\n        } : void 0\n      );\n    }\n  }\n  resetScheduling();\n}\nfunction getDepFromReactive(object, key) {\n  const depsMap = targetMap.get(object);\n  return depsMap && depsMap.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 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      pauseScheduling();\n      const res = toRaw(this)[key].apply(this, args);\n      resetScheduling();\n      resetTracking();\n      return res;\n    };\n  });\n  return instrumentations;\n}\nfunction hasOwnProperty(key) {\n  if (!isSymbol(key)) key = String(key);\n  const obj = toRaw(this);\n  track(obj, \"has\", key);\n  return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n  constructor(_isReadonly = false, _isShallow = false) {\n    this._isReadonly = _isReadonly;\n    this._isShallow = _isShallow;\n  }\n  get(target, key, receiver) {\n    const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\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 isShallow2;\n    } else if (key === \"__v_raw\") {\n      if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n      // this means the receiver is a user proxy of the reactive proxy\n      Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n        return target;\n      }\n      return;\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 (isShallow2) {\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}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n  constructor(isShallow2 = false) {\n    super(false, isShallow2);\n  }\n  set(target, key, value, receiver) {\n    let oldValue = target[key];\n    if (!this._isShallow) {\n      const isOldValueReadonly = isReadonly(oldValue);\n      if (!isShallow(value) && !isReadonly(value)) {\n        oldValue = toRaw(oldValue);\n        value = toRaw(value);\n      }\n      if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n        if (isOldValueReadonly) {\n          return false;\n        } else {\n          oldValue.value = value;\n          return true;\n        }\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  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  }\n  has(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  }\n  ownKeys(target) {\n    track(\n      target,\n      \"iterate\",\n      isArray(target) ? \"length\" : ITERATE_KEY\n    );\n    return Reflect.ownKeys(target);\n  }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n  constructor(isShallow2 = false) {\n    super(true, isShallow2);\n  }\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 mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(\n  true\n);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly2 = false, isShallow2 = false) {\n  target = target[\"__v_raw\"];\n  const rawTarget = toRaw(target);\n  const rawKey = toRaw(key);\n  if (!isReadonly2) {\n    if (hasChanged(key, rawKey)) {\n      track(rawTarget, \"get\", key);\n    }\n    track(rawTarget, \"get\", rawKey);\n  }\n  const { has: has2 } = getProto(rawTarget);\n  const wrap = isShallow2 ? toShallow : isReadonly2 ? 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, isReadonly2 = false) {\n  const target = this[\"__v_raw\"];\n  const rawTarget = toRaw(target);\n  const rawKey = toRaw(key);\n  if (!isReadonly2) {\n    if (hasChanged(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, isReadonly2 = false) {\n  target = target[\"__v_raw\"];\n  !isReadonly2 && track(toRaw(target), \"iterate\", ITERATE_KEY);\n  return Reflect.get(target, \"size\", target);\n}\nfunction add(value, _isShallow = false) {\n  if (!_isShallow && !isShallow(value) && !isReadonly(value)) {\n    value = toRaw(value);\n  }\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, _isShallow = false) {\n  if (!_isShallow && !isShallow(value) && !isReadonly(value)) {\n    value = toRaw(value);\n  }\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(isReadonly2, isShallow2) {\n  return function forEach(callback, thisArg) {\n    const observed = this;\n    const target = observed[\"__v_raw\"];\n    const rawTarget = toRaw(target);\n    const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n    !isReadonly2 && 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, isReadonly2, isShallow2) {\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 = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n    !isReadonly2 && 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      warn(\n        `${capitalize(type)} operation ${key}failed: target is readonly.`,\n        toRaw(this)\n      );\n    }\n    return type === \"delete\" ? false : type === \"clear\" ? void 0 : 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(value) {\n      return add.call(this, value, true);\n    },\n    set(key, value) {\n      return set.call(this, key, value, true);\n    },\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 = [\n    \"keys\",\n    \"values\",\n    \"entries\",\n    Symbol.iterator\n  ];\n  iteratorMethods.forEach((method) => {\n    mutableInstrumentations2[method] = createIterableMethod(method, false, false);\n    readonlyInstrumentations2[method] = createIterableMethod(method, true, false);\n    shallowInstrumentations2[method] = createIterableMethod(method, false, true);\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(isReadonly2, shallow) {\n  const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations;\n  return (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_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    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      warn(\n        `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n          target\n        )}`\n      );\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 value ? !!value[\"__v_raw\"] : false;\n}\nfunction toRaw(observed) {\n  const raw = observed && observed[\"__v_raw\"];\n  return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n  if (Object.isExtensible(value)) {\n    def(value, \"__v_skip\", true);\n  }\n  return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nconst COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided.  Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`;\nclass ComputedRefImpl {\n  constructor(getter, _setter, isReadonly, isSSR) {\n    this.getter = getter;\n    this._setter = _setter;\n    this.dep = void 0;\n    this.__v_isRef = true;\n    this[\"__v_isReadonly\"] = false;\n    this.effect = new ReactiveEffect(\n      () => getter(this._value),\n      () => triggerRefValue(\n        this,\n        this.effect._dirtyLevel === 2 ? 2 : 3\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    if ((!self._cacheable || self.effect.dirty) && hasChanged(self._value, self._value = self.effect.run())) {\n      triggerRefValue(self, 4);\n    }\n    trackRefValue(self);\n    if (self.effect._dirtyLevel >= 2) {\n      if (!!(process.env.NODE_ENV !== \"production\") && this._warnRecursive) {\n        warn(COMPUTED_SIDE_EFFECT_WARN, `\n\ngetter: `, this.getter);\n      }\n      triggerRefValue(self, 2);\n    }\n    return self._value;\n  }\n  set value(newValue) {\n    this._setter(newValue);\n  }\n  // #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x\n  get _dirty() {\n    return this.effect.dirty;\n  }\n  set _dirty(v) {\n    this.effect.dirty = v;\n  }\n  // #endregion\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      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\nfunction trackRefValue(ref2) {\n  var _a;\n  if (shouldTrack && activeEffect) {\n    ref2 = toRaw(ref2);\n    trackEffect(\n      activeEffect,\n      (_a = ref2.dep) != null ? _a : ref2.dep = createDep(\n        () => ref2.dep = void 0,\n        ref2 instanceof ComputedRefImpl ? ref2 : void 0\n      ),\n      !!(process.env.NODE_ENV !== \"production\") ? {\n        target: ref2,\n        type: \"get\",\n        key: \"value\"\n      } : void 0\n    );\n  }\n}\nfunction triggerRefValue(ref2, dirtyLevel = 4, newVal, oldVal) {\n  ref2 = toRaw(ref2);\n  const dep = ref2.dep;\n  if (dep) {\n    triggerEffects(\n      dep,\n      dirtyLevel,\n      !!(process.env.NODE_ENV !== \"production\") ? {\n        target: ref2,\n        type: \"set\",\n        key: \"value\",\n        newValue: newVal,\n        oldValue: oldVal\n      } : void 0\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      const oldVal = this._rawValue;\n      this._rawValue = newVal;\n      this._value = useDirectValue ? newVal : toReactive(newVal);\n      triggerRefValue(this, 4, newVal, oldVal);\n    }\n  }\n}\nfunction triggerRef(ref2) {\n  triggerRefValue(ref2, 4, !!(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    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(source, key, defaultValue);\n}\n\nconst deferredComputed = computed;\n\nconst TrackOpTypes = {\n  \"GET\": \"get\",\n  \"HAS\": \"has\",\n  \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n  \"SET\": \"set\",\n  \"ADD\": \"add\",\n  \"DELETE\": \"delete\",\n  \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n  \"SKIP\": \"__v_skip\",\n  \"IS_REACTIVE\": \"__v_isReactive\",\n  \"IS_READONLY\": \"__v_isReadonly\",\n  \"IS_SHALLOW\": \"__v_isShallow\",\n  \"RAW\": \"__v_raw\"\n};\n\nexport { EffectScope, ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, pauseScheduling, pauseTracking, proxyRefs, reactive, readonly, ref, resetScheduling, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, track, trigger, triggerRef, unref };\n","/**\n* @vue/runtime-core v3.4.38\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { pauseTracking, resetTracking, isRef, toRaw, ref, shallowReadonly, track, reactive, shallowReactive, trigger, isReactive, ReactiveEffect, isShallow, getCurrentScope, customRef, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1, isReadonly } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, TrackOpTypes, TriggerOpTypes, 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, isBuiltInDirective, EMPTY_OBJ, isObject, remove, isRegExp, invokeArrayFns, toHandlerKey, capitalize, camelize, hasOwn, isGloballyAllowed, NO, hyphenate, isReservedProp, EMPTY_ARR, toRawType, makeMap, def, isOn, normalizeClass, stringifyStyle, normalizeStyle, isKnownSvgAttr, isBooleanAttr, isKnownHtmlAttr, includeBooleanAttr, isRenderableAttrValue, hasChanged, isSet, isMap, isPlainObject, looseToNumber, isModelListener, toNumber } 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}\nlet isWarning = false;\nfunction warn$1(msg, ...args) {\n  if (isWarning) return;\n  isWarning = true;\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        // eslint-disable-next-line no-restricted-syntax\n        msg + args.map((a) => {\n          var _a, _b;\n          return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);\n        }).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  isWarning = false;\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\")) return;\n  if (val === void 0) {\n    return;\n  } else if (typeof val !== \"number\") {\n    warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n  } else if (isNaN(val)) {\n    warn$1(`${type} is NaN - the duration expression might be incorrect.`);\n  }\n}\n\nconst ErrorCodes = {\n  \"SETUP_FUNCTION\": 0,\n  \"0\": \"SETUP_FUNCTION\",\n  \"RENDER_FUNCTION\": 1,\n  \"1\": \"RENDER_FUNCTION\",\n  \"WATCH_GETTER\": 2,\n  \"2\": \"WATCH_GETTER\",\n  \"WATCH_CALLBACK\": 3,\n  \"3\": \"WATCH_CALLBACK\",\n  \"WATCH_CLEANUP\": 4,\n  \"4\": \"WATCH_CLEANUP\",\n  \"NATIVE_EVENT_HANDLER\": 5,\n  \"5\": \"NATIVE_EVENT_HANDLER\",\n  \"COMPONENT_EVENT_HANDLER\": 6,\n  \"6\": \"COMPONENT_EVENT_HANDLER\",\n  \"VNODE_HOOK\": 7,\n  \"7\": \"VNODE_HOOK\",\n  \"DIRECTIVE_HOOK\": 8,\n  \"8\": \"DIRECTIVE_HOOK\",\n  \"TRANSITION_HOOK\": 9,\n  \"9\": \"TRANSITION_HOOK\",\n  \"APP_ERROR_HANDLER\": 10,\n  \"10\": \"APP_ERROR_HANDLER\",\n  \"APP_WARN_HANDLER\": 11,\n  \"11\": \"APP_WARN_HANDLER\",\n  \"FUNCTION_REF\": 12,\n  \"12\": \"FUNCTION_REF\",\n  \"ASYNC_COMPONENT_LOADER\": 13,\n  \"13\": \"ASYNC_COMPONENT_LOADER\",\n  \"SCHEDULER\": 14,\n  \"14\": \"SCHEDULER\",\n  \"COMPONENT_UPDATE\": 15,\n  \"15\": \"COMPONENT_UPDATE\"\n};\nconst ErrorTypeStrings$1 = {\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\",\n  [15]: \"component update\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n  try {\n    return args ? fn(...args) : fn();\n  } catch (err) {\n    handleError(err, instance, type);\n  }\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  if (isArray(fn)) {\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  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    warn$1(\n      `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`\n    );\n  }\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$1[type] : `https://vuejs.org/error-reference/#runtime-${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      pauseTracking();\n      callWithErrorHandling(\n        appErrorHandler,\n        null,\n        10,\n        [err, exposedInstance, errorInfo]\n      );\n      resetTracking();\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$1[type];\n    if (contextVNode) {\n      pushWarningContext(contextVNode);\n    }\n    warn$1(`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 middleJob = queue[middle];\n    const middleJobId = getId(middleJob);\n    if (middleJobId < id || middleJobId === id && middleJob.pre) {\n      start = middle + 1;\n    } else {\n      end = middle;\n    }\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(instance, 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 (instance && cb.id !== instance.uid) {\n        continue;\n      }\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)].sort(\n      (a, b) => getId(a) - getId(b)\n    );\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    for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n      const cb = activePostFlushCbs[postFlushIndex];\n      if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n        continue;\n      }\n      if (cb.active !== false) cb();\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) return -1;\n    if (b.pre && !a.pre) 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(\n          job,\n          job.i,\n          job.i ? 15 : 14\n        );\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.i;\n      const componentName = instance && getComponentName(instance.type);\n      handleError(\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        null,\n        10\n      );\n      return true;\n    } else {\n      seen.set(fn, count + 1);\n    }\n  }\n}\n\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = /* @__PURE__ */ new Map();\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.effect.dirty = true;\n    instance.update();\n    isHmrUpdating = false;\n  });\n}\nfunction reload(id, newComp) {\n  const record = map.get(id);\n  if (!record) return;\n  newComp = normalizeClassComponent(newComp);\n  updateComponentDef(record.initialDef, newComp);\n  const instances = [...record.instances];\n  for (let i = 0; i < instances.length; i++) {\n    const instance = instances[i];\n    const oldComp = normalizeClassComponent(instance.type);\n    let dirtyInstances = hmrDirtyComponents.get(oldComp);\n    if (!dirtyInstances) {\n      if (oldComp !== record.initialDef) {\n        updateComponentDef(oldComp, newComp);\n      }\n      hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set());\n    }\n    dirtyInstances.add(instance);\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      dirtyInstances.add(instance);\n      instance.ceReload(newComp.styles);\n      dirtyInstances.delete(instance);\n    } else if (instance.parent) {\n      instance.parent.effect.dirty = true;\n      queueJob(() => {\n        instance.parent.update();\n        dirtyInstances.delete(instance);\n      });\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    hmrDirtyComponents.clear();\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$1;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n  if (devtools$1) {\n    devtools$1.emit(event, ...args);\n  } else if (!devtoolsNotInstalled) {\n    buffer.push({ event, args });\n  }\n}\nfunction setDevtoolsHook$1(hook, target) {\n  var _a, _b;\n  devtools$1 = hook;\n  if (devtools$1) {\n    devtools$1.enabled = true;\n    buffer.forEach(({ event, args }) => devtools$1.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    // eslint-disable-next-line no-restricted-syntax\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$1(newHook, target);\n    });\n    setTimeout(() => {\n      if (!devtools$1) {\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$1 && typeof devtools$1.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n  !devtools$1.cleanupBuffer(component)) {\n    _devtoolsComponentRemoved(component);\n  }\n};\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\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\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) 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\nfunction validateDirectiveName(name) {\n  if (isBuiltInDirective(name)) {\n    warn$1(\"Do not use built-in directive ids as custom directive id: \" + name);\n  }\n}\nfunction withDirectives(vnode, directives) {\n  if (currentRenderingInstance === null) {\n    !!(process.env.NODE_ENV !== \"production\") && warn$1(`withDirectives can only be used inside render functions.`);\n    return vnode;\n  }\n  const instance = getComponentPublicInstance(currentRenderingInstance);\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\nconst leaveCbKey = Symbol(\"_leaveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\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 recursiveGetSubtree = (instance) => {\n  const subTree = instance.subTree;\n  return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;\n};\nconst BaseTransitionImpl = {\n  name: `BaseTransition`,\n  props: BaseTransitionPropsValidators,\n  setup(props, { slots }) {\n    const instance = getCurrentInstance();\n    const state = useTransitionState();\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$1(\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\")) 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$1(`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      let enterHooks = resolveTransitionHooks(\n        innerChild,\n        rawProps,\n        state,\n        instance,\n        // #11061, ensure enterHooks is fresh after clone\n        (hooks) => enterHooks = hooks\n      );\n      setTransitionHooks(innerChild, enterHooks);\n      const oldChild = instance.subTree;\n      const oldInnerChild = oldChild && getKeepAliveChild(oldChild);\n      if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild) && recursiveGetSubtree(instance).type !== Comment) {\n        const leavingHooks = resolveTransitionHooks(\n          oldInnerChild,\n          rawProps,\n          state,\n          instance\n        );\n        setTransitionHooks(oldInnerChild, leavingHooks);\n        if (mode === \"out-in\" && innerChild.type !== Comment) {\n          state.isLeaving = true;\n          leavingHooks.afterLeave = () => {\n            state.isLeaving = false;\n            if (instance.update.active !== false) {\n              instance.effect.dirty = true;\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[leaveCbKey] = () => {\n              earlyRemove();\n              el[leaveCbKey] = 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, postClone) {\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)) 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[leaveCbKey]) {\n        el[leaveCbKey](\n          true\n          /* cancelled */\n        );\n      }\n      const leavingVNode = leavingVNodesCache[key];\n      if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n        leavingVNode.el[leaveCbKey]();\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[enterCbKey] = (cancelled) => {\n        if (called) 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[enterCbKey] = 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[enterCbKey]) {\n        el[enterCbKey](\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[leaveCbKey] = (cancelled) => {\n        if (called) return;\n        called = true;\n        remove();\n        if (cancelled) {\n          callHook(onLeaveCancelled, [el]);\n        } else {\n          callHook(onAfterLeave, [el]);\n        }\n        el[leaveCbKey] = 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      const hooks2 = resolveTransitionHooks(\n        vnode2,\n        props,\n        state,\n        instance,\n        postClone\n      );\n      if (postClone) postClone(hooks2);\n      return hooks2;\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  if (!isKeepAlive(vnode)) {\n    return vnode;\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") && vnode.component) {\n    return vnode.component.subTree;\n  }\n  const { shapeFlag, children } = vnode;\n  if (children) {\n    if (shapeFlag & 16) {\n      return children[0];\n    }\n    if (shapeFlag & 32 && isFunction(children.default)) {\n      return children.default();\n    }\n  }\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) 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\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\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;\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\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$1(\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        );\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          instance.parent.effect.dirty = true;\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, namespace, 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        namespace,\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      invalidateMount(instance2.m);\n      invalidateMount(instance2.a);\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 (cached && (!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        if (isSuspense(instance.subTree.type)) {\n          queuePostRenderEffect(() => {\n            cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n          }, instance.subTree.suspense);\n        } else {\n          cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n        }\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$1(`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      if (vnode.type === Comment) {\n        current = null;\n        return vnode;\n      }\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      pauseTracking();\n      const reset = setCurrentInstance(target);\n      const res = callWithAsyncErrorHandling(hook, target, type, args);\n      reset();\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$1[type].replace(/ hook$/, \"\"));\n    warn$1(\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  if (!isInSSRComponentSetup || lifecycle === \"sp\") {\n    injectHook(lifecycle, (...args) => hook(...args), target);\n  }\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      );\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$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n    }\n    return res;\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    warn$1(\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$1(`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) 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\") 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$1(\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}`) + // #7256 force differentiate fallback content from actual content\n      (!validSlotContent && fallback ? \"_fb\" : \"\")\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)) return true;\n    if (child.type === Comment) 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$1(`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) return null;\n  if (isStatefulComponent(i)) return getComponentPublicInstance(i);\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 = () => {\n      i.effect.dirty = true;\n      queueJob(i.update);\n    }),\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    if (key === \"__v_skip\") {\n      return true;\n    }\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.attrs, \"get\", \"\");\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$1(\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$1(\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$1(`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$1(`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$1(\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$1(\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] !== \"_\" && !isGloballyAllowed(key);\n      if (!!(process.env.NODE_ENV !== \"production\") && !has && PublicInstanceProxyHandlers.has(_, key)) {\n        warn$1(\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$1(\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$1(\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 getContext() {\n  const i = getCurrentInstance();\n  if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n    warn$1(`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\")) 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$1(`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) return a || b;\n  if (isArray(a) && isArray(b)) 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$1(\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$1(`${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$1(\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$1(\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$1(\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$1(`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$1(`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$1(\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) instance.components = components;\n  if (directives) 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        );\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$1(`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$1(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\n      }\n    }\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    warn$1(`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$1(\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) return from;\n  if (!from) 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$1(`root props passed to app.mount() must be an object.`);\n      rootProps = null;\n    }\n    const context = createAppContext();\n    const installedPlugins = /* @__PURE__ */ new WeakSet();\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$1(\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$1(`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$1(\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$1(\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$1(\"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$1(`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$1(`Directive \"${name}\" has already been registered in target app.`);\n        }\n        context.directives[name] = directive;\n        return app;\n      },\n      mount(rootContainer, isHydrate, namespace) {\n        if (!isMounted) {\n          if (!!(process.env.NODE_ENV !== \"production\") && rootContainer.__vue_app__) {\n            warn$1(\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(rootComponent, rootProps);\n          vnode.appContext = context;\n          if (namespace === true) {\n            namespace = \"svg\";\n          } else if (namespace === false) {\n            namespace = void 0;\n          }\n          if (!!(process.env.NODE_ENV !== \"production\")) {\n            context.reload = () => {\n              render(\n                cloneVNode(vnode),\n                rootContainer,\n                namespace\n              );\n            };\n          }\n          if (isHydrate && hydrate) {\n            hydrate(vnode, rootContainer);\n          } else {\n            render(vnode, rootContainer, namespace);\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 getComponentPublicInstance(vnode.component);\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn$1(\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$1(`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$1(\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        const lastApp = currentApp;\n        currentApp = app;\n        try {\n          return fn();\n        } finally {\n          currentApp = lastApp;\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$1(`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 = currentApp ? currentApp._context.provides : instance ? instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0;\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$1(`injection \"${String(key)}\" not found.`);\n    }\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    warn$1(`inject() can only be used inside setup() or functional components.`);\n  }\n}\nfunction hasInjectionContext() {\n  return !!(currentInstance || currentRenderingInstance || currentApp);\n}\n\nconst internalObjectProto = {};\nconst createInternalObject = () => Object.create(internalObjectProto);\nconst isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;\n\nfunction initProps(instance, rawProps, isStateful, isSSR = false) {\n  const props = {};\n  const attrs = createInternalObject();\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) 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            );\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            );\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.attrs, \"set\", \"\");\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          const reset = setCurrentInstance(instance);\n          value = propsDefaults[key] = defaultValue.call(\n            null,\n            props\n          );\n          reset();\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}\nconst mixinPropsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n  const cache = __VUE_OPTIONS_API__ && asMixin ? mixinPropsCache : 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) 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$1(`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$1(`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        const propType = prop.type;\n        let shouldCast = false;\n        let shouldCastTrue = true;\n        if (isArray(propType)) {\n          for (let index = 0; index < propType.length; ++index) {\n            const type = propType[index];\n            const typeName = isFunction(type) && type.name;\n            if (typeName === \"Boolean\") {\n              shouldCast = true;\n              break;\n            } else if (typeName === \"String\") {\n              shouldCastTrue = false;\n            }\n          }\n        } else {\n          shouldCast = isFunction(propType) && propType.name === \"Boolean\";\n        }\n        prop[0 /* shouldCast */] = shouldCast;\n        prop[1 /* shouldCastTrue */] = shouldCastTrue;\n        if (shouldCast || hasOwn(prop, \"default\")) {\n          needCastKeys.push(normalizedKey);\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] !== \"$\" && !isReservedProp(key)) {\n    return true;\n  } else if (!!(process.env.NODE_ENV !== \"production\")) {\n    warn$1(`Invalid prop name: \"${key}\" is a reserved property.`);\n  }\n  return false;\n}\nfunction getType(ctor) {\n  if (ctor === null) {\n    return \"null\";\n  }\n  if (typeof ctor === \"function\") {\n    return ctor.name || \"\";\n  } else if (typeof ctor === \"object\") {\n    const name = ctor.constructor && ctor.constructor.name;\n    return name || \"\";\n  }\n  return \"\";\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) continue;\n    validateProp(\n      key,\n      resolvedValues[key],\n      opt,\n      !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(resolvedValues) : resolvedValues,\n      !hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key))\n    );\n  }\n}\nfunction validateProp(name, value, prop, props, isAbsent) {\n  const { type, required, validator, skipCheck } = prop;\n  if (required && isAbsent) {\n    warn$1('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$1(getInvalidTypeMessage(name, value, expectedTypes));\n      return;\n    }\n  }\n  if (validator && !validator(value, props)) {\n    warn$1('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  if (expectedTypes.length === 0) {\n    return `Prop type [] for prop \"${name}\" won't match anything. Did you mean to use type Array instead?`;\n  }\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 && (!ctx || ctx.root === currentInstance.root)) {\n      warn$1(\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)) 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$1(\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$1(\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 assignSlots = (slots, children, optimized) => {\n  for (const key in children) {\n    if (optimized || key !== \"_\") {\n      slots[key] = children[key];\n    }\n  }\n};\nconst initSlots = (instance, children, optimized) => {\n  const slots = instance.slots = createInternalObject();\n  if (instance.vnode.shapeFlag & 32) {\n    const type = children._;\n    if (type) {\n      assignSlots(slots, children, optimized);\n      if (optimized) {\n        def(slots, \"_\", type, true);\n      }\n    } else {\n      normalizeObjectSlots(children, slots);\n    }\n  } else if (children) {\n    normalizeVNodeSlots(instance, children);\n  }\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        assignSlots(slots, children, optimized);\n        trigger(instance, \"set\", \"$slots\");\n      } else if (optimized && type === 1) {\n        needDeletionCheck = false;\n      } else {\n        assignSlots(slots, children, optimized);\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) && deletionComparisonTarget[key] == null) {\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 ? getComponentPublicInstance(vnode.component) : 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$1(\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) 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) refs[rawRef.k] = value;\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn$1(\"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$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n    }\n  }\n}\n\nconst TeleportEndKey = Symbol(\"_vte\");\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst isTargetMathML = (target) => typeof MathMLElement === \"function\" && target instanceof MathMLElement;\nconst resolveTarget = (props, select) => {\n  const targetSelector = props && props.to;\n  if (isString(targetSelector)) {\n    if (!select) {\n      !!(process.env.NODE_ENV !== \"production\") && warn$1(\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 (!!(process.env.NODE_ENV !== \"production\") && !target && !isTeleportDisabled(props)) {\n        warn$1(\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$1(`Invalid Teleport target: ${targetSelector}`);\n    }\n    return targetSelector;\n  }\n};\nconst TeleportImpl = {\n  name: \"Teleport\",\n  __isTeleport: true,\n  process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, 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 = prepareAnchor(target, n2, createText, insert);\n      if (target) {\n        if (namespace === \"svg\" || isTargetSVG(target)) {\n          namespace = \"svg\";\n        } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n          namespace = \"mathml\";\n        }\n      } else if (!!(process.env.NODE_ENV !== \"production\") && !disabled) {\n        warn$1(\"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            namespace,\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      n2.targetStart = n1.targetStart;\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      if (namespace === \"svg\" || isTargetSVG(target)) {\n        namespace = \"svg\";\n      } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n        namespace = \"mathml\";\n      }\n      if (dynamicChildren) {\n        patchBlockChildren(\n          n1.dynamicChildren,\n          dynamicChildren,\n          currentContainer,\n          parentComponent,\n          parentSuspense,\n          namespace,\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          namespace,\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        } else {\n          if (n2.props && n1.props && n2.props.to !== n1.props.to) {\n            n2.props.to = n1.props.to;\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$1(\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, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n    const {\n      shapeFlag,\n      children,\n      anchor,\n      targetStart,\n      targetAnchor,\n      target,\n      props\n    } = vnode;\n    if (target) {\n      hostRemove(targetStart);\n      hostRemove(targetAnchor);\n    }\n    doRemove && hostRemove(anchor);\n    if (shapeFlag & 16) {\n      const shouldRemove = doRemove || !isTeleportDisabled(props);\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        unmount(\n          child,\n          parentComponent,\n          parentSuspense,\n          shouldRemove,\n          !!child.dynamicChildren\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, insert, createText }\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.targetStart = targetNode;\n        vnode.targetAnchor = targetNode && nextSibling(targetNode);\n      } else {\n        vnode.anchor = nextSibling(node);\n        let targetAnchor = targetNode;\n        while (targetAnchor) {\n          if (targetAnchor && targetAnchor.nodeType === 8) {\n            if (targetAnchor.data === \"teleport start anchor\") {\n              vnode.targetStart = targetAnchor;\n            } else if (targetAnchor.data === \"teleport anchor\") {\n              vnode.targetAnchor = targetAnchor;\n              target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n              break;\n            }\n          }\n          targetAnchor = nextSibling(targetAnchor);\n        }\n        if (!vnode.targetAnchor) {\n          prepareAnchor(target, vnode, createText, insert);\n        }\n        hydrateChildren(\n          targetNode && nextSibling(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 && node !== vnode.targetAnchor) {\n      if (node.nodeType === 1) node.setAttribute(\"data-v-owner\", ctx.uid);\n      node = node.nextSibling;\n    }\n    ctx.ut();\n  }\n}\nfunction prepareAnchor(target, vnode, createText, insert) {\n  const targetStart = vnode.targetStart = createText(\"\");\n  const targetAnchor = vnode.targetAnchor = createText(\"\");\n  targetStart[TeleportEndKey] = targetAnchor;\n  if (target) {\n    insert(targetStart, target);\n    insert(targetAnchor, target);\n  }\n  return targetAnchor;\n}\n\nlet hasLoggedMismatchError = false;\nconst logMismatchError = () => {\n  if (hasLoggedMismatchError) {\n    return;\n  }\n  console.error(\"Hydration completed but contains mismatches.\");\n  hasLoggedMismatchError = true;\n};\nconst isSVGContainer = (container) => container.namespaceURI.includes(\"svg\") && container.tagName !== \"foreignObject\";\nconst isMathMLContainer = (container) => container.namespaceURI.includes(\"MathML\");\nconst getContainerType = (container) => {\n  if (isSVGContainer(container)) return \"svg\";\n  if (isMathMLContainer(container)) return \"mathml\";\n  return void 0;\n};\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\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\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    hydrateNode(container.firstChild, vnode, null, null, null);\n    flushPostFlushCbs();\n    container._vnode = vnode;\n  };\n  const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n    optimized = optimized || !!vnode.dynamicChildren;\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 (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n      def(node, \"__vnode\", vnode, true);\n      def(node, \"__vueParentComponent\", parentComponent, true);\n    }\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            (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n              `Hydration text mismatch in`,\n              node.parentNode,\n              `\n  - rendered on server: ${JSON.stringify(\n                node.data\n              )}\n  - expected on client: ${JSON.stringify(vnode.children)}`\n            );\n            logMismatchError();\n            node.data = vnode.children;\n          }\n          nextNode = nextSibling(node);\n        }\n        break;\n      case Comment:\n        if (isTemplateNode(node)) {\n          nextNode = nextSibling(node);\n          replaceNode(\n            vnode.el = node.content.firstChild,\n            node,\n            parentComponent\n          );\n        } else 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()) && !isTemplateNode(node)) {\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          if (isFragmentStart) {\n            nextNode = locateClosingAnchor(node);\n          } else if (isComment(node) && node.data === \"teleport start\") {\n            nextNode = locateClosingAnchor(node, node.data, \"teleport end\");\n          } else {\n            nextNode = nextSibling(node);\n          }\n          mountComponent(\n            vnode,\n            container,\n            null,\n            parentComponent,\n            parentSuspense,\n            getContainerType(container),\n            optimized\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            getContainerType(parentNode(node)),\n            slotScopeIds,\n            optimized,\n            rendererInternals,\n            hydrateNode\n          );\n        } else if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) {\n          warn$1(\"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, transition } = vnode;\n    const forcePatch = type === \"input\" || type === \"option\";\n    if (!!(process.env.NODE_ENV !== \"production\") || forcePatch || patchFlag !== -1) {\n      if (dirs) {\n        invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n      }\n      let needCallTransitionHooks = false;\n      if (isTemplateNode(el)) {\n        needCallTransitionHooks = needTransition(parentSuspense, transition) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;\n        const content = el.content.firstChild;\n        if (needCallTransitionHooks) {\n          transition.beforeEnter(content);\n        }\n        replaceNode(content, el, parentComponent);\n        vnode.el = el = content;\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          if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n            warn$1(\n              `Hydration children mismatch on`,\n              el,\n              `\nServer rendered element contains more child nodes than client vdom.`\n            );\n            hasWarned = true;\n          }\n          logMismatchError();\n          const cur = next;\n          next = next.nextSibling;\n          remove(cur);\n        }\n      } else if (shapeFlag & 8) {\n        if (el.textContent !== vnode.children) {\n          (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n            `Hydration text content mismatch on`,\n            el,\n            `\n  - rendered on server: ${el.textContent}\n  - expected on client: ${vnode.children}`\n          );\n          logMismatchError();\n          el.textContent = vnode.children;\n        }\n      }\n      if (props) {\n        if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ || forcePatch || !optimized || patchFlag & (16 | 32)) {\n          const isCustomElement = el.tagName.includes(\"-\");\n          for (const key in props) {\n            if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && // #11189 skip if this node has directives that have created hooks\n            // as it could have mutated the DOM in any possible way\n            !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) {\n              logMismatchError();\n            }\n            if (forcePatch && (key.endsWith(\"value\") || key === \"indeterminate\") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers\n            key[0] === \".\" || isCustomElement) {\n              patchProp(el, key, null, props[key], void 0, parentComponent);\n            }\n          }\n        } else if (props.onClick) {\n          patchProp(\n            el,\n            \"onClick\",\n            null,\n            props.onClick,\n            void 0,\n            parentComponent\n          );\n        } else if (patchFlag & 4 && isReactive(props.style)) {\n          for (const key in props.style) props.style[key];\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 || needCallTransitionHooks) {\n        queueEffectWithSuspense(() => {\n          vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n          needCallTransitionHooks && transition.enter(el);\n          dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n        }, parentSuspense);\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      const isText = vnode.type === Text;\n      if (node) {\n        if (isText && !optimized) {\n          let next = children[i + 1];\n          if (next && (next = normalizeVNode(next)).type === Text) {\n            insert(\n              createText(\n                node.data.slice(vnode.children.length)\n              ),\n              container,\n              nextSibling(node)\n            );\n            node.data = vnode.children;\n          }\n        }\n        node = hydrateNode(\n          node,\n          vnode,\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n      } else if (isText && !vnode.children) {\n        insert(vnode.el = createText(\"\"), container);\n      } else {\n        if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n          warn$1(\n            `Hydration children mismatch on`,\n            container,\n            `\nServer rendered element contains fewer child nodes than client vdom.`\n          );\n          hasWarned = true;\n        }\n        logMismatchError();\n        patch(\n          null,\n          vnode,\n          container,\n          null,\n          parentComponent,\n          parentSuspense,\n          getContainerType(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      logMismatchError();\n      insert(vnode.anchor = createComment(`]`), container, next);\n      return next;\n    }\n  };\n  const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n    (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n      `Hydration node mismatch:\n- rendered on server:`,\n      node,\n      node.nodeType === 3 /* TEXT */ ? `(text)` : isComment(node) && node.data === \"[\" ? `(start of fragment)` : ``,\n      `\n- expected on client:`,\n      vnode.type\n    );\n    logMismatchError();\n    vnode.el = null;\n    if (isFragment) {\n      const end = locateClosingAnchor(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      getContainerType(container),\n      slotScopeIds\n    );\n    return next;\n  };\n  const locateClosingAnchor = (node, open = \"[\", close = \"]\") => {\n    let match = 0;\n    while (node) {\n      node = nextSibling(node);\n      if (node && isComment(node)) {\n        if (node.data === open) match++;\n        if (node.data === close) {\n          if (match === 0) {\n            return nextSibling(node);\n          } else {\n            match--;\n          }\n        }\n      }\n    }\n    return node;\n  };\n  const replaceNode = (newNode, oldNode, parentComponent) => {\n    const parentNode2 = oldNode.parentNode;\n    if (parentNode2) {\n      parentNode2.replaceChild(newNode, oldNode);\n    }\n    let parent = parentComponent;\n    while (parent) {\n      if (parent.vnode.el === oldNode) {\n        parent.vnode.el = parent.subTree.el = newNode;\n      }\n      parent = parent.parent;\n    }\n  };\n  const isTemplateNode = (node) => {\n    return node.nodeType === 1 /* ELEMENT */ && node.tagName.toLowerCase() === \"template\";\n  };\n  return [hydrate, hydrateNode];\n}\nfunction propHasMismatch(el, key, clientValue, vnode, instance) {\n  let mismatchType;\n  let mismatchKey;\n  let actual;\n  let expected;\n  if (key === \"class\") {\n    actual = el.getAttribute(\"class\");\n    expected = normalizeClass(clientValue);\n    if (!isSetEqual(toClassSet(actual || \"\"), toClassSet(expected))) {\n      mismatchType = mismatchKey = `class`;\n    }\n  } else if (key === \"style\") {\n    actual = el.getAttribute(\"style\") || \"\";\n    expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue));\n    const actualMap = toStyleMap(actual);\n    const expectedMap = toStyleMap(expected);\n    if (vnode.dirs) {\n      for (const { dir, value } of vnode.dirs) {\n        if (dir.name === \"show\" && !value) {\n          expectedMap.set(\"display\", \"none\");\n        }\n      }\n    }\n    if (instance) {\n      resolveCssVars(instance, vnode, expectedMap);\n    }\n    if (!isMapEqual(actualMap, expectedMap)) {\n      mismatchType = mismatchKey = \"style\";\n    }\n  } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) {\n    if (isBooleanAttr(key)) {\n      actual = el.hasAttribute(key);\n      expected = includeBooleanAttr(clientValue);\n    } else if (clientValue == null) {\n      actual = el.hasAttribute(key);\n      expected = false;\n    } else {\n      if (el.hasAttribute(key)) {\n        actual = el.getAttribute(key);\n      } else if (key === \"value\" && el.tagName === \"TEXTAREA\") {\n        actual = el.value;\n      } else {\n        actual = false;\n      }\n      expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false;\n    }\n    if (actual !== expected) {\n      mismatchType = `attribute`;\n      mismatchKey = key;\n    }\n  }\n  if (mismatchType) {\n    const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}=\"${v}\"`;\n    const preSegment = `Hydration ${mismatchType} mismatch on`;\n    const postSegment = `\n  - rendered on server: ${format(actual)}\n  - expected on client: ${format(expected)}\n  Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n  You should fix the source of the mismatch.`;\n    {\n      warn$1(preSegment, el, postSegment);\n    }\n    return true;\n  }\n  return false;\n}\nfunction toClassSet(str) {\n  return new Set(str.trim().split(/\\s+/));\n}\nfunction isSetEqual(a, b) {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const s of a) {\n    if (!b.has(s)) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction toStyleMap(str) {\n  const styleMap = /* @__PURE__ */ new Map();\n  for (const item of str.split(\";\")) {\n    let [key, value] = item.split(\":\");\n    key = key.trim();\n    value = value && value.trim();\n    if (key && value) {\n      styleMap.set(key, value);\n    }\n  }\n  return styleMap;\n}\nfunction isMapEqual(a, b) {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const [key, value] of a) {\n    if (value !== b.get(key)) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction resolveCssVars(instance, vnode, expectedMap) {\n  const root = instance.subTree;\n  if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) {\n    const cssVars = instance.getCssVars();\n    for (const key in cssVars) {\n      expectedMap.set(`--${key}`, String(cssVars[key]));\n    }\n  }\n  if (vnode === root && instance.parent) {\n    resolveCssVars(instance.parent, instance.vnode, expectedMap);\n  }\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 (typeof __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ !== \"boolean\") {\n    !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_HYDRATION_MISMATCH_DETAILS__`);\n    getGlobalThis().__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ = 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$1(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, namespace = void 0, 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, namespace);\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          patchStaticNode(n1, n2, container, namespace);\n        }\n        break;\n      case Fragment:\n        processFragment(\n          n1,\n          n2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\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            namespace,\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            namespace,\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            namespace,\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            namespace,\n            slotScopeIds,\n            optimized,\n            internals\n          );\n        } else if (!!(process.env.NODE_ENV !== \"production\")) {\n          warn$1(\"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, namespace) => {\n    [n2.el, n2.anchor] = hostInsertStaticContent(\n      n2.children,\n      container,\n      anchor,\n      namespace,\n      n2.el,\n      n2.anchor\n    );\n  };\n  const patchStaticNode = (n1, n2, container, namespace) => {\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        namespace\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, namespace, slotScopeIds, optimized) => {\n    if (n2.type === \"svg\") {\n      namespace = \"svg\";\n    } else if (n2.type === \"math\") {\n      namespace = \"mathml\";\n    }\n    if (n1 == null) {\n      mountElement(\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    } else {\n      patchElement(\n        n1,\n        n2,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    }\n  };\n  const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    let el;\n    let vnodeHook;\n    const { props, shapeFlag, transition, dirs } = vnode;\n    el = vnode.el = hostCreateElement(\n      vnode.type,\n      namespace,\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        resolveChildrenNamespace(vnode, namespace),\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(el, key, null, props[key], namespace, parentComponent);\n        }\n      }\n      if (\"value\" in props) {\n        hostPatchProp(el, \"value\", null, props.value, namespace);\n      }\n      if (vnodeHook = props.onVnodeBeforeMount) {\n        invokeVNodeHook(vnodeHook, parentComponent, vnode);\n      }\n    }\n    if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n      def(el, \"__vnode\", vnode, true);\n      def(el, \"__vueParentComponent\", parentComponent, true);\n    }\n    if (dirs) {\n      invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n    }\n    const needCallTransitionHooks = needTransition(parentSuspense, transition);\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, namespace, 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        namespace,\n        slotScopeIds,\n        optimized\n      );\n    }\n  };\n  const patchElement = (n1, n2, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    const el = n2.el = n1.el;\n    if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n      el.__vnode = n2;\n    }\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    if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) {\n      hostSetElementText(el, \"\");\n    }\n    if (dynamicChildren) {\n      patchBlockChildren(\n        n1.dynamicChildren,\n        dynamicChildren,\n        el,\n        parentComponent,\n        parentSuspense,\n        resolveChildrenNamespace(n2, namespace),\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        resolveChildrenNamespace(n2, namespace),\n        slotScopeIds,\n        false\n      );\n    }\n    if (patchFlag > 0) {\n      if (patchFlag & 16) {\n        patchProps(el, oldProps, newProps, parentComponent, namespace);\n      } else {\n        if (patchFlag & 2) {\n          if (oldProps.class !== newProps.class) {\n            hostPatchProp(el, \"class\", null, newProps.class, namespace);\n          }\n        }\n        if (patchFlag & 4) {\n          hostPatchProp(el, \"style\", oldProps.style, newProps.style, namespace);\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(el, key, prev, next, namespace, parentComponent);\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(el, oldProps, newProps, parentComponent, namespace);\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, namespace, 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        namespace,\n        slotScopeIds,\n        true\n      );\n    }\n  };\n  const patchProps = (el, oldProps, newProps, parentComponent, namespace) => {\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              namespace,\n              parentComponent\n            );\n          }\n        }\n      }\n      for (const key in newProps) {\n        if (isReservedProp(key)) continue;\n        const next = newProps[key];\n        const prev = oldProps[key];\n        if (next !== prev && key !== \"value\") {\n          hostPatchProp(el, key, prev, next, namespace, parentComponent);\n        }\n      }\n      if (\"value\" in newProps) {\n        hostPatchProp(el, \"value\", oldProps.value, newProps.value, namespace);\n      }\n    }\n  };\n  const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, 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        // #10007\n        // such fragment like `<></>` will be compiled into\n        // a fragment which doesn't have a children.\n        // In this case fallback to an empty array\n        n2.children || [],\n        container,\n        fragmentEndAnchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\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          namespace,\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          namespace,\n          slotScopeIds,\n          optimized\n        );\n      }\n    }\n  };\n  const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, 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          namespace,\n          optimized\n        );\n      } else {\n        mountComponent(\n          n2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          optimized\n        );\n      }\n    } else {\n      updateComponent(n1, n2, optimized);\n    }\n  };\n  const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, namespace, 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, false, optimized);\n      if (!!(process.env.NODE_ENV !== \"production\")) {\n        endMeasure(instance, `init`);\n      }\n    }\n    if (instance.asyncDep) {\n      parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect, optimized);\n      if (!initialVNode.el) {\n        const placeholder = instance.subTree = createVNode(Comment);\n        processCommentNode(null, placeholder, container, anchor);\n      }\n    } else {\n      setupRenderEffect(\n        instance,\n        initialVNode,\n        container,\n        anchor,\n        parentSuspense,\n        namespace,\n        optimized\n      );\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.effect.dirty = true;\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, namespace, 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            namespace\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        {\n          const nonHydratedAsyncRoot = locateNonHydratedAsyncRoot(instance);\n          if (nonHydratedAsyncRoot) {\n            if (next) {\n              next.el = vnode.el;\n              updateComponentPreRender(instance, next, optimized);\n            }\n            nonHydratedAsyncRoot.asyncDep.then(() => {\n              if (!instance.isUnmounted) {\n                componentUpdateFn();\n              }\n            });\n            return;\n          }\n        }\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          namespace\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      NOOP,\n      () => queueJob(update),\n      instance.scope\n      // track it in component's effect scope\n    );\n    const update = instance.update = () => {\n      if (effect.dirty) {\n        effect.run();\n      }\n    };\n    update.i = instance;\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    }\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(instance);\n    resetTracking();\n  };\n  const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, 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          namespace,\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          namespace,\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            namespace,\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            namespace,\n            slotScopeIds,\n            optimized\n          );\n        }\n      }\n    }\n  };\n  const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, namespace, 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        namespace,\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        namespace,\n        slotScopeIds,\n        optimized,\n        commonLength\n      );\n    }\n  };\n  const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, namespace, 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          namespace,\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          namespace,\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            namespace,\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$1(\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++) 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            namespace,\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            namespace,\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 needTransition2 = moveType !== 2 && shapeFlag & 1 && transition;\n    if (needTransition2) {\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      cacheIndex\n    } = vnode;\n    if (patchFlag === -2) {\n      optimized = false;\n    }\n    if (ref != null) {\n      setRef(ref, null, parentSuspense, vnode, true);\n    }\n    if (cacheIndex != null) {\n      parentComponent.renderCache[cacheIndex] = void 0;\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          internals,\n          doRemove\n        );\n      } else if (dynamicChildren && // #5154\n      // when v-once is used inside a block, setBlockTracking(-1) marks the\n      // parent block with hasOnce: true\n      // so that it doesn't take the fast path during unmount - otherwise\n      // components nested in v-once are never unmounted.\n      !dynamicChildren.hasOnce && // #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, m, a } = instance;\n    invalidateMount(m);\n    invalidateMount(a);\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    const el = hostNextSibling(vnode.anchor || vnode.el);\n    const teleportEnd = el && el[TeleportEndKey];\n    return teleportEnd ? hostNextSibling(teleportEnd) : el;\n  };\n  let isFlushing = false;\n  const render = (vnode, container, namespace) => {\n    if (vnode == null) {\n      if (container._vnode) {\n        unmount(container._vnode, null, null, true);\n      }\n    } else {\n      patch(\n        container._vnode || null,\n        vnode,\n        container,\n        null,\n        null,\n        null,\n        namespace\n      );\n    }\n    container._vnode = vnode;\n    if (!isFlushing) {\n      isFlushing = true;\n      flushPreFlushCbs();\n      flushPostFlushCbs();\n      isFlushing = false;\n    }\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 resolveChildrenNamespace({ type, props }, currentNamespace) {\n  return currentNamespace === \"svg\" && type === \"foreignObject\" || currentNamespace === \"mathml\" && type === \"annotation-xml\" && props && props.encoding && props.encoding.includes(\"html\") ? void 0 : currentNamespace;\n}\nfunction toggleRecurse({ effect, update }, allowed) {\n  effect.allowRecurse = update.allowRecurse = allowed;\n}\nfunction needTransition(parentSuspense, transition) {\n  return (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted;\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 && c2.patchFlag !== -2)\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}\nfunction locateNonHydratedAsyncRoot(instance) {\n  const subComponent = instance.subTree.component;\n  if (subComponent) {\n    if (subComponent.asyncDep && !subComponent.asyncResolved) {\n      return subComponent;\n    } else {\n      return locateNonHydratedAsyncRoot(subComponent);\n    }\n  }\n}\nfunction invalidateMount(hooks) {\n  if (hooks) {\n    for (let i = 0; i < hooks.length; i++) hooks[i].active = false;\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$1(\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 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$1(\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, {\n  immediate,\n  deep,\n  flush,\n  once,\n  onTrack,\n  onTrigger\n} = EMPTY_OBJ) {\n  if (cb && once) {\n    const _cb = cb;\n    cb = (...args) => {\n      _cb(...args);\n      unwatch();\n    };\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") && deep !== void 0 && typeof deep === \"number\") {\n    warn$1(\n      `watch() \"deep\" option with number value will be used as watch depth in future versions. Please use a boolean instead to avoid potential breakage.`\n    );\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") && !cb) {\n    if (immediate !== void 0) {\n      warn$1(\n        `watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.`\n      );\n    }\n    if (deep !== void 0) {\n      warn$1(\n        `watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.`\n      );\n    }\n    if (once !== void 0) {\n      warn$1(\n        `watch() \"once\" option is only respected when using the watch(source, callback, options?) signature.`\n      );\n    }\n  }\n  const warnInvalidSource = (s) => {\n    warn$1(\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 = currentInstance;\n  const reactiveGetter = (source2) => deep === true ? source2 : (\n    // for deep: false, only traverse root-level properties\n    traverse(source2, deep === false ? 1 : void 0)\n  );\n  let getter;\n  let forceTrigger = false;\n  let isMultiSource = false;\n  if (isRef(source)) {\n    getter = () => source.value;\n    forceTrigger = isShallow(source);\n  } else if (isReactive(source)) {\n    getter = () => reactiveGetter(source);\n    forceTrigger = true;\n  } else if (isArray(source)) {\n    isMultiSource = true;\n    forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n    getter = () => source.map((s) => {\n      if (isRef(s)) {\n        return s.value;\n      } else if (isReactive(s)) {\n        return reactiveGetter(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 (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      cleanup = effect.onStop = void 0;\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 || !effect.dirty) {\n      return;\n    }\n    if (cb) {\n      const newValue = effect.run();\n      if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : 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) job.id = instance.uid;\n    scheduler = () => queueJob(job);\n  }\n  const effect = new ReactiveEffect(getter, NOOP, scheduler);\n  const scope = getCurrentScope();\n  const unwatch = () => {\n    effect.stop();\n    if (scope) {\n      remove(scope.effects, effect);\n    }\n  };\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  if (ssrCleanup) 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 reset = setCurrentInstance(this);\n  const res = doWatch(getter, cb.bind(publicThis), options);\n  reset();\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, depth = Infinity, seen) {\n  if (depth <= 0 || !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  depth--;\n  if (isRef(value)) {\n    traverse(value.value, depth, seen);\n  } else if (isArray(value)) {\n    for (let i = 0; i < value.length; i++) {\n      traverse(value[i], depth, seen);\n    }\n  } else if (isSet(value) || isMap(value)) {\n    value.forEach((v) => {\n      traverse(v, depth, seen);\n    });\n  } else if (isPlainObject(value)) {\n    for (const key in value) {\n      traverse(value[key], depth, seen);\n    }\n    for (const key of Object.getOwnPropertySymbols(value)) {\n      if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n        traverse(value[key], depth, seen);\n      }\n    }\n  }\n  return value;\n}\n\nfunction useModel(props, name, options = EMPTY_OBJ) {\n  const i = getCurrentInstance();\n  if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n    warn$1(`useModel() called without active instance.`);\n    return ref();\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") && !i.propsOptions[0][name]) {\n    warn$1(`useModel() called with prop \"${name}\" which is not declared.`);\n    return ref();\n  }\n  const camelizedName = camelize(name);\n  const hyphenatedName = hyphenate(name);\n  const modifiers = getModelModifiers(props, name);\n  const res = customRef((track, trigger) => {\n    let localValue;\n    let prevSetValue = EMPTY_OBJ;\n    let prevEmittedValue;\n    watchSyncEffect(() => {\n      const propValue = props[name];\n      if (hasChanged(localValue, propValue)) {\n        localValue = propValue;\n        trigger();\n      }\n    });\n    return {\n      get() {\n        track();\n        return options.get ? options.get(localValue) : localValue;\n      },\n      set(value) {\n        const emittedValue = options.set ? options.set(value) : value;\n        if (!hasChanged(emittedValue, localValue) && !(prevSetValue !== EMPTY_OBJ && hasChanged(value, prevSetValue))) {\n          return;\n        }\n        const rawProps = i.vnode.props;\n        if (!(rawProps && // check if parent has passed v-model\n        (name in rawProps || camelizedName in rawProps || hyphenatedName in rawProps) && (`onUpdate:${name}` in rawProps || `onUpdate:${camelizedName}` in rawProps || `onUpdate:${hyphenatedName}` in rawProps))) {\n          localValue = value;\n          trigger();\n        }\n        i.emit(`update:${name}`, emittedValue);\n        if (hasChanged(value, emittedValue) && hasChanged(value, prevSetValue) && !hasChanged(emittedValue, prevEmittedValue)) {\n          trigger();\n        }\n        prevSetValue = value;\n        prevEmittedValue = emittedValue;\n      }\n    };\n  });\n  res[Symbol.iterator] = () => {\n    let i2 = 0;\n    return {\n      next() {\n        if (i2 < 2) {\n          return { value: i2++ ? modifiers || EMPTY_OBJ : res, done: false };\n        } else {\n          return { done: true };\n        }\n      }\n    };\n  };\n  return res;\n}\nconst getModelModifiers = (props, modelName) => {\n  return modelName === \"modelValue\" || modelName === \"model-value\" ? props.modelModifiers : props[`${modelName}Modifiers`] || props[`${camelize(modelName)}Modifiers`] || props[`${hyphenate(modelName)}Modifiers`];\n};\n\nfunction emit(instance, event, ...rawArgs) {\n  if (instance.isUnmounted) 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(camelize(event)) in propsOptions)) {\n          warn$1(\n            `Component emitted event \"${event}\" but it is neither declared in the emits option nor as an \"${toHandlerKey(camelize(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$1(\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 modifiers = isModelListener && getModelModifiers(props, event.slice(7));\n  if (modifiers) {\n    if (modifiers.trim) {\n      args = rawArgs.map((a) => isString(a) ? a.trim() : a);\n    }\n    if (modifiers.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$1(\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(\n          event\n        )}\" 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 accessedAttrs = false;\nfunction markAttrsAccessed() {\n  accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n  const {\n    type: Component,\n    vnode,\n    proxy,\n    withProxy,\n    propsOptions: [propsOptions],\n    slots,\n    attrs,\n    emit,\n    render,\n    renderCache,\n    props,\n    data,\n    setupState,\n    ctx,\n    inheritAttrs\n  } = instance;\n  const prev = setCurrentRenderingInstance(instance);\n  let result;\n  let fallthroughAttrs;\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    accessedAttrs = false;\n  }\n  try {\n    if (vnode.shapeFlag & 4) {\n      const proxyToUse = withProxy || proxy;\n      const thisProxy = !!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup ? new Proxy(proxyToUse, {\n        get(target, key, receiver) {\n          warn$1(\n            `Property '${String(\n              key\n            )}' was accessed via 'this'. Avoid using 'this' in templates.`\n          );\n          return Reflect.get(target, key, receiver);\n        }\n      }) : proxyToUse;\n      result = normalizeVNode(\n        render.call(\n          thisProxy,\n          proxyToUse,\n          renderCache,\n          !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : 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          !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n          !!(process.env.NODE_ENV !== \"production\") ? {\n            get attrs() {\n              markAttrsAccessed();\n              return shallowReadonly(attrs);\n            },\n            slots,\n            emit\n          } : { attrs, slots, emit }\n        ) : render2(\n          !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n          null\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, false, true);\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$1(\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$1(\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$1(\n        `Runtime directive used on component with non-element root node. The directives will not function as intended.`\n      );\n    }\n    root = cloneVNode(root, null, false, true);\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$1(\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, false);\n  if (!childRoot) {\n    return [vnode, void 0];\n  } else if (!!(process.env.NODE_ENV !== \"production\") && childRoot.patchFlag > 0 && childRoot.patchFlag & 2048) {\n    return getChildRoot(childRoot);\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, recurse = true) {\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          if (!!(process.env.NODE_ENV !== \"production\") && recurse && singleRoot.patchFlag > 0 && singleRoot.patchFlag & 2048) {\n            return filterSingleRoot(singleRoot.children);\n          }\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) {\n    const root = parent.subTree;\n    if (root.suspense && root.suspense.activeBranch === vnode) {\n      root.el = vnode.el;\n    }\n    if (root === vnode) {\n      (vnode = parent.vnode).el = el;\n      parent = parent.parent;\n    } else {\n      break;\n    }\n  }\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nlet suspenseId = 0;\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, namespace, slotScopeIds, optimized, rendererInternals) {\n    if (n1 == null) {\n      mountSuspense(\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized,\n        rendererInternals\n      );\n    } else {\n      if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) {\n        n2.suspense = n1.suspense;\n        n2.suspense.vnode = n2;\n        n2.el = n1.el;\n        return;\n      }\n      patchSuspense(\n        n1,\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        namespace,\n        slotScopeIds,\n        optimized,\n        rendererInternals\n      );\n    }\n  },\n  hydrate: hydrateSuspense,\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, namespace, 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    namespace,\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    namespace,\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      namespace,\n      slotScopeIds\n    );\n    setActiveBranch(suspense, vnode.ssFallback);\n  } else {\n    suspense.resolve(false, true);\n  }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, namespace, 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        namespace,\n        slotScopeIds,\n        optimized\n      );\n      if (suspense.deps <= 0) {\n        suspense.resolve();\n      } else if (isInFallback) {\n        if (!isHydrating) {\n          patch(\n            activeBranch,\n            newFallback,\n            container,\n            anchor,\n            parentComponent,\n            null,\n            // fallback tree will not have suspense context\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n          setActiveBranch(suspense, newFallback);\n        }\n      }\n    } else {\n      suspense.pendingId = suspenseId++;\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          namespace,\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            namespace,\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          namespace,\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          namespace,\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        namespace,\n        slotScopeIds,\n        optimized\n      );\n      setActiveBranch(suspense, newBranch);\n    } else {\n      triggerEvent(n2, \"onPending\");\n      suspense.pendingBranch = newBranch;\n      if (newBranch.shapeFlag & 512) {\n        suspense.pendingId = newBranch.component.suspenseId;\n      } else {\n        suspense.pendingId = suspenseId++;\n      }\n      patch(\n        null,\n        newBranch,\n        suspense.hiddenContainer,\n        null,\n        parentComponent,\n        suspense,\n        namespace,\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, namespace, 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 && 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 initialAnchor = anchor;\n  const suspense = {\n    vnode,\n    parent: parentSuspense,\n    parentComponent,\n    namespace,\n    container,\n    hiddenContainer,\n    deps: 0,\n    pendingId: suspenseId++,\n    timeout: typeof timeout === \"number\" ? timeout : -1,\n    activeBranch: null,\n    pendingBranch: null,\n    isInFallback: !isHydrating,\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      let delayEnter = false;\n      if (suspense.isHydrating) {\n        suspense.isHydrating = false;\n      } else if (!resume) {\n        delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === \"out-in\";\n        if (delayEnter) {\n          activeBranch.transition.afterLeave = () => {\n            if (pendingId === suspense.pendingId) {\n              move(\n                pendingBranch,\n                container2,\n                anchor === initialAnchor ? next(activeBranch) : anchor,\n                0\n              );\n              queuePostFlushCb(effects);\n            }\n          };\n        }\n        if (activeBranch) {\n          if (parentNode(activeBranch.el) !== suspense.hiddenContainer) {\n            anchor = next(activeBranch);\n          }\n          unmount(activeBranch, parentComponent2, suspense, true);\n        }\n        if (!delayEnter) {\n          move(pendingBranch, container2, anchor, 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 && !delayEnter) {\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, namespace: namespace2 } = 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          namespace2,\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, optimized2) {\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          namespace,\n          optimized2\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, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n  const suspense = vnode.suspense = createSuspenseBoundary(\n    vnode,\n    parentSuspense,\n    parentComponent,\n    node.parentNode,\n    // eslint-disable-next-line no-restricted-globals\n    document.createElement(\"div\"),\n    null,\n    namespace,\n    slotScopeIds,\n    optimized,\n    rendererInternals,\n    true\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 && s.filter((child) => child !== NULL_DYNAMIC_COMPONENT).length > 0) {\n      warn$1(`<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  let el = branch.el;\n  while (!el && branch.component) {\n    branch = branch.component.subTree;\n    el = branch.el;\n  }\n  vnode.el = el;\n  if (parentComponent && parentComponent.subTree === vnode) {\n    parentComponent.vnode.el = el;\n    updateHOCHostEl(parentComponent, el);\n  }\n}\nfunction isVNodeSuspensible(vnode) {\n  const suspensible = vnode.props && vnode.props.suspensible;\n  return suspensible != null && suspensible !== false;\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  if (value < 0 && currentBlock) {\n    currentBlock.hasOnce = true;\n  }\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    )\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    )\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 && n1.component) {\n    const dirtyInstances = hmrDirtyComponents.get(n2.type);\n    if (dirtyInstances && dirtyInstances.has(n1.component)) {\n      n1.shapeFlag &= ~256;\n      n2.shapeFlag &= ~512;\n      return false;\n    }\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 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    targetStart: 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$1(`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$1(`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$1(\n      `Vue received a Component that 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) return null;\n  return isProxy(props) || isInternalObject(props) ? extend({}, props) : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false) {\n  const { props, ref, patchFlag, children, transition } = 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    targetStart: vnode.targetStart,\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,\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  if (transition && cloneTransition) {\n    setTransitionHooks(\n      cloned,\n      transition.clone(cloned)\n    );\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 && !isInternalObject(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    // 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 setInSSRSetupState;\n{\n  const g = getGlobalThis();\n  const registerGlobalSetter = (key, setter) => {\n    let setters;\n    if (!(setters = g[key])) setters = g[key] = [];\n    setters.push(setter);\n    return (v) => {\n      if (setters.length > 1) setters.forEach((set) => set(v));\n      else setters[0](v);\n    };\n  };\n  internalSetCurrentInstance = registerGlobalSetter(\n    `__VUE_INSTANCE_SETTERS__`,\n    (v) => currentInstance = v\n  );\n  setInSSRSetupState = registerGlobalSetter(\n    `__VUE_SSR_SETTERS__`,\n    (v) => isInSSRComponentSetup = v\n  );\n}\nconst setCurrentInstance = (instance) => {\n  const prev = currentInstance;\n  internalSetCurrentInstance(instance);\n  instance.scope.on();\n  return () => {\n    instance.scope.off();\n    internalSetCurrentInstance(prev);\n  };\n};\nconst unsetCurrentInstance = () => {\n  currentInstance && currentInstance.scope.off();\n  internalSetCurrentInstance(null);\n};\nconst isBuiltInTag = /* @__PURE__ */ makeMap(\"slot,component\");\nfunction validateComponentName(name, { isNativeTag }) {\n  if (isBuiltInTag(name) || isNativeTag(name)) {\n    warn$1(\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, optimized = false) {\n  isSSR && setInSSRSetupState(isSSR);\n  const { props, children } = instance.vnode;\n  const isStateful = isStatefulComponent(instance);\n  initProps(instance, props, isStateful, isSSR);\n  initSlots(instance, children, optimized);\n  const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;\n  isSSR && setInSSRSetupState(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$1(\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 = 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    const reset = setCurrentInstance(instance);\n    pauseTracking();\n    const setupResult = callWithErrorHandling(\n      setup,\n      instance,\n      0,\n      [\n        !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(instance.props) : instance.props,\n        setupContext\n      ]\n    );\n    resetTracking();\n    reset();\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$1(\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$1(\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$1(\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    const reset = setCurrentInstance(instance);\n    pauseTracking();\n    try {\n      applyOptions(instance);\n    } finally {\n      resetTracking();\n      reset();\n    }\n  }\n  if (!!(process.env.NODE_ENV !== \"production\") && !Component.render && instance.render === NOOP && !isSSR) {\n    if (!compile && Component.template) {\n      warn$1(\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      );\n    } else {\n      warn$1(`Component is missing template or render function: `, Component);\n    }\n  }\n}\nconst attrsProxyHandlers = !!(process.env.NODE_ENV !== \"production\") ? {\n  get(target, key) {\n    markAttrsAccessed();\n    track(target, \"get\", \"\");\n    return target[key];\n  },\n  set() {\n    warn$1(`setupContext.attrs is readonly.`);\n    return false;\n  },\n  deleteProperty() {\n    warn$1(`setupContext.attrs is readonly.`);\n    return false;\n  }\n} : {\n  get(target, key) {\n    track(target, \"get\", \"\");\n    return target[key];\n  }\n};\nfunction getSlotsProxy(instance) {\n  return 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$1(`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$1(\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    let attrsProxy;\n    let slotsProxy;\n    return Object.freeze({\n      get attrs() {\n        return attrsProxy || (attrsProxy = new Proxy(instance.attrs, attrsProxyHandlers));\n      },\n      get slots() {\n        return slotsProxy || (slotsProxy = getSlotsProxy(instance));\n      },\n      get emit() {\n        return (event, ...args) => instance.emit(event, ...args);\n      },\n      expose\n    });\n  } else {\n    return {\n      attrs: new Proxy(instance.attrs, attrsProxyHandlers),\n      slots: instance.slots,\n      emit: instance.emit,\n      expose\n    };\n  }\n}\nfunction getComponentPublicInstance(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  } else {\n    return instance.proxy;\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  const c = computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\n  if (!!(process.env.NODE_ENV !== \"production\")) {\n    const i = getCurrentInstance();\n    if (i && i.appContext.config.warnRecursiveComputed) {\n      c._warnRecursive = true;\n    }\n  }\n  return c;\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\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:#1677ff\" };\n  const stringStyle = { style: \"color:#f5222d\" };\n  const keywordStyle = { style: \"color:#eb2f96\" };\n  const formatter = {\n    __vue_custom_formatter: true,\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  ret.cacheIndex = index;\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.4.38\";\nconst warn = !!(process.env.NODE_ENV !== \"production\") ? warn$1 : NOOP;\nconst ErrorTypeStrings = ErrorTypeStrings$1 ;\nconst devtools = !!(process.env.NODE_ENV !== \"production\") || true ? devtools$1 : void 0;\nconst setDevtoolsHook = !!(process.env.NODE_ENV !== \"production\") || true ? setDevtoolsHook$1 : NOOP;\nconst _ssrUtils = {\n  createComponentInstance,\n  setupComponent,\n  renderComponentRoot,\n  setCurrentRenderingInstance,\n  isVNode: isVNode,\n  normalizeVNode,\n  getComponentPublicInstance,\n  ensureValidVNode\n};\nconst ssrUtils = _ssrUtils ;\nconst resolveFilter = null;\nconst compatUtils = null;\nconst DeprecationTypes = null;\n\nexport { BaseTransition, BaseTransitionPropsValidators, Comment, DeprecationTypes, ErrorCodes, ErrorTypeStrings, 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","/**\n* @vue/runtime-dom v3.4.38\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { h, BaseTransition, BaseTransitionPropsValidators, assertNumber, getCurrentInstance, warn, onBeforeMount, watchPostEffect, onMounted, onUnmounted, Fragment, Static, camelize, callWithAsyncErrorHandling, defineComponent, nextTick, createVNode, useTransitionState, onUpdated, toRaw, getTransitionRawChildren, setTransitionHooks, resolveTransitionHooks, isRuntimeOnly, createRenderer, createHydrationRenderer } from '@vue/runtime-core';\nexport * from '@vue/runtime-core';\nimport { extend, isObject, toNumber, isArray, isString, hyphenate, capitalize, includeBooleanAttr, isSymbol, isSpecialBooleanAttr, isFunction, NOOP, isOn, isModelListener, camelize as camelize$1, EMPTY_OBJ, looseToNumber, looseIndexOf, isSet, looseEqual, invokeArrayFns, isHTMLTag, isSVGTag, isMathMLTag } from '@vue/shared';\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\nconst mathmlNS = \"http://www.w3.org/1998/Math/MathML\";\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, namespace, is, props) => {\n    const el = namespace === \"svg\" ? doc.createElementNS(svgNS, tag) : namespace === \"mathml\" ? doc.createElementNS(mathmlNS, tag) : is ? doc.createElement(tag, { is }) : doc.createElement(tag);\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, namespace, 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)) break;\n      }\n    } else {\n      templateContainer.innerHTML = namespace === \"svg\" ? `<svg>${content}</svg>` : namespace === \"mathml\" ? `<math>${content}</math>` : content;\n      const template = templateContainer.content;\n      if (namespace === \"svg\" || namespace === \"mathml\") {\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\nconst TRANSITION = \"transition\";\nconst ANIMATION = \"animation\";\nconst vtcKey = Symbol(\"_vtc\");\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      addTransitionClass(el, leaveActiveClass);\n      forceReflow();\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[vtcKey] || (el[vtcKey] = /* @__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[vtcKey];\n  if (_vtc) {\n    _vtc.delete(cls);\n    if (!_vtc.size) {\n      el[vtcKey] = 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  if (s === \"auto\") return 0;\n  return Number(s.slice(0, -1).replace(\",\", \".\")) * 1e3;\n}\nfunction forceReflow() {\n  return document.body.offsetHeight;\n}\n\nfunction patchClass(el, value, isSVG) {\n  const transitionClasses = el[vtcKey];\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\nconst vShowOriginalDisplay = Symbol(\"_vod\");\nconst vShowHidden = Symbol(\"_vsh\");\nconst vShow = {\n  beforeMount(el, { value }, { transition }) {\n    el[vShowOriginalDisplay] = 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) 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};\nif (!!(process.env.NODE_ENV !== \"production\")) {\n  vShow.name = \"show\";\n}\nfunction setDisplay(el, value) {\n  el.style.display = value ? el[vShowOriginalDisplay] : \"none\";\n  el[vShowHidden] = !value;\n}\nfunction initVShowForSSR() {\n  vShow.getSSRProps = ({ value }) => {\n    if (!value) {\n      return { style: { display: \"none\" } };\n    }\n  };\n}\n\nconst CSS_VAR_TEXT = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"CSS_VAR_TEXT\" : \"\");\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  if (!!(process.env.NODE_ENV !== \"production\")) {\n    instance.getCssVars = () => getter(instance.proxy);\n  }\n  const setVars = () => {\n    const vars = getter(instance.proxy);\n    setVarsOnVNode(instance.subTree, vars);\n    updateTeleports(vars);\n  };\n  onBeforeMount(() => {\n    watchPostEffect(setVars);\n  });\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) break;\n      el = el.nextSibling;\n    }\n  }\n}\nfunction setVarsOnNode(el, vars) {\n  if (el.nodeType === 1) {\n    const style = el.style;\n    let cssText = \"\";\n    for (const key in vars) {\n      style.setProperty(`--${key}`, vars[key]);\n      cssText += `--${key}: ${vars[key]};`;\n    }\n    style[CSS_VAR_TEXT] = cssText;\n  }\n}\n\nconst displayRE = /(^|;)\\s*display\\s*:/;\nfunction patchStyle(el, prev, next) {\n  const style = el.style;\n  const isCssString = isString(next);\n  let hasControlledDisplay = false;\n  if (next && !isCssString) {\n    if (prev) {\n      if (!isString(prev)) {\n        for (const key in prev) {\n          if (next[key] == null) {\n            setStyle(style, key, \"\");\n          }\n        }\n      } else {\n        for (const prevStyle of prev.split(\";\")) {\n          const key = prevStyle.slice(0, prevStyle.indexOf(\":\")).trim();\n          if (next[key] == null) {\n            setStyle(style, key, \"\");\n          }\n        }\n      }\n    }\n    for (const key in next) {\n      if (key === \"display\") {\n        hasControlledDisplay = true;\n      }\n      setStyle(style, key, next[key]);\n    }\n  } else {\n    if (isCssString) {\n      if (prev !== next) {\n        const cssVarText = style[CSS_VAR_TEXT];\n        if (cssVarText) {\n          next += \";\" + cssVarText;\n        }\n        style.cssText = next;\n        hasControlledDisplay = displayRE.test(next);\n      }\n    } else if (prev) {\n      el.removeAttribute(\"style\");\n    }\n  }\n  if (vShowOriginalDisplay in el) {\n    el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : \"\";\n    if (el[vShowHidden]) {\n      style.display = \"none\";\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) 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, isBoolean = isSpecialBooleanAttr(key)) {\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    if (value == null || isBoolean && !includeBooleanAttr(value)) {\n      el.removeAttribute(key);\n    } else {\n      el.setAttribute(\n        key,\n        isBoolean ? \"\" : isSymbol(value) ? String(value) : value\n      );\n    }\n  }\n}\n\nfunction patchDOMProp(el, key, value, parentComponent) {\n  if (key === \"innerHTML\" || key === \"textContent\") {\n    if (value == null) return;\n    el[key] = 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    const oldValue = tag === \"OPTION\" ? el.getAttribute(\"value\") || \"\" : el.value;\n    const newValue = value == null ? \"\" : String(value);\n    if (oldValue !== newValue || !(\"_value\" in el)) {\n      el.value = newValue;\n    }\n    if (value == null) {\n      el.removeAttribute(key);\n    }\n    el._value = value;\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}\nconst veiKey = Symbol(\"_vei\");\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n  const invokers = el[veiKey] || (el[veiKey] = {});\n  const existingInvoker = invokers[rawName];\n  if (nextValue && existingInvoker) {\n    existingInvoker.value = !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue;\n  } else {\n    const [name, options] = parseName(rawName);\n    if (nextValue) {\n      const invoker = invokers[rawName] = createInvoker(\n        !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue,\n        instance\n      );\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 sanitizeEventValue(value, propName) {\n  if (isFunction(value) || isArray(value)) {\n    return value;\n  }\n  warn(\n    `Wrong type passed as event handler to ${propName} - did you forget @ or : in front of your prop?\nExpected function or array of functions, received type ${typeof value}.`\n  );\n  return NOOP;\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(\n      (fn) => (e2) => !e2._stopped && fn && fn(e2)\n    );\n  } else {\n    return value;\n  }\n}\n\nconst isNativeOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // lowercase letter\nkey.charCodeAt(2) > 96 && key.charCodeAt(2) < 123;\nconst patchProp = (el, key, prevValue, nextValue, namespace, parentComponent) => {\n  const isSVG = namespace === \"svg\";\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(el, key, nextValue);\n    if (!el.tagName.includes(\"-\") && (key === \"value\" || key === \"checked\" || key === \"selected\")) {\n      patchAttr(el, key, nextValue, isSVG, parentComponent, key !== \"value\");\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 && isNativeOn(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 (key === \"width\" || key === \"height\") {\n    const tag = el.tagName;\n    if (tag === \"IMG\" || tag === \"VIDEO\" || tag === \"CANVAS\" || tag === \"SOURCE\") {\n      return false;\n    }\n  }\n  if (isNativeOn(key) && isString(value)) {\n    return false;\n  }\n  return key in el;\n}\n\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineCustomElement(options, extraOptions, hydrate2) {\n  const Comp = defineComponent(options, extraOptions);\n  class VueCustomElement extends VueElement {\n    constructor(initialProps) {\n      super(Comp, initialProps, hydrate2);\n    }\n  }\n  VueCustomElement.def = Comp;\n  return VueCustomElement;\n}\n/*! #__NO_SIDE_EFFECTS__ */\nconst defineSSRCustomElement = /* @__NO_SIDE_EFFECTS__ */ (options, extraOptions) => {\n  return /* @__PURE__ */ defineCustomElement(options, extraOptions, 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    this._ob = 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        if (this._ob) {\n          this._ob.disconnect();\n          this._ob = null;\n        }\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    this._ob = new MutationObserver((mutations) => {\n      for (const m of mutations) {\n        this._setAttr(m.attributeName);\n      }\n    });\n    this._ob.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.hasAttribute(key) ? this.getAttribute(key) : void 0;\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\nconst positionMap = /* @__PURE__ */ new WeakMap();\nconst newPositionMap = /* @__PURE__ */ new WeakMap();\nconst moveCbKey = Symbol(\"_moveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\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[moveCbKey] = (e) => {\n          if (e && e.target !== el) {\n            return;\n          }\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(\"transitionend\", cb);\n            el[moveCbKey] = 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 = [];\n      if (children) {\n        for (let i = 0; i < children.length; i++) {\n          const child = children[i];\n          if (child.el && child.el instanceof Element) {\n            prevChildren.push(child);\n            setTransitionHooks(\n              child,\n              resolveTransitionHooks(\n                child,\n                cssTransitionProps,\n                state,\n                instance\n              )\n            );\n            positionMap.set(\n              child,\n              child.el.getBoundingClientRect()\n            );\n          }\n        }\n      }\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      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[moveCbKey]) {\n    el[moveCbKey]();\n  }\n  if (el[enterCbKey]) {\n    el[enterCbKey]();\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  const _vtc = el[vtcKey];\n  if (_vtc) {\n    _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 assignKey = Symbol(\"_assign\");\nconst vModelText = {\n  created(el, { modifiers: { lazy, trim, number } }, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    const castToNumber = number || vnode.props && vnode.props.type === \"number\";\n    addEventListener(el, lazy ? \"change\" : \"input\", (e) => {\n      if (e.target.composing) return;\n      let domValue = el.value;\n      if (trim) {\n        domValue = domValue.trim();\n      }\n      if (castToNumber) {\n        domValue = looseToNumber(domValue);\n      }\n      el[assignKey](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, oldValue, modifiers: { lazy, trim, number } }, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    if (el.composing) return;\n    const elValue = (number || el.type === \"number\") && !/^0\\d/.test(el.value) ? looseToNumber(el.value) : el.value;\n    const newValue = value == null ? \"\" : value;\n    if (elValue === newValue) {\n      return;\n    }\n    if (document.activeElement === el && el.type !== \"range\") {\n      if (lazy && value === oldValue) {\n        return;\n      }\n      if (trim && el.value.trim() === newValue) {\n        return;\n      }\n    }\n    el.value = newValue;\n  }\n};\nconst vModelCheckbox = {\n  // #4096 array checkboxes need to be deep traversed\n  deep: true,\n  created(el, _, vnode) {\n    el[assignKey] = 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[assignKey];\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[assignKey] = 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[assignKey] = getModelAssigner(vnode);\n    addEventListener(el, \"change\", () => {\n      el[assignKey](getValue(el));\n    });\n  },\n  beforeUpdate(el, { value, oldValue }, vnode) {\n    el[assignKey] = 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[assignKey](\n        el.multiple ? isSetModel ? new Set(selectedVal) : selectedVal : selectedVal[0]\n      );\n      el._assigning = true;\n      nextTick(() => {\n        el._assigning = false;\n      });\n    });\n    el[assignKey] = getModelAssigner(vnode);\n  },\n  // set value in mounted & updated because <select> relies on its children\n  // <option>s.\n  mounted(el, { value, modifiers: { number } }) {\n    setSelected(el, value);\n  },\n  beforeUpdate(el, _binding, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n  },\n  updated(el, { value, modifiers: { number } }) {\n    if (!el._assigning) {\n      setSelected(el, value);\n    }\n  }\n};\nfunction setSelected(el, value, number) {\n  const isMultiple = el.multiple;\n  const isArrayValue = isArray(value);\n  if (isMultiple && !isArrayValue && !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 (isArrayValue) {\n        const optionType = typeof optionValue;\n        if (optionType === \"string\" || optionType === \"number\") {\n          option.selected = value.some((v) => String(v) === String(optionValue));\n        } else {\n          option.selected = looseIndexOf(value, optionValue) > -1;\n        }\n      } else {\n        option.selected = value.has(optionValue);\n      }\n    } else if (looseEqual(getValue(option), value)) {\n      if (el.selectedIndex !== i) el.selectedIndex = i;\n      return;\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  const cache = fn._withMods || (fn._withMods = {});\n  const cacheKey = modifiers.join(\".\");\n  return cache[cacheKey] || (cache[cacheKey] = (event, ...args) => {\n    for (let i = 0; i < modifiers.length; i++) {\n      const guard = modifierGuards[modifiers[i]];\n      if (guard && guard(event, modifiers)) 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  const cache = fn._withKeys || (fn._withKeys = {});\n  const cacheKey = modifiers.join(\".\");\n  return cache[cacheKey] || (cache[cacheKey] = (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 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) 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, resolveRootNamespace(container));\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, resolveRootNamespace(container));\n    }\n  };\n  return app;\n};\nfunction resolveRootNamespace(container) {\n  if (container instanceof SVGElement) {\n    return \"svg\";\n  }\n  if (typeof MathMLElement === \"function\" && container instanceof MathMLElement) {\n    return \"mathml\";\n  }\n}\nfunction injectNativeTagCheck(app) {\n  Object.defineProperty(app.config, \"isNativeTag\", {\n    value: (tag) => isHTMLTag(tag) || isSVGTag(tag) || isMathMLTag(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","const suspectProtoRx = /\"(?:_|\\\\u0{2}5[Ff]){2}(?:p|\\\\u0{2}70)(?:r|\\\\u0{2}72)(?:o|\\\\u0{2}6[Ff])(?:t|\\\\u0{2}74)(?:o|\\\\u0{2}6[Ff])(?:_|\\\\u0{2}5[Ff]){2}\"\\s*:/;\nconst suspectConstructorRx = /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/;\nconst JsonSigRx = /^\\s*[\"[{]|^\\s*-?\\d{1,16}(\\.\\d{1,17})?([Ee][+-]?\\d+)?\\s*$/;\nfunction jsonParseTransform(key, value) {\n  if (key === \"__proto__\" || key === \"constructor\" && value && typeof value === \"object\" && \"prototype\" in value) {\n    warnKeyDropped(key);\n    return;\n  }\n  return value;\n}\nfunction warnKeyDropped(key) {\n  console.warn(`[destr] Dropping \"${key}\" key to prevent prototype pollution.`);\n}\nfunction destr(value, options = {}) {\n  if (typeof value !== \"string\") {\n    return value;\n  }\n  const _value = value.trim();\n  if (\n    // eslint-disable-next-line unicorn/prefer-at\n    value[0] === '\"' && value.endsWith('\"') && !value.includes(\"\\\\\")\n  ) {\n    return _value.slice(1, -1);\n  }\n  if (_value.length <= 9) {\n    const _lval = _value.toLowerCase();\n    if (_lval === \"true\") {\n      return true;\n    }\n    if (_lval === \"false\") {\n      return false;\n    }\n    if (_lval === \"undefined\") {\n      return void 0;\n    }\n    if (_lval === \"null\") {\n      return null;\n    }\n    if (_lval === \"nan\") {\n      return Number.NaN;\n    }\n    if (_lval === \"infinity\") {\n      return Number.POSITIVE_INFINITY;\n    }\n    if (_lval === \"-infinity\") {\n      return Number.NEGATIVE_INFINITY;\n    }\n  }\n  if (!JsonSigRx.test(value)) {\n    if (options.strict) {\n      throw new SyntaxError(\"[destr] Invalid JSON\");\n    }\n    return value;\n  }\n  try {\n    if (suspectProtoRx.test(value) || suspectConstructorRx.test(value)) {\n      if (options.strict) {\n        throw new Error(\"[destr] Possible prototype pollution\");\n      }\n      return JSON.parse(value, jsonParseTransform);\n    }\n    return JSON.parse(value);\n  } catch (error) {\n    if (options.strict) {\n      throw error;\n    }\n    return value;\n  }\n}\nfunction safeDestr(value, options = {}) {\n  return destr(value, { ...options, strict: true });\n}\n\nexport { destr as default, destr, safeDestr };\n","const n = /[^\\0-\\x7E]/;\nconst t = /[\\x2E\\u3002\\uFF0E\\uFF61]/g;\nconst o = {\n  overflow: \"Overflow Error\",\n  \"not-basic\": \"Illegal Input\",\n  \"invalid-input\": \"Invalid Input\"\n};\nconst e = Math.floor;\nconst r = String.fromCharCode;\nfunction s(n2) {\n  throw new RangeError(o[n2]);\n}\nconst c = function(n2, t2) {\n  return n2 + 22 + 75 * (n2 < 26) - ((t2 != 0) << 5);\n};\nconst u = function(n2, t2, o2) {\n  let r2 = 0;\n  for (n2 = o2 ? e(n2 / 700) : n2 >> 1, n2 += e(n2 / t2); n2 > 455; r2 += 36) {\n    n2 = e(n2 / 35);\n  }\n  return e(r2 + 36 * n2 / (n2 + 38));\n};\nfunction toASCII(o2) {\n  return function(n2, o3) {\n    const e2 = n2.split(\"@\");\n    let r2 = \"\";\n    e2.length > 1 && (r2 = e2[0] + \"@\", n2 = e2[1]);\n    const s2 = function(n3, t2) {\n      const o4 = [];\n      let e3 = n3.length;\n      for (; e3--; ) {\n        o4[e3] = t2(n3[e3]);\n      }\n      return o4;\n    }((n2 = n2.replace(t, \".\")).split(\".\"), o3).join(\".\");\n    return r2 + s2;\n  }(o2, function(t2) {\n    return n.test(t2) ? \"xn--\" + function(n2) {\n      const t3 = [];\n      const o3 = (n2 = function(n3) {\n        const t4 = [];\n        let o4 = 0;\n        const e2 = n3.length;\n        for (; o4 < e2; ) {\n          const r2 = n3.charCodeAt(o4++);\n          if (r2 >= 55296 && r2 <= 56319 && o4 < e2) {\n            const e3 = n3.charCodeAt(o4++);\n            (64512 & e3) == 56320 ? t4.push(((1023 & r2) << 10) + (1023 & e3) + 65536) : (t4.push(r2), o4--);\n          } else {\n            t4.push(r2);\n          }\n        }\n        return t4;\n      }(n2)).length;\n      let f = 128;\n      let i = 0;\n      let l = 72;\n      for (const o4 of n2) {\n        o4 < 128 && t3.push(r(o4));\n      }\n      const h = t3.length;\n      let p = h;\n      for (h && t3.push(\"-\"); p < o3; ) {\n        let o4 = 2147483647;\n        for (const t4 of n2) {\n          t4 >= f && t4 < o4 && (o4 = t4);\n        }\n        const a = p + 1;\n        o4 - f > e((2147483647 - i) / a) && s(\"overflow\"), i += (o4 - f) * a, f = o4;\n        for (const o5 of n2) {\n          if (o5 < f && ++i > 2147483647 && s(\"overflow\"), o5 == f) {\n            let n3 = i;\n            for (let o6 = 36; ; o6 += 36) {\n              const s2 = o6 <= l ? 1 : o6 >= l + 26 ? 26 : o6 - l;\n              if (n3 < s2) {\n                break;\n              }\n              const u2 = n3 - s2;\n              const f2 = 36 - s2;\n              t3.push(r(c(s2 + u2 % f2, 0))), n3 = e(u2 / f2);\n            }\n            t3.push(r(c(n3, 0))), l = u(i, a, p == h), i = 0, ++p;\n          }\n        }\n        ++i, ++f;\n      }\n      return t3.join(\"\");\n    }(t2) : t2;\n  });\n}\n\nconst HASH_RE = /#/g;\nconst AMPERSAND_RE = /&/g;\nconst SLASH_RE = /\\//g;\nconst EQUAL_RE = /=/g;\nconst IM_RE = /\\?/g;\nconst PLUS_RE = /\\+/g;\nconst ENC_CARET_RE = /%5e/gi;\nconst ENC_BACKTICK_RE = /%60/gi;\nconst ENC_CURLY_OPEN_RE = /%7b/gi;\nconst ENC_PIPE_RE = /%7c/gi;\nconst ENC_CURLY_CLOSE_RE = /%7d/gi;\nconst ENC_SPACE_RE = /%20/gi;\nconst ENC_SLASH_RE = /%2f/gi;\nconst ENC_ENC_SLASH_RE = /%252f/gi;\nfunction encode(text) {\n  return encodeURI(\"\" + text).replace(ENC_PIPE_RE, \"|\");\n}\nfunction encodeHash(text) {\n  return encode(text).replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\n}\nfunction encodeQueryValue(input) {\n  return encode(typeof input === \"string\" ? input : JSON.stringify(input)).replace(PLUS_RE, \"%2B\").replace(ENC_SPACE_RE, \"+\").replace(HASH_RE, \"%23\").replace(AMPERSAND_RE, \"%26\").replace(ENC_BACKTICK_RE, \"`\").replace(ENC_CARET_RE, \"^\").replace(SLASH_RE, \"%2F\");\n}\nfunction encodeQueryKey(text) {\n  return encodeQueryValue(text).replace(EQUAL_RE, \"%3D\");\n}\nfunction encodePath(text) {\n  return encode(text).replace(HASH_RE, \"%23\").replace(IM_RE, \"%3F\").replace(ENC_ENC_SLASH_RE, \"%2F\").replace(AMPERSAND_RE, \"%26\").replace(PLUS_RE, \"%2B\");\n}\nfunction encodeParam(text) {\n  return encodePath(text).replace(SLASH_RE, \"%2F\");\n}\nfunction decode(text = \"\") {\n  try {\n    return decodeURIComponent(\"\" + text);\n  } catch {\n    return \"\" + text;\n  }\n}\nfunction decodePath(text) {\n  return decode(text.replace(ENC_SLASH_RE, \"%252F\"));\n}\nfunction decodeQueryKey(text) {\n  return decode(text.replace(PLUS_RE, \" \"));\n}\nfunction decodeQueryValue(text) {\n  return decode(text.replace(PLUS_RE, \" \"));\n}\nfunction encodeHost(name = \"\") {\n  return toASCII(name);\n}\n\nfunction parseQuery(parametersString = \"\") {\n  const object = {};\n  if (parametersString[0] === \"?\") {\n    parametersString = parametersString.slice(1);\n  }\n  for (const parameter of parametersString.split(\"&\")) {\n    const s = parameter.match(/([^=]+)=?(.*)/) || [];\n    if (s.length < 2) {\n      continue;\n    }\n    const key = decodeQueryKey(s[1]);\n    if (key === \"__proto__\" || key === \"constructor\") {\n      continue;\n    }\n    const value = decodeQueryValue(s[2] || \"\");\n    if (object[key] === void 0) {\n      object[key] = value;\n    } else if (Array.isArray(object[key])) {\n      object[key].push(value);\n    } else {\n      object[key] = [object[key], value];\n    }\n  }\n  return object;\n}\nfunction encodeQueryItem(key, value) {\n  if (typeof value === \"number\" || typeof value === \"boolean\") {\n    value = String(value);\n  }\n  if (!value) {\n    return encodeQueryKey(key);\n  }\n  if (Array.isArray(value)) {\n    return value.map((_value) => `${encodeQueryKey(key)}=${encodeQueryValue(_value)}`).join(\"&\");\n  }\n  return `${encodeQueryKey(key)}=${encodeQueryValue(value)}`;\n}\nfunction stringifyQuery(query) {\n  return Object.keys(query).filter((k) => query[k] !== void 0).map((k) => encodeQueryItem(k, query[k])).filter(Boolean).join(\"&\");\n}\n\nconst PROTOCOL_STRICT_REGEX = /^[\\s\\w\\0+.-]{2,}:([/\\\\]{1,2})/;\nconst PROTOCOL_REGEX = /^[\\s\\w\\0+.-]{2,}:([/\\\\]{2})?/;\nconst PROTOCOL_RELATIVE_REGEX = /^([/\\\\]\\s*){2,}[^/\\\\]/;\nconst PROTOCOL_SCRIPT_RE = /^[\\s\\0]*(blob|data|javascript|vbscript):$/i;\nconst TRAILING_SLASH_RE = /\\/$|\\/\\?|\\/#/;\nconst JOIN_LEADING_SLASH_RE = /^\\.?\\//;\nfunction isRelative(inputString) {\n  return [\"./\", \"../\"].some((string_) => inputString.startsWith(string_));\n}\nfunction hasProtocol(inputString, opts = {}) {\n  if (typeof opts === \"boolean\") {\n    opts = { acceptRelative: opts };\n  }\n  if (opts.strict) {\n    return PROTOCOL_STRICT_REGEX.test(inputString);\n  }\n  return PROTOCOL_REGEX.test(inputString) || (opts.acceptRelative ? PROTOCOL_RELATIVE_REGEX.test(inputString) : false);\n}\nfunction isScriptProtocol(protocol) {\n  return !!protocol && PROTOCOL_SCRIPT_RE.test(protocol);\n}\nfunction hasTrailingSlash(input = \"\", respectQueryAndFragment) {\n  if (!respectQueryAndFragment) {\n    return input.endsWith(\"/\");\n  }\n  return TRAILING_SLASH_RE.test(input);\n}\nfunction withoutTrailingSlash(input = \"\", respectQueryAndFragment) {\n  if (!respectQueryAndFragment) {\n    return (hasTrailingSlash(input) ? input.slice(0, -1) : input) || \"/\";\n  }\n  if (!hasTrailingSlash(input, true)) {\n    return input || \"/\";\n  }\n  let path = input;\n  let fragment = \"\";\n  const fragmentIndex = input.indexOf(\"#\");\n  if (fragmentIndex >= 0) {\n    path = input.slice(0, fragmentIndex);\n    fragment = input.slice(fragmentIndex);\n  }\n  const [s0, ...s] = path.split(\"?\");\n  const cleanPath = s0.endsWith(\"/\") ? s0.slice(0, -1) : s0;\n  return (cleanPath || \"/\") + (s.length > 0 ? `?${s.join(\"?\")}` : \"\") + fragment;\n}\nfunction withTrailingSlash(input = \"\", respectQueryAndFragment) {\n  if (!respectQueryAndFragment) {\n    return input.endsWith(\"/\") ? input : input + \"/\";\n  }\n  if (hasTrailingSlash(input, true)) {\n    return input || \"/\";\n  }\n  let path = input;\n  let fragment = \"\";\n  const fragmentIndex = input.indexOf(\"#\");\n  if (fragmentIndex >= 0) {\n    path = input.slice(0, fragmentIndex);\n    fragment = input.slice(fragmentIndex);\n    if (!path) {\n      return fragment;\n    }\n  }\n  const [s0, ...s] = path.split(\"?\");\n  return s0 + \"/\" + (s.length > 0 ? `?${s.join(\"?\")}` : \"\") + fragment;\n}\nfunction hasLeadingSlash(input = \"\") {\n  return input.startsWith(\"/\");\n}\nfunction withoutLeadingSlash(input = \"\") {\n  return (hasLeadingSlash(input) ? input.slice(1) : input) || \"/\";\n}\nfunction withLeadingSlash(input = \"\") {\n  return hasLeadingSlash(input) ? input : \"/\" + input;\n}\nfunction cleanDoubleSlashes(input = \"\") {\n  return input.split(\"://\").map((string_) => string_.replace(/\\/{2,}/g, \"/\")).join(\"://\");\n}\nfunction withBase(input, base) {\n  if (isEmptyURL(base) || hasProtocol(input)) {\n    return input;\n  }\n  const _base = withoutTrailingSlash(base);\n  if (input.startsWith(_base)) {\n    return input;\n  }\n  return joinURL(_base, input);\n}\nfunction withoutBase(input, base) {\n  if (isEmptyURL(base)) {\n    return input;\n  }\n  const _base = withoutTrailingSlash(base);\n  if (!input.startsWith(_base)) {\n    return input;\n  }\n  const trimmed = input.slice(_base.length);\n  return trimmed[0] === \"/\" ? trimmed : \"/\" + trimmed;\n}\nfunction withQuery(input, query) {\n  const parsed = parseURL(input);\n  const mergedQuery = { ...parseQuery(parsed.search), ...query };\n  parsed.search = stringifyQuery(mergedQuery);\n  return stringifyParsedURL(parsed);\n}\nfunction getQuery(input) {\n  return parseQuery(parseURL(input).search);\n}\nfunction isEmptyURL(url) {\n  return !url || url === \"/\";\n}\nfunction isNonEmptyURL(url) {\n  return url && url !== \"/\";\n}\nfunction joinURL(base, ...input) {\n  let url = base || \"\";\n  for (const segment of input.filter((url2) => isNonEmptyURL(url2))) {\n    if (url) {\n      const _segment = segment.replace(JOIN_LEADING_SLASH_RE, \"\");\n      url = withTrailingSlash(url) + _segment;\n    } else {\n      url = segment;\n    }\n  }\n  return url;\n}\nfunction joinRelativeURL(..._input) {\n  const JOIN_SEGMENT_SPLIT_RE = /\\/(?!\\/)/;\n  const input = _input.filter(Boolean);\n  const segments = [];\n  let segmentsDepth = 0;\n  for (const i of input) {\n    if (!i || i === \"/\") {\n      continue;\n    }\n    for (const [sindex, s] of i.split(JOIN_SEGMENT_SPLIT_RE).entries()) {\n      if (!s || s === \".\") {\n        continue;\n      }\n      if (s === \"..\") {\n        if (segments.length === 1 && hasProtocol(segments[0])) {\n          continue;\n        }\n        segments.pop();\n        segmentsDepth--;\n        continue;\n      }\n      if (sindex === 1 && segments[segments.length - 1]?.endsWith(\":/\")) {\n        segments[segments.length - 1] += \"/\" + s;\n        continue;\n      }\n      segments.push(s);\n      segmentsDepth++;\n    }\n  }\n  let url = segments.join(\"/\");\n  if (segmentsDepth >= 0) {\n    if (input[0]?.startsWith(\"/\") && !url.startsWith(\"/\")) {\n      url = \"/\" + url;\n    } else if (input[0]?.startsWith(\"./\") && !url.startsWith(\"./\")) {\n      url = \"./\" + url;\n    }\n  } else {\n    url = \"../\".repeat(-1 * segmentsDepth) + url;\n  }\n  if (input[input.length - 1]?.endsWith(\"/\") && !url.endsWith(\"/\")) {\n    url += \"/\";\n  }\n  return url;\n}\nfunction withHttp(input) {\n  return withProtocol(input, \"http://\");\n}\nfunction withHttps(input) {\n  return withProtocol(input, \"https://\");\n}\nfunction withoutProtocol(input) {\n  return withProtocol(input, \"\");\n}\nfunction withProtocol(input, protocol) {\n  let match = input.match(PROTOCOL_REGEX);\n  if (!match) {\n    match = input.match(/^\\/{2,}/);\n  }\n  if (!match) {\n    return protocol + input;\n  }\n  return protocol + input.slice(match[0].length);\n}\nfunction normalizeURL(input) {\n  const parsed = parseURL(input);\n  parsed.pathname = encodePath(decodePath(parsed.pathname));\n  parsed.hash = encodeHash(decode(parsed.hash));\n  parsed.host = encodeHost(decode(parsed.host));\n  parsed.search = stringifyQuery(parseQuery(parsed.search));\n  return stringifyParsedURL(parsed);\n}\nfunction resolveURL(base = \"\", ...inputs) {\n  if (typeof base !== \"string\") {\n    throw new TypeError(\n      `URL input should be string received ${typeof base} (${base})`\n    );\n  }\n  const filteredInputs = inputs.filter((input) => isNonEmptyURL(input));\n  if (filteredInputs.length === 0) {\n    return base;\n  }\n  const url = parseURL(base);\n  for (const inputSegment of filteredInputs) {\n    const urlSegment = parseURL(inputSegment);\n    if (urlSegment.pathname) {\n      url.pathname = withTrailingSlash(url.pathname) + withoutLeadingSlash(urlSegment.pathname);\n    }\n    if (urlSegment.hash && urlSegment.hash !== \"#\") {\n      url.hash = urlSegment.hash;\n    }\n    if (urlSegment.search && urlSegment.search !== \"?\") {\n      if (url.search && url.search !== \"?\") {\n        const queryString = stringifyQuery({\n          ...parseQuery(url.search),\n          ...parseQuery(urlSegment.search)\n        });\n        url.search = queryString.length > 0 ? \"?\" + queryString : \"\";\n      } else {\n        url.search = urlSegment.search;\n      }\n    }\n  }\n  return stringifyParsedURL(url);\n}\nfunction isSamePath(p1, p2) {\n  return decode(withoutTrailingSlash(p1)) === decode(withoutTrailingSlash(p2));\n}\nfunction isEqual(a, b, options = {}) {\n  if (!options.trailingSlash) {\n    a = withTrailingSlash(a);\n    b = withTrailingSlash(b);\n  }\n  if (!options.leadingSlash) {\n    a = withLeadingSlash(a);\n    b = withLeadingSlash(b);\n  }\n  if (!options.encoding) {\n    a = decode(a);\n    b = decode(b);\n  }\n  return a === b;\n}\nfunction withFragment(input, hash) {\n  if (!hash || hash === \"#\") {\n    return input;\n  }\n  const parsed = parseURL(input);\n  parsed.hash = hash === \"\" ? \"\" : \"#\" + encodeHash(hash);\n  return stringifyParsedURL(parsed);\n}\nfunction withoutFragment(input) {\n  return stringifyParsedURL({ ...parseURL(input), hash: \"\" });\n}\nfunction withoutHost(input) {\n  const parsed = parseURL(input);\n  return (parsed.pathname || \"/\") + parsed.search + parsed.hash;\n}\n\nconst protocolRelative = Symbol.for(\"ufo:protocolRelative\");\nfunction parseURL(input = \"\", defaultProto) {\n  const _specialProtoMatch = input.match(\n    /^[\\s\\0]*(blob:|data:|javascript:|vbscript:)(.*)/i\n  );\n  if (_specialProtoMatch) {\n    const [, _proto, _pathname = \"\"] = _specialProtoMatch;\n    return {\n      protocol: _proto.toLowerCase(),\n      pathname: _pathname,\n      href: _proto + _pathname,\n      auth: \"\",\n      host: \"\",\n      search: \"\",\n      hash: \"\"\n    };\n  }\n  if (!hasProtocol(input, { acceptRelative: true })) {\n    return defaultProto ? parseURL(defaultProto + input) : parsePath(input);\n  }\n  const [, protocol = \"\", auth, hostAndPath = \"\"] = input.replace(/\\\\/g, \"/\").match(/^[\\s\\0]*([\\w+.-]{2,}:)?\\/\\/([^/@]+@)?(.*)/) || [];\n  let [, host = \"\", path = \"\"] = hostAndPath.match(/([^#/?]*)(.*)?/) || [];\n  if (protocol === \"file:\") {\n    path = path.replace(/\\/(?=[A-Za-z]:)/, \"\");\n  }\n  const { pathname, search, hash } = parsePath(path);\n  return {\n    protocol: protocol.toLowerCase(),\n    auth: auth ? auth.slice(0, Math.max(0, auth.length - 1)) : \"\",\n    host,\n    pathname,\n    search,\n    hash,\n    [protocolRelative]: !protocol\n  };\n}\nfunction parsePath(input = \"\") {\n  const [pathname = \"\", search = \"\", hash = \"\"] = (input.match(/([^#?]*)(\\?[^#]*)?(#.*)?/) || []).splice(1);\n  return {\n    pathname,\n    search,\n    hash\n  };\n}\nfunction parseAuth(input = \"\") {\n  const [username, password] = input.split(\":\");\n  return {\n    username: decode(username),\n    password: decode(password)\n  };\n}\nfunction parseHost(input = \"\") {\n  const [hostname, port] = (input.match(/([^/:]*):?(\\d+)?/) || []).splice(1);\n  return {\n    hostname: decode(hostname),\n    port\n  };\n}\nfunction stringifyParsedURL(parsed) {\n  const pathname = parsed.pathname || \"\";\n  const search = parsed.search ? (parsed.search.startsWith(\"?\") ? \"\" : \"?\") + parsed.search : \"\";\n  const hash = parsed.hash || \"\";\n  const auth = parsed.auth ? parsed.auth + \"@\" : \"\";\n  const host = parsed.host || \"\";\n  const proto = parsed.protocol || parsed[protocolRelative] ? (parsed.protocol || \"\") + \"//\" : \"\";\n  return proto + auth + host + pathname + search + hash;\n}\nconst FILENAME_STRICT_REGEX = /\\/([^/]+\\.[^/]+)$/;\nconst FILENAME_REGEX = /\\/([^/]+)$/;\nfunction parseFilename(input = \"\", { strict }) {\n  const { pathname } = parseURL(input);\n  const matches = strict ? pathname.match(FILENAME_STRICT_REGEX) : pathname.match(FILENAME_REGEX);\n  return matches ? matches[1] : void 0;\n}\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass $URL {\n  constructor(input = \"\") {\n    __publicField(this, \"protocol\");\n    __publicField(this, \"host\");\n    __publicField(this, \"auth\");\n    __publicField(this, \"pathname\");\n    __publicField(this, \"query\", {});\n    __publicField(this, \"hash\");\n    if (typeof input !== \"string\") {\n      throw new TypeError(\n        `URL input should be string received ${typeof input} (${input})`\n      );\n    }\n    const parsed = parseURL(input);\n    this.protocol = decode(parsed.protocol);\n    this.host = decode(parsed.host);\n    this.auth = decode(parsed.auth);\n    this.pathname = decodePath(parsed.pathname);\n    this.query = parseQuery(parsed.search);\n    this.hash = decode(parsed.hash);\n  }\n  get hostname() {\n    return parseHost(this.host).hostname;\n  }\n  get port() {\n    return parseHost(this.host).port || \"\";\n  }\n  get username() {\n    return parseAuth(this.auth).username;\n  }\n  get password() {\n    return parseAuth(this.auth).password || \"\";\n  }\n  get hasProtocol() {\n    return this.protocol.length;\n  }\n  get isAbsolute() {\n    return this.hasProtocol || this.pathname[0] === \"/\";\n  }\n  get search() {\n    const q = stringifyQuery(this.query);\n    return q.length > 0 ? \"?\" + q : \"\";\n  }\n  get searchParams() {\n    const p = new URLSearchParams();\n    for (const name in this.query) {\n      const value = this.query[name];\n      if (Array.isArray(value)) {\n        for (const v of value) {\n          p.append(name, v);\n        }\n      } else {\n        p.append(\n          name,\n          typeof value === \"string\" ? value : JSON.stringify(value)\n        );\n      }\n    }\n    return p;\n  }\n  get origin() {\n    return (this.protocol ? this.protocol + \"//\" : \"\") + encodeHost(this.host);\n  }\n  get fullpath() {\n    return encodePath(this.pathname) + this.search + encodeHash(this.hash);\n  }\n  get encodedAuth() {\n    if (!this.auth) {\n      return \"\";\n    }\n    const { username, password } = parseAuth(this.auth);\n    return encodeURIComponent(username) + (password ? \":\" + encodeURIComponent(password) : \"\");\n  }\n  get href() {\n    const auth = this.encodedAuth;\n    const originWithAuth = (this.protocol ? this.protocol + \"//\" : \"\") + (auth ? auth + \"@\" : \"\") + encodeHost(this.host);\n    return this.hasProtocol && this.isAbsolute ? originWithAuth + this.fullpath : this.fullpath;\n  }\n  append(url) {\n    if (url.hasProtocol) {\n      throw new Error(\"Cannot append a URL with protocol\");\n    }\n    Object.assign(this.query, url.query);\n    if (url.pathname) {\n      this.pathname = withTrailingSlash(this.pathname) + withoutLeadingSlash(url.pathname);\n    }\n    if (url.hash) {\n      this.hash = url.hash;\n    }\n  }\n  toJSON() {\n    return this.href;\n  }\n  toString() {\n    return this.href;\n  }\n}\nfunction createURL(input) {\n  return new $URL(input);\n}\n\nexport { $URL, cleanDoubleSlashes, createURL, decode, decodePath, decodeQueryKey, decodeQueryValue, encode, encodeHash, encodeHost, encodeParam, encodePath, encodeQueryItem, encodeQueryKey, encodeQueryValue, getQuery, hasLeadingSlash, hasProtocol, hasTrailingSlash, isEmptyURL, isEqual, isNonEmptyURL, isRelative, isSamePath, isScriptProtocol, joinRelativeURL, joinURL, normalizeURL, parseAuth, parseFilename, parseHost, parsePath, parseQuery, parseURL, resolveURL, stringifyParsedURL, stringifyQuery, withBase, withFragment, withHttp, withHttps, withLeadingSlash, withProtocol, withQuery, withTrailingSlash, withoutBase, withoutFragment, withoutHost, withoutLeadingSlash, withoutProtocol, withoutTrailingSlash };\n","import destr from 'destr';\nimport { withBase, withQuery } from 'ufo';\n\nclass FetchError extends Error {\n  constructor(message, opts) {\n    super(message, opts);\n    this.name = \"FetchError\";\n    if (opts?.cause && !this.cause) {\n      this.cause = opts.cause;\n    }\n  }\n}\nfunction createFetchError(ctx) {\n  const errorMessage = ctx.error?.message || ctx.error?.toString() || \"\";\n  const method = ctx.request?.method || ctx.options?.method || \"GET\";\n  const url = ctx.request?.url || String(ctx.request) || \"/\";\n  const requestStr = `[${method}] ${JSON.stringify(url)}`;\n  const statusStr = ctx.response ? `${ctx.response.status} ${ctx.response.statusText}` : \"<no response>\";\n  const message = `${requestStr}: ${statusStr}${errorMessage ? ` ${errorMessage}` : \"\"}`;\n  const fetchError = new FetchError(\n    message,\n    ctx.error ? { cause: ctx.error } : void 0\n  );\n  for (const key of [\"request\", \"options\", \"response\"]) {\n    Object.defineProperty(fetchError, key, {\n      get() {\n        return ctx[key];\n      }\n    });\n  }\n  for (const [key, refKey] of [\n    [\"data\", \"_data\"],\n    [\"status\", \"status\"],\n    [\"statusCode\", \"status\"],\n    [\"statusText\", \"statusText\"],\n    [\"statusMessage\", \"statusText\"]\n  ]) {\n    Object.defineProperty(fetchError, key, {\n      get() {\n        return ctx.response && ctx.response[refKey];\n      }\n    });\n  }\n  return fetchError;\n}\n\nconst payloadMethods = new Set(\n  Object.freeze([\"PATCH\", \"POST\", \"PUT\", \"DELETE\"])\n);\nfunction isPayloadMethod(method = \"GET\") {\n  return payloadMethods.has(method.toUpperCase());\n}\nfunction isJSONSerializable(value) {\n  if (value === void 0) {\n    return false;\n  }\n  const t = typeof value;\n  if (t === \"string\" || t === \"number\" || t === \"boolean\" || t === null) {\n    return true;\n  }\n  if (t !== \"object\") {\n    return false;\n  }\n  if (Array.isArray(value)) {\n    return true;\n  }\n  if (value.buffer) {\n    return false;\n  }\n  return value.constructor && value.constructor.name === \"Object\" || typeof value.toJSON === \"function\";\n}\nconst textTypes = /* @__PURE__ */ new Set([\n  \"image/svg\",\n  \"application/xml\",\n  \"application/xhtml\",\n  \"application/html\"\n]);\nconst JSON_RE = /^application\\/(?:[\\w!#$%&*.^`~-]*\\+)?json(;.+)?$/i;\nfunction detectResponseType(_contentType = \"\") {\n  if (!_contentType) {\n    return \"json\";\n  }\n  const contentType = _contentType.split(\";\").shift() || \"\";\n  if (JSON_RE.test(contentType)) {\n    return \"json\";\n  }\n  if (textTypes.has(contentType) || contentType.startsWith(\"text/\")) {\n    return \"text\";\n  }\n  return \"blob\";\n}\nfunction resolveFetchOptions(request, input, defaults, Headers) {\n  const headers = mergeHeaders(\n    input?.headers ?? request?.headers,\n    defaults?.headers,\n    Headers\n  );\n  let query;\n  if (defaults?.query || defaults?.params || input?.params || input?.query) {\n    query = {\n      ...defaults?.params,\n      ...defaults?.query,\n      ...input?.params,\n      ...input?.query\n    };\n  }\n  return {\n    ...defaults,\n    ...input,\n    query,\n    params: query,\n    headers\n  };\n}\nfunction mergeHeaders(input, defaults, Headers) {\n  if (!defaults) {\n    return new Headers(input);\n  }\n  const headers = new Headers(defaults);\n  if (input) {\n    for (const [key, value] of Symbol.iterator in input || Array.isArray(input) ? input : new Headers(input)) {\n      headers.set(key, value);\n    }\n  }\n  return headers;\n}\nasync function callHooks(context, hooks) {\n  if (hooks) {\n    if (Array.isArray(hooks)) {\n      for (const hook of hooks) {\n        await hook(context);\n      }\n    } else {\n      await hooks(context);\n    }\n  }\n}\n\nconst retryStatusCodes = /* @__PURE__ */ new Set([\n  408,\n  // Request Timeout\n  409,\n  // Conflict\n  425,\n  // Too Early (Experimental)\n  429,\n  // Too Many Requests\n  500,\n  // Internal Server Error\n  502,\n  // Bad Gateway\n  503,\n  // Service Unavailable\n  504\n  // Gateway Timeout\n]);\nconst nullBodyResponses = /* @__PURE__ */ new Set([101, 204, 205, 304]);\nfunction createFetch(globalOptions = {}) {\n  const {\n    fetch = globalThis.fetch,\n    Headers = globalThis.Headers,\n    AbortController = globalThis.AbortController\n  } = globalOptions;\n  async function onError(context) {\n    const isAbort = context.error && context.error.name === \"AbortError\" && !context.options.timeout || false;\n    if (context.options.retry !== false && !isAbort) {\n      let retries;\n      if (typeof context.options.retry === \"number\") {\n        retries = context.options.retry;\n      } else {\n        retries = isPayloadMethod(context.options.method) ? 0 : 1;\n      }\n      const responseCode = context.response && context.response.status || 500;\n      if (retries > 0 && (Array.isArray(context.options.retryStatusCodes) ? context.options.retryStatusCodes.includes(responseCode) : retryStatusCodes.has(responseCode))) {\n        const retryDelay = typeof context.options.retryDelay === \"function\" ? context.options.retryDelay(context) : context.options.retryDelay || 0;\n        if (retryDelay > 0) {\n          await new Promise((resolve) => setTimeout(resolve, retryDelay));\n        }\n        return $fetchRaw(context.request, {\n          ...context.options,\n          retry: retries - 1\n        });\n      }\n    }\n    const error = createFetchError(context);\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(error, $fetchRaw);\n    }\n    throw error;\n  }\n  const $fetchRaw = async function $fetchRaw2(_request, _options = {}) {\n    const context = {\n      request: _request,\n      options: resolveFetchOptions(\n        _request,\n        _options,\n        globalOptions.defaults,\n        Headers\n      ),\n      response: void 0,\n      error: void 0\n    };\n    if (context.options.method) {\n      context.options.method = context.options.method.toUpperCase();\n    }\n    if (context.options.onRequest) {\n      await callHooks(context, context.options.onRequest);\n    }\n    if (typeof context.request === \"string\") {\n      if (context.options.baseURL) {\n        context.request = withBase(context.request, context.options.baseURL);\n      }\n      if (context.options.query) {\n        context.request = withQuery(context.request, context.options.query);\n        delete context.options.query;\n      }\n      if (\"query\" in context.options) {\n        delete context.options.query;\n      }\n      if (\"params\" in context.options) {\n        delete context.options.params;\n      }\n    }\n    if (context.options.body && isPayloadMethod(context.options.method)) {\n      if (isJSONSerializable(context.options.body)) {\n        context.options.body = typeof context.options.body === \"string\" ? context.options.body : JSON.stringify(context.options.body);\n        context.options.headers = new Headers(context.options.headers || {});\n        if (!context.options.headers.has(\"content-type\")) {\n          context.options.headers.set(\"content-type\", \"application/json\");\n        }\n        if (!context.options.headers.has(\"accept\")) {\n          context.options.headers.set(\"accept\", \"application/json\");\n        }\n      } else if (\n        // ReadableStream Body\n        \"pipeTo\" in context.options.body && typeof context.options.body.pipeTo === \"function\" || // Node.js Stream Body\n        typeof context.options.body.pipe === \"function\"\n      ) {\n        if (!(\"duplex\" in context.options)) {\n          context.options.duplex = \"half\";\n        }\n      }\n    }\n    let abortTimeout;\n    if (!context.options.signal && context.options.timeout) {\n      const controller = new AbortController();\n      abortTimeout = setTimeout(() => {\n        const error = new Error(\n          \"[TimeoutError]: The operation was aborted due to timeout\"\n        );\n        error.name = \"TimeoutError\";\n        error.code = 23;\n        controller.abort(error);\n      }, context.options.timeout);\n      context.options.signal = controller.signal;\n    }\n    try {\n      context.response = await fetch(\n        context.request,\n        context.options\n      );\n    } catch (error) {\n      context.error = error;\n      if (context.options.onRequestError) {\n        await callHooks(\n          context,\n          context.options.onRequestError\n        );\n      }\n      return await onError(context);\n    } finally {\n      if (abortTimeout) {\n        clearTimeout(abortTimeout);\n      }\n    }\n    const hasBody = (context.response.body || // https://github.com/unjs/ofetch/issues/324\n    // https://github.com/unjs/ofetch/issues/294\n    // https://github.com/JakeChampion/fetch/issues/1454\n    context.response._bodyInit) && !nullBodyResponses.has(context.response.status) && context.options.method !== \"HEAD\";\n    if (hasBody) {\n      const responseType = (context.options.parseResponse ? \"json\" : context.options.responseType) || detectResponseType(context.response.headers.get(\"content-type\") || \"\");\n      switch (responseType) {\n        case \"json\": {\n          const data = await context.response.text();\n          const parseFunction = context.options.parseResponse || destr;\n          context.response._data = parseFunction(data);\n          break;\n        }\n        case \"stream\": {\n          context.response._data = context.response.body || context.response._bodyInit;\n          break;\n        }\n        default: {\n          context.response._data = await context.response[responseType]();\n        }\n      }\n    }\n    if (context.options.onResponse) {\n      await callHooks(\n        context,\n        context.options.onResponse\n      );\n    }\n    if (!context.options.ignoreResponseError && context.response.status >= 400 && context.response.status < 600) {\n      if (context.options.onResponseError) {\n        await callHooks(\n          context,\n          context.options.onResponseError\n        );\n      }\n      return await onError(context);\n    }\n    return context.response;\n  };\n  const $fetch = async function $fetch2(request, options) {\n    const r = await $fetchRaw(request, options);\n    return r._data;\n  };\n  $fetch.raw = $fetchRaw;\n  $fetch.native = (...args) => fetch(...args);\n  $fetch.create = (defaultOptions = {}, customGlobalOptions = {}) => createFetch({\n    ...globalOptions,\n    ...customGlobalOptions,\n    defaults: {\n      ...globalOptions.defaults,\n      ...customGlobalOptions.defaults,\n      ...defaultOptions\n    }\n  });\n  return $fetch;\n}\n\nexport { FetchError as F, createFetchError as a, createFetch as c };\n","import { c as createFetch } from './shared/ofetch.03887fc3.mjs';\nexport { F as FetchError, a as createFetchError } from './shared/ofetch.03887fc3.mjs';\nimport 'destr';\nimport 'ufo';\n\nconst _globalThis = function() {\n  if (typeof globalThis !== \"undefined\") {\n    return globalThis;\n  }\n  if (typeof self !== \"undefined\") {\n    return self;\n  }\n  if (typeof window !== \"undefined\") {\n    return window;\n  }\n  if (typeof global !== \"undefined\") {\n    return global;\n  }\n  throw new Error(\"unable to locate global object\");\n}();\nconst fetch = _globalThis.fetch ? (...args) => _globalThis.fetch(...args) : () => Promise.reject(new Error(\"[ofetch] global.fetch is not supported!\"));\nconst Headers = _globalThis.Headers;\nconst AbortController = _globalThis.AbortController;\nconst ofetch = createFetch({ fetch, Headers, AbortController });\nconst $fetch = ofetch;\n\nexport { $fetch, AbortController, Headers, createFetch, fetch, ofetch };\n","\nexport const useRuntimeConfig = () => window?.__NUXT__?.config || {}\n","import { joinRelativeURL } from 'ufo'\nimport { useRuntimeConfig } from '#internal/nitro'\nconst appConfig = useRuntimeConfig().app\nexport const baseURL = () => appConfig.baseURL\nexport const buildAssetsDir = () => appConfig.buildAssetsDir\nexport const buildAssetsURL = (...path) => joinRelativeURL(publicAssetsURL(), buildAssetsDir(), ...path)\nexport const publicAssetsURL = (...path) => {\n  const publicBase = appConfig.cdnURL || appConfig.baseURL\n  return path.length ? joinRelativeURL(publicBase, ...path) : publicBase\n}\nif (import.meta.client) {\n  globalThis.__buildAssetsURL = buildAssetsURL\n  globalThis.__publicAssetsURL = publicAssetsURL\n}","import { $fetch } from 'ofetch'\nimport { baseURL } from '#internal/nuxt/paths'\nif (!globalThis.$fetch) {\n  globalThis.$fetch = $fetch.create({\n    baseURL: baseURL()\n  })\n}","function flatHooks(configHooks, hooks = {}, parentName) {\n  for (const key in configHooks) {\n    const subHook = configHooks[key];\n    const name = parentName ? `${parentName}:${key}` : key;\n    if (typeof subHook === \"object\" && subHook !== null) {\n      flatHooks(subHook, hooks, name);\n    } else if (typeof subHook === \"function\") {\n      hooks[name] = subHook;\n    }\n  }\n  return hooks;\n}\nfunction mergeHooks(...hooks) {\n  const finalHooks = {};\n  for (const hook of hooks) {\n    const flatenHook = flatHooks(hook);\n    for (const key in flatenHook) {\n      if (finalHooks[key]) {\n        finalHooks[key].push(flatenHook[key]);\n      } else {\n        finalHooks[key] = [flatenHook[key]];\n      }\n    }\n  }\n  for (const key in finalHooks) {\n    if (finalHooks[key].length > 1) {\n      const array = finalHooks[key];\n      finalHooks[key] = (...arguments_) => serial(array, (function_) => function_(...arguments_));\n    } else {\n      finalHooks[key] = finalHooks[key][0];\n    }\n  }\n  return finalHooks;\n}\nfunction serial(tasks, function_) {\n  return tasks.reduce(\n    (promise, task) => promise.then(() => function_(task)),\n    Promise.resolve()\n  );\n}\nconst defaultTask = { run: (function_) => function_() };\nconst _createTask = () => defaultTask;\nconst createTask = typeof console.createTask !== \"undefined\" ? console.createTask : _createTask;\nfunction serialTaskCaller(hooks, args) {\n  const name = args.shift();\n  const task = createTask(name);\n  return hooks.reduce(\n    (promise, hookFunction) => promise.then(() => task.run(() => hookFunction(...args))),\n    Promise.resolve()\n  );\n}\nfunction parallelTaskCaller(hooks, args) {\n  const name = args.shift();\n  const task = createTask(name);\n  return Promise.all(hooks.map((hook) => task.run(() => hook(...args))));\n}\nfunction serialCaller(hooks, arguments_) {\n  return hooks.reduce(\n    (promise, hookFunction) => promise.then(() => hookFunction(...arguments_ || [])),\n    Promise.resolve()\n  );\n}\nfunction parallelCaller(hooks, args) {\n  return Promise.all(hooks.map((hook) => hook(...args || [])));\n}\nfunction callEachWith(callbacks, arg0) {\n  for (const callback of [...callbacks]) {\n    callback(arg0);\n  }\n}\n\nclass Hookable {\n  constructor() {\n    this._hooks = {};\n    this._before = void 0;\n    this._after = void 0;\n    this._deprecatedMessages = void 0;\n    this._deprecatedHooks = {};\n    this.hook = this.hook.bind(this);\n    this.callHook = this.callHook.bind(this);\n    this.callHookWith = this.callHookWith.bind(this);\n  }\n  hook(name, function_, options = {}) {\n    if (!name || typeof function_ !== \"function\") {\n      return () => {\n      };\n    }\n    const originalName = name;\n    let dep;\n    while (this._deprecatedHooks[name]) {\n      dep = this._deprecatedHooks[name];\n      name = dep.to;\n    }\n    if (dep && !options.allowDeprecated) {\n      let message = dep.message;\n      if (!message) {\n        message = `${originalName} hook has been deprecated` + (dep.to ? `, please use ${dep.to}` : \"\");\n      }\n      if (!this._deprecatedMessages) {\n        this._deprecatedMessages = /* @__PURE__ */ new Set();\n      }\n      if (!this._deprecatedMessages.has(message)) {\n        console.warn(message);\n        this._deprecatedMessages.add(message);\n      }\n    }\n    if (!function_.name) {\n      try {\n        Object.defineProperty(function_, \"name\", {\n          get: () => \"_\" + name.replace(/\\W+/g, \"_\") + \"_hook_cb\",\n          configurable: true\n        });\n      } catch {\n      }\n    }\n    this._hooks[name] = this._hooks[name] || [];\n    this._hooks[name].push(function_);\n    return () => {\n      if (function_) {\n        this.removeHook(name, function_);\n        function_ = void 0;\n      }\n    };\n  }\n  hookOnce(name, function_) {\n    let _unreg;\n    let _function = (...arguments_) => {\n      if (typeof _unreg === \"function\") {\n        _unreg();\n      }\n      _unreg = void 0;\n      _function = void 0;\n      return function_(...arguments_);\n    };\n    _unreg = this.hook(name, _function);\n    return _unreg;\n  }\n  removeHook(name, function_) {\n    if (this._hooks[name]) {\n      const index = this._hooks[name].indexOf(function_);\n      if (index !== -1) {\n        this._hooks[name].splice(index, 1);\n      }\n      if (this._hooks[name].length === 0) {\n        delete this._hooks[name];\n      }\n    }\n  }\n  deprecateHook(name, deprecated) {\n    this._deprecatedHooks[name] = typeof deprecated === \"string\" ? { to: deprecated } : deprecated;\n    const _hooks = this._hooks[name] || [];\n    delete this._hooks[name];\n    for (const hook of _hooks) {\n      this.hook(name, hook);\n    }\n  }\n  deprecateHooks(deprecatedHooks) {\n    Object.assign(this._deprecatedHooks, deprecatedHooks);\n    for (const name in deprecatedHooks) {\n      this.deprecateHook(name, deprecatedHooks[name]);\n    }\n  }\n  addHooks(configHooks) {\n    const hooks = flatHooks(configHooks);\n    const removeFns = Object.keys(hooks).map(\n      (key) => this.hook(key, hooks[key])\n    );\n    return () => {\n      for (const unreg of removeFns.splice(0, removeFns.length)) {\n        unreg();\n      }\n    };\n  }\n  removeHooks(configHooks) {\n    const hooks = flatHooks(configHooks);\n    for (const key in hooks) {\n      this.removeHook(key, hooks[key]);\n    }\n  }\n  removeAllHooks() {\n    for (const key in this._hooks) {\n      delete this._hooks[key];\n    }\n  }\n  callHook(name, ...arguments_) {\n    arguments_.unshift(name);\n    return this.callHookWith(serialTaskCaller, name, ...arguments_);\n  }\n  callHookParallel(name, ...arguments_) {\n    arguments_.unshift(name);\n    return this.callHookWith(parallelTaskCaller, name, ...arguments_);\n  }\n  callHookWith(caller, name, ...arguments_) {\n    const event = this._before || this._after ? { name, args: arguments_, context: {} } : void 0;\n    if (this._before) {\n      callEachWith(this._before, event);\n    }\n    const result = caller(\n      name in this._hooks ? [...this._hooks[name]] : [],\n      arguments_\n    );\n    if (result instanceof Promise) {\n      return result.finally(() => {\n        if (this._after && event) {\n          callEachWith(this._after, event);\n        }\n      });\n    }\n    if (this._after && event) {\n      callEachWith(this._after, event);\n    }\n    return result;\n  }\n  beforeEach(function_) {\n    this._before = this._before || [];\n    this._before.push(function_);\n    return () => {\n      if (this._before !== void 0) {\n        const index = this._before.indexOf(function_);\n        if (index !== -1) {\n          this._before.splice(index, 1);\n        }\n      }\n    };\n  }\n  afterEach(function_) {\n    this._after = this._after || [];\n    this._after.push(function_);\n    return () => {\n      if (this._after !== void 0) {\n        const index = this._after.indexOf(function_);\n        if (index !== -1) {\n          this._after.splice(index, 1);\n        }\n      }\n    };\n  }\n}\nfunction createHooks() {\n  return new Hookable();\n}\n\nconst isBrowser = typeof window !== \"undefined\";\nfunction createDebugger(hooks, _options = {}) {\n  const options = {\n    inspect: isBrowser,\n    group: isBrowser,\n    filter: () => true,\n    ..._options\n  };\n  const _filter = options.filter;\n  const filter = typeof _filter === \"string\" ? (name) => name.startsWith(_filter) : _filter;\n  const _tag = options.tag ? `[${options.tag}] ` : \"\";\n  const logPrefix = (event) => _tag + event.name + \"\".padEnd(event._id, \"\\0\");\n  const _idCtr = {};\n  const unsubscribeBefore = hooks.beforeEach((event) => {\n    if (filter !== void 0 && !filter(event.name)) {\n      return;\n    }\n    _idCtr[event.name] = _idCtr[event.name] || 0;\n    event._id = _idCtr[event.name]++;\n    console.time(logPrefix(event));\n  });\n  const unsubscribeAfter = hooks.afterEach((event) => {\n    if (filter !== void 0 && !filter(event.name)) {\n      return;\n    }\n    if (options.group) {\n      console.groupCollapsed(event.name);\n    }\n    if (options.inspect) {\n      console.timeLog(logPrefix(event), event.args);\n    } else {\n      console.timeEnd(logPrefix(event));\n    }\n    if (options.group) {\n      console.groupEnd();\n    }\n    _idCtr[event.name]--;\n  });\n  return {\n    /** Stop debugging and remove listeners */\n    close: () => {\n      unsubscribeBefore();\n      unsubscribeAfter();\n    }\n  };\n}\n\nexport { Hookable, createDebugger, createHooks, flatHooks, mergeHooks, parallelCaller, serial, serialCaller };\n","function createContext(opts = {}) {\n  let currentInstance;\n  let isSingleton = false;\n  const checkConflict = (instance) => {\n    if (currentInstance && currentInstance !== instance) {\n      throw new Error(\"Context conflict\");\n    }\n  };\n  let als;\n  if (opts.asyncContext) {\n    const _AsyncLocalStorage = opts.AsyncLocalStorage || globalThis.AsyncLocalStorage;\n    if (_AsyncLocalStorage) {\n      als = new _AsyncLocalStorage();\n    } else {\n      console.warn(\"[unctx] `AsyncLocalStorage` is not provided.\");\n    }\n  }\n  const _getCurrentInstance = () => {\n    if (als && currentInstance === void 0) {\n      const instance = als.getStore();\n      if (instance !== void 0) {\n        return instance;\n      }\n    }\n    return currentInstance;\n  };\n  return {\n    use: () => {\n      const _instance = _getCurrentInstance();\n      if (_instance === void 0) {\n        throw new Error(\"Context is not available\");\n      }\n      return _instance;\n    },\n    tryUse: () => {\n      return _getCurrentInstance();\n    },\n    set: (instance, replace) => {\n      if (!replace) {\n        checkConflict(instance);\n      }\n      currentInstance = instance;\n      isSingleton = true;\n    },\n    unset: () => {\n      currentInstance = void 0;\n      isSingleton = false;\n    },\n    call: (instance, callback) => {\n      checkConflict(instance);\n      currentInstance = instance;\n      try {\n        return als ? als.run(instance, callback) : callback();\n      } finally {\n        if (!isSingleton) {\n          currentInstance = void 0;\n        }\n      }\n    },\n    async callAsync(instance, callback) {\n      currentInstance = instance;\n      const onRestore = () => {\n        currentInstance = instance;\n      };\n      const onLeave = () => currentInstance === instance ? onRestore : void 0;\n      asyncHandlers.add(onLeave);\n      try {\n        const r = als ? als.run(instance, callback) : callback();\n        if (!isSingleton) {\n          currentInstance = void 0;\n        }\n        return await r;\n      } finally {\n        asyncHandlers.delete(onLeave);\n      }\n    }\n  };\n}\nfunction createNamespace(defaultOpts = {}) {\n  const contexts = {};\n  return {\n    get(key, opts = {}) {\n      if (!contexts[key]) {\n        contexts[key] = createContext({ ...defaultOpts, ...opts });\n      }\n      contexts[key];\n      return contexts[key];\n    }\n  };\n}\nconst _globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : {};\nconst globalKey = \"__unctx__\";\nconst defaultNamespace = _globalThis[globalKey] || (_globalThis[globalKey] = createNamespace());\nconst getContext = (key, opts = {}) => defaultNamespace.get(key, opts);\nconst useContext = (key, opts = {}) => getContext(key, opts).use;\nconst asyncHandlersKey = \"__unctx_async_handlers__\";\nconst asyncHandlers = _globalThis[asyncHandlersKey] || (_globalThis[asyncHandlersKey] = /* @__PURE__ */ new Set());\nfunction executeAsync(function_) {\n  const restores = [];\n  for (const leaveHandler of asyncHandlers) {\n    const restore2 = leaveHandler();\n    if (restore2) {\n      restores.push(restore2);\n    }\n  }\n  const restore = () => {\n    for (const restore2 of restores) {\n      restore2();\n    }\n  };\n  let awaitable = function_();\n  if (awaitable && typeof awaitable === \"object\" && \"catch\" in awaitable) {\n    awaitable = awaitable.catch((error) => {\n      restore();\n      throw error;\n    });\n  }\n  return [awaitable, restore];\n}\nfunction withAsyncContext(function_, transformed) {\n  if (!transformed) {\n    console.warn(\n      \"[unctx] `withAsyncContext` needs transformation for async context support in\",\n      function_,\n      \"\\n\",\n      function_.toString()\n    );\n  }\n  return function_;\n}\n\nexport { createContext, createNamespace, defaultNamespace, executeAsync, getContext, useContext, withAsyncContext };\n","export const appHead = {\"meta\":[{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"},{\"charset\":\"utf-8\"}],\"link\":[{\"rel\":\"preconnect\",\"href\":\"https://images.hhd.group\"},{\"rel\":\"stylesheet\",\"href\":\"https://images.hhd.group/fonts/font.css\"}],\"style\":[],\"script\":[{\"src\":\"https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?version=4.8.0&features=Array.prototype.at%2CArray.prototype.toSorted%2Cconsole.time\",\"type\":\"text/javascript\",\"crossorigin\":\"anonymous\"}],\"noscript\":[]}\n\nexport const appBaseURL = \"/\"\n\nexport const appBuildAssetsDir = \"/_nuxt/\"\n\nexport const appCdnURL = \"\"\n\nexport const appLayoutTransition = false\n\nexport const appPageTransition = false\n\nexport const appViewTransition = false\n\nexport const appKeepalive = false\n\nexport const appRootId = \"__nuxt\"\n\nexport const appRootTag = \"div\"\n\nexport const appRootAttrs = {\"id\":\"__nuxt\"}\n\nexport const appTeleportTag = \"div\"\n\nexport const appTeleportId = \"teleports\"\n\nexport const appTeleportAttrs = {\"id\":\"teleports\"}\n\nexport const renderJsonPayloads = true\n\nexport const componentIslands = false\n\nexport const payloadExtraction = true\n\nexport const cookieStore = true\n\nexport const appManifest = true\n\nexport const remoteComponentIslands = false\n\nexport const selectiveClient = false\n\nexport const devPagesDir = null\n\nexport const devRootDir = null\n\nexport const devLogs = false\n\nexport const nuxtLinkDefaults = {\"componentName\":\"NuxtLink\"}\n\nexport const asyncDataDefaults = {\"value\":null,\"errorValue\":null,\"deep\":true}\n\nexport const resetAsyncDataToUndefined = true\n\nexport const nuxtDefaultErrorValue = null\n\nexport const fetchDefaults = {}\n\nexport const vueAppRootContainer = '#__nuxt'\n\nexport const viewTransition = false\n\nexport const appId = \"nuxt-app\"\n\nexport const outdatedBuildInterval = 3600000","import { effectScope, getCurrentInstance, getCurrentScope, hasInjectionContext, reactive, shallowReactive } from \"vue\";\nimport { createHooks } from \"hookable\";\nimport { getContext } from \"unctx\";\nimport { appId } from \"#build/nuxt.config.mjs\";\nfunction getNuxtAppCtx(appName = appId || \"nuxt-app\") {\n  return getContext(appName, {\n    asyncContext: !!__NUXT_ASYNC_CONTEXT__ && import.meta.server\n  });\n}\nexport const NuxtPluginIndicator = \"__nuxt_plugin\";\nexport function createNuxtApp(options) {\n  let hydratingCount = 0;\n  const nuxtApp = {\n    _name: appId || \"nuxt-app\",\n    _scope: effectScope(),\n    provide: void 0,\n    globalName: \"nuxt\",\n    versions: {\n      get nuxt() {\n        return __NUXT_VERSION__;\n      },\n      get vue() {\n        return nuxtApp.vueApp.version;\n      }\n    },\n    payload: shallowReactive({\n      data: shallowReactive({}),\n      state: reactive({}),\n      once: /* @__PURE__ */ new Set(),\n      _errors: shallowReactive({})\n    }),\n    static: {\n      data: {}\n    },\n    runWithContext(fn) {\n      if (nuxtApp._scope.active && !getCurrentScope()) {\n        return nuxtApp._scope.run(() => callWithNuxt(nuxtApp, fn));\n      }\n      return callWithNuxt(nuxtApp, fn);\n    },\n    isHydrating: import.meta.client,\n    deferHydration() {\n      if (!nuxtApp.isHydrating) {\n        return () => {\n        };\n      }\n      hydratingCount++;\n      let called = false;\n      return () => {\n        if (called) {\n          return;\n        }\n        called = true;\n        hydratingCount--;\n        if (hydratingCount === 0) {\n          nuxtApp.isHydrating = false;\n          return nuxtApp.callHook(\"app:suspense:resolve\");\n        }\n      };\n    },\n    _asyncDataPromises: {},\n    _asyncData: shallowReactive({}),\n    _payloadRevivers: {},\n    ...options\n  };\n  if (import.meta.server) {\n    nuxtApp.payload.serverRendered = true;\n  }\n  if (import.meta.client && window.__NUXT__) {\n    for (const key in window.__NUXT__) {\n      switch (key) {\n        case \"data\":\n        case \"state\":\n        case \"_errors\":\n          Object.assign(nuxtApp.payload[key], window.__NUXT__[key]);\n          break;\n        default:\n          nuxtApp.payload[key] = window.__NUXT__[key];\n      }\n    }\n  }\n  nuxtApp.hooks = createHooks();\n  nuxtApp.hook = nuxtApp.hooks.hook;\n  if (import.meta.server) {\n    const contextCaller = async function(hooks, args) {\n      for (const hook of hooks) {\n        await nuxtApp.runWithContext(() => hook(...args));\n      }\n    };\n    nuxtApp.hooks.callHook = (name, ...args) => nuxtApp.hooks.callHookWith(contextCaller, name, ...args);\n  }\n  nuxtApp.callHook = nuxtApp.hooks.callHook;\n  nuxtApp.provide = (name, value) => {\n    const $name = \"$\" + name;\n    defineGetter(nuxtApp, $name, value);\n    defineGetter(nuxtApp.vueApp.config.globalProperties, $name, value);\n  };\n  defineGetter(nuxtApp.vueApp, \"$nuxt\", nuxtApp);\n  defineGetter(nuxtApp.vueApp.config.globalProperties, \"$nuxt\", nuxtApp);\n  if (import.meta.server) {\n    if (nuxtApp.ssrContext) {\n      nuxtApp.ssrContext.nuxt = nuxtApp;\n      nuxtApp.ssrContext._payloadReducers = {};\n      nuxtApp.payload.path = nuxtApp.ssrContext.url;\n    }\n    nuxtApp.ssrContext = nuxtApp.ssrContext || {};\n    if (nuxtApp.ssrContext.payload) {\n      Object.assign(nuxtApp.payload, nuxtApp.ssrContext.payload);\n    }\n    nuxtApp.ssrContext.payload = nuxtApp.payload;\n    nuxtApp.ssrContext.config = {\n      public: options.ssrContext.runtimeConfig.public,\n      app: options.ssrContext.runtimeConfig.app\n    };\n  }\n  if (import.meta.client) {\n    window.addEventListener(\"nuxt.preloadError\", (event) => {\n      nuxtApp.callHook(\"app:chunkError\", { error: event.payload });\n    });\n    window.useNuxtApp = window.useNuxtApp || useNuxtApp;\n    const unreg = nuxtApp.hook(\"app:error\", (...args) => {\n      console.error(\"[nuxt] error caught during app initialization\", ...args);\n    });\n    nuxtApp.hook(\"app:mounted\", unreg);\n  }\n  const runtimeConfig = import.meta.server ? options.ssrContext.runtimeConfig : nuxtApp.payload.config;\n  nuxtApp.provide(\"config\", import.meta.client && import.meta.dev ? wrappedConfig(runtimeConfig) : runtimeConfig);\n  return nuxtApp;\n}\nexport function registerPluginHooks(nuxtApp, plugin) {\n  if (plugin.hooks) {\n    nuxtApp.hooks.addHooks(plugin.hooks);\n  }\n}\nexport async function applyPlugin(nuxtApp, plugin) {\n  if (typeof plugin === \"function\") {\n    const { provide } = await nuxtApp.runWithContext(() => plugin(nuxtApp)) || {};\n    if (provide && typeof provide === \"object\") {\n      for (const key in provide) {\n        nuxtApp.provide(key, provide[key]);\n      }\n    }\n  }\n}\nexport async function applyPlugins(nuxtApp, plugins) {\n  const resolvedPlugins = [];\n  const unresolvedPlugins = [];\n  const parallels = [];\n  const errors = [];\n  let promiseDepth = 0;\n  async function executePlugin(plugin) {\n    const unresolvedPluginsForThisPlugin = plugin.dependsOn?.filter((name) => plugins.some((p) => p._name === name) && !resolvedPlugins.includes(name)) ?? [];\n    if (unresolvedPluginsForThisPlugin.length > 0) {\n      unresolvedPlugins.push([new Set(unresolvedPluginsForThisPlugin), plugin]);\n    } else {\n      const promise = applyPlugin(nuxtApp, plugin).then(async () => {\n        if (plugin._name) {\n          resolvedPlugins.push(plugin._name);\n          await Promise.all(unresolvedPlugins.map(async ([dependsOn, unexecutedPlugin]) => {\n            if (dependsOn.has(plugin._name)) {\n              dependsOn.delete(plugin._name);\n              if (dependsOn.size === 0) {\n                promiseDepth++;\n                await executePlugin(unexecutedPlugin);\n              }\n            }\n          }));\n        }\n      });\n      if (plugin.parallel) {\n        parallels.push(promise.catch((e) => errors.push(e)));\n      } else {\n        await promise;\n      }\n    }\n  }\n  for (const plugin of plugins) {\n    if (import.meta.server && nuxtApp.ssrContext?.islandContext && plugin.env?.islands === false) {\n      continue;\n    }\n    registerPluginHooks(nuxtApp, plugin);\n  }\n  for (const plugin of plugins) {\n    if (import.meta.server && nuxtApp.ssrContext?.islandContext && plugin.env?.islands === false) {\n      continue;\n    }\n    await executePlugin(plugin);\n  }\n  await Promise.all(parallels);\n  if (promiseDepth) {\n    for (let i = 0; i < promiseDepth; i++) {\n      await Promise.all(parallels);\n    }\n  }\n  if (errors.length) {\n    throw errors[0];\n  }\n}\n// @__NO_SIDE_EFFECTS__\nexport function defineNuxtPlugin(plugin) {\n  if (typeof plugin === \"function\") {\n    return plugin;\n  }\n  const _name = plugin._name || plugin.name;\n  delete plugin.name;\n  return Object.assign(plugin.setup || (() => {\n  }), plugin, { [NuxtPluginIndicator]: true, _name });\n}\nexport const definePayloadPlugin = defineNuxtPlugin;\nexport function isNuxtPlugin(plugin) {\n  return typeof plugin === \"function\" && NuxtPluginIndicator in plugin;\n}\nexport function callWithNuxt(nuxt, setup, args) {\n  const fn = () => args ? setup(...args) : setup();\n  const nuxtAppCtx = getNuxtAppCtx(nuxt._name);\n  if (import.meta.server) {\n    return nuxt.vueApp.runWithContext(() => nuxtAppCtx.callAsync(nuxt, fn));\n  } else {\n    nuxtAppCtx.set(nuxt);\n    return nuxt.vueApp.runWithContext(fn);\n  }\n}\nexport function tryUseNuxtApp(appName) {\n  let nuxtAppInstance;\n  if (hasInjectionContext()) {\n    nuxtAppInstance = getCurrentInstance()?.appContext.app.$nuxt;\n  }\n  nuxtAppInstance = nuxtAppInstance || getNuxtAppCtx(appName).tryUse();\n  return nuxtAppInstance || null;\n}\nexport function useNuxtApp(appName) {\n  const nuxtAppInstance = tryUseNuxtApp(appName);\n  if (!nuxtAppInstance) {\n    if (import.meta.dev) {\n      throw new Error(\"[nuxt] A composable that requires access to the Nuxt instance was called outside of a plugin, Nuxt hook, Nuxt middleware, or Vue setup function. This is probably not a Nuxt bug. Find out more at `https://nuxt.com/docs/guide/concepts/auto-imports#vue-and-nuxt-composables`.\");\n    } else {\n      throw new Error(\"[nuxt] instance unavailable\");\n    }\n  }\n  return nuxtAppInstance;\n}\n// @__NO_SIDE_EFFECTS__\nexport function useRuntimeConfig(_event) {\n  return useNuxtApp().$config;\n}\nfunction defineGetter(obj, key, val) {\n  Object.defineProperty(obj, key, { get: () => val });\n}\nexport function defineAppConfig(config) {\n  return config;\n}\nconst loggedKeys = /* @__PURE__ */ new Set();\nfunction wrappedConfig(runtimeConfig) {\n  if (!import.meta.dev || import.meta.server) {\n    return runtimeConfig;\n  }\n  const keys = Object.keys(runtimeConfig).map((key) => `\\`${key}\\``);\n  const lastKey = keys.pop();\n  return new Proxy(runtimeConfig, {\n    get(target, p, receiver) {\n      if (typeof p === \"string\" && p !== \"public\" && !(p in target) && !p.startsWith(\"__v\")) {\n        if (!loggedKeys.has(p)) {\n          loggedKeys.add(p);\n          console.warn(`[nuxt] Could not access \\`${p}\\`. The only available runtime config keys on the client side are ${keys.join(\", \")} and ${lastKey}. See https://nuxt.com/docs/guide/going-further/runtime-config for more information.`);\n        }\n      }\n      return Reflect.get(target, p, receiver);\n    }\n  });\n}\n","function parse(str, options) {\n  if (typeof str !== \"string\") {\n    throw new TypeError(\"argument str must be a string\");\n  }\n  const obj = {};\n  const opt = options || {};\n  const dec = opt.decode || decode;\n  let index = 0;\n  while (index < str.length) {\n    const eqIdx = str.indexOf(\"=\", index);\n    if (eqIdx === -1) {\n      break;\n    }\n    let endIdx = str.indexOf(\";\", index);\n    if (endIdx === -1) {\n      endIdx = str.length;\n    } else if (endIdx < eqIdx) {\n      index = str.lastIndexOf(\";\", eqIdx - 1) + 1;\n      continue;\n    }\n    const key = str.slice(index, eqIdx).trim();\n    if (opt?.filter && !opt?.filter(key)) {\n      index = endIdx + 1;\n      continue;\n    }\n    if (void 0 === obj[key]) {\n      let val = str.slice(eqIdx + 1, endIdx).trim();\n      if (val.codePointAt(0) === 34) {\n        val = val.slice(1, -1);\n      }\n      obj[key] = tryDecode(val, dec);\n    }\n    index = endIdx + 1;\n  }\n  return obj;\n}\nfunction decode(str) {\n  return str.includes(\"%\") ? decodeURIComponent(str) : str;\n}\nfunction tryDecode(str, decode2) {\n  try {\n    return decode2(str);\n  } catch {\n    return str;\n  }\n}\n\nconst fieldContentRegExp = /^[\\u0009\\u0020-\\u007E\\u0080-\\u00FF]+$/;\nfunction serialize(name, value, options) {\n  const opt = options || {};\n  const enc = opt.encode || encodeURIComponent;\n  if (typeof enc !== \"function\") {\n    throw new TypeError(\"option encode is invalid\");\n  }\n  if (!fieldContentRegExp.test(name)) {\n    throw new TypeError(\"argument name is invalid\");\n  }\n  const encodedValue = enc(value);\n  if (encodedValue && !fieldContentRegExp.test(encodedValue)) {\n    throw new TypeError(\"argument val is invalid\");\n  }\n  let str = name + \"=\" + encodedValue;\n  if (void 0 !== opt.maxAge && opt.maxAge !== null) {\n    const maxAge = opt.maxAge - 0;\n    if (Number.isNaN(maxAge) || !Number.isFinite(maxAge)) {\n      throw new TypeError(\"option maxAge is invalid\");\n    }\n    str += \"; Max-Age=\" + Math.floor(maxAge);\n  }\n  if (opt.domain) {\n    if (!fieldContentRegExp.test(opt.domain)) {\n      throw new TypeError(\"option domain is invalid\");\n    }\n    str += \"; Domain=\" + opt.domain;\n  }\n  if (opt.path) {\n    if (!fieldContentRegExp.test(opt.path)) {\n      throw new TypeError(\"option path is invalid\");\n    }\n    str += \"; Path=\" + opt.path;\n  }\n  if (opt.expires) {\n    if (!isDate(opt.expires) || Number.isNaN(opt.expires.valueOf())) {\n      throw new TypeError(\"option expires is invalid\");\n    }\n    str += \"; Expires=\" + opt.expires.toUTCString();\n  }\n  if (opt.httpOnly) {\n    str += \"; HttpOnly\";\n  }\n  if (opt.secure) {\n    str += \"; Secure\";\n  }\n  if (opt.priority) {\n    const priority = typeof opt.priority === \"string\" ? opt.priority.toLowerCase() : opt.priority;\n    switch (priority) {\n      case \"low\": {\n        str += \"; Priority=Low\";\n        break;\n      }\n      case \"medium\": {\n        str += \"; Priority=Medium\";\n        break;\n      }\n      case \"high\": {\n        str += \"; Priority=High\";\n        break;\n      }\n      default: {\n        throw new TypeError(\"option priority is invalid\");\n      }\n    }\n  }\n  if (opt.sameSite) {\n    const sameSite = typeof opt.sameSite === \"string\" ? opt.sameSite.toLowerCase() : opt.sameSite;\n    switch (sameSite) {\n      case true: {\n        str += \"; SameSite=Strict\";\n        break;\n      }\n      case \"lax\": {\n        str += \"; SameSite=Lax\";\n        break;\n      }\n      case \"strict\": {\n        str += \"; SameSite=Strict\";\n        break;\n      }\n      case \"none\": {\n        str += \"; SameSite=None\";\n        break;\n      }\n      default: {\n        throw new TypeError(\"option sameSite is invalid\");\n      }\n    }\n  }\n  if (opt.partitioned) {\n    str += \"; Partitioned\";\n  }\n  return str;\n}\nfunction isDate(val) {\n  return Object.prototype.toString.call(val) === \"[object Date]\" || val instanceof Date;\n}\n\nfunction parseSetCookie(setCookieValue, options) {\n  const parts = (setCookieValue || \"\").split(\";\").filter((str) => typeof str === \"string\" && !!str.trim());\n  const nameValuePairStr = parts.shift() || \"\";\n  const parsed = _parseNameValuePair(nameValuePairStr);\n  const name = parsed.name;\n  let value = parsed.value;\n  try {\n    value = options?.decode === false ? value : (options?.decode || decodeURIComponent)(value);\n  } catch {\n  }\n  const cookie = {\n    name,\n    value\n  };\n  for (const part of parts) {\n    const sides = part.split(\"=\");\n    const partKey = (sides.shift() || \"\").trimStart().toLowerCase();\n    const partValue = sides.join(\"=\");\n    switch (partKey) {\n      case \"expires\": {\n        cookie.expires = new Date(partValue);\n        break;\n      }\n      case \"max-age\": {\n        cookie.maxAge = Number.parseInt(partValue, 10);\n        break;\n      }\n      case \"secure\": {\n        cookie.secure = true;\n        break;\n      }\n      case \"httponly\": {\n        cookie.httpOnly = true;\n        break;\n      }\n      case \"samesite\": {\n        cookie.sameSite = partValue;\n        break;\n      }\n      default: {\n        cookie[partKey] = partValue;\n      }\n    }\n  }\n  return cookie;\n}\nfunction _parseNameValuePair(nameValuePairStr) {\n  let name = \"\";\n  let value = \"\";\n  const nameValueArr = nameValuePairStr.split(\"=\");\n  if (nameValueArr.length > 1) {\n    name = nameValueArr.shift();\n    value = nameValueArr.join(\"=\");\n  } else {\n    value = nameValuePairStr;\n  }\n  return { name, value };\n}\n\nfunction splitSetCookieString(cookiesString) {\n  if (Array.isArray(cookiesString)) {\n    return cookiesString.flatMap((c) => splitSetCookieString(c));\n  }\n  if (typeof cookiesString !== \"string\") {\n    return [];\n  }\n  const cookiesStrings = [];\n  let pos = 0;\n  let start;\n  let ch;\n  let lastComma;\n  let nextStart;\n  let cookiesSeparatorFound;\n  const skipWhitespace = () => {\n    while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n      pos += 1;\n    }\n    return pos < cookiesString.length;\n  };\n  const notSpecialChar = () => {\n    ch = cookiesString.charAt(pos);\n    return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n  };\n  while (pos < cookiesString.length) {\n    start = pos;\n    cookiesSeparatorFound = false;\n    while (skipWhitespace()) {\n      ch = cookiesString.charAt(pos);\n      if (ch === \",\") {\n        lastComma = pos;\n        pos += 1;\n        skipWhitespace();\n        nextStart = pos;\n        while (pos < cookiesString.length && notSpecialChar()) {\n          pos += 1;\n        }\n        if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n          cookiesSeparatorFound = true;\n          pos = nextStart;\n          cookiesStrings.push(cookiesString.slice(start, lastComma));\n          start = pos;\n        } else {\n          pos = lastComma + 1;\n        }\n      } else {\n        pos += 1;\n      }\n    }\n    if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n      cookiesStrings.push(cookiesString.slice(start, cookiesString.length));\n    }\n  }\n  return cookiesStrings;\n}\n\nexport { parse, parseSetCookie, serialize, splitSetCookieString };\n","const defaults = Object.freeze({\n  ignoreUnknown: false,\n  respectType: false,\n  respectFunctionNames: false,\n  respectFunctionProperties: false,\n  unorderedObjects: true,\n  unorderedArrays: false,\n  unorderedSets: false,\n  excludeKeys: void 0,\n  excludeValues: void 0,\n  replacer: void 0\n});\nfunction objectHash(object, options) {\n  if (options) {\n    options = { ...defaults, ...options };\n  } else {\n    options = defaults;\n  }\n  const hasher = createHasher(options);\n  hasher.dispatch(object);\n  return hasher.toString();\n}\nconst defaultPrototypesKeys = Object.freeze([\n  \"prototype\",\n  \"__proto__\",\n  \"constructor\"\n]);\nfunction createHasher(options) {\n  let buff = \"\";\n  let context = /* @__PURE__ */ new Map();\n  const write = (str) => {\n    buff += str;\n  };\n  return {\n    toString() {\n      return buff;\n    },\n    getContext() {\n      return context;\n    },\n    dispatch(value) {\n      if (options.replacer) {\n        value = options.replacer(value);\n      }\n      const type = value === null ? \"null\" : typeof value;\n      return this[type](value);\n    },\n    object(object) {\n      if (object && typeof object.toJSON === \"function\") {\n        return this.object(object.toJSON());\n      }\n      const objString = Object.prototype.toString.call(object);\n      let objType = \"\";\n      const objectLength = objString.length;\n      if (objectLength < 10) {\n        objType = \"unknown:[\" + objString + \"]\";\n      } else {\n        objType = objString.slice(8, objectLength - 1);\n      }\n      objType = objType.toLowerCase();\n      let objectNumber = null;\n      if ((objectNumber = context.get(object)) === void 0) {\n        context.set(object, context.size);\n      } else {\n        return this.dispatch(\"[CIRCULAR:\" + objectNumber + \"]\");\n      }\n      if (typeof Buffer !== \"undefined\" && Buffer.isBuffer && Buffer.isBuffer(object)) {\n        write(\"buffer:\");\n        return write(object.toString(\"utf8\"));\n      }\n      if (objType !== \"object\" && objType !== \"function\" && objType !== \"asyncfunction\") {\n        if (this[objType]) {\n          this[objType](object);\n        } else if (!options.ignoreUnknown) {\n          this.unkown(object, objType);\n        }\n      } else {\n        let keys = Object.keys(object);\n        if (options.unorderedObjects) {\n          keys = keys.sort();\n        }\n        let extraKeys = [];\n        if (options.respectType !== false && !isNativeFunction(object)) {\n          extraKeys = defaultPrototypesKeys;\n        }\n        if (options.excludeKeys) {\n          keys = keys.filter((key) => {\n            return !options.excludeKeys(key);\n          });\n          extraKeys = extraKeys.filter((key) => {\n            return !options.excludeKeys(key);\n          });\n        }\n        write(\"object:\" + (keys.length + extraKeys.length) + \":\");\n        const dispatchForKey = (key) => {\n          this.dispatch(key);\n          write(\":\");\n          if (!options.excludeValues) {\n            this.dispatch(object[key]);\n          }\n          write(\",\");\n        };\n        for (const key of keys) {\n          dispatchForKey(key);\n        }\n        for (const key of extraKeys) {\n          dispatchForKey(key);\n        }\n      }\n    },\n    array(arr, unordered) {\n      unordered = unordered === void 0 ? options.unorderedArrays !== false : unordered;\n      write(\"array:\" + arr.length + \":\");\n      if (!unordered || arr.length <= 1) {\n        for (const entry of arr) {\n          this.dispatch(entry);\n        }\n        return;\n      }\n      const contextAdditions = /* @__PURE__ */ new Map();\n      const entries = arr.map((entry) => {\n        const hasher = createHasher(options);\n        hasher.dispatch(entry);\n        for (const [key, value] of hasher.getContext()) {\n          contextAdditions.set(key, value);\n        }\n        return hasher.toString();\n      });\n      context = contextAdditions;\n      entries.sort();\n      return this.array(entries, false);\n    },\n    date(date) {\n      return write(\"date:\" + date.toJSON());\n    },\n    symbol(sym) {\n      return write(\"symbol:\" + sym.toString());\n    },\n    unkown(value, type) {\n      write(type);\n      if (!value) {\n        return;\n      }\n      write(\":\");\n      if (value && typeof value.entries === \"function\") {\n        return this.array(\n          Array.from(value.entries()),\n          true\n          /* ordered */\n        );\n      }\n    },\n    error(err) {\n      return write(\"error:\" + err.toString());\n    },\n    boolean(bool) {\n      return write(\"bool:\" + bool);\n    },\n    string(string) {\n      write(\"string:\" + string.length + \":\");\n      write(string);\n    },\n    function(fn) {\n      write(\"fn:\");\n      if (isNativeFunction(fn)) {\n        this.dispatch(\"[native]\");\n      } else {\n        this.dispatch(fn.toString());\n      }\n      if (options.respectFunctionNames !== false) {\n        this.dispatch(\"function-name:\" + String(fn.name));\n      }\n      if (options.respectFunctionProperties) {\n        this.object(fn);\n      }\n    },\n    number(number) {\n      return write(\"number:\" + number);\n    },\n    xml(xml) {\n      return write(\"xml:\" + xml.toString());\n    },\n    null() {\n      return write(\"Null\");\n    },\n    undefined() {\n      return write(\"Undefined\");\n    },\n    regexp(regex) {\n      return write(\"regex:\" + regex.toString());\n    },\n    uint8array(arr) {\n      write(\"uint8array:\");\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    uint8clampedarray(arr) {\n      write(\"uint8clampedarray:\");\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    int8array(arr) {\n      write(\"int8array:\");\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    uint16array(arr) {\n      write(\"uint16array:\");\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    int16array(arr) {\n      write(\"int16array:\");\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    uint32array(arr) {\n      write(\"uint32array:\");\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    int32array(arr) {\n      write(\"int32array:\");\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    float32array(arr) {\n      write(\"float32array:\");\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    float64array(arr) {\n      write(\"float64array:\");\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    arraybuffer(arr) {\n      write(\"arraybuffer:\");\n      return this.dispatch(new Uint8Array(arr));\n    },\n    url(url) {\n      return write(\"url:\" + url.toString());\n    },\n    map(map) {\n      write(\"map:\");\n      const arr = [...map];\n      return this.array(arr, options.unorderedSets !== false);\n    },\n    set(set) {\n      write(\"set:\");\n      const arr = [...set];\n      return this.array(arr, options.unorderedSets !== false);\n    },\n    file(file) {\n      write(\"file:\");\n      return this.dispatch([file.name, file.size, file.type, file.lastModfied]);\n    },\n    blob() {\n      if (options.ignoreUnknown) {\n        return write(\"[blob]\");\n      }\n      throw new Error(\n        'Hashing Blob objects is currently not supported\\nUse \"options.replacer\" or \"options.ignoreUnknown\"\\n'\n      );\n    },\n    domwindow() {\n      return write(\"domwindow\");\n    },\n    bigint(number) {\n      return write(\"bigint:\" + number.toString());\n    },\n    /* Node.js standard native objects */\n    process() {\n      return write(\"process\");\n    },\n    timer() {\n      return write(\"timer\");\n    },\n    pipe() {\n      return write(\"pipe\");\n    },\n    tcp() {\n      return write(\"tcp\");\n    },\n    udp() {\n      return write(\"udp\");\n    },\n    tty() {\n      return write(\"tty\");\n    },\n    statwatcher() {\n      return write(\"statwatcher\");\n    },\n    securecontext() {\n      return write(\"securecontext\");\n    },\n    connection() {\n      return write(\"connection\");\n    },\n    zlib() {\n      return write(\"zlib\");\n    },\n    context() {\n      return write(\"context\");\n    },\n    nodescript() {\n      return write(\"nodescript\");\n    },\n    httpparser() {\n      return write(\"httpparser\");\n    },\n    dataview() {\n      return write(\"dataview\");\n    },\n    signal() {\n      return write(\"signal\");\n    },\n    fsevent() {\n      return write(\"fsevent\");\n    },\n    tlswrap() {\n      return write(\"tlswrap\");\n    }\n  };\n}\nconst nativeFunc = \"[native code] }\";\nconst nativeFuncLength = nativeFunc.length;\nfunction isNativeFunction(f) {\n  if (typeof f !== \"function\") {\n    return false;\n  }\n  return Function.prototype.toString.call(f).slice(-nativeFuncLength) === nativeFunc;\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => {\n  __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass WordArray {\n  constructor(words, sigBytes) {\n    __publicField$1(this, \"words\");\n    __publicField$1(this, \"sigBytes\");\n    words = this.words = words || [];\n    this.sigBytes = sigBytes === void 0 ? words.length * 4 : sigBytes;\n  }\n  toString(encoder) {\n    return (encoder || Hex).stringify(this);\n  }\n  concat(wordArray) {\n    this.clamp();\n    if (this.sigBytes % 4) {\n      for (let i = 0; i < wordArray.sigBytes; i++) {\n        const thatByte = wordArray.words[i >>> 2] >>> 24 - i % 4 * 8 & 255;\n        this.words[this.sigBytes + i >>> 2] |= thatByte << 24 - (this.sigBytes + i) % 4 * 8;\n      }\n    } else {\n      for (let j = 0; j < wordArray.sigBytes; j += 4) {\n        this.words[this.sigBytes + j >>> 2] = wordArray.words[j >>> 2];\n      }\n    }\n    this.sigBytes += wordArray.sigBytes;\n    return this;\n  }\n  clamp() {\n    this.words[this.sigBytes >>> 2] &= 4294967295 << 32 - this.sigBytes % 4 * 8;\n    this.words.length = Math.ceil(this.sigBytes / 4);\n  }\n  clone() {\n    return new WordArray([...this.words]);\n  }\n}\nconst Hex = {\n  stringify(wordArray) {\n    const hexChars = [];\n    for (let i = 0; i < wordArray.sigBytes; i++) {\n      const bite = wordArray.words[i >>> 2] >>> 24 - i % 4 * 8 & 255;\n      hexChars.push((bite >>> 4).toString(16), (bite & 15).toString(16));\n    }\n    return hexChars.join(\"\");\n  }\n};\nconst Base64 = {\n  stringify(wordArray) {\n    const keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n    const base64Chars = [];\n    for (let i = 0; i < wordArray.sigBytes; i += 3) {\n      const byte1 = wordArray.words[i >>> 2] >>> 24 - i % 4 * 8 & 255;\n      const byte2 = wordArray.words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 255;\n      const byte3 = wordArray.words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 255;\n      const triplet = byte1 << 16 | byte2 << 8 | byte3;\n      for (let j = 0; j < 4 && i * 8 + j * 6 < wordArray.sigBytes * 8; j++) {\n        base64Chars.push(keyStr.charAt(triplet >>> 6 * (3 - j) & 63));\n      }\n    }\n    return base64Chars.join(\"\");\n  }\n};\nconst Latin1 = {\n  parse(latin1Str) {\n    const latin1StrLength = latin1Str.length;\n    const words = [];\n    for (let i = 0; i < latin1StrLength; i++) {\n      words[i >>> 2] |= (latin1Str.charCodeAt(i) & 255) << 24 - i % 4 * 8;\n    }\n    return new WordArray(words, latin1StrLength);\n  }\n};\nconst Utf8 = {\n  parse(utf8Str) {\n    return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n  }\n};\nclass BufferedBlockAlgorithm {\n  constructor() {\n    __publicField$1(this, \"_data\", new WordArray());\n    __publicField$1(this, \"_nDataBytes\", 0);\n    __publicField$1(this, \"_minBufferSize\", 0);\n    __publicField$1(this, \"blockSize\", 512 / 32);\n  }\n  reset() {\n    this._data = new WordArray();\n    this._nDataBytes = 0;\n  }\n  _append(data) {\n    if (typeof data === \"string\") {\n      data = Utf8.parse(data);\n    }\n    this._data.concat(data);\n    this._nDataBytes += data.sigBytes;\n  }\n  _doProcessBlock(_dataWords, _offset) {\n  }\n  _process(doFlush) {\n    let processedWords;\n    let nBlocksReady = this._data.sigBytes / (this.blockSize * 4);\n    if (doFlush) {\n      nBlocksReady = Math.ceil(nBlocksReady);\n    } else {\n      nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n    }\n    const nWordsReady = nBlocksReady * this.blockSize;\n    const nBytesReady = Math.min(nWordsReady * 4, this._data.sigBytes);\n    if (nWordsReady) {\n      for (let offset = 0; offset < nWordsReady; offset += this.blockSize) {\n        this._doProcessBlock(this._data.words, offset);\n      }\n      processedWords = this._data.words.splice(0, nWordsReady);\n      this._data.sigBytes -= nBytesReady;\n    }\n    return new WordArray(processedWords, nBytesReady);\n  }\n}\nclass Hasher extends BufferedBlockAlgorithm {\n  update(messageUpdate) {\n    this._append(messageUpdate);\n    this._process();\n    return this;\n  }\n  finalize(messageUpdate) {\n    if (messageUpdate) {\n      this._append(messageUpdate);\n    }\n  }\n}\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nconst H = [\n  1779033703,\n  -1150833019,\n  1013904242,\n  -1521486534,\n  1359893119,\n  -1694144372,\n  528734635,\n  1541459225\n];\nconst K = [\n  1116352408,\n  1899447441,\n  -1245643825,\n  -373957723,\n  961987163,\n  1508970993,\n  -1841331548,\n  -1424204075,\n  -670586216,\n  310598401,\n  607225278,\n  1426881987,\n  1925078388,\n  -2132889090,\n  -1680079193,\n  -1046744716,\n  -459576895,\n  -272742522,\n  264347078,\n  604807628,\n  770255983,\n  1249150122,\n  1555081692,\n  1996064986,\n  -1740746414,\n  -1473132947,\n  -1341970488,\n  -1084653625,\n  -958395405,\n  -710438585,\n  113926993,\n  338241895,\n  666307205,\n  773529912,\n  1294757372,\n  1396182291,\n  1695183700,\n  1986661051,\n  -2117940946,\n  -1838011259,\n  -1564481375,\n  -1474664885,\n  -1035236496,\n  -949202525,\n  -778901479,\n  -694614492,\n  -200395387,\n  275423344,\n  430227734,\n  506948616,\n  659060556,\n  883997877,\n  958139571,\n  1322822218,\n  1537002063,\n  1747873779,\n  1955562222,\n  2024104815,\n  -2067236844,\n  -1933114872,\n  -1866530822,\n  -1538233109,\n  -1090935817,\n  -965641998\n];\nconst W = [];\nclass SHA256 extends Hasher {\n  constructor() {\n    super(...arguments);\n    __publicField(this, \"_hash\", new WordArray([...H]));\n  }\n  /**\n   * Resets the internal state of the hash object to initial values.\n   */\n  reset() {\n    super.reset();\n    this._hash = new WordArray([...H]);\n  }\n  _doProcessBlock(M, offset) {\n    const H2 = this._hash.words;\n    let a = H2[0];\n    let b = H2[1];\n    let c = H2[2];\n    let d = H2[3];\n    let e = H2[4];\n    let f = H2[5];\n    let g = H2[6];\n    let h = H2[7];\n    for (let i = 0; i < 64; i++) {\n      if (i < 16) {\n        W[i] = M[offset + i] | 0;\n      } else {\n        const gamma0x = W[i - 15];\n        const gamma0 = (gamma0x << 25 | gamma0x >>> 7) ^ (gamma0x << 14 | gamma0x >>> 18) ^ gamma0x >>> 3;\n        const gamma1x = W[i - 2];\n        const gamma1 = (gamma1x << 15 | gamma1x >>> 17) ^ (gamma1x << 13 | gamma1x >>> 19) ^ gamma1x >>> 10;\n        W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n      }\n      const ch = e & f ^ ~e & g;\n      const maj = a & b ^ a & c ^ b & c;\n      const sigma0 = (a << 30 | a >>> 2) ^ (a << 19 | a >>> 13) ^ (a << 10 | a >>> 22);\n      const sigma1 = (e << 26 | e >>> 6) ^ (e << 21 | e >>> 11) ^ (e << 7 | e >>> 25);\n      const t1 = h + sigma1 + ch + K[i] + W[i];\n      const t2 = sigma0 + maj;\n      h = g;\n      g = f;\n      f = e;\n      e = d + t1 | 0;\n      d = c;\n      c = b;\n      b = a;\n      a = t1 + t2 | 0;\n    }\n    H2[0] = H2[0] + a | 0;\n    H2[1] = H2[1] + b | 0;\n    H2[2] = H2[2] + c | 0;\n    H2[3] = H2[3] + d | 0;\n    H2[4] = H2[4] + e | 0;\n    H2[5] = H2[5] + f | 0;\n    H2[6] = H2[6] + g | 0;\n    H2[7] = H2[7] + h | 0;\n  }\n  /**\n   * Finishes the hash calculation and returns the hash as a WordArray.\n   *\n   * @param {string} messageUpdate - Additional message content to include in the hash.\n   * @returns {WordArray} The finalised hash as a WordArray.\n   */\n  finalize(messageUpdate) {\n    super.finalize(messageUpdate);\n    const nBitsTotal = this._nDataBytes * 8;\n    const nBitsLeft = this._data.sigBytes * 8;\n    this._data.words[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32;\n    this._data.words[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(\n      nBitsTotal / 4294967296\n    );\n    this._data.words[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n    this._data.sigBytes = this._data.words.length * 4;\n    this._process();\n    return this._hash;\n  }\n}\nfunction sha256(message) {\n  return new SHA256().finalize(message).toString();\n}\nfunction sha256base64(message) {\n  return new SHA256().finalize(message).toString(Base64);\n}\n\nfunction hash(object, options = {}) {\n  const hashed = typeof object === \"string\" ? object : objectHash(object, options);\n  return sha256base64(hashed).slice(0, 10);\n}\n\nfunction murmurHash(key, seed = 0) {\n  if (typeof key === \"string\") {\n    key = createBuffer(key);\n  }\n  let i = 0;\n  let h1 = seed;\n  let k1;\n  let h1b;\n  const remainder = key.length & 3;\n  const bytes = key.length - remainder;\n  const c1 = 3432918353;\n  const c2 = 461845907;\n  while (i < bytes) {\n    k1 = key[i] & 255 | (key[++i] & 255) << 8 | (key[++i] & 255) << 16 | (key[++i] & 255) << 24;\n    ++i;\n    k1 = (k1 & 65535) * c1 + (((k1 >>> 16) * c1 & 65535) << 16) & 4294967295;\n    k1 = k1 << 15 | k1 >>> 17;\n    k1 = (k1 & 65535) * c2 + (((k1 >>> 16) * c2 & 65535) << 16) & 4294967295;\n    h1 ^= k1;\n    h1 = h1 << 13 | h1 >>> 19;\n    h1b = (h1 & 65535) * 5 + (((h1 >>> 16) * 5 & 65535) << 16) & 4294967295;\n    h1 = (h1b & 65535) + 27492 + (((h1b >>> 16) + 58964 & 65535) << 16);\n  }\n  k1 = 0;\n  switch (remainder) {\n    case 3: {\n      k1 ^= (key[i + 2] & 255) << 16;\n    }\n    case 2: {\n      k1 ^= (key[i + 1] & 255) << 8;\n    }\n    case 1: {\n      k1 ^= key[i] & 255;\n      k1 = (k1 & 65535) * c1 + (((k1 >>> 16) * c1 & 65535) << 16) & 4294967295;\n      k1 = k1 << 15 | k1 >>> 17;\n      k1 = (k1 & 65535) * c2 + (((k1 >>> 16) * c2 & 65535) << 16) & 4294967295;\n      h1 ^= k1;\n    }\n  }\n  h1 ^= key.length;\n  h1 ^= h1 >>> 16;\n  h1 = (h1 & 65535) * 2246822507 + (((h1 >>> 16) * 2246822507 & 65535) << 16) & 4294967295;\n  h1 ^= h1 >>> 13;\n  h1 = (h1 & 65535) * 3266489909 + (((h1 >>> 16) * 3266489909 & 65535) << 16) & 4294967295;\n  h1 ^= h1 >>> 16;\n  return h1 >>> 0;\n}\nfunction createBuffer(val) {\n  return new TextEncoder().encode(val);\n}\n\nfunction isEqual(object1, object2, hashOptions = {}) {\n  if (object1 === object2) {\n    return true;\n  }\n  if (objectHash(object1, hashOptions) === objectHash(object2, hashOptions)) {\n    return true;\n  }\n  return false;\n}\n\nfunction diff(obj1, obj2, opts = {}) {\n  const h1 = _toHashedObject(obj1, opts);\n  const h2 = _toHashedObject(obj2, opts);\n  return _diff(h1, h2, opts);\n}\nfunction _diff(h1, h2, opts = {}) {\n  const diffs = [];\n  const allProps = /* @__PURE__ */ new Set([\n    ...Object.keys(h1.props || {}),\n    ...Object.keys(h2.props || {})\n  ]);\n  if (h1.props && h2.props) {\n    for (const prop of allProps) {\n      const p1 = h1.props[prop];\n      const p2 = h2.props[prop];\n      if (p1 && p2) {\n        diffs.push(..._diff(h1.props?.[prop], h2.props?.[prop], opts));\n      } else if (p1 || p2) {\n        diffs.push(\n          new DiffEntry((p2 || p1).key, p1 ? \"removed\" : \"added\", p2, p1)\n        );\n      }\n    }\n  }\n  if (allProps.size === 0 && h1.hash !== h2.hash) {\n    diffs.push(new DiffEntry((h2 || h1).key, \"changed\", h2, h1));\n  }\n  return diffs;\n}\nfunction _toHashedObject(obj, opts, key = \"\") {\n  if (obj && typeof obj !== \"object\") {\n    return new DiffHashedObject(key, obj, objectHash(obj, opts));\n  }\n  const props = {};\n  const hashes = [];\n  for (const _key in obj) {\n    props[_key] = _toHashedObject(\n      obj[_key],\n      opts,\n      key ? `${key}.${_key}` : _key\n    );\n    hashes.push(props[_key].hash);\n  }\n  return new DiffHashedObject(key, obj, `{${hashes.join(\":\")}}`, props);\n}\nclass DiffEntry {\n  constructor(key, type, newValue, oldValue) {\n    this.key = key;\n    this.type = type;\n    this.newValue = newValue;\n    this.oldValue = oldValue;\n  }\n  toString() {\n    return this.toJSON();\n  }\n  toJSON() {\n    switch (this.type) {\n      case \"added\": {\n        return `Added   \\`${this.key}\\``;\n      }\n      case \"removed\": {\n        return `Removed \\`${this.key}\\``;\n      }\n      case \"changed\": {\n        return `Changed \\`${this.key}\\` from \\`${this.oldValue?.toString() || \"-\"}\\` to \\`${this.newValue.toString()}\\``;\n      }\n    }\n  }\n}\nclass DiffHashedObject {\n  constructor(key, value, hash, props) {\n    this.key = key;\n    this.value = value;\n    this.hash = hash;\n    this.props = props;\n  }\n  toString() {\n    if (this.props) {\n      return `{${Object.keys(this.props).join(\",\")}}`;\n    } else {\n      return JSON.stringify(this.value);\n    }\n  }\n  toJSON() {\n    const k = this.key || \".\";\n    if (this.props) {\n      return `${k}({${Object.keys(this.props).join(\",\")}})`;\n    }\n    return `${k}(${this.value})`;\n  }\n}\n\nexport { diff, hash, isEqual, murmurHash, objectHash, sha256, sha256base64 };\n","const NODE_TYPES = {\n  NORMAL: 0,\n  WILDCARD: 1,\n  PLACEHOLDER: 2\n};\n\nfunction createRouter(options = {}) {\n  const ctx = {\n    options,\n    rootNode: createRadixNode(),\n    staticRoutesMap: {}\n  };\n  const normalizeTrailingSlash = (p) => options.strictTrailingSlash ? p : p.replace(/\\/$/, \"\") || \"/\";\n  if (options.routes) {\n    for (const path in options.routes) {\n      insert(ctx, normalizeTrailingSlash(path), options.routes[path]);\n    }\n  }\n  return {\n    ctx,\n    lookup: (path) => lookup(ctx, normalizeTrailingSlash(path)),\n    insert: (path, data) => insert(ctx, normalizeTrailingSlash(path), data),\n    remove: (path) => remove(ctx, normalizeTrailingSlash(path))\n  };\n}\nfunction lookup(ctx, path) {\n  const staticPathNode = ctx.staticRoutesMap[path];\n  if (staticPathNode) {\n    return staticPathNode.data;\n  }\n  const sections = path.split(\"/\");\n  const params = {};\n  let paramsFound = false;\n  let wildcardNode = null;\n  let node = ctx.rootNode;\n  let wildCardParam = null;\n  for (let i = 0; i < sections.length; i++) {\n    const section = sections[i];\n    if (node.wildcardChildNode !== null) {\n      wildcardNode = node.wildcardChildNode;\n      wildCardParam = sections.slice(i).join(\"/\");\n    }\n    const nextNode = node.children.get(section);\n    if (nextNode === void 0) {\n      if (node && node.placeholderChildren.length > 1) {\n        const remaining = sections.length - i;\n        node = node.placeholderChildren.find((c) => c.maxDepth === remaining) || null;\n      } else {\n        node = node.placeholderChildren[0] || null;\n      }\n      if (!node) {\n        break;\n      }\n      if (node.paramName) {\n        params[node.paramName] = section;\n      }\n      paramsFound = true;\n    } else {\n      node = nextNode;\n    }\n  }\n  if ((node === null || node.data === null) && wildcardNode !== null) {\n    node = wildcardNode;\n    params[node.paramName || \"_\"] = wildCardParam;\n    paramsFound = true;\n  }\n  if (!node) {\n    return null;\n  }\n  if (paramsFound) {\n    return {\n      ...node.data,\n      params: paramsFound ? params : void 0\n    };\n  }\n  return node.data;\n}\nfunction insert(ctx, path, data) {\n  let isStaticRoute = true;\n  const sections = path.split(\"/\");\n  let node = ctx.rootNode;\n  let _unnamedPlaceholderCtr = 0;\n  const matchedNodes = [node];\n  for (const section of sections) {\n    let childNode;\n    if (childNode = node.children.get(section)) {\n      node = childNode;\n    } else {\n      const type = getNodeType(section);\n      childNode = createRadixNode({ type, parent: node });\n      node.children.set(section, childNode);\n      if (type === NODE_TYPES.PLACEHOLDER) {\n        childNode.paramName = section === \"*\" ? `_${_unnamedPlaceholderCtr++}` : section.slice(1);\n        node.placeholderChildren.push(childNode);\n        isStaticRoute = false;\n      } else if (type === NODE_TYPES.WILDCARD) {\n        node.wildcardChildNode = childNode;\n        childNode.paramName = section.slice(\n          3\n          /* \"**:\" */\n        ) || \"_\";\n        isStaticRoute = false;\n      }\n      matchedNodes.push(childNode);\n      node = childNode;\n    }\n  }\n  for (const [depth, node2] of matchedNodes.entries()) {\n    node2.maxDepth = Math.max(matchedNodes.length - depth, node2.maxDepth || 0);\n  }\n  node.data = data;\n  if (isStaticRoute === true) {\n    ctx.staticRoutesMap[path] = node;\n  }\n  return node;\n}\nfunction remove(ctx, path) {\n  let success = false;\n  const sections = path.split(\"/\");\n  let node = ctx.rootNode;\n  for (const section of sections) {\n    node = node.children.get(section);\n    if (!node) {\n      return success;\n    }\n  }\n  if (node.data) {\n    const lastSection = sections.at(-1) || \"\";\n    node.data = null;\n    if (Object.keys(node.children).length === 0 && node.parent) {\n      node.parent.children.delete(lastSection);\n      node.parent.wildcardChildNode = null;\n      node.parent.placeholderChildren = [];\n    }\n    success = true;\n  }\n  return success;\n}\nfunction createRadixNode(options = {}) {\n  return {\n    type: options.type || NODE_TYPES.NORMAL,\n    maxDepth: 0,\n    parent: options.parent || null,\n    children: /* @__PURE__ */ new Map(),\n    data: options.data || null,\n    paramName: options.paramName || null,\n    wildcardChildNode: null,\n    placeholderChildren: []\n  };\n}\nfunction getNodeType(str) {\n  if (str.startsWith(\"**\")) {\n    return NODE_TYPES.WILDCARD;\n  }\n  if (str[0] === \":\" || str === \"*\") {\n    return NODE_TYPES.PLACEHOLDER;\n  }\n  return NODE_TYPES.NORMAL;\n}\n\nfunction toRouteMatcher(router) {\n  const table = _routerNodeToTable(\"\", router.ctx.rootNode);\n  return _createMatcher(table, router.ctx.options.strictTrailingSlash);\n}\nfunction _createMatcher(table, strictTrailingSlash) {\n  return {\n    ctx: { table },\n    matchAll: (path) => _matchRoutes(path, table, strictTrailingSlash)\n  };\n}\nfunction _createRouteTable() {\n  return {\n    static: /* @__PURE__ */ new Map(),\n    wildcard: /* @__PURE__ */ new Map(),\n    dynamic: /* @__PURE__ */ new Map()\n  };\n}\nfunction _exportMatcherFromTable(table) {\n  const obj = /* @__PURE__ */ Object.create(null);\n  for (const property in table) {\n    obj[property] = property === \"dynamic\" ? Object.fromEntries(\n      [...table[property].entries()].map(([key, value]) => [\n        key,\n        _exportMatcherFromTable(value)\n      ])\n    ) : Object.fromEntries(table[property].entries());\n  }\n  return obj;\n}\nfunction exportMatcher(matcher) {\n  return _exportMatcherFromTable(matcher.ctx.table);\n}\nfunction _createTableFromExport(matcherExport) {\n  const table = {};\n  for (const property in matcherExport) {\n    table[property] = property === \"dynamic\" ? new Map(\n      Object.entries(matcherExport[property]).map(([key, value]) => [\n        key,\n        _createTableFromExport(value)\n      ])\n    ) : new Map(\n      Object.entries(matcherExport[property])\n    );\n  }\n  return table;\n}\nfunction createMatcherFromExport(matcherExport) {\n  return _createMatcher(_createTableFromExport(matcherExport));\n}\nfunction _matchRoutes(path, table, strictTrailingSlash) {\n  if (strictTrailingSlash !== true && path.endsWith(\"/\")) {\n    path = path.slice(0, -1) || \"/\";\n  }\n  const matches = [];\n  for (const [key, value] of _sortRoutesMap(table.wildcard)) {\n    if (path === key || path.startsWith(key + \"/\")) {\n      matches.push(value);\n    }\n  }\n  for (const [key, value] of _sortRoutesMap(table.dynamic)) {\n    if (path.startsWith(key + \"/\")) {\n      const subPath = \"/\" + path.slice(key.length).split(\"/\").splice(2).join(\"/\");\n      matches.push(..._matchRoutes(subPath, value));\n    }\n  }\n  const staticMatch = table.static.get(path);\n  if (staticMatch) {\n    matches.push(staticMatch);\n  }\n  return matches.filter(Boolean);\n}\nfunction _sortRoutesMap(m) {\n  return [...m.entries()].sort((a, b) => a[0].length - b[0].length);\n}\nfunction _routerNodeToTable(initialPath, initialNode) {\n  const table = _createRouteTable();\n  function _addNode(path, node) {\n    if (path) {\n      if (node.type === NODE_TYPES.NORMAL && !(path.includes(\"*\") || path.includes(\":\"))) {\n        if (node.data) {\n          table.static.set(path, node.data);\n        }\n      } else if (node.type === NODE_TYPES.WILDCARD) {\n        table.wildcard.set(path.replace(\"/**\", \"\"), node.data);\n      } else if (node.type === NODE_TYPES.PLACEHOLDER) {\n        const subTable = _routerNodeToTable(\"\", node);\n        if (node.data) {\n          subTable.static.set(\"/\", node.data);\n        }\n        table.dynamic.set(path.replace(/\\/\\*|\\/:\\w+/, \"\"), subTable);\n        return;\n      }\n    }\n    for (const [childPath, child] of node.children.entries()) {\n      _addNode(`${path}/${childPath}`.replace(\"//\", \"/\"), child);\n    }\n  }\n  _addNode(initialPath, initialNode);\n  return table;\n}\n\nexport { NODE_TYPES, createMatcherFromExport, createRouter, exportMatcher, toRouteMatcher };\n","function isPlainObject(value) {\n  if (value === null || typeof value !== \"object\") {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(value);\n  if (prototype !== null && prototype !== Object.prototype && Object.getPrototypeOf(prototype) !== null) {\n    return false;\n  }\n  if (Symbol.iterator in value) {\n    return false;\n  }\n  if (Symbol.toStringTag in value) {\n    return Object.prototype.toString.call(value) === \"[object Module]\";\n  }\n  return true;\n}\n\nfunction _defu(baseObject, defaults, namespace = \".\", merger) {\n  if (!isPlainObject(defaults)) {\n    return _defu(baseObject, {}, namespace, merger);\n  }\n  const object = Object.assign({}, defaults);\n  for (const key in baseObject) {\n    if (key === \"__proto__\" || key === \"constructor\") {\n      continue;\n    }\n    const value = baseObject[key];\n    if (value === null || value === void 0) {\n      continue;\n    }\n    if (merger && merger(object, key, value, namespace)) {\n      continue;\n    }\n    if (Array.isArray(value) && Array.isArray(object[key])) {\n      object[key] = [...value, ...object[key]];\n    } else if (isPlainObject(value) && isPlainObject(object[key])) {\n      object[key] = _defu(\n        value,\n        object[key],\n        (namespace ? `${namespace}.` : \"\") + key.toString(),\n        merger\n      );\n    } else {\n      object[key] = value;\n    }\n  }\n  return object;\n}\nfunction createDefu(merger) {\n  return (...arguments_) => (\n    // eslint-disable-next-line unicorn/no-array-reduce\n    arguments_.reduce((p, c) => _defu(p, c, \"\", merger), {})\n  );\n}\nconst defu = createDefu();\nconst defuFn = createDefu((object, key, currentValue) => {\n  if (object[key] !== void 0 && typeof currentValue === \"function\") {\n    object[key] = currentValue(object[key]);\n    return true;\n  }\n});\nconst defuArrayFn = createDefu((object, key, currentValue) => {\n  if (Array.isArray(object[key]) && typeof currentValue === \"function\") {\n    object[key] = currentValue(object[key]);\n    return true;\n  }\n});\n\nexport { createDefu, defu as default, defu, defuArrayFn, defuFn };\n","import { withoutTrailingSlash, withoutBase, getQuery as getQuery$1, decode, decodePath, withLeadingSlash, parseURL, joinURL } from 'ufo';\nimport { parse as parse$1, serialize } from 'cookie-es';\nimport { objectHash } from 'ohash';\nimport { createRouter as createRouter$1, toRouteMatcher } from 'radix3';\nimport destr from 'destr';\nimport { defu } from 'defu';\nimport crypto from 'uncrypto';\nimport { seal, defaults, unseal } from 'iron-webcrypto';\nimport { IncomingMessage, ServerResponse } from 'unenv/runtime/node/http/index';\n\nfunction useBase(base, handler) {\n  base = withoutTrailingSlash(base);\n  if (!base || base === \"/\") {\n    return handler;\n  }\n  return eventHandler(async (event) => {\n    event.node.req.originalUrl = event.node.req.originalUrl || event.node.req.url || \"/\";\n    const _path = event._path || event.node.req.url || \"/\";\n    event._path = withoutBase(event.path || \"/\", base);\n    event.node.req.url = event._path;\n    try {\n      return await handler(event);\n    } finally {\n      event._path = event.node.req.url = _path;\n    }\n  });\n}\n\nfunction hasProp(obj, prop) {\n  try {\n    return prop in obj;\n  } catch {\n    return false;\n  }\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$2 = (obj, key, value) => {\n  __defNormalProp$2(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass H3Error extends Error {\n  constructor(message, opts = {}) {\n    super(message, opts);\n    __publicField$2(this, \"statusCode\", 500);\n    __publicField$2(this, \"fatal\", false);\n    __publicField$2(this, \"unhandled\", false);\n    __publicField$2(this, \"statusMessage\");\n    __publicField$2(this, \"data\");\n    __publicField$2(this, \"cause\");\n    if (opts.cause && !this.cause) {\n      this.cause = opts.cause;\n    }\n  }\n  toJSON() {\n    const obj = {\n      message: this.message,\n      statusCode: sanitizeStatusCode(this.statusCode, 500)\n    };\n    if (this.statusMessage) {\n      obj.statusMessage = sanitizeStatusMessage(this.statusMessage);\n    }\n    if (this.data !== void 0) {\n      obj.data = this.data;\n    }\n    return obj;\n  }\n}\n__publicField$2(H3Error, \"__h3_error__\", true);\nfunction createError(input) {\n  if (typeof input === \"string\") {\n    return new H3Error(input);\n  }\n  if (isError(input)) {\n    return input;\n  }\n  const err = new H3Error(input.message ?? input.statusMessage ?? \"\", {\n    cause: input.cause || input\n  });\n  if (hasProp(input, \"stack\")) {\n    try {\n      Object.defineProperty(err, \"stack\", {\n        get() {\n          return input.stack;\n        }\n      });\n    } catch {\n      try {\n        err.stack = input.stack;\n      } catch {\n      }\n    }\n  }\n  if (input.data) {\n    err.data = input.data;\n  }\n  if (input.statusCode) {\n    err.statusCode = sanitizeStatusCode(input.statusCode, err.statusCode);\n  } else if (input.status) {\n    err.statusCode = sanitizeStatusCode(input.status, err.statusCode);\n  }\n  if (input.statusMessage) {\n    err.statusMessage = input.statusMessage;\n  } else if (input.statusText) {\n    err.statusMessage = input.statusText;\n  }\n  if (err.statusMessage) {\n    const originalMessage = err.statusMessage;\n    const sanitizedMessage = sanitizeStatusMessage(err.statusMessage);\n    if (sanitizedMessage !== originalMessage) {\n      console.warn(\n        \"[h3] Please prefer using `message` for longer error messages instead of `statusMessage`. In the future, `statusMessage` will be sanitized by default.\"\n      );\n    }\n  }\n  if (input.fatal !== void 0) {\n    err.fatal = input.fatal;\n  }\n  if (input.unhandled !== void 0) {\n    err.unhandled = input.unhandled;\n  }\n  return err;\n}\nfunction sendError(event, error, debug) {\n  if (event.handled) {\n    return;\n  }\n  const h3Error = isError(error) ? error : createError(error);\n  const responseBody = {\n    statusCode: h3Error.statusCode,\n    statusMessage: h3Error.statusMessage,\n    stack: [],\n    data: h3Error.data\n  };\n  if (debug) {\n    responseBody.stack = (h3Error.stack || \"\").split(\"\\n\").map((l) => l.trim());\n  }\n  if (event.handled) {\n    return;\n  }\n  const _code = Number.parseInt(h3Error.statusCode);\n  setResponseStatus(event, _code, h3Error.statusMessage);\n  event.node.res.setHeader(\"content-type\", MIMES.json);\n  event.node.res.end(JSON.stringify(responseBody, void 0, 2));\n}\nfunction isError(input) {\n  return input?.constructor?.__h3_error__ === true;\n}\n\nfunction parse(multipartBodyBuffer, boundary) {\n  let lastline = \"\";\n  let state = 0 /* INIT */;\n  let buffer = [];\n  const allParts = [];\n  let currentPartHeaders = [];\n  for (let i = 0; i < multipartBodyBuffer.length; i++) {\n    const prevByte = i > 0 ? multipartBodyBuffer[i - 1] : null;\n    const currByte = multipartBodyBuffer[i];\n    const newLineChar = currByte === 10 || currByte === 13;\n    if (!newLineChar) {\n      lastline += String.fromCodePoint(currByte);\n    }\n    const newLineDetected = currByte === 10 && prevByte === 13;\n    if (0 /* INIT */ === state && newLineDetected) {\n      if (\"--\" + boundary === lastline) {\n        state = 1 /* READING_HEADERS */;\n      }\n      lastline = \"\";\n    } else if (1 /* READING_HEADERS */ === state && newLineDetected) {\n      if (lastline.length > 0) {\n        const i2 = lastline.indexOf(\":\");\n        if (i2 > 0) {\n          const name = lastline.slice(0, i2).toLowerCase();\n          const value = lastline.slice(i2 + 1).trim();\n          currentPartHeaders.push([name, value]);\n        }\n      } else {\n        state = 2 /* READING_DATA */;\n        buffer = [];\n      }\n      lastline = \"\";\n    } else if (2 /* READING_DATA */ === state) {\n      if (lastline.length > boundary.length + 4) {\n        lastline = \"\";\n      }\n      if (\"--\" + boundary === lastline) {\n        const j = buffer.length - lastline.length;\n        const part = buffer.slice(0, j - 1);\n        allParts.push(process(part, currentPartHeaders));\n        buffer = [];\n        currentPartHeaders = [];\n        lastline = \"\";\n        state = 3 /* READING_PART_SEPARATOR */;\n      } else {\n        buffer.push(currByte);\n      }\n      if (newLineDetected) {\n        lastline = \"\";\n      }\n    } else if (3 /* READING_PART_SEPARATOR */ === state && newLineDetected) {\n      state = 1 /* READING_HEADERS */;\n    }\n  }\n  return allParts;\n}\nfunction process(data, headers) {\n  const dataObj = {};\n  const contentDispositionHeader = headers.find((h) => h[0] === \"content-disposition\")?.[1] || \"\";\n  for (const i of contentDispositionHeader.split(\";\")) {\n    const s = i.split(\"=\");\n    if (s.length !== 2) {\n      continue;\n    }\n    const key = (s[0] || \"\").trim();\n    if (key === \"name\" || key === \"filename\") {\n      const _value = (s[1] || \"\").trim().replace(/\"/g, \"\");\n      dataObj[key] = Buffer.from(_value, \"latin1\").toString(\"utf8\");\n    }\n  }\n  const contentType = headers.find((h) => h[0] === \"content-type\")?.[1] || \"\";\n  if (contentType) {\n    dataObj.type = contentType;\n  }\n  dataObj.data = Buffer.from(data);\n  return dataObj;\n}\n\nasync function validateData(data, fn) {\n  try {\n    const res = await fn(data);\n    if (res === false) {\n      throw createValidationError();\n    }\n    if (res === true) {\n      return data;\n    }\n    return res ?? data;\n  } catch (error) {\n    throw createValidationError(error);\n  }\n}\nfunction createValidationError(validateError) {\n  throw createError({\n    status: 400,\n    statusMessage: \"Validation Error\",\n    message: validateError?.message || \"Validation Error\",\n    data: validateError\n  });\n}\n\nfunction getQuery(event) {\n  return getQuery$1(event.path || \"\");\n}\nfunction getValidatedQuery(event, validate) {\n  const query = getQuery(event);\n  return validateData(query, validate);\n}\nfunction getRouterParams(event, opts = {}) {\n  let params = event.context.params || {};\n  if (opts.decode) {\n    params = { ...params };\n    for (const key in params) {\n      params[key] = decode(params[key]);\n    }\n  }\n  return params;\n}\nfunction getValidatedRouterParams(event, validate, opts = {}) {\n  const routerParams = getRouterParams(event, opts);\n  return validateData(routerParams, validate);\n}\nfunction getRouterParam(event, name, opts = {}) {\n  const params = getRouterParams(event, opts);\n  return params[name];\n}\nfunction getMethod(event, defaultMethod = \"GET\") {\n  return (event.node.req.method || defaultMethod).toUpperCase();\n}\nfunction isMethod(event, expected, allowHead) {\n  if (allowHead && event.method === \"HEAD\") {\n    return true;\n  }\n  if (typeof expected === \"string\") {\n    if (event.method === expected) {\n      return true;\n    }\n  } else if (expected.includes(event.method)) {\n    return true;\n  }\n  return false;\n}\nfunction assertMethod(event, expected, allowHead) {\n  if (!isMethod(event, expected, allowHead)) {\n    throw createError({\n      statusCode: 405,\n      statusMessage: \"HTTP method is not allowed.\"\n    });\n  }\n}\nfunction getRequestHeaders(event) {\n  const _headers = {};\n  for (const key in event.node.req.headers) {\n    const val = event.node.req.headers[key];\n    _headers[key] = Array.isArray(val) ? val.filter(Boolean).join(\", \") : val;\n  }\n  return _headers;\n}\nconst getHeaders = getRequestHeaders;\nfunction getRequestHeader(event, name) {\n  const headers = getRequestHeaders(event);\n  const value = headers[name.toLowerCase()];\n  return value;\n}\nconst getHeader = getRequestHeader;\nfunction getRequestHost(event, opts = {}) {\n  if (opts.xForwardedHost) {\n    const xForwardedHost = event.node.req.headers[\"x-forwarded-host\"];\n    if (xForwardedHost) {\n      return xForwardedHost;\n    }\n  }\n  return event.node.req.headers.host || \"localhost\";\n}\nfunction getRequestProtocol(event, opts = {}) {\n  if (opts.xForwardedProto !== false && event.node.req.headers[\"x-forwarded-proto\"] === \"https\") {\n    return \"https\";\n  }\n  return event.node.req.connection?.encrypted ? \"https\" : \"http\";\n}\nconst DOUBLE_SLASH_RE = /[/\\\\]{2,}/g;\nfunction getRequestPath(event) {\n  const path = (event.node.req.url || \"/\").replace(DOUBLE_SLASH_RE, \"/\");\n  return path;\n}\nfunction getRequestURL(event, opts = {}) {\n  const host = getRequestHost(event, opts);\n  const protocol = getRequestProtocol(event, opts);\n  const path = (event.node.req.originalUrl || event.path).replace(\n    /^[/\\\\]+/g,\n    \"/\"\n  );\n  return new URL(path, `${protocol}://${host}`);\n}\nfunction toWebRequest(event) {\n  return event.web?.request || new Request(getRequestURL(event), {\n    // @ts-ignore Undici option\n    duplex: \"half\",\n    method: event.method,\n    headers: event.headers,\n    body: getRequestWebStream(event)\n  });\n}\nfunction getRequestIP(event, opts = {}) {\n  if (event.context.clientAddress) {\n    return event.context.clientAddress;\n  }\n  if (opts.xForwardedFor) {\n    const xForwardedFor = getRequestHeader(event, \"x-forwarded-for\")?.split(\",\").shift()?.trim();\n    if (xForwardedFor) {\n      return xForwardedFor;\n    }\n  }\n  if (event.node.req.socket.remoteAddress) {\n    return event.node.req.socket.remoteAddress;\n  }\n}\n\nconst RawBodySymbol = Symbol.for(\"h3RawBody\");\nconst ParsedBodySymbol = Symbol.for(\"h3ParsedBody\");\nconst PayloadMethods$1 = [\"PATCH\", \"POST\", \"PUT\", \"DELETE\"];\nfunction readRawBody(event, encoding = \"utf8\") {\n  assertMethod(event, PayloadMethods$1);\n  const _rawBody = event._requestBody || event.web?.request?.body || event.node.req[RawBodySymbol] || event.node.req.rawBody || event.node.req.body;\n  if (_rawBody) {\n    const promise2 = Promise.resolve(_rawBody).then((_resolved) => {\n      if (Buffer.isBuffer(_resolved)) {\n        return _resolved;\n      }\n      if (typeof _resolved.pipeTo === \"function\") {\n        return new Promise((resolve, reject) => {\n          const chunks = [];\n          _resolved.pipeTo(\n            new WritableStream({\n              write(chunk) {\n                chunks.push(chunk);\n              },\n              close() {\n                resolve(Buffer.concat(chunks));\n              },\n              abort(reason) {\n                reject(reason);\n              }\n            })\n          ).catch(reject);\n        });\n      } else if (typeof _resolved.pipe === \"function\") {\n        return new Promise((resolve, reject) => {\n          const chunks = [];\n          _resolved.on(\"data\", (chunk) => {\n            chunks.push(chunk);\n          }).on(\"end\", () => {\n            resolve(Buffer.concat(chunks));\n          }).on(\"error\", reject);\n        });\n      }\n      if (_resolved.constructor === Object) {\n        return Buffer.from(JSON.stringify(_resolved));\n      }\n      if (_resolved instanceof URLSearchParams) {\n        return Buffer.from(_resolved.toString());\n      }\n      return Buffer.from(_resolved);\n    });\n    return encoding ? promise2.then((buff) => buff.toString(encoding)) : promise2;\n  }\n  if (!Number.parseInt(event.node.req.headers[\"content-length\"] || \"\") && !String(event.node.req.headers[\"transfer-encoding\"] ?? \"\").split(\",\").map((e) => e.trim()).filter(Boolean).includes(\"chunked\")) {\n    return Promise.resolve(void 0);\n  }\n  const promise = event.node.req[RawBodySymbol] = new Promise(\n    (resolve, reject) => {\n      const bodyData = [];\n      event.node.req.on(\"error\", (err) => {\n        reject(err);\n      }).on(\"data\", (chunk) => {\n        bodyData.push(chunk);\n      }).on(\"end\", () => {\n        resolve(Buffer.concat(bodyData));\n      });\n    }\n  );\n  const result = encoding ? promise.then((buff) => buff.toString(encoding)) : promise;\n  return result;\n}\nasync function readBody(event, options = {}) {\n  const request = event.node.req;\n  if (hasProp(request, ParsedBodySymbol)) {\n    return request[ParsedBodySymbol];\n  }\n  const contentType = request.headers[\"content-type\"] || \"\";\n  const body = await readRawBody(event);\n  let parsed;\n  if (contentType === \"application/json\") {\n    parsed = _parseJSON(body, options.strict ?? true);\n  } else if (contentType.startsWith(\"application/x-www-form-urlencoded\")) {\n    parsed = _parseURLEncodedBody(body);\n  } else if (contentType.startsWith(\"text/\")) {\n    parsed = body;\n  } else {\n    parsed = _parseJSON(body, options.strict ?? false);\n  }\n  request[ParsedBodySymbol] = parsed;\n  return parsed;\n}\nasync function readValidatedBody(event, validate) {\n  const _body = await readBody(event, { strict: true });\n  return validateData(_body, validate);\n}\nasync function readMultipartFormData(event) {\n  const contentType = getRequestHeader(event, \"content-type\");\n  if (!contentType || !contentType.startsWith(\"multipart/form-data\")) {\n    return;\n  }\n  const boundary = contentType.match(/boundary=([^;]*)(;|$)/i)?.[1];\n  if (!boundary) {\n    return;\n  }\n  const body = await readRawBody(event, false);\n  if (!body) {\n    return;\n  }\n  return parse(body, boundary);\n}\nasync function readFormData(event) {\n  return await toWebRequest(event).formData();\n}\nfunction getRequestWebStream(event) {\n  if (!PayloadMethods$1.includes(event.method)) {\n    return;\n  }\n  const bodyStream = event.web?.request?.body || event._requestBody;\n  if (bodyStream) {\n    return bodyStream;\n  }\n  const _hasRawBody = RawBodySymbol in event.node.req || \"rawBody\" in event.node.req || \"body\" in event.node.req || \"__unenv__\" in event.node.req;\n  if (_hasRawBody) {\n    return new ReadableStream({\n      async start(controller) {\n        const _rawBody = await readRawBody(event, false);\n        if (_rawBody) {\n          controller.enqueue(_rawBody);\n        }\n        controller.close();\n      }\n    });\n  }\n  return new ReadableStream({\n    start: (controller) => {\n      event.node.req.on(\"data\", (chunk) => {\n        controller.enqueue(chunk);\n      });\n      event.node.req.on(\"end\", () => {\n        controller.close();\n      });\n      event.node.req.on(\"error\", (err) => {\n        controller.error(err);\n      });\n    }\n  });\n}\nfunction _parseJSON(body = \"\", strict) {\n  if (!body) {\n    return void 0;\n  }\n  try {\n    return destr(body, { strict });\n  } catch {\n    throw createError({\n      statusCode: 400,\n      statusMessage: \"Bad Request\",\n      message: \"Invalid JSON body\"\n    });\n  }\n}\nfunction _parseURLEncodedBody(body) {\n  const form = new URLSearchParams(body);\n  const parsedForm = /* @__PURE__ */ Object.create(null);\n  for (const [key, value] of form.entries()) {\n    if (hasProp(parsedForm, key)) {\n      if (!Array.isArray(parsedForm[key])) {\n        parsedForm[key] = [parsedForm[key]];\n      }\n      parsedForm[key].push(value);\n    } else {\n      parsedForm[key] = value;\n    }\n  }\n  return parsedForm;\n}\n\nfunction handleCacheHeaders(event, opts) {\n  const cacheControls = [\"public\", ...opts.cacheControls || []];\n  let cacheMatched = false;\n  if (opts.maxAge !== void 0) {\n    cacheControls.push(`max-age=${+opts.maxAge}`, `s-maxage=${+opts.maxAge}`);\n  }\n  if (opts.modifiedTime) {\n    const modifiedTime = new Date(opts.modifiedTime);\n    const ifModifiedSince = event.node.req.headers[\"if-modified-since\"];\n    event.node.res.setHeader(\"last-modified\", modifiedTime.toUTCString());\n    if (ifModifiedSince && new Date(ifModifiedSince) >= opts.modifiedTime) {\n      cacheMatched = true;\n    }\n  }\n  if (opts.etag) {\n    event.node.res.setHeader(\"etag\", opts.etag);\n    const ifNonMatch = event.node.req.headers[\"if-none-match\"];\n    if (ifNonMatch === opts.etag) {\n      cacheMatched = true;\n    }\n  }\n  event.node.res.setHeader(\"cache-control\", cacheControls.join(\", \"));\n  if (cacheMatched) {\n    event.node.res.statusCode = 304;\n    if (!event.handled) {\n      event.node.res.end();\n    }\n    return true;\n  }\n  return false;\n}\n\nconst MIMES = {\n  html: \"text/html\",\n  json: \"application/json\"\n};\n\nconst DISALLOWED_STATUS_CHARS = /[^\\u0009\\u0020-\\u007E]/g;\nfunction sanitizeStatusMessage(statusMessage = \"\") {\n  return statusMessage.replace(DISALLOWED_STATUS_CHARS, \"\");\n}\nfunction sanitizeStatusCode(statusCode, defaultStatusCode = 200) {\n  if (!statusCode) {\n    return defaultStatusCode;\n  }\n  if (typeof statusCode === \"string\") {\n    statusCode = Number.parseInt(statusCode, 10);\n  }\n  if (statusCode < 100 || statusCode > 999) {\n    return defaultStatusCode;\n  }\n  return statusCode;\n}\n\nfunction parseCookies(event) {\n  return parse$1(event.node.req.headers.cookie || \"\");\n}\nfunction getCookie(event, name) {\n  return parseCookies(event)[name];\n}\nfunction setCookie(event, name, value, serializeOptions) {\n  serializeOptions = { path: \"/\", ...serializeOptions };\n  const cookieStr = serialize(name, value, serializeOptions);\n  let setCookies = event.node.res.getHeader(\"set-cookie\");\n  if (!Array.isArray(setCookies)) {\n    setCookies = [setCookies];\n  }\n  const _optionsHash = objectHash(serializeOptions);\n  setCookies = setCookies.filter((cookieValue) => {\n    return cookieValue && _optionsHash !== objectHash(parse$1(cookieValue));\n  });\n  event.node.res.setHeader(\"set-cookie\", [...setCookies, cookieStr]);\n}\nfunction deleteCookie(event, name, serializeOptions) {\n  setCookie(event, name, \"\", {\n    ...serializeOptions,\n    maxAge: 0\n  });\n}\nfunction splitCookiesString(cookiesString) {\n  if (Array.isArray(cookiesString)) {\n    return cookiesString.flatMap((c) => splitCookiesString(c));\n  }\n  if (typeof cookiesString !== \"string\") {\n    return [];\n  }\n  const cookiesStrings = [];\n  let pos = 0;\n  let start;\n  let ch;\n  let lastComma;\n  let nextStart;\n  let cookiesSeparatorFound;\n  const skipWhitespace = () => {\n    while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n      pos += 1;\n    }\n    return pos < cookiesString.length;\n  };\n  const notSpecialChar = () => {\n    ch = cookiesString.charAt(pos);\n    return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n  };\n  while (pos < cookiesString.length) {\n    start = pos;\n    cookiesSeparatorFound = false;\n    while (skipWhitespace()) {\n      ch = cookiesString.charAt(pos);\n      if (ch === \",\") {\n        lastComma = pos;\n        pos += 1;\n        skipWhitespace();\n        nextStart = pos;\n        while (pos < cookiesString.length && notSpecialChar()) {\n          pos += 1;\n        }\n        if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n          cookiesSeparatorFound = true;\n          pos = nextStart;\n          cookiesStrings.push(cookiesString.slice(start, lastComma));\n          start = pos;\n        } else {\n          pos = lastComma + 1;\n        }\n      } else {\n        pos += 1;\n      }\n    }\n    if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n      cookiesStrings.push(cookiesString.slice(start));\n    }\n  }\n  return cookiesStrings;\n}\n\nfunction serializeIterableValue(value) {\n  switch (typeof value) {\n    case \"string\": {\n      return value;\n    }\n    case \"boolean\":\n    case \"number\":\n    case \"bigint\":\n    case \"symbol\": {\n      return value.toString();\n    }\n    case \"function\":\n    case \"undefined\": {\n      return void 0;\n    }\n    case \"object\": {\n      if (value instanceof Uint8Array) {\n        return value;\n      }\n      return JSON.stringify(value);\n    }\n  }\n}\nfunction coerceIterable(iterable) {\n  if (typeof iterable === \"function\") {\n    iterable = iterable();\n  }\n  if (Symbol.iterator in iterable) {\n    return iterable[Symbol.iterator]();\n  }\n  if (Symbol.asyncIterator in iterable) {\n    return iterable[Symbol.asyncIterator]();\n  }\n  return iterable;\n}\n\nconst defer = typeof setImmediate === \"undefined\" ? (fn) => fn() : setImmediate;\nfunction send(event, data, type) {\n  if (type) {\n    defaultContentType(event, type);\n  }\n  return new Promise((resolve) => {\n    defer(() => {\n      if (!event.handled) {\n        event.node.res.end(data);\n      }\n      resolve();\n    });\n  });\n}\nfunction sendNoContent(event, code) {\n  if (event.handled) {\n    return;\n  }\n  if (!code && event.node.res.statusCode !== 200) {\n    code = event.node.res.statusCode;\n  }\n  const _code = sanitizeStatusCode(code, 204);\n  if (_code === 204) {\n    event.node.res.removeHeader(\"content-length\");\n  }\n  event.node.res.writeHead(_code);\n  event.node.res.end();\n}\nfunction setResponseStatus(event, code, text) {\n  if (code) {\n    event.node.res.statusCode = sanitizeStatusCode(\n      code,\n      event.node.res.statusCode\n    );\n  }\n  if (text) {\n    event.node.res.statusMessage = sanitizeStatusMessage(text);\n  }\n}\nfunction getResponseStatus(event) {\n  return event.node.res.statusCode;\n}\nfunction getResponseStatusText(event) {\n  return event.node.res.statusMessage;\n}\nfunction defaultContentType(event, type) {\n  if (type && event.node.res.statusCode !== 304 && !event.node.res.getHeader(\"content-type\")) {\n    event.node.res.setHeader(\"content-type\", type);\n  }\n}\nfunction sendRedirect(event, location, code = 302) {\n  event.node.res.statusCode = sanitizeStatusCode(\n    code,\n    event.node.res.statusCode\n  );\n  event.node.res.setHeader(\"location\", location);\n  const encodedLoc = location.replace(/\"/g, \"%22\");\n  const html = `<!DOCTYPE html><html><head><meta http-equiv=\"refresh\" content=\"0; url=${encodedLoc}\"></head></html>`;\n  return send(event, html, MIMES.html);\n}\nfunction getResponseHeaders(event) {\n  return event.node.res.getHeaders();\n}\nfunction getResponseHeader(event, name) {\n  return event.node.res.getHeader(name);\n}\nfunction setResponseHeaders(event, headers) {\n  for (const [name, value] of Object.entries(headers)) {\n    event.node.res.setHeader(\n      name,\n      value\n    );\n  }\n}\nconst setHeaders = setResponseHeaders;\nfunction setResponseHeader(event, name, value) {\n  event.node.res.setHeader(name, value);\n}\nconst setHeader = setResponseHeader;\nfunction appendResponseHeaders(event, headers) {\n  for (const [name, value] of Object.entries(headers)) {\n    appendResponseHeader(event, name, value);\n  }\n}\nconst appendHeaders = appendResponseHeaders;\nfunction appendResponseHeader(event, name, value) {\n  let current = event.node.res.getHeader(name);\n  if (!current) {\n    event.node.res.setHeader(name, value);\n    return;\n  }\n  if (!Array.isArray(current)) {\n    current = [current.toString()];\n  }\n  event.node.res.setHeader(name, [...current, value]);\n}\nconst appendHeader = appendResponseHeader;\nfunction clearResponseHeaders(event, headerNames) {\n  if (headerNames && headerNames.length > 0) {\n    for (const name of headerNames) {\n      removeResponseHeader(event, name);\n    }\n  } else {\n    for (const [name] of Object.entries(getResponseHeaders(event))) {\n      removeResponseHeader(event, name);\n    }\n  }\n}\nfunction removeResponseHeader(event, name) {\n  return event.node.res.removeHeader(name);\n}\nfunction isStream(data) {\n  if (!data || typeof data !== \"object\") {\n    return false;\n  }\n  if (typeof data.pipe === \"function\") {\n    if (typeof data._read === \"function\") {\n      return true;\n    }\n    if (typeof data.abort === \"function\") {\n      return true;\n    }\n  }\n  if (typeof data.pipeTo === \"function\") {\n    return true;\n  }\n  return false;\n}\nfunction isWebResponse(data) {\n  return typeof Response !== \"undefined\" && data instanceof Response;\n}\nfunction sendStream(event, stream) {\n  if (!stream || typeof stream !== \"object\") {\n    throw new Error(\"[h3] Invalid stream provided.\");\n  }\n  event.node.res._data = stream;\n  if (!event.node.res.socket) {\n    event._handled = true;\n    return Promise.resolve();\n  }\n  if (hasProp(stream, \"pipeTo\") && typeof stream.pipeTo === \"function\") {\n    return stream.pipeTo(\n      new WritableStream({\n        write(chunk) {\n          event.node.res.write(chunk);\n        }\n      })\n    ).then(() => {\n      event.node.res.end();\n    });\n  }\n  if (hasProp(stream, \"pipe\") && typeof stream.pipe === \"function\") {\n    return new Promise((resolve, reject) => {\n      stream.pipe(event.node.res);\n      if (stream.on) {\n        stream.on(\"end\", () => {\n          event.node.res.end();\n          resolve();\n        });\n        stream.on(\"error\", (error) => {\n          reject(error);\n        });\n      }\n      event.node.res.on(\"close\", () => {\n        if (stream.abort) {\n          stream.abort();\n        }\n      });\n    });\n  }\n  throw new Error(\"[h3] Invalid or incompatible stream provided.\");\n}\nconst noop = () => {\n};\nfunction writeEarlyHints(event, hints, cb = noop) {\n  if (!event.node.res.socket) {\n    cb();\n    return;\n  }\n  if (typeof hints === \"string\" || Array.isArray(hints)) {\n    hints = { link: hints };\n  }\n  if (hints.link) {\n    hints.link = Array.isArray(hints.link) ? hints.link : hints.link.split(\",\");\n  }\n  const headers = Object.entries(hints).map(\n    (e) => [e[0].toLowerCase(), e[1]]\n  );\n  if (headers.length === 0) {\n    cb();\n    return;\n  }\n  let hint = \"HTTP/1.1 103 Early Hints\";\n  if (hints.link) {\n    hint += `\\r\nLink: ${hints.link.join(\", \")}`;\n  }\n  for (const [header, value] of headers) {\n    if (header === \"link\") {\n      continue;\n    }\n    hint += `\\r\n${header}: ${value}`;\n  }\n  if (event.node.res.socket) {\n    event.node.res.socket.write(\n      `${hint}\\r\n\\r\n`,\n      \"utf8\",\n      cb\n    );\n  } else {\n    cb();\n  }\n}\nfunction sendWebResponse(event, response) {\n  for (const [key, value] of response.headers) {\n    if (key === \"set-cookie\") {\n      event.node.res.appendHeader(key, splitCookiesString(value));\n    } else {\n      event.node.res.setHeader(key, value);\n    }\n  }\n  if (response.status) {\n    event.node.res.statusCode = sanitizeStatusCode(\n      response.status,\n      event.node.res.statusCode\n    );\n  }\n  if (response.statusText) {\n    event.node.res.statusMessage = sanitizeStatusMessage(response.statusText);\n  }\n  if (response.redirected) {\n    event.node.res.setHeader(\"location\", response.url);\n  }\n  if (!response.body) {\n    event.node.res.end();\n    return;\n  }\n  return sendStream(event, response.body);\n}\nfunction sendIterable(event, iterable, options) {\n  const serializer = options?.serializer ?? serializeIterableValue;\n  const iterator = coerceIterable(iterable);\n  return sendStream(\n    event,\n    new ReadableStream({\n      async pull(controller) {\n        const { value, done } = await iterator.next();\n        if (value !== void 0) {\n          const chunk = serializer(value);\n          if (chunk !== void 0) {\n            controller.enqueue(chunk);\n          }\n        }\n        if (done) {\n          controller.close();\n        }\n      },\n      cancel() {\n        iterator.return?.();\n      }\n    })\n  );\n}\n\nfunction resolveCorsOptions(options = {}) {\n  const defaultOptions = {\n    origin: \"*\",\n    methods: \"*\",\n    allowHeaders: \"*\",\n    exposeHeaders: \"*\",\n    credentials: false,\n    maxAge: false,\n    preflight: {\n      statusCode: 204\n    }\n  };\n  return defu(options, defaultOptions);\n}\nfunction isPreflightRequest(event) {\n  const origin = getRequestHeader(event, \"origin\");\n  const accessControlRequestMethod = getRequestHeader(\n    event,\n    \"access-control-request-method\"\n  );\n  return event.method === \"OPTIONS\" && !!origin && !!accessControlRequestMethod;\n}\nfunction isCorsOriginAllowed(origin, options) {\n  const { origin: originOption } = options;\n  if (!origin || !originOption || originOption === \"*\" || originOption === \"null\") {\n    return true;\n  }\n  if (Array.isArray(originOption)) {\n    return originOption.some((_origin) => {\n      if (_origin instanceof RegExp) {\n        return _origin.test(origin);\n      }\n      return origin === _origin;\n    });\n  }\n  return originOption(origin);\n}\nfunction createOriginHeaders(event, options) {\n  const { origin: originOption } = options;\n  const origin = getRequestHeader(event, \"origin\");\n  if (!origin || !originOption || originOption === \"*\") {\n    return { \"access-control-allow-origin\": \"*\" };\n  }\n  if (typeof originOption === \"string\") {\n    return { \"access-control-allow-origin\": originOption, vary: \"origin\" };\n  }\n  return isCorsOriginAllowed(origin, options) ? { \"access-control-allow-origin\": origin, vary: \"origin\" } : {};\n}\nfunction createMethodsHeaders(options) {\n  const { methods } = options;\n  if (!methods) {\n    return {};\n  }\n  if (methods === \"*\") {\n    return { \"access-control-allow-methods\": \"*\" };\n  }\n  return methods.length > 0 ? { \"access-control-allow-methods\": methods.join(\",\") } : {};\n}\nfunction createCredentialsHeaders(options) {\n  const { credentials } = options;\n  if (credentials) {\n    return { \"access-control-allow-credentials\": \"true\" };\n  }\n  return {};\n}\nfunction createAllowHeaderHeaders(event, options) {\n  const { allowHeaders } = options;\n  if (!allowHeaders || allowHeaders === \"*\" || allowHeaders.length === 0) {\n    const header = getRequestHeader(event, \"access-control-request-headers\");\n    return header ? {\n      \"access-control-allow-headers\": header,\n      vary: \"access-control-request-headers\"\n    } : {};\n  }\n  return {\n    \"access-control-allow-headers\": allowHeaders.join(\",\"),\n    vary: \"access-control-request-headers\"\n  };\n}\nfunction createExposeHeaders(options) {\n  const { exposeHeaders } = options;\n  if (!exposeHeaders) {\n    return {};\n  }\n  if (exposeHeaders === \"*\") {\n    return { \"access-control-expose-headers\": exposeHeaders };\n  }\n  return { \"access-control-expose-headers\": exposeHeaders.join(\",\") };\n}\nfunction appendCorsPreflightHeaders(event, options) {\n  appendHeaders(event, createOriginHeaders(event, options));\n  appendHeaders(event, createCredentialsHeaders(options));\n  appendHeaders(event, createExposeHeaders(options));\n  appendHeaders(event, createMethodsHeaders(options));\n  appendHeaders(event, createAllowHeaderHeaders(event, options));\n}\nfunction appendCorsHeaders(event, options) {\n  appendHeaders(event, createOriginHeaders(event, options));\n  appendHeaders(event, createCredentialsHeaders(options));\n  appendHeaders(event, createExposeHeaders(options));\n}\n\nfunction handleCors(event, options) {\n  const _options = resolveCorsOptions(options);\n  if (isPreflightRequest(event)) {\n    appendCorsPreflightHeaders(event, options);\n    sendNoContent(event, _options.preflight.statusCode);\n    return true;\n  }\n  appendCorsHeaders(event, options);\n  return false;\n}\n\nasync function getRequestFingerprint(event, opts = {}) {\n  const fingerprint = [];\n  if (opts.ip !== false) {\n    fingerprint.push(\n      getRequestIP(event, { xForwardedFor: opts.xForwardedFor })\n    );\n  }\n  if (opts.method === true) {\n    fingerprint.push(event.method);\n  }\n  if (opts.path === true) {\n    fingerprint.push(event.path);\n  }\n  if (opts.userAgent === true) {\n    fingerprint.push(getRequestHeader(event, \"user-agent\"));\n  }\n  const fingerprintString = fingerprint.filter(Boolean).join(\"|\");\n  if (!fingerprintString) {\n    return null;\n  }\n  if (opts.hash === false) {\n    return fingerprintString;\n  }\n  const buffer = await crypto.subtle.digest(\n    opts.hash || \"SHA-1\",\n    new TextEncoder().encode(fingerprintString)\n  );\n  const hash = [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n  return hash;\n}\n\nconst PayloadMethods = /* @__PURE__ */ new Set([\"PATCH\", \"POST\", \"PUT\", \"DELETE\"]);\nconst ignoredHeaders = /* @__PURE__ */ new Set([\n  \"transfer-encoding\",\n  \"connection\",\n  \"keep-alive\",\n  \"upgrade\",\n  \"expect\",\n  \"host\",\n  \"accept\"\n]);\nasync function proxyRequest(event, target, opts = {}) {\n  let body;\n  let duplex;\n  if (PayloadMethods.has(event.method)) {\n    if (opts.streamRequest) {\n      body = getRequestWebStream(event);\n      duplex = \"half\";\n    } else {\n      body = await readRawBody(event, false).catch(() => void 0);\n    }\n  }\n  const method = opts.fetchOptions?.method || event.method;\n  const fetchHeaders = mergeHeaders(\n    getProxyRequestHeaders(event),\n    opts.fetchOptions?.headers,\n    opts.headers\n  );\n  return sendProxy(event, target, {\n    ...opts,\n    fetchOptions: {\n      method,\n      body,\n      duplex,\n      ...opts.fetchOptions,\n      headers: fetchHeaders\n    }\n  });\n}\nasync function sendProxy(event, target, opts = {}) {\n  let response;\n  try {\n    response = await _getFetch(opts.fetch)(target, {\n      headers: opts.headers,\n      ignoreResponseError: true,\n      // make $ofetch.raw transparent\n      ...opts.fetchOptions\n    });\n  } catch (error) {\n    throw createError({\n      status: 502,\n      statusMessage: \"Bad Gateway\",\n      cause: error\n    });\n  }\n  event.node.res.statusCode = sanitizeStatusCode(\n    response.status,\n    event.node.res.statusCode\n  );\n  event.node.res.statusMessage = sanitizeStatusMessage(response.statusText);\n  const cookies = [];\n  for (const [key, value] of response.headers.entries()) {\n    if (key === \"content-encoding\") {\n      continue;\n    }\n    if (key === \"content-length\") {\n      continue;\n    }\n    if (key === \"set-cookie\") {\n      cookies.push(...splitCookiesString(value));\n      continue;\n    }\n    event.node.res.setHeader(key, value);\n  }\n  if (cookies.length > 0) {\n    event.node.res.setHeader(\n      \"set-cookie\",\n      cookies.map((cookie) => {\n        if (opts.cookieDomainRewrite) {\n          cookie = rewriteCookieProperty(\n            cookie,\n            opts.cookieDomainRewrite,\n            \"domain\"\n          );\n        }\n        if (opts.cookiePathRewrite) {\n          cookie = rewriteCookieProperty(\n            cookie,\n            opts.cookiePathRewrite,\n            \"path\"\n          );\n        }\n        return cookie;\n      })\n    );\n  }\n  if (opts.onResponse) {\n    await opts.onResponse(event, response);\n  }\n  if (response._data !== void 0) {\n    return response._data;\n  }\n  if (event.handled) {\n    return;\n  }\n  if (opts.sendStream === false) {\n    const data = new Uint8Array(await response.arrayBuffer());\n    return event.node.res.end(data);\n  }\n  if (response.body) {\n    for await (const chunk of response.body) {\n      event.node.res.write(chunk);\n    }\n  }\n  return event.node.res.end();\n}\nfunction getProxyRequestHeaders(event) {\n  const headers = /* @__PURE__ */ Object.create(null);\n  const reqHeaders = getRequestHeaders(event);\n  for (const name in reqHeaders) {\n    if (!ignoredHeaders.has(name)) {\n      headers[name] = reqHeaders[name];\n    }\n  }\n  return headers;\n}\nfunction fetchWithEvent(event, req, init, options) {\n  return _getFetch(options?.fetch)(req, {\n    ...init,\n    context: init?.context || event.context,\n    headers: {\n      ...getProxyRequestHeaders(event),\n      ...init?.headers\n    }\n  });\n}\nfunction _getFetch(_fetch) {\n  if (_fetch) {\n    return _fetch;\n  }\n  if (globalThis.fetch) {\n    return globalThis.fetch;\n  }\n  throw new Error(\n    \"fetch is not available. Try importing `node-fetch-native/polyfill` for Node.js.\"\n  );\n}\nfunction rewriteCookieProperty(header, map, property) {\n  const _map = typeof map === \"string\" ? { \"*\": map } : map;\n  return header.replace(\n    new RegExp(`(;\\\\s*${property}=)([^;]+)`, \"gi\"),\n    (match, prefix, previousValue) => {\n      let newValue;\n      if (previousValue in _map) {\n        newValue = _map[previousValue];\n      } else if (\"*\" in _map) {\n        newValue = _map[\"*\"];\n      } else {\n        return match;\n      }\n      return newValue ? prefix + newValue : \"\";\n    }\n  );\n}\nfunction mergeHeaders(defaults, ...inputs) {\n  const _inputs = inputs.filter(Boolean);\n  if (_inputs.length === 0) {\n    return defaults;\n  }\n  const merged = new Headers(defaults);\n  for (const input of _inputs) {\n    for (const [key, value] of Object.entries(input)) {\n      if (value !== void 0) {\n        merged.set(key, value);\n      }\n    }\n  }\n  return merged;\n}\n\nconst getSessionPromise = Symbol(\"getSession\");\nconst DEFAULT_NAME = \"h3\";\nconst DEFAULT_COOKIE = {\n  path: \"/\",\n  secure: true,\n  httpOnly: true\n};\nasync function useSession(event, config) {\n  const sessionName = config.name || DEFAULT_NAME;\n  await getSession(event, config);\n  const sessionManager = {\n    get id() {\n      return event.context.sessions?.[sessionName]?.id;\n    },\n    get data() {\n      return event.context.sessions?.[sessionName]?.data || {};\n    },\n    update: async (update) => {\n      await updateSession(event, config, update);\n      return sessionManager;\n    },\n    clear: () => {\n      clearSession(event, config);\n      return Promise.resolve(sessionManager);\n    }\n  };\n  return sessionManager;\n}\nasync function getSession(event, config) {\n  const sessionName = config.name || DEFAULT_NAME;\n  if (!event.context.sessions) {\n    event.context.sessions = /* @__PURE__ */ Object.create(null);\n  }\n  const existingSession = event.context.sessions[sessionName];\n  if (existingSession) {\n    return existingSession[getSessionPromise] || existingSession;\n  }\n  const session = {\n    id: \"\",\n    createdAt: 0,\n    data: /* @__PURE__ */ Object.create(null)\n  };\n  event.context.sessions[sessionName] = session;\n  let sealedSession;\n  if (config.sessionHeader !== false) {\n    const headerName = typeof config.sessionHeader === \"string\" ? config.sessionHeader.toLowerCase() : `x-${sessionName.toLowerCase()}-session`;\n    const headerValue = event.node.req.headers[headerName];\n    if (typeof headerValue === \"string\") {\n      sealedSession = headerValue;\n    }\n  }\n  if (!sealedSession) {\n    sealedSession = getCookie(event, sessionName);\n  }\n  if (sealedSession) {\n    const promise = unsealSession(event, config, sealedSession).catch(() => {\n    }).then((unsealed) => {\n      Object.assign(session, unsealed);\n      delete event.context.sessions[sessionName][getSessionPromise];\n      return session;\n    });\n    event.context.sessions[sessionName][getSessionPromise] = promise;\n    await promise;\n  }\n  if (!session.id) {\n    session.id = config.generateId?.() ?? (config.crypto || crypto).randomUUID();\n    session.createdAt = Date.now();\n    await updateSession(event, config);\n  }\n  return session;\n}\nasync function updateSession(event, config, update) {\n  const sessionName = config.name || DEFAULT_NAME;\n  const session = event.context.sessions?.[sessionName] || await getSession(event, config);\n  if (typeof update === \"function\") {\n    update = update(session.data);\n  }\n  if (update) {\n    Object.assign(session.data, update);\n  }\n  if (config.cookie !== false) {\n    const sealed = await sealSession(event, config);\n    setCookie(event, sessionName, sealed, {\n      ...DEFAULT_COOKIE,\n      expires: config.maxAge ? new Date(session.createdAt + config.maxAge * 1e3) : void 0,\n      ...config.cookie\n    });\n  }\n  return session;\n}\nasync function sealSession(event, config) {\n  const sessionName = config.name || DEFAULT_NAME;\n  const session = event.context.sessions?.[sessionName] || await getSession(event, config);\n  const sealed = await seal(config.crypto || crypto, session, config.password, {\n    ...defaults,\n    ttl: config.maxAge ? config.maxAge * 1e3 : 0,\n    ...config.seal\n  });\n  return sealed;\n}\nasync function unsealSession(_event, config, sealed) {\n  const unsealed = await unseal(\n    config.crypto || crypto,\n    sealed,\n    config.password,\n    {\n      ...defaults,\n      ttl: config.maxAge ? config.maxAge * 1e3 : 0,\n      ...config.seal\n    }\n  );\n  if (config.maxAge) {\n    const age = Date.now() - (unsealed.createdAt || Number.NEGATIVE_INFINITY);\n    if (age > config.maxAge * 1e3) {\n      throw new Error(\"Session expired!\");\n    }\n  }\n  return unsealed;\n}\nfunction clearSession(event, config) {\n  const sessionName = config.name || DEFAULT_NAME;\n  if (event.context.sessions?.[sessionName]) {\n    delete event.context.sessions[sessionName];\n  }\n  setCookie(event, sessionName, \"\", {\n    ...DEFAULT_COOKIE,\n    ...config.cookie\n  });\n  return Promise.resolve();\n}\n\nfunction formatEventStreamMessage(message) {\n  let result = \"\";\n  if (message.id) {\n    result += `id: ${message.id}\n`;\n  }\n  if (message.event) {\n    result += `event: ${message.event}\n`;\n  }\n  if (typeof message.retry === \"number\" && Number.isInteger(message.retry)) {\n    result += `retry: ${message.retry}\n`;\n  }\n  result += `data: ${message.data}\n\n`;\n  return result;\n}\nfunction formatEventStreamMessages(messages) {\n  let result = \"\";\n  for (const msg of messages) {\n    result += formatEventStreamMessage(msg);\n  }\n  return result;\n}\nfunction setEventStreamHeaders(event) {\n  const headers = {\n    \"Content-Type\": \"text/event-stream\",\n    \"Cache-Control\": \"private, no-cache, no-store, no-transform, must-revalidate, max-age=0\",\n    \"X-Accel-Buffering\": \"no\"\n    // prevent nginx from buffering the response\n  };\n  if (!isHttp2Request(event)) {\n    headers.Connection = \"keep-alive\";\n  }\n  setResponseHeaders(event, headers);\n}\nfunction isHttp2Request(event) {\n  return getHeader(event, \":path\") !== void 0 && getHeader(event, \":method\") !== void 0;\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => {\n  __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass EventStream {\n  constructor(event, opts = {}) {\n    __publicField$1(this, \"_h3Event\");\n    __publicField$1(this, \"_transformStream\", new TransformStream());\n    __publicField$1(this, \"_writer\");\n    __publicField$1(this, \"_encoder\", new TextEncoder());\n    __publicField$1(this, \"_writerIsClosed\", false);\n    __publicField$1(this, \"_paused\", false);\n    __publicField$1(this, \"_unsentData\");\n    __publicField$1(this, \"_disposed\", false);\n    __publicField$1(this, \"_handled\", false);\n    this._h3Event = event;\n    this._writer = this._transformStream.writable.getWriter();\n    this._writer.closed.then(() => {\n      this._writerIsClosed = true;\n    });\n    if (opts.autoclose !== false) {\n      this._h3Event.node.req.on(\"close\", () => this.close());\n    }\n  }\n  async push(message) {\n    if (typeof message === \"string\") {\n      await this._sendEvent({ data: message });\n      return;\n    }\n    if (Array.isArray(message)) {\n      if (message.length === 0) {\n        return;\n      }\n      if (typeof message[0] === \"string\") {\n        const msgs = [];\n        for (const item of message) {\n          msgs.push({ data: item });\n        }\n        await this._sendEvents(msgs);\n        return;\n      }\n      await this._sendEvents(message);\n      return;\n    }\n    await this._sendEvent(message);\n  }\n  async _sendEvent(message) {\n    if (this._writerIsClosed) {\n      return;\n    }\n    if (this._paused && !this._unsentData) {\n      this._unsentData = formatEventStreamMessage(message);\n      return;\n    }\n    if (this._paused) {\n      this._unsentData += formatEventStreamMessage(message);\n      return;\n    }\n    await this._writer.write(this._encoder.encode(formatEventStreamMessage(message))).catch();\n  }\n  async _sendEvents(messages) {\n    if (this._writerIsClosed) {\n      return;\n    }\n    const payload = formatEventStreamMessages(messages);\n    if (this._paused && !this._unsentData) {\n      this._unsentData = payload;\n      return;\n    }\n    if (this._paused) {\n      this._unsentData += payload;\n      return;\n    }\n    await this._writer.write(this._encoder.encode(payload)).catch();\n  }\n  pause() {\n    this._paused = true;\n  }\n  get isPaused() {\n    return this._paused;\n  }\n  async resume() {\n    this._paused = false;\n    await this.flush();\n  }\n  async flush() {\n    if (this._writerIsClosed) {\n      return;\n    }\n    if (this._unsentData?.length) {\n      await this._writer.write(this._encoder.encode(this._unsentData));\n      this._unsentData = void 0;\n    }\n  }\n  /**\n   * Close the stream and the connection if the stream is being sent to the client\n   */\n  async close() {\n    if (this._disposed) {\n      return;\n    }\n    if (!this._writerIsClosed) {\n      try {\n        await this._writer.close();\n      } catch {\n      }\n    }\n    if (this._h3Event._handled && this._handled && !this._h3Event.node.res.closed) {\n      this._h3Event.node.res.end();\n    }\n    this._disposed = true;\n  }\n  /**\n   * Triggers callback when the writable stream is closed.\n   * It is also triggered after calling the `close()` method.\n   */\n  onClosed(cb) {\n    this._writer.closed.then(cb);\n  }\n  async send() {\n    setEventStreamHeaders(this._h3Event);\n    setResponseStatus(this._h3Event, 200);\n    this._h3Event._handled = true;\n    this._handled = true;\n    await sendStream(this._h3Event, this._transformStream.readable);\n  }\n}\n\nfunction createEventStream(event, opts) {\n  return new EventStream(event, opts);\n}\n\nasync function serveStatic(event, options) {\n  if (event.method !== \"GET\" && event.method !== \"HEAD\") {\n    if (!options.fallthrough) {\n      throw createError({\n        statusMessage: \"Method Not Allowed\",\n        statusCode: 405\n      });\n    }\n    return false;\n  }\n  const originalId = decodePath(\n    withLeadingSlash(withoutTrailingSlash(parseURL(event.path).pathname))\n  );\n  const acceptEncodings = parseAcceptEncoding(\n    getRequestHeader(event, \"accept-encoding\"),\n    options.encodings\n  );\n  if (acceptEncodings.length > 1) {\n    setResponseHeader(event, \"vary\", \"accept-encoding\");\n  }\n  let id = originalId;\n  let meta;\n  const _ids = idSearchPaths(\n    originalId,\n    acceptEncodings,\n    options.indexNames || [\"/index.html\"]\n  );\n  for (const _id of _ids) {\n    const _meta = await options.getMeta(_id);\n    if (_meta) {\n      meta = _meta;\n      id = _id;\n      break;\n    }\n  }\n  if (!meta) {\n    if (!options.fallthrough) {\n      throw createError({\n        statusMessage: \"Cannot find static asset \" + id,\n        statusCode: 404\n      });\n    }\n    return false;\n  }\n  if (meta.etag && !getResponseHeader(event, \"etag\")) {\n    setResponseHeader(event, \"etag\", meta.etag);\n  }\n  const ifNotMatch = meta.etag && getRequestHeader(event, \"if-none-match\") === meta.etag;\n  if (ifNotMatch) {\n    setResponseStatus(event, 304, \"Not Modified\");\n    return send(event, \"\");\n  }\n  if (meta.mtime) {\n    const mtimeDate = new Date(meta.mtime);\n    const ifModifiedSinceH = getRequestHeader(event, \"if-modified-since\");\n    if (ifModifiedSinceH && new Date(ifModifiedSinceH) >= mtimeDate) {\n      setResponseStatus(event, 304, \"Not Modified\");\n      return send(event, null);\n    }\n    if (!getResponseHeader(event, \"last-modified\")) {\n      setResponseHeader(event, \"last-modified\", mtimeDate.toUTCString());\n    }\n  }\n  if (meta.type && !getResponseHeader(event, \"content-type\")) {\n    setResponseHeader(event, \"content-type\", meta.type);\n  }\n  if (meta.encoding && !getResponseHeader(event, \"content-encoding\")) {\n    setResponseHeader(event, \"content-encoding\", meta.encoding);\n  }\n  if (meta.size !== void 0 && meta.size > 0 && !getResponseHeader(event, \"content-length\")) {\n    setResponseHeader(event, \"content-length\", meta.size);\n  }\n  if (event.method === \"HEAD\") {\n    return send(event, null);\n  }\n  const contents = await options.getContents(id);\n  return isStream(contents) ? sendStream(event, contents) : send(event, contents);\n}\nfunction parseAcceptEncoding(header, encodingMap) {\n  if (!encodingMap || !header) {\n    return [];\n  }\n  return String(header || \"\").split(\",\").map((e) => encodingMap[e.trim()]).filter(Boolean);\n}\nfunction idSearchPaths(id, encodings, indexNames) {\n  const ids = [];\n  for (const suffix of [\"\", ...indexNames]) {\n    for (const encoding of [...encodings, \"\"]) {\n      ids.push(`${id}${suffix}${encoding}`);\n    }\n  }\n  return ids;\n}\n\nfunction defineWebSocket(hooks) {\n  return hooks;\n}\nfunction defineWebSocketHandler(hooks) {\n  return defineEventHandler({\n    handler() {\n      throw createError({\n        statusCode: 426,\n        statusMessage: \"Upgrade Required\"\n      });\n    },\n    websocket: hooks\n  });\n}\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass H3Event {\n  constructor(req, res) {\n    __publicField(this, \"__is_event__\", true);\n    // Context\n    __publicField(this, \"node\");\n    // Node\n    __publicField(this, \"web\");\n    // Web\n    __publicField(this, \"context\", {});\n    // Shared\n    // Request\n    __publicField(this, \"_method\");\n    __publicField(this, \"_path\");\n    __publicField(this, \"_headers\");\n    __publicField(this, \"_requestBody\");\n    // Response\n    __publicField(this, \"_handled\", false);\n    // Hooks\n    __publicField(this, \"_onBeforeResponseCalled\");\n    __publicField(this, \"_onAfterResponseCalled\");\n    this.node = { req, res };\n  }\n  // --- Request ---\n  get method() {\n    if (!this._method) {\n      this._method = (this.node.req.method || \"GET\").toUpperCase();\n    }\n    return this._method;\n  }\n  get path() {\n    return this._path || this.node.req.url || \"/\";\n  }\n  get headers() {\n    if (!this._headers) {\n      this._headers = _normalizeNodeHeaders(this.node.req.headers);\n    }\n    return this._headers;\n  }\n  // --- Respoonse ---\n  get handled() {\n    return this._handled || this.node.res.writableEnded || this.node.res.headersSent;\n  }\n  respondWith(response) {\n    return Promise.resolve(response).then(\n      (_response) => sendWebResponse(this, _response)\n    );\n  }\n  // --- Utils ---\n  toString() {\n    return `[${this.method}] ${this.path}`;\n  }\n  toJSON() {\n    return this.toString();\n  }\n  // --- Deprecated ---\n  /** @deprecated Please use `event.node.req` instead. */\n  get req() {\n    return this.node.req;\n  }\n  /** @deprecated Please use `event.node.res` instead. */\n  get res() {\n    return this.node.res;\n  }\n}\nfunction isEvent(input) {\n  return hasProp(input, \"__is_event__\");\n}\nfunction createEvent(req, res) {\n  return new H3Event(req, res);\n}\nfunction _normalizeNodeHeaders(nodeHeaders) {\n  const headers = new Headers();\n  for (const [name, value] of Object.entries(nodeHeaders)) {\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        headers.append(name, item);\n      }\n    } else if (value) {\n      headers.set(name, value);\n    }\n  }\n  return headers;\n}\n\nfunction defineEventHandler(handler) {\n  if (typeof handler === \"function\") {\n    handler.__is_handler__ = true;\n    return handler;\n  }\n  const _hooks = {\n    onRequest: _normalizeArray(handler.onRequest),\n    onBeforeResponse: _normalizeArray(handler.onBeforeResponse)\n  };\n  const _handler = (event) => {\n    return _callHandler(event, handler.handler, _hooks);\n  };\n  _handler.__is_handler__ = true;\n  _handler.__resolve__ = handler.handler.__resolve__;\n  _handler.__websocket__ = handler.websocket;\n  return _handler;\n}\nfunction _normalizeArray(input) {\n  return input ? Array.isArray(input) ? input : [input] : void 0;\n}\nasync function _callHandler(event, handler, hooks) {\n  if (hooks.onRequest) {\n    for (const hook of hooks.onRequest) {\n      await hook(event);\n      if (event.handled) {\n        return;\n      }\n    }\n  }\n  const body = await handler(event);\n  const response = { body };\n  if (hooks.onBeforeResponse) {\n    for (const hook of hooks.onBeforeResponse) {\n      await hook(event, response);\n    }\n  }\n  return response.body;\n}\nconst eventHandler = defineEventHandler;\nfunction defineRequestMiddleware(fn) {\n  return fn;\n}\nfunction defineResponseMiddleware(fn) {\n  return fn;\n}\nfunction isEventHandler(input) {\n  return hasProp(input, \"__is_handler__\");\n}\nfunction toEventHandler(input, _, _route) {\n  if (!isEventHandler(input)) {\n    console.warn(\n      \"[h3] Implicit event handler conversion is deprecated. Use `eventHandler()` or `fromNodeMiddleware()` to define event handlers.\",\n      _route && _route !== \"/\" ? `\n     Route: ${_route}` : \"\",\n      `\n     Handler: ${input}`\n    );\n  }\n  return input;\n}\nfunction dynamicEventHandler(initial) {\n  let current = initial;\n  const wrapper = eventHandler((event) => {\n    if (current) {\n      return current(event);\n    }\n  });\n  wrapper.set = (handler) => {\n    current = handler;\n  };\n  return wrapper;\n}\nfunction defineLazyEventHandler(factory) {\n  let _promise;\n  let _resolved;\n  const resolveHandler = () => {\n    if (_resolved) {\n      return Promise.resolve(_resolved);\n    }\n    if (!_promise) {\n      _promise = Promise.resolve(factory()).then((r) => {\n        const handler2 = r.default || r;\n        if (typeof handler2 !== \"function\") {\n          throw new TypeError(\n            \"Invalid lazy handler result. It should be a function:\",\n            handler2\n          );\n        }\n        _resolved = { handler: toEventHandler(r.default || r) };\n        return _resolved;\n      });\n    }\n    return _promise;\n  };\n  const handler = eventHandler((event) => {\n    if (_resolved) {\n      return _resolved.handler(event);\n    }\n    return resolveHandler().then((r) => r.handler(event));\n  });\n  handler.__resolve__ = resolveHandler;\n  return handler;\n}\nconst lazyEventHandler = defineLazyEventHandler;\n\nconst H3Headers = globalThis.Headers;\nconst H3Response = globalThis.Response;\n\nfunction createApp(options = {}) {\n  const stack = [];\n  const handler = createAppEventHandler(stack, options);\n  const resolve = createResolver(stack);\n  handler.__resolve__ = resolve;\n  const getWebsocket = cachedFn(() => websocketOptions(resolve, options));\n  const app = {\n    // @ts-expect-error\n    use: (arg1, arg2, arg3) => use(app, arg1, arg2, arg3),\n    resolve,\n    handler,\n    stack,\n    options,\n    get websocket() {\n      return getWebsocket();\n    }\n  };\n  return app;\n}\nfunction use(app, arg1, arg2, arg3) {\n  if (Array.isArray(arg1)) {\n    for (const i of arg1) {\n      use(app, i, arg2, arg3);\n    }\n  } else if (Array.isArray(arg2)) {\n    for (const i of arg2) {\n      use(app, arg1, i, arg3);\n    }\n  } else if (typeof arg1 === \"string\") {\n    app.stack.push(\n      normalizeLayer({ ...arg3, route: arg1, handler: arg2 })\n    );\n  } else if (typeof arg1 === \"function\") {\n    app.stack.push(normalizeLayer({ ...arg2, handler: arg1 }));\n  } else {\n    app.stack.push(normalizeLayer({ ...arg1 }));\n  }\n  return app;\n}\nfunction createAppEventHandler(stack, options) {\n  const spacing = options.debug ? 2 : void 0;\n  return eventHandler(async (event) => {\n    event.node.req.originalUrl = event.node.req.originalUrl || event.node.req.url || \"/\";\n    const _reqPath = event._path || event.node.req.url || \"/\";\n    let _layerPath;\n    if (options.onRequest) {\n      await options.onRequest(event);\n    }\n    for (const layer of stack) {\n      if (layer.route.length > 1) {\n        if (!_reqPath.startsWith(layer.route)) {\n          continue;\n        }\n        _layerPath = _reqPath.slice(layer.route.length) || \"/\";\n      } else {\n        _layerPath = _reqPath;\n      }\n      if (layer.match && !layer.match(_layerPath, event)) {\n        continue;\n      }\n      event._path = _layerPath;\n      event.node.req.url = _layerPath;\n      const val = await layer.handler(event);\n      const _body = val === void 0 ? void 0 : await val;\n      if (_body !== void 0) {\n        const _response = { body: _body };\n        if (options.onBeforeResponse) {\n          event._onBeforeResponseCalled = true;\n          await options.onBeforeResponse(event, _response);\n        }\n        await handleHandlerResponse(event, _response.body, spacing);\n        if (options.onAfterResponse) {\n          event._onAfterResponseCalled = true;\n          await options.onAfterResponse(event, _response);\n        }\n        return;\n      }\n      if (event.handled) {\n        if (options.onAfterResponse) {\n          event._onAfterResponseCalled = true;\n          await options.onAfterResponse(event, void 0);\n        }\n        return;\n      }\n    }\n    if (!event.handled) {\n      throw createError({\n        statusCode: 404,\n        statusMessage: `Cannot find any path matching ${event.path || \"/\"}.`\n      });\n    }\n    if (options.onAfterResponse) {\n      event._onAfterResponseCalled = true;\n      await options.onAfterResponse(event, void 0);\n    }\n  });\n}\nfunction createResolver(stack) {\n  return async (path) => {\n    let _layerPath;\n    for (const layer of stack) {\n      if (layer.route === \"/\" && !layer.handler.__resolve__) {\n        continue;\n      }\n      if (!path.startsWith(layer.route)) {\n        continue;\n      }\n      _layerPath = path.slice(layer.route.length) || \"/\";\n      if (layer.match && !layer.match(_layerPath, void 0)) {\n        continue;\n      }\n      let res = { route: layer.route, handler: layer.handler };\n      if (res.handler.__resolve__) {\n        const _res = await res.handler.__resolve__(_layerPath);\n        if (!_res) {\n          continue;\n        }\n        res = {\n          ...res,\n          ..._res,\n          route: joinURL(res.route || \"/\", _res.route || \"/\")\n        };\n      }\n      return res;\n    }\n  };\n}\nfunction normalizeLayer(input) {\n  let handler = input.handler;\n  if (handler.handler) {\n    handler = handler.handler;\n  }\n  if (input.lazy) {\n    handler = lazyEventHandler(handler);\n  } else if (!isEventHandler(handler)) {\n    handler = toEventHandler(handler, void 0, input.route);\n  }\n  return {\n    route: withoutTrailingSlash(input.route),\n    match: input.match,\n    handler\n  };\n}\nfunction handleHandlerResponse(event, val, jsonSpace) {\n  if (val === null) {\n    return sendNoContent(event);\n  }\n  if (val) {\n    if (isWebResponse(val)) {\n      return sendWebResponse(event, val);\n    }\n    if (isStream(val)) {\n      return sendStream(event, val);\n    }\n    if (val.buffer) {\n      return send(event, val);\n    }\n    if (val.arrayBuffer && typeof val.arrayBuffer === \"function\") {\n      return val.arrayBuffer().then((arrayBuffer) => {\n        return send(event, Buffer.from(arrayBuffer), val.type);\n      });\n    }\n    if (val instanceof Error) {\n      throw createError(val);\n    }\n    if (typeof val.end === \"function\") {\n      return true;\n    }\n  }\n  const valType = typeof val;\n  if (valType === \"string\") {\n    return send(event, val, MIMES.html);\n  }\n  if (valType === \"object\" || valType === \"boolean\" || valType === \"number\") {\n    return send(event, JSON.stringify(val, void 0, jsonSpace), MIMES.json);\n  }\n  if (valType === \"bigint\") {\n    return send(event, val.toString(), MIMES.json);\n  }\n  throw createError({\n    statusCode: 500,\n    statusMessage: `[h3] Cannot send ${valType} as response.`\n  });\n}\nfunction cachedFn(fn) {\n  let cache;\n  return () => {\n    if (!cache) {\n      cache = fn();\n    }\n    return cache;\n  };\n}\nfunction websocketOptions(evResolver, appOptions) {\n  return {\n    ...appOptions.websocket,\n    async resolve(info) {\n      const url = info.request?.url || info.url || \"/\";\n      const { pathname } = typeof url === \"string\" ? parseURL(url) : url;\n      const resolved = await evResolver(pathname);\n      return resolved?.handler?.__websocket__ || {};\n    }\n  };\n}\n\nconst RouterMethods = [\n  \"connect\",\n  \"delete\",\n  \"get\",\n  \"head\",\n  \"options\",\n  \"post\",\n  \"put\",\n  \"trace\",\n  \"patch\"\n];\nfunction createRouter(opts = {}) {\n  const _router = createRouter$1({});\n  const routes = {};\n  let _matcher;\n  const router = {};\n  const addRoute = (path, handler, method) => {\n    let route = routes[path];\n    if (!route) {\n      routes[path] = route = { path, handlers: {} };\n      _router.insert(path, route);\n    }\n    if (Array.isArray(method)) {\n      for (const m of method) {\n        addRoute(path, handler, m);\n      }\n    } else {\n      route.handlers[method] = toEventHandler(handler, void 0, path);\n    }\n    return router;\n  };\n  router.use = router.add = (path, handler, method) => addRoute(path, handler, method || \"all\");\n  for (const method of RouterMethods) {\n    router[method] = (path, handle) => router.add(path, handle, method);\n  }\n  const matchHandler = (path = \"/\", method = \"get\") => {\n    const qIndex = path.indexOf(\"?\");\n    if (qIndex !== -1) {\n      path = path.slice(0, Math.max(0, qIndex));\n    }\n    const matched = _router.lookup(path);\n    if (!matched || !matched.handlers) {\n      return {\n        error: createError({\n          statusCode: 404,\n          name: \"Not Found\",\n          statusMessage: `Cannot find any route matching ${path || \"/\"}.`\n        })\n      };\n    }\n    let handler = matched.handlers[method] || matched.handlers.all;\n    if (!handler) {\n      if (!_matcher) {\n        _matcher = toRouteMatcher(_router);\n      }\n      const _matches = _matcher.matchAll(path).reverse();\n      for (const _match of _matches) {\n        if (_match.handlers[method]) {\n          handler = _match.handlers[method];\n          matched.handlers[method] = matched.handlers[method] || handler;\n          break;\n        }\n        if (_match.handlers.all) {\n          handler = _match.handlers.all;\n          matched.handlers.all = matched.handlers.all || handler;\n          break;\n        }\n      }\n    }\n    if (!handler) {\n      return {\n        error: createError({\n          statusCode: 405,\n          name: \"Method Not Allowed\",\n          statusMessage: `Method ${method} is not allowed on this route.`\n        })\n      };\n    }\n    return { matched, handler };\n  };\n  const isPreemptive = opts.preemptive || opts.preemtive;\n  router.handler = eventHandler((event) => {\n    const match = matchHandler(\n      event.path,\n      event.method.toLowerCase()\n    );\n    if (\"error\" in match) {\n      if (isPreemptive) {\n        throw match.error;\n      } else {\n        return;\n      }\n    }\n    event.context.matchedRoute = match.matched;\n    const params = match.matched.params || {};\n    event.context.params = params;\n    return Promise.resolve(match.handler(event)).then((res) => {\n      if (res === void 0 && isPreemptive) {\n        return null;\n      }\n      return res;\n    });\n  });\n  router.handler.__resolve__ = async (path) => {\n    path = withLeadingSlash(path);\n    const match = matchHandler(path);\n    if (\"error\" in match) {\n      return;\n    }\n    let res = {\n      route: match.matched.path,\n      handler: match.handler\n    };\n    if (match.handler.__resolve__) {\n      const _res = await match.handler.__resolve__(path);\n      if (!_res) {\n        return;\n      }\n      res = { ...res, ..._res };\n    }\n    return res;\n  };\n  return router;\n}\n\nconst defineNodeListener = (handler) => handler;\nconst defineNodeMiddleware = (middleware) => middleware;\nfunction fromNodeMiddleware(handler) {\n  if (isEventHandler(handler)) {\n    return handler;\n  }\n  if (typeof handler !== \"function\") {\n    throw new TypeError(\n      \"Invalid handler. It should be a function:\",\n      handler\n    );\n  }\n  return eventHandler((event) => {\n    return callNodeListener(\n      handler,\n      event.node.req,\n      event.node.res\n    );\n  });\n}\nfunction toNodeListener(app) {\n  const toNodeHandle = async function(req, res) {\n    const event = createEvent(req, res);\n    try {\n      await app.handler(event);\n    } catch (_error) {\n      const error = createError(_error);\n      if (!isError(_error)) {\n        error.unhandled = true;\n      }\n      setResponseStatus(event, error.statusCode, error.statusMessage);\n      if (app.options.onError) {\n        await app.options.onError(error, event);\n      }\n      if (event.handled) {\n        return;\n      }\n      if (error.unhandled || error.fatal) {\n        console.error(\"[h3]\", error.fatal ? \"[fatal]\" : \"[unhandled]\", error);\n      }\n      if (app.options.onBeforeResponse && !event._onBeforeResponseCalled) {\n        await app.options.onBeforeResponse(event, { body: error });\n      }\n      await sendError(event, error, !!app.options.debug);\n      if (app.options.onAfterResponse && !event._onAfterResponseCalled) {\n        await app.options.onAfterResponse(event, { body: error });\n      }\n    }\n  };\n  return toNodeHandle;\n}\nfunction promisifyNodeListener(handler) {\n  return function(req, res) {\n    return callNodeListener(handler, req, res);\n  };\n}\nfunction callNodeListener(handler, req, res) {\n  const isMiddleware = handler.length > 2;\n  return new Promise((resolve, reject) => {\n    const next = (err) => {\n      if (isMiddleware) {\n        res.off(\"close\", next);\n        res.off(\"error\", next);\n      }\n      return err ? reject(createError(err)) : resolve(void 0);\n    };\n    try {\n      const returned = handler(req, res, next);\n      if (isMiddleware && returned === void 0) {\n        res.once(\"close\", next);\n        res.once(\"error\", next);\n      } else {\n        resolve(returned);\n      }\n    } catch (error) {\n      next(error);\n    }\n  });\n}\n\nfunction toPlainHandler(app) {\n  const handler = (request) => {\n    return _handlePlainRequest(app, request);\n  };\n  return handler;\n}\nfunction fromPlainHandler(handler) {\n  return eventHandler(async (event) => {\n    const res = await handler({\n      method: event.method,\n      path: event.path,\n      headers: Object.fromEntries(event.headers.entries()),\n      body: getRequestWebStream(event),\n      context: event.context\n    });\n    setResponseStatus(event, res.status, res.statusText);\n    for (const [key, value] of res.headers) {\n      setResponseHeader(event, key, value);\n    }\n    return res.body;\n  });\n}\nasync function _handlePlainRequest(app, request) {\n  const path = request.path;\n  const method = (request.method || \"GET\").toUpperCase();\n  const headers = new Headers(request.headers);\n  const nodeReq = new IncomingMessage();\n  const nodeRes = new ServerResponse(nodeReq);\n  nodeReq.method = method;\n  nodeReq.url = path;\n  nodeReq.headers = Object.fromEntries(headers.entries());\n  const event = createEvent(nodeReq, nodeRes);\n  event._method = method;\n  event._path = path;\n  event._headers = headers;\n  if (request.body) {\n    event._requestBody = request.body;\n  }\n  if (request._eventOverrides) {\n    Object.assign(event, request._eventOverrides);\n  }\n  if (request.context) {\n    Object.assign(event.context, request.context);\n  }\n  try {\n    await app.handler(event);\n  } catch (_error) {\n    const error = createError(_error);\n    if (!isError(_error)) {\n      error.unhandled = true;\n    }\n    if (app.options.onError) {\n      await app.options.onError(error, event);\n    }\n    if (!event.handled) {\n      if (error.unhandled || error.fatal) {\n        console.error(\"[h3]\", error.fatal ? \"[fatal]\" : \"[unhandled]\", error);\n      }\n      await sendError(event, error, !!app.options.debug);\n    }\n  }\n  return {\n    status: nodeRes.statusCode,\n    statusText: nodeRes.statusMessage,\n    headers: _normalizeUnenvHeaders(nodeRes._headers),\n    body: nodeRes._data\n  };\n}\nfunction _normalizeUnenvHeaders(input) {\n  const headers = [];\n  const cookies = [];\n  for (const _key in input) {\n    const key = _key.toLowerCase();\n    if (key === \"set-cookie\") {\n      cookies.push(\n        ...splitCookiesString(input[\"set-cookie\"])\n      );\n      continue;\n    }\n    const value = input[key];\n    if (Array.isArray(value)) {\n      for (const _value of value) {\n        headers.push([key, _value]);\n      }\n    } else if (value !== void 0) {\n      headers.push([key, String(value)]);\n    }\n  }\n  if (cookies.length > 0) {\n    for (const cookie of cookies) {\n      headers.push([\"set-cookie\", cookie]);\n    }\n  }\n  return headers;\n}\n\nfunction toWebHandler(app) {\n  const webHandler = (request, context) => {\n    return _handleWebRequest(app, request, context);\n  };\n  return webHandler;\n}\nfunction fromWebHandler(handler) {\n  return eventHandler((event) => handler(toWebRequest(event), event.context));\n}\nconst nullBodyResponses = /* @__PURE__ */ new Set([101, 204, 205, 304]);\nasync function _handleWebRequest(app, request, context) {\n  const url = new URL(request.url);\n  const res = await _handlePlainRequest(app, {\n    _eventOverrides: {\n      web: { request, url }\n    },\n    context,\n    method: request.method,\n    path: url.pathname + url.search,\n    headers: request.headers,\n    body: request.body\n  });\n  const body = nullBodyResponses.has(res.status) || request.method === \"HEAD\" ? null : res.body;\n  return new Response(body, {\n    status: res.status,\n    statusText: res.statusText,\n    headers: res.headers\n  });\n}\n\nexport { H3Error, H3Event, H3Headers, H3Response, MIMES, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, callNodeListener, clearResponseHeaders, clearSession, createApp, createAppEventHandler, createError, createEvent, createEventStream, createRouter, defaultContentType, defineEventHandler, defineLazyEventHandler, defineNodeListener, defineNodeMiddleware, defineRequestMiddleware, defineResponseMiddleware, defineWebSocket, defineWebSocketHandler, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeMiddleware, fromPlainHandler, fromWebHandler, getCookie, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, isCorsOriginAllowed, isError, isEvent, isEventHandler, isMethod, isPreflightRequest, isStream, isWebResponse, lazyEventHandler, parseCookies, promisifyNodeListener, proxyRequest, readBody, readFormData, readMultipartFormData, readRawBody, readValidatedBody, removeResponseHeader, sanitizeStatusCode, sanitizeStatusMessage, sealSession, send, sendError, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serveStatic, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, splitCookiesString, toEventHandler, toNodeListener, toPlainHandler, toWebHandler, toWebRequest, unsealSession, updateSession, use, useBase, useSession, writeEarlyHints };\n","export const LayoutMetaSymbol = Symbol(\"layout-meta\");\nexport const PageRouteSymbol = Symbol(\"route\");\n","import { getCurrentInstance, hasInjectionContext, inject, onScopeDispose } from \"vue\";\nimport { sanitizeStatusCode } from \"h3\";\nimport { hasProtocol, isScriptProtocol, joinURL, withQuery } from \"ufo\";\nimport { useNuxtApp, useRuntimeConfig } from \"../nuxt.js\";\nimport { PageRouteSymbol } from \"../components/injections.js\";\nimport { createError, showError } from \"./error.js\";\nexport const useRouter = () => {\n  return useNuxtApp()?.$router;\n};\nexport const useRoute = () => {\n  if (import.meta.dev && isProcessingMiddleware()) {\n    console.warn(\"[nuxt] Calling `useRoute` within middleware may lead to misleading results. Instead, use the (to, from) arguments passed to the middleware to access the new and old routes.\");\n  }\n  if (hasInjectionContext()) {\n    return inject(PageRouteSymbol, useNuxtApp()._route);\n  }\n  return useNuxtApp()._route;\n};\nexport const onBeforeRouteLeave = (guard) => {\n  const unsubscribe = useRouter().beforeEach((to, from, next) => {\n    if (to === from) {\n      return;\n    }\n    return guard(to, from, next);\n  });\n  onScopeDispose(unsubscribe);\n};\nexport const onBeforeRouteUpdate = (guard) => {\n  const unsubscribe = useRouter().beforeEach(guard);\n  onScopeDispose(unsubscribe);\n};\n// @__NO_SIDE_EFFECTS__\nexport function defineNuxtRouteMiddleware(middleware) {\n  return middleware;\n}\nexport const addRouteMiddleware = (name, middleware, options = {}) => {\n  const nuxtApp = useNuxtApp();\n  const global = options.global || typeof name !== \"string\";\n  const mw = typeof name !== \"string\" ? name : middleware;\n  if (!mw) {\n    console.warn(\"[nuxt] No route middleware passed to `addRouteMiddleware`.\", name);\n    return;\n  }\n  if (global) {\n    nuxtApp._middleware.global.push(mw);\n  } else {\n    nuxtApp._middleware.named[name] = mw;\n  }\n};\nconst isProcessingMiddleware = () => {\n  try {\n    if (useNuxtApp()._processingMiddleware) {\n      return true;\n    }\n  } catch {\n    return false;\n  }\n  return false;\n};\nexport const navigateTo = (to, options) => {\n  if (!to) {\n    to = \"/\";\n  }\n  const toPath = typeof to === \"string\" ? to : \"path\" in to ? resolveRouteObject(to) : useRouter().resolve(to).href;\n  if (import.meta.client && options?.open) {\n    const { target = \"_blank\", windowFeatures = {} } = options.open;\n    const features = Object.entries(windowFeatures).filter(([_, value]) => value !== void 0).map(([feature, value]) => `${feature.toLowerCase()}=${value}`).join(\", \");\n    open(toPath, target, features);\n    return Promise.resolve();\n  }\n  const isExternalHost = hasProtocol(toPath, { acceptRelative: true });\n  const isExternal = options?.external || isExternalHost;\n  if (isExternal) {\n    if (!options?.external) {\n      throw new Error(\"Navigating to an external URL is not allowed by default. Use `navigateTo(url, { external: true })`.\");\n    }\n    const { protocol } = new URL(toPath, import.meta.client ? window.location.href : \"http://localhost\");\n    if (protocol && isScriptProtocol(protocol)) {\n      throw new Error(`Cannot navigate to a URL with '${protocol}' protocol.`);\n    }\n  }\n  const inMiddleware = isProcessingMiddleware();\n  if (import.meta.client && !isExternal && inMiddleware) {\n    return to;\n  }\n  const router = useRouter();\n  const nuxtApp = useNuxtApp();\n  if (import.meta.server) {\n    if (nuxtApp.ssrContext) {\n      const fullPath = typeof to === \"string\" || isExternal ? toPath : router.resolve(to).fullPath || \"/\";\n      const location2 = isExternal ? toPath : joinURL(useRuntimeConfig().app.baseURL, fullPath);\n      const redirect = async function(response) {\n        await nuxtApp.callHook(\"app:redirected\");\n        const encodedLoc = location2.replace(/\"/g, \"%22\");\n        const encodedHeader = encodeURL(location2, isExternalHost);\n        nuxtApp.ssrContext._renderResponse = {\n          statusCode: sanitizeStatusCode(options?.redirectCode || 302, 302),\n          body: `<!DOCTYPE html><html><head><meta http-equiv=\"refresh\" content=\"0; url=${encodedLoc}\"></head></html>`,\n          headers: { location: encodedHeader }\n        };\n        return response;\n      };\n      if (!isExternal && inMiddleware) {\n        router.afterEach((final) => final.fullPath === fullPath ? redirect(false) : void 0);\n        return to;\n      }\n      return redirect(!inMiddleware ? void 0 : (\n        /* abort route navigation */\n        false\n      ));\n    }\n  }\n  if (isExternal) {\n    nuxtApp._scope.stop();\n    if (options?.replace) {\n      location.replace(toPath);\n    } else {\n      location.href = toPath;\n    }\n    if (inMiddleware) {\n      if (!nuxtApp.isHydrating) {\n        return false;\n      }\n      return new Promise(() => {\n      });\n    }\n    return Promise.resolve();\n  }\n  return options?.replace ? router.replace(to) : router.push(to);\n};\nexport const abortNavigation = (err) => {\n  if (import.meta.dev && !isProcessingMiddleware()) {\n    throw new Error(\"abortNavigation() is only usable inside a route middleware handler.\");\n  }\n  if (!err) {\n    return false;\n  }\n  err = createError(err);\n  if (err.fatal) {\n    useNuxtApp().runWithContext(() => showError(err));\n  }\n  throw err;\n};\nexport const setPageLayout = (layout) => {\n  const nuxtApp = useNuxtApp();\n  if (import.meta.server) {\n    if (import.meta.dev && getCurrentInstance() && nuxtApp.payload.state._layout !== layout) {\n      console.warn(\"[warn] [nuxt] `setPageLayout` should not be called to change the layout on the server within a component as this will cause hydration errors.\");\n    }\n    nuxtApp.payload.state._layout = layout;\n  }\n  if (import.meta.dev && nuxtApp.isHydrating && nuxtApp.payload.serverRendered && nuxtApp.payload.state._layout !== layout) {\n    console.warn(\"[warn] [nuxt] `setPageLayout` should not be called to change the layout during hydration as this will cause hydration errors.\");\n  }\n  const inMiddleware = isProcessingMiddleware();\n  if (inMiddleware || import.meta.server || nuxtApp.isHydrating) {\n    const unsubscribe = useRouter().beforeResolve((to) => {\n      to.meta.layout = layout;\n      unsubscribe();\n    });\n  }\n  if (!inMiddleware) {\n    useRoute().meta.layout = layout;\n  }\n};\nexport function resolveRouteObject(to) {\n  return withQuery(to.path || \"\", to.query || {}) + (to.hash || \"\");\n}\nexport function encodeURL(location2, isExternalHost = false) {\n  const url = new URL(location2, \"http://localhost\");\n  if (!isExternalHost) {\n    return url.pathname + url.search + url.hash;\n  }\n  if (location2.startsWith(\"//\")) {\n    return url.toString().replace(url.protocol, \"\");\n  }\n  return url.toString();\n}\n","import { createError as createH3Error } from \"h3\";\nimport { toRef } from \"vue\";\nimport { useNuxtApp } from \"../nuxt.js\";\nimport { useRouter } from \"./router.js\";\nimport { nuxtDefaultErrorValue } from \"#build/nuxt.config.mjs\";\nexport const NUXT_ERROR_SIGNATURE = \"__nuxt_error\";\nexport const useError = () => toRef(useNuxtApp().payload, \"error\");\nexport const showError = (error) => {\n  const nuxtError = createError(error);\n  try {\n    const nuxtApp = useNuxtApp();\n    const error2 = useError();\n    if (import.meta.client) {\n      nuxtApp.hooks.callHook(\"app:error\", nuxtError);\n    }\n    error2.value = error2.value || nuxtError;\n  } catch {\n    throw nuxtError;\n  }\n  return nuxtError;\n};\nexport const clearError = async (options = {}) => {\n  const nuxtApp = useNuxtApp();\n  const error = useError();\n  nuxtApp.callHook(\"app:error:cleared\", options);\n  if (options.redirect) {\n    await useRouter().replace(options.redirect);\n  }\n  error.value = nuxtDefaultErrorValue;\n};\nexport const isNuxtError = (error) => !!error && typeof error === \"object\" && NUXT_ERROR_SIGNATURE in error;\nexport const createError = (error) => {\n  const nuxtError = createH3Error(error);\n  Object.defineProperty(nuxtError, NUXT_ERROR_SIGNATURE, {\n    value: true,\n    configurable: false,\n    writable: false\n  });\n  return nuxtError;\n};\n","/**\n * Base64 Encodes an arraybuffer\n * @param {ArrayBuffer} arraybuffer\n * @returns {string}\n */\nexport function encode64(arraybuffer) {\n  const dv = new DataView(arraybuffer);\n  let binaryString = \"\";\n\n  for (let i = 0; i < arraybuffer.byteLength; i++) {\n    binaryString += String.fromCharCode(dv.getUint8(i));\n  }\n\n  return binaryToAscii(binaryString);\n}\n\n/**\n * Decodes a base64 string into an arraybuffer\n * @param {string} string\n * @returns {ArrayBuffer}\n */\nexport function decode64(string) {\n  const binaryString = asciiToBinary(string);\n  const arraybuffer = new ArrayBuffer(binaryString.length);\n  const dv = new DataView(arraybuffer);\n\n  for (let i = 0; i < arraybuffer.byteLength; i++) {\n    dv.setUint8(i, binaryString.charCodeAt(i));\n  }\n\n  return arraybuffer;\n}\n\nconst KEY_STRING =\n  \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n/**\n * Substitute for atob since it's deprecated in node.\n * Does not do any input validation.\n *\n * @see https://github.com/jsdom/abab/blob/master/lib/atob.js\n *\n * @param {string} data\n * @returns {string}\n */\nfunction asciiToBinary(data) {\n  if (data.length % 4 === 0) {\n    data = data.replace(/==?$/, \"\");\n  }\n\n  let output = \"\";\n  let buffer = 0;\n  let accumulatedBits = 0;\n\n  for (let i = 0; i < data.length; i++) {\n    buffer <<= 6;\n    buffer |= KEY_STRING.indexOf(data[i]);\n    accumulatedBits += 6;\n    if (accumulatedBits === 24) {\n      output += String.fromCharCode((buffer & 0xff0000) >> 16);\n      output += String.fromCharCode((buffer & 0xff00) >> 8);\n      output += String.fromCharCode(buffer & 0xff);\n      buffer = accumulatedBits = 0;\n    }\n  }\n  if (accumulatedBits === 12) {\n    buffer >>= 4;\n    output += String.fromCharCode(buffer);\n  } else if (accumulatedBits === 18) {\n    buffer >>= 2;\n    output += String.fromCharCode((buffer & 0xff00) >> 8);\n    output += String.fromCharCode(buffer & 0xff);\n  }\n  return output;\n}\n\n/**\n * Substitute for btoa since it's deprecated in node.\n * Does not do any input validation.\n *\n * @see https://github.com/jsdom/abab/blob/master/lib/btoa.js\n *\n * @param {string} str\n * @returns {string}\n */\nfunction binaryToAscii(str) {\n  let out = \"\";\n  for (let i = 0; i < str.length; i += 3) {\n    /** @type {[number, number, number, number]} */\n    const groupsOfSix = [undefined, undefined, undefined, undefined];\n    groupsOfSix[0] = str.charCodeAt(i) >> 2;\n    groupsOfSix[1] = (str.charCodeAt(i) & 0x03) << 4;\n    if (str.length > i + 1) {\n      groupsOfSix[1] |= str.charCodeAt(i + 1) >> 4;\n      groupsOfSix[2] = (str.charCodeAt(i + 1) & 0x0f) << 2;\n    }\n    if (str.length > i + 2) {\n      groupsOfSix[2] |= str.charCodeAt(i + 2) >> 6;\n      groupsOfSix[3] = str.charCodeAt(i + 2) & 0x3f;\n    }\n    for (let j = 0; j < groupsOfSix.length; j++) {\n      if (typeof groupsOfSix[j] === \"undefined\") {\n        out += \"=\";\n      } else {\n        out += KEY_STRING[groupsOfSix[j]];\n      }\n    }\n  }\n  return out;\n}\n","export const UNDEFINED = -1;\nexport const HOLE = -2;\nexport const NAN = -3;\nexport const POSITIVE_INFINITY = -4;\nexport const NEGATIVE_INFINITY = -5;\nexport const NEGATIVE_ZERO = -6;\n","import { decode64 } from './base64.js';\nimport {\n\tHOLE,\n\tNAN,\n\tNEGATIVE_INFINITY,\n\tNEGATIVE_ZERO,\n\tPOSITIVE_INFINITY,\n\tUNDEFINED\n} from './constants.js';\n\n/**\n * Revive a value serialized with `devalue.stringify`\n * @param {string} serialized\n * @param {Record<string, (value: any) => any>} [revivers]\n */\nexport function parse(serialized, revivers) {\n\treturn unflatten(JSON.parse(serialized), revivers);\n}\n\n/**\n * Revive a value flattened with `devalue.stringify`\n * @param {number | any[]} parsed\n * @param {Record<string, (value: any) => any>} [revivers]\n */\nexport function unflatten(parsed, revivers) {\n\tif (typeof parsed === 'number') return hydrate(parsed, true);\n\n\tif (!Array.isArray(parsed) || parsed.length === 0) {\n\t\tthrow new Error('Invalid input');\n\t}\n\n\tconst values = /** @type {any[]} */ (parsed);\n\n\tconst hydrated = Array(values.length);\n\n\t/**\n\t * @param {number} index\n\t * @returns {any}\n\t */\n\tfunction hydrate(index, standalone = false) {\n\t\tif (index === UNDEFINED) return undefined;\n\t\tif (index === NAN) return NaN;\n\t\tif (index === POSITIVE_INFINITY) return Infinity;\n\t\tif (index === NEGATIVE_INFINITY) return -Infinity;\n\t\tif (index === NEGATIVE_ZERO) return -0;\n\n\t\tif (standalone) throw new Error(`Invalid input`);\n\n\t\tif (index in hydrated) return hydrated[index];\n\n\t\tconst value = values[index];\n\n\t\tif (!value || typeof value !== 'object') {\n\t\t\thydrated[index] = value;\n\t\t} else if (Array.isArray(value)) {\n\t\t\tif (typeof value[0] === 'string') {\n\t\t\t\tconst type = value[0];\n\n\t\t\t\tconst reviver = revivers?.[type];\n\t\t\t\tif (reviver) {\n\t\t\t\t\treturn (hydrated[index] = reviver(hydrate(value[1])));\n\t\t\t\t}\n\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase 'Date':\n\t\t\t\t\t\thydrated[index] = new Date(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Set':\n\t\t\t\t\t\tconst set = new Set();\n\t\t\t\t\t\thydrated[index] = set;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 1) {\n\t\t\t\t\t\t\tset.add(hydrate(value[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Map':\n\t\t\t\t\t\tconst map = new Map();\n\t\t\t\t\t\thydrated[index] = map;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 2) {\n\t\t\t\t\t\t\tmap.set(hydrate(value[i]), hydrate(value[i + 1]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RegExp':\n\t\t\t\t\t\thydrated[index] = new RegExp(value[1], value[2]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\thydrated[index] = Object(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BigInt':\n\t\t\t\t\t\thydrated[index] = BigInt(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'null':\n\t\t\t\t\t\tconst obj = Object.create(null);\n\t\t\t\t\t\thydrated[index] = obj;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 2) {\n\t\t\t\t\t\t\tobj[value[i]] = hydrate(value[i + 1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n          case \"Int8Array\":\n          case \"Uint8Array\":\n          case \"Uint8ClampedArray\":\n          case \"Int16Array\":\n          case \"Uint16Array\":\n          case \"Int32Array\":\n          case \"Uint32Array\":\n          case \"Float32Array\":\n          case \"Float64Array\":\n          case \"BigInt64Array\":\n          case \"BigUint64Array\": {\n            const TypedArrayConstructor = globalThis[type];\n            const base64 = value[1];\n            const arraybuffer = decode64(base64);\n            const typedArray = new TypedArrayConstructor(arraybuffer);\n            hydrated[index] = typedArray;\n            break;\n          }\n\n          case \"ArrayBuffer\": {\n            const base64 = value[1];\n            const arraybuffer = decode64(base64);\n            hydrated[index] = arraybuffer;\n            break;\n          }\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(`Unknown type ${type}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst array = new Array(value.length);\n\t\t\t\thydrated[index] = array;\n\n\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\tconst n = value[i];\n\t\t\t\t\tif (n === HOLE) continue;\n\n\t\t\t\t\tarray[i] = hydrate(n);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t/** @type {Record<string, any>} */\n\t\t\tconst object = {};\n\t\t\thydrated[index] = object;\n\n\t\t\tfor (const key in value) {\n\t\t\t\tconst n = value[key];\n\t\t\t\tobject[key] = hydrate(n);\n\t\t\t}\n\t\t}\n\n\t\treturn hydrated[index];\n\t}\n\n\treturn hydrate(0);\n}\n","function asArray$1(value) {\n  return Array.isArray(value) ? value : [value];\n}\n\nconst SelfClosingTags = /* @__PURE__ */ new Set([\"meta\", \"link\", \"base\"]);\nconst TagsWithInnerContent = /* @__PURE__ */ new Set([\"title\", \"titleTemplate\", \"script\", \"style\", \"noscript\"]);\nconst HasElementTags = /* @__PURE__ */ new Set([\n  \"base\",\n  \"meta\",\n  \"link\",\n  \"style\",\n  \"script\",\n  \"noscript\"\n]);\nconst ValidHeadTags = /* @__PURE__ */ new Set([\n  \"title\",\n  \"titleTemplate\",\n  \"templateParams\",\n  \"base\",\n  \"htmlAttrs\",\n  \"bodyAttrs\",\n  \"meta\",\n  \"link\",\n  \"style\",\n  \"script\",\n  \"noscript\"\n]);\nconst UniqueTags = /* @__PURE__ */ new Set([\"base\", \"title\", \"titleTemplate\", \"bodyAttrs\", \"htmlAttrs\", \"templateParams\"]);\nconst TagConfigKeys = /* @__PURE__ */ new Set([\"tagPosition\", \"tagPriority\", \"tagDuplicateStrategy\", \"children\", \"innerHTML\", \"textContent\", \"processTemplateParams\"]);\nconst IsBrowser = typeof window !== \"undefined\";\nconst composableNames = [\n  \"getActiveHead\",\n  \"useHead\",\n  \"useSeoMeta\",\n  \"useHeadSafe\",\n  \"useServerHead\",\n  \"useServerSeoMeta\",\n  \"useServerHeadSafe\"\n];\n\nfunction defineHeadPlugin(plugin) {\n  return plugin;\n}\n\nfunction hashCode(s) {\n  let h = 9;\n  for (let i = 0; i < s.length; )\n    h = Math.imul(h ^ s.charCodeAt(i++), 9 ** 9);\n  return ((h ^ h >>> 9) + 65536).toString(16).substring(1, 8).toLowerCase();\n}\nfunction hashTag(tag) {\n  if (tag._h) {\n    return tag._h;\n  }\n  if (tag._d) {\n    return hashCode(tag._d);\n  }\n  let content = `${tag.tag}:${tag.textContent || tag.innerHTML || \"\"}:`;\n  for (const key in tag.props) {\n    content += `${key}:${String(tag.props[key])},`;\n  }\n  return hashCode(content);\n}\n\nfunction asArray(input) {\n  return Array.isArray(input) ? input : [input];\n}\nconst InternalKeySymbol = \"_$key\";\nfunction packObject(input, options) {\n  const keys = Object.keys(input);\n  let [k, v] = keys;\n  options = options || {};\n  options.key = options.key || k;\n  options.value = options.value || v;\n  options.resolveKey = options.resolveKey || ((k2) => k2);\n  const resolveKey = (index) => {\n    const arr = asArray(options[index]);\n    return arr.find((k2) => {\n      if (typeof k2 === \"string\" && k2.includes(\".\")) {\n        return k2;\n      }\n      return k2 && keys.includes(k2);\n    });\n  };\n  const resolveValue = (k2, input2) => {\n    if (k2.includes(\".\")) {\n      const paths = k2.split(\".\");\n      let val = input2;\n      for (const path of paths)\n        val = val[path];\n      return val;\n    }\n    return input2[k2];\n  };\n  k = resolveKey(\"key\") || k;\n  v = resolveKey(\"value\") || v;\n  const dedupeKeyPrefix = input.key ? `${InternalKeySymbol}${input.key}-` : \"\";\n  let keyValue = resolveValue(k, input);\n  keyValue = options.resolveKey(keyValue);\n  return {\n    [`${dedupeKeyPrefix}${keyValue}`]: resolveValue(v, input)\n  };\n}\n\nfunction packArray(input, options) {\n  const packed = {};\n  for (const i of input) {\n    const packedObj = packObject(i, options);\n    const pKey = Object.keys(packedObj)[0];\n    const isDedupeKey = pKey.startsWith(InternalKeySymbol);\n    if (!isDedupeKey && packed[pKey]) {\n      packed[pKey] = Array.isArray(packed[pKey]) ? packed[pKey] : [packed[pKey]];\n      packed[pKey].push(Object.values(packedObj)[0]);\n    } else {\n      packed[isDedupeKey ? pKey.split(\"-\").slice(1).join(\"-\") || pKey : pKey] = packedObj[pKey];\n    }\n  }\n  return packed;\n}\n\nfunction unpackToArray(input, options) {\n  const unpacked = [];\n  const kFn = options.resolveKeyData || ((ctx) => ctx.key);\n  const vFn = options.resolveValueData || ((ctx) => ctx.value);\n  for (const [k, v] of Object.entries(input)) {\n    unpacked.push(...(Array.isArray(v) ? v : [v]).map((i) => {\n      const ctx = { key: k, value: i };\n      const val = vFn(ctx);\n      if (typeof val === \"object\")\n        return unpackToArray(val, options);\n      if (Array.isArray(val))\n        return val;\n      return {\n        [typeof options.key === \"function\" ? options.key(ctx) : options.key]: kFn(ctx),\n        [typeof options.value === \"function\" ? options.value(ctx) : options.value]: val\n      };\n    }).flat());\n  }\n  return unpacked;\n}\n\nfunction unpackToString(value, options) {\n  return Object.entries(value).map(([key, value2]) => {\n    if (typeof value2 === \"object\")\n      value2 = unpackToString(value2, options);\n    if (options.resolve) {\n      const resolved = options.resolve({ key, value: value2 });\n      if (typeof resolved !== \"undefined\")\n        return resolved;\n    }\n    if (typeof value2 === \"number\")\n      value2 = value2.toString();\n    if (typeof value2 === \"string\" && options.wrapValue) {\n      value2 = value2.replace(new RegExp(options.wrapValue, \"g\"), `\\\\${options.wrapValue}`);\n      value2 = `${options.wrapValue}${value2}${options.wrapValue}`;\n    }\n    return `${key}${options.keyValueSeparator || \"\"}${value2}`;\n  }).join(options.entrySeparator || \"\");\n}\n\nconst p = (p2) => ({ keyValue: p2, metaKey: \"property\" });\nconst k = (p2) => ({ keyValue: p2 });\nconst MetaPackingSchema = {\n  appleItunesApp: {\n    unpack: {\n      entrySeparator: \", \",\n      resolve({ key, value }) {\n        return `${fixKeyCase(key)}=${value}`;\n      }\n    }\n  },\n  articleExpirationTime: p(\"article:expiration_time\"),\n  articleModifiedTime: p(\"article:modified_time\"),\n  articlePublishedTime: p(\"article:published_time\"),\n  bookReleaseDate: p(\"book:release_date\"),\n  charset: {\n    metaKey: \"charset\"\n  },\n  contentSecurityPolicy: {\n    unpack: {\n      entrySeparator: \"; \",\n      resolve({ key, value }) {\n        return `${fixKeyCase(key)} ${value}`;\n      }\n    },\n    metaKey: \"http-equiv\"\n  },\n  contentType: {\n    metaKey: \"http-equiv\"\n  },\n  defaultStyle: {\n    metaKey: \"http-equiv\"\n  },\n  fbAppId: p(\"fb:app_id\"),\n  msapplicationConfig: k(\"msapplication-Config\"),\n  msapplicationTileColor: k(\"msapplication-TileColor\"),\n  msapplicationTileImage: k(\"msapplication-TileImage\"),\n  ogAudioSecureUrl: p(\"og:audio:secure_url\"),\n  ogAudioUrl: p(\"og:audio\"),\n  ogImageSecureUrl: p(\"og:image:secure_url\"),\n  ogImageUrl: p(\"og:image\"),\n  ogSiteName: p(\"og:site_name\"),\n  ogVideoSecureUrl: p(\"og:video:secure_url\"),\n  ogVideoUrl: p(\"og:video\"),\n  profileFirstName: p(\"profile:first_name\"),\n  profileLastName: p(\"profile:last_name\"),\n  profileUsername: p(\"profile:username\"),\n  refresh: {\n    metaKey: \"http-equiv\",\n    unpack: {\n      entrySeparator: \";\",\n      resolve({ key, value }) {\n        if (key === \"seconds\")\n          return `${value}`;\n      }\n    }\n  },\n  robots: {\n    unpack: {\n      entrySeparator: \", \",\n      resolve({ key, value }) {\n        if (typeof value === \"boolean\")\n          return `${fixKeyCase(key)}`;\n        else\n          return `${fixKeyCase(key)}:${value}`;\n      }\n    }\n  },\n  xUaCompatible: {\n    metaKey: \"http-equiv\"\n  }\n};\nconst openGraphNamespaces = /* @__PURE__ */ new Set([\n  \"og\",\n  \"book\",\n  \"article\",\n  \"profile\"\n]);\nfunction resolveMetaKeyType(key) {\n  const fKey = fixKeyCase(key);\n  const prefixIndex = fKey.indexOf(\":\");\n  if (openGraphNamespaces.has(fKey.substring(0, prefixIndex)))\n    return \"property\";\n  return MetaPackingSchema[key]?.metaKey || \"name\";\n}\nfunction resolveMetaKeyValue(key) {\n  return MetaPackingSchema[key]?.keyValue || fixKeyCase(key);\n}\nfunction fixKeyCase(key) {\n  const updated = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n  const prefixIndex = updated.indexOf(\"-\");\n  const fKey = updated.substring(0, prefixIndex);\n  if (fKey === \"twitter\" || openGraphNamespaces.has(fKey))\n    return key.replace(/([A-Z])/g, \":$1\").toLowerCase();\n  return updated;\n}\nfunction changeKeyCasingDeep(input) {\n  if (Array.isArray(input)) {\n    return input.map((entry) => changeKeyCasingDeep(entry));\n  }\n  if (typeof input !== \"object\" || Array.isArray(input))\n    return input;\n  const output = {};\n  for (const key in input) {\n    if (!Object.prototype.hasOwnProperty.call(input, key)) {\n      continue;\n    }\n    output[fixKeyCase(key)] = changeKeyCasingDeep(input[key]);\n  }\n  return output;\n}\nfunction resolvePackedMetaObjectValue(value, key) {\n  const definition = MetaPackingSchema[key];\n  if (key === \"refresh\")\n    return `${value.seconds};url=${value.url}`;\n  return unpackToString(\n    changeKeyCasingDeep(value),\n    {\n      keyValueSeparator: \"=\",\n      entrySeparator: \", \",\n      resolve({ value: value2, key: key2 }) {\n        if (value2 === null)\n          return \"\";\n        if (typeof value2 === \"boolean\")\n          return `${key2}`;\n      },\n      ...definition?.unpack\n    }\n  );\n}\nconst ObjectArrayEntries = /* @__PURE__ */ new Set([\"og:image\", \"og:video\", \"og:audio\", \"twitter:image\"]);\nfunction sanitize(input) {\n  const out = {};\n  for (const k2 in input) {\n    if (!Object.prototype.hasOwnProperty.call(input, k2)) {\n      continue;\n    }\n    const v = input[k2];\n    if (String(v) !== \"false\" && k2)\n      out[k2] = v;\n  }\n  return out;\n}\nfunction handleObjectEntry(key, v) {\n  const value = sanitize(v);\n  const fKey = fixKeyCase(key);\n  const attr = resolveMetaKeyType(fKey);\n  if (ObjectArrayEntries.has(fKey)) {\n    const input = {};\n    for (const k2 in value) {\n      if (!Object.prototype.hasOwnProperty.call(value, k2)) {\n        continue;\n      }\n      input[`${key}${k2 === \"url\" ? \"\" : `${k2[0].toUpperCase()}${k2.slice(1)}`}`] = value[k2];\n    }\n    return unpackMeta(input).sort((a, b) => (a[attr]?.length || 0) - (b[attr]?.length || 0));\n  }\n  return [{ [attr]: fKey, ...value }];\n}\nfunction unpackMeta(input) {\n  const extras = [];\n  const primitives = {};\n  for (const key in input) {\n    if (!Object.prototype.hasOwnProperty.call(input, key)) {\n      continue;\n    }\n    const value = input[key];\n    if (!Array.isArray(value)) {\n      if (typeof value === \"object\" && value) {\n        if (ObjectArrayEntries.has(fixKeyCase(key))) {\n          extras.push(...handleObjectEntry(key, value));\n          continue;\n        }\n        primitives[key] = sanitize(value);\n      } else {\n        primitives[key] = value;\n      }\n      continue;\n    }\n    for (const v of value) {\n      extras.push(...typeof v === \"string\" ? unpackMeta({ [key]: v }) : handleObjectEntry(key, v));\n    }\n  }\n  const meta = unpackToArray(primitives, {\n    key({ key }) {\n      return resolveMetaKeyType(key);\n    },\n    value({ key }) {\n      return key === \"charset\" ? \"charset\" : \"content\";\n    },\n    resolveKeyData({ key }) {\n      return resolveMetaKeyValue(key);\n    },\n    resolveValueData({ value, key }) {\n      if (value === null)\n        return \"_null\";\n      if (typeof value === \"object\")\n        return resolvePackedMetaObjectValue(value, key);\n      return typeof value === \"number\" ? value.toString() : value;\n    }\n  });\n  return [...extras, ...meta].map((m) => {\n    if (m.content === \"_null\")\n      m.content = null;\n    return m;\n  });\n}\nfunction packMeta(inputs) {\n  const mappedPackingSchema = Object.entries(MetaPackingSchema).map(([key, value]) => [key, value.keyValue]);\n  return packArray(inputs, {\n    key: [\"name\", \"property\", \"httpEquiv\", \"http-equiv\", \"charset\"],\n    value: [\"content\", \"charset\"],\n    resolveKey(k2) {\n      let key = mappedPackingSchema.filter((sk) => sk[1] === k2)?.[0]?.[0] || k2;\n      const replacer = (_, letter) => letter?.toUpperCase();\n      key = key.replace(/:([a-z])/g, replacer).replace(/-([a-z])/g, replacer);\n      return key;\n    }\n  });\n}\n\nfunction thenable(val, thenFn) {\n  if (val instanceof Promise) {\n    return val.then(thenFn);\n  }\n  return thenFn(val);\n}\n\nfunction normaliseTag(tagName, input, e, normalizedProps) {\n  const props = normalizedProps || normaliseProps(\n    // explicitly check for an object\n    // @ts-expect-error untyped\n    typeof input === \"object\" && typeof input !== \"function\" && !(input instanceof Promise) ? { ...input } : { [tagName === \"script\" || tagName === \"noscript\" || tagName === \"style\" ? \"innerHTML\" : \"textContent\"]: input },\n    tagName === \"templateParams\" || tagName === \"titleTemplate\"\n  );\n  if (props instanceof Promise) {\n    return props.then((val) => normaliseTag(tagName, input, e, val));\n  }\n  const tag = {\n    tag: tagName,\n    props\n  };\n  for (const k of TagConfigKeys) {\n    const val = tag.props[k] !== void 0 ? tag.props[k] : e[k];\n    if (val !== void 0) {\n      if (!(k === \"innerHTML\" || k === \"textContent\" || k === \"children\") || TagsWithInnerContent.has(tag.tag)) {\n        tag[k === \"children\" ? \"innerHTML\" : k] = val;\n      }\n      delete tag.props[k];\n    }\n  }\n  if (tag.props.body) {\n    tag.tagPosition = \"bodyClose\";\n    delete tag.props.body;\n  }\n  if (tag.tag === \"script\") {\n    if (typeof tag.innerHTML === \"object\") {\n      tag.innerHTML = JSON.stringify(tag.innerHTML);\n      tag.props.type = tag.props.type || \"application/json\";\n    }\n  }\n  return Array.isArray(tag.props.content) ? tag.props.content.map((v) => ({ ...tag, props: { ...tag.props, content: v } })) : tag;\n}\nfunction normaliseStyleClassProps(key, v) {\n  const sep = key === \"class\" ? \" \" : \";\";\n  if (v && typeof v === \"object\" && !Array.isArray(v)) {\n    v = Object.entries(v).filter(([, v2]) => v2).map(([k, v2]) => key === \"style\" ? `${k}:${v2}` : k);\n  }\n  return String(Array.isArray(v) ? v.join(sep) : v)?.split(sep).filter((c) => Boolean(c.trim())).join(sep);\n}\nfunction nestedNormaliseProps(props, virtual, keys, startIndex) {\n  for (let i = startIndex; i < keys.length; i += 1) {\n    const k = keys[i];\n    if (k === \"class\" || k === \"style\") {\n      props[k] = normaliseStyleClassProps(k, props[k]);\n      continue;\n    }\n    if (props[k] instanceof Promise) {\n      return props[k].then((val) => {\n        props[k] = val;\n        return nestedNormaliseProps(props, virtual, keys, i);\n      });\n    }\n    if (!virtual && !TagConfigKeys.has(k)) {\n      const v = String(props[k]);\n      const isDataKey = k.startsWith(\"data-\");\n      if (v === \"true\" || v === \"\") {\n        props[k] = isDataKey ? \"true\" : true;\n      } else if (!props[k]) {\n        if (isDataKey && v === \"false\")\n          props[k] = \"false\";\n        else\n          delete props[k];\n      }\n    }\n  }\n}\nfunction normaliseProps(props, virtual = false) {\n  const resolvedProps = nestedNormaliseProps(props, virtual, Object.keys(props), 0);\n  if (resolvedProps instanceof Promise) {\n    return resolvedProps.then(() => props);\n  }\n  return props;\n}\nconst TagEntityBits = 10;\nfunction nestedNormaliseEntryTags(headTags, tagPromises, startIndex) {\n  for (let i = startIndex; i < tagPromises.length; i += 1) {\n    const tags = tagPromises[i];\n    if (tags instanceof Promise) {\n      return tags.then((val) => {\n        tagPromises[i] = val;\n        return nestedNormaliseEntryTags(headTags, tagPromises, i);\n      });\n    }\n    if (Array.isArray(tags)) {\n      headTags.push(...tags);\n    } else {\n      headTags.push(tags);\n    }\n  }\n}\nfunction normaliseEntryTags(e) {\n  const tagPromises = [];\n  const input = e.resolvedInput;\n  for (const k in input) {\n    if (!Object.prototype.hasOwnProperty.call(input, k)) {\n      continue;\n    }\n    const v = input[k];\n    if (v === void 0 || !ValidHeadTags.has(k)) {\n      continue;\n    }\n    if (Array.isArray(v)) {\n      for (const props of v) {\n        tagPromises.push(normaliseTag(k, props, e));\n      }\n      continue;\n    }\n    tagPromises.push(normaliseTag(k, v, e));\n  }\n  if (tagPromises.length === 0) {\n    return [];\n  }\n  const headTags = [];\n  return thenable(nestedNormaliseEntryTags(headTags, tagPromises, 0), () => headTags.map((t, i) => {\n    t._e = e._i;\n    e.mode && (t._m = e.mode);\n    t._p = (e._i << TagEntityBits) + i;\n    return t;\n  }));\n}\n\nconst WhitelistAttributes = {\n  htmlAttrs: [\"id\", \"class\", \"lang\", \"dir\"],\n  bodyAttrs: [\"id\", \"class\"],\n  meta: [\"id\", \"name\", \"property\", \"charset\", \"content\"],\n  noscript: [\"id\", \"textContent\"],\n  script: [\"id\", \"type\", \"textContent\"],\n  link: [\"id\", \"color\", \"crossorigin\", \"fetchpriority\", \"href\", \"hreflang\", \"imagesrcset\", \"imagesizes\", \"integrity\", \"media\", \"referrerpolicy\", \"rel\", \"sizes\", \"type\"]\n};\nfunction acceptDataAttrs(value) {\n  const filtered = {};\n  Object.keys(value || {}).filter((a) => a.startsWith(\"data-\")).forEach((a) => {\n    filtered[a] = value[a];\n  });\n  return filtered;\n}\nfunction whitelistSafeInput(input) {\n  const filtered = {};\n  Object.keys(input).forEach((key) => {\n    const tagValue = input[key];\n    if (!tagValue)\n      return;\n    switch (key) {\n      case \"title\":\n      case \"titleTemplate\":\n      case \"templateParams\":\n        filtered[key] = tagValue;\n        break;\n      case \"htmlAttrs\":\n      case \"bodyAttrs\":\n        filtered[key] = acceptDataAttrs(tagValue);\n        WhitelistAttributes[key].forEach((a) => {\n          if (tagValue[a])\n            filtered[key][a] = tagValue[a];\n        });\n        break;\n      case \"meta\":\n        if (Array.isArray(tagValue)) {\n          filtered[key] = tagValue.map((meta) => {\n            const safeMeta = acceptDataAttrs(meta);\n            WhitelistAttributes.meta.forEach((key2) => {\n              if (meta[key2])\n                safeMeta[key2] = meta[key2];\n            });\n            return safeMeta;\n          }).filter((meta) => Object.keys(meta).length > 0);\n        }\n        break;\n      case \"link\":\n        if (Array.isArray(tagValue)) {\n          filtered[key] = tagValue.map((meta) => {\n            const link = acceptDataAttrs(meta);\n            WhitelistAttributes.link.forEach((key2) => {\n              const val = meta[key2];\n              if (key2 === \"rel\" && (val === \"stylesheet\" || val === \"canonical\" || val === \"modulepreload\" || val === \"prerender\" || val === \"preload\" || val === \"prefetch\"))\n                return;\n              if (key2 === \"href\") {\n                if (val.includes(\"javascript:\") || val.includes(\"data:\"))\n                  return;\n                link[key2] = val;\n              } else if (val) {\n                link[key2] = val;\n              }\n            });\n            return link;\n          }).filter((link) => Object.keys(link).length > 1 && !!link.rel);\n        }\n        break;\n      case \"noscript\":\n        if (Array.isArray(tagValue)) {\n          filtered[key] = tagValue.map((meta) => {\n            const noscript = acceptDataAttrs(meta);\n            WhitelistAttributes.noscript.forEach((key2) => {\n              if (meta[key2])\n                noscript[key2] = meta[key2];\n            });\n            return noscript;\n          }).filter((meta) => Object.keys(meta).length > 0);\n        }\n        break;\n      case \"script\":\n        if (Array.isArray(tagValue)) {\n          filtered[key] = tagValue.map((script) => {\n            const safeScript = acceptDataAttrs(script);\n            WhitelistAttributes.script.forEach((s) => {\n              if (script[s]) {\n                if (s === \"textContent\") {\n                  try {\n                    const jsonVal = typeof script[s] === \"string\" ? JSON.parse(script[s]) : script[s];\n                    safeScript[s] = JSON.stringify(jsonVal, null, 0);\n                  } catch (e) {\n                  }\n                } else {\n                  safeScript[s] = script[s];\n                }\n              }\n            });\n            return safeScript;\n          }).filter((meta) => Object.keys(meta).length > 0);\n        }\n        break;\n    }\n  });\n  return filtered;\n}\n\nconst NetworkEvents = /* @__PURE__ */ new Set([\"onload\", \"onerror\", \"onabort\", \"onprogress\", \"onloadstart\"]);\nconst ScriptNetworkEvents = /* @__PURE__ */ new Set([\"onload\", \"onerror\"]);\n\nconst TAG_WEIGHTS = {\n  // tags\n  base: -10,\n  title: 10\n};\nconst TAG_ALIASES = {\n  // relative scores to their default values\n  critical: -80,\n  high: -10,\n  low: 20\n};\nfunction tagWeight(tag) {\n  const priority = tag.tagPriority;\n  if (typeof priority === \"number\")\n    return priority;\n  let weight = 100;\n  if (tag.tag === \"meta\") {\n    if (tag.props[\"http-equiv\"] === \"content-security-policy\")\n      weight = -30;\n    else if (tag.props.charset)\n      weight = -20;\n    else if (tag.props.name === \"viewport\")\n      weight = -15;\n  } else if (tag.tag === \"link\" && tag.props.rel === \"preconnect\") {\n    weight = 20;\n  } else if (tag.tag in TAG_WEIGHTS) {\n    weight = TAG_WEIGHTS[tag.tag];\n  }\n  if (priority && priority in TAG_ALIASES) {\n    return weight + TAG_ALIASES[priority];\n  }\n  return weight;\n}\nconst SortModifiers = [{ prefix: \"before:\", offset: -1 }, { prefix: \"after:\", offset: 1 }];\n\nconst allowedMetaProperties = [\"name\", \"property\", \"http-equiv\"];\nfunction tagDedupeKey(tag) {\n  const { props, tag: tagName } = tag;\n  if (UniqueTags.has(tagName))\n    return tagName;\n  if (tagName === \"link\" && props.rel === \"canonical\")\n    return \"canonical\";\n  if (props.charset)\n    return \"charset\";\n  if (props.id) {\n    return `${tagName}:id:${props.id}`;\n  }\n  for (const n of allowedMetaProperties) {\n    if (props[n] !== void 0) {\n      return `${tagName}:${n}:${props[n]}`;\n    }\n  }\n  return false;\n}\n\nconst sepSub = \"%separator\";\nfunction sub(p, token) {\n  let val;\n  if (token === \"s\" || token === \"pageTitle\") {\n    val = p.pageTitle;\n  } else if (token.includes(\".\")) {\n    const dotIndex = token.indexOf(\".\");\n    val = p[token.substring(0, dotIndex)]?.[token.substring(dotIndex + 1)];\n  } else {\n    val = p[token];\n  }\n  return val !== void 0 ? (val || \"\").replace(/\"/g, '\\\\\"') : void 0;\n}\nconst sepSubRe = new RegExp(`${sepSub}(?:\\\\s*${sepSub})*`, \"g\");\nfunction processTemplateParams(s, p, sep) {\n  if (typeof s !== \"string\" || !s.includes(\"%\"))\n    return s;\n  let decoded = s;\n  try {\n    decoded = decodeURI(s);\n  } catch {\n  }\n  const tokens = decoded.match(/%\\w+(?:\\.\\w+)?/g);\n  if (!tokens) {\n    return s;\n  }\n  const hasSepSub = s.includes(sepSub);\n  s = s.replace(/%\\w+(?:\\.\\w+)?/g, (token) => {\n    if (token === sepSub || !tokens.includes(token)) {\n      return token;\n    }\n    const re = sub(p, token.slice(1));\n    return re !== void 0 ? re : token;\n  }).trim();\n  if (hasSepSub) {\n    if (s.endsWith(sepSub))\n      s = s.slice(0, -sepSub.length);\n    if (s.startsWith(sepSub))\n      s = s.slice(sepSub.length);\n    s = s.replace(sepSubRe, sep).trim();\n  }\n  return s;\n}\n\nfunction resolveTitleTemplate(template, title) {\n  if (template == null)\n    return title || null;\n  if (typeof template === \"function\")\n    return template(title);\n  return template;\n}\n\nexport { HasElementTags, IsBrowser, NetworkEvents, ScriptNetworkEvents, SelfClosingTags, SortModifiers, TAG_ALIASES, TAG_WEIGHTS, TagConfigKeys, TagEntityBits, TagsWithInnerContent, UniqueTags, ValidHeadTags, asArray$1 as asArray, composableNames, defineHeadPlugin, hashCode, hashTag, normaliseEntryTags, normaliseProps, normaliseStyleClassProps, normaliseTag, packMeta, processTemplateParams, resolveMetaKeyType, resolveMetaKeyValue, resolvePackedMetaObjectValue, resolveTitleTemplate, tagDedupeKey, tagWeight, thenable, unpackMeta, whitelistSafeInput };\n","import { HasElementTags, hashTag, normaliseProps, tagDedupeKey, defineHeadPlugin } from '@unhead/shared';\n\nasync function renderDOMHead(head, options = {}) {\n  const dom = options.document || head.resolvedOptions.document;\n  if (!dom || !head.dirty)\n    return;\n  const beforeRenderCtx = { shouldRender: true, tags: [] };\n  await head.hooks.callHook(\"dom:beforeRender\", beforeRenderCtx);\n  if (!beforeRenderCtx.shouldRender)\n    return;\n  if (head._domUpdatePromise) {\n    return head._domUpdatePromise;\n  }\n  head._domUpdatePromise = new Promise(async (resolve) => {\n    const tags = (await head.resolveTags()).map((tag) => ({\n      tag,\n      id: HasElementTags.has(tag.tag) ? hashTag(tag) : tag.tag,\n      shouldRender: true\n    }));\n    let state = head._dom;\n    if (!state) {\n      state = {\n        elMap: { htmlAttrs: dom.documentElement, bodyAttrs: dom.body }\n      };\n      const takenDedupeKeys = /* @__PURE__ */ new Set();\n      for (const key of [\"body\", \"head\"]) {\n        const children = dom[key]?.children;\n        for (const c of children) {\n          const tag = c.tagName.toLowerCase();\n          if (!HasElementTags.has(tag)) {\n            continue;\n          }\n          const t = {\n            tag,\n            props: await normaliseProps(\n              c.getAttributeNames().reduce((props, name) => ({ ...props, [name]: c.getAttribute(name) }), {})\n            ),\n            innerHTML: c.innerHTML\n          };\n          const dedupeKey = tagDedupeKey(t);\n          let d = dedupeKey;\n          let i = 1;\n          while (d && takenDedupeKeys.has(d))\n            d = `${dedupeKey}:${i++}`;\n          if (d) {\n            t._d = d;\n            takenDedupeKeys.add(d);\n          }\n          state.elMap[c.getAttribute(\"data-hid\") || hashTag(t)] = c;\n        }\n      }\n    }\n    state.pendingSideEffects = { ...state.sideEffects };\n    state.sideEffects = {};\n    function track(id, scope, fn) {\n      const k = `${id}:${scope}`;\n      state.sideEffects[k] = fn;\n      delete state.pendingSideEffects[k];\n    }\n    function trackCtx({ id, $el, tag }) {\n      const isAttrTag = tag.tag.endsWith(\"Attrs\");\n      state.elMap[id] = $el;\n      if (!isAttrTag) {\n        if (tag.textContent && tag.textContent !== $el.textContent) {\n          $el.textContent = tag.textContent;\n        }\n        if (tag.innerHTML && tag.innerHTML !== $el.innerHTML) {\n          $el.innerHTML = tag.innerHTML;\n        }\n        track(id, \"el\", () => {\n          state.elMap[id]?.remove();\n          delete state.elMap[id];\n        });\n      }\n      if (tag._eventHandlers) {\n        for (const k in tag._eventHandlers) {\n          if (!Object.prototype.hasOwnProperty.call(tag._eventHandlers, k)) {\n            continue;\n          }\n          if ($el.getAttribute(`data-${k}`) !== \"\") {\n            (tag.tag === \"bodyAttrs\" ? dom.defaultView : $el).addEventListener(\n              // onload -> load\n              k.substring(2),\n              tag._eventHandlers[k].bind($el)\n            );\n            $el.setAttribute(`data-${k}`, \"\");\n          }\n        }\n      }\n      for (const k in tag.props) {\n        if (!Object.prototype.hasOwnProperty.call(tag.props, k)) {\n          continue;\n        }\n        const value = tag.props[k];\n        const ck = `attr:${k}`;\n        if (k === \"class\") {\n          if (!value) {\n            continue;\n          }\n          for (const c of value.split(\" \")) {\n            isAttrTag && track(id, `${ck}:${c}`, () => $el.classList.remove(c));\n            !$el.classList.contains(c) && $el.classList.add(c);\n          }\n        } else if (k === \"style\") {\n          if (!value) {\n            continue;\n          }\n          for (const c of value.split(\";\")) {\n            const propIndex = c.indexOf(\":\");\n            const k2 = c.substring(0, propIndex).trim();\n            const v = c.substring(propIndex + 1).trim();\n            track(id, `${ck}:${k2}`, () => {\n              $el.style.removeProperty(k2);\n            });\n            $el.style.setProperty(k2, v);\n          }\n        } else {\n          $el.getAttribute(k) !== value && $el.setAttribute(k, value === true ? \"\" : String(value));\n          isAttrTag && track(id, ck, () => $el.removeAttribute(k));\n        }\n      }\n    }\n    const pending = [];\n    const frag = {\n      bodyClose: void 0,\n      bodyOpen: void 0,\n      head: void 0\n    };\n    for (const ctx of tags) {\n      const { tag, shouldRender, id } = ctx;\n      if (!shouldRender)\n        continue;\n      if (tag.tag === \"title\") {\n        dom.title = tag.textContent;\n        continue;\n      }\n      ctx.$el = ctx.$el || state.elMap[id];\n      if (ctx.$el) {\n        trackCtx(ctx);\n      } else if (HasElementTags.has(tag.tag)) {\n        pending.push(ctx);\n      }\n    }\n    for (const ctx of pending) {\n      const pos = ctx.tag.tagPosition || \"head\";\n      ctx.$el = dom.createElement(ctx.tag.tag);\n      trackCtx(ctx);\n      frag[pos] = frag[pos] || dom.createDocumentFragment();\n      frag[pos].appendChild(ctx.$el);\n    }\n    for (const ctx of tags)\n      await head.hooks.callHook(\"dom:renderTag\", ctx, dom, track);\n    frag.head && dom.head.appendChild(frag.head);\n    frag.bodyOpen && dom.body.insertBefore(frag.bodyOpen, dom.body.firstChild);\n    frag.bodyClose && dom.body.appendChild(frag.bodyClose);\n    for (const k in state.pendingSideEffects) {\n      state.pendingSideEffects[k]();\n    }\n    head._dom = state;\n    await head.hooks.callHook(\"dom:rendered\", { renders: tags });\n    resolve();\n  }).finally(() => {\n    head._domUpdatePromise = void 0;\n    head.dirty = false;\n  });\n  return head._domUpdatePromise;\n}\n\nfunction debouncedRenderDOMHead(head, options = {}) {\n  const fn = options.delayFn || ((fn2) => setTimeout(fn2, 10));\n  return head._domDebouncedUpdatePromise = head._domDebouncedUpdatePromise || new Promise((resolve) => fn(() => {\n    return renderDOMHead(head, options).then(() => {\n      delete head._domDebouncedUpdatePromise;\n      resolve();\n    });\n  }));\n}\n\n// @__NO_SIDE_EFFECTS__\nfunction DomPlugin(options) {\n  return defineHeadPlugin((head) => {\n    const initialPayload = head.resolvedOptions.document?.head.querySelector('script[id=\"unhead:payload\"]')?.innerHTML || false;\n    if (initialPayload) {\n      head.push(JSON.parse(initialPayload));\n    }\n    return {\n      mode: \"client\",\n      hooks: {\n        \"entries:updated\": (head2) => {\n          debouncedRenderDOMHead(head2, options);\n        }\n      }\n    };\n  });\n}\n\nexport { DomPlugin, debouncedRenderDOMHead, renderDOMHead };\n","import { DomPlugin } from '@unhead/dom';\nimport { defineHeadPlugin, tagDedupeKey, hashTag, tagWeight, HasElementTags, NetworkEvents, hashCode, SortModifiers, processTemplateParams, resolveTitleTemplate, IsBrowser, normaliseEntryTags, composableNames, whitelistSafeInput, ScriptNetworkEvents, unpackMeta } from '@unhead/shared';\nexport { composableNames } from '@unhead/shared';\nimport { createHooks } from 'hookable';\n\nconst UsesMergeStrategy = /* @__PURE__ */ new Set([\"templateParams\", \"htmlAttrs\", \"bodyAttrs\"]);\nconst DedupePlugin = defineHeadPlugin({\n  hooks: {\n    \"tag:normalise\": ({ tag }) => {\n      if (tag.props.hid) {\n        tag.key = tag.props.hid;\n        delete tag.props.hid;\n      }\n      if (tag.props.vmid) {\n        tag.key = tag.props.vmid;\n        delete tag.props.vmid;\n      }\n      if (tag.props.key) {\n        tag.key = tag.props.key;\n        delete tag.props.key;\n      }\n      const generatedKey = tagDedupeKey(tag);\n      if (generatedKey && !generatedKey.startsWith(\"meta:og:\") && !generatedKey.startsWith(\"meta:twitter:\")) {\n        delete tag.key;\n      }\n      const dedupe = generatedKey || (tag.key ? `${tag.tag}:${tag.key}` : false);\n      if (dedupe)\n        tag._d = dedupe;\n    },\n    \"tags:resolve\": (ctx) => {\n      const deduping = /* @__PURE__ */ Object.create(null);\n      for (const tag of ctx.tags) {\n        const dedupeKey = (tag.key ? `${tag.tag}:${tag.key}` : tag._d) || hashTag(tag);\n        const dupedTag = deduping[dedupeKey];\n        if (dupedTag) {\n          let strategy = tag?.tagDuplicateStrategy;\n          if (!strategy && UsesMergeStrategy.has(tag.tag))\n            strategy = \"merge\";\n          if (strategy === \"merge\") {\n            const oldProps = dupedTag.props;\n            if (oldProps.style && tag.props.style) {\n              if (oldProps.style[oldProps.style.length - 1] !== \";\") {\n                oldProps.style += \";\";\n              }\n              tag.props.style = `${oldProps.style} ${tag.props.style}`;\n            }\n            if (oldProps.class && tag.props.class) {\n              tag.props.class = `${oldProps.class} ${tag.props.class}`;\n            } else if (oldProps.class) {\n              tag.props.class = oldProps.class;\n            }\n            deduping[dedupeKey].props = {\n              ...oldProps,\n              ...tag.props\n            };\n            continue;\n          } else if (tag._e === dupedTag._e) {\n            dupedTag._duped = dupedTag._duped || [];\n            tag._d = `${dupedTag._d}:${dupedTag._duped.length + 1}`;\n            dupedTag._duped.push(tag);\n            continue;\n          } else if (tagWeight(tag) > tagWeight(dupedTag)) {\n            continue;\n          }\n        }\n        const hasProps = tag.innerHTML || tag.textContent || Object.keys(tag.props).length !== 0;\n        if (!hasProps && HasElementTags.has(tag.tag)) {\n          delete deduping[dedupeKey];\n          continue;\n        }\n        deduping[dedupeKey] = tag;\n      }\n      const newTags = [];\n      for (const key in deduping) {\n        const tag = deduping[key];\n        const dupes = tag._duped;\n        newTags.push(tag);\n        if (dupes) {\n          delete tag._duped;\n          newTags.push(...dupes);\n        }\n      }\n      ctx.tags = newTags;\n      ctx.tags = ctx.tags.filter((t) => !(t.tag === \"meta\" && (t.props.name || t.props.property) && !t.props.content));\n    }\n  }\n});\n\nconst ValidEventTags = /* @__PURE__ */ new Set([\"script\", \"link\", \"bodyAttrs\"]);\nconst EventHandlersPlugin = defineHeadPlugin((head) => ({\n  hooks: {\n    \"tags:resolve\": (ctx) => {\n      for (const tag of ctx.tags) {\n        if (!ValidEventTags.has(tag.tag)) {\n          continue;\n        }\n        const props = tag.props;\n        for (const key in props) {\n          if (key[0] !== \"o\" || key[1] !== \"n\") {\n            continue;\n          }\n          if (!Object.prototype.hasOwnProperty.call(props, key)) {\n            continue;\n          }\n          const value = props[key];\n          if (typeof value !== \"function\") {\n            continue;\n          }\n          if (head.ssr && NetworkEvents.has(key)) {\n            props[key] = `this.dataset.${key}fired = true`;\n          } else {\n            delete props[key];\n          }\n          tag._eventHandlers = tag._eventHandlers || {};\n          tag._eventHandlers[key] = value;\n        }\n        if (head.ssr && tag._eventHandlers && (tag.props.src || tag.props.href)) {\n          tag.key = tag.key || hashCode(tag.props.src || tag.props.href);\n        }\n      }\n    },\n    \"dom:renderTag\": ({ $el, tag }) => {\n      const dataset = $el?.dataset;\n      if (!dataset) {\n        return;\n      }\n      for (const k in dataset) {\n        if (!k.endsWith(\"fired\")) {\n          continue;\n        }\n        const ek = k.slice(0, -5);\n        if (!NetworkEvents.has(ek)) {\n          continue;\n        }\n        tag._eventHandlers?.[ek]?.call($el, new Event(ek.substring(2)));\n      }\n    }\n  }\n}));\n\nconst DupeableTags = /* @__PURE__ */ new Set([\"link\", \"style\", \"script\", \"noscript\"]);\nconst HashKeyedPlugin = defineHeadPlugin({\n  hooks: {\n    \"tag:normalise\": ({ tag }) => {\n      if (tag.key && DupeableTags.has(tag.tag)) {\n        tag.props[\"data-hid\"] = tag._h = hashCode(tag.key);\n      }\n    }\n  }\n});\n\nconst PayloadPlugin = defineHeadPlugin({\n  mode: \"server\",\n  hooks: {\n    \"tags:beforeResolve\": (ctx) => {\n      const payload = {};\n      let hasPayload = false;\n      for (const tag of ctx.tags) {\n        if (tag._m !== \"server\" || tag.tag !== \"titleTemplate\" && tag.tag !== \"templateParams\" && tag.tag !== \"title\") {\n          continue;\n        }\n        payload[tag.tag] = tag.tag === \"title\" || tag.tag === \"titleTemplate\" ? tag.textContent : tag.props;\n        hasPayload = true;\n      }\n      if (hasPayload) {\n        ctx.tags.push({\n          tag: \"script\",\n          innerHTML: JSON.stringify(payload),\n          props: { id: \"unhead:payload\", type: \"application/json\" }\n        });\n      }\n    }\n  }\n});\n\nconst SortPlugin = defineHeadPlugin({\n  hooks: {\n    \"tags:resolve\": (ctx) => {\n      for (const tag of ctx.tags) {\n        if (typeof tag.tagPriority !== \"string\") {\n          continue;\n        }\n        for (const { prefix, offset } of SortModifiers) {\n          if (!tag.tagPriority.startsWith(prefix)) {\n            continue;\n          }\n          const key = tag.tagPriority.substring(prefix.length);\n          const position = ctx.tags.find((tag2) => tag2._d === key)?._p;\n          if (position !== void 0) {\n            tag._p = position + offset;\n            break;\n          }\n        }\n      }\n      ctx.tags.sort((a, b) => {\n        const aWeight = tagWeight(a);\n        const bWeight = tagWeight(b);\n        if (aWeight < bWeight) {\n          return -1;\n        } else if (aWeight > bWeight) {\n          return 1;\n        }\n        return a._p - b._p;\n      });\n    }\n  }\n});\n\nconst SupportedAttrs = {\n  meta: \"content\",\n  link: \"href\",\n  htmlAttrs: \"lang\"\n};\nconst contentAttrs = [\"innerHTML\", \"textContent\"];\nconst TemplateParamsPlugin = defineHeadPlugin((head) => ({\n  hooks: {\n    \"tags:resolve\": (ctx) => {\n      const { tags } = ctx;\n      let templateParams;\n      for (let i = 0; i < tags.length; i += 1) {\n        const tag = tags[i];\n        if (tag.tag !== \"templateParams\") {\n          continue;\n        }\n        templateParams = ctx.tags.splice(i, 1)[0].props;\n        i -= 1;\n      }\n      const params = templateParams || {};\n      const sep = params.separator || \"|\";\n      delete params.separator;\n      params.pageTitle = processTemplateParams(\n        // find templateParams\n        params.pageTitle || tags.find((tag) => tag.tag === \"title\")?.textContent || \"\",\n        params,\n        sep\n      );\n      for (const tag of tags) {\n        if (tag.processTemplateParams === false) {\n          continue;\n        }\n        const v = SupportedAttrs[tag.tag];\n        if (v && typeof tag.props[v] === \"string\") {\n          tag.props[v] = processTemplateParams(tag.props[v], params, sep);\n        } else if (tag.processTemplateParams || tag.tag === \"titleTemplate\" || tag.tag === \"title\") {\n          for (const p of contentAttrs) {\n            if (typeof tag[p] === \"string\")\n              tag[p] = processTemplateParams(tag[p], params, sep);\n          }\n        }\n      }\n      head._templateParams = params;\n      head._separator = sep;\n    },\n    \"tags:afterResolve\": ({ tags }) => {\n      let title;\n      for (let i = 0; i < tags.length; i += 1) {\n        const tag = tags[i];\n        if (tag.tag === \"title\" && tag.processTemplateParams !== false) {\n          title = tag;\n        }\n      }\n      if (title?.textContent) {\n        title.textContent = processTemplateParams(title.textContent, head._templateParams, head._separator);\n      }\n    }\n  }\n}));\n\nconst TitleTemplatePlugin = defineHeadPlugin({\n  hooks: {\n    \"tags:resolve\": (ctx) => {\n      const { tags } = ctx;\n      let titleTag;\n      let titleTemplateTag;\n      for (let i = 0; i < tags.length; i += 1) {\n        const tag = tags[i];\n        if (tag.tag === \"title\") {\n          titleTag = tag;\n        } else if (tag.tag === \"titleTemplate\") {\n          titleTemplateTag = tag;\n        }\n      }\n      if (titleTemplateTag && titleTag) {\n        const newTitle = resolveTitleTemplate(\n          titleTemplateTag.textContent,\n          titleTag.textContent\n        );\n        if (newTitle !== null) {\n          titleTag.textContent = newTitle || titleTag.textContent;\n        } else {\n          ctx.tags.splice(ctx.tags.indexOf(titleTag), 1);\n        }\n      } else if (titleTemplateTag) {\n        const newTitle = resolveTitleTemplate(\n          titleTemplateTag.textContent\n        );\n        if (newTitle !== null) {\n          titleTemplateTag.textContent = newTitle;\n          titleTemplateTag.tag = \"title\";\n          titleTemplateTag = void 0;\n        }\n      }\n      if (titleTemplateTag) {\n        ctx.tags.splice(ctx.tags.indexOf(titleTemplateTag), 1);\n      }\n    }\n  }\n});\n\nconst XSSPlugin = defineHeadPlugin({\n  hooks: {\n    \"tags:afterResolve\": (ctx) => {\n      for (const tag of ctx.tags) {\n        if (typeof tag.innerHTML === \"string\") {\n          if (tag.innerHTML && (tag.props.type === \"application/ld+json\" || tag.props.type === \"application/json\")) {\n            tag.innerHTML = tag.innerHTML.replace(/</g, \"\\\\u003C\");\n          } else {\n            tag.innerHTML = tag.innerHTML.replace(new RegExp(`</${tag.tag}`, \"g\"), `<\\\\/${tag.tag}`);\n          }\n        }\n      }\n    }\n  }\n});\n\nlet activeHead;\n// @__NO_SIDE_EFFECTS__\nfunction createHead(options = {}) {\n  const head = createHeadCore(options);\n  head.use(DomPlugin());\n  return activeHead = head;\n}\n// @__NO_SIDE_EFFECTS__\nfunction createServerHead(options = {}) {\n  return activeHead = createHeadCore(options);\n}\nfunction filterMode(mode, ssr) {\n  return !mode || mode === \"server\" && ssr || mode === \"client\" && !ssr;\n}\nfunction createHeadCore(options = {}) {\n  const hooks = createHooks();\n  hooks.addHooks(options.hooks || {});\n  options.document = options.document || (IsBrowser ? document : void 0);\n  const ssr = !options.document;\n  const updated = () => {\n    head.dirty = true;\n    hooks.callHook(\"entries:updated\", head);\n  };\n  let entryCount = 0;\n  let entries = [];\n  const plugins = [];\n  const head = {\n    plugins,\n    dirty: false,\n    resolvedOptions: options,\n    hooks,\n    headEntries() {\n      return entries;\n    },\n    use(p) {\n      const plugin = typeof p === \"function\" ? p(head) : p;\n      if (!plugin.key || !plugins.some((p2) => p2.key === plugin.key)) {\n        plugins.push(plugin);\n        filterMode(plugin.mode, ssr) && hooks.addHooks(plugin.hooks || {});\n      }\n    },\n    push(input, entryOptions) {\n      delete entryOptions?.head;\n      const entry = {\n        _i: entryCount++,\n        input,\n        ...entryOptions\n      };\n      if (filterMode(entry.mode, ssr)) {\n        entries.push(entry);\n        updated();\n      }\n      return {\n        dispose() {\n          entries = entries.filter((e) => e._i !== entry._i);\n          updated();\n        },\n        // a patch is the same as creating a new entry, just a nice DX\n        patch(input2) {\n          for (const e of entries) {\n            if (e._i === entry._i) {\n              e.input = entry.input = input2;\n            }\n          }\n          updated();\n        }\n      };\n    },\n    async resolveTags() {\n      const resolveCtx = { tags: [], entries: [...entries] };\n      await hooks.callHook(\"entries:resolve\", resolveCtx);\n      for (const entry of resolveCtx.entries) {\n        const resolved = entry.resolvedInput || entry.input;\n        entry.resolvedInput = await (entry.transform ? entry.transform(resolved) : resolved);\n        if (entry.resolvedInput) {\n          for (const tag of await normaliseEntryTags(entry)) {\n            const tagCtx = { tag, entry, resolvedOptions: head.resolvedOptions };\n            await hooks.callHook(\"tag:normalise\", tagCtx);\n            resolveCtx.tags.push(tagCtx.tag);\n          }\n        }\n      }\n      await hooks.callHook(\"tags:beforeResolve\", resolveCtx);\n      await hooks.callHook(\"tags:resolve\", resolveCtx);\n      await hooks.callHook(\"tags:afterResolve\", resolveCtx);\n      return resolveCtx.tags;\n    },\n    ssr\n  };\n  [\n    DedupePlugin,\n    PayloadPlugin,\n    EventHandlersPlugin,\n    HashKeyedPlugin,\n    SortPlugin,\n    TemplateParamsPlugin,\n    TitleTemplatePlugin,\n    XSSPlugin,\n    ...options?.plugins || []\n  ].forEach((p) => head.use(p));\n  head.hooks.callHook(\"init\", head);\n  return head;\n}\n\nconst unheadComposablesImports = [\n  {\n    from: \"unhead\",\n    imports: composableNames\n  }\n];\n\nfunction getActiveHead() {\n  return activeHead;\n}\n\nfunction useHead(input, options = {}) {\n  const head = options.head || getActiveHead();\n  return head?.push(input, options);\n}\n\nfunction useHeadSafe(input, options) {\n  return useHead(input, {\n    ...options,\n    transform: whitelistSafeInput\n  });\n}\n\nconst ScriptProxyTarget = Symbol(\"ScriptProxyTarget\");\nfunction scriptProxy() {\n}\nscriptProxy[ScriptProxyTarget] = true;\nfunction resolveScriptKey(input) {\n  return input.key || hashCode(input.src || (typeof input.innerHTML === \"string\" ? input.innerHTML : \"\"));\n}\nfunction useScript(_input, _options) {\n  const input = typeof _input === \"string\" ? { src: _input } : _input;\n  const options = _options || {};\n  const head = options.head || getActiveHead();\n  if (!head)\n    throw new Error(\"Missing Unhead context.\");\n  const id = resolveScriptKey(input);\n  const prevScript = head._scripts?.[id];\n  if (prevScript) {\n    prevScript.setupTriggerHandler(options.trigger);\n    return prevScript;\n  }\n  options.beforeInit?.();\n  const syncStatus = (s) => {\n    script.status = s;\n    head.hooks.callHook(`script:updated`, hookCtx);\n  };\n  ScriptNetworkEvents.forEach((fn) => {\n    const _fn = typeof input[fn] === \"function\" ? input[fn].bind(options.eventContext) : null;\n    input[fn] = (e) => {\n      syncStatus(fn === \"onload\" ? \"loaded\" : fn === \"onerror\" ? \"error\" : \"loading\");\n      _fn?.(e);\n    };\n  });\n  const _cbs = { loaded: [], error: [] };\n  const _registerCb = (key, cb) => {\n    if (_cbs[key]) {\n      const i = _cbs[key].push(cb);\n      return () => _cbs[key]?.splice(i - 1, 1);\n    }\n    cb(script.instance);\n    return () => {\n    };\n  };\n  const loadPromise = new Promise((resolve, reject) => {\n    if (head.ssr)\n      return;\n    const emit = (api) => requestAnimationFrame(() => resolve(api));\n    const _ = head.hooks.hook(\"script:updated\", ({ script: script2 }) => {\n      const status = script2.status;\n      if (script2.id === id && (status === \"loaded\" || status === \"error\")) {\n        if (status === \"loaded\") {\n          if (typeof options.use === \"function\") {\n            const api = options.use();\n            if (api) {\n              emit(api);\n            }\n          } else {\n            emit({});\n          }\n        } else if (status === \"error\") {\n          reject(new Error(`Failed to load script: ${input.src}`));\n        }\n        _();\n      }\n    });\n  });\n  const script = Object.assign(loadPromise, {\n    instance: !head.ssr && options?.use?.() || null,\n    proxy: null,\n    id,\n    status: \"awaitingLoad\",\n    remove() {\n      if (script.entry) {\n        script.entry.dispose();\n        syncStatus(\"removed\");\n        delete head._scripts?.[id];\n        return true;\n      }\n      return false;\n    },\n    load(cb) {\n      script._triggerAbortController?.abort();\n      script._triggerPromises = [];\n      if (!script.entry) {\n        syncStatus(\"loading\");\n        const defaults = {\n          defer: true,\n          fetchpriority: \"low\"\n        };\n        if (input.src && (input.src.startsWith(\"http\") || input.src.startsWith(\"//\"))) {\n          defaults.crossorigin = \"anonymous\";\n          defaults.referrerpolicy = \"no-referrer\";\n        }\n        script.entry = head.push({\n          script: [{ ...defaults, ...input, key: `script.${id}` }]\n        }, options);\n      }\n      if (cb)\n        _registerCb(\"loaded\", cb);\n      return loadPromise;\n    },\n    onLoaded(cb) {\n      return _registerCb(\"loaded\", cb);\n    },\n    onError(cb) {\n      return _registerCb(\"error\", cb);\n    },\n    setupTriggerHandler(trigger) {\n      if (script.status !== \"awaitingLoad\") {\n        return;\n      }\n      if ((typeof trigger === \"undefined\" || trigger === \"client\") && !head.ssr || trigger === \"server\") {\n        script.load();\n      } else if (trigger instanceof Promise) {\n        script._triggerAbortController = script._triggerAbortController || new AbortController();\n        script._triggerPromises = script._triggerPromises || [];\n        const idx = script._triggerPromises.push(Promise.race([\n          trigger.then((v) => typeof v === \"undefined\" || v ? script.load : void 0),\n          new Promise((resolve) => {\n            script._triggerAbortController.signal.addEventListener(\"abort\", () => resolve());\n          })\n        ]).then((res2) => {\n          res2?.();\n          script._triggerPromises?.splice(idx, 1);\n        }));\n      } else if (typeof trigger === \"function\") {\n        trigger(script.load);\n      }\n    },\n    _cbs\n  });\n  loadPromise.then((api) => {\n    script.instance = api;\n    if (_cbs.loaded)\n      _cbs.loaded.forEach((cb) => cb(api));\n    _cbs.loaded = null;\n  }).catch((err) => {\n    if (_cbs.error)\n      _cbs.error.forEach((cb) => cb(err));\n    _cbs.error = null;\n  });\n  const hookCtx = { script };\n  script.setupTriggerHandler(options.trigger);\n  script.$script = script;\n  const proxyChain = (instance, accessor, accessors) => {\n    return new Proxy((!accessor ? instance : instance?.[accessor]) || scriptProxy, {\n      get(_, k, r) {\n        head.hooks.callHook(\"script:instance-fn\", { script, fn: k, exists: k in _ });\n        if (!accessor) {\n          const stub = options.stub?.({ script, fn: k });\n          if (stub)\n            return stub;\n        }\n        if (_ && k in _ && typeof _[k] !== \"undefined\") {\n          return Reflect.get(_, k, r);\n        }\n        if (k === Symbol.iterator) {\n          return [][Symbol.iterator];\n        }\n        return proxyChain(accessor ? instance?.[accessor] : instance, k, accessors || [k]);\n      },\n      async apply(_, _this, args) {\n        if (head.ssr && _[ScriptProxyTarget])\n          return;\n        let instance2;\n        const access = (fn2) => {\n          instance2 = fn2 || instance2;\n          for (let i = 0; i < (accessors || []).length; i++) {\n            const k = (accessors || [])[i];\n            fn2 = fn2?.[k];\n          }\n          return fn2;\n        };\n        const fn = access(script.instance) || access(await loadPromise);\n        return typeof fn === \"function\" ? Reflect.apply(fn, instance2, args) : fn;\n      }\n    });\n  };\n  script.proxy = proxyChain(script.instance);\n  const res = new Proxy(script, {\n    get(_, k) {\n      const target = k in script || String(k)[0] === \"_\" ? script : script.proxy;\n      if (k === \"then\" || k === \"catch\") {\n        return script[k].bind(script);\n      }\n      return Reflect.get(target, k, target);\n    }\n  });\n  head._scripts = Object.assign(head._scripts || {}, { [id]: res });\n  return res;\n}\n\nfunction useSeoMeta(input, options) {\n  const { title, titleTemplate, ...meta } = input;\n  return useHead({\n    title,\n    titleTemplate,\n    // we need to input the meta so the reactivity will be resolved\n    // @ts-expect-error runtime type\n    _flatMeta: meta\n  }, {\n    ...options,\n    transform(t) {\n      const meta2 = unpackMeta({ ...t._flatMeta });\n      delete t._flatMeta;\n      return {\n        // @ts-expect-error runtime type\n        ...t,\n        meta: meta2\n      };\n    }\n  });\n}\n\nfunction useServerHead(input, options = {}) {\n  return useHead(input, { ...options, mode: \"server\" });\n}\n\nfunction useServerHeadSafe(input, options = {}) {\n  return useHeadSafe(input, { ...options, mode: \"server\" });\n}\n\nfunction useServerSeoMeta(input, options) {\n  return useSeoMeta(input, {\n    ...options,\n    mode: \"server\"\n  });\n}\n\nconst importRe = /@import/;\n// @__NO_SIDE_EFFECTS__\nfunction CapoPlugin(options) {\n  return defineHeadPlugin({\n    hooks: {\n      \"tags:beforeResolve\": ({ tags }) => {\n        for (const tag of tags) {\n          if (tag.tagPosition && tag.tagPosition !== \"head\")\n            continue;\n          tag.tagPriority = tag.tagPriority || tagWeight(tag);\n          if (tag.tagPriority !== 100)\n            continue;\n          const isTruthy = (val) => val === \"\" || val === true;\n          const isScript = tag.tag === \"script\";\n          const isLink = tag.tag === \"link\";\n          if (isScript && isTruthy(tag.props.async)) {\n            tag.tagPriority = 30;\n          } else if (tag.tag === \"style\" && tag.innerHTML && importRe.test(tag.innerHTML)) {\n            tag.tagPriority = 40;\n          } else if (isScript && tag.props.src && !isTruthy(tag.props.defer) && !isTruthy(tag.props.async) && tag.props.type !== \"module\" && !tag.props.type?.endsWith(\"json\")) {\n            tag.tagPriority = 50;\n          } else if (isLink && tag.props.rel === \"stylesheet\" || tag.tag === \"style\") {\n            tag.tagPriority = 60;\n          } else if (isLink && (tag.props.rel === \"preload\" || tag.props.rel === \"modulepreload\")) {\n            tag.tagPriority = 70;\n          } else if (isScript && isTruthy(tag.props.defer) && tag.props.src && !isTruthy(tag.props.async)) {\n            tag.tagPriority = 80;\n          } else if (isLink && (tag.props.rel === \"prefetch\" || tag.props.rel === \"dns-prefetch\" || tag.props.rel === \"prerender\")) {\n            tag.tagPriority = 90;\n          }\n        }\n        options?.track && tags.push({\n          tag: \"htmlAttrs\",\n          props: {\n            \"data-capo\": \"\"\n          }\n        });\n      }\n    }\n  });\n}\n\n// @__NO_SIDE_EFFECTS__\nfunction HashHydrationPlugin() {\n  return defineHeadPlugin({});\n}\n\nexport { CapoPlugin, HashHydrationPlugin, createHead, createHeadCore, createServerHead, getActiveHead, resolveScriptKey, unheadComposablesImports, useHead, useHeadSafe, useScript, useSeoMeta, useServerHead, useServerHeadSafe, useServerSeoMeta };\n","import { createServerHead as createServerHead$1, createHead as createHead$1, getActiveHead } from 'unhead';\nimport { version, unref, nextTick, inject } from 'vue';\nimport { defineHeadPlugin } from '@unhead/shared';\n\nconst Vue3 = version[0] === \"3\";\n\nfunction resolveUnref(r) {\n  return typeof r === \"function\" ? r() : unref(r);\n}\nfunction resolveUnrefHeadInput(ref) {\n  if (ref instanceof Promise || ref instanceof Date || ref instanceof RegExp)\n    return ref;\n  const root = resolveUnref(ref);\n  if (!ref || !root)\n    return root;\n  if (Array.isArray(root))\n    return root.map((r) => resolveUnrefHeadInput(r));\n  if (typeof root === \"object\") {\n    const resolved = {};\n    for (const k in root) {\n      if (!Object.prototype.hasOwnProperty.call(root, k)) {\n        continue;\n      }\n      if (k === \"titleTemplate\" || k[0] === \"o\" && k[1] === \"n\") {\n        resolved[k] = unref(root[k]);\n        continue;\n      }\n      resolved[k] = resolveUnrefHeadInput(root[k]);\n    }\n    return resolved;\n  }\n  return root;\n}\n\nconst VueReactivityPlugin = defineHeadPlugin({\n  hooks: {\n    \"entries:resolve\": (ctx) => {\n      for (const entry of ctx.entries)\n        entry.resolvedInput = resolveUnrefHeadInput(entry.input);\n    }\n  }\n});\n\nconst headSymbol = \"usehead\";\nfunction vueInstall(head) {\n  const plugin = {\n    install(app) {\n      if (Vue3) {\n        app.config.globalProperties.$unhead = head;\n        app.config.globalProperties.$head = head;\n        app.provide(headSymbol, head);\n      }\n    }\n  };\n  return plugin.install;\n}\nfunction createServerHead(options = {}) {\n  const head = createServerHead$1(options);\n  head.use(VueReactivityPlugin);\n  head.install = vueInstall(head);\n  return head;\n}\nfunction createHead(options = {}) {\n  options.domDelayFn = options.domDelayFn || ((fn) => nextTick(() => setTimeout(() => fn(), 0)));\n  const head = createHead$1(options);\n  head.use(VueReactivityPlugin);\n  head.install = vueInstall(head);\n  return head;\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__unhead_injection_handler__\";\nfunction setHeadInjectionHandler(handler) {\n  _global[globalKey] = handler;\n}\nfunction injectHead() {\n  if (globalKey in _global) {\n    return _global[globalKey]();\n  }\n  const head = inject(headSymbol);\n  if (!head && process.env.NODE_ENV !== \"production\")\n    console.warn(\"Unhead is missing Vue context, falling back to shared context. This may have unexpected results.\");\n  return head || getActiveHead();\n}\n\nexport { Vue3 as V, createServerHead as a, createHead as c, headSymbol as h, injectHead as i, resolveUnrefHeadInput as r, setHeadInjectionHandler as s };\n","import { ref, watchEffect, watch, getCurrentInstance, onBeforeUnmount, onDeactivated, onActivated } from 'vue';\nimport { i as injectHead, r as resolveUnrefHeadInput } from './vue.f49591ad.mjs';\n\nfunction useHead(input, options = {}) {\n  const head = options.head || injectHead();\n  if (head) {\n    if (!head.ssr)\n      return clientUseHead(head, input, options);\n    return head.push(input, options);\n  }\n}\nfunction clientUseHead(head, input, options = {}) {\n  const deactivated = ref(false);\n  const resolvedInput = ref({});\n  watchEffect(() => {\n    resolvedInput.value = deactivated.value ? {} : resolveUnrefHeadInput(input);\n  });\n  const entry = head.push(resolvedInput.value, options);\n  watch(resolvedInput, (e) => {\n    entry.patch(e);\n  });\n  const vm = getCurrentInstance();\n  if (vm) {\n    onBeforeUnmount(() => {\n      entry.dispose();\n    });\n    onDeactivated(() => {\n      deactivated.value = true;\n    });\n    onActivated(() => {\n      deactivated.value = false;\n    });\n  }\n  return entry;\n}\n\nexport { useHead as u };\n","import { createMatcherFromExport, createRouter as createRadixRouter, toRouteMatcher } from \"radix3\";\nimport { defu } from \"defu\";\nimport { useRuntimeConfig } from \"../nuxt.js\";\nimport { appManifest as isAppManifestEnabled } from \"#build/nuxt.config.mjs\";\nimport { buildAssetsURL } from \"#internal/nuxt/paths\";\nlet manifest;\nlet matcher;\nfunction fetchManifest() {\n  if (!isAppManifestEnabled) {\n    throw new Error(\"[nuxt] app manifest should be enabled with `experimental.appManifest`\");\n  }\n  manifest = $fetch(buildAssetsURL(`builds/meta/${useRuntimeConfig().app.buildId}.json`), {\n    responseType: \"json\"\n  });\n  manifest.then((m) => {\n    matcher = createMatcherFromExport(m.matcher);\n  }).catch((e) => {\n    console.error(\"[nuxt] Error fetching app manifest.\", e);\n  });\n  return manifest;\n}\nexport function getAppManifest() {\n  if (!isAppManifestEnabled) {\n    throw new Error(\"[nuxt] app manifest should be enabled with `experimental.appManifest`\");\n  }\n  return manifest || fetchManifest();\n}\nexport async function getRouteRules(url) {\n  if (import.meta.server) {\n    const _routeRulesMatcher = toRouteMatcher(\n      createRadixRouter({ routes: useRuntimeConfig().nitro.routeRules })\n    );\n    return defu({}, ..._routeRulesMatcher.matchAll(url).reverse());\n  }\n  await getAppManifest();\n  if (!matcher) {\n    console.error(\"[nuxt] Error creating app manifest matcher.\", matcher);\n    return {};\n  }\n  try {\n    return defu({}, ...matcher.matchAll(url).reverse());\n  } catch (e) {\n    console.error(\"[nuxt] Error matching route rules.\", e);\n    return {};\n  }\n}\n","import { hasProtocol, joinURL, withoutTrailingSlash } from \"ufo\";\nimport { parse } from \"devalue\";\nimport { useHead } from \"@unhead/vue\";\nimport { getCurrentInstance, onServerPrefetch } from \"vue\";\nimport { useNuxtApp, useRuntimeConfig } from \"../nuxt.js\";\nimport { useRoute } from \"./router.js\";\nimport { getAppManifest, getRouteRules } from \"./manifest.js\";\nimport { appManifest, payloadExtraction, renderJsonPayloads } from \"#build/nuxt.config.mjs\";\nexport async function loadPayload(url, opts = {}) {\n  if (import.meta.server || !payloadExtraction) {\n    return null;\n  }\n  const payloadURL = await _getPayloadURL(url, opts);\n  const nuxtApp = useNuxtApp();\n  const cache = nuxtApp._payloadCache = nuxtApp._payloadCache || {};\n  if (payloadURL in cache) {\n    return cache[payloadURL];\n  }\n  cache[payloadURL] = isPrerendered(url).then((prerendered) => {\n    if (!prerendered) {\n      cache[payloadURL] = null;\n      return null;\n    }\n    return _importPayload(payloadURL).then((payload) => {\n      if (payload) {\n        return payload;\n      }\n      delete cache[payloadURL];\n      return null;\n    });\n  });\n  return cache[payloadURL];\n}\nexport function preloadPayload(url, opts = {}) {\n  const nuxtApp = useNuxtApp();\n  const promise = _getPayloadURL(url, opts).then((payloadURL) => {\n    nuxtApp.runWithContext(() => useHead({\n      link: [\n        { rel: \"modulepreload\", href: payloadURL }\n      ]\n    }));\n  });\n  if (import.meta.server) {\n    onServerPrefetch(() => promise);\n  }\n  return promise;\n}\nconst filename = renderJsonPayloads ? \"_payload.json\" : \"_payload.js\";\nasync function _getPayloadURL(url, opts = {}) {\n  const u = new URL(url, \"http://localhost\");\n  if (u.host !== \"localhost\" || hasProtocol(u.pathname, { acceptRelative: true })) {\n    throw new Error(\"Payload URL must not include hostname: \" + url);\n  }\n  const config = useRuntimeConfig();\n  const hash = opts.hash || (opts.fresh ? Date.now() : config.app.buildId);\n  const cdnURL = config.app.cdnURL;\n  const baseOrCdnURL = cdnURL && await isPrerendered(url) ? cdnURL : config.app.baseURL;\n  return joinURL(baseOrCdnURL, u.pathname, filename + (hash ? `?${hash}` : \"\"));\n}\nasync function _importPayload(payloadURL) {\n  if (import.meta.server || !payloadExtraction) {\n    return null;\n  }\n  const payloadPromise = renderJsonPayloads ? fetch(payloadURL).then((res) => res.text().then(parsePayload)) : import(\n    /* webpackIgnore: true */\n    /* @vite-ignore */\n    payloadURL\n  ).then((r) => r.default || r);\n  try {\n    return await payloadPromise;\n  } catch (err) {\n    console.warn(\"[nuxt] Cannot load payload \", payloadURL, err);\n  }\n  return null;\n}\nexport async function isPrerendered(url = useRoute().path) {\n  if (!appManifest) {\n    return !!useNuxtApp().payload.prerenderedAt;\n  }\n  url = withoutTrailingSlash(url);\n  const manifest = await getAppManifest();\n  if (manifest.prerendered.includes(url)) {\n    return true;\n  }\n  const rules = await getRouteRules(url);\n  return !!rules.prerender && !rules.redirect;\n}\nlet payloadCache = null;\nexport async function getNuxtClientPayload() {\n  if (import.meta.server) {\n    return null;\n  }\n  if (payloadCache) {\n    return payloadCache;\n  }\n  const el = document.getElementById(\"__NUXT_DATA__\");\n  if (!el) {\n    return {};\n  }\n  const inlineData = await parsePayload(el.textContent || \"\");\n  const externalData = el.dataset.src ? await _importPayload(el.dataset.src) : void 0;\n  payloadCache = {\n    ...inlineData,\n    ...externalData,\n    ...window.__NUXT__\n  };\n  return payloadCache;\n}\nexport async function parsePayload(payload) {\n  return await parse(payload, useNuxtApp()._payloadRevivers);\n}\nexport function definePayloadReducer(name, reduce) {\n  if (import.meta.server) {\n    useNuxtApp().ssrContext._payloadReducers[name] = reduce;\n  }\n}\nexport function definePayloadReviver(name, revive) {\n  if (import.meta.dev && getCurrentInstance()) {\n    console.warn(\"[nuxt] [definePayloadReviver] This function must be called in a Nuxt plugin that is `unshift`ed to the beginning of the Nuxt plugins array.\");\n  }\n  if (import.meta.client) {\n    useNuxtApp()._payloadRevivers[name] = revive;\n  }\n}\n","import { reactive, ref, shallowReactive, shallowRef } from \"vue\";\nimport destr from \"destr\";\nimport { definePayloadReviver, getNuxtClientPayload } from \"../composables/payload.js\";\nimport { createError } from \"../composables/error.js\";\nimport { defineNuxtPlugin, useNuxtApp } from \"../nuxt.js\";\nimport { componentIslands } from \"#build/nuxt.config.mjs\";\nconst revivers = {\n  NuxtError: (data) => createError(data),\n  EmptyShallowRef: (data) => shallowRef(data === \"_\" ? void 0 : data === \"0n\" ? BigInt(0) : destr(data)),\n  EmptyRef: (data) => ref(data === \"_\" ? void 0 : data === \"0n\" ? BigInt(0) : destr(data)),\n  ShallowRef: (data) => shallowRef(data),\n  ShallowReactive: (data) => shallowReactive(data),\n  Ref: (data) => ref(data),\n  Reactive: (data) => reactive(data)\n};\nif (componentIslands) {\n  revivers.Island = ({ key, params, result }) => {\n    const nuxtApp = useNuxtApp();\n    if (!nuxtApp.isHydrating) {\n      nuxtApp.payload.data[key] = nuxtApp.payload.data[key] || $fetch(`/__nuxt_island/${key}.json`, {\n        responseType: \"json\",\n        ...params ? { params } : {}\n      }).then((r) => {\n        nuxtApp.payload.data[key] = r;\n        return r;\n      });\n    }\n    return {\n      html: \"\",\n      state: {},\n      head: {\n        link: [],\n        style: []\n      },\n      ...result\n    };\n  };\n}\nexport default defineNuxtPlugin({\n  name: \"nuxt:revive-payload:client\",\n  order: -30,\n  async setup(nuxtApp) {\n    for (const reviver in revivers) {\n      definePayloadReviver(reviver, revivers[reviver]);\n    }\n    Object.assign(nuxtApp.payload, await nuxtApp.runWithContext(getNuxtClientPayload));\n    window.__NUXT__ = nuxtApp.payload;\n  }\n});\n","import { CapoPlugin } from \"/myapp/node_modules/@unhead/vue/dist/index.mjs\";\nexport default import.meta.server ? [CapoPlugin({ track: true })] : [];","import { createHead as createClientHead, setHeadInjectionHandler } from \"@unhead/vue\";\nimport { renderDOMHead } from \"@unhead/dom\";\nimport { defineNuxtPlugin, useNuxtApp } from \"#app/nuxt\";\nimport unheadPlugins from \"#build/unhead-plugins.mjs\";\nexport default defineNuxtPlugin({\n  name: \"nuxt:head\",\n  enforce: \"pre\",\n  setup(nuxtApp) {\n    const head = import.meta.server ? nuxtApp.ssrContext.head : createClientHead({\n      plugins: unheadPlugins\n    });\n    setHeadInjectionHandler(\n      // need a fresh instance of the nuxt app to avoid parallel requests interfering with each other\n      () => useNuxtApp().vueApp._context.provides.usehead\n    );\n    nuxtApp.vueApp.use(head);\n    if (import.meta.client) {\n      let pauseDOMUpdates = true;\n      const syncHead = async () => {\n        pauseDOMUpdates = false;\n        await renderDOMHead(head);\n      };\n      head.hooks.hook(\"dom:beforeRender\", (context) => {\n        context.shouldRender = !pauseDOMUpdates;\n      });\n      nuxtApp.hooks.hook(\"page:start\", () => {\n        pauseDOMUpdates = true;\n      });\n      nuxtApp.hooks.hook(\"page:finish\", () => {\n        if (!nuxtApp.isHydrating) {\n          syncHead();\n        }\n      });\n      nuxtApp.hooks.hook(\"app:error\", syncHead);\n      nuxtApp.hooks.hook(\"app:suspense:resolve\", syncHead);\n    }\n  }\n});\n","export function klona(x) {\n\tif (typeof x !== 'object') return x;\n\n\tvar k, tmp, str=Object.prototype.toString.call(x);\n\n\tif (str === '[object Object]') {\n\t\tif (x.constructor !== Object && typeof x.constructor === 'function') {\n\t\t\ttmp = new x.constructor();\n\t\t\tfor (k in x) {\n\t\t\t\tif (x.hasOwnProperty(k) && tmp[k] !== x[k]) {\n\t\t\t\t\ttmp[k] = klona(x[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\ttmp = {}; // null\n\t\t\tfor (k in x) {\n\t\t\t\tif (k === '__proto__') {\n\t\t\t\t\tObject.defineProperty(tmp, k, {\n\t\t\t\t\t\tvalue: klona(x[k]),\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttmp[k] = klona(x[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn tmp;\n\t}\n\n\tif (str === '[object Array]') {\n\t\tk = x.length;\n\t\tfor (tmp=Array(k); k--;) {\n\t\t\ttmp[k] = klona(x[k]);\n\t\t}\n\t\treturn tmp;\n\t}\n\n\tif (str === '[object Set]') {\n\t\ttmp = new Set;\n\t\tx.forEach(function (val) {\n\t\t\ttmp.add(klona(val));\n\t\t});\n\t\treturn tmp;\n\t}\n\n\tif (str === '[object Map]') {\n\t\ttmp = new Map;\n\t\tx.forEach(function (val, key) {\n\t\t\ttmp.set(klona(key), klona(val));\n\t\t});\n\t\treturn tmp;\n\t}\n\n\tif (str === '[object Date]') {\n\t\treturn new Date(+x);\n\t}\n\n\tif (str === '[object RegExp]') {\n\t\ttmp = new RegExp(x.source, x.flags);\n\t\ttmp.lastIndex = x.lastIndex;\n\t\treturn tmp;\n\t}\n\n\tif (str === '[object DataView]') {\n\t\treturn new x.constructor( klona(x.buffer) );\n\t}\n\n\tif (str === '[object ArrayBuffer]') {\n\t\treturn x.slice(0);\n\t}\n\n\t// ArrayBuffer.isView(x)\n\t// ~> `new` bcuz `Buffer.slice` => ref\n\tif (str.slice(-6) === 'Array]') {\n\t\treturn new x.constructor(x);\n\t}\n\n\treturn x;\n}\n","import { setResponseStatus as _setResponseStatus, appendHeader, getRequestHeader, getRequestHeaders } from \"h3\";\nimport { getCurrentInstance } from \"vue\";\nimport { useServerHead } from \"@unhead/vue\";\nimport { useNuxtApp } from \"../nuxt.js\";\nimport { toArray } from \"../utils.js\";\nexport function useRequestEvent(nuxtApp = useNuxtApp()) {\n  return nuxtApp.ssrContext?.event;\n}\nexport function useRequestHeaders(include) {\n  if (import.meta.client) {\n    return {};\n  }\n  const event = useRequestEvent();\n  const _headers = event ? getRequestHeaders(event) : {};\n  if (!include || !event) {\n    return _headers;\n  }\n  const headers = /* @__PURE__ */ Object.create(null);\n  for (const _key of include) {\n    const key = _key.toLowerCase();\n    const header = _headers[key];\n    if (header) {\n      headers[key] = header;\n    }\n  }\n  return headers;\n}\nexport function useRequestHeader(header) {\n  if (import.meta.client) {\n    return void 0;\n  }\n  const event = useRequestEvent();\n  return event ? getRequestHeader(event, header) : void 0;\n}\nexport function useRequestFetch() {\n  if (import.meta.client) {\n    return globalThis.$fetch;\n  }\n  return useRequestEvent()?.$fetch || globalThis.$fetch;\n}\nexport function setResponseStatus(arg1, arg2, arg3) {\n  if (import.meta.client) {\n    return;\n  }\n  if (arg1 && typeof arg1 !== \"number\") {\n    return _setResponseStatus(arg1, arg2, arg3);\n  }\n  const event = useRequestEvent();\n  if (event) {\n    return _setResponseStatus(event, arg1, arg2);\n  }\n}\nexport function prerenderRoutes(path) {\n  if (!import.meta.server || !import.meta.prerender) {\n    return;\n  }\n  const paths = toArray(path);\n  appendHeader(useRequestEvent(), \"x-nitro-prerender\", paths.map((p) => encodeURIComponent(p)).join(\", \"));\n}\nconst PREHYDRATE_ATTR_KEY = \"data-prehydrate-id\";\nexport function onPrehydrate(callback, key) {\n  if (import.meta.client) {\n    return;\n  }\n  if (typeof callback !== \"string\") {\n    throw new TypeError(\"[nuxt] To transform a callback into a string, `onPrehydrate` must be processed by the Nuxt build pipeline. If it is called in a third-party library, make sure to add the library to `build.transpile`.\");\n  }\n  const vm = getCurrentInstance();\n  if (vm && key) {\n    vm.attrs[PREHYDRATE_ATTR_KEY] ||= \"\";\n    key = \":\" + key + \":\";\n    if (!vm.attrs[PREHYDRATE_ATTR_KEY].includes(key)) {\n      vm.attrs[PREHYDRATE_ATTR_KEY] += key;\n    }\n  }\n  const code = vm && key ? `document.querySelectorAll('[${PREHYDRATE_ATTR_KEY}*=${JSON.stringify(key)}]').forEach` + callback : callback + \"()\";\n  useServerHead({\n    script: [{\n      key: vm && key ? key : code,\n      tagPosition: \"bodyClose\",\n      tagPriority: \"critical\",\n      innerHTML: code\n    }]\n  });\n  return vm && key ? vm.attrs[PREHYDRATE_ATTR_KEY] : void 0;\n}\n","import { customRef, getCurrentScope, nextTick, onScopeDispose, ref, watch } from \"vue\";\nimport { parse, serialize } from \"cookie-es\";\nimport { deleteCookie, getCookie, getRequestHeader, setCookie } from \"h3\";\nimport destr from \"destr\";\nimport { isEqual } from \"ohash\";\nimport { klona } from \"klona\";\nimport { useNuxtApp } from \"../nuxt.js\";\nimport { useRequestEvent } from \"./ssr.js\";\nimport { cookieStore } from \"#build/nuxt.config.mjs\";\nconst CookieDefaults = {\n  path: \"/\",\n  watch: true,\n  decode: (val) => destr(decodeURIComponent(val)),\n  encode: (val) => encodeURIComponent(typeof val === \"string\" ? val : JSON.stringify(val))\n};\nconst store = import.meta.client && cookieStore ? window.cookieStore : void 0;\nexport function useCookie(name, _opts) {\n  const opts = { ...CookieDefaults, ..._opts };\n  const cookies = readRawCookies(opts) || {};\n  let delay;\n  if (opts.maxAge !== void 0) {\n    delay = opts.maxAge * 1e3;\n  } else if (opts.expires) {\n    delay = opts.expires.getTime() - Date.now();\n  }\n  const hasExpired = delay !== void 0 && delay <= 0;\n  const cookieValue = klona(hasExpired ? void 0 : cookies[name] ?? opts.default?.());\n  const cookie = import.meta.client && delay && !hasExpired ? cookieRef(cookieValue, delay, opts.watch && opts.watch !== \"shallow\") : ref(cookieValue);\n  if (import.meta.dev && hasExpired) {\n    console.warn(`[nuxt] not setting cookie \\`${name}\\` as it has already expired.`);\n  }\n  if (import.meta.client) {\n    let channel = null;\n    try {\n      if (!store && typeof BroadcastChannel !== \"undefined\") {\n        channel = new BroadcastChannel(`nuxt:cookies:${name}`);\n      }\n    } catch {\n    }\n    const callback = () => {\n      if (opts.readonly || isEqual(cookie.value, cookies[name])) {\n        return;\n      }\n      writeClientCookie(name, cookie.value, opts);\n      cookies[name] = klona(cookie.value);\n      channel?.postMessage({ value: opts.encode(cookie.value) });\n    };\n    const handleChange = (data) => {\n      const value = data.refresh ? readRawCookies(opts)?.[name] : opts.decode(data.value);\n      watchPaused = true;\n      cookie.value = value;\n      cookies[name] = klona(value);\n      nextTick(() => {\n        watchPaused = false;\n      });\n    };\n    let watchPaused = false;\n    const hasScope = !!getCurrentScope();\n    if (hasScope) {\n      onScopeDispose(() => {\n        watchPaused = true;\n        callback();\n        channel?.close();\n      });\n    }\n    if (store) {\n      const changeHandler = (event) => {\n        const cookie2 = event.changed.find((c) => c.name === name);\n        if (cookie2) {\n          handleChange({ value: cookie2.value });\n        }\n      };\n      store.addEventListener(\"change\", changeHandler);\n      if (hasScope) {\n        onScopeDispose(() => store.removeEventListener(\"change\", changeHandler));\n      }\n    } else if (channel) {\n      channel.onmessage = ({ data }) => handleChange(data);\n    }\n    if (opts.watch) {\n      watch(\n        cookie,\n        () => {\n          if (watchPaused) {\n            return;\n          }\n          callback();\n        },\n        { deep: opts.watch !== \"shallow\" }\n      );\n    } else {\n      callback();\n    }\n  } else if (import.meta.server) {\n    const nuxtApp = useNuxtApp();\n    const writeFinalCookieValue = () => {\n      if (opts.readonly || isEqual(cookie.value, cookies[name])) {\n        return;\n      }\n      nuxtApp._cookies ||= {};\n      if (name in nuxtApp._cookies) {\n        if (isEqual(cookie.value, nuxtApp._cookies[name])) {\n          return;\n        }\n        if (import.meta.dev) {\n          console.warn(`[nuxt] cookie \\`${name}\\` was previously set to \\`${opts.encode(nuxtApp._cookies[name])}\\` and is being overridden to \\`${opts.encode(cookie.value)}\\`. This may cause unexpected issues.`);\n        }\n      }\n      nuxtApp._cookies[name] = cookie.value;\n      writeServerCookie(useRequestEvent(nuxtApp), name, cookie.value, opts);\n    };\n    const unhook = nuxtApp.hooks.hookOnce(\"app:rendered\", writeFinalCookieValue);\n    nuxtApp.hooks.hookOnce(\"app:error\", () => {\n      unhook();\n      return writeFinalCookieValue();\n    });\n  }\n  return cookie;\n}\nexport function refreshCookie(name) {\n  if (import.meta.server || store || typeof BroadcastChannel === \"undefined\") {\n    return;\n  }\n  new BroadcastChannel(`nuxt:cookies:${name}`)?.postMessage({ refresh: true });\n}\nfunction readRawCookies(opts = {}) {\n  if (import.meta.server) {\n    return parse(getRequestHeader(useRequestEvent(), \"cookie\") || \"\", opts);\n  } else if (import.meta.client) {\n    return parse(document.cookie, opts);\n  }\n}\nfunction serializeCookie(name, value, opts = {}) {\n  if (value === null || value === void 0) {\n    return serialize(name, value, { ...opts, maxAge: -1 });\n  }\n  return serialize(name, value, opts);\n}\nfunction writeClientCookie(name, value, opts = {}) {\n  if (import.meta.client) {\n    document.cookie = serializeCookie(name, value, opts);\n  }\n}\nfunction writeServerCookie(event, name, value, opts = {}) {\n  if (event) {\n    if (value !== null && value !== void 0) {\n      return setCookie(event, name, value, opts);\n    }\n    if (getCookie(event, name) !== void 0) {\n      return deleteCookie(event, name, opts);\n    }\n  }\n}\nconst MAX_TIMEOUT_DELAY = 2147483647;\nfunction cookieRef(value, delay, shouldWatch) {\n  let timeout;\n  let unsubscribe;\n  let elapsed = 0;\n  const internalRef = shouldWatch ? ref(value) : { value };\n  if (getCurrentScope()) {\n    onScopeDispose(() => {\n      unsubscribe?.();\n      clearTimeout(timeout);\n    });\n  }\n  return customRef((track, trigger) => {\n    if (shouldWatch) {\n      unsubscribe = watch(internalRef, trigger);\n    }\n    function createExpirationTimeout() {\n      elapsed = 0;\n      clearTimeout(timeout);\n      const timeRemaining = delay - elapsed;\n      const timeoutLength = timeRemaining < MAX_TIMEOUT_DELAY ? timeRemaining : MAX_TIMEOUT_DELAY;\n      timeout = setTimeout(() => {\n        elapsed += timeoutLength;\n        if (elapsed < delay) {\n          return createExpirationTimeout();\n        }\n        internalRef.value = void 0;\n        trigger();\n      }, timeoutLength);\n    }\n    return {\n      get() {\n        track();\n        return internalRef.value;\n      },\n      set(newValue) {\n        createExpirationTimeout();\n        internalRef.value = newValue;\n        trigger();\n      }\n    };\n  });\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","/**\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","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nexport default baseCreate;\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 * A specialized version of `_.forEach` for arrays without support for\n * iteratee 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 `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nexport default arrayEach;\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","/** 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","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nexport default baseAssignValue;\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 baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.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 * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nexport default copyObject;\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","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nexport default isIterateeCall;\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","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.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 `_.keysIn` 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 baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\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 * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nexport default isKey;\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 MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nexport default stringToPath;\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","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nexport default get;\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 Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\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 infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nexport default baseSlice;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\nexport default asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n","import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\nexport default stringToArray;\n","import castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\nexport default createCaseFirst;\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n","import toString from './toString.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\nexport default capitalize;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\nexport default asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\nexport default hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n    rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n  rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n  rsUpper + '+' + rsOptContrUpper,\n  rsOrdUpper,\n  rsOrdLower,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\nexport default unicodeWords;\n","import asciiWords from './_asciiWords.js';\nimport hasUnicodeWord from './_hasUnicodeWord.js';\nimport toString from './toString.js';\nimport unicodeWords from './_unicodeWords.js';\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nexport default words;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n  if (number === number) {\n    if (upper !== undefined) {\n      number = number <= upper ? number : upper;\n    }\n    if (lower !== undefined) {\n      number = number >= lower ? number : lower;\n    }\n  }\n  return number;\n}\n\nexport default baseClamp;\n","import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n  if (upper === undefined) {\n    upper = lower;\n    lower = undefined;\n  }\n  if (upper !== undefined) {\n    upper = toNumber(upper);\n    upper = upper === upper ? upper : 0;\n  }\n  if (lower !== undefined) {\n    lower = toNumber(lower);\n    lower = lower === lower ? lower : 0;\n  }\n  return baseClamp(toNumber(number), lower, upper);\n}\n\nexport default clamp;\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","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.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    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nexport default cloneBuffer;\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 copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\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 and inherited 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 getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\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 baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * 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 getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\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","/** 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 * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\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 * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\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    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/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\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 map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\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 set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\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    genTag = '[object GeneratorFunction]',\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    symbolTag = '[object Symbol]',\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 supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nexport default baseClone;\n","/**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\nfunction compact(array) {\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 (value) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default compact;\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 Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nexport default baseMatches;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nexport default baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nexport default baseIteratee;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\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 * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names 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 key-value pairs.\n */\nfunction baseToPairs(object, props) {\n  return arrayMap(props, function(key) {\n    return [key, object[key]];\n  });\n}\n\nexport default baseToPairs;\n","/**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\nfunction setToPairs(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = [value, value];\n  });\n  return result;\n}\n\nexport default setToPairs;\n","import baseToPairs from './_baseToPairs.js';\nimport getTag from './_getTag.js';\nimport mapToArray from './_mapToArray.js';\nimport setToPairs from './_setToPairs.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\nfunction createToPairs(keysFunc) {\n  return function(object) {\n    var tag = getTag(object);\n    if (tag == mapTag) {\n      return mapToArray(object);\n    }\n    if (tag == setTag) {\n      return setToPairs(object);\n    }\n    return baseToPairs(object, keysFunc(object));\n  };\n}\n\nexport default createToPairs;\n","import createToPairs from './_createToPairs.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\nvar toPairs = createToPairs(keys);\n\nexport default toPairs;\n","import toString from './toString.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    reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nfunction escapeRegExp(string) {\n  string = toString(string);\n  return (string && reHasRegExpChar.test(string))\n    ? string.replace(reRegExpChar, '\\\\$&')\n    : string;\n}\n\nexport default escapeRegExp;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nexport default baseMap;\n","/**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction fromPairs(pairs) {\n  var index = -1,\n      length = pairs == null ? 0 : pairs.length,\n      result = {};\n\n  while (++index < length) {\n    var pair = pairs[index];\n    result[pair[0]] = pair[1];\n  }\n  return result;\n}\n\nexport default fromPairs;\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 baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\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 `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\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 empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport default isEmpty;\n","import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n *   return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\nfunction mapKeys(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, iteratee(value, key, object), value);\n  });\n  return result;\n}\n\nexport default mapKeys;\n","import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nexport default mapValues;\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n *   return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n  if (typeof predicate != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  return function() {\n    var args = arguments;\n    switch (args.length) {\n      case 0: return !predicate.call(this);\n      case 1: return !predicate.call(this, args[0]);\n      case 2: return !predicate.call(this, args[0], args[1]);\n      case 3: return !predicate.call(this, args[0], args[1], args[2]);\n    }\n    return !predicate.apply(this, args);\n  };\n}\n\nexport default negate;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n  object = parent(object, path);\n  return object == null || delete object[toKey(last(path))];\n}\n\nexport default baseUnset;\n","import isPlainObject from './isPlainObject.js';\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n  var result = {};\n  if (object == null) {\n    return result;\n  }\n  var isDeep = false;\n  paths = arrayMap(paths, function(path) {\n    path = castPath(path, object);\n    isDeep || (isDeep = path.length > 1);\n    return path;\n  });\n  copyObject(object, getAllKeysIn(object), result);\n  if (isDeep) {\n    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n  }\n  var length = paths.length;\n  while (length--) {\n    baseUnset(result, paths[length]);\n  }\n  return result;\n});\n\nexport default omit;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nexport default basePickBy;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport basePickBy from './_basePickBy.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n  if (object == null) {\n    return {};\n  }\n  var props = arrayMap(getAllKeysIn(object), function(prop) {\n    return [prop];\n  });\n  predicate = baseIteratee(predicate);\n  return basePickBy(object, props, function(value, path) {\n    return predicate(value, path[0]);\n  });\n}\n\nexport default pickBy;\n","import baseIteratee from './_baseIteratee.js';\nimport negate from './negate.js';\nimport pickBy from './pickBy.js';\n\n/**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\nfunction omitBy(object, predicate) {\n  return pickBy(object, negate(baseIteratee(predicate)));\n}\n\nexport default omitBy;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nexport default baseSortBy;\n","import isSymbol from './isSymbol.js';\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nexport default compareAscending;\n","import compareAscending from './_compareAscending.js';\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\nexport default compareMultiple;\n","import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  if (iteratees.length) {\n    iteratees = arrayMap(iteratees, function(iteratee) {\n      if (isArray(iteratee)) {\n        return function(value) {\n          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n        }\n      }\n      return iteratee;\n    });\n  } else {\n    iteratees = [identity];\n  }\n\n  var index = -1;\n  iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\nexport default baseOrderBy;\n","import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n  return basePickBy(object, paths, function(value, path) {\n    return hasIn(object, path);\n  });\n}\n\nexport default basePick;\n","import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n  return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\nexport default baseRange;\n","import baseRange from './_baseRange.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toFinite from './toFinite.js';\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n  return function(start, end, step) {\n    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n      end = step = undefined;\n    }\n    // Ensure the sign of `-0` is preserved.\n    start = toFinite(start);\n    if (end === undefined) {\n      end = start;\n      start = 0;\n    } else {\n      end = toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n    return baseRange(start, end, step, fromRight);\n  };\n}\n\nexport default createRange;\n","import createRange from './_createRange.js';\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nexport default range;\n","import baseSet from './_baseSet.js';\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n  return object == null ? object : baseSet(object, path, value);\n}\n\nexport default set;\n","import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 30 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nexport default sortBy;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\nfunction charsEndIndex(strSymbols, chrSymbols) {\n  var index = strSymbols.length;\n\n  while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n  return index;\n}\n\nexport default charsEndIndex;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\nfunction charsStartIndex(strSymbols, chrSymbols) {\n  var index = -1,\n      length = strSymbols.length;\n\n  while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n  return index;\n}\n\nexport default charsStartIndex;\n","import baseToString from './_baseToString.js';\nimport baseTrim from './_baseTrim.js';\nimport castSlice from './_castSlice.js';\nimport charsEndIndex from './_charsEndIndex.js';\nimport charsStartIndex from './_charsStartIndex.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim('  abc  ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map(['  foo  ', '  bar  '], _.trim);\n * // => ['foo', 'bar']\n */\nfunction trim(string, chars, guard) {\n  string = toString(string);\n  if (string && (guard || chars === undefined)) {\n    return baseTrim(string);\n  }\n  if (!string || !(chars = baseToString(chars))) {\n    return string;\n  }\n  var strSymbols = stringToArray(string),\n      chrSymbols = stringToArray(chars),\n      start = charsStartIndex(strSymbols, chrSymbols),\n      end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n  return castSlice(strSymbols, start, end).join('');\n}\n\nexport default trim;\n","import arrayFilter from './_arrayFilter.js';\nimport arrayMap from './_arrayMap.js';\nimport baseProperty from './_baseProperty.js';\nimport baseTimes from './_baseTimes.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\nfunction unzip(array) {\n  if (!(array && array.length)) {\n    return [];\n  }\n  var length = 0;\n  array = arrayFilter(array, function(group) {\n    if (isArrayLikeObject(group)) {\n      length = nativeMax(group.length, length);\n      return true;\n    }\n  });\n  return baseTimes(length, function(index) {\n    return arrayMap(array, baseProperty(index));\n  });\n}\n\nexport default unzip;\n","import baseRest from './_baseRest.js';\nimport unzip from './unzip.js';\n\n/**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\nvar zip = baseRest(unzip);\n\nexport default zip;\n","/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n  var index = -1,\n      length = props.length,\n      valsLength = values.length,\n      result = {};\n\n  while (++index < length) {\n    var value = index < valsLength ? values[index] : undefined;\n    assignFunc(result, props[index], value);\n  }\n  return result;\n}\n\nexport default baseZipObject;\n","import assignValue from './_assignValue.js';\nimport baseZipObject from './_baseZipObject.js';\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n  return baseZipObject(props || [], values || [], assignValue);\n}\n\nexport default zipObject;\n","import {\n  pick,\n  pickBy,\n  fromPairs,\n  sortBy,\n  toPairs,\n  isObject,\n  omitBy,\n  isEmpty,\n} from 'lodash-es'\n\nexport type Falsy = false | null | undefined | 0 | 0n | ''\n\nexport function objectsEqual(a: object, b: object) {\n  return JSON.stringify(a) === JSON.stringify(b)\n}\n\nexport function getAnyOf<\n  Obj extends Record<string, unknown>,\n  Keys extends (keyof Obj)[] | string[] | readonly string[],\n>(\n  obj: Obj,\n  keys: Keys,\n): Keys extends (keyof Obj)[] ? Obj[Keys[number]] : unknown {\n  return Object.values(pick(obj, keys))[0]\n}\n\nexport function removeFalsy<\n  T extends Record<string, unknown>,\n  R extends {\n    [K in keyof T as T[K] extends Falsy ? never : K]: Exclude<T[K], Falsy>\n  },\n>(source: T): R {\n  return pickBy(source, Boolean) as R\n}\n\nexport function removeEmpty<\n  T extends object,\n  R extends {\n    [K in keyof T as T[K] extends Falsy ? never : K]: Exclude<T[K], Falsy>\n  },\n>(source: T): R {\n  return omitBy(source, isEmpty) as R\n}\n\nexport function sortKeys<T extends object>(unsorted: T): T {\n  if (!isObject(unsorted)) return unsorted\n  return fromPairs(sortBy(toPairs(unsorted), [0])) as T\n}\n","import { parseQuery } from 'ufo'\nimport { sortKeys } from './objects'\n\nconst LANGUAGE_PREFIX_REGEXP = /(^\\/?[a-z]{2})(\\/|\\?|$)/i\n\nexport function getPublicUrl(domain: string, path: string): string {\n  return `https://${domain}/${path}`\n}\n\nexport function getUrlFullPath(url: string | URL): string {\n  const parsedUrl = url instanceof URL ? url : new URL(url)\n\n  return parsedUrl.pathname + parsedUrl.search\n}\n\nexport function getUrlWithoutProtocol(url: URL): string {\n  return url.toString().split('://')[1]\n}\n\nexport function buildPath(...elements: (string | undefined | null)[]): string {\n  return normalizePath(elements.filter(Boolean).join('/'))\n}\n\nexport function deleteFromPath(\n  path: string,\n  ...deletions: (string | undefined | null)[]\n): string {\n  return deletions\n    .filter(Boolean)\n    .map((deletion) => normalizePath(deletion as string))\n    .reduce((acc, deletion) => acc.replace(deletion, '/'), normalizePath(path))\n}\n\nexport function addUrlParams(initialUrl: URL, params: object): URL {\n  const url = new URL(initialUrl)\n  Object.entries(params)\n    .filter(([, value]) => value)\n    .forEach(([key, value]) => url.searchParams.set(key, value.toString()))\n\n  return url\n}\n\nexport function removeUrlParams(initialUrl: URL, ...params: string[]): URL {\n  const url = new URL(initialUrl)\n  params.forEach((param) => url.searchParams.delete(param))\n  return url\n}\n\nexport function normalizePath(path: string): string {\n  return `/${path}/`.replace(/\\/+/g, '/')\n}\n\nexport function normalizeUrl(initialUrl: URL): URL {\n  const url = new URL(initialUrl)\n  url.pathname = normalizePath(url.pathname)\n\n  return url\n}\n\nexport function getLanguagePrefix(path: string): string {\n  return path.match(LANGUAGE_PREFIX_REGEXP)?.[1] ?? ''\n}\n\nexport function removeLanguagePrefix(path: string): string {\n  return path.replace(LANGUAGE_PREFIX_REGEXP, '')\n}\n\nexport function isInterchaletUrl(url: string): boolean {\n  return /interchalet/.test(url)\n}\n\nexport function searchParamsToSortedObject(\n  searchParams: URLSearchParams,\n): object {\n  return sortKeys(parseQuery(searchParams.toString()))\n}\n","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","export default function toInteger(dirtyNumber) {\n  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n    return NaN;\n  }\n  var number = Number(dirtyNumber);\n  if (isNaN(number)) {\n    return number;\n  }\n  return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","export default function requiredArgs(required, args) {\n  if (args.length < required) {\n    throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n  }\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n  requiredArgs(1, arguments);\n  var argStr = Object.prototype.toString.call(argument);\n\n  // Clone the date\n  if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime());\n  } else if (typeof argument === 'number' || argStr === '[object Number]') {\n    return new Date(argument);\n  } else {\n    if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n      // eslint-disable-next-line no-console\n      console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\");\n      // eslint-disable-next-line no-console\n      console.warn(new Error().stack);\n    }\n    return new Date(NaN);\n  }\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport default function addDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n  if (isNaN(amount)) {\n    return new Date(NaN);\n  }\n  if (!amount) {\n    // If 0 days, no-op to avoid changing times in the hour before end of DST\n    return date;\n  }\n  date.setDate(date.getDate() + amount);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\nexport default function addMonths(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n  if (isNaN(amount)) {\n    return new Date(NaN);\n  }\n  if (!amount) {\n    // If 0 months, no-op to avoid changing times in the hour before end of DST\n    return date;\n  }\n  var dayOfMonth = date.getDate();\n\n  // The JS Date object supports date math by accepting out-of-bounds values for\n  // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n  // new Date(2020, 13, 1) returns 1 Feb 2021.  This is *almost* the behavior we\n  // want except that dates will wrap around the end of a month, meaning that\n  // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n  // we'll default to the end of the desired month by adding 1 to the desired\n  // month and using a date of 0 to back up one day to the end of the desired\n  // month.\n  var endOfDesiredMonth = new Date(date.getTime());\n  endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n  var daysInMonth = endOfDesiredMonth.getDate();\n  if (dayOfMonth >= daysInMonth) {\n    // If we're already at the end of the month, then this is the correct date\n    // and we're done.\n    return endOfDesiredMonth;\n  } else {\n    // Otherwise, we now know that setting the original day-of-month value won't\n    // cause an overflow, so set the desired day-of-month. Note that we can't\n    // just set the date of `endOfDesiredMonth` because that object may have had\n    // its time changed in the unusual case where where a DST transition was on\n    // the last day of the month and its local time was in the hour skipped or\n    // repeated next to a DST transition.  So we use `date` instead which is\n    // guaranteed to still have the original time.\n    date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n    return date;\n  }\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var timestamp = toDate(dirtyDate).getTime();\n  var amount = toInteger(dirtyAmount);\n  return new Date(timestamp + amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport default function addHours(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR);\n}","var defaultOptions = {};\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n  var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n  utcDate.setUTCFullYear(date.getFullYear());\n  return date.getTime() - utcDate.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport default function startOfDay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport default function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var startOfDayLeft = startOfDay(dirtyDateLeft);\n  var startOfDayRight = startOfDay(dirtyDateRight);\n  var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n  var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight);\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a day is not constant\n  // (e.g. it's different in the day of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport default function addSeconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, amount * 1000);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * const result = max([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nexport default function max(dirtyDatesArray) {\n  requiredArgs(1, arguments);\n  var datesArray;\n  // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray;\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array.\n  } else if (_typeof(dirtyDatesArray) === 'object' && dirtyDatesArray !== null) {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray);\n  } else {\n    // `dirtyDatesArray` is non-iterable, return Invalid Date\n    return new Date(NaN);\n  }\n  var result;\n  datesArray.forEach(function (dirtyDate) {\n    var currentDate = toDate(dirtyDate);\n    if (result === undefined || result < currentDate || isNaN(Number(currentDate))) {\n      result = currentDate;\n    }\n  });\n  return result || new Date(NaN);\n}","/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n\n/**\n * Days in 1 year\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n *\n * @name daysInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInYear = 365.2425;\n\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInMinute = 60000;\n\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInHour = 3600000;\n\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInSecond = 1000;\n\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\nexport var minTime = -maxTime;\n\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var minutesInHour = 60;\n\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\nexport var monthsInQuarter = 3;\n\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var monthsInYear = 12;\n\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var quartersInYear = 4;\n\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInHour = 3600;\n\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInMinute = 60;\n\n/**\n * Seconds in 1 day\n *\n * @name secondsInDay\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInDay = secondsInHour * 24;\n\n/**\n * Seconds in 1 week\n *\n * @name secondsInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInWeek = secondsInDay * 7;\n\n/**\n * Seconds in 1 year\n *\n * @name secondsInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInYear = secondsInDay * daysInYear;\n\n/**\n * Seconds in 1 month\n *\n * @name secondsInMonth\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInMonth = secondsInYear / 12;\n\n/**\n * Seconds in 1 quarter\n *\n * @name secondsInQuarter\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInQuarter = secondsInMonth * 3;","import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n  var dateRightStartOfDay = startOfDay(dirtyDateRight);\n  return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport default function isDate(value) {\n  requiredArgs(1, arguments);\n  return value instanceof Date || _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}","import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport default function isValid(dirtyDate) {\n  requiredArgs(1, arguments);\n  if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n    return false;\n  }\n  var date = toDate(dirtyDate);\n  return !isNaN(Number(date));\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\nfunction compareLocalAsc(dateLeft, dateRight) {\n  var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();\n  if (diff < 0) {\n    return -1;\n  } else if (diff > 0) {\n    return 1;\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\n}\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days according to the local timezone\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n *   new Date(2020, 5, 1),\n *   new Date(2020, 2, 1)\n * )\n//=> 92\n */\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareLocalAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));\n  dateLeft.setDate(dateLeft.getDate() - sign * difference);\n\n  // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);\n  var result = sign * (difference - isLastDayNotFull);\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n *   new Date(2014, 6, 2, 12, 30, 21, 700),\n *   new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport default function differenceInMilliseconds(dateLeft, dateRight) {\n  requiredArgs(2, arguments);\n  return toDate(dateLeft).getTime() - toDate(dateRight).getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n *   start: new Date(2014, 9, 6),\n *   end: new Date(2014, 9, 10)\n * })\n * //=> [\n * //   Mon Oct 06 2014 00:00:00,\n * //   Tue Oct 07 2014 00:00:00,\n * //   Wed Oct 08 2014 00:00:00,\n * //   Thu Oct 09 2014 00:00:00,\n * //   Fri Oct 10 2014 00:00:00\n * // ]\n */\nexport default function eachDayOfInterval(dirtyInterval, options) {\n  var _options$step;\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var endTime = endDate.getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var dates = [];\n  var currentDate = startDate;\n  currentDate.setHours(0, 0, 0, 0);\n  var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n  if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate));\n    currentDate.setDate(currentDate.getDate() + step);\n    currentDate.setHours(0, 0, 0, 0);\n  }\n  return dates;\n}","import addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, -amount);\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\nexport default function getUTCDayOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var timestamp = date.getTime();\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n  var startOfYearTimestamp = date.getTime();\n  var difference = timestamp - startOfYearTimestamp;\n  return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var weekStartsOn = 1;\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setUTCDate(date.getUTCDate() - diff);\n  date.setUTCHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nexport default function getUTCISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getUTCFullYear();\n  var fourthOfJanuaryOfNextYear = new Date(0);\n  fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n  var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n  var fourthOfJanuaryOfThisYear = new Date(0);\n  fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n  var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getUTCISOWeekYear(dirtyDate);\n  var fourthOfJanuary = new Date(0);\n  fourthOfJanuary.setUTCFullYear(year, 0, 4);\n  fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n  var date = startOfUTCISOWeek(fourthOfJanuary);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime();\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeek(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setUTCDate(date.getUTCDate() - diff);\n  date.setUTCHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function getUTCWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getUTCFullYear();\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n  var firstWeekOfNextYear = new Date(0);\n  firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n  var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options);\n  var firstWeekOfThisYear = new Date(0);\n  firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n  var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n  var year = getUTCWeekYear(dirtyDate, options);\n  var firstWeek = new Date(0);\n  firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setUTCHours(0, 0, 0, 0);\n  var date = startOfUTCWeek(firstWeek, options);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCWeek(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime();\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","export default function addLeadingZeros(number, targetLength) {\n  var sign = number < 0 ? '-' : '';\n  var output = Math.abs(number).toString();\n  while (output.length < targetLength) {\n    output = '0' + output;\n  }\n  return sign + output;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* |                                |\n * |  d  | Day of month                   |  D  |                                |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  m  | Minute                         |  M  | Month                          |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  y  | Year (abs)                     |  Y  |                                |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\nvar formatters = {\n  // Year\n  y: function y(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    var signedYear = date.getUTCFullYear();\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    var year = signedYear > 0 ? signedYear : 1 - signedYear;\n    return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n  },\n  // Month\n  M: function M(date, token) {\n    var month = date.getUTCMonth();\n    return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n  },\n  // Day of the month\n  d: function d(date, token) {\n    return addLeadingZeros(date.getUTCDate(), token.length);\n  },\n  // AM or PM\n  a: function a(date, token) {\n    var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n    switch (token) {\n      case 'a':\n      case 'aa':\n        return dayPeriodEnumValue.toUpperCase();\n      case 'aaa':\n        return dayPeriodEnumValue;\n      case 'aaaaa':\n        return dayPeriodEnumValue[0];\n      case 'aaaa':\n      default:\n        return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n    }\n  },\n  // Hour [1-12]\n  h: function h(date, token) {\n    return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n  },\n  // Hour [0-23]\n  H: function H(date, token) {\n    return addLeadingZeros(date.getUTCHours(), token.length);\n  },\n  // Minute\n  m: function m(date, token) {\n    return addLeadingZeros(date.getUTCMinutes(), token.length);\n  },\n  // Second\n  s: function s(date, token) {\n    return addLeadingZeros(date.getUTCSeconds(), token.length);\n  },\n  // Fraction of second\n  S: function S(date, token) {\n    var numberOfDigits = token.length;\n    var milliseconds = date.getUTCMilliseconds();\n    var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n    return addLeadingZeros(fractionalSeconds, token.length);\n  }\n};\nexport default formatters;","import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar dayPeriodEnum = {\n  am: 'am',\n  pm: 'pm',\n  midnight: 'midnight',\n  noon: 'noon',\n  morning: 'morning',\n  afternoon: 'afternoon',\n  evening: 'evening',\n  night: 'night'\n};\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n  // Era\n  G: function G(date, token, localize) {\n    var era = date.getUTCFullYear() > 0 ? 1 : 0;\n    switch (token) {\n      // AD, BC\n      case 'G':\n      case 'GG':\n      case 'GGG':\n        return localize.era(era, {\n          width: 'abbreviated'\n        });\n      // A, B\n      case 'GGGGG':\n        return localize.era(era, {\n          width: 'narrow'\n        });\n      // Anno Domini, Before Christ\n      case 'GGGG':\n      default:\n        return localize.era(era, {\n          width: 'wide'\n        });\n    }\n  },\n  // Year\n  y: function y(date, token, localize) {\n    // Ordinal number\n    if (token === 'yo') {\n      var signedYear = date.getUTCFullYear();\n      // Returns 1 for 1 BC (which is year 0 in JavaScript)\n      var year = signedYear > 0 ? signedYear : 1 - signedYear;\n      return localize.ordinalNumber(year, {\n        unit: 'year'\n      });\n    }\n    return lightFormatters.y(date, token);\n  },\n  // Local week-numbering year\n  Y: function Y(date, token, localize, options) {\n    var signedWeekYear = getUTCWeekYear(date, options);\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n    // Two digit year\n    if (token === 'YY') {\n      var twoDigitYear = weekYear % 100;\n      return addLeadingZeros(twoDigitYear, 2);\n    }\n\n    // Ordinal number\n    if (token === 'Yo') {\n      return localize.ordinalNumber(weekYear, {\n        unit: 'year'\n      });\n    }\n\n    // Padding\n    return addLeadingZeros(weekYear, token.length);\n  },\n  // ISO week-numbering year\n  R: function R(date, token) {\n    var isoWeekYear = getUTCISOWeekYear(date);\n\n    // Padding\n    return addLeadingZeros(isoWeekYear, token.length);\n  },\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function u(date, token) {\n    var year = date.getUTCFullYear();\n    return addLeadingZeros(year, token.length);\n  },\n  // Quarter\n  Q: function Q(date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'Q':\n        return String(quarter);\n      // 01, 02, 03, 04\n      case 'QQ':\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case 'Qo':\n        return localize.ordinalNumber(quarter, {\n          unit: 'quarter'\n        });\n      // Q1, Q2, Q3, Q4\n      case 'QQQ':\n        return localize.quarter(quarter, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case 'QQQQQ':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // 1st quarter, 2nd quarter, ...\n      case 'QQQQ':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone quarter\n  q: function q(date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'q':\n        return String(quarter);\n      // 01, 02, 03, 04\n      case 'qq':\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case 'qo':\n        return localize.ordinalNumber(quarter, {\n          unit: 'quarter'\n        });\n      // Q1, Q2, Q3, Q4\n      case 'qqq':\n        return localize.quarter(quarter, {\n          width: 'abbreviated',\n          context: 'standalone'\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case 'qqqqq':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // 1st quarter, 2nd quarter, ...\n      case 'qqqq':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // Month\n  M: function M(date, token, localize) {\n    var month = date.getUTCMonth();\n    switch (token) {\n      case 'M':\n      case 'MM':\n        return lightFormatters.M(date, token);\n      // 1st, 2nd, ..., 12th\n      case 'Mo':\n        return localize.ordinalNumber(month + 1, {\n          unit: 'month'\n        });\n      // Jan, Feb, ..., Dec\n      case 'MMM':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // J, F, ..., D\n      case 'MMMMM':\n        return localize.month(month, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // January, February, ..., December\n      case 'MMMM':\n      default:\n        return localize.month(month, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone month\n  L: function L(date, token, localize) {\n    var month = date.getUTCMonth();\n    switch (token) {\n      // 1, 2, ..., 12\n      case 'L':\n        return String(month + 1);\n      // 01, 02, ..., 12\n      case 'LL':\n        return addLeadingZeros(month + 1, 2);\n      // 1st, 2nd, ..., 12th\n      case 'Lo':\n        return localize.ordinalNumber(month + 1, {\n          unit: 'month'\n        });\n      // Jan, Feb, ..., Dec\n      case 'LLL':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'standalone'\n        });\n      // J, F, ..., D\n      case 'LLLLL':\n        return localize.month(month, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // January, February, ..., December\n      case 'LLLL':\n      default:\n        return localize.month(month, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // Local week of year\n  w: function w(date, token, localize, options) {\n    var week = getUTCWeek(date, options);\n    if (token === 'wo') {\n      return localize.ordinalNumber(week, {\n        unit: 'week'\n      });\n    }\n    return addLeadingZeros(week, token.length);\n  },\n  // ISO week of year\n  I: function I(date, token, localize) {\n    var isoWeek = getUTCISOWeek(date);\n    if (token === 'Io') {\n      return localize.ordinalNumber(isoWeek, {\n        unit: 'week'\n      });\n    }\n    return addLeadingZeros(isoWeek, token.length);\n  },\n  // Day of the month\n  d: function d(date, token, localize) {\n    if (token === 'do') {\n      return localize.ordinalNumber(date.getUTCDate(), {\n        unit: 'date'\n      });\n    }\n    return lightFormatters.d(date, token);\n  },\n  // Day of year\n  D: function D(date, token, localize) {\n    var dayOfYear = getUTCDayOfYear(date);\n    if (token === 'Do') {\n      return localize.ordinalNumber(dayOfYear, {\n        unit: 'dayOfYear'\n      });\n    }\n    return addLeadingZeros(dayOfYear, token.length);\n  },\n  // Day of week\n  E: function E(date, token, localize) {\n    var dayOfWeek = date.getUTCDay();\n    switch (token) {\n      // Tue\n      case 'E':\n      case 'EE':\n      case 'EEE':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // T\n      case 'EEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n      case 'EEEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n      case 'EEEE':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Local day of week\n  e: function e(date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay();\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case 'e':\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case 'ee':\n        return addLeadingZeros(localDayOfWeek, 2);\n      // 1st, 2nd, ..., 7th\n      case 'eo':\n        return localize.ordinalNumber(localDayOfWeek, {\n          unit: 'day'\n        });\n      case 'eee':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // T\n      case 'eeeee':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n      case 'eeeeee':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n      case 'eeee':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone local day of week\n  c: function c(date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay();\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case 'c':\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case 'cc':\n        return addLeadingZeros(localDayOfWeek, token.length);\n      // 1st, 2nd, ..., 7th\n      case 'co':\n        return localize.ordinalNumber(localDayOfWeek, {\n          unit: 'day'\n        });\n      case 'ccc':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'standalone'\n        });\n      // T\n      case 'ccccc':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // Tu\n      case 'cccccc':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'standalone'\n        });\n      // Tuesday\n      case 'cccc':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // ISO day of week\n  i: function i(date, token, localize) {\n    var dayOfWeek = date.getUTCDay();\n    var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n    switch (token) {\n      // 2\n      case 'i':\n        return String(isoDayOfWeek);\n      // 02\n      case 'ii':\n        return addLeadingZeros(isoDayOfWeek, token.length);\n      // 2nd\n      case 'io':\n        return localize.ordinalNumber(isoDayOfWeek, {\n          unit: 'day'\n        });\n      // Tue\n      case 'iii':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // T\n      case 'iiiii':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n      case 'iiiiii':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n      case 'iiii':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // AM or PM\n  a: function a(date, token, localize) {\n    var hours = date.getUTCHours();\n    var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n    switch (token) {\n      case 'a':\n      case 'aa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      case 'aaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        }).toLowerCase();\n      case 'aaaaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      case 'aaaa':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // AM, PM, midnight, noon\n  b: function b(date, token, localize) {\n    var hours = date.getUTCHours();\n    var dayPeriodEnumValue;\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon;\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight;\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n    }\n    switch (token) {\n      case 'b':\n      case 'bb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      case 'bbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        }).toLowerCase();\n      case 'bbbbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      case 'bbbb':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // in the morning, in the afternoon, in the evening, at night\n  B: function B(date, token, localize) {\n    var hours = date.getUTCHours();\n    var dayPeriodEnumValue;\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening;\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon;\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning;\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night;\n    }\n    switch (token) {\n      case 'B':\n      case 'BB':\n      case 'BBB':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      case 'BBBBB':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      case 'BBBB':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Hour [1-12]\n  h: function h(date, token, localize) {\n    if (token === 'ho') {\n      var hours = date.getUTCHours() % 12;\n      if (hours === 0) hours = 12;\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n    return lightFormatters.h(date, token);\n  },\n  // Hour [0-23]\n  H: function H(date, token, localize) {\n    if (token === 'Ho') {\n      return localize.ordinalNumber(date.getUTCHours(), {\n        unit: 'hour'\n      });\n    }\n    return lightFormatters.H(date, token);\n  },\n  // Hour [0-11]\n  K: function K(date, token, localize) {\n    var hours = date.getUTCHours() % 12;\n    if (token === 'Ko') {\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n    return addLeadingZeros(hours, token.length);\n  },\n  // Hour [1-24]\n  k: function k(date, token, localize) {\n    var hours = date.getUTCHours();\n    if (hours === 0) hours = 24;\n    if (token === 'ko') {\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n    return addLeadingZeros(hours, token.length);\n  },\n  // Minute\n  m: function m(date, token, localize) {\n    if (token === 'mo') {\n      return localize.ordinalNumber(date.getUTCMinutes(), {\n        unit: 'minute'\n      });\n    }\n    return lightFormatters.m(date, token);\n  },\n  // Second\n  s: function s(date, token, localize) {\n    if (token === 'so') {\n      return localize.ordinalNumber(date.getUTCSeconds(), {\n        unit: 'second'\n      });\n    }\n    return lightFormatters.s(date, token);\n  },\n  // Fraction of second\n  S: function S(date, token) {\n    return lightFormatters.S(date, token);\n  },\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function X(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    if (timezoneOffset === 0) {\n      return 'Z';\n    }\n    switch (token) {\n      // Hours and optional minutes\n      case 'X':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case 'XXXX':\n      case 'XX':\n        // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case 'XXXXX':\n      case 'XXX': // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function x(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    switch (token) {\n      // Hours and optional minutes\n      case 'x':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case 'xxxx':\n      case 'xx':\n        // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case 'xxxxx':\n      case 'xxx': // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Timezone (GMT)\n  O: function O(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    switch (token) {\n      // Short\n      case 'O':\n      case 'OO':\n      case 'OOO':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n      // Long\n      case 'OOOO':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Timezone (specific non-location)\n  z: function z(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    switch (token) {\n      // Short\n      case 'z':\n      case 'zz':\n      case 'zzz':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n      // Long\n      case 'zzzz':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Seconds timestamp\n  t: function t(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timestamp = Math.floor(originalDate.getTime() / 1000);\n    return addLeadingZeros(timestamp, token.length);\n  },\n  // Milliseconds timestamp\n  T: function T(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timestamp = originalDate.getTime();\n    return addLeadingZeros(timestamp, token.length);\n  }\n};\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n  var sign = offset > 0 ? '-' : '+';\n  var absOffset = Math.abs(offset);\n  var hours = Math.floor(absOffset / 60);\n  var minutes = absOffset % 60;\n  if (minutes === 0) {\n    return sign + String(hours);\n  }\n  var delimiter = dirtyDelimiter || '';\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n  if (offset % 60 === 0) {\n    var sign = offset > 0 ? '-' : '+';\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n  }\n  return formatTimezone(offset, dirtyDelimiter);\n}\nfunction formatTimezone(offset, dirtyDelimiter) {\n  var delimiter = dirtyDelimiter || '';\n  var sign = offset > 0 ? '-' : '+';\n  var absOffset = Math.abs(offset);\n  var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n  var minutes = addLeadingZeros(absOffset % 60, 2);\n  return sign + hours + delimiter + minutes;\n}\nexport default formatters;","var dateLongFormatter = function dateLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'P':\n      return formatLong.date({\n        width: 'short'\n      });\n    case 'PP':\n      return formatLong.date({\n        width: 'medium'\n      });\n    case 'PPP':\n      return formatLong.date({\n        width: 'long'\n      });\n    case 'PPPP':\n    default:\n      return formatLong.date({\n        width: 'full'\n      });\n  }\n};\nvar timeLongFormatter = function timeLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'p':\n      return formatLong.time({\n        width: 'short'\n      });\n    case 'pp':\n      return formatLong.time({\n        width: 'medium'\n      });\n    case 'ppp':\n      return formatLong.time({\n        width: 'long'\n      });\n    case 'pppp':\n    default:\n      return formatLong.time({\n        width: 'full'\n      });\n  }\n};\nvar dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {\n  var matchResult = pattern.match(/(P+)(p+)?/) || [];\n  var datePattern = matchResult[1];\n  var timePattern = matchResult[2];\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong);\n  }\n  var dateTimeFormat;\n  switch (datePattern) {\n    case 'P':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'short'\n      });\n      break;\n    case 'PP':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'medium'\n      });\n      break;\n    case 'PPP':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'long'\n      });\n      break;\n    case 'PPPP':\n    default:\n      dateTimeFormat = formatLong.dateTime({\n        width: 'full'\n      });\n      break;\n  }\n  return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n};\nvar longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter\n};\nexport default longFormatters;","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n  return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n  return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n  if (token === 'YYYY') {\n    throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  } else if (token === 'YY') {\n    throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  } else if (token === 'D') {\n    throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  } else if (token === 'DD') {\n    throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  }\n}","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'less than a second',\n    other: 'less than {{count}} seconds'\n  },\n  xSeconds: {\n    one: '1 second',\n    other: '{{count}} seconds'\n  },\n  halfAMinute: 'half a minute',\n  lessThanXMinutes: {\n    one: 'less than a minute',\n    other: 'less than {{count}} minutes'\n  },\n  xMinutes: {\n    one: '1 minute',\n    other: '{{count}} minutes'\n  },\n  aboutXHours: {\n    one: 'about 1 hour',\n    other: 'about {{count}} hours'\n  },\n  xHours: {\n    one: '1 hour',\n    other: '{{count}} hours'\n  },\n  xDays: {\n    one: '1 day',\n    other: '{{count}} days'\n  },\n  aboutXWeeks: {\n    one: 'about 1 week',\n    other: 'about {{count}} weeks'\n  },\n  xWeeks: {\n    one: '1 week',\n    other: '{{count}} weeks'\n  },\n  aboutXMonths: {\n    one: 'about 1 month',\n    other: 'about {{count}} months'\n  },\n  xMonths: {\n    one: '1 month',\n    other: '{{count}} months'\n  },\n  aboutXYears: {\n    one: 'about 1 year',\n    other: 'about {{count}} years'\n  },\n  xYears: {\n    one: '1 year',\n    other: '{{count}} years'\n  },\n  overXYears: {\n    one: 'over 1 year',\n    other: 'over {{count}} years'\n  },\n  almostXYears: {\n    one: 'almost 1 year',\n    other: 'almost {{count}} years'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'in ' + result;\n    } else {\n      return result + ' ago';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","export default function buildFormatLongFn(args) {\n  return function () {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    // TODO: Remove String()\n    var width = options.width ? String(options.width) : args.defaultWidth;\n    var format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","export default function buildLocalizeFn(args) {\n  return function (dirtyIndex, options) {\n    var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n    var valuesArray;\n    if (context === 'formatting' && args.formattingValues) {\n      var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n      valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      var _defaultWidth = args.defaultWidth;\n      var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n      valuesArray = args.values[_width] || args.values[_defaultWidth];\n    }\n    var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;\n    // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n    return valuesArray[index];\n  };\n}","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['B', 'A'],\n  abbreviated: ['BC', 'AD'],\n  wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n  short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n  abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  var rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + 'st';\n      case 2:\n        return number + 'nd';\n      case 3:\n        return number + 'rd';\n    }\n  }\n  return number + 'th';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","export default function buildMatchFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var width = options.width;\n    var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n    var matchResult = string.match(matchPattern);\n    if (!matchResult) {\n      return null;\n    }\n    var matchedString = matchResult[0];\n    var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n    var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    }) : findKey(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    });\n    var value;\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback ? options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}\nfunction findKey(object, predicate) {\n  for (var key in object) {\n    if (object.hasOwnProperty(key) && predicate(object[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\nfunction findIndex(array, predicate) {\n  for (var key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}","export default function buildMatchPatternFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    var matchedString = matchResult[0];\n    var parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n    value = options.valueCallback ? options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n  code: 'en-US',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import isValid from \"../isValid/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 9     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 9     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Sun           | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          | a..aa   | AM, PM                            |       |\n * |                                 | aaa     | am, pm                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bb   | AM, PM, noon, midnight            |       |\n * |                                 | bbb     | am, pm, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 001, ..., 999                |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 04/29/1453                        | 7     |\n * |                                 | PP      | Apr 29, 1453                      | 7     |\n * |                                 | PPP     | April 29th, 1453                  | 7     |\n * |                                 | PPPP    | Friday, April 29th, 1453          | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 04/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | Apr 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | April 29th, 1453 at ...           | 7     |\n * |                                 | PPPPpppp| Friday, April 29th, 1453 at ...   | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n *    and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, options) {\n  var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n  requiredArgs(2, arguments);\n  var formatStr = String(dirtyFormatStr);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1);\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n  var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  if (!locale.localize) {\n    throw new RangeError('locale must contain localize property');\n  }\n  if (!locale.formatLong) {\n    throw new RangeError('locale must contain formatLong property');\n  }\n  var originalDate = toDate(dirtyDate);\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n  var utcDate = subMilliseconds(originalDate, timezoneOffset);\n  var formatterOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale,\n    _originalDate: originalDate\n  };\n  var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n    var firstCharacter = substring[0];\n    if (firstCharacter === 'p' || firstCharacter === 'P') {\n      var longFormatter = longFormatters[firstCharacter];\n      return longFormatter(substring, locale.formatLong);\n    }\n    return substring;\n  }).join('').match(formattingTokensRegExp).map(function (substring) {\n    // Replace two single quote characters with one single quote character\n    if (substring === \"''\") {\n      return \"'\";\n    }\n    var firstCharacter = substring[0];\n    if (firstCharacter === \"'\") {\n      return cleanEscapedString(substring);\n    }\n    var formatter = formatters[firstCharacter];\n    if (formatter) {\n      if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) {\n        throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n      }\n      if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) {\n        throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n      }\n      return formatter(utcDate, substring, locale.localize, formatterOptions);\n    }\n    if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n      throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n    }\n    return substring;\n  }).join('');\n  return result;\n}\nfunction cleanEscapedString(input) {\n  var matched = input.match(escapedStringRegExp);\n  if (!matched) {\n    return input;\n  }\n  return matched[1].replace(doubleQuoteRegExp, \"'\");\n}","import toDate from \"../toDate/index.js\";\nimport addLeadingZeros from \"../_lib/addLeadingZeros/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatISO\n * @category Common Helpers\n * @summary Format the date according to the ISO 8601 standard (https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm).\n *\n * @description\n * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {'extended'|'basic'} [options.format='extended'] - if 'basic', hide delimiters between date and time values.\n * @param {'complete'|'date'|'time'} [options.representation='complete'] - format date, time with local time zone, or both.\n * @returns {String} the formatted date string (in local time zone)\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.format` must be 'extended' or 'basic'\n * @throws {RangeError} `options.representation` must be 'date', 'time' or 'complete'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601, short format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918T190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, date only:\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, time only (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52Z'\n */\nexport default function formatISO(date, options) {\n  var _options$format, _options$representati;\n  requiredArgs(1, arguments);\n  var originalDate = toDate(date);\n  if (isNaN(originalDate.getTime())) {\n    throw new RangeError('Invalid time value');\n  }\n  var format = String((_options$format = options === null || options === void 0 ? void 0 : options.format) !== null && _options$format !== void 0 ? _options$format : 'extended');\n  var representation = String((_options$representati = options === null || options === void 0 ? void 0 : options.representation) !== null && _options$representati !== void 0 ? _options$representati : 'complete');\n  if (format !== 'extended' && format !== 'basic') {\n    throw new RangeError(\"format must be 'extended' or 'basic'\");\n  }\n  if (representation !== 'date' && representation !== 'time' && representation !== 'complete') {\n    throw new RangeError(\"representation must be 'date', 'time', or 'complete'\");\n  }\n  var result = '';\n  var tzOffset = '';\n  var dateDelimiter = format === 'extended' ? '-' : '';\n  var timeDelimiter = format === 'extended' ? ':' : '';\n\n  // Representation is either 'date' or 'complete'\n  if (representation !== 'time') {\n    var day = addLeadingZeros(originalDate.getDate(), 2);\n    var month = addLeadingZeros(originalDate.getMonth() + 1, 2);\n    var year = addLeadingZeros(originalDate.getFullYear(), 4);\n\n    // yyyyMMdd or yyyy-MM-dd.\n    result = \"\".concat(year).concat(dateDelimiter).concat(month).concat(dateDelimiter).concat(day);\n  }\n\n  // Representation is either 'time' or 'complete'\n  if (representation !== 'date') {\n    // Add the timezone.\n    var offset = originalDate.getTimezoneOffset();\n    if (offset !== 0) {\n      var absoluteOffset = Math.abs(offset);\n      var hourOffset = addLeadingZeros(Math.floor(absoluteOffset / 60), 2);\n      var minuteOffset = addLeadingZeros(absoluteOffset % 60, 2);\n      // If less than 0, the sign is +, because it is ahead of time.\n      var sign = offset < 0 ? '+' : '-';\n      tzOffset = \"\".concat(sign).concat(hourOffset, \":\").concat(minuteOffset);\n    } else {\n      tzOffset = 'Z';\n    }\n    var hour = addLeadingZeros(originalDate.getHours(), 2);\n    var minute = addLeadingZeros(originalDate.getMinutes(), 2);\n    var second = addLeadingZeros(originalDate.getSeconds(), 2);\n\n    // If there's also date, separate it with time with 'T'\n    var separator = result === '' ? '' : 'T';\n\n    // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined.\n    var time = [hour, minute, second].join(timeDelimiter);\n\n    // HHmmss or HH:mm:ss.\n    result = \"\".concat(result).concat(separator).concat(time).concat(tzOffset);\n  }\n  return result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var dateToCompare = toDate(dirtyDateToCompare);\n  return date.getTime() > dateToCompare.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var dateToCompare = toDate(dirtyDateToCompare);\n  return date.getTime() < dateToCompare.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isFuture\n * @category Common Helpers\n * @summary Is the given date in the future?\n * @pure false\n *\n * @description\n * Is the given date in the future?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the future\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 31 December 2014 in the future?\n * const result = isFuture(new Date(2014, 11, 31))\n * //=> true\n */\nexport default function isFuture(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getTime() > Date.now();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isPast\n * @category Common Helpers\n * @summary Is the given date in the past?\n * @pure false\n *\n * @description\n * Is the given date in the past?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the past\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 2 July 2014 in the past?\n * const result = isPast(new Date(2014, 6, 2))\n * //=> true\n */\nexport default function isPast(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getTime() < Date.now();\n}","import addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport default function subDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addDays(dirtyDate, -amount);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInMinute } from \"../constants/index.js\";\n/**\n * @name minutesToMilliseconds\n * @category Conversion Helpers\n * @summary Convert minutes to milliseconds.\n *\n * @description\n * Convert a number of minutes to a full number of milliseconds.\n *\n * @param {number} minutes - number of minutes to be converted\n *\n * @returns {number} the number of minutes converted in milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 minutes to milliseconds\n * const result = minutesToMilliseconds(2)\n * //=> 120000\n */\nexport default function minutesToMilliseconds(minutes) {\n  requiredArgs(1, arguments);\n  return Math.floor(minutes * millisecondsInMinute);\n}","import { millisecondsInHour, millisecondsInMinute } from \"../constants/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function parseISO(argument, options) {\n  var _options$additionalDi;\n  requiredArgs(1, arguments);\n  var additionalDigits = toInteger((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2);\n  if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n    throw new RangeError('additionalDigits must be 0, 1 or 2');\n  }\n  if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n    return new Date(NaN);\n  }\n  var dateStrings = splitDateString(argument);\n  var date;\n  if (dateStrings.date) {\n    var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n    date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n  }\n  if (!date || isNaN(date.getTime())) {\n    return new Date(NaN);\n  }\n  var timestamp = date.getTime();\n  var time = 0;\n  var offset;\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time);\n    if (isNaN(time)) {\n      return new Date(NaN);\n    }\n  }\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone);\n    if (isNaN(offset)) {\n      return new Date(NaN);\n    }\n  } else {\n    var dirtyDate = new Date(timestamp + time);\n    // js parsed string assuming it's in UTC timezone\n    // but we need it to be parsed in our timezone\n    // so we use utc values to build date in our timezone.\n    // Year values from 0 to 99 map to the years 1900 to 1999\n    // so set year explicitly with setFullYear.\n    var result = new Date(0);\n    result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n    result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n    return result;\n  }\n  return new Date(timestamp + time + offset);\n}\nvar patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\nfunction splitDateString(dateString) {\n  var dateStrings = {};\n  var array = dateString.split(patterns.dateTimeDelimiter);\n  var timeString;\n\n  // The regex match should only return at maximum two array elements.\n  // [date], [time], or [date, time].\n  if (array.length > 2) {\n    return dateStrings;\n  }\n  if (/:/.test(array[0])) {\n    timeString = array[0];\n  } else {\n    dateStrings.date = array[0];\n    timeString = array[1];\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n      timeString = dateString.substr(dateStrings.date.length, dateString.length);\n    }\n  }\n  if (timeString) {\n    var token = patterns.timezone.exec(timeString);\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], '');\n      dateStrings.timezone = token[1];\n    } else {\n      dateStrings.time = timeString;\n    }\n  }\n  return dateStrings;\n}\nfunction parseYear(dateString, additionalDigits) {\n  var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n  var captures = dateString.match(regex);\n  // Invalid ISO-formatted year\n  if (!captures) return {\n    year: NaN,\n    restDateString: ''\n  };\n  var year = captures[1] ? parseInt(captures[1]) : null;\n  var century = captures[2] ? parseInt(captures[2]) : null;\n\n  // either year or century is null, not both\n  return {\n    year: century === null ? year : century * 100,\n    restDateString: dateString.slice((captures[1] || captures[2]).length)\n  };\n}\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) return new Date(NaN);\n  var captures = dateString.match(dateRegex);\n  // Invalid ISO-formatted string\n  if (!captures) return new Date(NaN);\n  var isWeekDate = !!captures[4];\n  var dayOfYear = parseDateUnit(captures[1]);\n  var month = parseDateUnit(captures[2]) - 1;\n  var day = parseDateUnit(captures[3]);\n  var week = parseDateUnit(captures[4]);\n  var dayOfWeek = parseDateUnit(captures[5]) - 1;\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN);\n    }\n    return dayOfISOWeekYear(year, week, dayOfWeek);\n  } else {\n    var date = new Date(0);\n    if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n      return new Date(NaN);\n    }\n    date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n    return date;\n  }\n}\nfunction parseDateUnit(value) {\n  return value ? parseInt(value) : 1;\n}\nfunction parseTime(timeString) {\n  var captures = timeString.match(timeRegex);\n  if (!captures) return NaN; // Invalid ISO-formatted time\n\n  var hours = parseTimeUnit(captures[1]);\n  var minutes = parseTimeUnit(captures[2]);\n  var seconds = parseTimeUnit(captures[3]);\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN;\n  }\n  return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;\n}\nfunction parseTimeUnit(value) {\n  return value && parseFloat(value.replace(',', '.')) || 0;\n}\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === 'Z') return 0;\n  var captures = timezoneString.match(timezoneRegex);\n  if (!captures) return 0;\n  var sign = captures[1] === '+' ? -1 : 1;\n  var hours = parseInt(captures[2]);\n  var minutes = captures[3] && parseInt(captures[3]) || 0;\n  if (!validateTimezone(hours, minutes)) {\n    return NaN;\n  }\n  return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  var date = new Date(0);\n  date.setUTCFullYear(isoWeekYear, 0, 4);\n  var fourthOfJanuaryDay = date.getUTCDay() || 7;\n  var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\nfunction validateDate(year, month, date) {\n  return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\nfunction validateDayOfYearDate(year, dayOfYear) {\n  return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\nfunction validateWeekDate(_year, week, day) {\n  return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\nfunction validateTime(hours, minutes, seconds) {\n  if (hours === 24) {\n    return minutes === 0 && seconds === 0;\n  }\n  return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\nfunction validateTimezone(_hours, minutes) {\n  return minutes >= 0 && minutes <= 59;\n}","import { addSeconds } from 'date-fns'\n\nconst REDIRECTED_FROM_COOKIE_LIFETIME_S = 10\n\nexport function useRedirection() {\n  const from = useCookie('redirectedFrom', {\n    expires: addSeconds(new Date(), REDIRECTED_FROM_COOKIE_LIFETIME_S),\n  })\n\n  const fromInterchalet = computed(() => isInterchaletUrl(from.value ?? ''))\n\n  function save(source: string | undefined) {\n    from.value = source\n  }\n\n  return { from, fromInterchalet, save }\n}\n","import { withQuery } from 'ufo'\n\nexport default defineNuxtRouteMiddleware((to) => {\n  if (!import.meta.server) return\n\n  if (to.query.redirectedFrom) {\n    useRedirection().save(to.query.redirectedFrom?.toString())\n\n    // Redirecting with `external: true` to make sure the `redirectCode` is `301`.\n    // Otherwise, Nuxt always sets the `redirectCode` to 302, regardless of what was passed.\n    return navigateTo(withQuery(to.fullPath, { redirectedFrom: undefined }), {\n      redirectCode: 301,\n      external: true,\n    })\n  }\n})\n","import { isRef, toRef } from \"vue\";\nimport { useNuxtApp } from \"../nuxt.js\";\nimport { toArray } from \"../utils.js\";\nconst useStateKeyPrefix = \"$s\";\nexport function useState(...args) {\n  const autoKey = typeof args[args.length - 1] === \"string\" ? args.pop() : void 0;\n  if (typeof args[0] !== \"string\") {\n    args.unshift(autoKey);\n  }\n  const [_key, init] = args;\n  if (!_key || typeof _key !== \"string\") {\n    throw new TypeError(\"[nuxt] [useState] key must be a string: \" + _key);\n  }\n  if (init !== void 0 && typeof init !== \"function\") {\n    throw new Error(\"[nuxt] [useState] init must be a function: \" + init);\n  }\n  const key = useStateKeyPrefix + _key;\n  const nuxtApp = useNuxtApp();\n  const state = toRef(nuxtApp.payload.state, key);\n  if (state.value === void 0 && init) {\n    const initialValue = init();\n    if (isRef(initialValue)) {\n      nuxtApp.payload.state[key] = initialValue;\n      return initialValue;\n    }\n    state.value = initialValue;\n  }\n  return state;\n}\nexport function clearNuxtState(keys) {\n  const nuxtApp = useNuxtApp();\n  const _allKeys = Object.keys(nuxtApp.payload.state).map((key) => key.substring(useStateKeyPrefix.length));\n  const _keys = !keys ? _allKeys : typeof keys === \"function\" ? _allKeys.filter(keys) : toArray(keys);\n  for (const _key of _keys) {\n    const key = useStateKeyPrefix + _key;\n    if (key in nuxtApp.payload.state) {\n      nuxtApp.payload.state[key] = void 0;\n    }\n  }\n}\n","export default defineNuxtRouteMiddleware(() => {\n  useState(\n    'clientIP',\n    () => useRequestHeaders()['x-forwarded-for']?.split(',')[0] || '',\n  )\n})\n","export function useParams() {\n  return useNuxtApp().$params\n}\n","export function useStores() {\n  return useNuxtApp().$stores\n}\n// @ihgroup\nexport const useUseragent = () => useStores().useragent\nexport const useAB = () => useStores().ab\nexport const useConsent = () => useStores().consent\nexport const usePopups = () => useStores().popups\nexport const useIDs = () => useStores().ids\nexport const useToggler = () => useStores().toggler\nexport const useTracking = () => useStores().tracking\n// other\nexport const useAuth = () => useStores().auth\nexport const useBookmarks = () => useStores().bookmarks\nexport const useConfdata = () => useStores().confdata\nexport const useFlexTrip = () => useStores().flextrip\nexport const usePageHead = () => useStores().pagehead\nexport const usePartner = () => useStores().partner\n// export const useRecommendations = () => useStores().recommendations\nexport const useReviews = () => useStores().reviews\nexport const useSearch = () => useStores().search\nexport const useSettings = () => useStores().settings\nexport const useUser = () => useStores().user\nexport const useUserSurvey = () => useStores().usersurvey\n","export default defineNuxtRouteMiddleware(function paramsGlobalMiddleware(to) {\n  // TODO: Move to plugin setup for server and router.beforeEach() for client, when all dependant stores are migrated\n\n  const params = useParams()\n  params._init(to.query)\n  useFlexTrip().init(params.all)\n})\n","export default defineNuxtRouteMiddleware(async () => {\n  if (!import.meta.server) return\n\n  await usePartner().init()\n})\n","export default defineNuxtRouteMiddleware(() => {\n  if (!import.meta.server) return\n\n  useIDs().init()\n})\n","import { getRequestURL } from \"h3\";\nimport { useRequestEvent } from \"./ssr.js\";\nexport function useRequestURL(opts) {\n  if (import.meta.server) {\n    return getRequestURL(useRequestEvent(), opts);\n  }\n  return new URL(window.location.href);\n}\n","// src/subscribable.ts\nvar Subscribable = class {\n  constructor() {\n    this.listeners = /* @__PURE__ */ new Set();\n    this.subscribe = this.subscribe.bind(this);\n  }\n  subscribe(listener) {\n    this.listeners.add(listener);\n    this.onSubscribe();\n    return () => {\n      this.listeners.delete(listener);\n      this.onUnsubscribe();\n    };\n  }\n  hasListeners() {\n    return this.listeners.size > 0;\n  }\n  onSubscribe() {\n  }\n  onUnsubscribe() {\n  }\n};\nexport {\n  Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/utils.ts\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n  return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n  return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n  return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n  return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveEnabled(enabled, query) {\n  return typeof enabled === \"function\" ? enabled(query) : enabled;\n}\nfunction matchQuery(filters, query) {\n  const {\n    type = \"all\",\n    exact,\n    fetchStatus,\n    predicate,\n    queryKey,\n    stale\n  } = filters;\n  if (queryKey) {\n    if (exact) {\n      if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n        return false;\n      }\n    } else if (!partialMatchKey(query.queryKey, queryKey)) {\n      return false;\n    }\n  }\n  if (type !== \"all\") {\n    const isActive = query.isActive();\n    if (type === \"active\" && !isActive) {\n      return false;\n    }\n    if (type === \"inactive\" && isActive) {\n      return false;\n    }\n  }\n  if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n    return false;\n  }\n  if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n    return false;\n  }\n  if (predicate && !predicate(query)) {\n    return false;\n  }\n  return true;\n}\nfunction matchMutation(filters, mutation) {\n  const { exact, status, predicate, mutationKey } = filters;\n  if (mutationKey) {\n    if (!mutation.options.mutationKey) {\n      return false;\n    }\n    if (exact) {\n      if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n        return false;\n      }\n    } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n      return false;\n    }\n  }\n  if (status && mutation.state.status !== status) {\n    return false;\n  }\n  if (predicate && !predicate(mutation)) {\n    return false;\n  }\n  return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n  const hashFn = options?.queryKeyHashFn || hashKey;\n  return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n  return JSON.stringify(\n    queryKey,\n    (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n      result[key] = val[key];\n      return result;\n    }, {}) : val\n  );\n}\nfunction partialMatchKey(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n    return !Object.keys(b).some((key) => !partialMatchKey(a[key], b[key]));\n  }\n  return false;\n}\nfunction replaceEqualDeep(a, b) {\n  if (a === b) {\n    return a;\n  }\n  const array = isPlainArray(a) && isPlainArray(b);\n  if (array || isPlainObject(a) && isPlainObject(b)) {\n    const aItems = array ? a : Object.keys(a);\n    const aSize = aItems.length;\n    const bItems = array ? b : Object.keys(b);\n    const bSize = bItems.length;\n    const copy = array ? [] : {};\n    let equalItems = 0;\n    for (let i = 0; i < bSize; i++) {\n      const key = array ? i : bItems[i];\n      if ((!array && aItems.includes(key) || array) && a[key] === void 0 && b[key] === void 0) {\n        copy[key] = void 0;\n        equalItems++;\n      } else {\n        copy[key] = replaceEqualDeep(a[key], b[key]);\n        if (copy[key] === a[key] && a[key] !== void 0) {\n          equalItems++;\n        }\n      }\n    }\n    return aSize === bSize && equalItems === aSize ? a : copy;\n  }\n  return b;\n}\nfunction shallowEqualObjects(a, b) {\n  if (!b || Object.keys(a).length !== Object.keys(b).length) {\n    return false;\n  }\n  for (const key in a) {\n    if (a[key] !== b[key]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction isPlainArray(value) {\n  return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n  if (!hasObjectPrototype(o)) {\n    return false;\n  }\n  const ctor = o.constructor;\n  if (ctor === void 0) {\n    return true;\n  }\n  const prot = ctor.prototype;\n  if (!hasObjectPrototype(prot)) {\n    return false;\n  }\n  if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n    return false;\n  }\n  if (Object.getPrototypeOf(o) !== Object.prototype) {\n    return false;\n  }\n  return true;\n}\nfunction hasObjectPrototype(o) {\n  return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n  return new Promise((resolve) => {\n    setTimeout(resolve, timeout);\n  });\n}\nfunction replaceData(prevData, data, options) {\n  if (typeof options.structuralSharing === \"function\") {\n    return options.structuralSharing(prevData, data);\n  } else if (options.structuralSharing !== false) {\n    if (process.env.NODE_ENV !== \"production\") {\n      try {\n        return replaceEqualDeep(prevData, data);\n      } catch (error) {\n        console.error(\n          `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n        );\n      }\n    }\n    return replaceEqualDeep(prevData, data);\n  }\n  return data;\n}\nfunction keepPreviousData(previousData) {\n  return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n  const newItems = [...items, item];\n  return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n  const newItems = [item, ...items];\n  return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (options.queryFn === skipToken) {\n      console.error(\n        `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n      );\n    }\n  }\n  if (!options.queryFn && fetchOptions?.initialPromise) {\n    return () => fetchOptions.initialPromise;\n  }\n  if (!options.queryFn || options.queryFn === skipToken) {\n    return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n  }\n  return options.queryFn;\n}\nexport {\n  addToEnd,\n  addToStart,\n  ensureQueryFn,\n  functionalUpdate,\n  hashKey,\n  hashQueryKeyByOptions,\n  isPlainArray,\n  isPlainObject,\n  isServer,\n  isValidTimeout,\n  keepPreviousData,\n  matchMutation,\n  matchQuery,\n  noop,\n  partialMatchKey,\n  replaceData,\n  replaceEqualDeep,\n  resolveEnabled,\n  resolveStaleTime,\n  shallowEqualObjects,\n  skipToken,\n  sleep,\n  timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar FocusManager = class extends Subscribable {\n  #focused;\n  #cleanup;\n  #setup;\n  constructor() {\n    super();\n    this.#setup = (onFocus) => {\n      if (!isServer && window.addEventListener) {\n        const listener = () => onFocus();\n        window.addEventListener(\"visibilitychange\", listener, false);\n        return () => {\n          window.removeEventListener(\"visibilitychange\", listener);\n        };\n      }\n      return;\n    };\n  }\n  onSubscribe() {\n    if (!this.#cleanup) {\n      this.setEventListener(this.#setup);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#cleanup?.();\n      this.#cleanup = void 0;\n    }\n  }\n  setEventListener(setup) {\n    this.#setup = setup;\n    this.#cleanup?.();\n    this.#cleanup = setup((focused) => {\n      if (typeof focused === \"boolean\") {\n        this.setFocused(focused);\n      } else {\n        this.onFocus();\n      }\n    });\n  }\n  setFocused(focused) {\n    const changed = this.#focused !== focused;\n    if (changed) {\n      this.#focused = focused;\n      this.onFocus();\n    }\n  }\n  onFocus() {\n    const isFocused = this.isFocused();\n    this.listeners.forEach((listener) => {\n      listener(isFocused);\n    });\n  }\n  isFocused() {\n    if (typeof this.#focused === \"boolean\") {\n      return this.#focused;\n    }\n    return globalThis.document?.visibilityState !== \"hidden\";\n  }\n};\nvar focusManager = new FocusManager();\nexport {\n  FocusManager,\n  focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar OnlineManager = class extends Subscribable {\n  #online = true;\n  #cleanup;\n  #setup;\n  constructor() {\n    super();\n    this.#setup = (onOnline) => {\n      if (!isServer && window.addEventListener) {\n        const onlineListener = () => onOnline(true);\n        const offlineListener = () => onOnline(false);\n        window.addEventListener(\"online\", onlineListener, false);\n        window.addEventListener(\"offline\", offlineListener, false);\n        return () => {\n          window.removeEventListener(\"online\", onlineListener);\n          window.removeEventListener(\"offline\", offlineListener);\n        };\n      }\n      return;\n    };\n  }\n  onSubscribe() {\n    if (!this.#cleanup) {\n      this.setEventListener(this.#setup);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#cleanup?.();\n      this.#cleanup = void 0;\n    }\n  }\n  setEventListener(setup) {\n    this.#setup = setup;\n    this.#cleanup?.();\n    this.#cleanup = setup(this.setOnline.bind(this));\n  }\n  setOnline(online) {\n    const changed = this.#online !== online;\n    if (changed) {\n      this.#online = online;\n      this.listeners.forEach((listener) => {\n        listener(online);\n      });\n    }\n  }\n  isOnline() {\n    return this.#online;\n  }\n};\nvar onlineManager = new OnlineManager();\nexport {\n  OnlineManager,\n  onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/thenable.ts\nfunction pendingThenable() {\n  let resolve;\n  let reject;\n  const thenable = new Promise((_resolve, _reject) => {\n    resolve = _resolve;\n    reject = _reject;\n  });\n  thenable.status = \"pending\";\n  thenable.catch(() => {\n  });\n  function finalize(data) {\n    Object.assign(thenable, data);\n    delete thenable.resolve;\n    delete thenable.reject;\n  }\n  thenable.resolve = (value) => {\n    finalize({\n      status: \"fulfilled\",\n      value\n    });\n    resolve(value);\n  };\n  thenable.reject = (reason) => {\n    finalize({\n      status: \"rejected\",\n      reason\n    });\n    reject(reason);\n  };\n  return thenable;\n}\nexport {\n  pendingThenable\n};\n//# sourceMappingURL=thenable.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { isServer, sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n  return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n  return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n  constructor(options) {\n    super(\"CancelledError\");\n    this.revert = options?.revert;\n    this.silent = options?.silent;\n  }\n};\nfunction isCancelledError(value) {\n  return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n  let isRetryCancelled = false;\n  let failureCount = 0;\n  let isResolved = false;\n  let continueFn;\n  const thenable = pendingThenable();\n  const cancel = (cancelOptions) => {\n    if (!isResolved) {\n      reject(new CancelledError(cancelOptions));\n      config.abort?.();\n    }\n  };\n  const cancelRetry = () => {\n    isRetryCancelled = true;\n  };\n  const continueRetry = () => {\n    isRetryCancelled = false;\n  };\n  const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n  const canStart = () => canFetch(config.networkMode) && config.canRun();\n  const resolve = (value) => {\n    if (!isResolved) {\n      isResolved = true;\n      config.onSuccess?.(value);\n      continueFn?.();\n      thenable.resolve(value);\n    }\n  };\n  const reject = (value) => {\n    if (!isResolved) {\n      isResolved = true;\n      config.onError?.(value);\n      continueFn?.();\n      thenable.reject(value);\n    }\n  };\n  const pause = () => {\n    return new Promise((continueResolve) => {\n      continueFn = (value) => {\n        if (isResolved || canContinue()) {\n          continueResolve(value);\n        }\n      };\n      config.onPause?.();\n    }).then(() => {\n      continueFn = void 0;\n      if (!isResolved) {\n        config.onContinue?.();\n      }\n    });\n  };\n  const run = () => {\n    if (isResolved) {\n      return;\n    }\n    let promiseOrValue;\n    const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n    try {\n      promiseOrValue = initialPromise ?? config.fn();\n    } catch (error) {\n      promiseOrValue = Promise.reject(error);\n    }\n    Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n      if (isResolved) {\n        return;\n      }\n      const retry = config.retry ?? (isServer ? 0 : 3);\n      const retryDelay = config.retryDelay ?? defaultRetryDelay;\n      const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n      const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n      if (isRetryCancelled || !shouldRetry) {\n        reject(error);\n        return;\n      }\n      failureCount++;\n      config.onFail?.(failureCount, error);\n      sleep(delay).then(() => {\n        return canContinue() ? void 0 : pause();\n      }).then(() => {\n        if (isRetryCancelled) {\n          reject(error);\n        } else {\n          run();\n        }\n      });\n    });\n  };\n  return {\n    promise: thenable,\n    cancel,\n    continue: () => {\n      continueFn?.();\n      return thenable;\n    },\n    cancelRetry,\n    continueRetry,\n    canStart,\n    start: () => {\n      if (canStart()) {\n        run();\n      } else {\n        pause().then(run);\n      }\n      return thenable;\n    }\n  };\n}\nexport {\n  CancelledError,\n  canFetch,\n  createRetryer,\n  isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/notifyManager.ts\nfunction createNotifyManager() {\n  let queue = [];\n  let transactions = 0;\n  let notifyFn = (callback) => {\n    callback();\n  };\n  let batchNotifyFn = (callback) => {\n    callback();\n  };\n  let scheduleFn = (cb) => setTimeout(cb, 0);\n  const schedule = (callback) => {\n    if (transactions) {\n      queue.push(callback);\n    } else {\n      scheduleFn(() => {\n        notifyFn(callback);\n      });\n    }\n  };\n  const flush = () => {\n    const originalQueue = queue;\n    queue = [];\n    if (originalQueue.length) {\n      scheduleFn(() => {\n        batchNotifyFn(() => {\n          originalQueue.forEach((callback) => {\n            notifyFn(callback);\n          });\n        });\n      });\n    }\n  };\n  return {\n    batch: (callback) => {\n      let result;\n      transactions++;\n      try {\n        result = callback();\n      } finally {\n        transactions--;\n        if (!transactions) {\n          flush();\n        }\n      }\n      return result;\n    },\n    /**\n     * All calls to the wrapped function will be batched.\n     */\n    batchCalls: (callback) => {\n      return (...args) => {\n        schedule(() => {\n          callback(...args);\n        });\n      };\n    },\n    schedule,\n    /**\n     * Use this method to set a custom notify function.\n     * This can be used to for example wrap notifications with `React.act` while running tests.\n     */\n    setNotifyFunction: (fn) => {\n      notifyFn = fn;\n    },\n    /**\n     * Use this method to set a custom function to batch notifications together into a single tick.\n     * By default React Query will use the batch function provided by ReactDOM or React Native.\n     */\n    setBatchNotifyFunction: (fn) => {\n      batchNotifyFn = fn;\n    },\n    setScheduler: (fn) => {\n      scheduleFn = fn;\n    }\n  };\n}\nvar notifyManager = createNotifyManager();\nexport {\n  createNotifyManager,\n  notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/removable.ts\nimport { isServer, isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n  #gcTimeout;\n  destroy() {\n    this.clearGcTimeout();\n  }\n  scheduleGc() {\n    this.clearGcTimeout();\n    if (isValidTimeout(this.gcTime)) {\n      this.#gcTimeout = setTimeout(() => {\n        this.optionalRemove();\n      }, this.gcTime);\n    }\n  }\n  updateGcTime(newGcTime) {\n    this.gcTime = Math.max(\n      this.gcTime || 0,\n      newGcTime ?? (isServer ? Infinity : 5 * 60 * 1e3)\n    );\n  }\n  clearGcTimeout() {\n    if (this.#gcTimeout) {\n      clearTimeout(this.#gcTimeout);\n      this.#gcTimeout = void 0;\n    }\n  }\n};\nexport {\n  Removable\n};\n//# sourceMappingURL=removable.js.map","// src/query.ts\nimport {\n  ensureQueryFn,\n  noop,\n  replaceData,\n  resolveEnabled,\n  skipToken,\n  timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { canFetch, createRetryer, isCancelledError } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nvar Query = class extends Removable {\n  #initialState;\n  #revertState;\n  #cache;\n  #retryer;\n  #defaultOptions;\n  #abortSignalConsumed;\n  constructor(config) {\n    super();\n    this.#abortSignalConsumed = false;\n    this.#defaultOptions = config.defaultOptions;\n    this.setOptions(config.options);\n    this.observers = [];\n    this.#cache = config.cache;\n    this.queryKey = config.queryKey;\n    this.queryHash = config.queryHash;\n    this.#initialState = getDefaultState(this.options);\n    this.state = config.state ?? this.#initialState;\n    this.scheduleGc();\n  }\n  get meta() {\n    return this.options.meta;\n  }\n  get promise() {\n    return this.#retryer?.promise;\n  }\n  setOptions(options) {\n    this.options = { ...this.#defaultOptions, ...options };\n    this.updateGcTime(this.options.gcTime);\n  }\n  optionalRemove() {\n    if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n      this.#cache.remove(this);\n    }\n  }\n  setData(newData, options) {\n    const data = replaceData(this.state.data, newData, this.options);\n    this.#dispatch({\n      data,\n      type: \"success\",\n      dataUpdatedAt: options?.updatedAt,\n      manual: options?.manual\n    });\n    return data;\n  }\n  setState(state, setStateOptions) {\n    this.#dispatch({ type: \"setState\", state, setStateOptions });\n  }\n  cancel(options) {\n    const promise = this.#retryer?.promise;\n    this.#retryer?.cancel(options);\n    return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n  }\n  destroy() {\n    super.destroy();\n    this.cancel({ silent: true });\n  }\n  reset() {\n    this.destroy();\n    this.setState(this.#initialState);\n  }\n  isActive() {\n    return this.observers.some(\n      (observer) => resolveEnabled(observer.options.enabled, this) !== false\n    );\n  }\n  isDisabled() {\n    if (this.getObserversCount() > 0) {\n      return !this.isActive();\n    }\n    return this.options.queryFn === skipToken || this.state.dataUpdateCount + this.state.errorUpdateCount === 0;\n  }\n  isStale() {\n    if (this.state.isInvalidated) {\n      return true;\n    }\n    if (this.getObserversCount() > 0) {\n      return this.observers.some(\n        (observer) => observer.getCurrentResult().isStale\n      );\n    }\n    return this.state.data === void 0;\n  }\n  isStaleByTime(staleTime = 0) {\n    return this.state.isInvalidated || this.state.data === void 0 || !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n  }\n  onFocus() {\n    const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n    observer?.refetch({ cancelRefetch: false });\n    this.#retryer?.continue();\n  }\n  onOnline() {\n    const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n    observer?.refetch({ cancelRefetch: false });\n    this.#retryer?.continue();\n  }\n  addObserver(observer) {\n    if (!this.observers.includes(observer)) {\n      this.observers.push(observer);\n      this.clearGcTimeout();\n      this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n    }\n  }\n  removeObserver(observer) {\n    if (this.observers.includes(observer)) {\n      this.observers = this.observers.filter((x) => x !== observer);\n      if (!this.observers.length) {\n        if (this.#retryer) {\n          if (this.#abortSignalConsumed) {\n            this.#retryer.cancel({ revert: true });\n          } else {\n            this.#retryer.cancelRetry();\n          }\n        }\n        this.scheduleGc();\n      }\n      this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n    }\n  }\n  getObserversCount() {\n    return this.observers.length;\n  }\n  invalidate() {\n    if (!this.state.isInvalidated) {\n      this.#dispatch({ type: \"invalidate\" });\n    }\n  }\n  fetch(options, fetchOptions) {\n    if (this.state.fetchStatus !== \"idle\") {\n      if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n        this.cancel({ silent: true });\n      } else if (this.#retryer) {\n        this.#retryer.continueRetry();\n        return this.#retryer.promise;\n      }\n    }\n    if (options) {\n      this.setOptions(options);\n    }\n    if (!this.options.queryFn) {\n      const observer = this.observers.find((x) => x.options.queryFn);\n      if (observer) {\n        this.setOptions(observer.options);\n      }\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      if (!Array.isArray(this.options.queryKey)) {\n        console.error(\n          `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n        );\n      }\n    }\n    const abortController = new AbortController();\n    const addSignalProperty = (object) => {\n      Object.defineProperty(object, \"signal\", {\n        enumerable: true,\n        get: () => {\n          this.#abortSignalConsumed = true;\n          return abortController.signal;\n        }\n      });\n    };\n    const fetchFn = () => {\n      const queryFn = ensureQueryFn(this.options, fetchOptions);\n      const queryFnContext = {\n        queryKey: this.queryKey,\n        meta: this.meta\n      };\n      addSignalProperty(queryFnContext);\n      this.#abortSignalConsumed = false;\n      if (this.options.persister) {\n        return this.options.persister(\n          queryFn,\n          queryFnContext,\n          this\n        );\n      }\n      return queryFn(queryFnContext);\n    };\n    const context = {\n      fetchOptions,\n      options: this.options,\n      queryKey: this.queryKey,\n      state: this.state,\n      fetchFn\n    };\n    addSignalProperty(context);\n    this.options.behavior?.onFetch(\n      context,\n      this\n    );\n    this.#revertState = this.state;\n    if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n      this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n    }\n    const onError = (error) => {\n      if (!(isCancelledError(error) && error.silent)) {\n        this.#dispatch({\n          type: \"error\",\n          error\n        });\n      }\n      if (!isCancelledError(error)) {\n        this.#cache.config.onError?.(\n          error,\n          this\n        );\n        this.#cache.config.onSettled?.(\n          this.state.data,\n          error,\n          this\n        );\n      }\n      this.scheduleGc();\n    };\n    this.#retryer = createRetryer({\n      initialPromise: fetchOptions?.initialPromise,\n      fn: context.fetchFn,\n      abort: abortController.abort.bind(abortController),\n      onSuccess: (data) => {\n        if (data === void 0) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(\n              `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n            );\n          }\n          onError(new Error(`${this.queryHash} data is undefined`));\n          return;\n        }\n        try {\n          this.setData(data);\n        } catch (error) {\n          onError(error);\n          return;\n        }\n        this.#cache.config.onSuccess?.(data, this);\n        this.#cache.config.onSettled?.(\n          data,\n          this.state.error,\n          this\n        );\n        this.scheduleGc();\n      },\n      onError,\n      onFail: (failureCount, error) => {\n        this.#dispatch({ type: \"failed\", failureCount, error });\n      },\n      onPause: () => {\n        this.#dispatch({ type: \"pause\" });\n      },\n      onContinue: () => {\n        this.#dispatch({ type: \"continue\" });\n      },\n      retry: context.options.retry,\n      retryDelay: context.options.retryDelay,\n      networkMode: context.options.networkMode,\n      canRun: () => true\n    });\n    return this.#retryer.start();\n  }\n  #dispatch(action) {\n    const reducer = (state) => {\n      switch (action.type) {\n        case \"failed\":\n          return {\n            ...state,\n            fetchFailureCount: action.failureCount,\n            fetchFailureReason: action.error\n          };\n        case \"pause\":\n          return {\n            ...state,\n            fetchStatus: \"paused\"\n          };\n        case \"continue\":\n          return {\n            ...state,\n            fetchStatus: \"fetching\"\n          };\n        case \"fetch\":\n          return {\n            ...state,\n            ...fetchState(state.data, this.options),\n            fetchMeta: action.meta ?? null\n          };\n        case \"success\":\n          return {\n            ...state,\n            data: action.data,\n            dataUpdateCount: state.dataUpdateCount + 1,\n            dataUpdatedAt: action.dataUpdatedAt ?? Date.now(),\n            error: null,\n            isInvalidated: false,\n            status: \"success\",\n            ...!action.manual && {\n              fetchStatus: \"idle\",\n              fetchFailureCount: 0,\n              fetchFailureReason: null\n            }\n          };\n        case \"error\":\n          const error = action.error;\n          if (isCancelledError(error) && error.revert && this.#revertState) {\n            return { ...this.#revertState, fetchStatus: \"idle\" };\n          }\n          return {\n            ...state,\n            error,\n            errorUpdateCount: state.errorUpdateCount + 1,\n            errorUpdatedAt: Date.now(),\n            fetchFailureCount: state.fetchFailureCount + 1,\n            fetchFailureReason: error,\n            fetchStatus: \"idle\",\n            status: \"error\"\n          };\n        case \"invalidate\":\n          return {\n            ...state,\n            isInvalidated: true\n          };\n        case \"setState\":\n          return {\n            ...state,\n            ...action.state\n          };\n      }\n    };\n    this.state = reducer(this.state);\n    notifyManager.batch(() => {\n      this.observers.forEach((observer) => {\n        observer.onQueryUpdate();\n      });\n      this.#cache.notify({ query: this, type: \"updated\", action });\n    });\n  }\n};\nfunction fetchState(data, options) {\n  return {\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n    ...data === void 0 && {\n      error: null,\n      status: \"pending\"\n    }\n  };\n}\nfunction getDefaultState(options) {\n  const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n  const hasData = data !== void 0;\n  const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n  return {\n    data,\n    dataUpdateCount: 0,\n    dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n    error: null,\n    errorUpdateCount: 0,\n    errorUpdatedAt: 0,\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchMeta: null,\n    isInvalidated: false,\n    status: hasData ? \"success\" : \"pending\",\n    fetchStatus: \"idle\"\n  };\n}\nexport {\n  Query,\n  fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n  constructor(config = {}) {\n    super();\n    this.config = config;\n    this.#queries = /* @__PURE__ */ new Map();\n  }\n  #queries;\n  build(client, options, state) {\n    const queryKey = options.queryKey;\n    const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n    let query = this.get(queryHash);\n    if (!query) {\n      query = new Query({\n        cache: this,\n        queryKey,\n        queryHash,\n        options: client.defaultQueryOptions(options),\n        state,\n        defaultOptions: client.getQueryDefaults(queryKey)\n      });\n      this.add(query);\n    }\n    return query;\n  }\n  add(query) {\n    if (!this.#queries.has(query.queryHash)) {\n      this.#queries.set(query.queryHash, query);\n      this.notify({\n        type: \"added\",\n        query\n      });\n    }\n  }\n  remove(query) {\n    const queryInMap = this.#queries.get(query.queryHash);\n    if (queryInMap) {\n      query.destroy();\n      if (queryInMap === query) {\n        this.#queries.delete(query.queryHash);\n      }\n      this.notify({ type: \"removed\", query });\n    }\n  }\n  clear() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        this.remove(query);\n      });\n    });\n  }\n  get(queryHash) {\n    return this.#queries.get(queryHash);\n  }\n  getAll() {\n    return [...this.#queries.values()];\n  }\n  find(filters) {\n    const defaultedFilters = { exact: true, ...filters };\n    return this.getAll().find(\n      (query) => matchQuery(defaultedFilters, query)\n    );\n  }\n  findAll(filters = {}) {\n    const queries = this.getAll();\n    return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n  }\n  notify(event) {\n    notifyManager.batch(() => {\n      this.listeners.forEach((listener) => {\n        listener(event);\n      });\n    });\n  }\n  onFocus() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        query.onFocus();\n      });\n    });\n  }\n  onOnline() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        query.onOnline();\n      });\n    });\n  }\n};\nexport {\n  QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n  #observers;\n  #mutationCache;\n  #retryer;\n  constructor(config) {\n    super();\n    this.mutationId = config.mutationId;\n    this.#mutationCache = config.mutationCache;\n    this.#observers = [];\n    this.state = config.state || getDefaultState();\n    this.setOptions(config.options);\n    this.scheduleGc();\n  }\n  setOptions(options) {\n    this.options = options;\n    this.updateGcTime(this.options.gcTime);\n  }\n  get meta() {\n    return this.options.meta;\n  }\n  addObserver(observer) {\n    if (!this.#observers.includes(observer)) {\n      this.#observers.push(observer);\n      this.clearGcTimeout();\n      this.#mutationCache.notify({\n        type: \"observerAdded\",\n        mutation: this,\n        observer\n      });\n    }\n  }\n  removeObserver(observer) {\n    this.#observers = this.#observers.filter((x) => x !== observer);\n    this.scheduleGc();\n    this.#mutationCache.notify({\n      type: \"observerRemoved\",\n      mutation: this,\n      observer\n    });\n  }\n  optionalRemove() {\n    if (!this.#observers.length) {\n      if (this.state.status === \"pending\") {\n        this.scheduleGc();\n      } else {\n        this.#mutationCache.remove(this);\n      }\n    }\n  }\n  continue() {\n    return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n    this.execute(this.state.variables);\n  }\n  async execute(variables) {\n    this.#retryer = createRetryer({\n      fn: () => {\n        if (!this.options.mutationFn) {\n          return Promise.reject(new Error(\"No mutationFn found\"));\n        }\n        return this.options.mutationFn(variables);\n      },\n      onFail: (failureCount, error) => {\n        this.#dispatch({ type: \"failed\", failureCount, error });\n      },\n      onPause: () => {\n        this.#dispatch({ type: \"pause\" });\n      },\n      onContinue: () => {\n        this.#dispatch({ type: \"continue\" });\n      },\n      retry: this.options.retry ?? 0,\n      retryDelay: this.options.retryDelay,\n      networkMode: this.options.networkMode,\n      canRun: () => this.#mutationCache.canRun(this)\n    });\n    const restored = this.state.status === \"pending\";\n    const isPaused = !this.#retryer.canStart();\n    try {\n      if (!restored) {\n        this.#dispatch({ type: \"pending\", variables, isPaused });\n        await this.#mutationCache.config.onMutate?.(\n          variables,\n          this\n        );\n        const context = await this.options.onMutate?.(variables);\n        if (context !== this.state.context) {\n          this.#dispatch({\n            type: \"pending\",\n            context,\n            variables,\n            isPaused\n          });\n        }\n      }\n      const data = await this.#retryer.start();\n      await this.#mutationCache.config.onSuccess?.(\n        data,\n        variables,\n        this.state.context,\n        this\n      );\n      await this.options.onSuccess?.(data, variables, this.state.context);\n      await this.#mutationCache.config.onSettled?.(\n        data,\n        null,\n        this.state.variables,\n        this.state.context,\n        this\n      );\n      await this.options.onSettled?.(data, null, variables, this.state.context);\n      this.#dispatch({ type: \"success\", data });\n      return data;\n    } catch (error) {\n      try {\n        await this.#mutationCache.config.onError?.(\n          error,\n          variables,\n          this.state.context,\n          this\n        );\n        await this.options.onError?.(\n          error,\n          variables,\n          this.state.context\n        );\n        await this.#mutationCache.config.onSettled?.(\n          void 0,\n          error,\n          this.state.variables,\n          this.state.context,\n          this\n        );\n        await this.options.onSettled?.(\n          void 0,\n          error,\n          variables,\n          this.state.context\n        );\n        throw error;\n      } finally {\n        this.#dispatch({ type: \"error\", error });\n      }\n    } finally {\n      this.#mutationCache.runNext(this);\n    }\n  }\n  #dispatch(action) {\n    const reducer = (state) => {\n      switch (action.type) {\n        case \"failed\":\n          return {\n            ...state,\n            failureCount: action.failureCount,\n            failureReason: action.error\n          };\n        case \"pause\":\n          return {\n            ...state,\n            isPaused: true\n          };\n        case \"continue\":\n          return {\n            ...state,\n            isPaused: false\n          };\n        case \"pending\":\n          return {\n            ...state,\n            context: action.context,\n            data: void 0,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            isPaused: action.isPaused,\n            status: \"pending\",\n            variables: action.variables,\n            submittedAt: Date.now()\n          };\n        case \"success\":\n          return {\n            ...state,\n            data: action.data,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            status: \"success\",\n            isPaused: false\n          };\n        case \"error\":\n          return {\n            ...state,\n            data: void 0,\n            error: action.error,\n            failureCount: state.failureCount + 1,\n            failureReason: action.error,\n            isPaused: false,\n            status: \"error\"\n          };\n      }\n    };\n    this.state = reducer(this.state);\n    notifyManager.batch(() => {\n      this.#observers.forEach((observer) => {\n        observer.onMutationUpdate(action);\n      });\n      this.#mutationCache.notify({\n        mutation: this,\n        type: \"updated\",\n        action\n      });\n    });\n  }\n};\nfunction getDefaultState() {\n  return {\n    context: void 0,\n    data: void 0,\n    error: null,\n    failureCount: 0,\n    failureReason: null,\n    isPaused: false,\n    status: \"idle\",\n    variables: void 0,\n    submittedAt: 0\n  };\n}\nexport {\n  Mutation,\n  getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n  constructor(config = {}) {\n    super();\n    this.config = config;\n    this.#mutations = /* @__PURE__ */ new Map();\n    this.#mutationId = Date.now();\n  }\n  #mutations;\n  #mutationId;\n  build(client, options, state) {\n    const mutation = new Mutation({\n      mutationCache: this,\n      mutationId: ++this.#mutationId,\n      options: client.defaultMutationOptions(options),\n      state\n    });\n    this.add(mutation);\n    return mutation;\n  }\n  add(mutation) {\n    const scope = scopeFor(mutation);\n    const mutations = this.#mutations.get(scope) ?? [];\n    mutations.push(mutation);\n    this.#mutations.set(scope, mutations);\n    this.notify({ type: \"added\", mutation });\n  }\n  remove(mutation) {\n    const scope = scopeFor(mutation);\n    if (this.#mutations.has(scope)) {\n      const mutations = this.#mutations.get(scope)?.filter((x) => x !== mutation);\n      if (mutations) {\n        if (mutations.length === 0) {\n          this.#mutations.delete(scope);\n        } else {\n          this.#mutations.set(scope, mutations);\n        }\n      }\n    }\n    this.notify({ type: \"removed\", mutation });\n  }\n  canRun(mutation) {\n    const firstPendingMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m.state.status === \"pending\");\n    return !firstPendingMutation || firstPendingMutation === mutation;\n  }\n  runNext(mutation) {\n    const foundMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m !== mutation && m.state.isPaused);\n    return foundMutation?.continue() ?? Promise.resolve();\n  }\n  clear() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((mutation) => {\n        this.remove(mutation);\n      });\n    });\n  }\n  getAll() {\n    return [...this.#mutations.values()].flat();\n  }\n  find(filters) {\n    const defaultedFilters = { exact: true, ...filters };\n    return this.getAll().find(\n      (mutation) => matchMutation(defaultedFilters, mutation)\n    );\n  }\n  findAll(filters = {}) {\n    return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n  }\n  notify(event) {\n    notifyManager.batch(() => {\n      this.listeners.forEach((listener) => {\n        listener(event);\n      });\n    });\n  }\n  resumePausedMutations() {\n    const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n    return notifyManager.batch(\n      () => Promise.all(\n        pausedMutations.map((mutation) => mutation.continue().catch(noop))\n      )\n    );\n  }\n};\nfunction scopeFor(mutation) {\n  return mutation.options.scope?.id ?? String(mutation.mutationId);\n}\nexport {\n  MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/infiniteQueryBehavior.ts\nimport { addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n  return {\n    onFetch: (context, query) => {\n      const options = context.options;\n      const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n      const oldPages = context.state.data?.pages || [];\n      const oldPageParams = context.state.data?.pageParams || [];\n      let result = { pages: [], pageParams: [] };\n      let currentPage = 0;\n      const fetchFn = async () => {\n        let cancelled = false;\n        const addSignalProperty = (object) => {\n          Object.defineProperty(object, \"signal\", {\n            enumerable: true,\n            get: () => {\n              if (context.signal.aborted) {\n                cancelled = true;\n              } else {\n                context.signal.addEventListener(\"abort\", () => {\n                  cancelled = true;\n                });\n              }\n              return context.signal;\n            }\n          });\n        };\n        const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n        const fetchPage = async (data, param, previous) => {\n          if (cancelled) {\n            return Promise.reject();\n          }\n          if (param == null && data.pages.length) {\n            return Promise.resolve(data);\n          }\n          const queryFnContext = {\n            queryKey: context.queryKey,\n            pageParam: param,\n            direction: previous ? \"backward\" : \"forward\",\n            meta: context.options.meta\n          };\n          addSignalProperty(queryFnContext);\n          const page = await queryFn(\n            queryFnContext\n          );\n          const { maxPages } = context.options;\n          const addTo = previous ? addToStart : addToEnd;\n          return {\n            pages: addTo(data.pages, page, maxPages),\n            pageParams: addTo(data.pageParams, param, maxPages)\n          };\n        };\n        if (direction && oldPages.length) {\n          const previous = direction === \"backward\";\n          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n          const oldData = {\n            pages: oldPages,\n            pageParams: oldPageParams\n          };\n          const param = pageParamFn(options, oldData);\n          result = await fetchPage(oldData, param, previous);\n        } else {\n          const remainingPages = pages ?? oldPages.length;\n          do {\n            const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n            if (currentPage > 0 && param == null) {\n              break;\n            }\n            result = await fetchPage(result, param);\n            currentPage++;\n          } while (currentPage < remainingPages);\n        }\n        return result;\n      };\n      if (context.options.persister) {\n        context.fetchFn = () => {\n          return context.options.persister?.(\n            fetchFn,\n            {\n              queryKey: context.queryKey,\n              meta: context.options.meta,\n              signal: context.signal\n            },\n            query\n          );\n        };\n      } else {\n        context.fetchFn = fetchFn;\n      }\n    }\n  };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n  const lastIndex = pages.length - 1;\n  return pages.length > 0 ? options.getNextPageParam(\n    pages[lastIndex],\n    pages,\n    pageParams[lastIndex],\n    pageParams\n  ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n  return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n  if (!data)\n    return false;\n  return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n  if (!data || !options.getPreviousPageParam)\n    return false;\n  return getPreviousPageParam(options, data) != null;\n}\nexport {\n  hasNextPage,\n  hasPreviousPage,\n  infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/queryClient.ts\nimport {\n  functionalUpdate,\n  hashKey,\n  hashQueryKeyByOptions,\n  noop,\n  partialMatchKey,\n  resolveStaleTime,\n  skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n  #queryCache;\n  #mutationCache;\n  #defaultOptions;\n  #queryDefaults;\n  #mutationDefaults;\n  #mountCount;\n  #unsubscribeFocus;\n  #unsubscribeOnline;\n  constructor(config = {}) {\n    this.#queryCache = config.queryCache || new QueryCache();\n    this.#mutationCache = config.mutationCache || new MutationCache();\n    this.#defaultOptions = config.defaultOptions || {};\n    this.#queryDefaults = /* @__PURE__ */ new Map();\n    this.#mutationDefaults = /* @__PURE__ */ new Map();\n    this.#mountCount = 0;\n  }\n  mount() {\n    this.#mountCount++;\n    if (this.#mountCount !== 1)\n      return;\n    this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n      if (focused) {\n        await this.resumePausedMutations();\n        this.#queryCache.onFocus();\n      }\n    });\n    this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n      if (online) {\n        await this.resumePausedMutations();\n        this.#queryCache.onOnline();\n      }\n    });\n  }\n  unmount() {\n    this.#mountCount--;\n    if (this.#mountCount !== 0)\n      return;\n    this.#unsubscribeFocus?.();\n    this.#unsubscribeFocus = void 0;\n    this.#unsubscribeOnline?.();\n    this.#unsubscribeOnline = void 0;\n  }\n  isFetching(filters) {\n    return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n  }\n  isMutating(filters) {\n    return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n  }\n  getQueryData(queryKey) {\n    const options = this.defaultQueryOptions({ queryKey });\n    return this.#queryCache.get(options.queryHash)?.state.data;\n  }\n  ensureQueryData(options) {\n    const cachedData = this.getQueryData(options.queryKey);\n    if (cachedData === void 0) {\n      return this.fetchQuery(options);\n    } else {\n      const defaultedOptions = this.defaultQueryOptions(options);\n      const query = this.#queryCache.build(this, defaultedOptions);\n      if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n        void this.prefetchQuery(defaultedOptions);\n      }\n      return Promise.resolve(cachedData);\n    }\n  }\n  getQueriesData(filters) {\n    return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n      const data = state.data;\n      return [queryKey, data];\n    });\n  }\n  setQueryData(queryKey, updater, options) {\n    const defaultedOptions = this.defaultQueryOptions({ queryKey });\n    const query = this.#queryCache.get(\n      defaultedOptions.queryHash\n    );\n    const prevData = query?.state.data;\n    const data = functionalUpdate(updater, prevData);\n    if (data === void 0) {\n      return void 0;\n    }\n    return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n  }\n  setQueriesData(filters, updater, options) {\n    return notifyManager.batch(\n      () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n        queryKey,\n        this.setQueryData(queryKey, updater, options)\n      ])\n    );\n  }\n  getQueryState(queryKey) {\n    const options = this.defaultQueryOptions({ queryKey });\n    return this.#queryCache.get(\n      options.queryHash\n    )?.state;\n  }\n  removeQueries(filters) {\n    const queryCache = this.#queryCache;\n    notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        queryCache.remove(query);\n      });\n    });\n  }\n  resetQueries(filters, options) {\n    const queryCache = this.#queryCache;\n    const refetchFilters = {\n      type: \"active\",\n      ...filters\n    };\n    return notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        query.reset();\n      });\n      return this.refetchQueries(refetchFilters, options);\n    });\n  }\n  cancelQueries(filters, cancelOptions = {}) {\n    const defaultedCancelOptions = { revert: true, ...cancelOptions };\n    const promises = notifyManager.batch(\n      () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n    );\n    return Promise.all(promises).then(noop).catch(noop);\n  }\n  invalidateQueries(filters, options = {}) {\n    return notifyManager.batch(() => {\n      this.#queryCache.findAll(filters).forEach((query) => {\n        query.invalidate();\n      });\n      if (filters?.refetchType === \"none\") {\n        return Promise.resolve();\n      }\n      const refetchFilters = {\n        ...filters,\n        type: filters?.refetchType ?? filters?.type ?? \"active\"\n      };\n      return this.refetchQueries(refetchFilters, options);\n    });\n  }\n  refetchQueries(filters, options = {}) {\n    const fetchOptions = {\n      ...options,\n      cancelRefetch: options.cancelRefetch ?? true\n    };\n    const promises = notifyManager.batch(\n      () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled()).map((query) => {\n        let promise = query.fetch(void 0, fetchOptions);\n        if (!fetchOptions.throwOnError) {\n          promise = promise.catch(noop);\n        }\n        return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n      })\n    );\n    return Promise.all(promises).then(noop);\n  }\n  fetchQuery(options) {\n    const defaultedOptions = this.defaultQueryOptions(options);\n    if (defaultedOptions.retry === void 0) {\n      defaultedOptions.retry = false;\n    }\n    const query = this.#queryCache.build(this, defaultedOptions);\n    return query.isStaleByTime(\n      resolveStaleTime(defaultedOptions.staleTime, query)\n    ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n  }\n  prefetchQuery(options) {\n    return this.fetchQuery(options).then(noop).catch(noop);\n  }\n  fetchInfiniteQuery(options) {\n    options.behavior = infiniteQueryBehavior(options.pages);\n    return this.fetchQuery(options);\n  }\n  prefetchInfiniteQuery(options) {\n    return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n  }\n  ensureInfiniteQueryData(options) {\n    options.behavior = infiniteQueryBehavior(options.pages);\n    return this.ensureQueryData(options);\n  }\n  resumePausedMutations() {\n    if (onlineManager.isOnline()) {\n      return this.#mutationCache.resumePausedMutations();\n    }\n    return Promise.resolve();\n  }\n  getQueryCache() {\n    return this.#queryCache;\n  }\n  getMutationCache() {\n    return this.#mutationCache;\n  }\n  getDefaultOptions() {\n    return this.#defaultOptions;\n  }\n  setDefaultOptions(options) {\n    this.#defaultOptions = options;\n  }\n  setQueryDefaults(queryKey, options) {\n    this.#queryDefaults.set(hashKey(queryKey), {\n      queryKey,\n      defaultOptions: options\n    });\n  }\n  getQueryDefaults(queryKey) {\n    const defaults = [...this.#queryDefaults.values()];\n    const result = {};\n    defaults.forEach((queryDefault) => {\n      if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n        Object.assign(result, queryDefault.defaultOptions);\n      }\n    });\n    return result;\n  }\n  setMutationDefaults(mutationKey, options) {\n    this.#mutationDefaults.set(hashKey(mutationKey), {\n      mutationKey,\n      defaultOptions: options\n    });\n  }\n  getMutationDefaults(mutationKey) {\n    const defaults = [...this.#mutationDefaults.values()];\n    let result = {};\n    defaults.forEach((queryDefault) => {\n      if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n        result = { ...result, ...queryDefault.defaultOptions };\n      }\n    });\n    return result;\n  }\n  defaultQueryOptions(options) {\n    if (options._defaulted) {\n      return options;\n    }\n    const defaultedOptions = {\n      ...this.#defaultOptions.queries,\n      ...this.getQueryDefaults(options.queryKey),\n      ...options,\n      _defaulted: true\n    };\n    if (!defaultedOptions.queryHash) {\n      defaultedOptions.queryHash = hashQueryKeyByOptions(\n        defaultedOptions.queryKey,\n        defaultedOptions\n      );\n    }\n    if (defaultedOptions.refetchOnReconnect === void 0) {\n      defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n    }\n    if (defaultedOptions.throwOnError === void 0) {\n      defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n    }\n    if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n      defaultedOptions.networkMode = \"offlineFirst\";\n    }\n    if (defaultedOptions.queryFn === skipToken) {\n      defaultedOptions.enabled = false;\n    }\n    return defaultedOptions;\n  }\n  defaultMutationOptions(options) {\n    if (options?._defaulted) {\n      return options;\n    }\n    return {\n      ...this.#defaultOptions.mutations,\n      ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n      ...options,\n      _defaulted: true\n    };\n  }\n  clear() {\n    this.#queryCache.clear();\n    this.#mutationCache.clear();\n  }\n};\nexport {\n  QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n  isServer,\n  isValidTimeout,\n  noop,\n  replaceData,\n  resolveEnabled,\n  resolveStaleTime,\n  shallowEqualObjects,\n  timeUntilStale\n} from \"./utils.js\";\nvar QueryObserver = class extends Subscribable {\n  constructor(client, options) {\n    super();\n    this.options = options;\n    this.#client = client;\n    this.#selectError = null;\n    this.#currentThenable = pendingThenable();\n    if (!this.options.experimental_prefetchInRender) {\n      this.#currentThenable.reject(\n        new Error(\"experimental_prefetchInRender feature flag is not enabled\")\n      );\n    }\n    this.bindMethods();\n    this.setOptions(options);\n  }\n  #client;\n  #currentQuery = void 0;\n  #currentQueryInitialState = void 0;\n  #currentResult = void 0;\n  #currentResultState;\n  #currentResultOptions;\n  #currentThenable;\n  #selectError;\n  #selectFn;\n  #selectResult;\n  // This property keeps track of the last query with defined data.\n  // It will be used to pass the previous data and query to the placeholder function between renders.\n  #lastQueryWithDefinedData;\n  #staleTimeoutId;\n  #refetchIntervalId;\n  #currentRefetchInterval;\n  #trackedProps = /* @__PURE__ */ new Set();\n  bindMethods() {\n    this.refetch = this.refetch.bind(this);\n  }\n  onSubscribe() {\n    if (this.listeners.size === 1) {\n      this.#currentQuery.addObserver(this);\n      if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n        this.#executeFetch();\n      } else {\n        this.updateResult();\n      }\n      this.#updateTimers();\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.destroy();\n    }\n  }\n  shouldFetchOnReconnect() {\n    return shouldFetchOn(\n      this.#currentQuery,\n      this.options,\n      this.options.refetchOnReconnect\n    );\n  }\n  shouldFetchOnWindowFocus() {\n    return shouldFetchOn(\n      this.#currentQuery,\n      this.options,\n      this.options.refetchOnWindowFocus\n    );\n  }\n  destroy() {\n    this.listeners = /* @__PURE__ */ new Set();\n    this.#clearStaleTimeout();\n    this.#clearRefetchInterval();\n    this.#currentQuery.removeObserver(this);\n  }\n  setOptions(options, notifyOptions) {\n    const prevOptions = this.options;\n    const prevQuery = this.#currentQuery;\n    this.options = this.#client.defaultQueryOptions(options);\n    if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveEnabled(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n      throw new Error(\n        \"Expected enabled to be a boolean or a callback that returns a boolean\"\n      );\n    }\n    this.#updateQuery();\n    this.#currentQuery.setOptions(this.options);\n    if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n      this.#client.getQueryCache().notify({\n        type: \"observerOptionsUpdated\",\n        query: this.#currentQuery,\n        observer: this\n      });\n    }\n    const mounted = this.hasListeners();\n    if (mounted && shouldFetchOptionally(\n      this.#currentQuery,\n      prevQuery,\n      this.options,\n      prevOptions\n    )) {\n      this.#executeFetch();\n    }\n    this.updateResult(notifyOptions);\n    if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n      this.#updateStaleTimeout();\n    }\n    const nextRefetchInterval = this.#computeRefetchInterval();\n    if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n      this.#updateRefetchInterval(nextRefetchInterval);\n    }\n  }\n  getOptimisticResult(options) {\n    const query = this.#client.getQueryCache().build(this.#client, options);\n    const result = this.createResult(query, options);\n    if (shouldAssignObserverCurrentProperties(this, result)) {\n      this.#currentResult = result;\n      this.#currentResultOptions = this.options;\n      this.#currentResultState = this.#currentQuery.state;\n    }\n    return result;\n  }\n  getCurrentResult() {\n    return this.#currentResult;\n  }\n  trackResult(result, onPropTracked) {\n    const trackedResult = {};\n    Object.keys(result).forEach((key) => {\n      Object.defineProperty(trackedResult, key, {\n        configurable: false,\n        enumerable: true,\n        get: () => {\n          this.trackProp(key);\n          onPropTracked?.(key);\n          return result[key];\n        }\n      });\n    });\n    return trackedResult;\n  }\n  trackProp(key) {\n    this.#trackedProps.add(key);\n  }\n  getCurrentQuery() {\n    return this.#currentQuery;\n  }\n  refetch({ ...options } = {}) {\n    return this.fetch({\n      ...options\n    });\n  }\n  fetchOptimistic(options) {\n    const defaultedOptions = this.#client.defaultQueryOptions(options);\n    const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n    return query.fetch().then(() => this.createResult(query, defaultedOptions));\n  }\n  fetch(fetchOptions) {\n    return this.#executeFetch({\n      ...fetchOptions,\n      cancelRefetch: fetchOptions.cancelRefetch ?? true\n    }).then(() => {\n      this.updateResult();\n      return this.#currentResult;\n    });\n  }\n  #executeFetch(fetchOptions) {\n    this.#updateQuery();\n    let promise = this.#currentQuery.fetch(\n      this.options,\n      fetchOptions\n    );\n    if (!fetchOptions?.throwOnError) {\n      promise = promise.catch(noop);\n    }\n    return promise;\n  }\n  #updateStaleTimeout() {\n    this.#clearStaleTimeout();\n    const staleTime = resolveStaleTime(\n      this.options.staleTime,\n      this.#currentQuery\n    );\n    if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n      return;\n    }\n    const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n    const timeout = time + 1;\n    this.#staleTimeoutId = setTimeout(() => {\n      if (!this.#currentResult.isStale) {\n        this.updateResult();\n      }\n    }, timeout);\n  }\n  #computeRefetchInterval() {\n    return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n  }\n  #updateRefetchInterval(nextInterval) {\n    this.#clearRefetchInterval();\n    this.#currentRefetchInterval = nextInterval;\n    if (isServer || resolveEnabled(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n      return;\n    }\n    this.#refetchIntervalId = setInterval(() => {\n      if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n        this.#executeFetch();\n      }\n    }, this.#currentRefetchInterval);\n  }\n  #updateTimers() {\n    this.#updateStaleTimeout();\n    this.#updateRefetchInterval(this.#computeRefetchInterval());\n  }\n  #clearStaleTimeout() {\n    if (this.#staleTimeoutId) {\n      clearTimeout(this.#staleTimeoutId);\n      this.#staleTimeoutId = void 0;\n    }\n  }\n  #clearRefetchInterval() {\n    if (this.#refetchIntervalId) {\n      clearInterval(this.#refetchIntervalId);\n      this.#refetchIntervalId = void 0;\n    }\n  }\n  createResult(query, options) {\n    const prevQuery = this.#currentQuery;\n    const prevOptions = this.options;\n    const prevResult = this.#currentResult;\n    const prevResultState = this.#currentResultState;\n    const prevResultOptions = this.#currentResultOptions;\n    const queryChange = query !== prevQuery;\n    const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n    const { state } = query;\n    let newState = { ...state };\n    let isPlaceholderData = false;\n    let data;\n    if (options._optimisticResults) {\n      const mounted = this.hasListeners();\n      const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n      const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n      if (fetchOnMount || fetchOptionally) {\n        newState = {\n          ...newState,\n          ...fetchState(state.data, query.options)\n        };\n      }\n      if (options._optimisticResults === \"isRestoring\") {\n        newState.fetchStatus = \"idle\";\n      }\n    }\n    let { error, errorUpdatedAt, status } = newState;\n    if (options.select && newState.data !== void 0) {\n      if (prevResult && newState.data === prevResultState?.data && options.select === this.#selectFn) {\n        data = this.#selectResult;\n      } else {\n        try {\n          this.#selectFn = options.select;\n          data = options.select(newState.data);\n          data = replaceData(prevResult?.data, data, options);\n          this.#selectResult = data;\n          this.#selectError = null;\n        } catch (selectError) {\n          this.#selectError = selectError;\n        }\n      }\n    } else {\n      data = newState.data;\n    }\n    if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n      let placeholderData;\n      if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n        placeholderData = prevResult.data;\n      } else {\n        placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n          this.#lastQueryWithDefinedData?.state.data,\n          this.#lastQueryWithDefinedData\n        ) : options.placeholderData;\n        if (options.select && placeholderData !== void 0) {\n          try {\n            placeholderData = options.select(placeholderData);\n            this.#selectError = null;\n          } catch (selectError) {\n            this.#selectError = selectError;\n          }\n        }\n      }\n      if (placeholderData !== void 0) {\n        status = \"success\";\n        data = replaceData(\n          prevResult?.data,\n          placeholderData,\n          options\n        );\n        isPlaceholderData = true;\n      }\n    }\n    if (this.#selectError) {\n      error = this.#selectError;\n      data = this.#selectResult;\n      errorUpdatedAt = Date.now();\n      status = \"error\";\n    }\n    const isFetching = newState.fetchStatus === \"fetching\";\n    const isPending = status === \"pending\";\n    const isError = status === \"error\";\n    const isLoading = isPending && isFetching;\n    const hasData = data !== void 0;\n    const result = {\n      status,\n      fetchStatus: newState.fetchStatus,\n      isPending,\n      isSuccess: status === \"success\",\n      isError,\n      isInitialLoading: isLoading,\n      isLoading,\n      data,\n      dataUpdatedAt: newState.dataUpdatedAt,\n      error,\n      errorUpdatedAt,\n      failureCount: newState.fetchFailureCount,\n      failureReason: newState.fetchFailureReason,\n      errorUpdateCount: newState.errorUpdateCount,\n      isFetched: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\n      isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n      isFetching,\n      isRefetching: isFetching && !isPending,\n      isLoadingError: isError && !hasData,\n      isPaused: newState.fetchStatus === \"paused\",\n      isPlaceholderData,\n      isRefetchError: isError && hasData,\n      isStale: isStale(query, options),\n      refetch: this.refetch,\n      promise: this.#currentThenable\n    };\n    const nextResult = result;\n    if (this.options.experimental_prefetchInRender) {\n      const finalizeThenableIfPossible = (thenable) => {\n        if (nextResult.status === \"error\") {\n          thenable.reject(nextResult.error);\n        } else if (nextResult.data !== void 0) {\n          thenable.resolve(nextResult.data);\n        }\n      };\n      const recreateThenable = () => {\n        const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n        finalizeThenableIfPossible(pending);\n      };\n      const prevThenable = this.#currentThenable;\n      switch (prevThenable.status) {\n        case \"pending\":\n          if (query.queryHash === prevQuery.queryHash) {\n            finalizeThenableIfPossible(prevThenable);\n          }\n          break;\n        case \"fulfilled\":\n          if (nextResult.status === \"error\" || nextResult.data !== prevThenable.value) {\n            recreateThenable();\n          }\n          break;\n        case \"rejected\":\n          if (nextResult.status !== \"error\" || nextResult.error !== prevThenable.reason) {\n            recreateThenable();\n          }\n          break;\n      }\n    }\n    return nextResult;\n  }\n  updateResult(notifyOptions) {\n    const prevResult = this.#currentResult;\n    const nextResult = this.createResult(this.#currentQuery, this.options);\n    this.#currentResultState = this.#currentQuery.state;\n    this.#currentResultOptions = this.options;\n    if (this.#currentResultState.data !== void 0) {\n      this.#lastQueryWithDefinedData = this.#currentQuery;\n    }\n    if (shallowEqualObjects(nextResult, prevResult)) {\n      return;\n    }\n    this.#currentResult = nextResult;\n    const defaultNotifyOptions = {};\n    const shouldNotifyListeners = () => {\n      if (!prevResult) {\n        return true;\n      }\n      const { notifyOnChangeProps } = this.options;\n      const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n      if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n        return true;\n      }\n      const includedProps = new Set(\n        notifyOnChangePropsValue ?? this.#trackedProps\n      );\n      if (this.options.throwOnError) {\n        includedProps.add(\"error\");\n      }\n      return Object.keys(this.#currentResult).some((key) => {\n        const typedKey = key;\n        const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n        return changed && includedProps.has(typedKey);\n      });\n    };\n    if (notifyOptions?.listeners !== false && shouldNotifyListeners()) {\n      defaultNotifyOptions.listeners = true;\n    }\n    this.#notify({ ...defaultNotifyOptions, ...notifyOptions });\n  }\n  #updateQuery() {\n    const query = this.#client.getQueryCache().build(this.#client, this.options);\n    if (query === this.#currentQuery) {\n      return;\n    }\n    const prevQuery = this.#currentQuery;\n    this.#currentQuery = query;\n    this.#currentQueryInitialState = query.state;\n    if (this.hasListeners()) {\n      prevQuery?.removeObserver(this);\n      query.addObserver(this);\n    }\n  }\n  onQueryUpdate() {\n    this.updateResult();\n    if (this.hasListeners()) {\n      this.#updateTimers();\n    }\n  }\n  #notify(notifyOptions) {\n    notifyManager.batch(() => {\n      if (notifyOptions.listeners) {\n        this.listeners.forEach((listener) => {\n          listener(this.#currentResult);\n        });\n      }\n      this.#client.getQueryCache().notify({\n        query: this.#currentQuery,\n        type: \"observerResultsUpdated\"\n      });\n    });\n  }\n};\nfunction shouldLoadOnMount(query, options) {\n  return resolveEnabled(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && options.retryOnMount === false);\n}\nfunction shouldFetchOnMount(query, options) {\n  return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n  if (resolveEnabled(options.enabled, query) !== false) {\n    const value = typeof field === \"function\" ? field(query) : field;\n    return value === \"always\" || value !== false && isStale(query, options);\n  }\n  return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n  return (query !== prevQuery || resolveEnabled(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n  return resolveEnabled(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n  if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n    return true;\n  }\n  return false;\n}\nexport {\n  QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n  #client;\n  #currentResult = void 0;\n  #currentMutation;\n  #mutateOptions;\n  constructor(client, options) {\n    super();\n    this.#client = client;\n    this.setOptions(options);\n    this.bindMethods();\n    this.#updateResult();\n  }\n  bindMethods() {\n    this.mutate = this.mutate.bind(this);\n    this.reset = this.reset.bind(this);\n  }\n  setOptions(options) {\n    const prevOptions = this.options;\n    this.options = this.#client.defaultMutationOptions(options);\n    if (!shallowEqualObjects(this.options, prevOptions)) {\n      this.#client.getMutationCache().notify({\n        type: \"observerOptionsUpdated\",\n        mutation: this.#currentMutation,\n        observer: this\n      });\n    }\n    if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n      this.reset();\n    } else if (this.#currentMutation?.state.status === \"pending\") {\n      this.#currentMutation.setOptions(this.options);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#currentMutation?.removeObserver(this);\n    }\n  }\n  onMutationUpdate(action) {\n    this.#updateResult();\n    this.#notify(action);\n  }\n  getCurrentResult() {\n    return this.#currentResult;\n  }\n  reset() {\n    this.#currentMutation?.removeObserver(this);\n    this.#currentMutation = void 0;\n    this.#updateResult();\n    this.#notify();\n  }\n  mutate(variables, options) {\n    this.#mutateOptions = options;\n    this.#currentMutation?.removeObserver(this);\n    this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n    this.#currentMutation.addObserver(this);\n    return this.#currentMutation.execute(variables);\n  }\n  #updateResult() {\n    const state = this.#currentMutation?.state ?? getDefaultState();\n    this.#currentResult = {\n      ...state,\n      isPending: state.status === \"pending\",\n      isSuccess: state.status === \"success\",\n      isError: state.status === \"error\",\n      isIdle: state.status === \"idle\",\n      mutate: this.mutate,\n      reset: this.reset\n    };\n  }\n  #notify(action) {\n    notifyManager.batch(() => {\n      if (this.#mutateOptions && this.hasListeners()) {\n        const variables = this.#currentResult.variables;\n        const context = this.#currentResult.context;\n        if (action?.type === \"success\") {\n          this.#mutateOptions.onSuccess?.(action.data, variables, context);\n          this.#mutateOptions.onSettled?.(action.data, null, variables, context);\n        } else if (action?.type === \"error\") {\n          this.#mutateOptions.onError?.(action.error, variables, context);\n          this.#mutateOptions.onSettled?.(\n            void 0,\n            action.error,\n            variables,\n            context\n          );\n        }\n      }\n      this.listeners.forEach((listener) => {\n        listener(this.#currentResult);\n      });\n    });\n  }\n};\nexport {\n  MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","// src/hydration.ts\nfunction defaultTransformerFn(data) {\n  return data;\n}\nfunction dehydrateMutation(mutation) {\n  return {\n    mutationKey: mutation.options.mutationKey,\n    state: mutation.state,\n    ...mutation.options.scope && { scope: mutation.options.scope },\n    ...mutation.meta && { meta: mutation.meta }\n  };\n}\nfunction dehydrateQuery(query, serializeData) {\n  return {\n    state: {\n      ...query.state,\n      ...query.state.data !== void 0 && {\n        data: serializeData(query.state.data)\n      }\n    },\n    queryKey: query.queryKey,\n    queryHash: query.queryHash,\n    ...query.state.status === \"pending\" && {\n      promise: query.promise?.then(serializeData).catch((error) => {\n        if (process.env.NODE_ENV !== \"production\") {\n          console.error(\n            `A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds`\n          );\n        }\n        return Promise.reject(new Error(\"redacted\"));\n      })\n    },\n    ...query.meta && { meta: query.meta }\n  };\n}\nfunction defaultShouldDehydrateMutation(mutation) {\n  return mutation.state.isPaused;\n}\nfunction defaultShouldDehydrateQuery(query) {\n  return query.state.status === \"success\";\n}\nfunction dehydrate(client, options = {}) {\n  const filterMutation = options.shouldDehydrateMutation ?? client.getDefaultOptions().dehydrate?.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;\n  const mutations = client.getMutationCache().getAll().flatMap(\n    (mutation) => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []\n  );\n  const filterQuery = options.shouldDehydrateQuery ?? client.getDefaultOptions().dehydrate?.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;\n  const serializeData = options.serializeData ?? client.getDefaultOptions().dehydrate?.serializeData ?? defaultTransformerFn;\n  const queries = client.getQueryCache().getAll().flatMap(\n    (query) => filterQuery(query) ? [dehydrateQuery(query, serializeData)] : []\n  );\n  return { mutations, queries };\n}\nfunction hydrate(client, dehydratedState, options) {\n  if (typeof dehydratedState !== \"object\" || dehydratedState === null) {\n    return;\n  }\n  const mutationCache = client.getMutationCache();\n  const queryCache = client.getQueryCache();\n  const deserializeData = options?.defaultOptions?.deserializeData ?? client.getDefaultOptions().hydrate?.deserializeData ?? defaultTransformerFn;\n  const mutations = dehydratedState.mutations || [];\n  const queries = dehydratedState.queries || [];\n  mutations.forEach(({ state, ...mutationOptions }) => {\n    mutationCache.build(\n      client,\n      {\n        ...client.getDefaultOptions().hydrate?.mutations,\n        ...options?.defaultOptions?.mutations,\n        ...mutationOptions\n      },\n      state\n    );\n  });\n  queries.forEach(({ queryKey, state, queryHash, meta, promise }) => {\n    let query = queryCache.get(queryHash);\n    const data = state.data === void 0 ? state.data : deserializeData(state.data);\n    if (query) {\n      if (query.state.dataUpdatedAt < state.dataUpdatedAt) {\n        const { fetchStatus: _ignored, ...serializedState } = state;\n        query.setState({\n          ...serializedState,\n          data\n        });\n      }\n    } else {\n      query = queryCache.build(\n        client,\n        {\n          ...client.getDefaultOptions().hydrate?.queries,\n          ...options?.defaultOptions?.queries,\n          queryKey,\n          queryHash,\n          meta\n        },\n        // Reset fetch status to idle to avoid\n        // query being stuck in fetching state upon hydration\n        {\n          ...state,\n          data,\n          fetchStatus: \"idle\"\n        }\n      );\n    }\n    if (promise) {\n      const initialPromise = Promise.resolve(promise).then(deserializeData);\n      void query.fetch(void 0, { initialPromise });\n    }\n  });\n}\nexport {\n  defaultShouldDehydrateMutation,\n  defaultShouldDehydrateQuery,\n  dehydrate,\n  hydrate\n};\n//# sourceMappingURL=hydration.js.map","export * from \"./capi.js\";\nexport const Vue2 = void 0;\nexport const isVue2 = false;\nexport const isVue3 = true;\n","// src/utils.ts\nimport { isRef, unref } from \"vue-demi\";\nvar VUE_QUERY_CLIENT = \"VUE_QUERY_CLIENT\";\nfunction getClientKey(key) {\n  const suffix = key ? `:${key}` : \"\";\n  return `${VUE_QUERY_CLIENT}${suffix}`;\n}\nfunction updateState(state, update) {\n  Object.keys(state).forEach((key) => {\n    state[key] = update[key];\n  });\n}\nfunction _cloneDeep(value, customize, currentKey = \"\", currentLevel = 0) {\n  if (customize) {\n    const result = customize(value, currentKey, currentLevel);\n    if (result === void 0 && isRef(value)) {\n      return result;\n    }\n    if (result !== void 0) {\n      return result;\n    }\n  }\n  if (Array.isArray(value)) {\n    return value.map(\n      (val, index) => _cloneDeep(val, customize, String(index), currentLevel + 1)\n    );\n  }\n  if (typeof value === \"object\" && isPlainObject(value)) {\n    const entries = Object.entries(value).map(([key, val]) => [\n      key,\n      _cloneDeep(val, customize, key, currentLevel + 1)\n    ]);\n    return Object.fromEntries(entries);\n  }\n  return value;\n}\nfunction cloneDeep(value, customize) {\n  return _cloneDeep(value, customize);\n}\nfunction cloneDeepUnref(obj, unrefGetters = false) {\n  return cloneDeep(obj, (val, key, level) => {\n    if (level === 1 && key === \"queryKey\") {\n      return cloneDeepUnref(val, true);\n    }\n    if (unrefGetters && isFunction(val)) {\n      return cloneDeepUnref(val(), unrefGetters);\n    }\n    if (isRef(val)) {\n      return cloneDeepUnref(unref(val), unrefGetters);\n    }\n    return void 0;\n  });\n}\nfunction isPlainObject(value) {\n  if (Object.prototype.toString.call(value) !== \"[object Object]\") {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === null || prototype === Object.prototype;\n}\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\nfunction shouldThrowError(throwOnError, params) {\n  if (typeof throwOnError === \"function\") {\n    return throwOnError(...params);\n  }\n  return !!throwOnError;\n}\nexport {\n  VUE_QUERY_CLIENT,\n  cloneDeep,\n  cloneDeepUnref,\n  getClientKey,\n  shouldThrowError,\n  updateState\n};\n//# sourceMappingURL=utils.js.map","// src/useQueryClient.ts\nimport { hasInjectionContext, inject } from \"vue-demi\";\nimport { getClientKey } from \"./utils.js\";\nfunction useQueryClient(id = \"\") {\n  if (!hasInjectionContext()) {\n    throw new Error(\n      \"vue-query hooks can only be used inside setup() function or functions that support injection context.\"\n    );\n  }\n  const key = getClientKey(id);\n  const queryClient = inject(key);\n  if (!queryClient) {\n    throw new Error(\n      \"No 'queryClient' found in Vue context, use 'VueQueryPlugin' to properly initialize the library.\"\n    );\n  }\n  return queryClient;\n}\nexport {\n  useQueryClient\n};\n//# sourceMappingURL=useQueryClient.js.map","// src/queryCache.ts\nimport { QueryCache as QC } from \"@tanstack/query-core\";\nimport { cloneDeepUnref } from \"./utils.js\";\nvar QueryCache = class extends QC {\n  find(filters) {\n    return super.find(cloneDeepUnref(filters));\n  }\n  findAll(filters = {}) {\n    return super.findAll(cloneDeepUnref(filters));\n  }\n};\nexport {\n  QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/mutationCache.ts\nimport { MutationCache as MC } from \"@tanstack/query-core\";\nimport { cloneDeepUnref } from \"./utils.js\";\nvar MutationCache = class extends MC {\n  find(filters) {\n    return super.find(cloneDeepUnref(filters));\n  }\n  findAll(filters = {}) {\n    return super.findAll(cloneDeepUnref(filters));\n  }\n};\nexport {\n  MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/queryClient.ts\nimport { nextTick, ref } from \"vue-demi\";\nimport { QueryClient as QC } from \"@tanstack/query-core\";\nimport { cloneDeepUnref } from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nvar QueryClient = class extends QC {\n  constructor(config = {}) {\n    const vueQueryConfig = {\n      defaultOptions: config.defaultOptions,\n      queryCache: config.queryCache || new QueryCache(),\n      mutationCache: config.mutationCache || new MutationCache()\n    };\n    super(vueQueryConfig);\n    this.isRestoring = ref(false);\n  }\n  isFetching(filters = {}) {\n    return super.isFetching(cloneDeepUnref(filters));\n  }\n  isMutating(filters = {}) {\n    return super.isMutating(cloneDeepUnref(filters));\n  }\n  getQueryData(queryKey) {\n    return super.getQueryData(cloneDeepUnref(queryKey));\n  }\n  ensureQueryData(options) {\n    return super.ensureQueryData(cloneDeepUnref(options));\n  }\n  getQueriesData(filters) {\n    return super.getQueriesData(cloneDeepUnref(filters));\n  }\n  setQueryData(queryKey, updater, options = {}) {\n    return super.setQueryData(\n      cloneDeepUnref(queryKey),\n      updater,\n      cloneDeepUnref(options)\n    );\n  }\n  setQueriesData(filters, updater, options = {}) {\n    return super.setQueriesData(\n      cloneDeepUnref(filters),\n      updater,\n      cloneDeepUnref(options)\n    );\n  }\n  getQueryState(queryKey) {\n    return super.getQueryState(cloneDeepUnref(queryKey));\n  }\n  removeQueries(filters = {}) {\n    return super.removeQueries(cloneDeepUnref(filters));\n  }\n  resetQueries(filters = {}, options = {}) {\n    return super.resetQueries(cloneDeepUnref(filters), cloneDeepUnref(options));\n  }\n  cancelQueries(filters = {}, options = {}) {\n    return super.cancelQueries(cloneDeepUnref(filters), cloneDeepUnref(options));\n  }\n  invalidateQueries(filters = {}, options = {}) {\n    const filtersCloned = cloneDeepUnref(filters);\n    const optionsCloned = cloneDeepUnref(options);\n    super.invalidateQueries(\n      { ...filtersCloned, refetchType: \"none\" },\n      optionsCloned\n    );\n    if (filtersCloned.refetchType === \"none\") {\n      return Promise.resolve();\n    }\n    const refetchFilters = {\n      ...filtersCloned,\n      type: filtersCloned.refetchType ?? filtersCloned.type ?? \"active\"\n    };\n    return nextTick().then(() => {\n      return super.refetchQueries(refetchFilters, optionsCloned);\n    });\n  }\n  refetchQueries(filters = {}, options = {}) {\n    return super.refetchQueries(\n      cloneDeepUnref(filters),\n      cloneDeepUnref(options)\n    );\n  }\n  fetchQuery(options) {\n    return super.fetchQuery(cloneDeepUnref(options));\n  }\n  prefetchQuery(options) {\n    return super.prefetchQuery(cloneDeepUnref(options));\n  }\n  fetchInfiniteQuery(options) {\n    return super.fetchInfiniteQuery(cloneDeepUnref(options));\n  }\n  prefetchInfiniteQuery(options) {\n    return super.prefetchInfiniteQuery(cloneDeepUnref(options));\n  }\n  setDefaultOptions(options) {\n    super.setDefaultOptions(cloneDeepUnref(options));\n  }\n  setQueryDefaults(queryKey, options) {\n    super.setQueryDefaults(cloneDeepUnref(queryKey), cloneDeepUnref(options));\n  }\n  getQueryDefaults(queryKey) {\n    return super.getQueryDefaults(cloneDeepUnref(queryKey));\n  }\n  setMutationDefaults(mutationKey, options) {\n    super.setMutationDefaults(\n      cloneDeepUnref(mutationKey),\n      cloneDeepUnref(options)\n    );\n  }\n  getMutationDefaults(mutationKey) {\n    return super.getMutationDefaults(cloneDeepUnref(mutationKey));\n  }\n};\nexport {\n  QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","// src/vueQueryPlugin.ts\nimport { isVue2 } from \"vue-demi\";\nimport { isServer } from \"@tanstack/query-core\";\nimport { QueryClient } from \"./queryClient.js\";\nimport { getClientKey } from \"./utils.js\";\nimport { setupDevtools } from \"./devtools/devtools.js\";\nvar VueQueryPlugin = {\n  install: (app, options = {}) => {\n    const clientKey = getClientKey(options.queryClientKey);\n    let client;\n    if (\"queryClient\" in options && options.queryClient) {\n      client = options.queryClient;\n    } else {\n      const clientConfig = \"queryClientConfig\" in options ? options.queryClientConfig : void 0;\n      client = new QueryClient(clientConfig);\n    }\n    if (!isServer) {\n      client.mount();\n    }\n    let persisterUnmount = () => {\n    };\n    if (options.clientPersister) {\n      client.isRestoring.value = true;\n      const [unmount, promise] = options.clientPersister(client);\n      persisterUnmount = unmount;\n      promise.then(() => {\n        client.isRestoring.value = false;\n        options.clientPersisterOnSuccess?.(client);\n      });\n    }\n    const cleanup = () => {\n      client.unmount();\n      persisterUnmount();\n    };\n    if (app.onUnmount) {\n      app.onUnmount(cleanup);\n    } else {\n      const originalUnmount = app.unmount;\n      app.unmount = function vueQueryUnmount() {\n        cleanup();\n        originalUnmount();\n      };\n    }\n    if (isVue2) {\n      app.mixin({\n        beforeCreate() {\n          if (!this._provided) {\n            const provideCache = {};\n            Object.defineProperty(this, \"_provided\", {\n              get: () => provideCache,\n              set: (v) => Object.assign(provideCache, v)\n            });\n          }\n          this._provided[clientKey] = client;\n          if (process.env.NODE_ENV === \"development\") {\n            if (this === this.$root && options.enableDevtoolsV6Plugin) {\n              setupDevtools(this, client);\n            }\n          }\n        }\n      });\n    } else {\n      app.provide(clientKey, client);\n      if (process.env.NODE_ENV === \"development\") {\n        if (options.enableDevtoolsV6Plugin) {\n          setupDevtools(app, client);\n        }\n      }\n    }\n  }\n};\nexport {\n  VueQueryPlugin\n};\n//# sourceMappingURL=vueQueryPlugin.js.map","// src/useBaseQuery.ts\nimport {\n  computed,\n  getCurrentScope,\n  onScopeDispose,\n  readonly,\n  shallowReactive,\n  shallowReadonly,\n  toRefs,\n  watch\n} from \"vue-demi\";\nimport { useQueryClient } from \"./useQueryClient.js\";\nimport { cloneDeepUnref, shouldThrowError, updateState } from \"./utils.js\";\nfunction useBaseQuery(Observer, options, queryClient) {\n  if (process.env.NODE_ENV === \"development\") {\n    if (!getCurrentScope()) {\n      console.warn(\n        'vue-query composable like \"useQuery()\" should only be used inside a \"setup()\" function or a running effect scope. They might otherwise lead to memory leaks.'\n      );\n    }\n  }\n  const client = queryClient || useQueryClient();\n  const defaultedOptions = computed(() => {\n    const clonedOptions = cloneDeepUnref(options);\n    if (typeof clonedOptions.enabled === \"function\") {\n      clonedOptions.enabled = clonedOptions.enabled();\n    }\n    const defaulted = client.defaultQueryOptions(clonedOptions);\n    defaulted._optimisticResults = client.isRestoring.value ? \"isRestoring\" : \"optimistic\";\n    return defaulted;\n  });\n  const observer = new Observer(client, defaultedOptions.value);\n  const state = shallowReactive(observer.getCurrentResult());\n  let unsubscribe = () => {\n  };\n  watch(\n    client.isRestoring,\n    (isRestoring) => {\n      if (!isRestoring) {\n        unsubscribe();\n        unsubscribe = observer.subscribe((result) => {\n          updateState(state, result);\n        });\n      }\n    },\n    { immediate: true }\n  );\n  const updater = () => {\n    observer.setOptions(defaultedOptions.value);\n    updateState(state, observer.getCurrentResult());\n  };\n  watch(defaultedOptions, updater);\n  onScopeDispose(() => {\n    unsubscribe();\n  });\n  const refetch = (...args) => {\n    updater();\n    return state.refetch(...args);\n  };\n  const suspense = () => {\n    return new Promise(\n      (resolve, reject) => {\n        let stopWatch = () => {\n        };\n        const run = () => {\n          if (defaultedOptions.value.enabled !== false) {\n            observer.setOptions(defaultedOptions.value);\n            const optimisticResult = observer.getOptimisticResult(\n              defaultedOptions.value\n            );\n            if (optimisticResult.isStale) {\n              stopWatch();\n              observer.fetchOptimistic(defaultedOptions.value).then(resolve, (error) => {\n                if (shouldThrowError(defaultedOptions.value.throwOnError, [\n                  error,\n                  observer.getCurrentQuery()\n                ])) {\n                  reject(error);\n                } else {\n                  resolve(observer.getCurrentResult());\n                }\n              });\n            } else {\n              stopWatch();\n              resolve(optimisticResult);\n            }\n          }\n        };\n        run();\n        stopWatch = watch(defaultedOptions, run);\n      }\n    );\n  };\n  watch(\n    () => state.error,\n    (error) => {\n      if (state.isError && !state.isFetching && shouldThrowError(defaultedOptions.value.throwOnError, [\n        error,\n        observer.getCurrentQuery()\n      ])) {\n        throw error;\n      }\n    }\n  );\n  const readonlyState = process.env.NODE_ENV === \"production\" ? state : (\n    // @ts-expect-error\n    defaultedOptions.value.shallow ? shallowReadonly(state) : readonly(state)\n  );\n  const object = toRefs(readonlyState);\n  for (const key in state) {\n    if (typeof state[key] === \"function\") {\n      object[key] = state[key];\n    }\n  }\n  object.suspense = suspense;\n  object.refetch = refetch;\n  return object;\n}\nexport {\n  useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n  return useBaseQuery(QueryObserver, options, queryClient);\n}\nexport {\n  useQuery\n};\n//# sourceMappingURL=useQuery.js.map","// src/useMutation.ts\nimport {\n  computed,\n  getCurrentScope,\n  onScopeDispose,\n  readonly,\n  shallowReactive,\n  shallowReadonly,\n  toRefs,\n  watch\n} from \"vue-demi\";\nimport { MutationObserver } from \"@tanstack/query-core\";\nimport { cloneDeepUnref, shouldThrowError, updateState } from \"./utils.js\";\nimport { useQueryClient } from \"./useQueryClient.js\";\nfunction useMutation(mutationOptions, queryClient) {\n  if (process.env.NODE_ENV === \"development\") {\n    if (!getCurrentScope()) {\n      console.warn(\n        'vue-query composable like \"useQuery()\" should only be used inside a \"setup()\" function or a running effect scope. They might otherwise lead to memory leaks.'\n      );\n    }\n  }\n  const client = queryClient || useQueryClient();\n  const options = computed(() => {\n    return client.defaultMutationOptions(cloneDeepUnref(mutationOptions));\n  });\n  const observer = new MutationObserver(client, options.value);\n  const state = shallowReactive(observer.getCurrentResult());\n  const unsubscribe = observer.subscribe((result) => {\n    updateState(state, result);\n  });\n  const mutate = (variables, mutateOptions) => {\n    observer.mutate(variables, mutateOptions).catch(() => {\n    });\n  };\n  watch(options, () => {\n    observer.setOptions(options.value);\n  });\n  onScopeDispose(() => {\n    unsubscribe();\n  });\n  const readonlyState = process.env.NODE_ENV === \"production\" ? state : options.value.shallow ? shallowReadonly(state) : readonly(state);\n  const resultRefs = toRefs(readonlyState);\n  watch(\n    () => state.error,\n    (error) => {\n      if (error && shouldThrowError(options.value.throwOnError, [error])) {\n        throw error;\n      }\n    }\n  );\n  return {\n    ...resultRefs,\n    mutate,\n    mutateAsync: state.mutate,\n    reset: state.reset\n  };\n}\nexport {\n  useMutation\n};\n//# sourceMappingURL=useMutation.js.map","import { useQuery } from '@tanstack/vue-query'\n\nexport function useConfDataQuery(\n  url: MaybeRefOrGetter<URL>,\n  options: {\n    enabled?: MaybeRefOrGetter<boolean>\n  } = {},\n) {\n  const requestFetch = useRequestFetch()\n\n  const urlWithoutProtocol = computed(() => getUrlWithoutProtocol(toValue(url)))\n  const queryParams = computed(() =>\n    searchParamsToSortedObject(toValue(url).searchParams),\n  )\n\n  return useQuery({\n    enabled: options.enabled,\n    queryKey: ['conf-data', urlWithoutProtocol, queryParams] as const,\n    queryFn({ queryKey: [_, urlString, params] }) {\n      return requestFetch<ConfAPIPagesResponse>(\n        `/conf-api/v1/pages/${urlString}`,\n        { query: params },\n      )\n    },\n  })\n}\n","import type { RouteLocation } from 'vue-router'\n\nexport default function useCurrentURL(\n  currentRoute: Pick<RouteLocation, 'fullPath'> = useRoute(),\n) {\n  return computed(() => new URL(currentRoute.fullPath, useRequestURL().origin))\n}\n","import { withQuery } from 'ufo'\n\nexport function useConfDataURL(\n  currentUrl: MaybeRefOrGetter<URL> = useCurrentURL(),\n) {\n  const partner = usePartner()\n  return computed(() => {\n    const url = toValue(currentUrl)\n    return new URL(\n      withQuery(getUrlFullPath(url), { partnerid: partner.id || undefined }),\n      useRequestURL().origin,\n    )\n  })\n}\n","import { parseURL, withQuery } from 'ufo'\nimport { useConfDataQuery } from '~/api/conf-api'\nimport useCurrentURL from '~/composables/useCurrentURL'\nimport { useConfDataURL } from '~/composables/confdata.composables'\n\nexport default defineNuxtRouteMiddleware(async (to, from) => {\n  const { data, suspense } = useConfDataQuery(useConfDataURL(useCurrentURL(to)))\n\n  await suspense()\n\n  const result = await useConfdata().load(to, toValue(data))\n\n  if (!result) return\n\n  if (result instanceof Error) {\n    console.error(\n      `[conf] load failed ${useRequestURL()}:`,\n      result.message || result,\n    )\n    throw result\n  }\n\n  if ('location' in result) {\n    const { source, location, status } = result as RedirectOut\n    const accommodationRegexp = /([a-zA-Z]{2}\\d{4}\\.\\d{1,4}\\.\\d{1,3})/\n\n    // In cases where we redirect from a detail page, we want the user to be able to try to access that page again in the future.\n    // See https://jira.migros.net/browse/IHGWEBCC-36\n    if (\n      import.meta.server &&\n      to.path.match(accommodationRegexp) &&\n      !from.path.match(accommodationRegexp)\n    ) {\n      setHeader(\n        useNuxtApp().ssrContext!.event,\n        'Cache-Control',\n        'max-age=86400',\n      )\n    }\n\n    const { host } = parseURL(location)\n    const url = useRequestURL()\n    const redirectCode = status || 301\n    const external = redirectCode === 301 || (!!host && host !== url.host) // all 301 redirects should be `external`, otherwise Nuxt will always set 302\n    const explicit = isInterchaletUrl(source)\n    const target = explicit\n      ? withQuery(location, { redirectedFrom: url.href })\n      : location\n\n    return navigateTo(target, { redirectCode, external })\n  }\n})\n","import tests from '~/resources/ab/config'\n\nexport default defineNuxtRouteMiddleware(() => {\n  if (!import.meta.server) return\n\n  useAB().init(tests)\n})\n","export default defineNuxtRouteMiddleware(async () => {\n  await useAuth().init()\n})\n","export default defineNuxtRouteMiddleware(async () => {\n  await useUser().load()\n})\n","/**\n * Legacy internationalization composable.\n *\n * @deprecated Use {@link useI18n} and {@link useConfdata} instead.\n */\nexport function useL10N() {\n  return useNuxtApp().$l10n\n}\n\n/* Quantity ends in 1 - As per position in the sentence.\n * Quantity ends in 2,3,4 - Genitive Singular.\n * Quantity ends in 5,6,7,8,9,0,-надцать - Genitive Plural\n * General Quantity - Genitive Case (Singular or Plural depending on context.)\n */\n// function getChoiceSlavic(choices: string[], count: number) {\n//   switch (choices.length) {\n//     case 1:\n//       // nur Singular\n//       return choices[0]\n//     case 2:\n//       // Singular und Plural\n//       return count > 1 ? choices[1] : choices[0]\n//     case 3:\n//       // Singular, Plural und slawischer GenitivSingular\n//       // if (1 === 1) {\n//       return choices[getSlavicIndex3(count)]\n//     // }\n//     // ansonsten: Keinzahl, Einzahl, Mehrzahl\n//     // return count > 1 ? choices[2] : choices[count]\n//     case 4:\n//       // ist definitiv slawisch: Keinzahl, Einzahl, Mehrzahl, slawischer GenitivSingular\n//       return choices[numerusSlavic(count)]\n//   }\n// }\n\n// function getSlavicIndex3(count: number) {\n//   if (count === 0) {\n//     return 2\n//   }\n//   const teen = count > 10 && count < 20\n//   if (teen) {\n//     return 1\n//   }\n//   switch (count % 10) {\n//     case 1:\n//       return 0\n//     case 2:\n//     case 3:\n//     case 4:\n//       return 2\n//     case 5:\n//     case 6:\n//     case 7:\n//     case 8:\n//     case 9:\n//     case 0:\n//       return 1\n//     default:\n//       return -1\n//   }\n// }\n\n// const ZERO = 0\n// const SINGULAR = 1\n// const SLAVIC_GENITIVE_SINGULAR = 2\n// const SLAVIC_GENITIVE_PLURAL = 3\n\n// function numerusSlavic(count: number) {\n//   if (count === 0) {\n//     return ZERO\n//   }\n//   const teen = count > 10 && count < 20\n//   if (teen) {\n//     return SLAVIC_GENITIVE_PLURAL\n//   }\n//   switch (count % 10) {\n//     case 1:\n//       return SINGULAR\n//     case 2:\n//     case 3:\n//     case 4:\n//       return SLAVIC_GENITIVE_SINGULAR\n//     case 5:\n//     case 6:\n//     case 7:\n//     case 8:\n//     case 9:\n//     case 0:\n//       return SLAVIC_GENITIVE_PLURAL\n//     default:\n//       return -1\n//   }\n// }\n","export const formatDatetime = (\n  d: string | number,\n  format: keyof typeof formats = 'numeric',\n  timezone = 'Europe/Zurich',\n) => {\n  if (!['string', 'number'].includes(typeof d)) {\n    return ''\n  }\n  if (typeof d === 'number' && isNaN(d)) {\n    return ''\n  }\n  const options: Intl.DateTimeFormatOptions = {\n    timeZone: timezone,\n    ...(formats[format] || formats.numeric),\n  }\n  if (typeof d === 'string') {\n    const date = new Date(d)\n    if (!isValidDate(date)) {\n      return ''\n    }\n    return new Intl.DateTimeFormat(useL10N().locale, options).format(date)\n  }\n  return new Intl.DateTimeFormat(useL10N().locale, options).format(d)\n}\n\n// not all objects are dates, but this should be close enough\n// date is converted to a date-time with timezone\n\nfunction isValidDate(d: Date) {\n  return d instanceof Date && !isNaN(+d)\n}\n\n// options kann ein mode string sein\n// oder ein Objekt mit einzelnen Werten\n//\n// modes\n// mode           Beschreibung\n// -------------------------------------------------------------------------------------\n// default        Ausgabe Jahr, Monat und Tag im Format, das durch locale bestimmt wird\n// weekday-long   Wochentag lang, z.B. Sonntag\n// weekday-short  Wochentag kurz, z.B. So\n//\n// options\n// Siehe https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat\n\n// const options = {\n//   weekday,      // Die Repräsentation der Wochentage. Mögliche Werte sind \"narrow\", \"short\" und \"long\".\n//   era,          // Die Repräsentation der Epoche. Mögliche Werte sind \"narrow\", \"short\" und \"long\".\n//   year,         // Die Repräsentation des Jahres. Mögliche Werte sind \"numeric\" und \"2-digit\".\n//   month,        // Die Repräsentation des Monats. Mögliche Werte sind \"numeric\", \"2-digit\", \"narrow\", \"short\" und \"long\".\n//   day,          // Die Repräsentation des Tages. Mögliche Werte sind \"numeric\" und \"2-digit\".\n//   hour,         // Die Repräsentation der Stunden. Mögliche Werte sind \"numeric\" und \"2-digit\".\n//   minute,       // Die Repräsentation der Minuten. Mögliche Werte sind \"numeric\" und \"2-digit\".\n//   second,       // Die Repräsentation der Sekunden. Mögliche Werte sind \"numeric\" und \"2-digit\".\n//   timeZoneName, // Die Repräsentation des Zeitzonennamens. Mögliche Werte sind \"short\" und \"long\".\n// }\n\nconst formats: Record<string, Intl.DateTimeFormatOptions> = {\n  numeric: {\n    year: 'numeric', // \"numeric\" und \"2-digit\".\n    month: 'numeric', //  \"numeric\", \"2-digit\", \"narrow\", \"short\" und \"long\".\n    day: 'numeric', // \"numeric\" und \"2-digit\".\n  },\n  '2-digit': {\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n  },\n  '2-digit-short': {\n    month: '2-digit',\n    day: '2-digit',\n  },\n  weekday: {\n    weekday: 'long',\n  },\n  'weekday-short': {\n    weekday: 'short',\n  },\n  datetime: {\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n    hour: '2-digit',\n    minute: '2-digit',\n  },\n  dateTimezone: {\n    year: 'numeric',\n    month: 'numeric',\n    day: 'numeric',\n    hour: 'numeric',\n    timeZoneName: 'long',\n  },\n  monthYear: {\n    year: 'numeric',\n    month: 'long',\n  },\n  monthDay: {\n    month: 'short',\n    day: 'numeric',\n  },\n}\n","export type Interval<T> = [T, T]\nexport type NumInterval = Interval<number>\n\nexport function tryParseInt(value: unknown): number | undefined {\n  if (typeof value === 'number' && !isNaN(value)) {\n    return value\n  }\n\n  const result = value ? parseInt(String(value)) : NaN\n\n  return !isNaN(result) ? result : undefined\n}\n\nexport function tryParseFloat<\n  Value extends string | number | undefined | null,\n  Result extends [Value] extends [number] ? number : number | undefined,\n>(value?: Value): Result {\n  const result =\n    typeof value === 'number' ? value : value ? parseFloat(String(value)) : NaN\n  return (!isNaN(result) ? result : undefined) as Result\n}\n\nexport function range(from: number = 1, to: number): number[] {\n  from = Math.max(1, from)\n  return Array.from({ length: to - from + 1 }, (_, i) => i + from)\n}\n\nexport function positiveMod(value: number, modulus: number): number {\n  return ((value % modulus) + modulus) % modulus\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toInteger;\nfunction toInteger(dirtyNumber) {\n  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n    return NaN;\n  }\n  var number = Number(dirtyNumber);\n  if (isNaN(number)) {\n    return number;\n  }\n  return number < 0 ? Math.ceil(number) : Math.floor(number);\n}\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = getTimezoneOffsetInMilliseconds;\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nfunction getTimezoneOffsetInMilliseconds(date) {\n  var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n  utcDate.setUTCFullYear(date.getFullYear());\n  return date.getTime() - utcDate.getTime();\n}\nmodule.exports = exports.default;","/**\r\n * Returns the [year, month, day, hour, minute, seconds] tokens of the provided\r\n * `date` as it will be rendered in the `timeZone`.\r\n */\r\nexport default function tzTokenizeDate(date, timeZone) {\r\n  var dtf = getDateTimeFormat(timeZone)\r\n  return dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date)\r\n}\r\n\r\nvar typeToPos = {\r\n  year: 0,\r\n  month: 1,\r\n  day: 2,\r\n  hour: 3,\r\n  minute: 4,\r\n  second: 5,\r\n}\r\n\r\nfunction partsOffset(dtf, date) {\r\n  try {\r\n    var formatted = dtf.formatToParts(date)\r\n    var filled = []\r\n    for (var i = 0; i < formatted.length; i++) {\r\n      var pos = typeToPos[formatted[i].type]\r\n\r\n      if (pos >= 0) {\r\n        filled[pos] = parseInt(formatted[i].value, 10)\r\n      }\r\n    }\r\n    return filled\r\n  } catch (error) {\r\n    if (error instanceof RangeError) {\r\n      return [NaN]\r\n    }\r\n    throw error\r\n  }\r\n}\r\n\r\nfunction hackyOffset(dtf, date) {\r\n  var formatted = dtf.format(date)\r\n  var parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted)\r\n  // var [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed\r\n  // return [fYear, fMonth, fDay, fHour, fMinute, fSecond]\r\n  return [parsed[3], parsed[1], parsed[2], parsed[4], parsed[5], parsed[6]]\r\n}\r\n\r\n// Get a cached Intl.DateTimeFormat instance for the IANA `timeZone`. This can be used\r\n// to get deterministic local date/time output according to the `en-US` locale which\r\n// can be used to extract local time parts as necessary.\r\nvar dtfCache = {}\r\nfunction getDateTimeFormat(timeZone) {\r\n  if (!dtfCache[timeZone]) {\r\n    // New browsers use `hourCycle`, IE and Chrome <73 does not support it and uses `hour12`\r\n    var testDateFormatted = new Intl.DateTimeFormat('en-US', {\r\n      hourCycle: 'h23',\r\n      timeZone: 'America/New_York',\r\n      year: 'numeric',\r\n      month: '2-digit',\r\n      day: '2-digit',\r\n      hour: '2-digit',\r\n      minute: '2-digit',\r\n      second: '2-digit',\r\n    }).format(new Date('2014-06-25T04:00:00.123Z'))\r\n    var hourCycleSupported =\r\n      testDateFormatted === '06/25/2014, 00:00:00' ||\r\n      testDateFormatted === '‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00'\r\n\r\n    dtfCache[timeZone] = hourCycleSupported\r\n      ? new Intl.DateTimeFormat('en-US', {\r\n          hourCycle: 'h23',\r\n          timeZone: timeZone,\r\n          year: 'numeric',\r\n          month: 'numeric',\r\n          day: '2-digit',\r\n          hour: '2-digit',\r\n          minute: '2-digit',\r\n          second: '2-digit',\r\n        })\r\n      : new Intl.DateTimeFormat('en-US', {\r\n          hour12: false,\r\n          timeZone: timeZone,\r\n          year: 'numeric',\r\n          month: 'numeric',\r\n          day: '2-digit',\r\n          hour: '2-digit',\r\n          minute: '2-digit',\r\n          second: '2-digit',\r\n        })\r\n  }\r\n  return dtfCache[timeZone]\r\n}\r\n","/**\n * Use instead of `new Date(Date.UTC(...))` to support years below 100 which doesn't work\n * otherwise due to the nature of the\n * [`Date` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#interpretation_of_two-digit_years.\n *\n * For `Date.UTC(...)`, use `newDateUTC(...).getTime()`.\n */\nexport default function newDateUTC(fullYear, month, day, hour, minute, second, millisecond) {\n  var utcDate = new Date(0)\n  utcDate.setUTCFullYear(fullYear, month, day)\n  utcDate.setUTCHours(hour, minute, second, millisecond)\n  return utcDate\n}\n","import tzTokenizeDate from '../tzTokenizeDate/index.js'\r\nimport newDateUTC from '../newDateUTC/index.js'\r\n\r\nvar MILLISECONDS_IN_HOUR = 3600000\r\nvar MILLISECONDS_IN_MINUTE = 60000\r\n\r\nvar patterns = {\r\n  timezone: /([Z+-].*)$/,\r\n  timezoneZ: /^(Z)$/,\r\n  timezoneHH: /^([+-]\\d{2})$/,\r\n  timezoneHHMM: /^([+-])(\\d{2}):?(\\d{2})$/,\r\n}\r\n\r\n// Parse various time zone offset formats to an offset in milliseconds\r\nexport default function tzParseTimezone(timezoneString, date, isUtcDate) {\r\n  var token\r\n  var absoluteOffset\r\n\r\n  // Empty string\r\n  if (!timezoneString) {\r\n    return 0\r\n  }\r\n\r\n  // Z\r\n  token = patterns.timezoneZ.exec(timezoneString)\r\n  if (token) {\r\n    return 0\r\n  }\r\n\r\n  var hours\r\n\r\n  // ±hh\r\n  token = patterns.timezoneHH.exec(timezoneString)\r\n  if (token) {\r\n    hours = parseInt(token[1], 10)\r\n\r\n    if (!validateTimezone(hours)) {\r\n      return NaN\r\n    }\r\n\r\n    return -(hours * MILLISECONDS_IN_HOUR)\r\n  }\r\n\r\n  // ±hh:mm or ±hhmm\r\n  token = patterns.timezoneHHMM.exec(timezoneString)\r\n  if (token) {\r\n    hours = parseInt(token[2], 10)\r\n    var minutes = parseInt(token[3], 10)\r\n\r\n    if (!validateTimezone(hours, minutes)) {\r\n      return NaN\r\n    }\r\n\r\n    absoluteOffset = Math.abs(hours) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE\r\n    return token[1] === '+' ? -absoluteOffset : absoluteOffset\r\n  }\r\n\r\n  // IANA time zone\r\n  if (isValidTimezoneIANAString(timezoneString)) {\r\n    date = new Date(date || Date.now())\r\n    var utcDate = isUtcDate ? date : toUtcDate(date)\r\n\r\n    var offset = calcOffset(utcDate, timezoneString)\r\n\r\n    var fixedOffset = isUtcDate ? offset : fixOffset(date, offset, timezoneString)\r\n\r\n    return -fixedOffset\r\n  }\r\n\r\n  return NaN\r\n}\r\n\r\nfunction toUtcDate(date) {\r\n  return newDateUTC(\r\n    date.getFullYear(),\r\n    date.getMonth(),\r\n    date.getDate(),\r\n    date.getHours(),\r\n    date.getMinutes(),\r\n    date.getSeconds(),\r\n    date.getMilliseconds()\r\n  )\r\n}\r\n\r\nfunction calcOffset(date, timezoneString) {\r\n  var tokens = tzTokenizeDate(date, timezoneString)\r\n\r\n  // ms dropped because it's not provided by tzTokenizeDate\r\n  var asUTC = newDateUTC(\r\n    tokens[0],\r\n    tokens[1] - 1,\r\n    tokens[2],\r\n    tokens[3] % 24,\r\n    tokens[4],\r\n    tokens[5],\r\n    0\r\n  ).getTime()\r\n\r\n  var asTS = date.getTime()\r\n  var over = asTS % 1000\r\n  asTS -= over >= 0 ? over : 1000 + over\r\n  return asUTC - asTS\r\n}\r\n\r\nfunction fixOffset(date, offset, timezoneString) {\r\n  var localTS = date.getTime()\r\n\r\n  // Our UTC time is just a guess because our offset is just a guess\r\n  var utcGuess = localTS - offset\r\n\r\n  // Test whether the zone matches the offset for this ts\r\n  var o2 = calcOffset(new Date(utcGuess), timezoneString)\r\n\r\n  // If so, offset didn't change, and we're done\r\n  if (offset === o2) {\r\n    return offset\r\n  }\r\n\r\n  // If not, change the ts by the difference in the offset\r\n  utcGuess -= o2 - offset\r\n\r\n  // If that gives us the local time we want, we're done\r\n  var o3 = calcOffset(new Date(utcGuess), timezoneString)\r\n  if (o2 === o3) {\r\n    return o2\r\n  }\r\n\r\n  // If it's different, we're in a hole time. The offset has changed, but we don't adjust the time\r\n  return Math.max(o2, o3)\r\n}\r\n\r\nfunction validateTimezone(hours, minutes) {\r\n  return -23 <= hours && hours <= 23 && (minutes == null || (0 <= minutes && minutes <= 59))\r\n}\r\n\r\nvar validIANATimezoneCache = {}\r\nfunction isValidTimezoneIANAString(timeZoneString) {\r\n  if (validIANATimezoneCache[timeZoneString]) return true\r\n  try {\r\n    new Intl.DateTimeFormat(undefined, { timeZone: timeZoneString })\r\n    validIANATimezoneCache[timeZoneString] = true\r\n    return true\r\n  } catch (error) {\r\n    return false\r\n  }\r\n}\r\n","/** Regex to identify the presence of a time zone specifier in a date string */\nvar tzPattern = /(Z|[+-]\\d{2}(?::?\\d{2})?| UTC| [a-zA-Z]+\\/[a-zA-Z_]+(?:\\/[a-zA-Z_]+)?)$/\n\nexport default tzPattern\n","import toInteger from 'date-fns/_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from 'date-fns/_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport tzParseTimezone from '../_lib/tzParseTimezone/index.js'\nimport tzPattern from '../_lib/tzPattern/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar patterns = {\n  dateTimePattern: /^([0-9W+-]+)(T| )(.*)/,\n  datePattern: /^([0-9W+-]+)(.*)/,\n  plainTime: /:/,\n\n  // year tokens\n  YY: /^(\\d{2})$/,\n  YYY: [\n    /^([+-]\\d{2})$/, // 0 additional digits\n    /^([+-]\\d{3})$/, // 1 additional digit\n    /^([+-]\\d{4})$/, // 2 additional digits\n  ],\n  YYYY: /^(\\d{4})/,\n  YYYYY: [\n    /^([+-]\\d{4})/, // 0 additional digits\n    /^([+-]\\d{5})/, // 1 additional digit\n    /^([+-]\\d{6})/, // 2 additional digits\n  ],\n\n  // date tokens\n  MM: /^-(\\d{2})$/,\n  DDD: /^-?(\\d{3})$/,\n  MMDD: /^-?(\\d{2})-?(\\d{2})$/,\n  Www: /^-?W(\\d{2})$/,\n  WwwD: /^-?W(\\d{2})-?(\\d{1})$/,\n\n  HH: /^(\\d{2}([.,]\\d*)?)$/,\n  HHMM: /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n  HHMMSS: /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n\n  // time zone tokens (to identify the presence of a tz)\n  timeZone: tzPattern,\n}\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If an argument is a string, the function tries to parse it.\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n * If the function cannot parse the string or the values are invalid, it returns Invalid Date.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n * All *date-fns* functions will throw `RangeError` if `options.additionalDigits` is not 0, 1, 2 or undefined.\n *\n * @param {Date|String|Number} argument - the value to convert\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = toDate('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = toDate('+02014101', {additionalDigits: 1})\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function toDate(argument, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n  }\n\n  if (argument === null) {\n    return new Date(NaN)\n  }\n\n  var options = dirtyOptions || {}\n\n  var additionalDigits =\n    options.additionalDigits == null\n      ? DEFAULT_ADDITIONAL_DIGITS\n      : toInteger(options.additionalDigits)\n  if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n    throw new RangeError('additionalDigits must be 0, 1 or 2')\n  }\n\n  // Clone the date\n  if (\n    argument instanceof Date ||\n    (typeof argument === 'object' && Object.prototype.toString.call(argument) === '[object Date]')\n  ) {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime())\n  } else if (\n    typeof argument === 'number' ||\n    Object.prototype.toString.call(argument) === '[object Number]'\n  ) {\n    return new Date(argument)\n  } else if (\n    !(\n      typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]'\n    )\n  ) {\n    return new Date(NaN)\n  }\n\n  var dateStrings = splitDateString(argument)\n\n  var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n  var year = parseYearResult.year\n  var restDateString = parseYearResult.restDateString\n\n  var date = parseDate(restDateString, year)\n\n  if (isNaN(date)) {\n    return new Date(NaN)\n  }\n\n  if (date) {\n    var timestamp = date.getTime()\n    var time = 0\n    var offset\n\n    if (dateStrings.time) {\n      time = parseTime(dateStrings.time)\n\n      if (isNaN(time)) {\n        return new Date(NaN)\n      }\n    }\n\n    if (dateStrings.timeZone || options.timeZone) {\n      offset = tzParseTimezone(dateStrings.timeZone || options.timeZone, new Date(timestamp + time))\n      if (isNaN(offset)) {\n        return new Date(NaN)\n      }\n    } else {\n      // get offset accurate to hour in time zones that change offset\n      offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time))\n      offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time + offset))\n    }\n\n    return new Date(timestamp + time + offset)\n  } else {\n    return new Date(NaN)\n  }\n}\n\nfunction splitDateString(dateString) {\n  var dateStrings = {}\n  var parts = patterns.dateTimePattern.exec(dateString)\n  var timeString\n\n  if (!parts) {\n    parts = patterns.datePattern.exec(dateString)\n    if (parts) {\n      dateStrings.date = parts[1]\n      timeString = parts[2]\n    } else {\n      dateStrings.date = null\n      timeString = dateString\n    }\n  } else {\n    dateStrings.date = parts[1]\n    timeString = parts[3]\n  }\n\n  if (timeString) {\n    var token = patterns.timeZone.exec(timeString)\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], '')\n      dateStrings.timeZone = token[1].trim()\n    } else {\n      dateStrings.time = timeString\n    }\n  }\n\n  return dateStrings\n}\n\nfunction parseYear(dateString, additionalDigits) {\n  var patternYYY = patterns.YYY[additionalDigits]\n  var patternYYYYY = patterns.YYYYY[additionalDigits]\n\n  var token\n\n  // YYYY or ±YYYYY\n  token = patterns.YYYY.exec(dateString) || patternYYYYY.exec(dateString)\n  if (token) {\n    var yearString = token[1]\n    return {\n      year: parseInt(yearString, 10),\n      restDateString: dateString.slice(yearString.length),\n    }\n  }\n\n  // YY or ±YYY\n  token = patterns.YY.exec(dateString) || patternYYY.exec(dateString)\n  if (token) {\n    var centuryString = token[1]\n    return {\n      year: parseInt(centuryString, 10) * 100,\n      restDateString: dateString.slice(centuryString.length),\n    }\n  }\n\n  // Invalid ISO-formatted year\n  return {\n    year: null,\n  }\n}\n\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) {\n    return null\n  }\n\n  var token\n  var date\n  var month\n  var week\n\n  // YYYY\n  if (dateString.length === 0) {\n    date = new Date(0)\n    date.setUTCFullYear(year)\n    return date\n  }\n\n  // YYYY-MM\n  token = patterns.MM.exec(dateString)\n  if (token) {\n    date = new Date(0)\n    month = parseInt(token[1], 10) - 1\n\n    if (!validateDate(year, month)) {\n      return new Date(NaN)\n    }\n\n    date.setUTCFullYear(year, month)\n    return date\n  }\n\n  // YYYY-DDD or YYYYDDD\n  token = patterns.DDD.exec(dateString)\n  if (token) {\n    date = new Date(0)\n    var dayOfYear = parseInt(token[1], 10)\n\n    if (!validateDayOfYearDate(year, dayOfYear)) {\n      return new Date(NaN)\n    }\n\n    date.setUTCFullYear(year, 0, dayOfYear)\n    return date\n  }\n\n  // yyyy-MM-dd or YYYYMMDD\n  token = patterns.MMDD.exec(dateString)\n  if (token) {\n    date = new Date(0)\n    month = parseInt(token[1], 10) - 1\n    var day = parseInt(token[2], 10)\n\n    if (!validateDate(year, month, day)) {\n      return new Date(NaN)\n    }\n\n    date.setUTCFullYear(year, month, day)\n    return date\n  }\n\n  // YYYY-Www or YYYYWww\n  token = patterns.Www.exec(dateString)\n  if (token) {\n    week = parseInt(token[1], 10) - 1\n\n    if (!validateWeekDate(year, week)) {\n      return new Date(NaN)\n    }\n\n    return dayOfISOWeekYear(year, week)\n  }\n\n  // YYYY-Www-D or YYYYWwwD\n  token = patterns.WwwD.exec(dateString)\n  if (token) {\n    week = parseInt(token[1], 10) - 1\n    var dayOfWeek = parseInt(token[2], 10) - 1\n\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN)\n    }\n\n    return dayOfISOWeekYear(year, week, dayOfWeek)\n  }\n\n  // Invalid ISO-formatted date\n  return null\n}\n\nfunction parseTime(timeString) {\n  var token\n  var hours\n  var minutes\n\n  // hh\n  token = patterns.HH.exec(timeString)\n  if (token) {\n    hours = parseFloat(token[1].replace(',', '.'))\n\n    if (!validateTime(hours)) {\n      return NaN\n    }\n\n    return (hours % 24) * MILLISECONDS_IN_HOUR\n  }\n\n  // hh:mm or hhmm\n  token = patterns.HHMM.exec(timeString)\n  if (token) {\n    hours = parseInt(token[1], 10)\n    minutes = parseFloat(token[2].replace(',', '.'))\n\n    if (!validateTime(hours, minutes)) {\n      return NaN\n    }\n\n    return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE\n  }\n\n  // hh:mm:ss or hhmmss\n  token = patterns.HHMMSS.exec(timeString)\n  if (token) {\n    hours = parseInt(token[1], 10)\n    minutes = parseInt(token[2], 10)\n    var seconds = parseFloat(token[3].replace(',', '.'))\n\n    if (!validateTime(hours, minutes, seconds)) {\n      return NaN\n    }\n\n    return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000\n  }\n\n  // Invalid ISO-formatted time\n  return null\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  week = week || 0\n  day = day || 0\n  var date = new Date(0)\n  date.setUTCFullYear(isoWeekYear, 0, 4)\n  var fourthOfJanuaryDay = date.getUTCDay() || 7\n  var diff = week * 7 + day + 1 - fourthOfJanuaryDay\n  date.setUTCDate(date.getUTCDate() + diff)\n  return date\n}\n\n// Validation functions\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n\nfunction validateDate(year, month, date) {\n  if (month < 0 || month > 11) {\n    return false\n  }\n\n  if (date != null) {\n    if (date < 1) {\n      return false\n    }\n\n    var isLeapYear = isLeapYearIndex(year)\n    if (isLeapYear && date > DAYS_IN_MONTH_LEAP_YEAR[month]) {\n      return false\n    }\n    if (!isLeapYear && date > DAYS_IN_MONTH[month]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n  if (dayOfYear < 1) {\n    return false\n  }\n\n  var isLeapYear = isLeapYearIndex(year)\n  if (isLeapYear && dayOfYear > 366) {\n    return false\n  }\n  if (!isLeapYear && dayOfYear > 365) {\n    return false\n  }\n\n  return true\n}\n\nfunction validateWeekDate(year, week, day) {\n  if (week < 0 || week > 52) {\n    return false\n  }\n\n  if (day != null && (day < 0 || day > 6)) {\n    return false\n  }\n\n  return true\n}\n\nfunction validateTime(hours, minutes, seconds) {\n  if (hours != null && (hours < 0 || hours >= 25)) {\n    return false\n  }\n\n  if (minutes != null && (minutes < 0 || minutes >= 60)) {\n    return false\n  }\n\n  if (seconds != null && (seconds < 0 || seconds >= 60)) {\n    return false\n  }\n\n  return true\n}\n","import tzParseTimezone from '../_lib/tzParseTimezone/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name utcToZonedTime\n * @category Time Zone Helpers\n * @summary Get a date/time representing local time in a given time zone from the UTC date\n *\n * @description\n * Returns a date instance with values representing the local time in the time zone\n * specified of the UTC time from the date provided. In other words, when the new date\n * is formatted it will show the equivalent hours in the target time zone regardless\n * of the current system time zone.\n *\n * @param {Date|String|Number} date - the date with the relevant UTC time\n * @param {String} timeZone - the time zone to get local time for, can be an offset or IANA time zone\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date with the equivalent time in the time zone\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // In June 10am UTC is 6am in New York (-04:00)\n * const result = utcToZonedTime('2014-06-25T10:00:00.000Z', 'America/New_York')\n * //=> Jun 25 2014 06:00:00\n */\nexport default function utcToZonedTime(dirtyDate, timeZone, options) {\n  var date = toDate(dirtyDate, options)\n\n  var offsetMilliseconds = tzParseTimezone(timeZone, date, true)\n\n  var d = new Date(date.getTime() - offsetMilliseconds)\n\n  var resultDate = new Date(0)\n\n  resultDate.setFullYear(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate())\n\n  resultDate.setHours(d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds())\n\n  return resultDate\n}\n","import {\n  addDays,\n  addHours,\n  addMonths,\n  addYears,\n  compareAsc,\n  compareDesc,\n  differenceInDays,\n  format,\n  formatISO,\n  isAfter,\n  isBefore,\n  isDate,\n  isFuture,\n  isPast,\n  isSameDay,\n  max,\n  parseISO,\n  setMinutes,\n  subDays,\n  subMonths,\n  subYears,\n  eachDayOfInterval,\n} from 'date-fns'\n\nimport { isString } from 'lodash-es'\nimport { zonedTimeToUtc, utcToZonedTime } from 'date-fns-tz'\n\nexport type UnparsedDate = string | Date\n\nexport type DatePeriod = ExactDatePeriod | FlexDatePeriod | FuzzyDatePeriod\n\nexport interface ExactDatePeriod {\n  startDate: Date\n  endDate: Date\n}\n\nexport interface FlexDatePeriod extends ExactDatePeriod {\n  duration: number\n}\n\nexport interface FuzzyDatePeriod extends ExactDatePeriod {\n  fuzziness: number\n}\n\nexport function parse(date: UnparsedDate): Date {\n  if (isDate(date)) {\n    return date as Date\n  }\n  return parseISO(date as string)\n}\n\nexport function tryParseDate(input: unknown): Date | undefined {\n  if (isDate(input)) return input as Date\n  if (isString(input)) return parseISO(input)\n  return undefined\n}\n\nexport function compare(\n  first: UnparsedDate,\n  second: UnparsedDate,\n  desc = true,\n) {\n  const parsedFirst = parse(first)\n  const parsedSecond = parse(second)\n  if (desc) {\n    return compareDesc(parsedFirst, parsedSecond)\n  }\n  return compareAsc(parsedFirst, parsedSecond)\n}\n\nexport function sameDay(first: UnparsedDate, second: UnparsedDate) {\n  return isSameDay(parse(first), parse(second))\n}\n\nexport function dateBefore(first: UnparsedDate, second: UnparsedDate) {\n  return isBefore(parse(first), parse(second))\n}\nexport function dateAfter(first: UnparsedDate, second: UnparsedDate) {\n  return isAfter(parse(first), parse(second))\n}\nexport function dateBetween(\n  date: UnparsedDate,\n  start: UnparsedDate,\n  end: UnparsedDate,\n) {\n  return !(dateBefore(date, start) || dateAfter(date, end))\n}\n\nexport function datesEqual(first: UnparsedDate, second: UnparsedDate) {\n  const f = parse(first)\n  f.setHours(0)\n  f.setMinutes(0)\n  f.setSeconds(0)\n  f.setMilliseconds(0)\n  const s = parse(second)\n  s.setHours(0)\n  s.setMinutes(0)\n  s.setSeconds(0)\n  s.setMilliseconds(0)\n\n  return s.getTime() === f.getTime()\n}\n\nexport function inFuture(date: UnparsedDate) {\n  return isFuture(parse(date))\n}\n\nexport function inPast(date: UnparsedDate) {\n  return isPast(parse(date))\n}\n\n/**\n * Input date strings will be converted to Dates via date-fns parseISO and are thus expected to match YYYY-MM-DD\n *\n * @param {string} date\n */\nexport function daysBefore(date: UnparsedDate) {\n  return differenceInDays(parse(date), Date.now())\n}\n\nexport function diff(first: UnparsedDate, second: UnparsedDate) {\n  return differenceInDays(parse(first), parse(second))\n}\n\n/**\n * Input date strings will be converted to Dates via date-fns parseISO and are thus expected to match YYYY-MM-DD\n *\n * @param {string} date\n * @param {number} days\n */\nexport function daysAdd(date: UnparsedDate, days: number) {\n  return addDays(parse(date), days)\n}\n\nexport function monthsAdd(date: UnparsedDate, months: number) {\n  return addMonths(parse(date), months)\n}\n\nexport function monthsSub(date: UnparsedDate, months: number) {\n  return subMonths(parse(date), months)\n}\n\nexport function yearsAdd(date: UnparsedDate, years: number) {\n  return addYears(parse(date), years)\n}\n\nexport function yearsSub(date: UnparsedDate, years: number) {\n  return subYears(parse(date), years)\n}\n\n/**\n * Input date strings will be converted to Dates via date-fns parseISO and are thus expected to match YYYY-MM-DD\n *\n * @param {string} date\n * @param {number} days\n */\nexport function daysSub(date: UnparsedDate, days: number) {\n  return subDays(parse(date), days)\n}\n\nexport function hoursAdd(date: UnparsedDate, hours: number) {\n  return addHours(parse(date), hours)\n}\n\nexport function toDate(date: UnparsedDate) {\n  return formatISO(parse(date), { representation: 'date' })\n}\n\nexport function toServerDate(date: UnparsedDate): string {\n  return formatISO(parse(date), { representation: 'date' })\n}\n\nexport function toDateTime(date: UnparsedDate) {\n  return formatISO(parse(date), { representation: 'complete' })\n}\n\nexport function toDateFormat(date: UnparsedDate, f: string) {\n  return format(parse(date), f)\n}\n\n/**\n * Input date strings will be converted to Dates via date-fns parseISO and are thus expected to match YYYY-MM-DD\n *\n * @param {string} first\n * @param {string} second\n */\nexport function calculateDuration(first: UnparsedDate, second: UnparsedDate) {\n  return differenceInDays(parse(second), parse(first))\n}\n\nexport function calculateCheckoutDate(checkin: UnparsedDate, duration: number) {\n  return addDays(parse(checkin), duration)\n}\n\nexport function daysSubWithLimit(\n  date: UnparsedDate,\n  days: number,\n  limit: UnparsedDate,\n) {\n  const parsedDate = parse(date)\n  const parsedLimit = parse(limit)\n  const pastDate = subDays(parsedDate, days)\n  return max([pastDate, parsedLimit])\n}\n\n/**\n * Input date strings will be converted to Dates via date-fns parseISO and are thus expected to match YYYY-MM-DD\n * https://jira.hotelplan.com/browse/HHDWEBCC-2310\n *\n * @param {string} date\n */\nexport function isWinter(date: UnparsedDate) {\n  if (date) {\n    const parsedDate = parse(date)\n    const year = parsedDate.getFullYear()\n    return (\n      isBefore(parsedDate, new Date(year, 3, 1)) ||\n      isAfter(parsedDate, new Date(year, 9, 20))\n    )\n  }\n  const parsedDate = parse(new Date())\n  const year = parsedDate.getFullYear()\n  return (\n    isBefore(parsedDate, new Date(year, 1, 8)) ||\n    isAfter(parsedDate, new Date(year, 9, 20))\n  )\n}\n\nexport function addTimezoneOffset(date: UnparsedDate) {\n  let parsedDate = parse(date)\n  const timezoneOffset = parsedDate.getTimezoneOffset()\n  parsedDate = setMinutes(\n    parsedDate,\n    Math.abs(timezoneOffset) >= 720 ? timezoneOffset : 0,\n  )\n  return formatISO(parsedDate, { representation: 'date' })\n}\n\nexport function formatDateRange(\n  { start, end }: DateRange,\n  dateFormat?: string,\n) {\n  if (!start || !end) return ''\n\n  return [start, end]\n    .map((date) => formatDatetime(toDate(date), dateFormat))\n    .join(' - ')\n}\n\nexport function toUTC(date: UnparsedDate, tz = 'Europe/Zurich') {\n  return zonedTimeToUtc(parse(date), tz).getTime()\n}\n\nexport function toLocaldate(date: UnparsedDate) {\n  const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone\n  return utcToZonedTime(date, timezone)\n}\n\nexport function isDateRangeValid(range?: DateRange): range is ValidDateRange {\n  return !!range && !!(range.start && range.end)\n}\n\nexport function getDateRangeInDays(range: ValidDateRange): number {\n  return differenceInDays(range.end, range.start)\n}\n\nexport function toShortDate(date: UnparsedDate, locale?: string): string {\n  return parse(date).toLocaleString(locale, { month: 'short', day: 'numeric' })\n}\n\nexport function getDateRangeEachDay(range: ValidDateRange): Date[] {\n  return eachDayOfInterval(range)\n}\n\nexport function isValidDatePeriod(value?: object): value is DatePeriod {\n  return (\n    !!value &&\n    'startDate' in value &&\n    !!value.startDate &&\n    'endDate' in value &&\n    !!value.endDate\n  )\n}\n\nexport function isExactDatePeriod(value: object): value is ExactDatePeriod {\n  return (\n    isValidDatePeriod(value) &&\n    !isFlexDatePeriod(value) &&\n    !isFuzzyDatePeriod(value)\n  )\n}\n\nexport function isFlexDatePeriod(value?: object): value is FlexDatePeriod {\n  return isValidDatePeriod(value) && 'duration' in value && !!value.duration\n}\n\nexport function isFuzzyDatePeriod(value?: object): value is FuzzyDatePeriod {\n  return isValidDatePeriod(value) && 'fuzziness' in value && !!value.fuzziness\n}\n","// Implemntiert Tracking wie hier definiert: https://wiki.hotelplan.com/display/TSICHDDWEBCC/01+-+Enhanced+Ecommerce\ntype Type = 'A' | 'B' | 'G' | 'H'\ntype DetailType = 'A' | 'B' | 'C' | 'D' | 'F' | 'H' | 'R' | 'S' | 'V' | 'Y'\n\nexport default {\n  productImpression,\n  productClick,\n  productDetailImpression,\n  addToCart,\n  removeFromCart,\n}\n\nexport function getDiscount(basePrice: number, reduction: number) {\n  if (!basePrice || !reduction) {\n    return undefined\n  }\n  const value = Math.floor((reduction / basePrice) * 100)\n  return `${value}%`\n}\n\nfunction createCartObject(accom: ResultDocument) {\n  if (!accom.trip?.price || !accom.trip.reduction) {\n    return\n  }\n  const effectivePrice = accom.trip.price\n  const basePrice = accom.trip.reduction\n    ? effectivePrice + accom.trip.reduction\n    : effectivePrice\n  return {\n    name: accom.name,\n    id: accom.code,\n    price: (effectivePrice / accom.trip.duration).toFixed(2),\n    brand: brand(accom.type as Type),\n    // TODO: Benötigt englische GEO-Daten\n    // category,\n    pax: accom.pax,\n    quality: accom.stars,\n    // TODO: Benötigt Attributsinfos\n    // pool,\n    discountType: accom.trip.special\n      ? { LM: 'last minute', EB: 'early booker' }[\n          accom.trip.special.substring(0, 2)\n        ] || 'other'\n      : undefined,\n    discountAmount: getDiscount(basePrice, accom.trip.reduction),\n    regularPrice: (basePrice / accom.trip.duration).toFixed(2),\n    quantity: accom.trip.duration,\n    start_date: accom.trip.checkin,\n    end_date: accom.trip.checkout,\n  }\n}\n\nfunction addToCart(accom: ResultDocument) {\n  const pushElem = {\n    event: 'eec.addToCart',\n    ecommerce: {\n      currencyCode: useConfdata().currency,\n      add: createCartObject(accom),\n    },\n  }\n  useTracking().send(pushElem)\n}\n\nfunction removeFromCart(accom: ResultDocument) {\n  const pushElem = {\n    event: 'eec.removeFromCart',\n    ecommerce: {\n      currencyCode: useConfdata().currency,\n      remove: createCartObject(accom),\n    },\n  }\n  useTracking().send(pushElem)\n}\n\nfunction createImpressions(accoms: ResultDocument[], pagetype: string) {\n  const result: {\n    name: string\n    id: string\n    price: string\n    brand: string\n    list: string | undefined\n    position: number\n    pax: number\n    quality: number\n    discountType: string | undefined\n    discountAmount: string | undefined\n    regularPrice: string\n    start_date: string\n    end_date: string | undefined\n  }[] = []\n  accoms.forEach((accom) => {\n    if (!accom.trip?.price) {\n      return\n    }\n    const effectivePrice = accom.trip.price\n    const basePrice = accom.trip.reduction\n      ? effectivePrice + accom.trip.reduction\n      : effectivePrice\n    result.push({\n      name: accom.name,\n      id: accom.code,\n      price: (effectivePrice / accom.trip.duration).toFixed(2),\n      brand: brand(accom.type as Type),\n      // TODO: Benötigt englische GEO-Daten\n      // category,\n      list: { search: 'Searchresults', bookmarks: 'Watchlist' }[\n        pagetype as 'search' | 'bookmarks'\n      ],\n      position: accom.position || NaN,\n      pax: accom.pax,\n      quality: accom.stars,\n      // TODO: Benötigt Attributsinfos\n      // pool,\n      discountType: accom.trip.special\n        ? { LM: 'last minute', EB: 'early booker' }[\n            accom.trip.special.substring(0, 2)\n          ] || 'other'\n        : undefined,\n      discountAmount: accom.trip.reduction\n        ? getDiscount(basePrice, accom.trip.reduction)\n        : undefined,\n      regularPrice: (basePrice / accom.trip.duration).toFixed(2),\n      start_date: accom.trip.checkin,\n      end_date: accom.trip.checkout,\n    })\n  })\n  return result\n}\n\nfunction productImpression(accoms: ResultDocument[]) {\n  const pushElem = {\n    event: 'eec.productImpression',\n    ecommerce: {\n      currencyCode: useConfdata().currency,\n      impressions: createImpressions(accoms, useConfdata().pagetype!),\n    },\n  }\n  useTracking().send(pushElem)\n}\n\nfunction productDetailImpression(\n  price: {\n    price?: {}\n    special?: string\n    regularPrice?: number\n    reduction?: number\n    checkin?: Date | string\n    checkout?: Date | string\n  } = {},\n) {\n  const seoify = (input: string) =>\n    input.toLowerCase().replace('/', '-').replace(' ', '-')\n  const accommodation = useConfdata().baseData\n  if (!accommodation) {\n    return\n  }\n\n  const type = typeMapping[accommodation.type.code as Type]\n  const detailType = detailTypeMapping[accommodation.type.detail as DetailType]\n  const country = seoify(accommodation.country.label)\n  const region = seoify(accommodation.region.label)\n  const place = seoify(accommodation.place.label)\n  const category = `${country}/${region}/${place}/${type}/${detailType}`\n\n  useTracking().send({\n    event: 'eec.productDetailImpression',\n    ecommerce: {\n      currencyCode: useConfdata().currency,\n      detail: {\n        products: [\n          {\n            name: accommodation.name,\n            id: accommodation.code,\n            price: price.price,\n            brand: `${type}/${detailType}`,\n            category,\n            pax: accommodation.pax.capacity,\n            quality: accommodation.evaluation.stars,\n            pool: !!accommodation.attributes.pool,\n            discountType: price.special\n              ? { LM: 'last minute', EB: 'early booker' }[\n                  price.special.substring(0, 2)\n                ] || 'other'\n              : undefined,\n            discountAmount:\n              price.regularPrice && price.reduction\n                ? getDiscount(price.regularPrice, price.reduction)\n                : undefined,\n            regularPrice: price.regularPrice || undefined,\n            start_date: price.checkin && toServerDate(price.checkin),\n            end_date: price.checkout && toServerDate(price.checkout),\n          },\n        ],\n      },\n    },\n  })\n}\n\nconst detailTypeMapping: Record<DetailType, string> = {\n  A: 'apart-hotel',\n  B: 'bungalow',\n  C: 'chalet',\n  D: 'divers',\n  F: 'farmhouse',\n  H: 'holiday-village',\n  R: 'residence',\n  S: 'castle-mansion',\n  V: 'villa',\n  Y: 'yacht',\n}\n\nconst typeMapping: Record<Type, string> = {\n  A: 'apartment',\n  B: 'boat',\n  G: 'guestroom',\n  H: 'holiday-house',\n}\n\nfunction brand(type: Type, detailType?: DetailType) {\n  if (detailType) {\n    return `${typeMapping[type]}/${detailTypeMapping[detailType]}`\n  }\n  return `${typeMapping[type]}`\n}\n\nfunction createProduct(accom: ResultDocument, pagetype: string) {\n  if (!accom.trip?.price || !accom.trip.reduction) {\n    return\n  }\n  const effectivePrice = accom.trip.price\n  const basePrice = accom.trip.reduction\n    ? effectivePrice + accom.trip.reduction\n    : effectivePrice\n  return {\n    actionField: {\n      list: { search: 'Searchresults', bookmarks: 'Watchlist' }[pagetype],\n    },\n    name: accom.name,\n    id: accom.code,\n    price: (effectivePrice / accom.trip.duration).toFixed(2),\n    brand: brand(accom.type as Type),\n    // TODO: Benötigt englische GEO-Daten\n    // category,\n    position: accom.position,\n    pax: accom.pax,\n    quality: accom.stars,\n    // TODO: Benötigt Attributsinfos\n    // pool,\n    discountType: accom.trip.special\n      ? { LM: 'last minute', EB: 'early booker' }[\n          accom.trip.special.substring(0, 2)\n        ] || 'other'\n      : undefined,\n    discountAmount: getDiscount(basePrice, accom.trip.reduction),\n    regularPrice: (basePrice / accom.trip.duration).toFixed(2),\n    start_date: accom.trip.checkin,\n    end_date: accom.trip.checkout,\n  }\n}\n\nfunction productClick(accom: ResultDocument) {\n  const pushElem = {\n    event: 'eec.productClick',\n    ecommerce: {\n      currencyCode: useConfdata().currency,\n      click: createProduct(accom, useConfdata().pagetype!),\n    },\n  }\n  useTracking().send(pushElem)\n}\n","// this zeigt auf den context\n\nexport default {\n  dataLayerPageLoad,\n  detailPage: detailPageEvent,\n  myrentPage: myrentPageEvent,\n  homePage: homePageEvent,\n  searchPage: searchPageEvent,\n  contentPage: contentPageEvent,\n  reviewsPage: reviewsPageEvent,\n  newsletterPage: newsletterPageEvent,\n  bookmarksPage: bookmarksPageEvent,\n  unknownPage: unknownPageEvent,\n}\n\n// Kein Event! wird bei Initialisierung des plugins gefeuert und liefert initiale dataLayer-Daten für den page load, ergänzt um seitenspezifische Daten\nfunction dataLayerPageLoad(event: any) {\n  switch (useConfdata().pagetype) {\n    case 'detail':\n      return detailPageEvent(event)\n    case 'myrent':\n      return myrentPageEvent(event)\n    case 'start':\n      return homePageEvent(event)\n    case 'search':\n      return searchPageEvent(event)\n    case 'content':\n    case 'contact':\n      return contentPageEvent(event)\n    case 'reviews':\n      return reviewsPageEvent(event)\n    case 'newsletter':\n      return newsletterPageEvent(event)\n    case 'bookmarks':\n    case 'favorites':\n      return bookmarksPageEvent(event)\n    default:\n      return unknownPageEvent(event)\n  }\n}\n\n/* DETAILS */\nfunction detailPageEvent(pushEvent: boolean) {\n  const data = PageLoadHandler()\n  data.event = pushEvent ? 'page_view' : undefined\n  return addDetailData(data)\n}\n\n/* MYRENT */\nfunction myrentPageEvent(pushEvent: boolean) {\n  const data = PageLoadHandler()\n  data.event = pushEvent ? 'page_view' : undefined\n  return addMyrentData(data)\n}\n\n/* HOME */\nfunction homePageEvent(pushEvent: boolean) {\n  const data = PageLoadHandler()\n  data.event = pushEvent ? 'page_view' : undefined\n  return addHomeData(data)\n}\n\n/* SEARCH */\nfunction searchPageEvent(pushEvent: boolean) {\n  const data = PageLoadHandler()\n  data.event = pushEvent ? 'page_view' : undefined\n  return addSearchData(data)\n}\n\n/* CONTENT */\nfunction contentPageEvent(pushEvent: boolean) {\n  const data = PageLoadHandler()\n  data.event = pushEvent ? 'page_view' : undefined\n  return addContentData(data)\n}\n\n/* REVIEWS */\nfunction reviewsPageEvent(pushEvent: boolean) {\n  const data = PageLoadHandler()\n  data.event = pushEvent ? 'page_view' : undefined\n  return addReviewsData(data)\n}\n\n/* NEWSLETTER */\nfunction newsletterPageEvent(pushEvent: boolean) {\n  const data = PageLoadHandler()\n  data.event = pushEvent ? 'page_view' : undefined\n  return addNewsletterData(data)\n}\n\n/* BOOKMARKS */\nfunction bookmarksPageEvent(pushEvent: boolean) {\n  const data = PageLoadHandler()\n  data.event = pushEvent ? 'page_view' : undefined\n  return addBookmarksData(data)\n}\n\n/* UNKNOWN */\nfunction unknownPageEvent(pushEvent: boolean) {\n  const data = PageLoadHandler()\n  data.event = pushEvent ? 'page_view' : undefined\n  return addUnknownData(data)\n}\n\n// /* HELPER */\n\nfunction PageLoadHandler(): Pagedata {\n  const confData = useConfdata()\n  const params = useParams()\n  const redirectParams = new URLSearchParams(\n    params.redirect as Record<string, string>,\n  ).toString()\n\n  const features: Record<string, string> = {}\n  useAB().all.forEach(({ key, active, value }) => {\n    if (active && value) {\n      features[key] = value\n    }\n  })\n\n  const allFeatures = useNuxtApp().$unleash.features\n\n  const data = {\n    meta: {\n      features: Object.keys(allFeatures).filter((f) => allFeatures[f]),\n      version: __VERSION__,\n    },\n    user: {\n      isLoggedIn: !!useAuth().session,\n      userID: useAuth().session?.identity?.id,\n    },\n    page: {\n      eid:\n        process.env.NODE_ENV === 'production' ? 'prod' : process.env.NODE_ENV,\n      location:\n        window.location.pathname + (redirectParams ? `?${redirectParams}` : ''),\n      hrco: '200',\n      virtPath: confData.pagetype || 'unknown',\n      pageArea: 'Portal',\n      isIframe: !!params.iframe,\n      pId: undefined,\n      pageBreakpoint:\n        window.innerWidth > 1024\n          ? 'desktop'\n          : window.innerWidth > 768\n            ? 'tablet'\n            : 'mobile',\n      pagePool: 'interhome',\n      pageCountry: confData.domainsCountryCode?.toLowerCase() || 'int',\n      pageLanguage: useL10N().language,\n      currency: confData.currency,\n    },\n    features,\n  }\n  return data\n}\n\nfunction addDetailData(data: Pagedata) {\n  const accommodation = useConfdata().baseData!\n  data.page.pageType = 'Detail Views'\n  data.page.pageTypeCluster = 'Detail Views'\n  data.page.virtPath = `/accommodationdetail/${accommodation.country.tag}/${accommodation.region.tag}/${\n    accommodation.place.tag\n  }/${accommodation.code.toLowerCase()}`\n  data.partner = partnerBlock()\n  data.accom = accomBlock()\n  return data\n}\n\nfunction addMyrentData(data: Pagedata) {\n  const accommodation = useConfdata().baseData!\n  data.page.pageType = 'Detail Views'\n  data.page.pageTypeCluster = 'Detail Views'\n  data.page.virtPath = `/myrent/accommodationdetail/${accommodation.code.toLowerCase()}`\n  data.page.pageCountry = data.page.pageLanguage\n  data.accom = accomBlock()\n  return data\n}\n\nfunction addHomeData(data: {\n  page: any\n  features?: Record<string, string>\n  partner?: any\n}) {\n  data.page.pageType = 'Home'\n  data.page.pageTypeCluster = 'home'\n  data.page.virtPath = 'homesite'\n  data.partner = partnerBlock()\n  return data\n}\n\nfunction addSearchData(data: Pagedata) {\n  const conf = useConfdata()\n  let pagetype = 'searchresults'\n  let pagetypeCluster = 'searchresults'\n  data.page.virtPath = conf.page?.virtpath || ''\n  if (conf.destination?.countryCode) {\n    pagetype = 'searchresults country'\n    if (conf.destination.regionCode) {\n      pagetype = 'searchresults region'\n      if (conf.destination.placeCode) {\n        pagetype = 'searchresults place'\n      }\n    }\n  }\n  const filters = conf.destination?.filters || []\n  if (\n    filters.find((filter) =>\n      [\n        'cheapcheap',\n        'discount-20',\n        'early_booker',\n        'last_minute',\n        'special_offer',\n      ].includes(filter.key),\n    )\n  ) {\n    pagetype = 'Price Promotions'\n    pagetypeCluster = 'Searchresults with Filters'\n  }\n  data.page.pageType = pagetype\n  data.page.pageTypeCluster = pagetypeCluster\n  data.partner = partnerBlock()\n  return data\n}\n\nfunction addContentData(data: Pagedata) {\n  const conf = useConfdata()\n  const pageType = pageTypeVue(conf.page?.virtpath || '') || undefined\n  data.page.pId = conf.pageID\n  data.page.virtPath = conf.page?.virtpath || ''\n  data.page.pageType = pageType\n  data.page.pageTypeCluster = 'Landingpages / Content Pages'\n  data.partner = partnerBlock()\n  return data\n}\n\nfunction addReviewsData(data: Pagedata) {\n  data.page.pageType = 'Reviews'\n  data.page.pageTypeCluster = 'Reviews'\n  data.partner = partnerBlock()\n  return data\n}\n\nfunction addNewsletterData(data: Pagedata) {\n  data.page.pageType = 'Newsletter'\n  data.page.pageTypeCluster = 'Landingpages / Content Pages'\n  data.partner = partnerBlock()\n  return data\n}\n\nfunction addBookmarksData(data: Pagedata) {\n  data.page.pageType = 'Favourites'\n  data.page.pageTypeCluster = 'Landingpages / Content Pages'\n  data.page.virtPath = '/watchlistsite/watchlist/'\n  data.partner = partnerBlock()\n  return data\n}\n\nfunction addUnknownData(data: Pagedata) {\n  data.page.pageType = 'error-page'\n  data.page.pageTypeCluster = 'error-page'\n  data.partner = partnerBlock()\n  return data\n}\n\nfunction partnerBlock() {\n  const state = usePartner()\n  return {\n    id: state.id || undefined,\n    idZu: state.extra || undefined,\n    name: undefined,\n  }\n}\n\nfunction accomBlock() {\n  const accommodation = useConfdata().baseData\n\n  return {\n    country: accommodation?.country.code || undefined,\n    region: accommodation?.region.code || undefined,\n    place: accommodation?.place.code || undefined,\n    quality: accommodation?.evaluation.stars || undefined,\n  }\n}\n\n// // helper for pageType gemäß https://wiki.hotelplan.com/display/TSICHDDWEBCC/02+-+pageLoad+DataLayer\nfunction pageTypeVue(path: string) {\n  const virtPathToType = [\n    // komplette virtPaths\n    { vp: '/landingsite/topics/last-minute/', pt: 'Price Promotions' },\n    { vp: '/landingsite/topics/cheepcheep/', pt: 'Price Promotions' }, // ??? noch unklar\n    { vp: '/contentsite/contact/newsletter-registration/', pt: 'Newsletter' },\n    { vp: '/contentsite/imprint/', pt: 'Imprint' },\n    { vp: '/officessite/', pt: 'LSO Overview' },\n    // Teile von virtPaths\n    { vp: '/contentsite/about-us/', pt: 'About Interhome' },\n    { vp: '/landingsite/about-us/', pt: 'About Interhome' },\n    { vp: '/contentsite/contact/', pt: 'Contact' },\n    { vp: '/contentsite/customer-service/', pt: 'Service' },\n    { vp: '/landingsite/topics/', pt: 'Holiday Ideas' },\n    { vp: '/landingsite/pages/', pt: '' },\n    { vp: '/landingsite/travel-extras/', pt: 'Service' },\n    { vp: '/contentsite/travel-extras/', pt: 'Service' },\n    { vp: '/contentsite/news/', pt: 'Press' },\n    { vp: '/officesite/', pt: 'LSO Listview' },\n  ]\n\n  const pageType = virtPathToType.find((item) => path.includes(item.vp))?.pt\n  return pageType\n}\n","/*\n * 03-common\n *\n * Spezifikation: https://wiki.hotelplan.com/display/TSICHDDWEBCC/03+-+Common+Elements\n */\n\nexport default {\n  allCountriesClick,\n  showCompleteEditableTextClick,\n\n  // https://jira.hotelplan.com/browse/IHGWEBCC-171\n  reviewsDetailsOpened,\n  reviewsDetailsClosed,\n  reviewsShowTranslation,\n  reviewsHideTranslation,\n}\n\nfunction allCountriesClick(displayState: boolean) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Teaserblock',\n    eventAction: displayState ? 'show more' : 'show less',\n    eventLabel: 'Show all destinations',\n    eventNonInteraction: false,\n  })\n}\n\nfunction showCompleteEditableTextClick() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Teaserblock',\n    eventAction: 'show more',\n    eventLabel: 'Read More',\n    eventNonInteraction: false,\n  })\n}\n\nfunction reviewsDetailsOpened() {\n  const category = { detail: 'Object Details', reviews: 'Review List Page' }[\n    useConfdata().pagetype as 'detail' | 'reviews'\n  ]\n  useTracking().send({\n    event: 'event',\n    eventCategory: category,\n    eventAction: 'Open overall rating',\n    eventLabel: 'View ratings',\n    eventNonInteraction: false,\n  })\n}\n\nfunction reviewsDetailsClosed() {\n  const category = { detail: 'Object Details', reviews: 'Review List Page' }[\n    useConfdata().pagetype as 'detail' | 'reviews'\n  ]\n  useTracking().send({\n    event: 'event',\n    eventCategory: category,\n    eventAction: 'Close overall rating',\n    eventLabel: 'View ratings',\n    eventNonInteraction: false,\n  })\n}\n\nfunction reviewsShowTranslation() {\n  const category = { detail: 'Object Details', reviews: 'Review List Page' }[\n    useConfdata().pagetype as 'detail' | 'reviews'\n  ]\n  useTracking().send({\n    event: 'event',\n    eventCategory: category,\n    eventAction: 'Show translation rating',\n    eventLabel: 'View ratings',\n    eventNonInteraction: false,\n  })\n}\n\nfunction reviewsHideTranslation() {\n  const category = { detail: 'Object Details', reviews: 'Review List Page' }[\n    useConfdata().pagetype as 'detail' | 'reviews'\n  ]\n  useTracking().send({\n    event: 'event',\n    eventCategory: category,\n    eventAction: 'Show original rating',\n    eventLabel: 'View ratings',\n    eventNonInteraction: false,\n  })\n}\n","/*\n * Tracking-Spezifikation:\n * https://wiki.hotelplan.com/display/TSICHDDWEBCC/04+-+Search+Results\n */\n\nexport default {\n  sorting,\n  toggleBookmark,\n  objectMap,\n  generalMap,\n  paging,\n  headerImpression,\n  objectImpression,\n  freeCancellationImpression,\n  topRegionsImpression,\n  topPlacesImpression,\n  seoTextImpression,\n  requestTravelguide,\n  topNaturalSightsRequest,\n  topNaturalSightsImpression,\n  seoContentImpression,\n  footerImpression,\n  labelImpression,\n  objectTeaserViewed,\n  objectTeaserClicked,\n  weatherInfoImpression,\n  articleTeaserVisible,\n  articleTeaserScrollClick,\n  articleTeaserDetails,\n  zeroResultsBannerDisplayed,\n  results,\n  resultCount,\n  datesArrivalSelect,\n  datesDurationSelect,\n  datesModeSwitch,\n  datesDurationSelectFlex,\n  datesClear,\n  datesApply,\n}\n\nfunction sorting(criterion?: SortingValue) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'Sorting',\n    eventLabel: criterion ?? 'default',\n    eventNonInteraction: false,\n  })\n}\n\nfunction toggleBookmark({ accom, state }: { accom: string; state: boolean }) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: state ? 'Add to Wishlist' : 'Delete from Wishlist',\n    eventLabel: accom,\n    eventNonInteraction: false,\n  })\n}\n\nfunction objectMap(state: boolean) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'View Options',\n    eventLabel: state ? 'Object Map Opened' : 'Object Map Closed',\n    eventNonInteraction: false,\n  })\n}\n\nfunction generalMap(state: boolean) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'View Options',\n    eventLabel: state ? 'General Map Opened' : 'General Map Closed',\n    eventNonInteraction: false,\n  })\n}\n\nfunction paging({ current, total }: { current: number; total: number }) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'Paging',\n    eventLabel: current === total ? `${current} - Last` : current,\n    eventNonInteraction: false,\n  })\n}\n\nfunction headerImpression() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'Scroll Depth',\n    eventLabel: 'Header viewed',\n    eventNonInteraction: true,\n  })\n}\n\nfunction objectImpression() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'Scroll Depth',\n    eventLabel: 'Object seen',\n    eventNonInteraction: true,\n  })\n}\n\nfunction freeCancellationImpression() {\n  return {\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'Free cancellation viewed',\n    eventLabel: 'Free cancellation',\n    eventNonInteraction: true,\n  }\n}\n\nfunction topRegionsImpression() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'Scroll Depth',\n    eventLabel: 'Top Regions viewed',\n    eventNonInteraction: true,\n  })\n}\n\nfunction topPlacesImpression() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'Scroll Depth',\n    eventLabel: 'Top Places viewed',\n    eventNonInteraction: true,\n  })\n}\n\nfunction seoTextImpression(options: { arg: string }) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'Scroll Depth',\n    eventLabel: `SEO Text viewed ${options.arg}`, // (options.ratio < 0.5 ? '[half]' : '[full]'),\n    eventNonInteraction: true,\n  })\n}\n\nfunction _trackContentAssets(eventAction: string, eventNonInteraction = false) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction,\n    eventLabel: 'SEO content assets',\n    eventNonInteraction,\n  })\n}\n\nfunction requestTravelguide() {\n  _trackContentAssets('Request travelguide')\n}\n\nfunction seoContentImpression() {\n  _trackContentAssets('SEO content assets', true)\n}\n\nfunction topNaturalSightsRequest() {\n  _trackContentAssets('Request top natural sights')\n}\n\nfunction topNaturalSightsImpression() {\n  _trackContentAssets('Top natural sights', true)\n}\n\nfunction weatherInfoImpression() {\n  _trackContentAssets('Weather data', true)\n}\n\nfunction articleTeaserVisible() {\n  _trackContentAssets('Block article teaser', true)\n}\n\nfunction articleTeaserScrollClick(direction: ScrollDirectionHorizontal) {\n  _trackContentAssets(\n    `${direction === 'left' ? 'Previous' : 'Next'} block article teaser`,\n  )\n}\n\nfunction articleTeaserDetails() {\n  _trackContentAssets('Request full block article')\n}\n\nfunction labelImpression({ params }: { params: { name: string } }) {\n  if (useConfdata().pagetype !== 'search') {\n    return\n  }\n  useTracking().send({\n    event: 'Label',\n    eventCategory: 'Search Results',\n    eventAction: 'Label',\n    eventLabel: `displayed + ${params.name} + ${getVirtPath(useConfdata().destination!)}`,\n    eventNonInteraction: true,\n  })\n}\n\nfunction footerImpression() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'Scroll Depth',\n    eventLabel: 'Footer viewed',\n    eventNonInteraction: true,\n  })\n}\n\nfunction getVirtPath(destination: Destination) {\n  let virtpath = '/searchresults/'\n  if (destination.countryCode) {\n    virtpath += `${destination.countryCode}/`\n    if (destination.regionCode) {\n      virtpath += `${destination.regionCode}/`\n      if (destination.placeCode) {\n        virtpath += `${destination.placeCode}/`\n      }\n    }\n  }\n  return virtpath\n}\n\nconst OBJECT_TEASER_TYPE_NAMES: Record<ObjectTeaserType, string> = {\n  destination: '',\n  pool: 'swimming-pool',\n  sea: 'beach-sea',\n  pets: 'pet-allowed',\n  skiing: 'skiing-snowboard',\n  familyfriendly: 'family-friendly',\n}\n\nconst OBJECT_TEASER_BLOCK_NAMES: Record<ObjectTeaserBlock, string> = {\n  reviews: 'Customer reviews',\n  sustainable: 'Sustainable',\n  wlan: 'Wlan',\n  parking: 'Parking',\n  aircondition: 'Aircondition',\n  hiking: 'Hiking',\n  fireplace: 'Fireplace',\n  cheapcheap: 'Cheapcheap',\n  // TODO: Verify that the tracking names for `sea` and `pool` are correct\n  sea: 'Beach sea',\n  pool: 'Swimming pool',\n}\n\nfunction objectTeaserViewed(params: {\n  data: { type: ObjectTeaserType; block: ObjectTeaserBlock }\n}) {\n  useTracking().send({\n    event: 'object_teasers',\n    action: 'displayed',\n    label: OBJECT_TEASER_BLOCK_NAMES[params.data.block]?.toLocaleLowerCase(),\n    category: OBJECT_TEASER_TYPE_NAMES[params.data.type].length\n      ? OBJECT_TEASER_TYPE_NAMES[params.data.type]\n      : undefined,\n    component: 'object-teasers',\n    position: 'SRP',\n    language: useL10N().language,\n    _clear: true,\n  })\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: `${OBJECT_TEASER_BLOCK_NAMES[params.data.block]} viewed`,\n    eventLabel:\n      `Object teasers ${OBJECT_TEASER_TYPE_NAMES[params.data.type]}`.trim(),\n    eventNonInteraction: true,\n  })\n}\n\nfunction objectTeaserClicked({\n  type,\n  block,\n}: {\n  type: ObjectTeaserType\n  block: ObjectTeaserBlock\n}) {\n  useTracking().send({\n    event: 'object_teasers',\n    action: 'view accommodation',\n    label: OBJECT_TEASER_BLOCK_NAMES[block]?.toLocaleLowerCase(),\n    category: OBJECT_TEASER_TYPE_NAMES[type].length\n      ? OBJECT_TEASER_TYPE_NAMES[type]\n      : undefined,\n    component: 'object-teasers',\n    position: 'SRP',\n    language: useL10N().language,\n    _clear: true,\n  })\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: `${OBJECT_TEASER_BLOCK_NAMES[block]} viewed request accommodation`,\n    eventLabel: `Object teasers ${OBJECT_TEASER_TYPE_NAMES[type]}`.trim(),\n    eventNonInteraction: false,\n  })\n}\n\nfunction zeroResultsBannerDisplayed() {\n  useTracking().send({\n    event: 'extended_results',\n    action: 'displayed',\n    label: 'We have extended the search',\n    category: undefined,\n    component: 'extended-results-banner',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction results(\n  destination: Destination,\n  trip: {\n    checkin?: Date | string\n    checkout?: Date | string\n    duration?: number\n  },\n  total: number,\n) {\n  const { countryEN, regionEN, placeEN, country, region, place } = destination\n  const { checkin, checkout, duration } = trip\n\n  useTracking().send({\n    event: 'ga4_event',\n    event_name: 'search_results',\n    search_results_country: countryEN || country || null,\n    search_results_region: regionEN || region || null,\n    search_results_city: placeEN || place || null,\n    search_results_count: total || 0,\n    search_start_date: checkin ? toServerDate(checkin) : null,\n    search_end_date: checkout ? toServerDate(checkout) : null,\n    search_duration:\n      duration ||\n      (checkin && checkout ? calculateDuration(checkin, checkout) : null),\n  })\n}\n\nfunction resultCount(count: number) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results Counter',\n    eventAction: 'Count',\n    eventLabel: count,\n    eventNonInteraction: false,\n  })\n}\n\nfunction _detectSearchType(pagetype: PageType | undefined) {\n  return pagetype === 'start'\n    ? 'Quick Search'\n    : pagetype === 'search'\n      ? 'Facette Search'\n      : ''\n}\n\nfunction datesArrivalSelect(date: Date | string, flexible = false) {\n  const searchType = _detectSearchType(useConfdata().pagetype)\n\n  if (!searchType) return\n\n  useTracking().send({\n    event: 'quick search',\n    eventCategory: searchType,\n    eventAction: 'Date',\n    eventLabel:\n      (flexible ? 'Calendar flexible ' : '') + toDateFormat(date, 'yyyy/MM'),\n    eventNonInteraction: false,\n  })\n}\n\nfunction datesDurationSelect(number: number, flexible = false) {\n  const searchType = _detectSearchType(useConfdata().pagetype)\n\n  if (!searchType) return\n\n  useTracking().send({\n    event: 'quick search',\n    eventCategory: searchType,\n    eventAction: 'duration',\n    eventLabel: flexible ? `Calendar flexible ${number}` : number,\n    eventNonInteraction: false,\n  })\n}\n\nfunction datesModeSwitch(flexible: boolean) {\n  const searchType = _detectSearchType(useConfdata().pagetype)\n\n  if (!searchType) return\n\n  useTracking().send({\n    event: 'quick search',\n    eventCategory: searchType,\n    eventAction: flexible ? 'Open calendar flexible' : 'Open calendar',\n    eventLabel: flexible ? 'Calendar flexible' : 'Calendar datepicker',\n    eventNonInteraction: false,\n  })\n}\n\nfunction datesDurationSelectFlex(duration: number) {\n  const searchType = _detectSearchType(useConfdata().pagetype)\n\n  if (!searchType) return\n\n  useTracking().send({\n    event: 'quick search',\n    eventCategory: searchType,\n    eventAction: `Select time-frame ${duration === 7 ? 'one week' : duration === 14 ? 'two week' : 'custom'}`,\n    eventLabel: `Calendar flexible ${duration === 7 ? 'one week' : duration === 14 ? 'two week' : 'custom'}`,\n    eventNonInteraction: false,\n  })\n}\n\nfunction datesClear(flexible: boolean) {\n  const searchType = _detectSearchType(useConfdata().pagetype)\n\n  if (!searchType) return\n\n  useTracking().send({\n    event: 'quick search',\n    eventCategory: searchType,\n    eventAction: 'Clear dates',\n    eventLabel: flexible\n      ? 'Calendar flexible clear dates'\n      : 'Calendar datepicker clear dates',\n    eventNonInteraction: false,\n  })\n}\n\nfunction datesApply(flexible: boolean) {\n  const searchType = _detectSearchType(useConfdata().pagetype)\n\n  if (!searchType) return\n\n  useTracking().send({\n    event: 'quick search',\n    eventCategory: searchType,\n    eventAction: 'Apply choice',\n    eventLabel: flexible\n      ? 'Calendar flexible apply choice'\n      : 'Calendar datepicker apply choice',\n    eventNonInteraction: false,\n  })\n}\n","/*\n * Tracking-Spezifikation:\n * https://wiki.hotelplan.com/display/TSICHDDWEBCC/05+-+Object+Detail\n */\n\nexport default {\n  // navigateToSection,\n  galleryNavigation, // OK\n  sidebarArrivalDate, // OK\n  sidebarDateClick, // OK\n  calendarDurationOpened, // OK\n  calendarDurationSelect, // OK\n  datepickerInteraction, // noch nicht alle Events OK\n  // backButtonClick, wird derzeit nicht verwendet\n  ratingHeartsClick, // OK, noch unklar, auf welchem Element das Tracking liegen soll\n  addToWishlist, // OK\n  deleteFromWishlist, // OK\n  openRecommendationLayer, // OK\n  recommendByMail, // OK\n  paxSelected, // OK\n  contactClick, // OK\n  generalRequestClick, // OK\n  offerRequestClick, // OK\n  labelImpression, // OK\n  labelClick, // OK\n  attributeImpression, // OK\n  descriptionImpression, // OK\n  showDescriptionText,\n  mapImpression, // OK\n  calendarImpression, // OK\n  costOverviewImpression, // OK\n  reviewsImpression, // OK\n  // moreReviewsImpression, wird derzeit nicht verwendet\n  footerImpression, // OK\n  tooltipAdditionalCosts, // OK\n  mouseoverCostoverviewInfo, // OK\n  houseAccommodationsClick, // OK\n\n  // 2019\n  generalRequestSubmitSuccess,\n  generalRequestSubmitError,\n  monthlyPricesSelect,\n  monthlyPricesNext,\n  monthlyPricesPrevious,\n\n  // IHGWEBCC-129\n  allImages,\n  imageClick,\n  galleryImageClick,\n  galleryAddFavorite,\n  galleryRemoveFavorite,\n  galleryOpenRecommend,\n  galleryClose,\n  lightboxNextImage,\n  lightboxPreviousImage,\n  lightboxAddFavorite,\n  lightboxRemoveFavorite,\n  lightboxOpenRecommend,\n  lightboxClose,\n  closeLayers,\n\n  // IHGWEBCC-257\n  cancelConditions,\n\n  // IHGWEBCC-407\n  externalUserSurvey,\n\n  // IHGWEBCC-511\n  linkedObjectsTeaserViewed,\n  linkedObjectsTeaserClicked,\n}\n\n/*\n *   1 - 9 On Page Navigation\n */\n/*\nfunction navigateToSection(section) {\n  // Mapping laut Tracking-Spezifikation\n  const labels = {\n    description: 'Object Description',\n    map: 'Map',\n    datepicker: 'Calender Bottom',\n    costoverview: 'Cost-Overview',\n    reviews: 'Reviews',\n  }\n\n  return {\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'On Page Navigation',\n    eventLabel: labels[section],\n    eventNonInteraction: false,\n  }\n}\n*/\n/*   Picture Gallery\n *   10: main navigation\n *   11: thumbnail clickc\n *   12: thumbnail navigationslideChanged: (s) => {},\n */\n\nfunction linkedObjectsTeaserViewed() {\n  useTracking().send({\n    event: 'inter_linking_teaser',\n    action: 'displayed',\n    label: 'Inter-Linking Teaser',\n    category: undefined,\n    component: 'pdp-internal-linking',\n    position: 'PDP',\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction linkedObjectsTeaserClicked() {\n  useTracking().send({\n    event: 'inter_linking_teaser',\n    action: 'view accommodation',\n    label: 'Inter-Linking Teaser',\n    category: undefined,\n    component: 'pdp-internal-linking',\n    position: 'PDP',\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction galleryNavigation() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Picture Galery',\n    eventLabel: 'Arrow',\n    eventNonInteraction: false,\n  })\n}\n\n/*\n *   Sidebar: 13 / 14 / 15?\n */\nfunction sidebarArrivalDate(date?: Date) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Date',\n    eventLabel: date\n      ? `${date.getFullYear()}/${`00${date.getMonth()}${1}`.slice(-2)}`\n      : 'no date selected yet',\n    eventNonInteraction: false,\n  })\n}\n\nfunction sidebarDateClick() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Calendar Top',\n    eventLabel: 'Date clicked',\n    eventNonInteraction: false,\n  })\n}\n\n/*\n *   Datepicker:  16, 17, 18\n */\nfunction calendarDurationOpened() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Calendar Bottom',\n    eventLabel: 'Duration Opened',\n    eventNonInteraction: false,\n  })\n}\n\nfunction calendarDurationSelect(duration: number) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: duration ? 'Duration of stay' : 'Calendar Top',\n    eventLabel: duration || 'Duration Chosen',\n    eventNonInteraction: false,\n  })\n}\n\n/* wishlist:\n * - add: 23\n * - delete: 24\n */\nfunction addToWishlist(accommodationCode: string) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Add to Wishlist',\n    eventLabel: accommodationCode,\n    eventNonInteraction: false,\n  })\n}\n\nfunction galleryAddFavorite() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Add to Wishlist',\n    eventLabel: 'Picture page layer',\n    eventNonInteraction: false,\n  })\n}\n\nfunction galleryRemoveFavorite() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Delete from Wishlist',\n    eventLabel: 'Picture page layer',\n    eventNonInteraction: false,\n  })\n}\n\n/*\n *   Datepicker:  47, 48, 49 50\n */\nfunction datepickerInteraction(\n  eventLabel: 'dateSelected' | 'prevMonth' | 'nextMonth' | 'monthSelected',\n) {\n  const labels = {\n    dateSelected: 'Date Chosen',\n    prevMonth: 'Left scroll',\n    nextMonth: 'Right scroll',\n    monthSelected: 'Month selector used',\n  }\n\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Calendar Bottom',\n    eventLabel: labels[eventLabel],\n    eventNonInteraction: false,\n  })\n}\n\n/*\n *   Back Button (vor Bread Crumb):  20\n */\n// function backButtonClick() {\n//   return {\n//     event: 'event',\n//     eventCategory: 'Object Details',\n//     eventAction: 'BackButton',\n//     eventLabel: 'not set',\n//     eventNonInteraction: false,\n//   }\n// }\n\n/* Ratings: 21 */\nfunction ratingHeartsClick(rating: number) {\n  if (rating > 0) {\n    useTracking().send({\n      event: 'event',\n      eventCategory: 'Object Details',\n      eventAction: 'Ratings Top',\n      eventLabel: 'not set',\n      eventNonInteraction: false,\n    })\n  }\n}\n\nfunction deleteFromWishlist(accommodationCode: string) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Delete from Wishlist',\n    eventLabel: accommodationCode,\n    eventNonInteraction: false,\n  })\n}\n\n/* SocialShare:\n * - open Layer: 25\n * - mail click: 26\n */\nfunction openRecommendationLayer() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Recommend Object',\n    eventLabel: 'Layer opened',\n    eventNonInteraction: false,\n  })\n}\n\nfunction recommendByMail() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Recommend Object',\n    eventLabel: 'mail',\n    eventNonInteraction: false,\n  })\n}\n\n/* PAX: 29 */\nfunction paxSelected(n: number) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'PAX',\n    eventLabel: n,\n    eventNonInteraction: false,\n  })\n}\n\n/* Contact:\n * - phone click: 30\n * - mail click: 31\n *  - link to general request: 32\n *  - link to offer request: 34\n */\nfunction contactClick(contactType: 'Email' | 'Phone') {\n  // Mapping laut Tracking-Spezifikation\n  const contactTypes = {\n    Email: 'Mail to info@',\n    Phone: 'Phone Booking Module',\n  }\n\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Outbound',\n    eventLabel: contactTypes[contactType],\n    eventNonInteraction: false,\n  })\n}\n\nfunction generalRequestClick() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'General Request',\n    eventLabel: 'Layer opened',\n    eventNonInteraction: false,\n  })\n}\n\nfunction offerRequestClick() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Holiday Offer',\n    eventLabel: 'Layer opened',\n    eventNonInteraction: false,\n  })\n}\n\n/*\n * Impressions:\n * - labels: 36\n * - attributes: 38\n * - description: 39\n * - map: 40\n * - datepicker: 41\n * - costoverview: 42\n *  - reviews: 44\n *  - footer: 46\n */\n\nfunction labelImpression(params: {\n  params: string\n  entry: { intersectionRatio: number }\n}) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Label',\n    eventLabel: `displayed ${params.params} at ScrollDepth ${params.entry.intersectionRatio}`,\n    eventNonInteraction: true,\n  })\n}\n\nfunction labelClick(label: string) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Label',\n    eventLabel: `clicked ${label}`,\n    eventNonInteraction: true,\n  })\n}\n\nfunction attributeImpression(entry: { intersectionRatio: number }) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: `Scroll Depth ${entry.intersectionRatio}`,\n    eventLabel: 'Attributes Viewed',\n    eventNonInteraction: true,\n  })\n}\n\nfunction descriptionImpression(entry: { intersectionRatio: number }) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: `Scroll Depth ${entry.intersectionRatio}`,\n    eventLabel: 'Description viewed',\n    eventNonInteraction: true,\n  })\n}\n\nfunction mapImpression() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Scroll Depth',\n    eventLabel: 'Map viewed',\n    eventNonInteraction: true,\n  })\n}\n\nfunction calendarImpression(entry: { intersectionRatio: number }) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: `Scroll Depth ${entry.intersectionRatio}`,\n    eventLabel: 'Calendar Bottom viewed',\n    eventNonInteraction: true,\n  })\n}\n\nfunction costOverviewImpression(entry: { intersectionRatio: number }) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: `Scroll Depth ${entry.intersectionRatio}`,\n    eventLabel: 'Cost-Overview viewed',\n    eventNonInteraction: true,\n  })\n}\n\nfunction reviewsImpression(entry: { intersectionRatio: number }) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: `Scroll Depth ${entry.intersectionRatio}`,\n    eventLabel: 'Ratings viewed',\n    eventNonInteraction: true,\n  })\n}\n// function moreReviewsImpression() {\n//   // aktuell nicht verwendet\n//   useTracking().send( {\n//     event: 'event',\n//     eventCategory: 'Object Details',\n//     eventAction: 'Scroll Depth',\n//     eventLabel: 'More Ratings viewed',\n//     eventNonInteraction: true,\n//   })\n// }\n\nfunction footerImpression(entry: { intersectionRatio: number }) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: `Scroll Depth ${entry.intersectionRatio}`,\n    eventLabel: 'Footer viewed',\n    eventNonInteraction: true,\n  })\n}\n\n// Costoverview: 51 - 56 unklar\n\n// 51: mouseover sidebar nebenkosten tooltip\nfunction tooltipAdditionalCosts() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Additional Cost',\n    eventLabel: 'Layer Booking Module',\n    eventNonInteraction: false,\n  })\n}\n\n// 54 - bzw. 56?\nfunction mouseoverCostoverviewInfo(code: string) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Additional Cost',\n    eventLabel: `Layer ${code} viewed`,\n    eventNonInteraction: false,\n  })\n}\n\n/* 59: Alle Wohungen eines Hauses anzeigen */\nfunction houseAccommodationsClick(accommodationCode: string) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Objects in House',\n    eventLabel: `Clicked ${accommodationCode}`,\n    eventNonInteraction: false,\n  })\n}\n\n/*\n * Neue Spezifikation aus 2019:\n * https://wiki.hotelplan.com/display/TSICHDDWEBCC/Refactoring+Tracking+with+Vue+-+2019\n * Status unklar\n */\n\n// Submitting a general request, successful or not\nfunction generalRequestSubmitSuccess() {\n  useTracking().send({\n    event: 'General Request',\n    eventCategory: 'Object Details',\n    eventAction: 'General Request',\n    eventLabel: 'Form sent',\n    eventNonInteraction: false,\n  })\n}\n\n// Successfully submitting a general request\nfunction generalRequestSubmitError() {\n  useTracking().send({\n    event: 'General Request',\n    eventCategory: 'Object Details',\n    eventAction: 'General Request',\n    eventLabel: 'Form sent error',\n    eventNonInteraction: false,\n  })\n}\n\nfunction monthlyPricesSelect(month: { formatted: string }) {\n  const monthName = new Date(month.formatted).toLocaleString('en-us', {\n    month: 'long',\n  })\n  useTracking().send({\n    event: 'Pricetable',\n    eventCategory: 'Object Details',\n    eventAction: 'Pricetable',\n    eventLabel: `Month selected ${monthName}`,\n    eventNonInteraction: false,\n  })\n}\n\nfunction monthlyPricesNext() {\n  useTracking().send({\n    event: 'Pricetable',\n    eventCategory: 'Object Details',\n    eventAction: 'Pricetable',\n    eventLabel: 'Next month',\n    eventNonInteraction: false,\n  })\n}\n\nfunction monthlyPricesPrevious() {\n  useTracking().send({\n    event: 'Pricetable',\n    eventCategory: 'Object Details',\n    eventAction: 'Pricetable',\n    eventLabel: 'Previous month',\n    eventNonInteraction: false,\n  })\n}\n\nfunction allImages() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Show picture page layer via button',\n    eventLabel: 'Picture page layer',\n    eventNonInteraction: false,\n  })\n}\n\nfunction imageClick() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Show picture page layer',\n    eventLabel: 'Picture page layer',\n    eventNonInteraction: false,\n  })\n}\n\nfunction galleryImageClick() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Show Page layer slider',\n    eventLabel: 'Picture page layer',\n    eventNonInteraction: false,\n  })\n}\n\nfunction galleryOpenRecommend() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Open recommend object',\n    eventLabel: 'Picture page layer',\n    eventNonInteraction: false,\n  })\n}\n\nfunction galleryClose() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Close picture page layer',\n    eventLabel: 'Picture page layer',\n    eventNonInteraction: false,\n  })\n}\n\nfunction lightboxNextImage() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Next image',\n    eventLabel: 'Page layer slider',\n    eventNonInteraction: false,\n  })\n}\n\nfunction lightboxPreviousImage() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Previous image',\n    eventLabel: 'Page layer slider',\n    eventNonInteraction: false,\n  })\n}\n\nfunction lightboxAddFavorite() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Add to Wishlist',\n    eventLabel: 'Page layer slider',\n    eventNonInteraction: false,\n  })\n}\n\nfunction lightboxRemoveFavorite() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Delete from Wishlist',\n    eventLabel: 'Page layer slider',\n    eventNonInteraction: false,\n  })\n}\n\nfunction lightboxOpenRecommend() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Open recommend object',\n    eventLabel: 'Page layer slider',\n    eventNonInteraction: false,\n  })\n}\n\nfunction lightboxClose() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Close page layer slider',\n    eventLabel: 'Page layer slider',\n    eventNonInteraction: false,\n  })\n}\n\nfunction closeLayers() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Close layer',\n    eventLabel: 'Page layer',\n    eventNonInteraction: false,\n  })\n}\n\nfunction cancelConditions() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Cancellation policy viewed',\n    eventLabel: 'Object details section',\n    eventNonInteraction: true,\n  })\n}\n\nfunction showDescriptionText() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: 'Show full text',\n    eventLabel: 'Description viewed',\n    eventNonInteraction: false,\n  })\n}\n\nfunction externalUserSurvey(status: Exclude<UserSurveyStatus, 'scheduled'>) {\n  const { action, nonInteraction } = {\n    visible: { action: 'Show modal', nonInteraction: true },\n    opened: { action: 'Open external survey' },\n    postponed: { action: 'Close modal temporarily' },\n    refused: { action: 'Close modal permanently' },\n  }[status]\n\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Object Details',\n    eventAction: action,\n    eventLabel: 'Modal external user survey',\n    eventNonInteraction: nonInteraction ?? false,\n  })\n}\n","/*\n * Tracking-Spezifikation:\n * https://wiki.hotelplan.com/pages/viewpage.action?pageId=76812556\n * 06 - Teaser promotionView / promotionClick\n *\n */\n\nimport { capitalize } from 'vue'\n\nexport default {\n  heroSliderElementImpression,\n  facettedHeaderElementImpression,\n  facettedHeaderElementClick,\n  topCountryTeaserElementImpression,\n  topCountryTeaserElementClick,\n  topRegionTeaserElementImpression,\n  topRegionTeaserElementClick,\n  holidayIdeasElementImpression,\n  holidayIdeasElementClick,\n  landingPageElementImpression,\n  landingPageElementClick,\n  landingTeaserElementImpression,\n  landingTeaserElementClick,\n}\n\nfunction heroSliderElementImpression({\n  id,\n  creative,\n  position,\n}: {\n  id: string\n  creative: string\n  position: string\n}) {\n  useTracking().send({\n    event: 'eec.promotionView',\n    ecommerce: {\n      promoView: {\n        promotions: [\n          {\n            id,\n            name: 'Visual Slider Home',\n            creative,\n            position,\n          },\n        ],\n      },\n    },\n  })\n  useTracking().handlers?.ecommerce.viewPromotion({\n    creative_name: creative,\n    creative_slot: position,\n    promotion_id: id,\n    promotion_name: 'Visual Slider Home',\n  })\n}\n\nfunction facettedHeaderElementImpression({\n  params,\n}: {\n  params: { id: string; creative: string; position: string }\n}) {\n  useTracking().send({\n    event: 'eec.promotionView',\n    ecommerce: {\n      promoView: {\n        promotions: [\n          {\n            id: params.id,\n            name: 'Facetted Header',\n            creative: params.creative,\n            position: params.position,\n          },\n        ],\n      },\n    },\n  })\n  useTracking().handlers?.ecommerce.viewPromotion({\n    creative_name: params.creative,\n    creative_slot: params.position,\n    promotion_id: params.id,\n    promotion_name: 'Facetted Header',\n  })\n}\n\nfunction facettedHeaderElementClick({\n  id,\n  creative,\n  position,\n}: {\n  id: string\n  creative: string\n  position: string\n}) {\n  useTracking().send({\n    event: 'eec.promotionClick',\n    ecommerce: {\n      promoClick: {\n        promotions: [\n          {\n            id,\n            name: 'Facetted Header',\n            creative,\n            position,\n          },\n        ],\n      },\n    },\n  })\n  useTracking().handlers?.ecommerce.selectPromotion({\n    creative_name: creative,\n    creative_slot: position,\n    promotion_id: id,\n    promotion_name: 'Facetted Header',\n  })\n}\n\nfunction topCountryTeaserElementImpression({\n  params,\n}: {\n  params: { id: string; creative: string; position: string }\n}) {\n  useTracking().send({\n    event: 'eec.promotionView',\n    ecommerce: {\n      promoView: {\n        promotions: [\n          {\n            id: params.id,\n            name: 'Top Countries',\n            creative: params.creative,\n            position: params.position,\n          },\n        ],\n      },\n    },\n  })\n  useTracking().handlers?.ecommerce.viewPromotion({\n    creative_name: params.creative,\n    creative_slot: params.position,\n    promotion_id: params.id,\n    promotion_name: 'Top Countries',\n  })\n}\n\nfunction topCountryTeaserElementClick({\n  id,\n  creative,\n  position,\n}: {\n  id: string\n  creative: string\n  position: string\n}) {\n  useTracking().send({\n    event: 'eec.promotionClick',\n    ecommerce: {\n      promoClick: {\n        promotions: [\n          {\n            id,\n            name: 'Top Countries',\n            creative,\n            position,\n          },\n        ],\n      },\n    },\n  })\n  useTracking().handlers?.ecommerce.selectPromotion({\n    creative_name: creative,\n    creative_slot: position,\n    promotion_id: id,\n    promotion_name: 'Top Countries',\n  })\n}\n\nfunction topRegionTeaserElementImpression({\n  params,\n}: {\n  params: { id: string; creative: string; position: string }\n}) {\n  useTracking().send({\n    event: 'eec.promotionView',\n    ecommerce: {\n      promoView: {\n        promotions: [\n          {\n            id: params.id,\n            name: 'Top Regions',\n            creative: params.creative,\n            position: params.position,\n          },\n        ],\n      },\n    },\n  })\n  useTracking().handlers?.ecommerce.viewPromotion({\n    creative_name: params.creative,\n    creative_slot: params.position,\n    promotion_id: params.id,\n    promotion_name: 'Top Regions',\n  })\n}\n\nfunction topRegionTeaserElementClick({\n  id,\n  creative,\n  position,\n}: {\n  id: string\n  creative: string\n  position: string\n}) {\n  useTracking().send({\n    event: 'eec.promotionClick',\n    ecommerce: {\n      promoClick: {\n        promotions: [\n          {\n            id,\n            name: 'Top Regions',\n            creative,\n            position,\n          },\n        ],\n      },\n    },\n  })\n  useTracking().handlers?.ecommerce.selectPromotion({\n    creative_name: creative,\n    creative_slot: position,\n    promotion_id: id,\n    promotion_name: 'Top Regions',\n  })\n}\n\nfunction holidayIdeasElementImpression({\n  params,\n}: {\n  params: { id: string; creative: string; position: string }\n}) {\n  useTracking().send({\n    event: 'eec.promotionView',\n    ecommerce: {\n      promoView: {\n        promotions: [\n          {\n            id: params.id,\n            name: 'Holiday Ideas',\n            creative: params.creative,\n            position: params.position,\n          },\n        ],\n      },\n    },\n  })\n  useTracking().handlers?.ecommerce.viewPromotion({\n    creative_name: params.creative,\n    creative_slot: params.position,\n    promotion_id: params.id,\n    promotion_name: 'Holiday Ideas',\n  })\n}\n\nfunction holidayIdeasElementClick({\n  id,\n  creative,\n  position,\n}: {\n  id: string\n  creative: string\n  position: string\n}) {\n  useTracking().send({\n    event: 'eec.promotionClick',\n    ecommerce: {\n      promoClick: {\n        promotions: [\n          {\n            id,\n            name: 'Holiday Ideas',\n            creative,\n            position,\n          },\n        ],\n      },\n    },\n  })\n  useTracking().handlers?.ecommerce.selectPromotion({\n    creative_name: creative,\n    creative_slot: position,\n    promotion_id: id,\n    promotion_name: 'Holiday Ideas',\n  })\n}\n\nfunction landingPageElementImpression(params: string[]) {\n  useTracking().send({\n    event: 'eec.promotionView',\n    ecommerce: {\n      promoView: {\n        promotions: [\n          {\n            id: `Landing Page [${params[2]}] Teaser ${params[0]}`,\n            name: `Landing Page [${params[2]}]`,\n            creative: params[3],\n            position: `${params[0]}/${params[1]}`,\n          },\n        ],\n      },\n    },\n  })\n  useTracking().handlers?.ecommerce.viewPromotion({\n    creative_name: params[3],\n    creative_slot: `${params[0]}/${params[1]}`,\n    promotion_id: `Landing Page [${params[2]}] Teaser ${params[0]}`,\n    promotion_name: `Landing Page [${params[2]}]`,\n  })\n}\n\nfunction landingPageElementClick({\n  sequenceNumber,\n  numberedIndex,\n  virtPathOrigin,\n  virtPathTarget,\n}: {\n  [key: string]: string\n}) {\n  useTracking().send({\n    event: 'eec.promotionClick',\n    ecommerce: {\n      promoView: {\n        promotions: [\n          {\n            id: `Landing Page [${virtPathOrigin}] Teaser ${sequenceNumber}`,\n            name: `Landing Page [${virtPathOrigin}]`,\n            creative: virtPathTarget,\n            position: `${sequenceNumber}/${numberedIndex}`,\n          },\n        ],\n      },\n    },\n  })\n  useTracking().handlers?.ecommerce.selectPromotion({\n    creative_name: virtPathTarget,\n    creative_slot: `${sequenceNumber}/${numberedIndex}`,\n    promotion_id: `Landing Page [${virtPathOrigin}] Teaser ${sequenceNumber}`,\n    promotion_name: `Landing Page [${virtPathOrigin}]`,\n  })\n}\n\ntype LandingTeaserItem = Partial<LandingTeaser> & { index: number }\n\nfunction landingTeaserElementEvent(\n  action: string,\n  position: LandingLinkAlignment,\n  teasers: LandingTeaserItem[],\n) {\n  const type = position || 'none'\n\n  useTracking().send({\n    event: `landing_teaser_${type}`,\n    action,\n    label: `Landing Teaser ${capitalize(type)}`,\n    category: undefined,\n    component: `landing-teaser-${type}`,\n    position: undefined,\n    language: useL10N().language,\n    topics: teasers.map(({ index, link }) => ({\n      category_name: link?.text,\n      category_slot: index,\n    })),\n    _clear: true,\n  })\n}\n\nfunction landingTeaserElementImpression(\n  position: LandingLinkAlignment,\n  teasers: LandingTeaserItem[],\n) {\n  landingTeaserElementEvent('displayed', position, teasers)\n}\n\nfunction landingTeaserElementClick(\n  position: LandingLinkAlignment,\n  teaser: LandingTeaserItem,\n) {\n  landingTeaserElementEvent('view', position, [teaser])\n}\n","/*\n * Spezifikation: https://wiki.hotelplan.com/display/TSICHDDWEBCC/07+-+Header\n */\n\nexport default {\n  logoClick,\n  sitenavigationClick,\n  languageSwitch,\n  currencySwitch,\n  uspClosed,\n  phoneClick,\n  historyOpened,\n  historyItemClick,\n  headerItemClick,\n  enterGuestWorld,\n}\n\nfunction enterGuestWorld() {\n  useTracking().send({\n    event: 'enter_guestworld',\n    action: 'navigate',\n    label: 'Sign in',\n    category: undefined,\n    component: 'header-link',\n    position: 'header',\n    language: useL10N().language.toLowerCase(),\n    _clear: true,\n  })\n}\n\n/* helper to get pagetype from virtPath */\nfunction pageType(page: string) {\n  return (\n    {\n      start: 'homesite',\n    }[page] || page\n  )\n}\n\n/* 1: Logo */\nfunction logoClick() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Header',\n    eventAction: 'Logo',\n    eventLabel: pageType(useConfdata().pagetype || ''),\n    eventNonInteraction: false,\n  })\n}\n\n/* 2: Owner, 3: Partner, 5: lso-pages, 8: newsletter */\nfunction sitenavigationClick(\n  id: 'partner' | 'lso' | 'topcountries' | 'inspirations' | 'homeowner',\n) {\n  const action = {\n    partner: [\n      'Partner',\n      `${useConfdata().domain.split('.').pop()}+${useL10N().language.toLowerCase()}`,\n    ],\n    lso: ['lso-pages', 'not set'],\n    topcountries: ['Request popular destinations', 'MainNavigation'],\n    inspirations: ['Request travel ideas', 'MainNavigation'],\n    homeowner: ['Request homeowner', 'MainNavigation'],\n  }[id] || ['newsletter', 'not set']\n\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'SiteNavigation',\n    eventAction: action[0],\n    eventLabel: action[1],\n    eventNonInteraction: false,\n  })\n}\n\n// 4: language\nfunction languageSwitch(lang: string) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Header',\n    eventAction: 'Language',\n    eventLabel: lang.toLowerCase(),\n    eventNonInteraction: false,\n  })\n}\n\n/* 6: Faq  - not required */\n\n/* 7: currency */\nfunction currencySwitch(currencyCode: string) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Header',\n    eventAction: 'Currency',\n    eventLabel: currencyCode,\n    eventNonInteraction: false,\n  })\n}\n\n/* 9 usp - gibt es nicht mehr */\nfunction uspClosed({\n  uspIndex,\n  millisecondsDisplayed,\n}: {\n  uspIndex: string\n  millisecondsDisplayed: number\n}) {\n  const dispayTimeRoundedToHalfSeconds =\n    Math.round((millisecondsDisplayed / 1000) * 2) / 2\n  const pagetype = pageType(useConfdata().pagetype || '')\n\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Header',\n    eventAction: 'USP Layer',\n    eventLabel: `${uspIndex} + ${dispayTimeRoundedToHalfSeconds} + ${pagetype}`,\n    eventNonInteraction: true,\n  })\n}\n\n/* 10 : contact phone number */\nfunction phoneClick() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Header',\n    eventAction: 'Outbound',\n    eventLabel: `Phone Header + ${pageType(useConfdata().pagetype || '')}`,\n    eventNonInteraction: false,\n  })\n}\n\n/* 11 : last visited menu opened */\nfunction historyOpened() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Header',\n    eventAction: 'Recent Object',\n    eventLabel: `opened + ${pageType(useConfdata().pagetype || '')}`,\n    eventNonInteraction: false,\n  })\n}\n\n/* 12: click to accommodation in last visited menu */\nfunction historyItemClick(accommodationID: string) {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Header',\n    eventAction: 'Recent Object',\n    eventLabel: `clicked + ${accommodationID}`,\n    eventNonInteraction: false,\n  })\n}\n\n/* 13: Header elements homepage link, favourites, contact us */\n\nfunction headerItemClick(action: 'homepage' | 'favourites' | 'contactus') {\n  const items = {\n    homepage: {\n      eventAction: 'Request homepage',\n      eventLabel: 'Back to homepage',\n    },\n    favourites: {\n      eventAction: 'Request favourites',\n      eventLabel: 'My favourites',\n    },\n    contactus: {\n      eventAction: 'Request contact us',\n      eventLabel: 'Contact us',\n    },\n  }\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Header',\n    eventAction: items[action].eventAction,\n    eventLabel: items[action].eventLabel,\n    eventNonInteraction: false,\n  })\n}\n","/*\n * Tracking-Spezifikation:\n * https://wiki.hotelplan.com/display/TSICHDDWEBCC/08+-+Facette+Search\n */\n\nexport default {\n  filter,\n}\n\nfunction filter(delta: Params, filters: Params, facets?: SearchApiFacets) {\n  const labels: Record<string, string> = {}\n  let filter\n  for (const f in delta) {\n    if (delta[f]) {\n      filter = f\n      break\n    }\n  }\n  if (!filter) {\n    filter = Object.entries(delta)[0]?.[0] ?? ''\n  }\n  Object.keys(filters).forEach((filter) => {\n    if (category(filter) === 'Attributes' || !filters[filter]) {\n      return\n    }\n    labels[generateAction(filter)] =\n      generateLabelValue(filter, filters)?.toString() ?? ''\n  })\n\n  const label = generateLabelValue(filter, filters)\n  const count = generateCount(filter, filters, facets)\n  const action = generateAction(filter)\n  const attributes = Object.keys(filters).filter(\n    (f) => category(f) === 'Attributes' && filters[f],\n  )\n  if (attributes) {\n    labels.attributes = attributes\n      .map((a) => filterMapping(a))\n      .sort()\n      .join('|')\n  }\n\n  const event = {\n    event: 'facette search',\n    eventCategory: 'Facette Search',\n    eventAction: action,\n    eventLabel: label,\n    eventNonInteraction: false,\n    resultCount: count,\n    Persons: `from ${filters.pax || 1}`,\n    duration: `${filters.duration || 7} ${filters.duration === 1 ? 'night' : 'nights'}`,\n    ...labels,\n  }\n\n  useTracking().send(event)\n}\n\nfunction generateCount(\n  filter: string,\n  filters: Params,\n  facets?: SearchApiFacets,\n) {\n  let count\n  const cat = category(filter)\n  const value = filters[filter]\n  switch (cat) {\n    case 'Attributes':\n    case 'Swimming Pool':\n    case 'Type of holiday home':\n      count = facets?.attributes?.[filter] ?? undefined\n      break\n    case 'Distance':\n    case 'Persons':\n    case 'stars':\n    case 'bathrooms':\n    case 'bedrooms':\n      count =\n        (\n          facets?.[filter as keyof SearchApiFacets] as\n            | Record<string, number>\n            | undefined\n        )?.[value?.toString() ?? ''] ?? undefined\n      break\n    default:\n      count = facets?.attributes?.[filter] ?? undefined\n      break\n  }\n  return count\n}\n\nfunction generateAction(filter: string) {\n  const cat = category(filter)\n  let action = cat || filter\n  if (cat === 'Distance') {\n    action = `Distance to ${filter}`\n  }\n  return action\n}\n\nfunction generateLabelValue(filter: string, filters: Params) {\n  let label\n  const cat = category(filter)\n  const value = filters[filter]\n  const labelname = filterMapping(filter) || filter\n  if (cat === 'Attributes') {\n    label = value ? `${labelname} (checked)` : `${labelname} (unchecked)`\n  } else if (cat === 'Distance') {\n    label = `up to ${value} Dis. ${filter}`\n  } else {\n    label =\n      filters[filter] === true\n        ? labelname\n        : filters[filter] === false\n          ? '(not set)'\n          : filters[filter]\n  }\n  return label\n}\n\nfunction filterMapping(filter: string) {\n  return {\n    pets: 'Pets allowed',\n    house: 'Holiday House',\n    apartment: 'Apartment',\n    detached: 'Detached house',\n    villa: 'Villa',\n    chalet: 'Chalet',\n    farmhouse: 'Farmhouse',\n    casa: 'Discover CASA',\n    swiss_peak: 'SWISSPEAK Resorts',\n    workation: 'Workation',\n    sustainable: 'Sustainable',\n    pool: 'Swimming Pool',\n    pool_children: 'Children Pool',\n    pool_indoor: 'Indoor Pool',\n    pool_private: 'Private Pool',\n    wlan: 'WiFi',\n    aircondition: 'Air-conditioning',\n    parking: 'Parking',\n    garage: 'Garage',\n    'balcony-or-terrace': 'Balcony/Terrace/Patio',\n    dishwasher: 'Dishwasher',\n    washingmachine: 'Washing machine',\n    tv: 'TV',\n    sea_or_lake_view: 'Sea or lake view',\n    bbq: 'BBQ',\n    boat: 'Boat',\n    cots: 'Baby cot',\n    hottub: 'Hottub',\n    fireplace: 'Fireplace',\n    sauna: 'Sauna',\n    wheelchair: 'Suitable for wheelchairs',\n    last_minute: 'Last Minute',\n    special_offer: 'Any special offer',\n    'discount-20': '≥ 20% discount',\n    cheapcheap: 'Simple and cheap',\n    early_booker: 'Early Booking discount',\n    familyfriendly: 'Family friendly',\n    holiday_resort: 'Holiday village',\n    residence: 'Residence',\n    citytrips: 'City trips',\n    utoring: 'Utoring Residences',\n    skiing: 'Skiing / Snowboarding',\n    hiking: 'Hiking',\n    golfing: 'Golf',\n    cycling: 'Cycling',\n    wellness: 'Wellness',\n    tennis: 'Tennis',\n    surfing: 'Surfing',\n    sailing: 'Sailing',\n    mountainbiking: 'Mountain-Biking',\n    riding: 'Riding',\n    crosscountryskiing: 'Cross country skiing',\n    golf: 'Golf',\n    fishing: 'Fishing',\n    fishing_certified: 'Fishing Certified',\n  }[filter]\n}\n\nfunction category(filter: string) {\n  return {\n    house: 'Type of holiday home',\n    apartment: 'Type of holiday home',\n    detached: 'Type of holiday home',\n    villa: 'Type of holiday home',\n    chalet: 'Type of holiday home',\n    farmhouse: 'Type of holiday home',\n    studio: 'Type of holiday home',\n\n    pool: 'Swimming Pool',\n    pool_children: 'Swimming Pool',\n    pool_indoor: 'Swimming Pool',\n    pool_private: 'Swimming Pool',\n\n    sea: 'Distance',\n    lake: 'Distance',\n    ski: 'Distance',\n    center: 'Distance',\n\n    wlan: 'Attributes',\n    aircondition: 'Attributes',\n    parking: 'Attributes',\n    garage: 'Attributes',\n    'balcony-or-terrace': 'Attributes',\n    dishwasher: 'Attributes',\n    washingmachine: 'Attributes',\n    tv: 'Attributes',\n    sea_or_lake_view: 'Attributes',\n    bbq: 'Attributes',\n    boat: 'Attributes',\n    cots: 'Attributes',\n    hottub: 'Attributes',\n    fireplace: 'Attributes',\n    sauna: 'Attributes',\n    wheelchair: 'Attributes',\n    pets: 'Attributes',\n    workation: 'Attributes',\n    sustainable: 'Attributes',\n\n    pax: 'Persons',\n\n    stars: 'stars',\n    bathrooms: 'bathrooms',\n    bedrooms: 'bedrooms',\n\n    checkin: 'Dates',\n\n    // 'last_minute', 'special_offer', 'discount-20', 'cheapcheap', 'early_booker'\n\n    // 'familyfriendly', 'holiday_resort', 'residence', 'citytrips', 'utoring'\n\n    // 'fishing', 'fishing_certified'\n\n    // 'skiing', 'hiking', 'golfing', 'cycling', 'wellness', 'tennis', 'surfing', 'sailing', 'mountainbiking', 'riding', 'crosscountryskiing'\n  }[filter]\n}\n","/*\n *   Spezifikation:\n *   https://wiki.hotelplan.com/display/TSICHDDWEBCC/09+-+Quick+Search\n */\n\nexport default {\n  submitSearch,\n  autosuggestItemSelected,\n  numberPax,\n}\n\nfunction submitSearch({\n  text,\n  date,\n  duration,\n  pax,\n}: {\n  text?: string\n  date?: string\n  duration?: string | number\n  pax?: number\n}) {\n  useTracking().send({\n    event: 'quick search',\n    eventCategory: 'Quick Search',\n    eventAction: 'Destination',\n    eventLabel: text || 'empty',\n    eventNonInteraction: false,\n    Date: date || 'empty',\n    duration: duration || 'empty',\n    Persons: pax || 'empty',\n  })\n}\n\nfunction autosuggestItemSelected({ type, label }: AutosuggestItem) {\n  useTracking().send({\n    event: 'quick search',\n    eventCategory: 'Quick Search',\n    eventAction: 'Search Suggest',\n    eventLabel: label + (type ? ` / ${type}` : ''),\n    eventNonInteraction: false,\n  })\n}\n\nfunction numberPax(number: string) {\n  useTracking().send({\n    event: 'quick search',\n    eventCategory: 'Quick Search',\n    eventAction: 'Persons',\n    eventLabel: number,\n    eventNonInteraction: false,\n  })\n}\n","/*\n * Es gibt hierfür keine zentrale Tracking-Spezifikation\n *\n */\n\nexport default {\n  editableTextblockImpression,\n  showedTeaserToBooking,\n  clickedTeaserToBooking,\n  closedTeaserToBooking,\n}\n\nfunction editableTextblockImpression() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Scroll Depth',\n    eventAction: 'Content View',\n    eventLabel: 'Editable Block Viewed',\n    eventNonInteraction: true,\n  })\n}\n\nfunction showedTeaserToBooking() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Dialog',\n    eventAction: 'Show dialog',\n    eventLabel: 'Continue interrupted booking',\n    eventNonInteraction: true,\n  })\n}\n\nfunction clickedTeaserToBooking() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Dialog',\n    eventAction: 'Open last checkout step',\n    eventLabel: 'Continue interrupted booking',\n    eventNonInteraction: false,\n  })\n}\n\nfunction closedTeaserToBooking() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Dialog',\n    eventAction: 'Close dialog',\n    eventLabel: 'Continue interrupted booking',\n    eventNonInteraction: false,\n  })\n}\n","/*\n * Tracking-Spezifikation:\n * https://wiki.hotelplan.com/display/TSICHDDWEBCC/11+-+Newsletter\n *\n */\n\nexport default {\n  registration,\n  registrationHeID,\n  registrationFailed,\n  registrationFailedAdditional,\n  optIn,\n  optInHeID,\n  unsubscribe,\n  unsubscribeSubmit,\n  bannerDisplayed,\n  bannerSubscribe,\n}\n\nfunction registration(type: string) {\n  let eventAction = 'Registration'\n  if (type) {\n    eventAction = `Registration ${type}`\n  }\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Newsletter',\n    eventAction,\n    eventLabel: '/contentsite/contact/newsletter-registration/',\n  })\n}\n\nfunction registrationHeID({ type, heid }: { type: string; heid: string }) {\n  useTracking().send({\n    event: 'newsletter_subscription',\n    eventPayload: {\n      action: 'submit',\n      source: type,\n      heidi: heid,\n    },\n    _clear: true,\n  })\n}\n\nfunction registrationFailed() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Newsletter',\n    eventAction: 'Registration failure',\n    eventLabel: '404-error?page=/contentsite/contact/newsletter-registration/',\n  })\n}\n\nfunction registrationFailedAdditional() {\n  useTracking().send({\n    event: 'newsletter_subscription',\n    eventPayload: {\n      action: 'error',\n    },\n    _clear: true,\n  })\n}\n\nfunction optIn() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Newsletter',\n    eventAction: 'Opt-In',\n  })\n}\n\nfunction optInHeID(heid: string) {\n  useTracking().send({\n    event: 'newsletter_subscription',\n    eventPayload: {\n      action: 'complete',\n      heidi: heid,\n    },\n    _clear: true,\n  })\n}\n\nfunction unsubscribe(heid: string) {\n  useTracking().send({\n    event: 'newsletter_unsubscription',\n    eventPayload: {\n      action: 'view',\n      heidi: heid,\n    },\n    _clear: true,\n  })\n}\n\nfunction unsubscribeSubmit(heid: string) {\n  useTracking().send({\n    event: 'newsletter_unsubscription',\n    eventPayload: {\n      action: 'submit',\n      heidi: heid,\n    },\n    _clear: true,\n  })\n}\n\nfunction bannerDisplayed(position: string) {\n  useTracking().send({\n    event: 'newsletter_banner',\n    action: 'displayed',\n    label: 'Newsletter Banner',\n    category: undefined,\n    component: 'newsletter',\n    position,\n    language: useConfdata().language,\n    _clear: true,\n  })\n}\n\nfunction bannerSubscribe(position: string) {\n  useTracking().send({\n    event: 'newsletter_banner',\n    action: 'subscribe',\n    label: 'Subscribe',\n    category: undefined,\n    component: 'newsletter',\n    position,\n    language: useConfdata().language,\n    _clear: true,\n  })\n}\n","export default {\n  display,\n  toggleWishlist,\n  view,\n  scroll,\n}\n\nfunction sendEvent(action: string, items: PreparedItem[]) {\n  const { send } = useTracking()\n  const confData = useConfdata()\n\n  send({\n    event: 'universal_recommender',\n    action,\n    label: 'Universal Recommender',\n    category: undefined,\n    component: 'universal-recommender-home',\n    position: undefined,\n    language: confData.language,\n    items: items.map(({ accom }) => accom),\n    _clear: true,\n  })\n}\n\nfunction display(items: PreparedItem[]) {\n  sendEvent('displayed', items)\n}\n\nfunction toggleWishlist(items: PreparedItem[], state: boolean) {\n  sendEvent(state ? 'add to wishlist' : 'remove from wishlist', items)\n}\n\nfunction view(items: PreparedItem[]) {\n  sendEvent('view accommodation', items)\n}\n\nfunction scroll(direction: ScrollDirectionHorizontal, items: PreparedItem[]) {\n  sendEvent(\n    `${direction === 'left' ? 'previous' : 'next'} accommodation`,\n    items,\n  )\n}\n","/*\n * 13-content-assets\n *\n * Spezifikation: https://jira.migros.net/browse/IHGWEBCC-1158, https://jira.migros.net/browse/IHGWEBCC-1159\n */\n\nexport default {\n  secretSpotsDisplayed,\n  secretSpotsReadMore,\n  threeDaySummaryDisplayed,\n  threeDaySummaryReadMore,\n  touristicActivitiesDisplayed,\n  touristicActivitiesReadMore,\n}\n\nfunction secretSpotsDisplayed(): void {\n  useTracking().send({\n    event: 'content_assets',\n    action: 'displayed',\n    label: 'Secret Spots',\n    category: undefined,\n    component: 'seo-content-assets',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction secretSpotsReadMore(): void {\n  useTracking().send({\n    event: 'content_assets',\n    action: 'read more',\n    label: 'Secret Spots',\n    category: undefined,\n    component: 'seo-content-assets',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction threeDaySummaryDisplayed(): void {\n  useTracking().send({\n    event: 'content_assets',\n    action: 'displayed',\n    label: '3 Day Summary',\n    category: undefined,\n    component: 'seo-content-assets',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction threeDaySummaryReadMore(): void {\n  useTracking().send({\n    event: 'content_assets',\n    action: 'read more',\n    label: '3 Day Summary',\n    category: undefined,\n    component: 'seo-content-assets',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction touristicActivitiesDisplayed(): void {\n  useTracking().send({\n    event: 'content_assets',\n    action: 'displayed',\n    label: 'Touristic Activities',\n    category: undefined,\n    component: 'seo-content-assets',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction touristicActivitiesReadMore(): void {\n  useTracking().send({\n    event: 'content_assets',\n    action: 'read more',\n    label: 'Touristic Activities',\n    category: undefined,\n    component: 'seo-content-assets',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n","export default {\n  searchTeaser,\n  recommendation,\n}\n\nfunction searchTeaser() {\n  useTracking().send({\n    event: 'event',\n    eventCategory: 'Search Results',\n    eventAction: 'Scroll Depth',\n    eventLabel: 'Header viewed',\n    eventNonInteraction: true,\n  })\n}\n\n// data is the list of recommended accommodations given by webcc-api recommendations endpoint\nfunction recommendation({\n  params,\n}: {\n  params: { data: PreparedItem[]; target: string }\n}) {\n  useTracking().send({\n    event: 'recommender',\n    items: params.data.map((r) => r.accom),\n    target: params.target,\n    _clear: true,\n  })\n}\n","export default { popupDisplayed, popupReadMore }\n\nfunction popupDisplayed() {\n  trackPopup('displayed', 'Notification is displayed')\n}\n\nfunction popupReadMore() {\n  trackPopup('read more', 'Read more')\n}\n\nfunction trackPopup(action: string, label: string) {\n  useTracking().send({\n    event: 'interchalet_migration_notification',\n    action,\n    label,\n    category: undefined,\n    component: 'notification',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n","export default {\n  topicsImpression,\n  topicsClicked,\n}\n\nfunction topicsTracking(action: string, label: string) {\n  useTracking().send({\n    event: 'landing_topic_detail',\n    action,\n    label,\n    category: undefined,\n    component: 'landing-topic-detail',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction topicsImpression(label: string) {\n  topicsTracking('displayed', label)\n}\n\nfunction topicsClicked(label: string) {\n  topicsTracking('view', label)\n}\n","export default {\n  whyElementImpression,\n  footerElementImpression,\n  footerChangeCountryAndLanguage,\n  footerSocialMediaLinkElementClick,\n  newsletterBannerImpression,\n  newsletterBannerSubscribe,\n  safetyInformationsImpression,\n  safetyInformationsClick,\n  headerLogoClick,\n  headerContactUsClick,\n  headerWishlistClick,\n  headerSelectLanguage,\n  headerSiteNavigation,\n  popularDestinationLinksImpression,\n  popularDestinationLinksClick,\n  uniqueSellingPointsImpression,\n  autosuggestItemSelected,\n  datesArrivalSelect,\n  datesDurationSelect,\n  numberPax,\n  submitSearch,\n  rentalSpecialistImpression,\n  homeOwnerTeaserImpression,\n  homeOwnerTeaserClick,\n  topCategorySliderDisplayed,\n  topCategorySliderView,\n  topCategorySliderNext,\n  topCategorySliderPrevious,\n}\n\nfunction homePageTracking(\n  event: string,\n  action: string,\n  label: string,\n  component: string,\n  position?: string,\n  category?: string,\n) {\n  useTracking().send({\n    event,\n    action,\n    label,\n    component,\n    position,\n    category,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction whyElementImpression({ params }: { params: { pos: string } }) {\n  homePageTracking(\n    'why_interhome',\n    'displayed',\n    'Why Interhome',\n    'why-interhome',\n    params.pos,\n  )\n}\n\nfunction footerElementImpression({ params }: { params: { pos: string } }) {\n  homePageTracking('footer', 'displayed', 'Footer', 'footer', params.pos)\n}\n\nfunction footerChangeCountryAndLanguage(country: string, pos: string) {\n  homePageTracking(\n    'footer',\n    'change country and language',\n    country,\n    'footer',\n    pos,\n  )\n}\n\nfunction footerSocialMediaLinkElementClick(media: string, pos: string) {\n  homePageTracking('footer', 'view', media, 'footer', pos)\n}\n\nfunction newsletterBannerImpression() {\n  homePageTracking(\n    'newsletter_banner',\n    'displayed',\n    'Newsletter Banner',\n    'newsletter',\n    'homepage',\n  )\n}\n\nfunction newsletterBannerSubscribe() {\n  homePageTracking(\n    'newsletter_banner',\n    'subscribe',\n    'Subscribe',\n    'newsletter',\n    'homepage',\n  )\n}\n\nfunction safetyInformationsImpression({ params }: { params: { pos: string } }) {\n  homePageTracking(\n    'safety_informations',\n    'displayed',\n    'Safety Informations',\n    'safety-informations',\n    params.pos,\n  )\n}\n\nfunction safetyInformationsClick(pos: string) {\n  homePageTracking(\n    'safety_informations',\n    'view',\n    'More Info',\n    'safety-informations',\n    pos,\n  )\n}\n\n// TODO: new header events, can be moved to 07-header when the old events are deleted\n\nfunction headerLogoClick() {\n  useTracking().send({\n    event: 'header_elements',\n    action: 'view',\n    label: 'Homepage',\n    category: undefined,\n    component: 'header-link',\n    position: 'header',\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction headerContactUsClick() {\n  useTracking().send({\n    event: 'header_elements',\n    action: 'view',\n    label: 'Contact Us',\n    category: undefined,\n    component: 'header-link',\n    position: 'header',\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction headerWishlistClick() {\n  useTracking().send({\n    event: 'header_elements',\n    action: 'view',\n    label: 'Wishlist',\n    category: undefined,\n    component: 'header-link',\n    position: 'header',\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction headerSelectLanguage(select: string) {\n  useTracking().send({\n    event: 'header_elements',\n    action: 'change language',\n    label: select,\n    category: undefined,\n    component: 'header-link',\n    position: 'header',\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nconst HEADER_NAVIGATION_LABELS: [RegExp, string][] = [\n  [/#topcountries/i, 'Popular destinations'],\n  [/#inspirations/i, 'Travel ideas'],\n  [/myhome\\.interhome\\.group/i, 'Owner Portal'],\n  [/interhome\\.group.*\\/myhome/i, 'Homeowners'],\n]\n\nfunction headerSiteNavigation(item: HeaderMenuItem) {\n  const url = item.hash || item.href\n  // const navigation = HEADER_NAVIGATION_LABELS[Object.keys(HEADER_NAVIGATION_LABELS).find((key) => searchText.includes(key)) || '']\n  useTracking().send({\n    event: 'site_navigation',\n    action: 'navigate',\n    label:\n      HEADER_NAVIGATION_LABELS.find(([regexp]) => regexp.test(url))?.at(1) ??\n      item.label,\n    category: undefined,\n    component: 'header-link',\n    position: 'header',\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\n// end new header\n\nfunction popularDestinationLinksImpression({\n  params,\n}: {\n  params: { pos: string }\n}) {\n  homePageTracking(\n    'popular_destination_links',\n    'displayed',\n    'Popular Destination Links',\n    'popular-destination-links',\n    params.pos,\n  )\n}\n\nfunction popularDestinationLinksClick(destination: string, pos: string) {\n  homePageTracking(\n    'popular_destination_links',\n    'open',\n    destination,\n    'popular-destination-links',\n    pos,\n  )\n}\n\nfunction uniqueSellingPointsImpression({\n  params,\n}: {\n  params: { pos: string }\n}) {\n  homePageTracking(\n    'unique_selling_points',\n    'displayed',\n    'Unique Selling Points',\n    'unique-selling-points',\n    params.pos,\n  )\n}\n\n// quicksearch start\n// TODO: can be moved 09-quicksearch when deleting old events\n\nfunction autosuggestItemSelected({ type, label }: AutosuggestItem) {\n  useTracking().send({\n    event: 'quicksearch',\n    action: 'select',\n    label: label + (type ? ` / ${type}` : ''),\n    category: 'destination',\n    component: 'quick-search',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction datesArrivalSelect(date: Date) {\n  useTracking().send({\n    event: 'quicksearch',\n    action: 'select',\n    label: toDateFormat(date, 'yyyy_MM_dd'),\n    category: 'start date',\n    component: 'quick-search',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction datesDurationSelect(duration: number) {\n  useTracking().send({\n    event: 'quicksearch',\n    action: 'select',\n    label: duration,\n    category: 'duration',\n    component: 'quick-search',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction numberPax(number: string) {\n  useTracking().send({\n    event: 'quicksearch',\n    action: 'select',\n    label: number,\n    category: 'number of guests',\n    component: 'quick-search',\n    position: undefined,\n    language: useL10N().language,\n    _clear: true,\n  })\n}\n\nfunction submitSearch({\n  text,\n  date,\n  duration,\n  pax,\n}: {\n  text?: string\n  date?: string\n  duration?: string | number\n  pax?: number\n}) {\n  useTracking().send({\n    event: 'quicksearch',\n    action: 'search',\n    label: undefined,\n    category: undefined,\n    component: 'quick-search',\n    position: undefined,\n    language: useL10N().language,\n    qs_destination: text,\n    qs_start_date: date,\n    qs_duration: duration,\n    qs_pax: pax,\n    _clear: true,\n  })\n}\n\n// quicksearch end\n\nfunction rentalSpecialistImpression() {\n  homePageTracking(\n    'hh_rental_specialist',\n    'displayed',\n    'Holiday home rental specialist',\n    'hh-rental-specialist',\n  )\n}\n\nfunction homeOwnerTeaserImpression() {\n  homePageTracking(\n    'home_owner_teaser',\n    'displayed',\n    'Home Owner Teaser',\n    'home-owner-teaser',\n  )\n}\n\nfunction homeOwnerTeaserClick() {\n  homePageTracking(\n    'home_owner_teaser',\n    'view',\n    'Start successfully renting out now',\n    'home-owner-teaser',\n  )\n}\n\nfunction topCategorySliderTracking(\n  action: string,\n  topics: Record<string, string>[],\n) {\n  useTracking().send({\n    event: 'top_categories_slider',\n    action,\n    label: 'Top Categories Slider',\n    category: undefined,\n    component: 'top-categories-slider',\n    position: undefined,\n    language: useL10N().language,\n    topics,\n    _clear: true,\n  })\n}\n\nfunction topCategorySliderDisplayed(topics: Record<string, string>[]) {\n  topCategorySliderTracking('displayed', topics)\n}\n\nfunction topCategorySliderView(topics: Record<string, string>[]) {\n  topCategorySliderTracking('view', topics)\n}\n\nfunction topCategorySliderNext(topics: Record<string, string>[]) {\n  topCategorySliderTracking('next', topics)\n}\n\nfunction topCategorySliderPrevious(topics: Record<string, string>[]) {\n  topCategorySliderTracking('previous', topics)\n}\n","export function replacePlaceholders(text: string, tags: object): string {\n  return Object.entries(tags).reduce(\n    (result, [tag, value]) =>\n      result.replace(new RegExp(`{${tag}}`, 'g'), value?.toString() ?? ''),\n    text,\n  )\n}\n\nexport function pluralize(textResource: string, count = 0) {\n  const choices = textResource.split('|')\n\n  switch (choices.length) {\n    case 1:\n      return choices[0]\n    case 2:\n      return count > 1 ? choices[1] : choices[0]\n    case 3:\n    case 4:\n      return count > 1 ? choices[2] : choices[count]\n    default:\n      console.error(\n        `Invalid length of pluralization choices: ${choices.length}`,\n      )\n      return choices[0]\n  }\n}\n\nexport function seoify(input: string): string {\n  return input?.toLocaleLowerCase().replace(/[/ ]/g, '-') || ''\n}\n\nexport function extractAccommodationCode(\n  input: string | string[] = '',\n): string {\n  const str = Array.isArray(input) ? input[0] : input\n\n  // Regular expression to match accommodation code pattern\n  const match = str.match(/^([A-Z]{2}[0-9]+\\.\\d+\\.\\d+)/)\n\n  // Return the matched accommodation code or empty string if no match\n  return match ? match[1] : ''\n}\n\nexport function extractQueryParamValue(input: string | string[] = ''): string {\n  const str = Array.isArray(input) ? input[0] : input\n\n  // Regular expression to match accommodation code pattern\n  const cleanedStr = str.replace(/[^A-Za-z0-9._]/g, '')\n\n  // Return the matched accommodation code or empty string if no match\n  return cleanedStr ? cleanedStr : ''\n}\n","import { trim } from 'lodash-es'\nimport { format } from 'date-fns'\nimport type { EventData } from '.'\nimport type { UnparsedDate } from '~/utils/dates'\n\ntype Type = 'A' | 'B' | 'G' | 'H'\ntype DetailType = 'A' | 'B' | 'C' | 'D' | 'F' | 'H' | 'R' | 'S' | 'V' | 'Y'\n\nexport type TranslatedAccommodationWithPrice = AccomPrice &\n  TranslatedAccommodation &\n  Partial<TripParams>\n\nexport interface ProductItem {\n  item_id: string\n  item_name: string\n  discount?: number\n  item_brand: string\n  item_category?: string\n  price: number\n  quantity: number\n  item_end_date?: string\n  item_start_date?: string\n  item_quality: number\n  item_currency: string\n  item_pax: string\n  pool?: boolean\n  item_regular_price?: number\n}\n\nexport interface ProductPromotion {\n  creative_name: string\n  creative_slot: string\n  promotion_id: string\n  promotion_name: string\n}\n\nexport interface ViewItemListData extends EventData {\n  ecommerce: {\n    item_list_id: string\n    item_list_name: string\n    items: ProductItem[]\n  } | null\n}\n\nexport interface ViewItemData extends EventData {\n  ecommerce: {\n    currency: string\n    value: number\n    items: ProductItem[]\n  }\n}\n\nconst detailTypeMapping: Record<DetailType, string> = {\n  A: 'apart-hotel',\n  B: 'bungalow',\n  C: 'chalet',\n  D: 'divers',\n  F: 'farmhouse',\n  H: 'holiday-village',\n  R: 'residence',\n  S: 'castle-mansion',\n  V: 'villa',\n  Y: 'yacht',\n}\n\nconst typeMapping: Record<Type, string> = {\n  A: 'apartment',\n  B: 'boat',\n  G: 'guestroom',\n  H: 'holiday-house',\n}\n\nfunction dateToString(value: UnparsedDate | undefined): string {\n  const date = tryParseDate(value)\n\n  return date ? format(date, 'yyyy-MM-dd') : ''\n}\n\nfunction brand(type: Type, detailType?: DetailType) {\n  if (detailType) {\n    return `${typeMapping[type]}/${detailTypeMapping[detailType]}`\n  }\n  return `${typeMapping[type]}`\n}\n\nfunction accomodationCategory(accommodation: TranslatedAccommodationWithPrice) {\n  const type = typeMapping[accommodation.type.code as Type]\n  const detailType = detailTypeMapping[accommodation.type.detail as DetailType]\n  const country = seoify(accommodation.country.label)\n  const region = seoify(accommodation.region.label)\n  const place = seoify(accommodation.place.label)\n  return `${country}/${region}/${place}/${type}/${detailType}`\n}\n\nfunction addToCart(raw: TranslatedAccommodationWithPrice): void {\n  const data: ViewItemData = {\n    ecommerce: {\n      currency: useConfdata().currency,\n      value: raw.price ?? 0,\n      items: [translatedAccommodationToProductItem(raw)],\n    },\n  }\n  useTracking().send([\n    { ecommerce: null },\n    {\n      event: 'add_to_cart',\n      ...data,\n    },\n  ])\n}\n\nfunction resultDocumentCategory(doc: ResultDocument) {\n  const type = typeMapping[doc.type as Type]\n  const detailType = detailTypeMapping[doc.buildingtype as DetailType]\n  const country = seoify(doc.country)\n  const region = seoify(doc.region)\n  const place = seoify(doc.place)\n  return `${country}/${region}/${place}/${type}/${detailType}`\n}\n\nfunction toggleWishlist(\n  raw: ResultDocument[] | TranslatedAccommodationWithPrice[],\n  state: boolean,\n): void {\n  const isResultDocument = (raw[0] as unknown as ResultDocument).trip?.price\n  const data: ViewItemData = {\n    ecommerce: {\n      currency: useConfdata().currency,\n      value:\n        (raw[0] as TranslatedAccommodationWithPrice)?.price ||\n        (raw[0] as ResultDocument).trip?.price ||\n        0,\n      items: isResultDocument\n        ? resultDocumentsToProductItems(raw as ResultDocument[])\n        : [\n            translatedAccommodationToProductItem(\n              raw[0] as TranslatedAccommodationWithPrice,\n            ),\n          ],\n    },\n  }\n  delete data.ecommerce.items[0].discount\n  delete data.ecommerce.items[0].pool\n  useTracking().send([\n    { ecommerce: null },\n    {\n      event: state ? 'add_to_wishlist' : 'remove_from_wishlist',\n      ...data,\n    },\n  ])\n}\n\nfunction addToWishlist(\n  raw: ResultDocument[] | TranslatedAccommodationWithPrice[],\n): void {\n  toggleWishlist(raw, true)\n}\n\nfunction removeFromWishlist(\n  raw: ResultDocument[] | TranslatedAccommodationWithPrice[],\n): void {\n  toggleWishlist(raw, false)\n}\n\nfunction selectItem(raw: ResultDocument, listId = ''): void {\n  const data: ViewItemListData = {\n    ecommerce: {\n      item_list_id: listId,\n      item_list_name: trim(location.pathname, '/'),\n      items: resultDocumentsToProductItems([raw]),\n    },\n  }\n  useTracking().send([\n    { ecommerce: null },\n    {\n      event: 'select_item',\n      ...data,\n    },\n  ])\n}\n\nfunction selectPromotion(data: ProductPromotion): void {\n  useTracking().send([\n    { ecommerce: null },\n    {\n      event: 'select_promotion',\n      ecommerce: data,\n    },\n  ])\n}\n\nfunction viewItem(raw: TranslatedAccommodationWithPrice): void {\n  const type = typeMapping[raw.type.code as Type]\n  const detailType = detailTypeMapping[raw.type.detail as DetailType]\n\n  const data: ViewItemData = {\n    ecommerce: {\n      currency: useConfdata().currency,\n      value: raw.regularPrice ?? 0,\n      items: [\n        {\n          item_id: raw.code,\n          item_name: raw.name,\n          item_brand: `${type}/${detailType}`,\n          item_category: accomodationCategory(raw),\n          price: raw.price ?? 0,\n          quantity: 1,\n          item_end_date: raw.checkout && (toServerDate(raw.checkout) as string),\n          item_start_date: raw.checkin && (toServerDate(raw.checkin) as string),\n          item_quality: raw.evaluation.stars ?? 0,\n          item_currency: useConfdata().currency,\n          item_pax: raw.pax.toString(),\n          pool: !!raw.attributes?.pool,\n          discount: raw.reduction ?? 0,\n        },\n      ],\n    },\n  }\n\n  useTracking().send([\n    { ecommerce: null },\n    {\n      event: 'view_item',\n      ...data,\n    },\n  ])\n}\n\nfunction viewItemList(\n  documents: ResultDocument[],\n  destination?: Partial<Destination>,\n) {\n  useTracking().send([\n    { ecommerce: null },\n    {\n      event: 'view_item_list',\n      ecommerce: {\n        item_list_id: '',\n        item_list_name: trim(destination?.urlPath ?? location.pathname, '/'),\n        items: resultDocumentsToProductItems(documents),\n      },\n    },\n  ])\n}\n\nfunction viewPromotion(data: ProductPromotion): void {\n  useTracking().send([\n    { ecommerce: null },\n    {\n      event: 'view_promotion',\n      ecommerce: data,\n    },\n  ])\n}\n\n/* Helpers */\n\nfunction resultDocumentsToProductItems(raw: ResultDocument[]): ProductItem[] {\n  return (raw || []).map((item) => {\n    const effectivePrice = item.trip?.price ?? 0\n    const basePrice = item.trip?.reduction\n      ? (effectivePrice / (100 - item.trip?.reduction)) * 100\n      : effectivePrice\n    const discount = basePrice - effectivePrice\n    return {\n      item_id: item.code,\n      item_brand: brand(item.type as Type),\n      item_category: resultDocumentCategory(item), // @todo: ResultDocument type doesn't have fields required to fill this field\n      item_currency: useConfdata().currency,\n      item_end_date: item.trip?.checkout as string,\n      item_name: item.name,\n      item_pax: item.pax.toString(),\n      item_quality: item.stars,\n      item_regular_price: parseFloat(basePrice.toFixed(2)),\n      item_start_date: item.trip?.checkin as string,\n      price: parseFloat(effectivePrice.toFixed(2)),\n      quantity: 1,\n      discount: parseFloat(discount.toFixed(2)),\n      rrr: raw,\n    }\n  })\n}\n\nfunction translatedAccommodationToProductItem(\n  raw: TranslatedAccommodationWithPrice,\n): ProductItem {\n  const type = typeMapping[raw.type.code as Type]\n  const detailType = detailTypeMapping[raw.type.detail as DetailType]\n\n  return {\n    item_id: raw.code,\n    item_name: raw.name,\n    item_brand: `${type}/${detailType}`,\n    item_category: accomodationCategory(raw),\n    price: raw.price ?? 0,\n    quantity: 1,\n    item_end_date: dateToString(raw.checkout),\n    item_start_date: dateToString(raw.checkin),\n    item_quality: raw.evaluation.stars ?? 0,\n    item_regular_price: raw.regularPrice,\n    item_currency: useConfdata().currency,\n    item_pax: raw.pax.toString(),\n    discount: raw.reduction ?? 0,\n    pool: !!raw.attributes.pool,\n  }\n}\n\nexport default {\n  addToCart,\n  toggleWishlist,\n  addToWishlist,\n  removeFromWishlist,\n  selectItem,\n  selectPromotion,\n  viewItem,\n  viewItemList,\n  viewPromotion,\n}\n","export default {\n  displayed,\n  view,\n}\n\nfunction displayed(teasers: LandingImageCarouselTeaser[]) {\n  useTracking().send({\n    event: 'image_carousel',\n    action: 'displayed',\n    label: 'Image Carousel',\n    category: undefined,\n    component: 'image-carousel',\n    language: useConfdata().language,\n    topics: teasers.map(({ link }, index) => ({\n      category_name: link.text,\n      category_slot: index.toString(),\n    })),\n    _clear: true,\n  })\n}\n\nfunction view(name: string, index: number) {\n  useTracking().send({\n    event: 'image_carousel',\n    action: 'view',\n    label: 'Image Carousel',\n    category: undefined,\n    component: 'image-carousel',\n    position: undefined,\n    language: useConfdata().language,\n    topics: [\n      {\n        category_name: name,\n        category_slot: index.toString(),\n      },\n    ],\n    _clear: true,\n  })\n}\n","export default {\n  display,\n  open,\n}\n\nfunction sendEvent(action: string, { name }: Announcement) {\n  const { send } = useTracking()\n  const confData = useConfdata()\n  const route = useRoute()\n\n  send({\n    event: 'topline_teaser',\n    action,\n    label: name,\n    category: undefined,\n    component: 'topline-teaser',\n    position: route.path,\n    language: confData.language,\n    _clear: true,\n  })\n}\n\nfunction display(announcement: Announcement) {\n  sendEvent('displayed', announcement)\n}\n\nfunction open(announcement: Announcement) {\n  sendEvent('open', announcement)\n}\n","export default {\n  display,\n  toggleWishlist,\n  view,\n  scroll,\n}\n\nfunction sendEvent(action: string, items: PreparedItem[]) {\n  const { send } = useTracking()\n  const confData = useConfdata()\n\n  send({\n    event: 'handpicked_properties',\n    action,\n    label: 'Handpicked Properties Module',\n    category: undefined,\n    component: 'handpicked-properties-module',\n    position: undefined,\n    language: confData.language,\n    items: items.map(({ accom }) => accom),\n    _clear: true,\n  })\n}\n\nfunction display(items: PreparedItem[]) {\n  sendEvent('displayed', items)\n}\n\nfunction toggleWishlist(items: PreparedItem[], state: boolean) {\n  sendEvent(state ? 'add to wishlist' : 'remove from wishlist', items)\n}\n\nfunction view(items: PreparedItem[]) {\n  sendEvent('view accommodation', items)\n}\n\nfunction scroll(direction: ScrollDirectionHorizontal, items: PreparedItem[]) {\n  sendEvent(\n    `${direction === 'left' ? 'previous' : 'next'} accommodation`,\n    items,\n  )\n}\n","export default {\n  addProperty,\n  createWishlist,\n  addPropertyRedirect,\n  addPropertyRedirectSuccess,\n}\n\nfunction createWishlist() {\n  useTracking().send({\n    event: 'wishlist',\n    action: 'create',\n    label: 'Create new wishlist',\n    category: 'custom',\n    component: 'wishlist',\n    position: 'Favorites',\n    language: useConfdata().language,\n    _clear: true,\n  })\n}\n\nfunction addProperty(code: string) {\n  useTracking().send({\n    event: 'wishlist',\n    action: 'add',\n    label: code,\n    category: 'success',\n    component: 'wishlist',\n    position: 'searchresults',\n    language: useConfdata().language,\n    _clear: true,\n  })\n}\n\nfunction addPropertyRedirect(code: string) {\n  useTracking().send({\n    event: 'wishlist',\n    action: 'add',\n    label: code,\n    category: 'redirect',\n    component: 'wishlist',\n    position: 'searchresults',\n    language: useConfdata().language,\n    _clear: true,\n  })\n}\n\nfunction addPropertyRedirectSuccess(code: string) {\n  useTracking().send({\n    event: 'wishlist',\n    action: 'redirect success',\n    label: code,\n    category: 'success',\n    component: 'wishlist',\n    position: 'searchresults',\n    language: useConfdata().language,\n    _clear: true,\n  })\n}\n","import eec from './01-eec'\nimport pageload from './02-pageload'\nimport common from './03-common'\nimport search from './04-search'\nimport detail from './05-detail'\nimport teaser from './06-teaser'\nimport header from './07-header'\nimport facette from './08-facette-search'\nimport quicksearch from './09-quicksearch'\nimport start from './999-start'\nimport newsletter from './11-newsletter'\nimport recommendation from './12-recommendation'\nimport contentAssets from './13-content-assets.js'\nimport impression from './impression'\nimport interchaletMigration from './14-interchalet-migration'\nimport landingPages from './15-landing-pages'\nimport homepage from './homepage'\nimport ecommerce from './ecommerce'\nimport imageCarousel from './16-image-carousel'\nimport announcements from './17-announcements'\nimport handpicked from './handpicked'\nimport wishlists from './18-wishlists'\n\nconst handlers = {\n  eec,\n  pageload,\n  common,\n  search,\n  detail,\n  header,\n  start,\n  facette,\n  qs: quicksearch,\n  newsletter,\n  teaser,\n  impression,\n  recommendation,\n  ecommerce,\n  contentAssets,\n  homepage,\n  interchaletMigration,\n  imageCarousel,\n  landingPages,\n  announcements,\n  handpicked,\n  wishlists,\n}\n\nexport default handlers\n\nexport type Handlers = typeof handlers\n\nexport interface EventData {\n  event?: string\n  [key: string]: any\n}\n","import handlers from '~/resources/tracking'\n\nexport default defineNuxtRouteMiddleware(() => {\n  if (!import.meta.client) return\n\n  window.dataLayer = window.dataLayer || []\n  useTracking().init(handlers, handlers.pageload.dataLayerPageLoad)\n})\n","export interface Feature {\n  name: FeatureName\n  isEnabled: boolean\n  variants: FeatureVariant[]\n}\n\nexport interface FeatureVariant {\n  name: FeatureVariantName\n  isEnabled: boolean\n  payload?: FeatureVariantPayload\n}\n\nexport type FeatureName = string\nexport type FeatureVariantName = string\nexport type FeatureVariantPayload = string | number | object | null\n\nexport function getFeatureVariantEnabled(\n  feature: Feature,\n): FeatureVariant | undefined {\n  return feature.variants.find(({ isEnabled }) => isEnabled)\n}\n\nexport function toggleFeature(\n  feature: Feature,\n  value?: FeatureVariantName | boolean,\n): void {\n  feature.isEnabled = value === undefined ? !feature.isEnabled : !!value\n  feature.variants.forEach(\n    (variant) => (variant.isEnabled = variant.name === value),\n  )\n}\n","import { capitalize, words } from 'lodash-es'\nimport {\n  getFeatureVariantEnabled,\n  toggleFeature,\n  type Feature,\n  type FeatureVariantName,\n} from '../../feature'\n\nexport function useFeature(name: string) {\n  const runtimeConfig = useRuntimeConfig()\n  const { $unleash } = useNuxtApp()\n\n  const feature = computed<Feature | undefined>(() => {\n    return $unleash.features[name]\n  })\n\n  const _name = computed(() => {\n    return name\n  })\n\n  const isEnabled = computed(() => {\n    return !!feature.value?.isEnabled\n  })\n\n  const title = computed(() => {\n    return words(capitalize(name)).map(replaceAbbreviation).join(' ')\n  })\n\n  const url = computed(() => {\n    return `${runtimeConfig.public.unleash.featureBaseUrl}${name}`\n  })\n\n  const variants = computed(() => {\n    return feature.value?.variants ?? []\n  })\n\n  const variant = computed(() => {\n    return feature.value && getFeatureVariantEnabled(feature.value)\n  })\n\n  function toggle(value?: FeatureVariantName | boolean) {\n    if (!feature.value) return\n\n    toggleFeature(feature.value, value)\n    $unleash.update(feature.value)\n  }\n\n  return { name: _name, title, url, isEnabled, variant, variants, toggle }\n}\n\nfunction replaceAbbreviation(word: string) {\n  return /srp|pdp/i.test(word) ? word.toUpperCase() : word\n}\n","import { useFeature } from './useFeature'\n\nexport function useFlag(name: string) {\n  return useFeature(name).isEnabled\n}\n","import mapValues from 'lodash-es/mapValues'\nimport toString from 'lodash-es/toString'\n\nexport interface DateParams {\n  checkin: string\n  checkout: string\n}\n\nexport interface FlexDateParams extends DateParams {\n  duration: number\n}\n\nexport const DESTINATION_PARAMS = Object.freeze({\n  country: true,\n  region: true,\n  place: true,\n})\n\nexport const DATE_PARAMS = Object.freeze({\n  checkin: true,\n  checkout: true,\n  duration: true,\n})\n\nexport const PAX_PARAMS = Object.freeze({\n  pax: true,\n})\n\nexport const ROOM_PARAMS = Object.freeze({\n  bedrooms: true,\n  bathrooms: true,\n})\n\nexport const NUMBER_PARAMS = Object.freeze({\n  ...PAX_PARAMS,\n  ...ROOM_PARAMS,\n})\n\nexport const ACCOMMODATION_TYPE_PARAMS = Object.freeze({\n  house: true,\n  apartment: true,\n  detached: true,\n  villa: true,\n  chalet: true,\n  farmhouse: true,\n  studio: true,\n})\n\nexport const REDESIGN_ACCOMMODATION_TYPE_PARAMS = Object.freeze({\n  house: true,\n  apartment: true,\n})\n\nexport const REDESIGN_PROPERTY_TYPE_PARAMS = Object.freeze({\n  house: true,\n  apartment: true,\n})\n\nexport const SPECIAL_PARAMS = Object.freeze({\n  casa: true,\n  swiss_peak: true,\n  workation: true,\n  sustainable: true,\n})\n\nexport const STARS_PARAMS = Object.freeze({\n  stars: true,\n})\n\nexport const POOL_PARAMS = Object.freeze({\n  pool: true,\n  pool_children: true,\n  pool_indoor: true,\n  pool_private: true,\n})\n\nexport const PETS_PARAMS = Object.freeze({\n  pets: true,\n  minpets: true,\n})\n\nexport const DISTANCE_PARAMS = Object.freeze({\n  sea: true,\n  lake: true,\n  ski: true,\n  center: true,\n})\n\nexport const FEATURE_PARAMS = Object.freeze({\n  wlan: true,\n  aircondition: true,\n  parking: true,\n  garage: true,\n  'balcony-or-terrace': true,\n  dishwasher: true,\n  washingmachine: true,\n  tv: true,\n  sea_or_lake_view: true,\n  bbq: true,\n  boat: true,\n  cots: true,\n  hottub: true,\n  fireplace: true,\n  sauna: true,\n  // wheelchair: true,\n  charging_station: true,\n})\n\nexport const OFFER_PARAMS = Object.freeze({\n  last_minute: true,\n  special_offer: true,\n  'discount-20': true,\n  cheapcheap: true,\n  early_booker: true,\n})\n\nexport const PRICE_PARAMS = Object.freeze({\n  'min-price': true,\n  maxPrice: true,\n})\n\nexport const HOLIDAY_TYPE_PARAMS = Object.freeze({\n  familyfriendly: true,\n  holiday_resort: true,\n  residence: true,\n})\n\nexport const ACTIVITY_PARAMS = Object.freeze({\n  citytrips: true,\n  utoring: true,\n  fishing: true,\n  fishing_certified: true,\n  skiing: true,\n  hiking: true,\n  golfing: true,\n  cycling: true,\n  wellness: true,\n  tennis: true,\n  surfing: true,\n  sailing: true,\n  mountainbiking: true,\n  riding: true,\n  crosscountryskiing: true,\n})\n\nexport const TEXT_PARAMS = Object.freeze({\n  q: true,\n})\n\nexport const GEO_COORD_PARAMS = Object.freeze({\n  lat: true,\n  lon: true,\n  radius: true,\n\n  name: true,\n  heading: true,\n})\n\nexport const SEASON_PARAMS = Object.freeze({\n  season: true,\n})\n\nexport const PAGE_PARAMS = Object.freeze({\n  page: true,\n})\n\nexport const SORT_PARAMS = Object.freeze({\n  sorting: undefined,\n})\n\nexport const ALLOWED_SEARCH_PARAMS = Object.freeze({\n  ...DESTINATION_PARAMS,\n  ...DATE_PARAMS,\n  ...PAX_PARAMS,\n  ...ROOM_PARAMS,\n  ...ACCOMMODATION_TYPE_PARAMS,\n  ...SPECIAL_PARAMS,\n  ...STARS_PARAMS,\n  ...POOL_PARAMS,\n  ...PETS_PARAMS,\n  ...DISTANCE_PARAMS,\n  ...FEATURE_PARAMS,\n  ...OFFER_PARAMS,\n  ...PRICE_PARAMS,\n  ...HOLIDAY_TYPE_PARAMS,\n  ...ACTIVITY_PARAMS,\n  ...TEXT_PARAMS,\n  ...GEO_COORD_PARAMS,\n  ...SEASON_PARAMS,\n  ...PAGE_PARAMS,\n  ...SORT_PARAMS,\n  ...REDESIGN_ACCOMMODATION_TYPE_PARAMS,\n  ...REDESIGN_PROPERTY_TYPE_PARAMS,\n})\n\nexport const ALLOWED_QUERY_PARAMS = Object.freeze({\n  ...ALLOWED_SEARCH_PARAMS,\n  fuzzyness: true,\n  signedIn: true,\n})\n\nexport function unpack(obj: object): PlainParams {\n  const result: PlainParams = {}\n\n  Object.entries(obj).forEach(([key, value]) => {\n    if (typeof value === 'object' && !Array.isArray(value)) {\n      Object.assign(result, unpack(value))\n    } else if (value) {\n      result[key] = value\n    }\n  })\n\n  return result\n}\n\nexport function asQueryParams<T extends object>(\n  source: T,\n): Record<string, string> {\n  return mapValues(source, toString)\n}\n\nexport function hasDateParams(\n  params: Partial<DateParams>,\n): params is DateParams {\n  return !!(params.checkin && params.checkout)\n}\n\nexport function addDatesFuzziness(\n  { checkin, checkout }: DateParams,\n  fuzziness: number,\n): FlexDateParams {\n  return {\n    checkin: toDate(daysSub(checkin, fuzziness)),\n    checkout: toDate(daysAdd(checkout, fuzziness)),\n    duration: calculateDuration(checkin, checkout),\n  }\n}\n\nexport const SORT_DEFAULT = 'recommendation'\n","import { compact, pickBy } from 'lodash-es'\nimport { joinRelativeURL } from 'ufo'\nimport type { ConfDestination } from '~/api/conf-api.types'\nimport { DESTINATION_PARAMS } from './params'\n\nexport function getDestinationName({\n  place,\n  region,\n  country,\n}: Destination): string {\n  return place || region || country || ''\n}\n\nexport function getDestinationQuery({\n  countryCode,\n  regionCode,\n  placeCode,\n}: Partial<ConfDestination>) {\n  const buildCode = (...codes: (string | undefined)[]) =>\n    codes.every(Boolean) ? codes.join('') : undefined\n\n  return {\n    country: buildCode(countryCode),\n    region: buildCode(countryCode, regionCode),\n    place: buildCode(countryCode, placeCode),\n  }\n}\n\nexport function geoByCode(code?: string) {\n  return (item: { code: string }) => item.code === code\n}\n\nexport function getLegacyGeoCode(code: string): string {\n  return code.replace(/^[a-zA-Z]{2}/, '')\n}\n\nexport function splitDestinationPath(path: string): {\n  country?: string\n  region?: string\n  place?: string\n} {\n  const [country, region, place] = path\n    .replace(/^\\/|\\/$/g, '') // removing surrounding `/` if any\n    .replace(/^\\w{2}\\//, '') // removing language prefix if any\n    .split('/')\n    .map((value) => value || undefined)\n\n  return { country, region, place }\n}\n\nexport function joinDestinationPath({\n  country,\n  region,\n  place,\n}: Partial<Destination>): string {\n  return joinRelativeURL(...compact([country, region, place]))\n}\n\nexport function getDestinationForFilter(\n  { filters, urlPath, ...extra }: Partial<Destination>,\n  filter: Params,\n): Partial<Destination> {\n  const filterParams = Object.keys(\n    pickBy(filter, (value, key) => value && key in DESTINATION_PARAMS),\n  )\n  const pickFiltered = (input: object) =>\n    pickBy(input, (_, prop) =>\n      filterParams.some((param) => prop.startsWith(param)),\n    )\n\n  return {\n    ...pickFiltered(extra),\n    filters,\n    urlPath:\n      joinDestinationPath(pickFiltered(splitDestinationPath(urlPath ?? ''))) ||\n      undefined,\n  }\n}\n","/**\n * Default values are coming from the requirements\n *\n * @see https://jira.migros.net/browse/IHGWEBCC-1639\n */\n\nexport const FILTERS_BEDROOMS_MIN = 0\nexport const FILTERS_BEDROOMS_MAX = 19\nexport const FILTERS_BATHROOMS_MIN = 0\nexport const FILTERS_BATHROOMS_MAX = 19\n\nexport const FILTERS_PAX_MIN = 0\nexport const FILTERS_PAX_MAX = 47\nexport const FILTERS_PETS_MIN = 0\nexport const FILTERS_PETS_MAX = 3\n","import { get, omit, pick, set } from 'lodash-es'\nimport type { SearchApiFacets, SearchApiParams } from '~/api/search-api.types'\nimport { mapSearchStateToSearchApiParams } from './search.mappers'\nimport type {\n  DestinationCode,\n  DestinationFacet,\n  SearchState,\n} from './search.types'\n\nexport const SEARCH_PAGE_TYPE = 'search' as const\nexport const SEARCH_PAGE_DEFAULT_PATH = '/search' as const\n\nexport const DESTINATIONS_MAP = shallowRef(\n  new Map<DestinationCode, DestinationFacet>(),\n)\n\nconst SEARCH_URL_PARAMS = [\n  'language',\n  'currency',\n  'season',\n  'page',\n  'sorting',\n  'brand',\n  'salesoffice',\n  'q',\n  'checkin',\n  'checkout',\n  'duration',\n  'fuzzyness',\n  'country',\n  'region',\n  'place',\n  'code',\n  'geo',\n  'n',\n  'w',\n  's',\n  'e',\n  'zoom',\n  'lat',\n  'lon',\n  'radius',\n  'pax',\n  'pets',\n  'house',\n  'apartment',\n  'villa',\n  'chalet',\n  'farmhouse',\n  'detached',\n  'stars',\n  'rating',\n  'reviews',\n  'bedrooms',\n  'bathrooms',\n  'sea',\n  'lake',\n  'ski',\n  'center',\n  'wlan',\n  'aircondition',\n  'parking',\n  'garage',\n  'balcony-or-terrace',\n  'dishwasher',\n  'washingmachine',\n  'tv',\n  'sea_or_lake_view',\n  'bbq',\n  'boat',\n  'cots',\n  'hottub',\n  'fireplace',\n  'sauna',\n  'wheelchair',\n  'charging_station',\n  'pool',\n  'pool_private',\n  'pool_indoor',\n  'pool_children',\n  'min-price',\n  'maxPrice',\n  'discount',\n  'special_offer',\n  'last_minute',\n  'early_booker',\n  'discount-20',\n  'cheapcheap',\n  'familyfriendly',\n  'holiday_resort',\n  'residence',\n  'citytrips',\n  'utoring',\n  'casa',\n  'swiss_peak',\n  'workation',\n  'sustainable',\n  'skiing',\n  'hiking',\n  'golfing',\n  'cycling',\n  'wellness',\n  'tennis',\n  'surfing',\n  'sailing',\n  'mountainbiking',\n  'riding',\n  'crosscountryskiing',\n  'fishing',\n  'fishing_certified',\n  'studio',\n  'lso',\n  'bo',\n  'rooms',\n] as const satisfies ReadonlyArray<keyof SearchURLParams>\nconst SEARCH_URL_PARAMS_SET = new Set<string>(SEARCH_URL_PARAMS)\n\nexport function isSearchURLParam(key: string): key is keyof SearchURLParams {\n  return SEARCH_URL_PARAMS_SET.has(key)\n}\n\nexport function getDestinationFacetByCode(\n  code: DestinationCode,\n): DestinationFacet | undefined {\n  return DESTINATIONS_MAP.value.get(code)\n}\n\nexport function addDestinationFacet(facet: DestinationFacet): DestinationFacet {\n  DESTINATIONS_MAP.value.set(facet.code, facet)\n  return facet\n}\n\nexport function triggerDestinationFacetsRef() {\n  triggerRef(DESTINATIONS_MAP)\n}\n\nexport type FilterType = 'single' | 'multi' | 'range' | 'stepper'\n\nexport interface BaseFilterOption<TValue> {\n  value: TValue\n  count?: number\n}\n\ntype ExtractItem<T> = T extends (infer TItem)[] ? TItem : T\n\nexport type FacetConf<\n  TKey extends keyof SearchState,\n  TValue extends SearchState[TKey] = SearchState[TKey],\n  TOptionValue extends ExtractItem<TValue> = ExtractItem<TValue>,\n  TOption extends\n    BaseFilterOption<TOptionValue> = BaseFilterOption<TOptionValue>,\n> = {\n  type: FilterType\n  key: TKey\n  getOptions(facets?: SearchApiFacets): TOption[]\n  getSearchInput(state: Partial<SearchState>): SearchApiParams\n  getValue?(state: SearchState): TValue\n  setValue?(state: SearchState, value: TValue): void\n}\n\nexport type FilterFacetOptions = number[] | string[]\nexport type FilterFacetValueType = 'number' | 'string' | 'array'\nexport type FilterFacetSearchApiKeys = (keyof SearchApiFacets)[]\nexport type FilterFacet = {\n  key: string\n  enabled: boolean\n  searchStateKey: string\n  searchApiKeys: FilterFacetSearchApiKeys\n  type: FilterType\n  valueType: FilterFacetValueType\n  options: FilterFacetOptions\n}\n\nfunction extractFacetsApiValues(\n  facets: SearchApiFacets,\n  apiKeys: FilterFacetSearchApiKeys,\n  options: FilterFacetOptions,\n  type: FilterType,\n) {\n  if (type === 'range') {\n    return apiKeys.flatMap((key: string) => get(facets, key, []))\n  }\n\n  return Object.entries(\n    pick(\n      apiKeys.reduce((acc, key) => ({ ...acc, ...get(facets, key, {}) }), {}),\n      options,\n    ),\n  )\n}\n\nfunction defineFacetConf<\n  TKey extends keyof SearchState,\n  TValue extends SearchState[TKey] = SearchState[TKey],\n  TOptionValue extends ExtractItem<TValue> = ExtractItem<TValue>,\n  TOption extends\n    BaseFilterOption<TOptionValue> = BaseFilterOption<TOptionValue>,\n>(facet: FilterFacet): FacetConf<TKey, TValue, TOptionValue, TOption> {\n  const { key, options, searchStateKey, searchApiKeys, type, valueType } = facet\n\n  return {\n    key: searchStateKey as TKey,\n\n    type,\n\n    getOptions(facets: SearchApiFacets) {\n      if (type === 'range') {\n        return extractFacetsApiValues(facets, searchApiKeys, options, type).map(\n          ({ from, to, count }) => {\n            return {\n              value: [tryParseInt(from) ?? 0, tryParseInt(to) ?? 0],\n              count: tryParseInt(count)!,\n            }\n          },\n        )\n      }\n\n      if (type === 'single' && valueType === 'number') {\n        return extractFacetsApiValues(facets, searchApiKeys, options, type).map(\n          ([k, count]) => ({\n            value: tryParseInt(k)!,\n            count: count!,\n          }),\n        )\n      }\n\n      if ((type === 'single' && valueType === 'string') || type === 'multi') {\n        return extractFacetsApiValues(facets, searchApiKeys, options, type).map(\n          ([value, count]) => ({\n            value,\n            count: count!,\n          }),\n        )\n      }\n\n      return options.map((value) => ({\n        value,\n      }))\n    },\n\n    getSearchInput(filters: Partial<SearchState>) {\n      if (searchStateKey.includes('.')) {\n        // TODO: fix on the BE? distances.ski -> distances_ski\n        const newSearchStateKey = searchStateKey.replace('.', '_')\n\n        return {\n          ...omit(mapSearchStateToSearchApiParams(filters), [\n            newSearchStateKey,\n          ]),\n          facet: [newSearchStateKey],\n        }\n      }\n\n      return {\n        ...omit(mapSearchStateToSearchApiParams(filters), options),\n        facet: searchApiKeys,\n      }\n    },\n\n    getValue(state: SearchState) {\n      return get(state, key) as TValue\n    },\n\n    setValue(state: SearchState, value: TValue) {\n      set(state, key, value)\n    },\n  }\n}\n\nexport const FILTER_FACETS: FilterFacet[] = [\n  {\n    key: 'priceRange',\n    enabled: true,\n    searchStateKey: 'priceRange',\n    searchApiKeys: ['price'],\n    type: 'range',\n    valueType: 'number',\n    options: [],\n  },\n  {\n    key: 'bedrooms',\n    enabled: true,\n    searchStateKey: 'bedrooms',\n    searchApiKeys: ['types'],\n    type: 'stepper',\n    valueType: 'number',\n    options: [FILTERS_BEDROOMS_MIN, FILTERS_BEDROOMS_MAX],\n  },\n  {\n    key: 'bathrooms',\n    enabled: true,\n    searchStateKey: 'bathrooms',\n    searchApiKeys: ['types'],\n    type: 'stepper',\n    valueType: 'number',\n    options: [FILTERS_BATHROOMS_MIN, FILTERS_BATHROOMS_MAX],\n  },\n  {\n    key: 'accommodationType',\n    enabled: true,\n    searchStateKey: 'accommodationType',\n    searchApiKeys: ['types'],\n    type: 'single',\n    valueType: 'string',\n    options: ['house', 'apartment'],\n  },\n  {\n    key: 'propertyType',\n    enabled: true,\n    searchStateKey: 'propertyType',\n    searchApiKeys: ['types', 'attributes'],\n    type: 'multi',\n    valueType: 'array',\n    options: ['villa', 'chalet', 'farmhouse', 'studio', 'detached'],\n  },\n  {\n    key: 'starRating',\n    enabled: true,\n    searchStateKey: 'starRating',\n    searchApiKeys: ['stars'],\n    type: 'single',\n    valueType: 'number',\n    options: [3, 4, 5],\n  },\n  {\n    key: 'features',\n    enabled: true,\n    searchStateKey: 'features',\n    searchApiKeys: ['attributes'],\n    type: 'multi',\n    valueType: 'array',\n    options: [\n      'wlan',\n      'aircondition',\n      'parking',\n      'garage',\n      'balcony-or-terrace',\n      'dishwasher',\n      'washingmachine',\n      'tv',\n      'sea_or_lake_view',\n      'bbq',\n      'boat',\n      'cots',\n      'hottub',\n      'fireplace',\n      'sauna',\n      'wheelchair',\n      'charging_station',\n    ],\n  },\n  {\n    key: 'sea',\n    enabled: true,\n    searchStateKey: 'distances.sea',\n    searchApiKeys: ['sea'],\n    type: 'single',\n    valueType: 'number',\n    options: [0, 100, 500, 1000, 5000, 10000],\n  },\n  {\n    key: 'lake',\n    enabled: true,\n    searchStateKey: 'distances.lake',\n    searchApiKeys: ['lake'],\n    type: 'single',\n    valueType: 'number',\n    options: [0, 100, 500, 1000, 5000, 10000],\n  },\n  {\n    key: 'ski',\n    enabled: true,\n    searchStateKey: 'distances.ski',\n    searchApiKeys: ['ski'],\n    type: 'single',\n    valueType: 'number',\n    options: [0, 100, 500, 1000, 5000, 10000],\n  },\n  {\n    key: 'center',\n    enabled: true,\n    searchStateKey: 'distances.center',\n    searchApiKeys: ['center'],\n    type: 'single',\n    valueType: 'number',\n    options: [0, 100, 500, 1000, 5000, 10000],\n  },\n  {\n    key: 'offers',\n    enabled: true,\n    searchStateKey: 'offers',\n    searchApiKeys: ['specials'],\n    type: 'single',\n    valueType: 'string',\n    options: [\n      'special_offer',\n      'last_minute',\n      'early_booker',\n      'cheapcheap',\n      'discount-20',\n    ],\n  },\n  {\n    key: 'holidayType',\n    enabled: true,\n    searchStateKey: 'holidayType',\n    searchApiKeys: ['types', 'attributes', 'themes'],\n    type: 'single',\n    valueType: 'string',\n    options: [\n      'familyfriendly',\n      'holiday-resort',\n      'residence',\n      'citytrips',\n      'utoring',\n    ],\n  },\n  {\n    key: 'special',\n    enabled: true,\n    searchStateKey: 'special',\n    searchApiKeys: ['attributes', 'themes'],\n    type: 'multi',\n    valueType: 'array',\n    options: ['casa', 'swiss_peak', 'workation', 'sustainable'],\n  },\n  {\n    key: 'pool',\n    enabled: true,\n    searchStateKey: 'pool',\n    searchApiKeys: ['attributes'],\n    type: 'single',\n    valueType: 'string',\n    options: ['pool', 'pool-private', 'pool-indoor', 'pool-children'],\n  },\n  {\n    key: 'fishing',\n    enabled: true,\n    searchStateKey: 'fishing',\n    searchApiKeys: ['attributes'],\n    type: 'multi',\n    valueType: 'array',\n    options: ['fishing', 'fishing-certified'],\n  },\n  {\n    key: 'activities',\n    enabled: true,\n    searchStateKey: 'fishing',\n    searchApiKeys: ['attributes'],\n    type: 'multi',\n    valueType: 'array',\n    options: [\n      'fishing',\n      'skiing',\n      'hiking',\n      'golfing',\n      'cycling',\n      'wellness',\n      'tennis',\n      'surfing',\n      'sailing',\n      'mountainbiking',\n      'riding',\n      'crosscountryskiing',\n      'fishing_certified',\n    ],\n  },\n]\n\nexport const FACETS_MAP = FILTER_FACETS.reduce(\n  (acc, facet) => {\n    const { enabled, key } = facet\n\n    if (enabled) {\n      acc[key] = defineFacetConf(facet)\n    }\n\n    return acc\n  },\n  {} as Record<\n    string,\n    FacetConf<\n      keyof SearchState,\n      SearchState[keyof SearchState],\n      ExtractItem<SearchState[keyof SearchState]>,\n      BaseFilterOption<ExtractItem<SearchState[keyof SearchState]>>\n    >\n  >,\n)\n","import { omit } from 'lodash-es'\nimport type { SearchApiParams } from '~/api/search-api.types'\nimport type {\n  SearchState,\n  SearchAppUrlParams,\n  SearchURLParams,\n  StarRatingValue,\n} from '~/composables/search.types'\n\nfunction searchParamsKeysToObject<K extends keyof SearchApiParams>(\n  keys: (K | null | undefined)[] | null | undefined,\n): Record<\n  typeof keys extends (infer R | null | undefined)[] | null | undefined\n    ? R\n    : never,\n  true\n> {\n  return Object.fromEntries((keys || []).filter(Boolean).map((k) => [k, true]))\n}\n\nfunction searchAppUrlParamsToDatesState(\n  params: Pick<\n    SearchAppUrlParams,\n    'checkin' | 'checkout' | 'duration' | 'fuzzyness'\n  > = {},\n): DatePeriodValue | undefined {\n  const { checkin, checkout, duration, fuzzyness } = params\n  const startDate = tryParseDate(checkin)\n  const endDate = tryParseDate(checkout)\n  const type =\n    !!duration && typeof fuzzyness !== 'number' ? 'flexible' : 'exact'\n  return type === 'flexible'\n    ? { type, startDate, endDate, duration }\n    : { type, startDate, endDate, flexDays: fuzzyness || 0 }\n}\n\nfunction datesStateToSearchApiParams(\n  state: DatePeriodValue | undefined | null,\n): Pick<SearchApiParams, 'checkin' | 'checkout' | 'duration'> {\n  if (!state) return {}\n  const { startDate, endDate } = state\n  const checkin = startDate ? toDate(startDate) : undefined\n  const checkout = endDate ? toDate(endDate) : undefined\n  if (state.type === 'exact') {\n    const { flexDays = 0 } = state\n    return {\n      checkin: checkin && toDate(daysSub(checkin, flexDays)),\n      checkout: checkout && toDate(daysAdd(checkout, flexDays)),\n      duration:\n        checkin && checkout ? calculateDuration(checkin, checkout) : undefined,\n    }\n  }\n  return { checkin, checkout, duration: state.duration }\n}\n\nexport function mapSearchStateToSearchApiParams(\n  state: Partial<SearchState>,\n): Omit<SearchApiParams, 'facet' | 'pagesize'> {\n  return removeFalsy({\n    currency: state.currency,\n    season: state.season,\n    brand: state.brand,\n    salesoffice: state.salesoffice,\n\n    country: state.destination?.country,\n    region: state.destination?.region,\n    place: state.destination?.place,\n    code: state.code, // ?\n    geo: state.geo, // ?\n\n    // Dates/Period\n    ...datesStateToSearchApiParams(state.dates),\n\n    // price\n    'min-price': state.priceRange?.[0],\n    maxPrice: state.priceRange?.[1],\n\n    // Map\n    n: state.area?.[0],\n    w: state.area?.[1],\n    s: state.area?.[2],\n    e: state.area?.[3],\n    zoom: state.zoom,\n    lat: state.coordinates?.[0],\n    lon: state.coordinates?.[1],\n    radius: state.radius,\n\n    // distances\n    sea: state.distances?.sea,\n    lake: state.distances?.lake,\n    ski: state.distances?.ski,\n    center: state.distances?.center,\n\n    pax: state.pax,\n    pets: state.pets,\n    minpets: state.minpets,\n\n    accomtype: state.accommodationType,\n    proptype: state.propertyType,\n\n    ...searchParamsKeysToObject(state.features),\n    ...searchParamsKeysToObject([state.pool]),\n    ...searchParamsKeysToObject([state.offers]),\n    ...searchParamsKeysToObject([state.holidayType]),\n    ...searchParamsKeysToObject(state.special),\n    ...searchParamsKeysToObject(state.fishing),\n    ...searchParamsKeysToObject(state.activities),\n\n    stars: state.starRating,\n    rating: state.rating,\n    reviews: state.reviews,\n    bedrooms: state.bedrooms,\n    bathrooms: state.bathrooms,\n\n    discount: state.discount, // ??\n\n    lso: state.lso,\n    bo: state.bo,\n    rooms: state.rooms,\n\n    // search conf\n    page: state.page,\n    pagesize: state.pagesize,\n    sorting: state.sorting,\n\n    // ignore\n    q: state.q,\n  })\n}\n\nfunction enumerationParamsToMultiSelect<\n  Name extends keyof SearchApiParams,\n  Names extends Name[] = Name[],\n>(names: Names, params: SearchApiParams) {\n  return names.reduce((list, name) => {\n    return params[name] ? [...list, name] : list\n  }, [] as unknown[]) as (typeof names)[number][]\n}\n\nfunction enumerationParamsToSingleSelect<\n  Name extends keyof SearchApiParams,\n  Names extends Name[] = Name[],\n>(names: Names, params: SearchApiParams) {\n  return names.find((name) => name in params && params[name]) as Names[number]\n}\n\nexport function mapSearchStateToURLParams(\n  state: Partial<SearchState>,\n): SearchURLParams {\n  // FIXME: Here we are violating the URL/App/API layering!\n  const searchApiParams = mapSearchStateToSearchApiParams(state)\n  return {\n    ...omit(searchApiParams, ['accomtype', 'proptype']),\n    ...searchParamsKeysToObject([state.accommodationType]),\n    ...searchParamsKeysToObject(state.propertyType),\n    sorting: state.sorting,\n  } satisfies SearchURLParams\n}\n\nexport function mapSearchParamsToSearchState(\n  params: SearchApiParams,\n): SearchState {\n  const lat = tryParseFloat(params.lat)\n  const lon = tryParseFloat(params.lon)\n  return {\n    destination: {\n      country: params.country,\n      region: params.region,\n      place: params.place,\n    },\n    dates: searchAppUrlParamsToDatesState(params),\n    accommodationType: enumerationParamsToSingleSelect(\n      ['house', 'apartment'],\n      params,\n    ),\n    propertyType: enumerationParamsToMultiSelect(\n      ['villa', 'chalet', 'farmhouse', 'studio', 'detached'],\n      params,\n    ),\n    features: enumerationParamsToMultiSelect(\n      [\n        'wlan',\n        'aircondition',\n        'parking',\n        'garage',\n        'balcony-or-terrace',\n        'dishwasher',\n        'washingmachine',\n        'tv',\n        'sea_or_lake_view',\n        'bbq',\n        'boat',\n        'cots',\n        'hottub',\n        'fireplace',\n        'sauna',\n        'wheelchair',\n        'charging_station',\n      ],\n      params,\n    ),\n    offers: enumerationParamsToSingleSelect(\n      [\n        'special_offer',\n        'last_minute',\n        'early_booker',\n        'discount-20',\n        'cheapcheap',\n      ],\n      params,\n    ),\n    pool: enumerationParamsToSingleSelect(\n      ['pool', 'pool_indoor', 'pool_children', 'pool_private'],\n      params,\n    ),\n\n    // pax/pets\n    pax: params.pax,\n    pets: params.pets,\n    minpets: params.minpets,\n\n    q: params.q, // TODO Remove? Legacy?\n\n    code: params.code, // ?\n    geo: params.geo, // ?\n\n    // map\n    area:\n      params.n && params.w && params.s && params.e\n        ? [params.n, params.w, params.s, params.e]\n        : undefined,\n    coordinates:\n      lat && lon\n        ? [tryParseFloat(params.lat), tryParseFloat(params.lon)]\n        : undefined,\n    zoom: tryParseInt(params.zoom),\n    radius: params.radius,\n\n    priceRange: [\n      tryParseInt(params['min-price']) ?? 0,\n      tryParseInt(params.maxPrice) ?? 0,\n    ],\n\n    // numeric values\n    starRating: tryParseInt(params.stars) as StarRatingValue,\n    rating: tryParseInt(params.rating),\n    reviews: tryParseInt(params.reviews),\n    bedrooms: tryParseInt(params.bedrooms),\n    bathrooms: tryParseInt(params.bathrooms),\n\n    distances: {\n      sea: tryParseInt(params.sea),\n      lake: tryParseInt(params.lake),\n      ski: tryParseInt(params.ski),\n      center: tryParseInt(params.center),\n    },\n\n    // Holiday Type\n    holidayType: enumerationParamsToSingleSelect(\n      ['familyfriendly', 'holiday_resort', 'residence', 'citytrips', 'utoring'],\n      params,\n    ),\n\n    // Something special\n    special: enumerationParamsToMultiSelect(\n      ['swiss_peak', 'casa', 'workation', 'sustainable'],\n      params,\n    ),\n\n    // Fishing\n    fishing: enumerationParamsToMultiSelect(\n      ['fishing', 'fishing_certified'],\n      params,\n    ),\n\n    // Activities in resort\n    activities: enumerationParamsToMultiSelect(\n      [\n        'skiing',\n        'hiking',\n        'golfing',\n        'cycling',\n        'wellness',\n        'tennis',\n        'surfing',\n        'sailing',\n        'mountainbiking',\n        'riding',\n        'crosscountryskiing',\n      ],\n      params,\n    ),\n\n    // ???\n    lso: params.lso,\n    discount: params.discount,\n    bo: params.bo,\n    rooms: params.rooms,\n    salesoffice: params.salesoffice,\n\n    // some sort of confs?\n    currency: params.currency,\n    season: params.season,\n    brand: params.brand,\n\n    // configuration\n    page: tryParseInt(params.page),\n    pagesize: tryParseInt(params.pagesize),\n    sorting: params.sorting,\n  } satisfies SearchState\n}\n\nexport function buildSearchUrl(\n  filters: SearchURLParams,\n  {\n    prefix,\n    defaultPath,\n    filtersConf,\n  }: {\n    prefix?: string\n    defaultPath: string\n    filtersConf: SearchFilterConf[]\n  },\n): URL | undefined {\n  const { country: countryCode, region: regionCode, place: placeCode } = filters\n  const countrySlug =\n    countryCode && getDestinationFacetByCode(countryCode)?.slug\n  const regionSlug = regionCode && getDestinationFacetByCode(regionCode)?.slug\n  const placeSlug = placeCode && getDestinationFacetByCode(placeCode)?.slug\n\n  // any slug is not-available -> return undefined\n  if (\n    (countryCode && !countrySlug) ||\n    (regionCode && !regionSlug) ||\n    (placeCode && !placeSlug)\n  )\n    return\n\n  const maxPathLength = placeCode || regionCode ? 3 : 2\n\n  const confs = [\n    {\n      filter: 'country',\n      slug: {\n        value: countryCode,\n        path:\n          (countryCode && getDestinationFacetByCode(countryCode)?.slug) ||\n          countryCode,\n      },\n    },\n    {\n      filter: 'region',\n      slug: {\n        value: regionCode,\n        path:\n          (regionCode && getDestinationFacetByCode(regionCode)?.slug) ||\n          regionCode,\n      },\n    },\n    {\n      filter: 'place',\n      slug: {\n        value: placeCode,\n        path:\n          (placeCode && getDestinationFacetByCode(placeCode)?.slug) ||\n          placeCode,\n      },\n    },\n    ...(filtersConf ?? []),\n  ] as (Omit<SearchFilterConf, 'filter'> & { filter: keyof SearchURLParams })[]\n\n  const slugs = new Map(\n    confs\n      .filter(({ slug, filter }) => filters[filter] && slug.value && slug.path)\n      .map(({ slug, filter }) => {\n        if (['sea', 'lake', 'ski', 'center'].includes(filter)) {\n          return slug.value === filters[filter]\n            ? [filter, slug.path]\n            : undefined\n        }\n        if (filter === 'pax') {\n          return slug.value &&\n            parseInt(slug.value) === tryParseInt(filters[filter]?.toString())\n            ? [filter, slug.path]\n            : undefined\n        }\n        return [filter, slug.path]\n      })\n      .filter(Boolean)\n      .slice(0, maxPathLength) as [string, string][],\n  )\n\n  const path = slugs.size\n    ? buildPath(prefix, ...slugs.values())\n    : buildPath(prefix, defaultPath)\n\n  const query = Object.fromEntries(\n    Object.entries(filters).filter(([key]) => !slugs.has(key)),\n  )\n\n  const url = useRequestURL() // safe here as it does not use nuxtApp ctx on client\n  url.pathname = path\n  url.search = new URLSearchParams(asQueryParams(unpack(query))).toString()\n  return url\n}\n","import { pick } from 'lodash-es'\nimport type { SearchApiParams } from './search-api.types'\n\nexport const SEARCH_API_PAGESIZE_DEFAULT = 20\n\nexport const SEARCH_API_ALLOWED_PARAMS = [\n  'language',\n  'currency',\n  'season',\n  'page',\n  'pagesize',\n  'sorting',\n  'brand',\n  'salesoffice',\n  'q',\n  'checkin',\n  'checkout',\n  'duration',\n  'country',\n  'region',\n  'place',\n  'code',\n  'geo',\n  'n',\n  'w',\n  's',\n  'e',\n  'zoom',\n  'lat',\n  'lon',\n  'radius',\n  'pax',\n  'pets',\n  'house',\n  'apartment',\n  'villa',\n  'chalet',\n  'farmhouse',\n  'detached',\n  'stars',\n  'rating',\n  'reviews',\n  'bedrooms',\n  'bathrooms',\n  'sea',\n  'lake',\n  'ski',\n  'center',\n  'wlan',\n  'aircondition',\n  'parking',\n  'garage',\n  'balcony-or-terrace',\n  'dishwasher',\n  'washingmachine',\n  'tv',\n  'sea_or_lake_view',\n  'bbq',\n  'boat',\n  'cots',\n  'hottub',\n  'fireplace',\n  'sauna',\n  'wheelchair',\n  'charging_station',\n  'pool',\n  'pool_private',\n  'pool_indoor',\n  'pool_children',\n  'min-price',\n  'maxPrice',\n  'discount',\n  'special_offer',\n  'last_minute',\n  'early_booker',\n  'discount-20',\n  'cheapcheap',\n  'familyfriendly',\n  'holiday_resort',\n  'residence',\n  'citytrips',\n  'utoring',\n  'casa',\n  'swiss_peak',\n  'workation',\n  'sustainable',\n  'skiing',\n  'hiking',\n  'golfing',\n  'cycling',\n  'wellness',\n  'tennis',\n  'surfing',\n  'sailing',\n  'mountainbiking',\n  'riding',\n  'crosscountryskiing',\n  'fishing',\n  'fishing_certified',\n  'studio',\n  'lso',\n  'bo',\n  'rooms',\n  'facet',\n  'proptype',\n  'accomtype',\n  'minpets',\n] as const satisfies ReadonlyArray<keyof SearchApiParams>\n\n/**\n * Maps param values and leaves only those params that the new Search API can accept:\n * - converts date fields to server date format\n * - removes redundant params because otherwise the API will return \"Bad Request\"\n *\n * @param params Raw params.\n * @returns Only paras that the new Search API can accept.\n */\nexport function mapSearchApiParams<T extends SearchApiParams>(\n  params: T,\n): SearchApiParams {\n  const [checkin, checkout] = [params.checkin, params.checkout].map((date) =>\n    date ? toServerDate(date) : undefined,\n  )\n\n  return pick({ ...params, checkin, checkout }, SEARCH_API_ALLOWED_PARAMS)\n}\n\n/**\n * Filling in the global doc position - mainly used for tracking.\n * Not the best way and place for this, but at least centralized.\n *\n * @param result Search result\n * @param query Initial search query\n * @returns The same result object with filled in `position` in its `docs`\n */\nexport function setDocPosition(\n  result: SearchApiResult,\n  query: SearchApiParams,\n) {\n  const page = query.page ?? 1\n  const pagesize = query.pagesize ?? SEARCH_API_PAGESIZE_DEFAULT\n\n  result.docs.forEach(\n    (doc, index) => (doc.position = pagesize * (page - 1) + index + 1),\n  )\n\n  return result\n}\n","import type { UseQueryOptions } from '@tanstack/vue-query'\nimport { useQuery } from '@tanstack/vue-query'\nimport type { SearchApiParams, SearchApiResult } from './search-api.types'\n\ntype SearchQueryOptions<R = SearchApiResult> = Partial<\n  Omit<UseQueryOptions<R>, 'select'>\n> & {\n  enabled?: MaybeRefOrGetter<boolean | undefined>\n  select?(result: SearchApiResult, params: SearchApiParams): R\n}\n\nexport function useRedesignSearchQuery<R = SearchApiResult>(\n  query: MaybeRefOrGetter<SearchApiParams>,\n  options: SearchQueryOptions<R> = {},\n) {\n  const fetch = useRequestFetch()\n  const l10n = useL10N()\n  const params = computed(() =>\n    sortKeys({ language: l10n.language, ...removeEmpty(toValue(query)) }),\n  )\n\n  return useQuery({\n    ...(options as Omit<typeof options, 'enabled' | 'select'>),\n    placeholderData: (prev: SearchApiResult | undefined) => prev, // Keep previous data between requests\n    enabled: computed(\n      () => toValue(options.enabled) !== false && import.meta.client,\n    ),\n    queryKey: ['search-api', 'accomtrips', params, query] as const,\n    queryFn({ queryKey: [_, __, q], signal }) {\n      return fetch<SearchApiResult>('/search-api/v1/engines/accomtrips', {\n        query: mapSearchApiParams(q),\n        signal,\n      })\n    },\n    select(result) {\n      return (\n        options.select ? options.select(result, toValue(query)) : result\n      ) as R\n    },\n  })\n}\n\nexport function useRedesignSearchAccommodationsQuery(\n  query: MaybeRefOrGetter<SearchApiParams>,\n  options: Omit<SearchQueryOptions, 'select'> = {},\n) {\n  return useRedesignSearchQuery(query, {\n    ...options,\n    select(result) {\n      return setDocPosition(result, toValue(query))\n    },\n  })\n}\n","import { cloneDeep } from 'lodash-es'\n\nexport function propToRef<\n  T extends object,\n  K extends keyof T,\n  V extends T[K],\n  D extends Exclude<V, undefined | null> | undefined,\n  R extends D extends undefined ? V : Exclude<V, undefined | null>,\n>(objRef: Ref<T>, key: K, defaultValue?: D): Ref<R> {\n  return customRef<R>(() => ({\n    get() {\n      return (objRef.value[key] ?? defaultValue) as R\n    },\n    set(value) {\n      objRef.value[key] = value\n      triggerRef(objRef) // updating property of a plain object inside ref does not trigger any update itself\n    },\n  })) as Ref<R>\n}\n\nexport function useIntermediateState<T>(originalState: Ref<T>) {\n  const state = ref<T>(cloneDeep(unref(originalState))) as Ref<T>\n\n  return {\n    state,\n    apply() {\n      originalState.value = state.value\n    },\n  }\n}\n","/**\n * Mimics  {@link https://vue-i18n.intlify.dev/api/composition.html#usei18n | `useI18n`} of {@link https://github.com/intlify/vue-i18n | @intlify/vue-i18n}.\n *\n * @todo Remove this composable after final transition to {@link https://github.com/intlify/vue-i18n | @intlify/vue-i18n}.\n */\nexport function useI18n() {\n  return useNuxtApp().$i18n\n}\n","import type { DatePeriod } from '~/utils/dates'\n\nexport function getInitialDatePeriodFromFlexTrip(\n  flexTrip: Pick<\n    ReturnType<typeof useFlexTrip>,\n    'range' | 'fuzzyness' | 'duration'\n  >,\n): DatePeriod | undefined {\n  const { start: startDate, end: endDate } = flexTrip.range\n\n  const value = {\n    startDate,\n    endDate,\n    fuzziness: flexTrip.fuzzyness,\n    duration: flexTrip.duration,\n  }\n\n  if (!isValidDatePeriod(value)) return undefined\n\n  return value\n}\n\nexport function useDatesTripText(\n  dateState: MaybeRefOrGetter<DatePeriod | undefined>,\n) {\n  const { t } = useI18n()\n\n  return computed(() => {\n    const value = toValue(dateState)\n\n    return getDatesTripText(t, value)\n  })\n}\n\nexport function getDatesTripText(\n  t: TranslateFn,\n  value: DatePeriod | undefined,\n) {\n  if (!value || !isValidDatePeriod(value)) {\n    return ''\n  }\n\n  if (isFlexDatePeriod(value)) {\n    return t(`www.components.elements.FlexibleDates.night_between`, {\n      duration: getDatesDurationText(t, value.duration),\n      start: formatDatetime(toDate(value.startDate), '2-digit-short'),\n      end: formatDatetime(toDate(value.endDate), '2-digit-short'),\n    })\n  }\n\n  return (\n    [value.startDate, value.endDate]\n      .map((date) => formatDatetime(toDate(date), undefined))\n      .join(' - ') +\n    (isFuzzyDatePeriod(value) ? getDatesFuzzinessText(t, value.fuzziness) : '')\n  )\n}\n\nexport function getDatesDurationText(t: TranslateFn, durationVal?: number) {\n  if (!durationVal) return ''\n  return durationVal % 7\n    ? t(`www.components.elements.FlexibleDates.night_s`, {}, durationVal)\n    : t(`www.components.elements.FlexibleDates.week_s`, {}, durationVal / 7)\n}\n\nexport function getDatesFuzzinessText(t: TranslateFn, flexDays: number = 0) {\n  return flexDays > 0\n    ? ` ± ${t(`www.components.elements.FlexibleDates.night_s`, {}, flexDays)}`\n    : ''\n}\n","import { useConfDataQuery } from '~/api/conf-api'\nimport useCurrentURL from '~/composables/useCurrentURL'\nimport { buildPath, searchParamsToSortedObject } from '~/utils/urls'\nimport {\n  mapSearchStateToSearchApiParams,\n  buildSearchUrl,\n} from './search.mappers'\nimport type { SearchState } from './search.types'\nimport {\n  FACETS_MAP,\n  isSearchURLParam,\n  SEARCH_PAGE_DEFAULT_PATH,\n  SEARCH_PAGE_TYPE,\n  addDestinationFacet,\n  triggerDestinationFacetsRef,\n} from './search.conf'\nimport { get, isObject, set } from 'lodash-es'\n\nexport function useRouteSearchState(observingUrl = useRoute()) {\n  const currentURL = useCurrentURL(observingUrl)\n  const { data, isLoading, suspense } = useConfDataQuery(currentURL)\n  return {\n    searchState: computed(() => {\n      const dataValue = toValue(data) || ({} as ConfAPIPagesResponse)\n      const { pagetype, destination } = dataValue\n      if (pagetype !== SEARCH_PAGE_TYPE || !destination) return\n      return mapRouteConfToSearchState(\n        getDestinationQuery(destination),\n        destination?.filters,\n        currentURL.value.searchParams,\n      )\n    }),\n    isLoading,\n    suspense,\n  }\n}\n\nfunction mapRouteConfToSearchState(\n  destination?: Partial<Destination>,\n  filters?: Filter[],\n  queryParams?: URLSearchParams,\n): SearchState {\n  const paramsFromURLQueryParams = Object.fromEntries(\n    Object.entries(queryParams ? searchParamsToSortedObject(queryParams) : {})\n      .map((entry) => (isSearchURLParam(entry[0]) ? entry : undefined))\n      .filter(Boolean) as [string, unknown][],\n  )\n\n  return {\n    ...mapSearchParamsToSearchState({\n      ...paramsFromURLQueryParams,\n      ...(filters?.reduce(\n        (params, { key, value }) => {\n          Object.assign(params, { [key]: value === 'true' ? true : value })\n          return params\n        },\n        {} as Record<string, unknown>,\n      ) || {}),\n    }),\n    destination,\n  } satisfies SearchState\n}\n\nexport function defineSearchState(initialState: MaybeRef<SearchState>) {\n  const stateRef = useState('search-state', () => toValue(initialState))\n  provide('search-state', stateRef)\n  useSyncDestinationsFacet(stateRef)\n  return stateRef\n}\n\nfunction useSyncDestinationsFacet(searchState: MaybeRef<SearchState>) {\n  const { data: facetData } = useRedesignSearchQuery(\n    computed(() => ({\n      country: unref(searchState)?.destination?.country,\n      region: unref(searchState)?.destination?.region,\n      facet: ['countries', 'regions', 'places'],\n      pagesize: -1,\n    })),\n  )\n\n  watch(facetData, (data) => {\n    if (!data || !data.facets) return\n    ;[\n      ...(data.facets.countries || []),\n      ...(data.facets.regions || []),\n      ...(data.facets.places || []),\n    ].forEach((destFacet) => {\n      addDestinationFacet(destFacet)\n    })\n    triggerDestinationFacetsRef()\n  })\n}\n\nexport function useSearchState() {\n  const searchState = inject<Ref<SearchState>>('search-state')\n  if (!searchState) {\n    throw new Error('`search-state` context is not available')\n  }\n  return searchState\n}\n\nexport function useSearchGeneratedUrl(searchState: Ref<SearchState>) {\n  const { data } = useConfDataQuery(useConfDataURL(useCurrentURL()))\n\n  return computed(() => {\n    if (!data.value || data.value.pagetype !== SEARCH_PAGE_TYPE) return\n\n    const prefixSearchPage =\n      data.value.conf?.prefixSearchpage || SEARCH_PAGE_DEFAULT_PATH\n    const langPrefix = data.value.languageprefix\n    const { searchfilterconfs = [] } = (data.value.additionalBody ||\n      {}) as SearchPageBody\n\n    return buildSearchUrl(mapSearchStateToURLParams(searchState.value), {\n      prefix: langPrefix,\n      defaultPath: prefixSearchPage,\n      filtersConf: searchfilterconfs,\n    })\n  })\n}\n\nexport function useSearchResults(searchState: Ref<SearchState>) {\n  const searchApiParams = computed(() =>\n    mapSearchStateToSearchApiParams(searchState.value),\n  )\n\n  const {\n    data,\n    isLoading: isSearchLoading,\n    isPending,\n    isFetching,\n  } = useRedesignSearchAccommodationsQuery(searchApiParams)\n\n  const items = computed(() => data.value?.docs || [])\n  const currentPage = propToRef(searchState, 'page', 1)\n  const totalPages = computed(() => data.value?.totalPages ?? 0)\n  const total = computed(() => data.value?.totalHits ?? 0)\n  const isLoading = computed(() => isSearchLoading.value || isPending.value)\n\n  return reactive({\n    isLoading,\n    isFetching,\n    items,\n    currentPage,\n    total,\n    totalPages,\n  })\n}\n\n// TODO: update with proper typing\nexport type FilterFacetComposable = {\n  value: any\n  options: any\n  isEmpty: boolean\n  counts: Map<any, any>\n  countsLoading: boolean\n  loading: boolean\n}\nexport type FilterFacetsComposable = Record<string, FilterFacetComposable>\n\nexport function useFacets(\n  searchState: Ref<SearchState>,\n  keys: (keyof typeof FACETS_MAP)[] = [...Object.keys(FACETS_MAP)],\n): FilterFacetsComposable {\n  return readonly(\n    reactive(\n      keys.reduce(\n        (acc, key) => ({ ...acc, [key]: useFacet(searchState, key) }),\n        {},\n      ),\n    ),\n  )\n}\n\nexport function useFacet(\n  searchState: Ref<SearchState>,\n  name: keyof typeof FACETS_MAP,\n): FilterFacetComposable {\n  const facetConf = FACETS_MAP[name]\n\n  if (!facetConf) {\n    throw new Error(`Facet '${name}' has missing configuration`)\n  }\n\n  const generateUniqueKey = (value: string | number | object) => {\n    if (isObject(value)) {\n      return Object.values(value).join('-')\n    }\n\n    return value\n  }\n\n  const {\n    data: facetData,\n    isPending: facetPending,\n    isLoading: facetLoading,\n  } = useRedesignSearchQuery(\n    computed(() => ({\n      ...facetConf.getSearchInput({\n        destination: searchState.value?.destination,\n      }),\n      pagesize: -1,\n    })),\n  )\n\n  const {\n    data: countsData,\n    isPending: countsPending,\n    isLoading: countsLoading,\n  } = useRedesignSearchQuery(\n    computed(() => ({\n      ...facetConf.getSearchInput(searchState.value),\n      pagesize: -1,\n    })),\n    // { enabled: computed(() => !toValue(isDestinationLoading)) },\n  )\n\n  const counts = computed(() => {\n    const countsMap = new Map()\n    ;(countsData.value?.facets\n      ? facetConf.getOptions(countsData.value.facets)\n      : []\n    ).forEach((opt) => countsMap.set(generateUniqueKey(opt.value), opt.count))\n    return countsMap\n  })\n\n  const options = computed(() => {\n    const countsMap = counts.value\n\n    return (\n      facetData.value?.facets\n        ? facetConf.getOptions(facetData.value.facets)\n        : []\n    ).map((opt) => {\n      return { ...opt, count: countsMap.get(generateUniqueKey(opt.value)) ?? 0 }\n    })\n  })\n\n  const value = customRef(() => ({\n    get() {\n      return facetConf.getValue(searchState.value)\n    },\n    set(val) {\n      facetConf.setValue(searchState.value, val)\n      triggerRef(searchState) // updating property of a plain object inside ref does not trigger any update itself\n    },\n  }))\n\n  const isEmpty = computed(() => !!value.value)\n\n  return reactive({\n    value,\n    isEmpty,\n    options,\n    counts,\n    countsLoading: computed(() => countsLoading.value || countsPending.value),\n    loading: computed(() => facetLoading.value || facetPending.value),\n  })\n}\n\nexport function useSearchDestinationBreadcrumbs() {\n  const { data } = useConfDataQuery(useConfDataURL(useCurrentURL()))\n\n  return computed(() => {\n    if (!data.value?.destination) return []\n\n    const { languageprefix: prefix, destination } = data.value\n    const { country, region, place } = splitDestinationPath(destination.urlPath)\n\n    return [\n      { name: destination.country, slugs: [country] },\n      { name: destination.region, slugs: [country, region] },\n      { name: destination.place, slugs: [country, region, place] },\n    ]\n      .filter(({ name }) => !!name)\n      .map(({ name, slugs }) => ({ name, path: buildPath(prefix, ...slugs) }))\n  })\n}\n\nexport type FilterFacetSelected = { key: keyof SearchState; label: string }\n\nexport function useSelectedSearchStateValues(\n  searchState: Ref<SearchState>,\n  skipKeys: (keyof typeof FACETS_MAP)[] = [\n    'destination',\n    'dates',\n    'pax',\n    'minpets',\n    'page',\n    'sort',\n  ],\n) {\n  const conf = useConfdata()\n  const { t } = useI18n()\n\n  const trPrefixFacets = 'www.facets.'\n  const trPrefixSearch = 'www.search.'\n\n  const toLabel = (keys: [string, string], value: string | number) => {\n    return `${t(`${trPrefixFacets}${keys[0]}` as TranslationKey)}: ${t(`${trPrefixSearch}${keys[1]}.${value}` as TranslationKey)}`\n  }\n\n  const selected = computed(() =>\n    Object.keys(searchState.value)\n      .flatMap((key) => {\n        const value = get(searchState.value, key)\n\n        if (skipKeys.includes(key)) {\n          return undefined\n        }\n\n        if (key === 'dates') {\n          return isValidDatePeriod(value)\n            ? { key: 'dates', label: getDatesTripText(t, value) }\n            : undefined\n        }\n\n        if (key === 'priceRange') {\n          const min = value[0]\n          const max = value[1]\n\n          return min && max\n            ? {\n                key,\n                label: `${conf.currency} ${min} - ${conf.currency} ${max}`,\n              }\n            : undefined\n        }\n\n        if (Array.isArray(value)) {\n          return value.flatMap((val, index) =>\n            val\n              ? {\n                  key: `${key}[${index}]`,\n                  label: `${t(`${trPrefixSearch}${key}.${val}` as TranslationKey)}`,\n                }\n              : undefined,\n          )\n        }\n\n        if (isObject(value)) {\n          return Object.keys(value).flatMap((innerKey) => {\n            const innerValue = get(value, innerKey)\n\n            return innerValue\n              ? {\n                  key: `${key}.${innerKey}`,\n                  label: toLabel([innerKey, key], innerValue),\n                }\n              : undefined\n          })\n        }\n\n        return value ? { key, label: toLabel([key, key], value) } : undefined\n      })\n      .filter(Boolean),\n  )\n\n  const remove = (key: string) => {\n    if (key === 'priceRange') {\n      return set(searchState.value, key, [0, 0])\n    }\n\n    return set(searchState.value, key, undefined)\n  }\n\n  const removeAll = () => {\n    Object.keys(searchState.value).forEach((key) => {\n      const value = get(searchState.value, key)\n\n      if (skipKeys.includes(key)) {\n        return undefined\n      }\n\n      if (key === 'priceRange') {\n        return set(searchState.value, key, [0, 0])\n      }\n\n      if (Array.isArray(value)) {\n        return set(searchState.value, key, [])\n      }\n\n      if (isObject(value)) {\n        return Object.keys(value).forEach((innerKey) => {\n          return set(searchState.value, `${key}.${innerKey}`, undefined)\n        })\n      }\n\n      return set(searchState.value, key, undefined)\n    })\n  }\n\n  return {\n    selected: readonly(selected),\n    remove,\n    removeAll,\n  }\n}\n","import type { ParamsContext } from '~/modules/params/params.types'\n\nexport const SEARCH_DEBOUNCE_TIME = 250\n\n/**\n * Creates a query object from the URL, path parameters and search configuration.\n */\nexport function createSearchQuery(\n  path: string,\n  params: ParamsContext,\n  destination?: Destination,\n  searchFilterConfs?: SearchFilterConf[],\n): Params {\n  // TODO maybe use `destination.urlPath` instead of `path`, does it have always `urlPath` prop\n  const pathParts = path.split('/').filter((p) => !!p)\n\n  let q: Params = {\n    ...getDestinationQuery(destination || {}),\n    ...(params.all as Record<string, string | number>),\n  }\n\n  for (const conf of searchFilterConfs || []) {\n    if (!pathParts?.includes(conf.slug.path)) continue\n\n    const filterName = conf.filter\n\n    if (['sea', 'lake', 'ski', 'center', 'pax'].includes(filterName)) {\n      q[conf.filter] = conf.slug.value\n    } else {\n      q[conf.filter] = 'true'\n    }\n  }\n\n  // Deleting falsy and iframe values\n  const { iframe } = params\n  q = Object.fromEntries(\n    Object.entries(q)\n      .filter(([, value]) => value)\n      .filter(([key]) => !iframe || (key !== 'iframe' && !(key in iframe))),\n  )\n\n  return q\n}\n","export default defineNuxtRouteMiddleware(async (to) => {\n  const { pagetype, previousPagetype, additionalBody, destination } =\n    useConfdata()\n\n  // setFilter runs only on server and when page-type changes to `search`\n  if (\n    pagetype !== 'search' ||\n    (!import.meta.server && previousPagetype === 'search')\n  )\n    return\n\n  const isRedesign = useFlag('srp-redesign')\n\n  if (isRedesign.value) {\n    const { suspense } = useRouteSearchState(to)\n    await suspense()\n    return\n  }\n\n  const params = useParams()\n  const { searchfilterconfs } = additionalBody as SearchPageBody\n  const searchQuery = createSearchQuery(\n    to.path,\n    params,\n    destination,\n    searchfilterconfs,\n  )\n\n  useSearch().setFilter(searchQuery, { reset: true })\n})\n","import { hasProtocol } from \"ufo\";\nimport { defineNuxtRouteMiddleware } from \"../composables/router.js\";\nimport { getRouteRules } from \"../composables/manifest.js\";\nexport default defineNuxtRouteMiddleware(async (to) => {\n  if (import.meta.server || import.meta.test) {\n    return;\n  }\n  const rules = await getRouteRules(to.path);\n  if (rules.redirect) {\n    if (hasProtocol(rules.redirect, { acceptRelative: true })) {\n      window.location.href = rules.redirect;\n      return false;\n    }\n    return rules.redirect;\n  }\n});\n","import _00_45redirect_45global from \"/myapp/middleware/00.redirect.global.ts\";\nimport _01_45ip_45global from \"/myapp/middleware/01.ip.global.ts\";\nimport _02_45params_45global from \"/myapp/middleware/02.params.global.ts\";\nimport _03_45partner_45global from \"/myapp/middleware/03.partner.global.ts\";\nimport _04_45ids_45global from \"/myapp/middleware/04.ids.global.ts\";\nimport _06_45conf_45global from \"/myapp/middleware/06.conf.global.ts\";\nimport _07_45ab_45global from \"/myapp/middleware/07.ab.global.ts\";\nimport _08_45auth_45global from \"/myapp/middleware/08.auth.global.ts\";\nimport _09_45user_45global from \"/myapp/middleware/09.user.global.ts\";\nimport _10_45tracking_45global from \"/myapp/middleware/10.tracking.global.ts\";\nimport _11_45search_45global from \"/myapp/middleware/11.search.global.ts\";\nimport manifest_45route_45rule from \"/myapp/node_modules/nuxt/dist/app/middleware/manifest-route-rule.js\";\nexport const globalMiddleware = [\n  _00_45redirect_45global,\n  _01_45ip_45global,\n  _02_45params_45global,\n  _03_45partner_45global,\n  _04_45ids_45global,\n  _06_45conf_45global,\n  _07_45ab_45global,\n  _08_45auth_45global,\n  _09_45user_45global,\n  _10_45tracking_45global,\n  _11_45search_45global,\n  manifest_45route_45rule\n]\nexport const namedMiddleware = {}","import { computed, defineComponent, h, isReadonly, reactive } from \"vue\";\nimport { isEqual, joinURL, parseQuery, stringifyParsedURL, stringifyQuery, withoutBase } from \"ufo\";\nimport { createError } from \"h3\";\nimport { defineNuxtPlugin, useRuntimeConfig } from \"../nuxt.js\";\nimport { getRouteRules } from \"../composables/manifest.js\";\nimport { clearError, showError } from \"../composables/error.js\";\nimport { navigateTo } from \"../composables/router.js\";\nimport { globalMiddleware } from \"#build/middleware\";\nimport { appManifest as isAppManifestEnabled } from \"#build/nuxt.config.mjs\";\nfunction getRouteFromPath(fullPath) {\n  if (typeof fullPath === \"object\") {\n    fullPath = stringifyParsedURL({\n      pathname: fullPath.path || \"\",\n      search: stringifyQuery(fullPath.query || {}),\n      hash: fullPath.hash || \"\"\n    });\n  }\n  const url = new URL(fullPath.toString(), import.meta.client ? window.location.href : \"http://localhost\");\n  return {\n    path: url.pathname,\n    fullPath,\n    query: parseQuery(url.search),\n    hash: url.hash,\n    // stub properties for compat with vue-router\n    params: {},\n    name: void 0,\n    matched: [],\n    redirectedFrom: void 0,\n    meta: {},\n    href: fullPath\n  };\n}\nexport default defineNuxtPlugin({\n  name: \"nuxt:router\",\n  enforce: \"pre\",\n  setup(nuxtApp) {\n    const initialURL = import.meta.client ? withoutBase(window.location.pathname, useRuntimeConfig().app.baseURL) + window.location.search + window.location.hash : nuxtApp.ssrContext.url;\n    const routes = [];\n    const hooks = {\n      \"navigate:before\": [],\n      \"resolve:before\": [],\n      \"navigate:after\": [],\n      \"error\": []\n    };\n    const registerHook = (hook, guard) => {\n      hooks[hook].push(guard);\n      return () => hooks[hook].splice(hooks[hook].indexOf(guard), 1);\n    };\n    const baseURL = useRuntimeConfig().app.baseURL;\n    const route = reactive(getRouteFromPath(initialURL));\n    async function handleNavigation(url, replace) {\n      try {\n        const to = getRouteFromPath(url);\n        for (const middleware of hooks[\"navigate:before\"]) {\n          const result = await middleware(to, route);\n          if (result === false || result instanceof Error) {\n            return;\n          }\n          if (typeof result === \"string\" && result.length) {\n            return handleNavigation(result, true);\n          }\n        }\n        for (const handler of hooks[\"resolve:before\"]) {\n          await handler(to, route);\n        }\n        Object.assign(route, to);\n        if (import.meta.client) {\n          window.history[replace ? \"replaceState\" : \"pushState\"]({}, \"\", joinURL(baseURL, to.fullPath));\n          if (!nuxtApp.isHydrating) {\n            await nuxtApp.runWithContext(clearError);\n          }\n        }\n        for (const middleware of hooks[\"navigate:after\"]) {\n          await middleware(to, route);\n        }\n      } catch (err) {\n        if (import.meta.dev && !hooks.error.length) {\n          console.warn(\"No error handlers registered to handle middleware errors. You can register an error handler with `router.onError()`\", err);\n        }\n        for (const handler of hooks.error) {\n          await handler(err);\n        }\n      }\n    }\n    const currentRoute = computed(() => route);\n    const router = {\n      currentRoute,\n      isReady: () => Promise.resolve(),\n      // These options provide a similar API to vue-router but have no effect\n      options: {},\n      install: () => Promise.resolve(),\n      // Navigation\n      push: (url) => handleNavigation(url, false),\n      replace: (url) => handleNavigation(url, true),\n      back: () => window.history.go(-1),\n      go: (delta) => window.history.go(delta),\n      forward: () => window.history.go(1),\n      // Guards\n      beforeResolve: (guard) => registerHook(\"resolve:before\", guard),\n      beforeEach: (guard) => registerHook(\"navigate:before\", guard),\n      afterEach: (guard) => registerHook(\"navigate:after\", guard),\n      onError: (handler) => registerHook(\"error\", handler),\n      // Routes\n      resolve: getRouteFromPath,\n      addRoute: (parentName, route2) => {\n        routes.push(route2);\n      },\n      getRoutes: () => routes,\n      hasRoute: (name) => routes.some((route2) => route2.name === name),\n      removeRoute: (name) => {\n        const index = routes.findIndex((route2) => route2.name === name);\n        if (index !== -1) {\n          routes.splice(index, 1);\n        }\n      }\n    };\n    nuxtApp.vueApp.component(\"RouterLink\", defineComponent({\n      functional: true,\n      props: {\n        to: {\n          type: String,\n          required: true\n        },\n        custom: Boolean,\n        replace: Boolean,\n        // Not implemented\n        activeClass: String,\n        exactActiveClass: String,\n        ariaCurrentValue: String\n      },\n      setup: (props, { slots }) => {\n        const navigate = () => handleNavigation(props.to, props.replace);\n        return () => {\n          const route2 = router.resolve(props.to);\n          return props.custom ? slots.default?.({ href: props.to, navigate, route: route2 }) : h(\"a\", { href: props.to, onClick: (e) => {\n            e.preventDefault();\n            return navigate();\n          } }, slots);\n        };\n      }\n    }));\n    if (import.meta.client) {\n      window.addEventListener(\"popstate\", (event) => {\n        const location = event.target.location;\n        router.replace(location.href.replace(location.origin, \"\"));\n      });\n    }\n    nuxtApp._route = route;\n    nuxtApp._middleware = nuxtApp._middleware || {\n      global: [],\n      named: {}\n    };\n    const initialLayout = nuxtApp.payload.state._layout;\n    nuxtApp.hooks.hookOnce(\"app:created\", async () => {\n      router.beforeEach(async (to, from) => {\n        to.meta = reactive(to.meta || {});\n        if (nuxtApp.isHydrating && initialLayout && !isReadonly(to.meta.layout)) {\n          to.meta.layout = initialLayout;\n        }\n        nuxtApp._processingMiddleware = true;\n        if (import.meta.client || !nuxtApp.ssrContext?.islandContext) {\n          const middlewareEntries = /* @__PURE__ */ new Set([...globalMiddleware, ...nuxtApp._middleware.global]);\n          if (isAppManifestEnabled) {\n            const routeRules = await nuxtApp.runWithContext(() => getRouteRules(to.path));\n            if (routeRules.appMiddleware) {\n              for (const key in routeRules.appMiddleware) {\n                const guard = nuxtApp._middleware.named[key];\n                if (!guard) {\n                  return;\n                }\n                if (routeRules.appMiddleware[key]) {\n                  middlewareEntries.add(guard);\n                } else {\n                  middlewareEntries.delete(guard);\n                }\n              }\n            }\n          }\n          for (const middleware of middlewareEntries) {\n            const result = await nuxtApp.runWithContext(() => middleware(to, from));\n            if (import.meta.server) {\n              if (result === false || result instanceof Error) {\n                const error = result || createError({\n                  statusCode: 404,\n                  statusMessage: `Page Not Found: ${initialURL}`,\n                  data: {\n                    path: initialURL\n                  }\n                });\n                delete nuxtApp._processingMiddleware;\n                return nuxtApp.runWithContext(() => showError(error));\n              }\n            }\n            if (result === true) {\n              continue;\n            }\n            if (result || result === false) {\n              return result;\n            }\n          }\n        }\n      });\n      router.afterEach(() => {\n        delete nuxtApp._processingMiddleware;\n      });\n      await router.replace(initialURL);\n      if (!isEqual(route.fullPath, initialURL)) {\n        await nuxtApp.runWithContext(() => navigateTo(route.fullPath));\n      }\n    });\n    return {\n      provide: {\n        route,\n        router\n      }\n    };\n  }\n});\n","/**\n * A unique id that Interhome uses to identify partners.\n * Affects how partners pay commission.\n *\n * Format:\n * - starts with 2 letters followed by up to 8 numbers\n * - zeros after 2 letters can be omitted\n * - total length up to 10 characters\n *\n * @example ES50399, ES0050399, CH209999, IC1000099.\n *\n * @see {@link https://partners.interhome.group/wiki/:faq:general:names | Interhome codes, names, definitions}\n * @see {@link https://partners.interhome.group/wiki/faq:links:general | Linking to Interhome }\n */\nexport type PartnerId = string\n\nconst PARTNER_ID_REGEXP = /(?<partnerId>[A-Z]{2}[0-9]{1,8})([^0-9]|$)/\n\n/**\n * Extracts a valid {@link PartnerId} from a string, if possible.\n *\n * Takes up to the first 10 characters.\n * If `partnerid` is longer than 10 characters, the `/webcc-api/v1/booking/checkPrice/final` request will fail.\n * On the details page this will result in the booking becoming impossible.\n *\n * @see https://jira.migros.net/browse/IHGWEBCC-643\n * @see https://jira.migros.net/browse/IHGWEBCC-1353\n */\nexport function getPartnerId(input: unknown): PartnerId | undefined {\n  return input\n    ?.toString()\n    .match(PARTNER_ID_REGEXP)\n    ?.groups?.partnerId.toUpperCase()\n}\n","export function hex2hsl(hex: string) {\n  // Convert hex to RGB first\n  let r = 0\n  let g = 0\n  let b = 0\n  if (hex.length === 3) {\n    r = parseInt(`0x${hex[0]}${hex[0]}`)\n    g = parseInt(`0x${hex[1]}${hex[1]}`)\n    b = parseInt(`0x${hex[2]}${hex[2]}`)\n  } else if (hex.length === 6) {\n    r = parseInt(`0x${hex[0]}${hex[1]}`)\n    g = parseInt(`0x${hex[2]}${hex[3]}`)\n    b = parseInt(`0x${hex[4]}${hex[5]}`)\n  }\n  // Then to HSL\n  r /= 255\n  g /= 255\n  b /= 255\n  const cmin = Math.min(r, g, b)\n  const cmax = Math.max(r, g, b)\n  const delta = cmax - cmin\n  let h = 0\n  let s = 0\n  let l = 0\n\n  if (delta === 0) {\n    h = 0\n  } else if (cmax === r) {\n    h = ((g - b) / delta) % 6\n  } else if (cmax === g) {\n    h = (b - r) / delta + 2\n  } else {\n    h = (r - g) / delta + 4\n  }\n\n  h = Math.round(h * 60)\n\n  if (h < 0) {\n    h += 360\n  }\n\n  l = (cmax + cmin) / 2\n  s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1))\n  s = +(s * 100).toFixed(1)\n  l = +(l * 100).toFixed(1)\n\n  return { h, s, l }\n}\n\nexport function hsl2hex(h: number, s: number, l: number) {\n  l = l < 50 ? Math.max(0, l) : Math.min(100, l)\n  l /= 100\n  const a = (s * Math.min(l, 1 - l)) / 100\n  const f = (n: number) => {\n    const k = (n + h / 30) % 12\n    const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)\n    return Math.round(255 * color)\n      .toString(16)\n      .padStart(2, '0') // convert to Hex and prefix \"0\" if needed\n  }\n  return `#${f(0)}${f(8)}${f(4)}`\n}\n","export default defineNuxtPlugin({\n  name: 'app:colors',\n  parallel: true,\n  dependsOn: ['app:params', 'stores'],\n  setup(nuxtApp) {\n    // here reactivity is lost, but it was probably intended, so the only first render defines iframe params @TODO is it true?\n    const { iframe } = useParams()\n    const colors = computed(() => applyIframeParamsColors(siteColors, iframe))\n    nuxtApp.provide('colors', reactive({ colors }))\n  },\n})\n\ndeclare module '#app' {\n  interface NuxtApp {\n    $colors: Colors\n  }\n}\n\ndeclare module 'vue' {\n  interface ComponentCustomProperties {\n    $colors: Colors\n  }\n}\n\ndeclare module '@vue/runtime-core' {\n  interface ComponentCustomProperties {\n    $colors: Colors\n  }\n}\n\nfunction applyIframeParamsColors(colors: Colors, iframe?: IFrameParams | null) {\n  if (!iframe) return colors\n  const c = { ...colors }\n  if (iframe['color-thm']) {\n    c.theme = `#${iframe['color-thm']}`\n    const { h, s, l } = hex2hsl(iframe['color-thm'])\n    c.themeHover = iframe['color-thm-hover']\n      ? `#${iframe['color-thm-hover']}`\n      : hsl2hex(h, s, l + 8)\n    c.themeLight = iframe['color-thm-light']\n      ? `#${iframe['color-thm-light']}`\n      : hsl2hex(h, s, l + 25)\n    c.themeContrast = iframe['color-thm-contrast']\n      ? `#${iframe['color-thm-contrast']}`\n      : hsl2hex(h, s, l + 50)\n  }\n  if (iframe['color-cta']) {\n    c.cta = `#${iframe['color-cta']}`\n    const { h, s, l } = hex2hsl(iframe['color-cta'])\n    c.ctaHover = iframe['color-cta-hover']\n      ? `#${iframe['color-cta-hover']}`\n      : hsl2hex(h, s, l + 10)\n    c.ctaContrast = iframe['color-cta-contrast']\n      ? `#${iframe['color-cta-contrast']}`\n      : hsl2hex(h, s, l + 50)\n  }\n  if (iframe['color-hlt']) {\n    c.highlight = `#${iframe['color-hlt']}`\n    const { h, s, l } = hex2hsl(iframe['color-hlt'])\n    c.highlightHover = iframe['color-hlt-hover']\n      ? `#${iframe['color-hlt-hover']}`\n      : hsl2hex(h, s, l + 8)\n    c.highlightLight = iframe['color-hlt-light']\n      ? `#${iframe['color-hlt-light']}`\n      : hsl2hex(h, s, l + 25)\n    c.highlightContrast = iframe['color-hlt-contrast']\n      ? `#${iframe['color-hlt-contrast']}`\n      : hsl2hex(h, s, l + 50)\n  }\n  if (iframe['color-err']) {\n    c.error = iframe['color-err']\n  }\n  return c\n}\n\nconst siteColors = {\n  error: '#b83d4e',\n  errorHover: '#822b37',\n  errorReduced: '#faf0f1',\n  errorContrast: '#ffffff',\n\n  warning: '#ffa600',\n  warningReduced: '#fff8eb',\n  warningContrast: '#131516',\n\n  success: '#36bf78',\n  successHover: '#268755',\n  successReduced: '#edfdf3',\n  successReducedContrast: '#131516',\n  successContrast: '#ffffff',\n\n  textStrongest: '#000000',\n  textStronger: '#111927', // tailwind text-900\n  textStrong: '#1f2937', // tailwind text-800\n  text: '#374151', // tailwind text-700\n  textWeak: '#6b7280', // tailwind text-500\n  textWeaker: '#d1d5db', // tailwind text-300\n  textWeakest: '#f3f4f6', // tailwind text-100\n  textContrast: '#ffffff',\n\n  background: '#ffffff',\n  background50: '#f9fafb',\n  background100: '#f3f4f6',\n  background200: '#e5e7eb',\n  background300: '#d1d5db',\n  background400: '#9ca3af',\n  background500: '#6b7280',\n  background600: '#4b5563',\n  background700: '#374151',\n  background800: '#1f2937',\n  background900: '#111927',\n\n  border: '#C9CCCF',\n  contrast: '#575C60',\n\n  // brand colors\n  theme: '#3c91fc',\n  themeHover: '#0468e6',\n  themeActive: '#02459a',\n  themeLight: '#e2efff',\n  themeContrast: '#ffffff',\n  highlight: '#ff385f',\n  highlightHover: '#e9002e',\n  highlightActive: '#9c001e',\n  highlightLight: '#ffe1e7',\n  highlightContrast: '#ffffff',\n  cta: '#ff385f',\n  ctaHover: '#e9002e',\n  ctaActive: '#9c001e',\n  ctaLight: '#ffe1e7',\n  ctaContrast: '#ffffff',\n} as Colors // @TODO There are no `successActive`, `successLight`, `warningHover`, `warningActive` - fix it\n","export function parseBoolean(input: unknown): boolean {\n  try {\n    return Boolean(JSON.parse(input?.toString().toLowerCase() ?? ''))\n  } catch {\n    return false\n  }\n}\n\nexport function tryParseBoolean(input: unknown): boolean | undefined {\n  const value = input?.toString().toLowerCase()\n\n  return value && ['true', 'false'].includes(value)\n    ? JSON.parse(value)\n    : undefined\n}\n","export function getQueryLegacyParams(query: Record<string, unknown>): Params {\n  const distanceParams = {\n    sea: true,\n    lake: true,\n    ski: true,\n    center: true,\n  }\n  const legacyParams: Record<string, string | boolean> = {\n    golf: 'golfing',\n    skiarea: 'skiing',\n    biking_plains: 'cycling',\n    crosscountry_skiing: 'crosscountryskiing',\n    balcony_or_terrace: 'balcony-or-terrace',\n    whirlpool: 'hottub',\n    sorting: true,\n    ...distanceParams,\n  }\n  const sortingMap: Record<string, SortingValue> = {\n    ascAge: 'age',\n    descLastBookDay: '-lastbookday',\n    descAverageRating: '-averagerating',\n    ascPrice: 'price',\n    descPrice: '-price',\n    ascPerson: 'pax',\n    descPerson: '-pax',\n  }\n  const distanceMap: Record<string, string> = {\n    '0-100m': '100',\n    '0-500m': '500',\n    '0-1km': '1000',\n    '0-2km': '2000',\n    '0-5km': '5000',\n    '0-10km': '10000',\n  }\n\n  return Object.fromEntries(\n    Object.entries(query)\n      .filter(([param]) => legacyParams[param])\n      .map(([param, value]) => {\n        if (typeof legacyParams[param] === 'string')\n          return [legacyParams[param], true]\n        if (param in distanceParams && isNaN(Number(value)))\n          return [param, distanceMap[value?.toString() ?? '']]\n        if (param === 'sorting')\n          return [\n            'sorting',\n            sortingMap[value?.toString() ?? ''] ?? value?.toString(),\n          ]\n        return [param, value?.toString()]\n      }),\n  )\n}\n","export function getQueryTripParams(query: Record<string, unknown>): Params {\n  const checkin = (\n    query.checkin ||\n    query.arrivalDate ||\n    query.arrivaldate\n  )?.toString()\n  const checkout = (\n    query.checkout ||\n    query.departureDate ||\n    query.departuredate\n  )?.toString()\n  const duration = tryParseInt(query.duration?.toString())\n\n  if (!checkin || (!checkout && !duration))\n    return { checkin: undefined, checkout: undefined, duration: undefined }\n\n  const params: Params = {}\n  params.checkin = checkin\n  params.checkout =\n    checkout ?? toDate(calculateCheckoutDate(checkin, duration!))\n  params.duration =\n    duration && duration <= calculateDuration(checkin, params.checkout)\n      ? duration\n      : undefined\n  return params\n}\n","export function getQueryCoordinatesParams(\n  query: Record<string, unknown>,\n): Params {\n  const [lat, lon] = [query.lat, query.lon].map((value) =>\n    tryParseFloat(value?.toString()),\n  )\n  const radius =\n    query.radius && /^\\d+km/.test(query.radius.toString())\n      ? query.radius.toString()\n      : '20km'\n  const name = query.name?.toString()\n  const heading = query.heading?.toString()\n\n  if (!lat || !lon)\n    return { lat: undefined, lon: undefined, radius: undefined, name, heading }\n\n  return { lat, lon, radius, name, heading }\n}\n","import omit from 'lodash-es/omit'\nimport omitBy from 'lodash-es/omitBy'\nimport pickBy from 'lodash-es/pickBy'\nimport isUndefined from 'lodash-es/isUndefined'\nimport { getQuery } from 'h3'\nimport { getQuerySettingsParams } from './getters/settings-params'\nimport { getQueryClickIDParams } from './getters/click-id-params'\nimport { getQueryRedirectParams } from './getters/redirect-params'\nimport { getQueryABParams } from './getters/ab-test-params'\nimport { getQueryPartnerIdParams } from './getters/partners-params'\nimport { getQueryCNASParams } from './getters/cnas-params'\nimport { getQueryCGOSParams } from './getters/cgos-params'\nimport { getQueryCurrencyParams } from './getters/currency-params'\nimport { getQueryJWTParams } from './getters/jwt-params'\nimport { getQueryIFrameParams } from './getters/iframe-params'\nimport { getQueryLegacyParams } from './getters/legacy-params'\nimport { getQueryTripParams } from './getters/trip-params'\nimport { getQueryCoordinatesParams } from './getters/coordinates-params'\nimport type { PlainParams, Params } from './params.types'\n\ntype ServerSideParams = PlainParams & { iframe?: IFrameParams }\n\nexport default defineNuxtPlugin({\n  name: 'app:params',\n  enforce: 'pre',\n  setup(nuxtApp) {\n    // Validated (external) GET parameters: are only evaluated server-side and not modified afterward\n    const ssrParams = useState('ssr-params', () => {\n      return import.meta.server\n        ? getServerSideParams(getQuery(nuxtApp.ssrContext!.event))\n        : {}\n    })\n    // Persisted params are outside of this module, e.g. PartnerID\n    const persisted = reactive(new Map<string, unknown>())\n    const persistent = computed(\n      () =>\n        ({\n          ...unpack(omit(ssrParams.value, 'redirect')),\n          ...Object.fromEntries(persisted.entries()),\n        }) as PlainParams,\n    )\n    const redirect = computed(() => ssrParams.value.redirect)\n    const iframe = computed(\n      () => ssrParams.value.iframe && omit(ssrParams.value.iframe, 'iframe'),\n    )\n    const all = ref<PlainParams>({})\n\n    const currency = computed(() => all.value.currency?.toString())\n\n    function init(params: Params) {\n      all.value = { ...persistent.value, ...unpack(params) }\n    }\n\n    const $params = reactive({\n      persistent,\n      redirect,\n      iframe,\n      all,\n      currency,\n      persist<V = unknown>(name: string, value: V) {\n        persisted.set(name, value)\n      },\n      _init<Q extends Record<string, unknown>>(rawQuery: Q) {\n        init(getUnifiedParams(rawQuery))\n      },\n    })\n\n    nuxtApp.provide('params', $params)\n  },\n})\n\nfunction getServerSideParams<Q extends Record<string, unknown>>(query: Q) {\n  return omitBy(\n    {\n      ...getQueryABParams(query),\n      ...getQuerySettingsParams(query),\n      ...getQueryJWTParams(query),\n      ...getQueryCNASParams(query),\n      ...getQueryCGOSParams(query),\n      ...getQueryCurrencyParams(query),\n      ...getQueryClickIDParams(query),\n      ...getQueryRedirectParams(query),\n      ...getQueryPartnerIdParams(query),\n      ...getQueryIFrameParams(query),\n    },\n    isUndefined,\n  ) as ServerSideParams\n}\n\nfunction getUnifiedParams<Q extends Record<string, unknown>>(rawQuery: Q) {\n  const query = { ...rawQuery, ...getQueryLegacyParams(rawQuery) }\n\n  const parsedParams: Params = {\n    ...getQueryTripParams(query),\n    ...getQueryCoordinatesParams(query),\n    pax: tryParseInt(query.pax?.toString()),\n    minpets: tryParseInt(query.minpets?.toString()),\n    season: query.season?.toString() as Season,\n  }\n\n  const otherParams = Object.fromEntries(\n    Object.entries(query)\n      .filter(\n        ([param]) => param in ALLOWED_QUERY_PARAMS && !(param in parsedParams),\n      )\n      .map(([param, value]) => [\n        param,\n        value === 'true' ? true : value?.toString(),\n      ]),\n  )\n\n  return pickBy({ ...parsedParams, ...otherParams }, Boolean) as Params\n}\n","export const requestIdleCallback = import.meta.server ? () => {\n} : globalThis.requestIdleCallback || ((cb) => {\n  const start = Date.now();\n  const idleDeadline = {\n    didTimeout: false,\n    timeRemaining: () => Math.max(0, 50 - (Date.now() - start))\n  };\n  return setTimeout(() => {\n    cb(idleDeadline);\n  }, 1);\n});\nexport const cancelIdleCallback = import.meta.server ? () => {\n} : globalThis.cancelIdleCallback || ((id) => {\n  clearTimeout(id);\n});\n","import { useNuxtApp } from \"../nuxt.js\";\nimport { requestIdleCallback } from \"../compat/idle-callback.js\";\nexport const onNuxtReady = (callback) => {\n  if (import.meta.server) {\n    return;\n  }\n  const nuxtApp = useNuxtApp();\n  if (nuxtApp.isHydrating) {\n    nuxtApp.hooks.hookOnce(\"app:suspense:resolve\", () => {\n      requestIdleCallback(() => callback());\n    });\n  } else {\n    requestIdleCallback(() => callback());\n  }\n};\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, provide, inject, isVue3, version, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, isVue2, set as set$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nfunction computedEager(fn, options) {\n  var _a;\n  const result = shallowRef();\n  watchEffect(() => {\n    result.value = fn();\n  }, {\n    ...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 = (...args) => {\n    return Promise.all(Array.from(fns).map((fn) => fn(...args)));\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\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst provideLocal = (key, value) => {\n  var _a;\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null)\n    throw new Error(\"provideLocal must be called in setup\");\n  if (!localProvidedStateMap.has(instance))\n    localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n  const localProvidedState = localProvidedStateMap.get(instance);\n  localProvidedState[key] = value;\n  provide(key, value);\n};\n\nconst injectLocal = (...args) => {\n  var _a;\n  const key = args[0];\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null)\n    throw new Error(\"injectLocal must be called in setup\");\n  if (localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n    return localProvidedStateMap.get(instance)[key];\n  return inject(...args);\n};\n\nfunction createInjectionState(composable, options) {\n  const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n  const defaultValue = options == null ? void 0 : options.defaultValue;\n  const useProvidingState = (...args) => {\n    const state = composable(...args);\n    provideLocal(key, state);\n    return state;\n  };\n  const useInjectedState = () => injectLocal(key, defaultValue);\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\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = { ...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(() => 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\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\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, _b;\n  return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : 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(...args) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  let lastRejector = noop;\n  let lastValue;\n  let ms;\n  let trailing;\n  let leading;\n  let rejectOnCancel;\n  if (!isRef(args[0]) && typeof args[0] === \"object\")\n    ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n  else\n    [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\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 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 hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\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(/^-?\\d+\\.?\\d*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = Number.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}\nfunction getLifeCycleTarget(target) {\n  return target || getCurrentInstance();\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 = toValue(defaultValue);\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = toValue(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 watchWithFilter(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\n  return watch(\n    source,\n    createFilterWrapper(\n      eventFilter,\n      cb\n    ),\n    watchOptions\n  );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n  const {\n    eventFilter: filter,\n    ...watchOptions\n  } = options;\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n  const stop = watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter\n    }\n  );\n  return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options || {};\n  const watchers = [];\n  const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n  const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchers.push(watchPausable(\n      left,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        right.value = transformLTR(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchers.push(watchPausable(\n      right,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        left.value = transformRTL(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  const stop = () => {\n    watchers.forEach((w) => w.stop());\n  };\n  return stop;\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\nfunction toRefs(objectRef, options = {}) {\n  if (!isRef(objectRef))\n    return toRefs$1(objectRef);\n  const result = Array.isArray(objectRef.value) ? Array.from({ length: 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        var _a;\n        const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;\n        if (replaceRef) {\n          if (Array.isArray(objectRef.value)) {\n            const copy = [...objectRef.value];\n            copy[key] = v;\n            objectRef.value = copy;\n          } else {\n            const newObject = { ...objectRef.value, [key]: v };\n            Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n            objectRef.value = newObject;\n          }\n        } else {\n          objectRef.value[key] = v;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onBeforeMount(fn, target);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n  const instance = getLifeCycleTarget();\n  if (instance)\n    onMounted(fn, target);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onUnmounted(fn, target);\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(() => toValue(\n    toValue(list).find((element, index, array) => fn(toValue(element), index, array))\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(() => 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\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(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(\n    toValue(element),\n    toValue(value),\n    index,\n    toValue(array)\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  let _initialValue = unref(initialValue);\n  const count = ref(initialValue);\n  const {\n    max = Number.POSITIVE_INFINITY,\n    min = Number.NEGATIVE_INFINITY\n  } = options;\n  const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n  const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\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})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|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 formatOrdinal(num) {\n  const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n  const v = num % 100;\n  return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\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    Yo: () => formatOrdinal(years),\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    Mo: () => formatOrdinal(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    Do: () => formatOrdinal(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    Ho: () => formatOrdinal(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    ho: () => formatOrdinal(hours % 12 || 12),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mo: () => formatOrdinal(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    so: () => formatOrdinal(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, _b;\n    return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n  });\n}\nfunction normalizeDate(date) {\n  if (date === null)\n    return new Date(Number.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\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 {\n      counter,\n      reset,\n      ...controls\n    };\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\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 {\n      ready,\n      ...controls\n    };\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 && Number.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) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)];\n  return watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = Array.from({ length: 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\nfunction watchAtMost(source, cb, options) {\n  const {\n    count,\n    ...watchOptions\n  } = options;\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\nfunction watchDebounced(source, cb, options = {}) {\n  const {\n    debounce = 0,\n    maxWait = void 0,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: debounceFilter(debounce, { maxWait })\n    }\n  );\n}\n\nfunction watchDeep(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...options,\n      deep: true\n    }\n  );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\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        { ...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\nfunction watchImmediate(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...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  return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n  const {\n    throttle = 0,\n    trailing = true,\n    leading = true,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: throttleFilter(throttle, trailing, leading)\n    }\n  );\n}\n\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 {\n    ...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  const stop = watch(\n    source,\n    (v, ov, onInvalidate) => {\n      if (v) {\n        if (options == null ? void 0 : options.once)\n          nextTick(() => stop());\n        cb(v, ov, onInvalidate);\n      }\n    },\n    {\n      ...options,\n      once: false\n    }\n  );\n  return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, 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, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, 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, camelize, toValue, isClient, isObject, tryOnScopeDispose, isIOS, tryOnMounted, notNullish, objectOmit, promiseTimeout, until, increaseWithUnit, objectEntries, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, toRefs, useIntervalFn, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, tryOnBeforeUnmount, identity, isDef, isWorker } 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, isVue2, readonly, nextTick, reactive, markRaw, unref, getCurrentScope, 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\nfunction createReusableTemplate(options = {}) {\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 {\n    inheritAttrs = true\n  } = options;\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,\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        const vnode = (_a = render.value) == null ? void 0 : _a.call(render, { ...keysToCamelKebabCase(attrs), $slots: slots });\n        return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n      };\n    }\n  });\n  return makeDestructurable(\n    { define, reuse },\n    [define, reuse]\n  );\n}\nfunction keysToCamelKebabCase(obj) {\n  const newObj = {};\n  for (const key in obj)\n    newObj[camelize(key)] = obj[key];\n  return newObj;\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      const optionsClone = isObject(options2) ? { ...options2 } : options2;\n      cleanups.push(\n        ...events.flatMap((event) => {\n          return listeners.map((listener) => register(el, event, listener, optionsClone));\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 noop;\n  if (isIOS && !_iOSWorkaround) {\n    _iOSWorkaround = true;\n    Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n    window.document.documentElement.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      shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n    }, { passive: true }),\n    detectIframe && useEventListener(window, \"blur\", (event) => {\n      setTimeout(() => {\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      }, 0);\n    })\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\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, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n  var _a, _b;\n  const elementRef = computed(() => unrefElement(target));\n  let timeout;\n  let posStart;\n  let startTimestamp;\n  let hasLongPressed = false;\n  function clear() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = void 0;\n    }\n    posStart = void 0;\n    startTimestamp = void 0;\n    hasLongPressed = false;\n  }\n  function onRelease(ev) {\n    var _a2, _b2, _c;\n    const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n    clear();\n    if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n      return;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\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    const dx = ev.x - _posStart.x;\n    const dy = ev.y - _posStart.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\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    posStart = {\n      x: ev.x,\n      y: ev.y\n    };\n    startTimestamp = ev.timeStamp;\n    timeout = setTimeout(\n      () => {\n        hasLongPressed = true;\n        handler(ev);\n      },\n      (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n    );\n  }\n  function onMove(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    if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n      return;\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    const dx = ev.x - posStart.x;\n    const dy = ev.y - posStart.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n      clear();\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  const cleanup = [\n    useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n    useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n    useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n  ];\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\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 useMounted() {\n  const isMounted = ref(false);\n  const instance = getCurrentInstance();\n  if (instance) {\n    onMounted(() => {\n      isMounted.value = true;\n    }, isVue2 ? void 0 : instance);\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 useMutationObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...mutationOptions } = options;\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 targets = computed(() => {\n    const value = toValue(target);\n    const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n    return new Set(items);\n  });\n  const stopWatch = watch(\n    () => targets.value,\n    (targets2) => {\n      cleanup();\n      if (isSupported.value && targets2.size) {\n        observer = new MutationObserver(callback);\n        targets2.forEach((el) => observer.observe(el, mutationOptions));\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const takeRecords = () => {\n    return observer == null ? void 0 : observer.takeRecords();\n  };\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop,\n    takeRecords\n  };\n}\n\nfunction useActiveElement(options = {}) {\n  var _a;\n  const {\n    window = defaultWindow,\n    deep = true,\n    triggerOnRemoval = false\n  } = options;\n  const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n  const getDeepActiveElement = () => {\n    var _a2;\n    let element = document == null ? void 0 : document.activeElement;\n    if (deep) {\n      while (element == null ? void 0 : element.shadowRoot)\n        element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n    }\n    return element;\n  };\n  const activeElement = ref();\n  const trigger = () => {\n    activeElement.value = getDeepActiveElement();\n  };\n  if (window) {\n    useEventListener(window, \"blur\", (event) => {\n      if (event.relatedTarget !== null)\n        return;\n      trigger();\n    }, true);\n    useEventListener(window, \"focus\", trigger, true);\n  }\n  if (triggerOnRemoval) {\n    useMutationObserver(document, (mutations) => {\n      mutations.filter((m) => m.removedNodes.length).map((n) => Array.from(n.removedNodes)).flat().forEach((node) => {\n        if (node === activeElement.value)\n          trigger();\n      });\n    }, {\n      childList: true,\n      subtree: true\n    });\n  }\n  trigger();\n  return activeElement;\n}\n\nfunction useRafFn(fn, options = {}) {\n  const {\n    immediate = true,\n    fpsLimit = void 0,\n    window = defaultWindow\n  } = options;\n  const isActive = ref(false);\n  const intervalLimit = fpsLimit ? 1e3 / fpsLimit : null;\n  let previousFrameTimestamp = 0;\n  let rafId = null;\n  function loop(timestamp) {\n    if (!isActive.value || !window)\n      return;\n    if (!previousFrameTimestamp)\n      previousFrameTimestamp = timestamp;\n    const delta = timestamp - previousFrameTimestamp;\n    if (intervalLimit && delta < intervalLimit) {\n      rafId = window.requestAnimationFrame(loop);\n      return;\n    }\n    previousFrameTimestamp = timestamp;\n    fn({ delta, timestamp });\n    rafId = window.requestAnimationFrame(loop);\n  }\n  function resume() {\n    if (!isActive.value && window) {\n      isActive.value = true;\n      previousFrameTimestamp = 0;\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    if (!animate.value)\n      animate.value = el.animate(toValue(keyframes), animateOptions);\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\", \"finish\", \"remove\"], syncPause);\n  useEventListener(animate, \"finish\", () => {\n    var _a;\n    if (commitStyles)\n      (_a = animate.value) == null ? void 0 : _a.commitStyles();\n  });\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    signal\n  } = options || {};\n  const promiseState = {\n    aborted: \"aborted\",\n    fulfilled: \"fulfilled\",\n    pending: \"pending\",\n    rejected: \"rejected\"\n  };\n  const initialResult = Array.from(Array.from({ length: 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 (signal == null ? void 0 : signal.aborted) {\n        updateResult(promiseState.aborted, new Error(\"aborted\"));\n        return;\n      }\n      if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n        onFinished();\n        return;\n      }\n      const done = curr(prevRes).then((currentRes) => {\n        updateResult(promiseState.fulfilled, currentRes);\n        activeIndex.value === tasks.length - 1 && onFinished();\n        return currentRes;\n      });\n      if (!signal)\n        return done;\n      return Promise.race([done, whenAborted(signal)]);\n    }).catch((e) => {\n      if (signal == null ? void 0 : signal.aborted) {\n        updateResult(promiseState.aborted, e);\n        return e;\n      }\n      updateResult(promiseState.rejected, e);\n      onError();\n      return e;\n    });\n  }, Promise.resolve());\n  return {\n    activeIndex,\n    result\n  };\n}\nfunction whenAborted(signal) {\n  return new Promise((resolve, reject) => {\n    const error = new Error(\"aborted\");\n    if (signal.aborted)\n      reject(error);\n    else\n      signal.addEventListener(\"abort\", () => reject(error), { once: true });\n  });\n}\n\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 {\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(options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n  const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\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      useEventListener(battery, events, 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 handler = (event) => {\n    matches.value = event.matches;\n  };\n  const cleanup = () => {\n    if (!mediaQuery)\n      return;\n    if (\"removeEventListener\" in mediaQuery)\n      mediaQuery.removeEventListener(\"change\", handler);\n    else\n      mediaQuery.removeListener(handler);\n  };\n  const stopWatch = watchEffect(() => {\n    if (!isSupported.value)\n      return;\n    cleanup();\n    mediaQuery = window.matchMedia(toValue(query));\n    if (\"addEventListener\" in mediaQuery)\n      mediaQuery.addEventListener(\"change\", handler);\n    else\n      mediaQuery.addListener(handler);\n    matches.value = mediaQuery.matches;\n  });\n  tryOnScopeDispose(() => {\n    stopWatch();\n    cleanup();\n    mediaQuery = void 0;\n  });\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  xs: 0,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1264,\n  xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1280,\n  xl: 1920,\n  xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\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: 0,\n  sm: 600,\n  md: 1024,\n  lg: 1440,\n  xl: 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};\nconst breakpointsPrimeFlex = {\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n  function getValue(k, delta) {\n    let v = toValue(breakpoints[toValue(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, strategy = \"min-width\" } = 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 smallerOrEqual = (k) => {\n    return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n  };\n  const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n    Object.defineProperty(shortcuts, k, {\n      get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n      enumerable: true,\n      configurable: true\n    });\n    return shortcuts;\n  }, {});\n  function 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  return Object.assign(shortcutMethods, {\n    greaterOrEqual,\n    smallerOrEqual,\n    greater(k) {\n      return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n    },\n    smaller(k) {\n      return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, 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    active() {\n      const bps = current();\n      return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(-1));\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\nconst WRITABLE_PROPERTIES = [\n  \"hash\",\n  \"host\",\n  \"hostname\",\n  \"href\",\n  \"pathname\",\n  \"port\",\n  \"protocol\",\n  \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n  const { window = defaultWindow } = options;\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({\n      trigger,\n      state: state2,\n      length,\n      origin,\n      ...refs\n    });\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 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 useClipboard(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500,\n    legacy = false\n  } = options;\n  const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const permissionRead = usePermission(\"clipboard-read\");\n  const permissionWrite = usePermission(\"clipboard-write\");\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 && isAllowed(permissionRead.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    useEventListener([\"copy\", \"cut\"], updateText);\n  async function copy(value = toValue(source)) {\n    if (isSupported.value && value != null) {\n      if (isClipboardApiSupported.value && isAllowed(permissionWrite.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  function isAllowed(status) {\n    return status === \"granted\" || status === \"prompt\";\n  }\n  return {\n    isSupported,\n    text,\n    copied,\n    copy\n  };\n}\n\nfunction useClipboardItems(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500\n  } = options;\n  const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const content = ref([]);\n  const copied = ref(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n  function updateContent() {\n    if (isSupported.value) {\n      navigator.clipboard.read().then((items) => {\n        content.value = items;\n      });\n    }\n  }\n  if (isSupported.value && read)\n    useEventListener([\"copy\", \"cut\"], updateContent);\n  async function copy(value = toValue(source)) {\n    if (isSupported.value && value != null) {\n      await navigator.clipboard.write(value);\n      content.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  return {\n    isSupported,\n    content,\n    copied,\n    copy\n  };\n}\n\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) || typeof source === \"function\")) {\n    watch(source, sync, {\n      ...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\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    initOnMounted\n  } = options;\n  const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : 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    tryOnMounted(() => {\n      useEventListener(window, \"storage\", update);\n      useEventListener(window, customStorageEventName, updateFromCustomEvent);\n      if (initOnMounted)\n        update();\n    });\n  }\n  if (!initOnMounted)\n    update();\n  function dispatchWriteEvent(oldValue, newValue) {\n    if (window) {\n      window.dispatchEvent(new CustomEvent(customStorageEventName, {\n        detail: {\n          key,\n          oldValue,\n          newValue,\n          storageArea: storage\n        }\n      }));\n    }\n  }\n  function write(v) {\n    try {\n      const oldValue = storage.getItem(key);\n      if (v == null) {\n        dispatchWriteEvent(oldValue, null);\n        storage.removeItem(key);\n      } else {\n        const serialized = serializer.write(v);\n        if (oldValue !== serialized) {\n          storage.setItem(key, serialized);\n          dispatchWriteEvent(oldValue, serialized);\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 { ...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 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      if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\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  function updateFromCustomEvent(event) {\n    update(event.detail);\n  }\n  return data;\n}\n\nfunction usePreferredDark(options) {\n  return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\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 = {\n    auto: \"\",\n    light: \"light\",\n    dark: \"dark\",\n    ...options.modes || {}\n  };\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(() => store.value === \"auto\" ? system.value : store.value);\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        const styleString = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n        style.appendChild(document.createTextNode(styleString));\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\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      attributeFilter: [\"style\", \"class\"],\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(rootComponent) {\n  const vm = getCurrentInstance();\n  const currentElement = computedWithControl(\n    () => null,\n    () => rootComponent ? unrefElement(rootComponent) : 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    go: set\n  };\n}\n\nfunction useDark(options = {}) {\n  const {\n    valueDark = \"dark\",\n    valueLight = \"\",\n    window = defaultWindow\n  } = options;\n  const mode = useColorMode({\n    ...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 system = computed(() => {\n    if (mode.system) {\n      return mode.system.value;\n    } else {\n      const preferredDark = usePreferredDark({ window });\n      return preferredDark.value ? \"dark\" : \"light\";\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 (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, Number.POSITIVE_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\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, { ...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 {\n    ...manualHistory,\n    isTracking,\n    pause,\n    resume,\n    commit,\n    batch,\n    dispose\n  };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n  const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n  const history = useRefHistory(source, { ...options, eventFilter: filter });\n  return {\n    ...history\n  };\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(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const pixelRatio = ref(1);\n  if (window) {\n    let observe2 = function() {\n      pixelRatio.value = window.devicePixelRatio;\n      cleanup2();\n      media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n      media.addEventListener(\"change\", observe2, { once: true });\n    }, cleanup2 = function() {\n      media == null ? void 0 : media.removeEventListener(\"change\", observe2);\n    };\n    let media;\n    observe2();\n    tryOnScopeDispose(cleanup2);\n  }\n  return { pixelRatio };\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    var _a2;\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.addEventListener(\"ended\", stop));\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(options = {}) {\n  const { document = defaultDocument } = options;\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\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    containerElement,\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    var _a2;\n    if (e.button !== 0)\n      return;\n    if (toValue(options.disabled) || !filterEvent(e))\n      return;\n    if (toValue(exact) && e.target !== toValue(target))\n      return;\n    const container = toValue(containerElement);\n    const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n    const targetRect = toValue(target).getBoundingClientRect();\n    const pos = {\n      x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n      y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.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 (toValue(options.disabled) || !filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    const container = toValue(containerElement);\n    const targetRect = toValue(target).getBoundingClientRect();\n    let { x, y } = position.value;\n    if (axis === \"x\" || axis === \"both\") {\n      x = e.clientX - pressedDelta.value.x;\n      if (container)\n        x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n    }\n    if (axis === \"y\" || axis === \"both\") {\n      y = e.clientY - pressedDelta.value.y;\n      if (container)\n        y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n    }\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 (toValue(options.disabled) || !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 {\n    ...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, options = {}) {\n  const isOverDropZone = ref(false);\n  const files = shallowRef(null);\n  let counter = 0;\n  let isDataTypeIncluded = true;\n  if (isClient) {\n    const _options = typeof options === \"function\" ? { onDrop: options } : options;\n    const getFiles = (event) => {\n      var _a, _b;\n      const list = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n      return files.value = list.length === 0 ? null : list;\n    };\n    useEventListener(target, \"dragenter\", (event) => {\n      var _a, _b;\n      const types = Array.from(((_a = event == null ? void 0 : event.dataTransfer) == null ? void 0 : _a.items) || []).map((i) => i.kind === \"file\" ? i.type : null).filter(notNullish);\n      if (_options.dataTypes && event.dataTransfer) {\n        const dataTypes = unref(_options.dataTypes);\n        isDataTypeIncluded = typeof dataTypes === \"function\" ? dataTypes(types) : dataTypes ? dataTypes.some((item) => types.includes(item)) : true;\n        if (!isDataTypeIncluded)\n          return;\n      }\n      event.preventDefault();\n      counter += 1;\n      isOverDropZone.value = true;\n      (_b = _options.onEnter) == null ? void 0 : _b.call(_options, getFiles(event), event);\n    });\n    useEventListener(target, \"dragover\", (event) => {\n      var _a;\n      if (!isDataTypeIncluded)\n        return;\n      event.preventDefault();\n      (_a = _options.onOver) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n    useEventListener(target, \"dragleave\", (event) => {\n      var _a;\n      if (!isDataTypeIncluded)\n        return;\n      event.preventDefault();\n      counter -= 1;\n      if (counter === 0)\n        isOverDropZone.value = false;\n      (_a = _options.onLeave) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n    useEventListener(target, \"drop\", (event) => {\n      var _a;\n      event.preventDefault();\n      counter = 0;\n      isOverDropZone.value = false;\n      (_a = _options.onDrop) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n  }\n  return {\n    files,\n    isOverDropZone\n  };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...observerOptions } = options;\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(() => Array.isArray(target) ? target.map((el) => unrefElement(el)) : [unrefElement(target)]);\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\" }\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  useMutationObserver(target, update, {\n    attributeFilter: [\"style\", \"class\"]\n  });\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\nfunction useElementByPoint(options) {\n  const {\n    x,\n    y,\n    document = defaultDocument,\n    multiple,\n    interval = \"requestAnimationFrame\",\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => {\n    if (toValue(multiple))\n      return document && \"elementsFromPoint\" in document;\n    return document && \"elementFromPoint\" in document;\n  });\n  const element = ref(null);\n  const cb = () => {\n    var _a, _b;\n    element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n  };\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  return {\n    isSupported,\n    element,\n    ...controls\n  };\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  const { stop: stop1 } = 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 rect = $elem.getBoundingClientRect();\n          width.value = rect.width;\n          height.value = rect.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  tryOnMounted(() => {\n    const ele = unrefElement(target);\n    if (ele) {\n      width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n      height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n    }\n  });\n  const stop2 = watch(\n    () => unrefElement(target),\n    (ele) => {\n      width.value = ele ? initialSize.width : 0;\n      height.value = ele ? initialSize.height : 0;\n    }\n  );\n  function stop() {\n    stop1();\n    stop2();\n  }\n  return {\n    width,\n    height,\n    stop\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, options = {}) {\n  const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n  const elementIsVisible = ref(false);\n  useIntersectionObserver(\n    element,\n    (intersectionObserverEntries) => {\n      let isIntersecting = elementIsVisible.value;\n      let latestTime = 0;\n      for (const entry of intersectionObserverEntries) {\n        if (entry.time >= latestTime) {\n          latestTime = entry.time;\n          isIntersecting = entry.isIntersecting;\n        }\n      }\n      elementIsVisible.value = isIntersecting;\n    },\n    {\n      root: scrollTarget,\n      window,\n      threshold\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 resolveNestedOptions$1(options) {\n  if (options === true)\n    return {};\n  return options;\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 urlRef = toRef(url);\n  const lastEventId = shallowRef(null);\n  let explicitlyClosed = false;\n  let retried = 0;\n  const {\n    withCredentials = false,\n    immediate = true\n  } = options;\n  const close = () => {\n    if (isClient && eventSource.value) {\n      eventSource.value.close();\n      eventSource.value = null;\n      status.value = \"CLOSED\";\n      explicitlyClosed = true;\n    }\n  };\n  const _init = () => {\n    if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n      return;\n    const es = new EventSource(urlRef.value, { withCredentials });\n    status.value = \"CONNECTING\";\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      if (es.readyState === 2 && !explicitlyClosed && options.autoReconnect) {\n        es.close();\n        const {\n          retries = -1,\n          delay = 1e3,\n          onFailed\n        } = resolveNestedOptions$1(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    es.onmessage = (e) => {\n      event.value = null;\n      data.value = e.data;\n      lastEventId.value = e.lastEventId;\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  };\n  const open = () => {\n    if (!isClient)\n      return;\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    watch(urlRef, open, { immediate: true });\n  tryOnScopeDispose(close);\n  return {\n    eventSource,\n    event,\n    data,\n    status,\n    error,\n    open,\n    close,\n    lastEventId\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    const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n    if (!elements || elements.length === 0) {\n      const link = document == null ? void 0 : document.createElement(\"link\");\n      if (link) {\n        link.rel = rel;\n        link.href = `${baseUrl}${icon}`;\n        link.type = `image/${icon.split(\".\").pop()}`;\n        document == null ? void 0 : document.head.append(link);\n      }\n      return;\n    }\n    elements == null ? void 0 : elements.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\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\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n  return reAbsolute.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 { ...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 = { ...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 = {\n          ...options,\n          ...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 = {\n          ...fetchOptions,\n          ...args[0],\n          headers: {\n            ...headersToObject(fetchOptions.headers) || {},\n            ...headersToObject(args[0].headers) || {}\n          }\n        };\n      }\n    }\n    if (args.length > 1 && isFetchOptions(args[1])) {\n      options = {\n        ...options,\n        ...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 = {\n    immediate: true,\n    refetch: false,\n    timeout: 0,\n    updateDataOnError: false\n  };\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 = { ...options, ...args[0] };\n    else\n      fetchOptions = args[0];\n  }\n  if (args.length > 1) {\n    if (isFetchOptions(args[1]))\n      options = { ...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 = {\n        ...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  let executeCounter = 0;\n  const execute = async (throwOnFailed = false) => {\n    var _a2, _b;\n    abort();\n    loading(true);\n    error.value = null;\n    statusCode.value = null;\n    aborted.value = false;\n    executeCounter += 1;\n    const currentExecuteCounter = executeCounter;\n    const defaultFetchOptions = {\n      method: config.method,\n      headers: {}\n    };\n    if (config.payload) {\n      const headers = headersToObject(defaultFetchOptions.headers);\n      const payload = toValue(config.payload);\n      if (!config.payloadType && payload && Object.getPrototypeOf(payload) === Object.prototype && !(payload instanceof FormData))\n        config.payloadType = \"json\";\n      if (config.payloadType)\n        headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n      defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n    }\n    let isCanceled = false;\n    const context = {\n      url: toValue(url),\n      options: {\n        ...defaultFetchOptions,\n        ...fetchOptions\n      },\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 fetch(\n      context.url,\n      {\n        ...defaultFetchOptions,\n        ...context.options,\n        headers: {\n          ...headersToObject(defaultFetchOptions.headers),\n          ...headersToObject((_b = context.options) == null ? void 0 : _b.headers)\n        }\n      }\n    ).then(async (fetchResponse) => {\n      response.value = fetchResponse;\n      statusCode.value = fetchResponse.status;\n      responseData = await fetchResponse.clone()[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({\n          data: responseData,\n          response: fetchResponse\n        }));\n      }\n      data.value = responseData;\n      responseEvent.trigger(fetchResponse);\n      return fetchResponse;\n    }).catch(async (fetchError) => {\n      let errorData = fetchError.message || fetchError.name;\n      if (options.onFetchError) {\n        ({ error: errorData, data: responseData } = await options.onFetchError({\n          data: responseData,\n          error: fetchError,\n          response: response.value\n        }));\n      }\n      error.value = errorData;\n      if (options.updateDataOnError)\n        data.value = responseData;\n      errorEvent.trigger(fetchError);\n      if (throwOnFailed)\n        throw fetchError;\n      return null;\n    }).finally(() => {\n      if (currentExecuteCounter === executeCounter)\n        loading(false);\n      if (timer)\n        timer.stop();\n      finallyEvent.trigger(null);\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: readonly(isFinished),\n    isFetching: readonly(isFetching),\n    statusCode,\n    response,\n    error,\n    data,\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        return {\n          ...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 {\n          ...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 {\n    ...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\nconst DEFAULT_OPTIONS = {\n  multiple: true,\n  accept: \"*\",\n  reset: false,\n  directory: false\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 reset = () => {\n    files.value = null;\n    if (input && input.value) {\n      input.value = \"\";\n      trigger(null);\n    }\n  };\n  const open = (localOptions) => {\n    if (!input)\n      return;\n    const _options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n      ...localOptions\n    };\n    input.multiple = _options.multiple;\n    input.accept = _options.accept;\n    input.webkitdirectory = _options.directory;\n    if (hasOwn(_options, \"capture\"))\n      input.capture = _options.capture;\n    if (_options.reset)\n      reset();\n    input.click();\n  };\n  return {\n    files: readonly(files),\n    open,\n    reset,\n    onChange\n  };\n}\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({ ...toValue(options), ..._options });\n    fileHandle.value = handle;\n    await updateData();\n  }\n  async function create(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n    data.value = void 0;\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({ ...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    await updateFile();\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, focusVisible = false, preventScroll = false } = options;\n  const innerFocused = ref(false);\n  const targetElement = computed(() => unrefElement(target));\n  useEventListener(targetElement, \"focus\", (event) => {\n    var _a, _b;\n    if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n      innerFocused.value = true;\n  });\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({ preventScroll });\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(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\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 || !isFullscreen.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 || isFullscreen.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      index: gamepad.index,\n      connected: gamepad.connected,\n      mapping: gamepad.mapping,\n      timestamp: gamepad.timestamp,\n      vibrationActuator: gamepad.vibrationActuator,\n      hapticActuators,\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 (const gamepad of _gamepads) {\n      if (gamepad && gamepads.value[gamepad.index])\n        gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\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    for (const gamepad of _gamepads) {\n      if (gamepad && gamepads.value[gamepad.index])\n        onGamepadConnected(gamepad);\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: Number.POSITIVE_INFINITY,\n    longitude: Number.POSITIVE_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\nasync function loadImage(options) {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = 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    if (referrerPolicy)\n      img.referrerPolicy = referrerPolicy;\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    {\n      resetOnExecute: true,\n      ...asyncStateOptions\n    }\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    window = defaultWindow,\n    onError = (e) => {\n      console.error(e);\n    }\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, _d;\n    if (!window)\n      return;\n    const _element = toValue(element);\n    if (!_element)\n      return;\n    (_c = _element instanceof Document ? window.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    const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n    if (x != null)\n      internalX.value = scrollContainer.scrollLeft;\n    if (y != null)\n      internalY.value = scrollContainer.scrollTop;\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    var _a;\n    if (!window)\n      return;\n    const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(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) <= (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 === window.document && !scrollTop)\n      scrollTop = window.document.body.scrollTop;\n    directions.top = scrollTop < internalY.value;\n    directions.bottom = scrollTop > internalY.value;\n    const top = Math.abs(scrollTop) <= (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    var _a;\n    if (!window)\n      return;\n    const eventTarget = (_a = e.target.documentElement) != null ? _a : 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  tryOnMounted(() => {\n    try {\n      const _element = toValue(element);\n      if (!_element)\n        return;\n      setArrivedState(_element);\n    } catch (e) {\n      onError(e);\n    }\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 (window && _element)\n        setArrivedState(_element);\n    }\n  };\n}\n\nfunction resolveElement(el) {\n  if (typeof Window !== \"undefined\" && el instanceof Window)\n    return el.document.documentElement;\n  if (typeof Document !== \"undefined\" && el instanceof Document)\n    return el.documentElement;\n  return el;\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n  var _a;\n  const {\n    direction = \"bottom\",\n    interval = 100,\n    canLoadMore = () => true\n  } = options;\n  const state = reactive(useScroll(\n    element,\n    {\n      ...options,\n      offset: {\n        [direction]: (_a = options.distance) != null ? _a : 0,\n        ...options.offset\n      }\n    }\n  ));\n  const promise = ref();\n  const isLoading = computed(() => !!promise.value);\n  const observedElement = computed(() => {\n    return resolveElement(toValue(element));\n  });\n  const isElementVisible = useElementVisibility(observedElement);\n  function checkAndLoad() {\n    state.measure();\n    if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n      return;\n    const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n    const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= 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], isElementVisible.value],\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\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  target = toRef(target);\n  options = {\n    ...defaultOptions,\n    ...options\n  };\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\", \"loadstart\"], () => {\n    waiting.value = true;\n    ignorePlayingUpdates(() => playing.value = false);\n  });\n  useEventListener(target, \"loadeddata\", () => waiting.value = false);\n  useEventListener(target, \"playing\", () => {\n    waiting.value = false;\n    ended.value = false;\n    ignorePlayingUpdates(() => playing.value = true);\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 = shallowReactive({});\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 shallowReactive(options.cache);\n    if (isVue2)\n      return getMapVue2Compat();\n    return shallowReactive(/* @__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 UseMouseBuiltinExtractors = {\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    scroll = true,\n    eventFilter\n  } = options;\n  let _prevMouseEvent = null;\n  const x = ref(initialValue.x);\n  const y = ref(initialValue.y);\n  const sourceType = ref(null);\n  const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n  const mouseHandler = (event) => {\n    const result = extractor(event);\n    _prevMouseEvent = 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 scrollHandler = () => {\n    if (!_prevMouseEvent || !window)\n      return;\n    const pos = extractor(_prevMouseEvent);\n    if (_prevMouseEvent instanceof MouseEvent && pos) {\n      x.value = pos[0] + window.scrollX;\n      y.value = pos[1] + window.scrollY;\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  const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n  if (target) {\n    const listenerOptions = { passive: true };\n    useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n    if (touch && type !== \"movement\") {\n      useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n      if (resetOnTouchEnds)\n        useEventListener(target, \"touchend\", reset, listenerOptions);\n    }\n    if (scroll && type === \"page\")\n      useEventListener(window, \"scroll\", scrollHandlerWrapper, { passive: true });\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 type = options.type || \"page\";\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 + (type === \"page\" ? window.pageXOffset : 0);\n        elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\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    capture = false,\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, capture });\n  useEventListener(window, \"mouseleave\", onReleased, { passive: true, capture });\n  useEventListener(window, \"mouseup\", onReleased, { passive: true, capture });\n  if (drag) {\n    useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true, capture });\n    useEventListener(window, \"drop\", onReleased, { passive: true, capture });\n    useEventListener(window, \"dragend\", onReleased, { passive: true, capture });\n  }\n  if (touch) {\n    useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true, capture });\n    useEventListener(window, \"touchend\", onReleased, { passive: true, capture });\n    useEventListener(window, \"touchcancel\", onReleased, { passive: true, capture });\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\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 {\n      now,\n      ...controls\n    };\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 = Number.POSITIVE_INFINITY,\n    pageSize = 10,\n    page = 1,\n    onPageChange = noop,\n    onPageSizeChange = noop,\n    onPageCountChange = noop\n  } = options;\n  const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_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      direction: isReadonly(page) ? \"ltr\" : \"both\"\n    });\n  }\n  if (isRef(pageSize)) {\n    syncRef(pageSize, currentPageSize, {\n      direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n    });\n  }\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 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 && typeof screenOrientation.lock === \"function\")\n      return screenOrientation.lock(type);\n    return Promise.reject(new Error(\"Not supported\"));\n  };\n  const unlockOrientation = () => {\n    if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n      screenOrientation.unlock();\n  };\n  return {\n    isSupported,\n    orientation,\n    angle,\n    lockOrientation,\n    unlockOrientation\n  };\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 screenOrientation = reactive(useScreenOrientation({ 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    }\n    return \"mouse\";\n  });\n  const roll = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      let value;\n      switch (screenOrientation.orientation) {\n        case \"landscape-primary\":\n          value = orientation.gamma / 90;\n          break;\n        case \"landscape-secondary\":\n          value = -orientation.gamma / 90;\n          break;\n        case \"portrait-primary\":\n          value = -orientation.beta / 90;\n          break;\n        case \"portrait-secondary\":\n          value = orientation.beta / 90;\n          break;\n        default:\n          value = -orientation.beta / 90;\n      }\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      let value;\n      switch (screenOrientation.orientation) {\n        case \"landscape-primary\":\n          value = orientation.beta / 90;\n          break;\n        case \"landscape-secondary\":\n          value = -orientation.beta / 90;\n          break;\n        case \"portrait-primary\":\n          value = orientation.gamma / 90;\n          break;\n        case \"portrait-secondary\":\n          value = -orientation.gamma / 90;\n          break;\n        default:\n          value = orientation.gamma / 90;\n      }\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\nfunction usePerformanceObserver(options, callback) {\n  const {\n    window = defaultWindow,\n    immediate = true,\n    ...performanceOptions\n  } = options;\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\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    const listenerOptions = { passive: true };\n    useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n    useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n  }\n  return {\n    ...toRefs(state),\n    isInside\n  };\n}\n\nfunction usePointerLock(target, options = {}) {\n  const { document = defaultDocument } = 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) {\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();\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    disableTextSelect = false\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      if (!eventIsAllowed(e))\n        return;\n      isPointerDown.value = true;\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      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    })\n  ];\n  tryOnMounted(() => {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n    if (disableTextSelect) {\n      (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty(\"-webkit-user-select\", \"none\");\n      (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty(\"-ms-user-select\", \"none\");\n      (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty(\"user-select\", \"none\");\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\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.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\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}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n  const isLocked = ref(initialState);\n  let stopTouchMoveListener = null;\n  let initialOverflow = \"\";\n  watch(toRef(element), (el) => {\n    const target = resolveElement(toValue(el));\n    if (target) {\n      const ele = target;\n      if (!elInitialOverflow.get(ele))\n        elInitialOverflow.set(ele, ele.style.overflow);\n      if (ele.style.overflow !== \"hidden\")\n        initialOverflow = ele.style.overflow;\n      if (ele.style.overflow === \"hidden\")\n        return isLocked.value = true;\n      if (isLocked.value)\n        return ele.style.overflow = \"hidden\";\n    }\n  }, {\n    immediate: true\n  });\n  const lock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || isLocked.value)\n      return;\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(\n        el,\n        \"touchmove\",\n        (e) => {\n          preventDefault(e);\n        },\n        { passive: false }\n      );\n    }\n    el.style.overflow = \"hidden\";\n    isLocked.value = true;\n  };\n  const unlock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || !isLocked.value)\n      return;\n    isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n    el.style.overflow = initialOverflow;\n    elInitialOverflow.delete(el);\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 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\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 = {\n        ...toValue(shareOptions),\n        ...toValue(overrideOptions)\n      };\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 currentResult = event.results[event.resultIndex];\n      const { transcript } = currentResult[0];\n      isFinal.value = currentResult.isFinal;\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 = toValue(pitch);\n    utterance2.rate = toValue(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\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(\"getDefaultStorageAsync\", () => {\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 = { ...rawInit, ...value };\n        else 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.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\", \"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  return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\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  var _a;\n  const textarea = ref(options == null ? void 0 : options.element);\n  const input = ref(options == null ? void 0 : options.input);\n  const styleProp = (_a = options == null ? void 0 : options.styleProp) != null ? _a : \"height\";\n  const textareaScrollHeight = ref(1);\n  function triggerResize() {\n    var _a2;\n    if (!textarea.value)\n      return;\n    let height = \"\";\n    textarea.value.style[styleProp] = \"1px\";\n    textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight;\n    if (options == null ? void 0 : options.styleTarget)\n      toValue(options.styleTarget).style[styleProp] = `${textareaScrollHeight.value}px`;\n    else\n      height = `${textareaScrollHeight.value}px`;\n    textarea.value.style[styleProp] = height;\n  }\n  watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n  watch(textareaScrollHeight, () => {\n    var _a2;\n    return (_a2 = options == null ? void 0 : options.onResize) == null ? void 0 : _a2.call(options);\n  });\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\nfunction useThrottledRefHistory(source, options = {}) {\n  const { throttle = 200, trailing = true } = options;\n  const filter = throttleFilter(throttle, trailing);\n  const history = useRefHistory(source, { ...options, eventFilter: filter });\n  return {\n    ...history\n  };\n}\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: Number.POSITIVE_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 { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n  const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n  if (exposeControls) {\n    return {\n      timeAgo,\n      ...controls\n    };\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, { immediate: false });\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\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 {\n      timestamp: ts,\n      ...controls\n    };\n  } else {\n    return ts;\n  }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n  var _a, _b, _c;\n  const {\n    document = defaultDocument,\n    restoreOnUnmount = (t) => t\n  } = options;\n  const originalTitle = (_a = document == null ? void 0 : document.title) != null ? _a : \"\";\n  const title = toRef((_b = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _b : 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      (_c = document.head) == null ? void 0 : _c.querySelector(\"title\"),\n      () => {\n        if (document && document.title !== title.value)\n          title.value = format(document.title);\n      },\n      { childList: true }\n    );\n  }\n  tryOnBeforeUnmount(() => {\n    if (restoreOnUnmount) {\n      const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n      if (restoredTitle != null && document)\n        document.title = restoredTitle;\n    }\n  });\n  return title;\n}\n\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, {\n      ...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 _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  tryOnScopeDispose(() => {\n    stop();\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 = 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    let isUpdating = false;\n    watch(\n      () => props[key],\n      (v) => {\n        if (!isUpdating) {\n          isUpdating = true;\n          proxy.value = cloneFn(v);\n          nextTick(() => isUpdating = false);\n        }\n      }\n    );\n    watch(\n      proxy,\n      (v) => {\n        if (!isUpdating && (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(\n      props,\n      key,\n      emit,\n      options\n    );\n  }\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, containerRef, calculateRange) {\n  watch([size.width, size.height, list, containerRef], () => {\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, containerRef, 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, containerRef, 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(options = {}) {\n  const {\n    window = defaultWindow,\n    requestPermissions: _requestForPermissions = true\n  } = options;\n  const defaultWebNotificationOptions = options;\n  const isSupported = useSupported(() => {\n    if (!window || !(\"Notification\" in window))\n      return false;\n    try {\n      new Notification(\"\");\n    } catch (e) {\n      return false;\n    }\n    return true;\n  });\n  const permissionGranted = ref(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n  const notification = ref(null);\n  const ensurePermissions = async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionGranted.value && Notification.permission !== \"denied\") {\n      const result = await Notification.requestPermission();\n      if (result === \"granted\")\n        permissionGranted.value = true;\n    }\n    return permissionGranted.value;\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 || !permissionGranted.value)\n      return;\n    const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n    notification.value = new Notification(options2.title || \"\", options2);\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  if (_requestForPermissions)\n    tryOnMounted(ensurePermissions);\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    ensurePermissions,\n    permissionGranted,\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 _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 close = (code = 1e3, reason) => {\n    if (!isClient || !wsRef.value)\n      return;\n    explicitlyClosed = true;\n    resetHeartbeat();\n    heartbeatPause == null ? void 0 : heartbeatPause();\n    wsRef.value.close(code, reason);\n    wsRef.value = 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      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          explicitlyClosed = false;\n        }, pongTimeout);\n      },\n      interval,\n      { immediate: false }\n    );\n    heartbeatPause = pause;\n    heartbeatResume = resume;\n  }\n  if (autoClose) {\n    if (isClient)\n      useEventListener(\"beforeunload\", () => close());\n    tryOnScopeDispose(close);\n  }\n  const open = () => {\n    if (!isClient && !isWorker)\n      return;\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    open();\n  watch(urlRef, open);\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 = (...args) => {\n    if (!worker.value)\n      return;\n    worker.value.postMessage(...args);\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, localDeps) {\n  if (deps.length === 0 && localDeps.length === 0)\n    return \"\";\n  const depsString = deps.map((dep) => `'${dep}'`).toString();\n  const depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n    const str = fn.toString();\n    if (str.trim().startsWith(\"function\")) {\n      return str;\n    } else {\n      const name = fn.name;\n      return `const ${name} = ${str}`;\n    }\n  }).join(\";\");\n  const importString = `importScripts(${depsString});`;\n  return `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n  const blobCode = `${depsParser(deps, localDeps)}; 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    localDependencies = [],\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, localDependencies);\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      e.preventDefault();\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(options = {}) {\n  const { window = defaultWindow } = options;\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(options = {}) {\n  const { window = defaultWindow, behavior = \"auto\" } = options;\n  if (!window) {\n    return {\n      x: ref(0),\n      y: ref(0)\n    };\n  }\n  const internalX = ref(window.scrollX);\n  const internalY = ref(window.scrollY);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo({ left: x2, behavior });\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo({ top: y2, behavior });\n    }\n  });\n  useEventListener(\n    window,\n    \"scroll\",\n    () => {\n      internalX.value = window.scrollX;\n      internalY.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 = Number.POSITIVE_INFINITY,\n    initialHeight = Number.POSITIVE_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, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, 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, useClipboardItems, 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","import type { ServerResponse } from 'node:http'\nimport type {\n  LimitedBreakpointsCtx,\n  ScreenContext,\n  ScreenSizeName,\n  ScreenSizePair,\n} from './screen.types'\nimport debounce from 'lodash-es/debounce'\n\n// Nuxt.js supports lodash/template for plugins loaded in modules\n// Device module provides breakpoints coming from `nuxt.config.js` in most cases\nconst BREAKPOINTS_MAP: Record<ScreenSizeName, [number, number]> = JSON.parse(\n  '{\"xs\":[1,575],\"sm\":[576,959],\"md\":[960,1199],\"lg\":[1200,1439],\"xl\":[1440,9999]}',\n)\nconst BREAKPOINTS_ENTRIES = Object.entries(BREAKPOINTS_MAP) as Array<\n  [ScreenSizeName, [number, number]]\n>\nconst HAS_RESIZE_OBSERVER_SUPPORT =\n  typeof window !== 'undefined' && 'ResizeObserver' in window\n\nexport default defineNuxtPlugin({\n  name: 'app:screen',\n  enforce: 'pre',\n  setup(nuxtApp) {\n    if (import.meta.server) {\n      const res = nuxtApp.ssrContext?.event.node.res as ServerResponse\n      if (res && !res.headersSent) {\n        res.setHeader('Accept-CH', 'Viewport-Width, Width')\n      }\n    }\n    const { 'viewport-width': viewportWidth = '0' } = useRequestHeaders()\n    const serverWidth = useState<number>('serverWidth', () =>\n      parseInt(viewportWidth, 10),\n    )\n    const width = ref(serverWidth.value)\n    const height = ref(0)\n    const pageSize = ref(\n      import.meta.server\n        ? { width: width.value, height: height.value }\n        : getPageSize(),\n    )\n\n    const breakpoints = useBreakpoints(width)\n\n    const $screen = reactive<ScreenContext>({\n      breakpoints,\n      onResize() {\n        return () => {}\n      },\n      offResize() {},\n      current: computed(() => getBreakpointNameByWidth(width.value)),\n      isLarge: breakpoints.greaterOrEqual('lg'),\n      isSmall: breakpoints.smaller('md'),\n      isExtraSmall: breakpoints.smaller('sm'),\n    })\n\n    if (import.meta.client) {\n      const observers = new Map<Function, Function>()\n\n      const update = (newPageSize = getPageSize()) => {\n        const { width: viewportWidth, height: viewportHeight } =\n          getViewportSize()\n        width.value = viewportWidth\n        height.value = viewportHeight\n        pageSize.value = newPageSize\n\n        for (const [callback] of observers) {\n          callback(newPageSize)\n        }\n      }\n\n      const debouncedUpdate = debounce(update, 150)\n\n      onNuxtReady(() => update())\n      useEventListener('resize', () => debouncedUpdate(), { passive: true })\n\n      if (HAS_RESIZE_OBSERVER_SUPPORT) {\n        const resizeObserver = new ResizeObserver((entries) => {\n          const entry = entries.at(0)\n          if (!entry) return\n          debouncedUpdate(entry.contentRect)\n        })\n\n        // Once width was update after nuxt is ready, resize observer can start processing\n        watchOnce(width, () => resizeObserver.observe(document.documentElement))\n      }\n\n      function stop(callback: Function) {\n        observers.delete(callback)\n      }\n\n      Object.assign($screen, {\n        onResize(callback) {\n          observers.set(callback, callback)\n          const stopThis = stop.bind(null, callback)\n          tryOnScopeDispose(stopThis)\n          return stopThis\n        },\n        offResize: stop,\n      } satisfies Partial<ScreenContext>)\n    }\n\n    nuxtApp.provide('screen', $screen)\n  },\n})\n\nfunction useBreakpoints(width: Ref<number>): LimitedBreakpointsCtx {\n  const smaller = (sizeName: MaybeRefOrGetter<ScreenSizeName>) => {\n    return computed(() => width.value < BREAKPOINTS_MAP[toValue(sizeName)][0])\n  }\n  const greaterOrEqual = (sizeName: MaybeRefOrGetter<ScreenSizeName>) => {\n    return computed(() => width.value >= BREAKPOINTS_MAP[toValue(sizeName)][0])\n  }\n  return { smaller, greaterOrEqual }\n}\n\nfunction getViewportSize(): ScreenSizePair {\n  if (typeof window === 'undefined') return { width: 0, height: 0 }\n  if (window.visualViewport) {\n    const { width, height } = window.visualViewport\n    return { width, height }\n  }\n  return { width: window.innerWidth, height: window.innerHeight }\n}\n\nfunction getPageSize(): ScreenSizePair {\n  try {\n    const { width, height } = document.documentElement.getBoundingClientRect()\n    return { width, height }\n  } catch (e) {\n    console.error(`Cannot get documentElement clientRect`, e)\n    return { width: 0, height: 0 }\n  }\n}\n\nfunction getBreakpointNameByWidth(width: number) {\n  for (const breakpoint of BREAKPOINTS_ENTRIES) {\n    const [name, [from, to]] = breakpoint\n    if (width >= from && width <= to) return name\n  }\n  return 'xs'\n}\n","import isPlainObject from 'lodash-es/isPlainObject'\nimport type { TranslationKey, TranslationParams } from '~/plugins/i18n'\nimport { replacePlaceholders, pluralize } from '~/utils/strings'\n\nconst isObject = isPlainObject as (obj: unknown) => obj is object\n\nexport function createTranslationMap<O extends object>(\n  obj: O,\n  parent?: string,\n  res = new Map<TranslationKey, string>(),\n) {\n  for (const key in obj) {\n    const propName = parent ? `${parent}.${key}` : key\n    if (isObject(obj[key])) {\n      createTranslationMap(obj[key], propName, res)\n    } else if (typeof obj[key] === 'string') {\n      res.set(propName as TranslationKey, obj[key])\n    }\n  }\n  return res\n}\n\nexport function getTranslation(\n  translations: ReadonlyMap<TranslationKey, string>,\n  key: TranslationKey,\n  params: TranslationParams = {},\n  count?: number,\n) {\n  const textResource = translations.get(key)\n\n  return textResource\n    ? replacePlaceholders(pluralize(textResource, count), {\n        ...params,\n        count: count ?? params.count,\n      })\n    : [count, key.split('.').at(-1)].filter(Boolean).join(' ')\n}\n","import merge from 'lodash-es/merge'\nimport type { RecursiveKeyOf, TranslationsType } from '~/translations/master'\n\nexport interface Translations {\n  [key: string]: string | Translations\n}\n\ntype TranslationKeyType = RecursiveKeyOf<typeof TranslationsType>\nexport type { TranslationKeyType as TranslationKey }\n\ndeclare global {\n  type TranslationKey = TranslationKeyType\n}\n\nexport interface TranslationParams {\n  [key: string]: string\n}\n\nexport type TranslateFn = {\n  /**\n   * Mimics {@link https://vue-i18n.intlify.dev/api/injection.html#t-key-plural | `$t(key, plural)`} function of {@link https://github.com/intlify/vue-i18n | @intlify/vue-i18n}.\n   *\n   * @todo Remove this function after final transition to {@link https://github.com/intlify/vue-i18n | @intlify/vue-i18n}.\n   */\n  (key: TranslationKey, plural?: number): string\n  /**\n   * Mimics {@link https://vue-i18n.intlify.dev/api/injection.html#t-key-named-plural | `$t(key, named, plural)`} function of {@link https://github.com/intlify/vue-i18n | @intlify/vue-i18n}.\n   *\n   * @todo Remove this function after final transition to {@link https://github.com/intlify/vue-i18n | @intlify/vue-i18n}.\n   */\n  (key: TranslationKey, named?: TranslationParams, plural?: number): string\n}\n\nexport type L10NContext = {\n  readonly locale: string\n  readonly language: string\n  translations: typeof TranslationsType\n  translate(\n    key: TranslationKey,\n    params?: TranslationParams,\n    count?: number,\n  ): string\n  setPageTranslations(\n    newTranslations: Translations,\n    newLocale: string,\n    newLanguage: string,\n  ): void\n}\n\nexport default defineNuxtPlugin({\n  name: 'app:i18n',\n  enforce: 'pre',\n  dependsOn: [],\n  async setup(nuxtApp) {\n    let combineTranslations = (translationsObj: Translations) => translationsObj\n\n    /**\n     * During development fallback to master translations is available\n     * due to missing translations in CMS\n     * This functionality is not needed in production\n     */\n    if (import.meta.dev) {\n      const { fallback } = useRuntimeConfig().public.translations\n      const baseTranslations = fallback\n        ? (await import('~/translations/master')).default\n        : {}\n      combineTranslations = (translationsObj: Translations) =>\n        merge({}, baseTranslations, translationsObj)\n    }\n\n    const pageTranslations = ref<Translations>({})\n    const pageLocale = useState<string>('i18n-locale')\n    const pageLanguage = useState<string>('i18n-language')\n\n    const locale = computed(() => pageLocale.value || '')\n    const language = computed(() => pageLanguage.value || '')\n    const translations = computed(\n      () =>\n        combineTranslations(pageTranslations.value) as typeof TranslationsType,\n    )\n    const translationMap = computed(() =>\n      createTranslationMap(translations.value),\n    )\n\n    const $t: TranslateFn = (\n      key: TranslationKey,\n      params?: number | TranslationParams,\n      plural?: number,\n    ) => {\n      return typeof params === 'number'\n        ? getTranslation(translationMap.value, key, {}, params)\n        : getTranslation(translationMap.value, key, params, plural)\n    }\n\n    const $l10n = reactive({\n      locale,\n      language,\n      translations,\n      translate: $t,\n      setPageTranslations(\n        newTranslations: Translations,\n        newLocale: string,\n        newLanguage: string,\n      ) {\n        pageTranslations.value = newTranslations\n        pageLocale.value = newLocale\n        pageLanguage.value = newLanguage\n      },\n    })\n\n    const $i18nMimic = reactive({\n      t: $t,\n      locale,\n    })\n\n    nuxtApp.provide('i18n', $i18nMimic)\n    nuxtApp.provide('t', $t)\n    nuxtApp.provide('l10n', $l10n)\n  },\n})\n\ntype I18NMimic = {\n  t: TranslateFn\n  locale: string\n}\n\ndeclare module '#app' {\n  interface NuxtApp {\n    readonly $t: TranslateFn\n    readonly $l10n: L10NContext\n    readonly $i18n: I18NMimic\n  }\n}\n\ndeclare module '@vue/runtime-core' {\n  interface ComponentCustomProperties {\n    readonly $t: TranslateFn\n    readonly $l10n: L10NContext\n    readonly $i18n: I18NMimic\n  }\n}\n\ndeclare module 'vue' {\n  interface ComponentCustomProperties {\n    readonly $t: TranslateFn\n    readonly $l10n: L10NContext\n    readonly $i18n: I18NMimic\n  }\n}\n","import { computed, getCurrentInstance, getCurrentScope, onBeforeMount, onScopeDispose, onServerPrefetch, onUnmounted, ref, shallowRef, toRef, unref, watch } from \"vue\";\nimport { useNuxtApp } from \"../nuxt.js\";\nimport { toArray } from \"../utils.js\";\nimport { createError } from \"./error.js\";\nimport { onNuxtReady } from \"./ready.js\";\nimport { asyncDataDefaults, resetAsyncDataToUndefined } from \"#build/nuxt.config.mjs\";\nconst isDefer = (dedupe) => dedupe === \"defer\" || dedupe === false;\nexport function useAsyncData(...args) {\n  const autoKey = typeof args[args.length - 1] === \"string\" ? args.pop() : void 0;\n  if (typeof args[0] !== \"string\") {\n    args.unshift(autoKey);\n  }\n  let [key, _handler, options = {}] = args;\n  if (typeof key !== \"string\") {\n    throw new TypeError(\"[nuxt] [asyncData] key must be a string.\");\n  }\n  if (typeof _handler !== \"function\") {\n    throw new TypeError(\"[nuxt] [asyncData] handler must be a function.\");\n  }\n  const nuxtApp = useNuxtApp();\n  const handler = import.meta.client || !import.meta.prerender || !nuxtApp.ssrContext?._sharedPrerenderCache ? _handler : () => {\n    const value = nuxtApp.ssrContext._sharedPrerenderCache.get(key);\n    if (value) {\n      return value;\n    }\n    const promise = Promise.resolve().then(() => nuxtApp.runWithContext(_handler));\n    nuxtApp.ssrContext._sharedPrerenderCache.set(key, promise);\n    return promise;\n  };\n  const getDefault = () => asyncDataDefaults.value;\n  const getDefaultCachedData = () => nuxtApp.isHydrating ? nuxtApp.payload.data[key] : nuxtApp.static.data[key];\n  options.server = options.server ?? true;\n  options.default = options.default ?? getDefault;\n  options.getCachedData = options.getCachedData ?? getDefaultCachedData;\n  options.lazy = options.lazy ?? false;\n  options.immediate = options.immediate ?? true;\n  options.deep = options.deep ?? asyncDataDefaults.deep;\n  options.dedupe = options.dedupe ?? \"cancel\";\n  if (import.meta.dev && typeof options.dedupe === \"boolean\") {\n    console.warn(\"[nuxt] `boolean` values are deprecated for the `dedupe` option of `useAsyncData` and will be removed in the future. Use 'cancel' or 'defer' instead.\");\n  }\n  const hasCachedData = () => options.getCachedData(key, nuxtApp) != null;\n  if (!nuxtApp._asyncData[key] || !options.immediate) {\n    nuxtApp.payload._errors[key] ??= asyncDataDefaults.errorValue;\n    const _ref = options.deep ? ref : shallowRef;\n    nuxtApp._asyncData[key] = {\n      data: _ref(options.getCachedData(key, nuxtApp) ?? options.default()),\n      pending: ref(!hasCachedData()),\n      error: toRef(nuxtApp.payload._errors, key),\n      status: ref(\"idle\"),\n      _default: options.default\n    };\n  }\n  const asyncData = { ...nuxtApp._asyncData[key] };\n  delete asyncData._default;\n  asyncData.refresh = asyncData.execute = (opts = {}) => {\n    if (nuxtApp._asyncDataPromises[key]) {\n      if (isDefer(opts.dedupe ?? options.dedupe)) {\n        return nuxtApp._asyncDataPromises[key];\n      }\n      nuxtApp._asyncDataPromises[key].cancelled = true;\n    }\n    if ((opts._initial || nuxtApp.isHydrating && opts._initial !== false) && hasCachedData()) {\n      return Promise.resolve(options.getCachedData(key, nuxtApp));\n    }\n    asyncData.pending.value = true;\n    asyncData.status.value = \"pending\";\n    const promise = new Promise(\n      (resolve, reject) => {\n        try {\n          resolve(handler(nuxtApp));\n        } catch (err) {\n          reject(err);\n        }\n      }\n    ).then(async (_result) => {\n      if (promise.cancelled) {\n        return nuxtApp._asyncDataPromises[key];\n      }\n      let result = _result;\n      if (options.transform) {\n        result = await options.transform(_result);\n      }\n      if (options.pick) {\n        result = pick(result, options.pick);\n      }\n      if (import.meta.dev && import.meta.server && typeof result === \"undefined\") {\n        console.warn(`[nuxt] \\`${options._functionName || \"useAsyncData\"}\\` must return a value (it should not be \\`undefined\\`) or the request may be duplicated on the client side.`);\n      }\n      nuxtApp.payload.data[key] = result;\n      asyncData.data.value = result;\n      asyncData.error.value = asyncDataDefaults.errorValue;\n      asyncData.status.value = \"success\";\n    }).catch((error) => {\n      if (promise.cancelled) {\n        return nuxtApp._asyncDataPromises[key];\n      }\n      asyncData.error.value = createError(error);\n      asyncData.data.value = unref(options.default());\n      asyncData.status.value = \"error\";\n    }).finally(() => {\n      if (promise.cancelled) {\n        return;\n      }\n      asyncData.pending.value = false;\n      delete nuxtApp._asyncDataPromises[key];\n    });\n    nuxtApp._asyncDataPromises[key] = promise;\n    return nuxtApp._asyncDataPromises[key];\n  };\n  asyncData.clear = () => clearNuxtDataByKey(nuxtApp, key);\n  const initialFetch = () => asyncData.refresh({ _initial: true });\n  const fetchOnServer = options.server !== false && nuxtApp.payload.serverRendered;\n  if (import.meta.server && fetchOnServer && options.immediate) {\n    const promise = initialFetch();\n    if (getCurrentInstance()) {\n      onServerPrefetch(() => promise);\n    } else {\n      nuxtApp.hook(\"app:created\", async () => {\n        await promise;\n      });\n    }\n  }\n  if (import.meta.client) {\n    const instance = getCurrentInstance();\n    if (import.meta.dev && !nuxtApp.isHydrating && (!instance || instance?.isMounted)) {\n      console.warn(`[nuxt] [${options._functionName || \"useAsyncData\"}] Component is already mounted, please use $fetch instead. See https://nuxt.com/docs/getting-started/data-fetching`);\n    }\n    if (instance && !instance._nuxtOnBeforeMountCbs) {\n      instance._nuxtOnBeforeMountCbs = [];\n      const cbs = instance._nuxtOnBeforeMountCbs;\n      onBeforeMount(() => {\n        cbs.forEach((cb) => {\n          cb();\n        });\n        cbs.splice(0, cbs.length);\n      });\n      onUnmounted(() => cbs.splice(0, cbs.length));\n    }\n    if (fetchOnServer && nuxtApp.isHydrating && (asyncData.error.value || hasCachedData())) {\n      asyncData.pending.value = false;\n      asyncData.status.value = asyncData.error.value ? \"error\" : \"success\";\n    } else if (instance && (nuxtApp.payload.serverRendered && nuxtApp.isHydrating || options.lazy) && options.immediate) {\n      instance._nuxtOnBeforeMountCbs.push(initialFetch);\n    } else if (options.immediate) {\n      initialFetch();\n    }\n    const hasScope = getCurrentScope();\n    if (options.watch) {\n      const unsub = watch(options.watch, () => asyncData.refresh());\n      if (hasScope) {\n        onScopeDispose(unsub);\n      }\n    }\n    const off = nuxtApp.hook(\"app:data:refresh\", async (keys) => {\n      if (!keys || keys.includes(key)) {\n        await asyncData.refresh();\n      }\n    });\n    if (hasScope) {\n      onScopeDispose(off);\n    }\n  }\n  const asyncDataPromise = Promise.resolve(nuxtApp._asyncDataPromises[key]).then(() => asyncData);\n  Object.assign(asyncDataPromise, asyncData);\n  return asyncDataPromise;\n}\nexport function useLazyAsyncData(...args) {\n  const autoKey = typeof args[args.length - 1] === \"string\" ? args.pop() : void 0;\n  if (typeof args[0] !== \"string\") {\n    args.unshift(autoKey);\n  }\n  const [key, handler, options = {}] = args;\n  if (import.meta.dev && import.meta.client) {\n    options._functionName ||= \"useLazyAsyncData\";\n  }\n  return useAsyncData(key, handler, { ...options, lazy: true }, null);\n}\nexport function useNuxtData(key) {\n  const nuxtApp = useNuxtApp();\n  if (!(key in nuxtApp.payload.data)) {\n    nuxtApp.payload.data[key] = asyncDataDefaults.value;\n  }\n  return {\n    data: computed({\n      get() {\n        return nuxtApp._asyncData[key]?.data.value ?? nuxtApp.payload.data[key];\n      },\n      set(value) {\n        if (nuxtApp._asyncData[key]) {\n          nuxtApp._asyncData[key].data.value = value;\n        } else {\n          nuxtApp.payload.data[key] = value;\n        }\n      }\n    })\n  };\n}\nexport async function refreshNuxtData(keys) {\n  if (import.meta.server) {\n    return Promise.resolve();\n  }\n  await new Promise((resolve) => onNuxtReady(resolve));\n  const _keys = keys ? toArray(keys) : void 0;\n  await useNuxtApp().hooks.callHookParallel(\"app:data:refresh\", _keys);\n}\nexport function clearNuxtData(keys) {\n  const nuxtApp = useNuxtApp();\n  const _allKeys = Object.keys(nuxtApp.payload.data);\n  const _keys = !keys ? _allKeys : typeof keys === \"function\" ? _allKeys.filter(keys) : toArray(keys);\n  for (const key of _keys) {\n    clearNuxtDataByKey(nuxtApp, key);\n  }\n}\nfunction clearNuxtDataByKey(nuxtApp, key) {\n  if (key in nuxtApp.payload.data) {\n    nuxtApp.payload.data[key] = void 0;\n  }\n  if (key in nuxtApp.payload._errors) {\n    nuxtApp.payload._errors[key] = asyncDataDefaults.errorValue;\n  }\n  if (nuxtApp._asyncData[key]) {\n    nuxtApp._asyncData[key].data.value = resetAsyncDataToUndefined ? void 0 : nuxtApp._asyncData[key]._default();\n    nuxtApp._asyncData[key].error.value = asyncDataDefaults.errorValue;\n    nuxtApp._asyncData[key].pending.value = false;\n    nuxtApp._asyncData[key].status.value = \"idle\";\n  }\n  if (key in nuxtApp._asyncDataPromises) {\n    if (nuxtApp._asyncDataPromises[key]) {\n      nuxtApp._asyncDataPromises[key].cancelled = true;\n    }\n    nuxtApp._asyncDataPromises[key] = void 0;\n  }\n}\nfunction pick(obj, keys) {\n  const newObj = {};\n  for (const key of keys) {\n    newObj[key] = obj[key];\n  }\n  return newObj;\n}\n","import { computed, reactive, toValue } from \"vue\";\nimport { hash } from \"ohash\";\nimport { useRequestFetch } from \"./ssr.js\";\nimport { useAsyncData } from \"./asyncData.js\";\nimport { fetchDefaults } from \"#build/nuxt.config.mjs\";\nexport function useFetch(request, arg1, arg2) {\n  const [opts = {}, autoKey] = typeof arg1 === \"string\" ? [{}, arg1] : [arg1, arg2];\n  const _request = computed(() => toValue(request));\n  const _key = opts.key || hash([autoKey, typeof _request.value === \"string\" ? _request.value : \"\", ...generateOptionSegments(opts)]);\n  if (!_key || typeof _key !== \"string\") {\n    throw new TypeError(\"[nuxt] [useFetch] key must be a string: \" + _key);\n  }\n  if (!request) {\n    throw new Error(\"[nuxt] [useFetch] request is missing.\");\n  }\n  const key = _key === autoKey ? \"$f\" + _key : _key;\n  if (!opts.baseURL && typeof _request.value === \"string\" && (_request.value[0] === \"/\" && _request.value[1] === \"/\")) {\n    throw new Error('[nuxt] [useFetch] the request URL must not start with \"//\".');\n  }\n  const {\n    server,\n    lazy,\n    default: defaultFn,\n    transform,\n    pick,\n    watch,\n    immediate,\n    getCachedData,\n    deep,\n    dedupe,\n    ...fetchOptions\n  } = opts;\n  const _fetchOptions = reactive({\n    ...fetchDefaults,\n    ...fetchOptions,\n    cache: typeof opts.cache === \"boolean\" ? void 0 : opts.cache\n  });\n  const _asyncDataOptions = {\n    server,\n    lazy,\n    default: defaultFn,\n    transform,\n    pick,\n    immediate,\n    getCachedData,\n    deep,\n    dedupe,\n    watch: watch === false ? [] : [_fetchOptions, _request, ...watch || []]\n  };\n  if (import.meta.dev && import.meta.client) {\n    _asyncDataOptions._functionName = opts._functionName || \"useFetch\";\n  }\n  let controller;\n  const asyncData = useAsyncData(key, () => {\n    controller?.abort?.();\n    controller = typeof AbortController !== \"undefined\" ? new AbortController() : {};\n    const timeoutLength = toValue(opts.timeout);\n    let timeoutId;\n    if (timeoutLength) {\n      timeoutId = setTimeout(() => controller.abort(), timeoutLength);\n      controller.signal.onabort = () => clearTimeout(timeoutId);\n    }\n    let _$fetch = opts.$fetch || globalThis.$fetch;\n    if (import.meta.server && !opts.$fetch) {\n      const isLocalFetch = typeof _request.value === \"string\" && _request.value[0] === \"/\" && (!toValue(opts.baseURL) || toValue(opts.baseURL)[0] === \"/\");\n      if (isLocalFetch) {\n        _$fetch = useRequestFetch();\n      }\n    }\n    return _$fetch(_request.value, { signal: controller.signal, ..._fetchOptions }).finally(() => {\n      clearTimeout(timeoutId);\n    });\n  }, _asyncDataOptions);\n  return asyncData;\n}\nexport function useLazyFetch(request, arg1, arg2) {\n  const [opts = {}, autoKey] = typeof arg1 === \"string\" ? [{}, arg1] : [arg1, arg2];\n  if (import.meta.dev && import.meta.client) {\n    opts._functionName ||= \"useLazyFetch\";\n  }\n  return useFetch(\n    request,\n    {\n      ...opts,\n      lazy: true\n    },\n    // @ts-expect-error we pass an extra argument with the resolved auto-key to prevent another from being injected\n    autoKey\n  );\n}\nfunction generateOptionSegments(opts) {\n  const segments = [\n    toValue(opts.method)?.toUpperCase() || \"GET\",\n    toValue(opts.baseURL)\n  ];\n  for (const _obj of [opts.params || opts.query]) {\n    const obj = toValue(_obj);\n    if (!obj) {\n      continue;\n    }\n    const unwrapped = {};\n    for (const [key, value] of Object.entries(obj)) {\n      unwrapped[toValue(key)] = toValue(value);\n    }\n    segments.push(unwrapped);\n  }\n  return segments;\n}\n","import { useNuxtApp } from \"../nuxt.js\";\nimport { toArray } from \"../utils.js\";\nimport { useRouter } from \"./router.js\";\nexport const preloadComponents = async (components) => {\n  if (import.meta.server) {\n    return;\n  }\n  const nuxtApp = useNuxtApp();\n  components = toArray(components);\n  await Promise.all(components.map((name) => _loadAsyncComponent(nuxtApp.vueApp._context.components[name])));\n};\nexport const prefetchComponents = (components) => {\n  if (import.meta.server) {\n    return;\n  }\n  return preloadComponents(components);\n};\nfunction _loadAsyncComponent(component) {\n  if (component?.__asyncLoader && !component.__asyncResolved) {\n    return component.__asyncLoader();\n  }\n}\nexport async function preloadRouteComponents(to, router = useRouter()) {\n  if (import.meta.server) {\n    return;\n  }\n  const { path, matched } = router.resolve(to);\n  if (!matched.length) {\n    return;\n  }\n  if (!router._routePreloaded) {\n    router._routePreloaded = /* @__PURE__ */ new Set();\n  }\n  if (router._routePreloaded.has(path)) {\n    return;\n  }\n  const promises = router._preloadPromises = router._preloadPromises || [];\n  if (promises.length > 4) {\n    return Promise.all(promises).then(() => preloadRouteComponents(to, router));\n  }\n  router._routePreloaded.add(path);\n  const components = matched.map((component) => component.components?.default).filter((component) => typeof component === \"function\");\n  for (const component of components) {\n    const promise = Promise.resolve(component()).catch(() => {\n    }).finally(() => promises.splice(promises.indexOf(promise)));\n    promises.push(promise);\n  }\n  await Promise.all(promises);\n}\n","import destr from \"destr\";\nimport { useNuxtApp } from \"../nuxt.js\";\nexport function reloadNuxtApp(options = {}) {\n  if (import.meta.server) {\n    return;\n  }\n  const path = options.path || window.location.pathname;\n  let handledPath = {};\n  try {\n    handledPath = destr(sessionStorage.getItem(\"nuxt:reload\") || \"{}\");\n  } catch {\n  }\n  if (options.force || handledPath?.path !== path || handledPath?.expires < Date.now()) {\n    try {\n      sessionStorage.setItem(\"nuxt:reload\", JSON.stringify({ path, expires: Date.now() + (options.ttl ?? 1e4) }));\n    } catch {\n    }\n    if (options.persistState) {\n      try {\n        sessionStorage.setItem(\"nuxt:reload:state\", JSON.stringify({ state: useNuxtApp().payload.state }));\n      } catch {\n      }\n    }\n    if (window.location.pathname !== path) {\n      window.location.href = path;\n    } else {\n      window.location.reload();\n    }\n  }\n}\n","import { cloneVNode, createElementBlock, createStaticVNode, defineComponent, getCurrentInstance, h, onMounted, provide, ref } from \"vue\";\nimport { useNuxtApp } from \"../nuxt.js\";\nimport { getFragmentHTML } from \"./utils.js\";\nexport const clientOnlySymbol = Symbol.for(\"nuxt:client-only\");\nexport default defineComponent({\n  name: \"ClientOnly\",\n  inheritAttrs: false,\n  props: [\"fallback\", \"placeholder\", \"placeholderTag\", \"fallbackTag\"],\n  setup(_, { slots, attrs }) {\n    const mounted = ref(false);\n    onMounted(() => {\n      mounted.value = true;\n    });\n    if (import.meta.dev) {\n      const nuxtApp = useNuxtApp();\n      nuxtApp._isNuxtPageUsed = true;\n      nuxtApp._isNuxtLayoutUsed = true;\n    }\n    provide(clientOnlySymbol, true);\n    return (props) => {\n      if (mounted.value) {\n        return slots.default?.();\n      }\n      const slot = slots.fallback || slots.placeholder;\n      if (slot) {\n        return slot();\n      }\n      const fallbackStr = props.fallback || props.placeholder || \"\";\n      const fallbackTag = props.fallbackTag || props.placeholderTag || \"span\";\n      return createElementBlock(fallbackTag, attrs, fallbackStr);\n    };\n  }\n});\nconst cache = /* @__PURE__ */ new WeakMap();\n// @__NO_SIDE_EFFECTS__\nexport function createClientOnly(component) {\n  if (cache.has(component)) {\n    return cache.get(component);\n  }\n  const clone = { ...component };\n  if (clone.render) {\n    clone.render = (ctx, cache2, $props, $setup, $data, $options) => {\n      if ($setup.mounted$ ?? ctx.mounted$) {\n        const res = component.render?.bind(ctx)(ctx, cache2, $props, $setup, $data, $options);\n        return res.children === null || typeof res.children === \"string\" ? cloneVNode(res) : h(res);\n      } else {\n        const fragment = getFragmentHTML(ctx._.vnode.el ?? null) ?? [\"<div></div>\"];\n        return import.meta.client ? createStaticVNode(fragment.join(\"\"), fragment.length) : h(\"div\", ctx.$attrs ?? ctx._.attrs);\n      }\n    };\n  } else if (clone.template) {\n    clone.template = `\n      <template v-if=\"mounted$\">${component.template}</template>\n      <template v-else><div></div></template>\n    `;\n  }\n  clone.setup = (props, ctx) => {\n    const instance = getCurrentInstance();\n    const attrs = { ...instance.attrs };\n    const directives = extractDirectives(instance);\n    for (const key in attrs) {\n      delete instance.attrs[key];\n    }\n    const mounted$ = ref(false);\n    onMounted(() => {\n      Object.assign(instance.attrs, attrs);\n      instance.vnode.dirs = directives;\n      mounted$.value = true;\n    });\n    return Promise.resolve(component.setup?.(props, ctx) || {}).then((setupState) => {\n      if (typeof setupState !== \"function\") {\n        setupState = setupState || {};\n        setupState.mounted$ = mounted$;\n        return setupState;\n      }\n      return (...args) => {\n        if (mounted$.value) {\n          const res = setupState(...args);\n          return res.children === null || typeof res.children === \"string\" ? cloneVNode(res) : h(res);\n        } else {\n          const fragment = getFragmentHTML(instance?.vnode.el ?? null) ?? [\"<div></div>\"];\n          return import.meta.client ? createStaticVNode(fragment.join(\"\"), fragment.length) : h(\"div\", ctx.attrs);\n        }\n      };\n    });\n  };\n  cache.set(component, clone);\n  return clone;\n}\nfunction extractDirectives(instance) {\n  if (!instance || !instance.vnode.dirs) {\n    return null;\n  }\n  const directives = instance.vnode.dirs;\n  instance.vnode.dirs = null;\n  return directives;\n}\n","import { getCurrentInstance, inject } from \"vue\";\nimport { useNuxtApp } from \"../nuxt.js\";\nimport { clientOnlySymbol } from \"#app/components/client-only\";\nconst ATTR_KEY = \"data-n-ids\";\nconst SEPARATOR = \"-\";\nexport function useId(key) {\n  if (typeof key !== \"string\") {\n    throw new TypeError(\"[nuxt] [useId] key must be a string.\");\n  }\n  key = `n${key.slice(1)}`;\n  const nuxtApp = useNuxtApp();\n  const instance = getCurrentInstance();\n  if (!instance) {\n    throw new TypeError(\"[nuxt] `useId` must be called within a component setup function.\");\n  }\n  nuxtApp._id ||= 0;\n  instance._nuxtIdIndex ||= {};\n  instance._nuxtIdIndex[key] ||= 0;\n  const instanceIndex = key + SEPARATOR + instance._nuxtIdIndex[key]++;\n  if (import.meta.server) {\n    const ids = JSON.parse(instance.attrs[ATTR_KEY] || \"{}\");\n    ids[instanceIndex] = key + SEPARATOR + nuxtApp._id++;\n    instance.attrs[ATTR_KEY] = JSON.stringify(ids);\n    return ids[instanceIndex];\n  }\n  if (nuxtApp.payload.serverRendered && nuxtApp.isHydrating && !inject(clientOnlySymbol, false)) {\n    const el = instance.vnode.el?.nodeType === 8 && instance.vnode.el?.nextElementSibling?.getAttribute ? instance.vnode.el?.nextElementSibling : instance.vnode.el;\n    const ids = JSON.parse(el?.getAttribute?.(ATTR_KEY) || \"{}\");\n    if (ids[instanceIndex]) {\n      return ids[instanceIndex];\n    }\n    if (import.meta.dev && instance.vnode.type && typeof instance.vnode.type === \"object\" && \"inheritAttrs\" in instance.vnode.type && instance.vnode.type.inheritAttrs === false) {\n      console.warn(\"[nuxt] `useId` might not work correctly with components that have `inheritAttrs: false`.\");\n    }\n  }\n  return key + \"_\" + nuxtApp._id++;\n}\n","import { computed, defineComponent, h, inject, onBeforeUnmount, onMounted, provide, ref, resolveComponent } from \"vue\";\nimport { hasProtocol, joinURL, parseQuery, withTrailingSlash, withoutTrailingSlash } from \"ufo\";\nimport { preloadRouteComponents } from \"../composables/preload.js\";\nimport { onNuxtReady } from \"../composables/ready.js\";\nimport { navigateTo, resolveRouteObject, useRouter } from \"../composables/router.js\";\nimport { useNuxtApp, useRuntimeConfig } from \"../nuxt.js\";\nimport { cancelIdleCallback, requestIdleCallback } from \"../compat/idle-callback.js\";\nimport { nuxtLinkDefaults } from \"#build/nuxt.config.mjs\";\nconst firstNonUndefined = (...args) => args.find((arg) => arg !== void 0);\nconst NuxtLinkDevKeySymbol = Symbol(\"nuxt-link-dev-key\");\n// @__NO_SIDE_EFFECTS__\nexport function defineNuxtLink(options) {\n  const componentName = options.componentName || \"NuxtLink\";\n  function checkPropConflicts(props, main, sub) {\n    if (import.meta.dev && props[main] !== void 0 && props[sub] !== void 0) {\n      console.warn(`[${componentName}] \\`${main}\\` and \\`${sub}\\` cannot be used together. \\`${sub}\\` will be ignored.`);\n    }\n  }\n  function resolveTrailingSlashBehavior(to, resolve) {\n    if (!to || options.trailingSlash !== \"append\" && options.trailingSlash !== \"remove\") {\n      return to;\n    }\n    if (typeof to === \"string\") {\n      return applyTrailingSlashBehavior(to, options.trailingSlash);\n    }\n    const path = \"path\" in to && to.path !== void 0 ? to.path : resolve(to).path;\n    const resolvedPath = {\n      ...to,\n      name: void 0,\n      // named routes would otherwise always override trailing slash behavior\n      path: applyTrailingSlashBehavior(path, options.trailingSlash)\n    };\n    return resolvedPath;\n  }\n  function useNuxtLink(props) {\n    const router = useRouter();\n    const config = useRuntimeConfig();\n    const hasTarget = computed(() => !!props.target && props.target !== \"_self\");\n    const isAbsoluteUrl = computed(() => {\n      const path = props.to || props.href || \"\";\n      return typeof path === \"string\" && hasProtocol(path, { acceptRelative: true });\n    });\n    const builtinRouterLink = resolveComponent(\"RouterLink\");\n    const useBuiltinLink = builtinRouterLink && typeof builtinRouterLink !== \"string\" ? builtinRouterLink.useLink : void 0;\n    const isExternal = computed(() => {\n      if (props.external) {\n        return true;\n      }\n      const path = props.to || props.href || \"\";\n      if (typeof path === \"object\") {\n        return false;\n      }\n      return path === \"\" || isAbsoluteUrl.value;\n    });\n    const to = computed(() => {\n      checkPropConflicts(props, \"to\", \"href\");\n      const path = props.to || props.href || \"\";\n      if (isExternal.value) {\n        return path;\n      }\n      return resolveTrailingSlashBehavior(path, router.resolve);\n    });\n    const link = isExternal.value ? void 0 : useBuiltinLink?.({ ...props, to });\n    const href = computed(() => {\n      if (!to.value || isAbsoluteUrl.value) {\n        return to.value;\n      }\n      if (isExternal.value) {\n        const path = typeof to.value === \"object\" && \"path\" in to.value ? resolveRouteObject(to.value) : to.value;\n        const href2 = typeof path === \"object\" ? router.resolve(path).href : path;\n        return resolveTrailingSlashBehavior(\n          href2,\n          router.resolve\n          /* will not be called */\n        );\n      }\n      if (typeof to.value === \"object\") {\n        return router.resolve(to.value)?.href ?? null;\n      }\n      return resolveTrailingSlashBehavior(\n        joinURL(config.app.baseURL, to.value),\n        router.resolve\n        /* will not be called */\n      );\n    });\n    return {\n      to,\n      hasTarget,\n      isAbsoluteUrl,\n      isExternal,\n      //\n      href,\n      isActive: link?.isActive ?? computed(() => to.value === router.currentRoute.value.path),\n      isExactActive: link?.isExactActive ?? computed(() => to.value === router.currentRoute.value.path),\n      route: link?.route ?? computed(() => router.resolve(to.value)),\n      async navigate() {\n        await navigateTo(href.value, { replace: props.replace, external: isExternal.value || hasTarget.value });\n      }\n    };\n  }\n  return defineComponent({\n    name: componentName,\n    props: {\n      // Routing\n      to: {\n        type: [String, Object],\n        default: void 0,\n        required: false\n      },\n      href: {\n        type: [String, Object],\n        default: void 0,\n        required: false\n      },\n      // Attributes\n      target: {\n        type: String,\n        default: void 0,\n        required: false\n      },\n      rel: {\n        type: String,\n        default: void 0,\n        required: false\n      },\n      noRel: {\n        type: Boolean,\n        default: void 0,\n        required: false\n      },\n      // Prefetching\n      prefetch: {\n        type: Boolean,\n        default: void 0,\n        required: false\n      },\n      noPrefetch: {\n        type: Boolean,\n        default: void 0,\n        required: false\n      },\n      // Styling\n      activeClass: {\n        type: String,\n        default: void 0,\n        required: false\n      },\n      exactActiveClass: {\n        type: String,\n        default: void 0,\n        required: false\n      },\n      prefetchedClass: {\n        type: String,\n        default: void 0,\n        required: false\n      },\n      // Vue Router's `<RouterLink>` additional props\n      replace: {\n        type: Boolean,\n        default: void 0,\n        required: false\n      },\n      ariaCurrentValue: {\n        type: String,\n        default: void 0,\n        required: false\n      },\n      // Edge cases handling\n      external: {\n        type: Boolean,\n        default: void 0,\n        required: false\n      },\n      // Slot API\n      custom: {\n        type: Boolean,\n        default: void 0,\n        required: false\n      }\n    },\n    useLink: useNuxtLink,\n    setup(props, { slots }) {\n      const router = useRouter();\n      const { to, href, navigate, isExternal, hasTarget, isAbsoluteUrl } = useNuxtLink(props);\n      const prefetched = ref(false);\n      const el = import.meta.server ? void 0 : ref(null);\n      const elRef = import.meta.server ? void 0 : (ref2) => {\n        el.value = props.custom ? ref2?.$el?.nextElementSibling : ref2?.$el;\n      };\n      if (import.meta.client) {\n        checkPropConflicts(props, \"prefetch\", \"noPrefetch\");\n        const shouldPrefetch = props.prefetch !== false && props.noPrefetch !== true && props.target !== \"_blank\" && !isSlowConnection();\n        if (shouldPrefetch) {\n          const nuxtApp = useNuxtApp();\n          let idleId;\n          let unobserve = null;\n          onMounted(() => {\n            const observer = useObserver();\n            onNuxtReady(() => {\n              idleId = requestIdleCallback(() => {\n                if (el?.value?.tagName) {\n                  unobserve = observer.observe(el.value, async () => {\n                    unobserve?.();\n                    unobserve = null;\n                    const path = typeof to.value === \"string\" ? to.value : isExternal.value ? resolveRouteObject(to.value) : router.resolve(to.value).fullPath;\n                    await Promise.all([\n                      nuxtApp.hooks.callHook(\"link:prefetch\", path).catch(() => {\n                      }),\n                      !isExternal.value && !hasTarget.value && preloadRouteComponents(to.value, router).catch(() => {\n                      })\n                    ]);\n                    prefetched.value = true;\n                  });\n                }\n              });\n            });\n          });\n          onBeforeUnmount(() => {\n            if (idleId) {\n              cancelIdleCallback(idleId);\n            }\n            unobserve?.();\n            unobserve = null;\n          });\n        }\n      }\n      if (import.meta.dev && import.meta.server && !props.custom) {\n        const isNuxtLinkChild = inject(NuxtLinkDevKeySymbol, false);\n        if (isNuxtLinkChild) {\n          console.log(\"[nuxt] [NuxtLink] You can't nest one <a> inside another <a>. This will cause a hydration error on client-side. You can pass the `custom` prop to take full control of the markup.\");\n        } else {\n          provide(NuxtLinkDevKeySymbol, true);\n        }\n      }\n      return () => {\n        if (!isExternal.value && !hasTarget.value) {\n          const routerLinkProps = {\n            ref: elRef,\n            to: to.value,\n            activeClass: props.activeClass || options.activeClass,\n            exactActiveClass: props.exactActiveClass || options.exactActiveClass,\n            replace: props.replace,\n            ariaCurrentValue: props.ariaCurrentValue,\n            custom: props.custom\n          };\n          if (!props.custom) {\n            if (prefetched.value) {\n              routerLinkProps.class = props.prefetchedClass || options.prefetchedClass;\n            }\n            routerLinkProps.rel = props.rel || void 0;\n          }\n          return h(\n            resolveComponent(\"RouterLink\"),\n            routerLinkProps,\n            slots.default\n          );\n        }\n        const target = props.target || null;\n        checkPropConflicts(props, \"noRel\", \"rel\");\n        const rel = firstNonUndefined(\n          // converts `\"\"` to `null` to prevent the attribute from being added as empty (`rel=\"\"`)\n          props.noRel ? \"\" : props.rel,\n          options.externalRelAttribute,\n          /*\n          * A fallback rel of `noopener noreferrer` is applied for external links or links that open in a new tab.\n          * This solves a reverse tabnapping security flaw in browsers pre-2021 as well as improving privacy.\n          */\n          isAbsoluteUrl.value || hasTarget.value ? \"noopener noreferrer\" : \"\"\n        ) || null;\n        if (props.custom) {\n          if (!slots.default) {\n            return null;\n          }\n          return slots.default({\n            href: href.value,\n            navigate,\n            get route() {\n              if (!href.value) {\n                return void 0;\n              }\n              const url = new URL(href.value, import.meta.client ? window.location.href : \"http://localhost\");\n              return {\n                path: url.pathname,\n                fullPath: url.pathname,\n                get query() {\n                  return parseQuery(url.search);\n                },\n                hash: url.hash,\n                params: {},\n                name: void 0,\n                matched: [],\n                redirectedFrom: void 0,\n                meta: {},\n                href: href.value\n              };\n            },\n            rel,\n            target,\n            isExternal: isExternal.value || hasTarget.value,\n            isActive: false,\n            isExactActive: false\n          });\n        }\n        return h(\"a\", { ref: el, href: href.value || null, rel, target }, slots.default?.());\n      };\n    }\n  });\n}\nexport default /* @__PURE__ */ defineNuxtLink(nuxtLinkDefaults);\nfunction applyTrailingSlashBehavior(to, trailingSlash) {\n  const normalizeFn = trailingSlash === \"append\" ? withTrailingSlash : withoutTrailingSlash;\n  const hasProtocolDifferentFromHttp = hasProtocol(to) && !to.startsWith(\"http\");\n  if (hasProtocolDifferentFromHttp) {\n    return to;\n  }\n  return normalizeFn(to, true);\n}\nfunction useObserver() {\n  if (import.meta.server) {\n    return;\n  }\n  const nuxtApp = useNuxtApp();\n  if (nuxtApp._observer) {\n    return nuxtApp._observer;\n  }\n  let observer = null;\n  const callbacks = /* @__PURE__ */ new Map();\n  const observe = (element, callback) => {\n    if (!observer) {\n      observer = new IntersectionObserver((entries) => {\n        for (const entry of entries) {\n          const callback2 = callbacks.get(entry.target);\n          const isVisible = entry.isIntersecting || entry.intersectionRatio > 0;\n          if (isVisible && callback2) {\n            callback2();\n          }\n        }\n      });\n    }\n    callbacks.set(element, callback);\n    observer.observe(element);\n    return () => {\n      callbacks.delete(element);\n      observer.unobserve(element);\n      if (callbacks.size === 0) {\n        observer.disconnect();\n        observer = null;\n      }\n    };\n  };\n  const _observer = nuxtApp._observer = {\n    observe\n  };\n  return _observer;\n}\nfunction isSlowConnection() {\n  if (import.meta.server) {\n    return;\n  }\n  const cn = navigator.connection;\n  if (cn && (cn.saveData || /2g/.test(cn.effectiveType))) {\n    return true;\n  }\n  return false;\n}\n","/*!\n * pinia v2.2.4\n * (c) 2024 Eduardo San Martin Morote\n * @license MIT\n */\nimport { hasInjectionContext, inject, toRaw, watch, unref, markRaw, effectScope, ref, isVue2, isRef, isReactive, set, getCurrentScope, onScopeDispose, getCurrentInstance, reactive, toRef, del, nextTick, computed, toRefs } from 'vue-demi';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\n/**\n * setActivePinia must be called to handle SSR at the top of functions like\n * `fetch`, `setup`, `serverPrefetch` and others\n */\nlet activePinia;\n/**\n * Sets or unsets the active pinia. Used in SSR and internally when calling\n * actions and getters\n *\n * @param pinia - Pinia instance\n */\n// @ts-expect-error: cannot constrain the type of the return\nconst setActivePinia = (pinia) => (activePinia = pinia);\n/**\n * Get the currently active pinia if there is any.\n */\nconst getActivePinia = () => (hasInjectionContext() && inject(piniaSymbol)) || activePinia;\nconst piniaSymbol = ((process.env.NODE_ENV !== 'production') ? Symbol('pinia') : /* istanbul ignore next */ Symbol());\n\nfunction isPlainObject(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\no) {\n    return (o &&\n        typeof o === 'object' &&\n        Object.prototype.toString.call(o) === '[object Object]' &&\n        typeof o.toJSON !== 'function');\n}\n// type DeepReadonly<T> = { readonly [P in keyof T]: DeepReadonly<T[P]> }\n// TODO: can we change these to numbers?\n/**\n * Possible types for SubscriptionCallback\n */\nvar MutationType;\n(function (MutationType) {\n    /**\n     * Direct mutation of the state:\n     *\n     * - `store.name = 'new name'`\n     * - `store.$state.name = 'new name'`\n     * - `store.list.push('new item')`\n     */\n    MutationType[\"direct\"] = \"direct\";\n    /**\n     * Mutated the state with `$patch` and an object\n     *\n     * - `store.$patch({ name: 'newName' })`\n     */\n    MutationType[\"patchObject\"] = \"patch object\";\n    /**\n     * Mutated the state with `$patch` and a function\n     *\n     * - `store.$patch(state => state.name = 'newName')`\n     */\n    MutationType[\"patchFunction\"] = \"patch function\";\n    // maybe reset? for $state = {} and $reset\n})(MutationType || (MutationType = {}));\n\nconst IS_CLIENT = typeof window !== 'undefined';\n\n/*\n * FileSaver.js A saveAs() FileSaver implementation.\n *\n * Originally by Eli Grey, adapted as an ESM module by Eduardo San Martin\n * Morote.\n *\n * License : MIT\n */\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nconst _global = /*#__PURE__*/ (() => typeof window === 'object' && window.window === window\n    ? window\n    : typeof self === 'object' && self.self === self\n        ? self\n        : typeof global === 'object' && global.global === global\n            ? global\n            : typeof globalThis === 'object'\n                ? globalThis\n                : { HTMLElement: null })();\nfunction bom(blob, { autoBom = false } = {}) {\n    // prepend BOM for UTF-8 XML and text/* types (including HTML)\n    // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n    if (autoBom &&\n        /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n        return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n    }\n    return blob;\n}\nfunction download(url, name, opts) {\n    const xhr = new XMLHttpRequest();\n    xhr.open('GET', url);\n    xhr.responseType = 'blob';\n    xhr.onload = function () {\n        saveAs(xhr.response, name, opts);\n    };\n    xhr.onerror = function () {\n        console.error('could not download file');\n    };\n    xhr.send();\n}\nfunction corsEnabled(url) {\n    const xhr = new XMLHttpRequest();\n    // use sync to avoid popup blocker\n    xhr.open('HEAD', url, false);\n    try {\n        xhr.send();\n    }\n    catch (e) { }\n    return xhr.status >= 200 && xhr.status <= 299;\n}\n// `a.click()` doesn't work for all browsers (#465)\nfunction click(node) {\n    try {\n        node.dispatchEvent(new MouseEvent('click'));\n    }\n    catch (e) {\n        const evt = document.createEvent('MouseEvents');\n        evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);\n        node.dispatchEvent(evt);\n    }\n}\nconst _navigator = typeof navigator === 'object' ? navigator : { userAgent: '' };\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nconst isMacOSWebView = /*#__PURE__*/ (() => /Macintosh/.test(_navigator.userAgent) &&\n    /AppleWebKit/.test(_navigator.userAgent) &&\n    !/Safari/.test(_navigator.userAgent))();\nconst saveAs = !IS_CLIENT\n    ? () => { } // noop\n    : // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program\n        typeof HTMLAnchorElement !== 'undefined' &&\n            'download' in HTMLAnchorElement.prototype &&\n            !isMacOSWebView\n            ? downloadSaveAs\n            : // Use msSaveOrOpenBlob as a second approach\n                'msSaveOrOpenBlob' in _navigator\n                    ? msSaveAs\n                    : // Fallback to using FileReader and a popup\n                        fileSaverSaveAs;\nfunction downloadSaveAs(blob, name = 'download', opts) {\n    const a = document.createElement('a');\n    a.download = name;\n    a.rel = 'noopener'; // tabnabbing\n    // TODO: detect chrome extensions & packaged apps\n    // a.target = '_blank'\n    if (typeof blob === 'string') {\n        // Support regular links\n        a.href = blob;\n        if (a.origin !== location.origin) {\n            if (corsEnabled(a.href)) {\n                download(blob, name, opts);\n            }\n            else {\n                a.target = '_blank';\n                click(a);\n            }\n        }\n        else {\n            click(a);\n        }\n    }\n    else {\n        // Support blobs\n        a.href = URL.createObjectURL(blob);\n        setTimeout(function () {\n            URL.revokeObjectURL(a.href);\n        }, 4e4); // 40s\n        setTimeout(function () {\n            click(a);\n        }, 0);\n    }\n}\nfunction msSaveAs(blob, name = 'download', opts) {\n    if (typeof blob === 'string') {\n        if (corsEnabled(blob)) {\n            download(blob, name, opts);\n        }\n        else {\n            const a = document.createElement('a');\n            a.href = blob;\n            a.target = '_blank';\n            setTimeout(function () {\n                click(a);\n            });\n        }\n    }\n    else {\n        // @ts-ignore: works on windows\n        navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n    }\n}\nfunction fileSaverSaveAs(blob, name, opts, popup) {\n    // Open a popup immediately do go around popup blocker\n    // Mostly only available on user interaction and the fileReader is async so...\n    popup = popup || open('', '_blank');\n    if (popup) {\n        popup.document.title = popup.document.body.innerText = 'downloading...';\n    }\n    if (typeof blob === 'string')\n        return download(blob, name, opts);\n    const force = blob.type === 'application/octet-stream';\n    const isSafari = /constructor/i.test(String(_global.HTMLElement)) || 'safari' in _global;\n    const isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n    if ((isChromeIOS || (force && isSafari) || isMacOSWebView) &&\n        typeof FileReader !== 'undefined') {\n        // Safari doesn't allow downloading of blob URLs\n        const reader = new FileReader();\n        reader.onloadend = function () {\n            let url = reader.result;\n            if (typeof url !== 'string') {\n                popup = null;\n                throw new Error('Wrong reader.result type');\n            }\n            url = isChromeIOS\n                ? url\n                : url.replace(/^data:[^;]*;/, 'data:attachment/file;');\n            if (popup) {\n                popup.location.href = url;\n            }\n            else {\n                location.assign(url);\n            }\n            popup = null; // reverse-tabnabbing #460\n        };\n        reader.readAsDataURL(blob);\n    }\n    else {\n        const url = URL.createObjectURL(blob);\n        if (popup)\n            popup.location.assign(url);\n        else\n            location.href = url;\n        popup = null; // reverse-tabnabbing #460\n        setTimeout(function () {\n            URL.revokeObjectURL(url);\n        }, 4e4); // 40s\n    }\n}\n\n/**\n * Shows a toast or console.log\n *\n * @param message - message to log\n * @param type - different color of the tooltip\n */\nfunction toastMessage(message, type) {\n    const piniaMessage = '🍍 ' + message;\n    if (typeof __VUE_DEVTOOLS_TOAST__ === 'function') {\n        // No longer available :(\n        __VUE_DEVTOOLS_TOAST__(piniaMessage, type);\n    }\n    else if (type === 'error') {\n        console.error(piniaMessage);\n    }\n    else if (type === 'warn') {\n        console.warn(piniaMessage);\n    }\n    else {\n        console.log(piniaMessage);\n    }\n}\nfunction isPinia(o) {\n    return '_a' in o && 'install' in o;\n}\n\n/**\n * This file contain devtools actions, they are not Pinia actions.\n */\n// ---\nfunction checkClipboardAccess() {\n    if (!('clipboard' in navigator)) {\n        toastMessage(`Your browser doesn't support the Clipboard API`, 'error');\n        return true;\n    }\n}\nfunction checkNotFocusedError(error) {\n    if (error instanceof Error &&\n        error.message.toLowerCase().includes('document is not focused')) {\n        toastMessage('You need to activate the \"Emulate a focused page\" setting in the \"Rendering\" panel of devtools.', 'warn');\n        return true;\n    }\n    return false;\n}\nasync function actionGlobalCopyState(pinia) {\n    if (checkClipboardAccess())\n        return;\n    try {\n        await navigator.clipboard.writeText(JSON.stringify(pinia.state.value));\n        toastMessage('Global state copied to clipboard.');\n    }\n    catch (error) {\n        if (checkNotFocusedError(error))\n            return;\n        toastMessage(`Failed to serialize the state. Check the console for more details.`, 'error');\n        console.error(error);\n    }\n}\nasync function actionGlobalPasteState(pinia) {\n    if (checkClipboardAccess())\n        return;\n    try {\n        loadStoresState(pinia, JSON.parse(await navigator.clipboard.readText()));\n        toastMessage('Global state pasted from clipboard.');\n    }\n    catch (error) {\n        if (checkNotFocusedError(error))\n            return;\n        toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, 'error');\n        console.error(error);\n    }\n}\nasync function actionGlobalSaveState(pinia) {\n    try {\n        saveAs(new Blob([JSON.stringify(pinia.state.value)], {\n            type: 'text/plain;charset=utf-8',\n        }), 'pinia-state.json');\n    }\n    catch (error) {\n        toastMessage(`Failed to export the state as JSON. Check the console for more details.`, 'error');\n        console.error(error);\n    }\n}\nlet fileInput;\nfunction getFileOpener() {\n    if (!fileInput) {\n        fileInput = document.createElement('input');\n        fileInput.type = 'file';\n        fileInput.accept = '.json';\n    }\n    function openFile() {\n        return new Promise((resolve, reject) => {\n            fileInput.onchange = async () => {\n                const files = fileInput.files;\n                if (!files)\n                    return resolve(null);\n                const file = files.item(0);\n                if (!file)\n                    return resolve(null);\n                return resolve({ text: await file.text(), file });\n            };\n            // @ts-ignore: TODO: changed from 4.3 to 4.4\n            fileInput.oncancel = () => resolve(null);\n            fileInput.onerror = reject;\n            fileInput.click();\n        });\n    }\n    return openFile;\n}\nasync function actionGlobalOpenStateFile(pinia) {\n    try {\n        const open = getFileOpener();\n        const result = await open();\n        if (!result)\n            return;\n        const { text, file } = result;\n        loadStoresState(pinia, JSON.parse(text));\n        toastMessage(`Global state imported from \"${file.name}\".`);\n    }\n    catch (error) {\n        toastMessage(`Failed to import the state from JSON. Check the console for more details.`, 'error');\n        console.error(error);\n    }\n}\nfunction loadStoresState(pinia, state) {\n    for (const key in state) {\n        const storeState = pinia.state.value[key];\n        // store is already instantiated, patch it\n        if (storeState) {\n            Object.assign(storeState, state[key]);\n        }\n        else {\n            // store is not instantiated, set the initial state\n            pinia.state.value[key] = state[key];\n        }\n    }\n}\n\nfunction formatDisplay(display) {\n    return {\n        _custom: {\n            display,\n        },\n    };\n}\nconst PINIA_ROOT_LABEL = '🍍 Pinia (root)';\nconst PINIA_ROOT_ID = '_root';\nfunction formatStoreForInspectorTree(store) {\n    return isPinia(store)\n        ? {\n            id: PINIA_ROOT_ID,\n            label: PINIA_ROOT_LABEL,\n        }\n        : {\n            id: store.$id,\n            label: store.$id,\n        };\n}\nfunction formatStoreForInspectorState(store) {\n    if (isPinia(store)) {\n        const storeNames = Array.from(store._s.keys());\n        const storeMap = store._s;\n        const state = {\n            state: storeNames.map((storeId) => ({\n                editable: true,\n                key: storeId,\n                value: store.state.value[storeId],\n            })),\n            getters: storeNames\n                .filter((id) => storeMap.get(id)._getters)\n                .map((id) => {\n                const store = storeMap.get(id);\n                return {\n                    editable: false,\n                    key: id,\n                    value: store._getters.reduce((getters, key) => {\n                        getters[key] = store[key];\n                        return getters;\n                    }, {}),\n                };\n            }),\n        };\n        return state;\n    }\n    const state = {\n        state: Object.keys(store.$state).map((key) => ({\n            editable: true,\n            key,\n            value: store.$state[key],\n        })),\n    };\n    // avoid adding empty getters\n    if (store._getters && store._getters.length) {\n        state.getters = store._getters.map((getterName) => ({\n            editable: false,\n            key: getterName,\n            value: store[getterName],\n        }));\n    }\n    if (store._customProperties.size) {\n        state.customProperties = Array.from(store._customProperties).map((key) => ({\n            editable: true,\n            key,\n            value: store[key],\n        }));\n    }\n    return state;\n}\nfunction formatEventData(events) {\n    if (!events)\n        return {};\n    if (Array.isArray(events)) {\n        // TODO: handle add and delete for arrays and objects\n        return events.reduce((data, event) => {\n            data.keys.push(event.key);\n            data.operations.push(event.type);\n            data.oldValue[event.key] = event.oldValue;\n            data.newValue[event.key] = event.newValue;\n            return data;\n        }, {\n            oldValue: {},\n            keys: [],\n            operations: [],\n            newValue: {},\n        });\n    }\n    else {\n        return {\n            operation: formatDisplay(events.type),\n            key: formatDisplay(events.key),\n            oldValue: events.oldValue,\n            newValue: events.newValue,\n        };\n    }\n}\nfunction formatMutationType(type) {\n    switch (type) {\n        case MutationType.direct:\n            return 'mutation';\n        case MutationType.patchFunction:\n            return '$patch';\n        case MutationType.patchObject:\n            return '$patch';\n        default:\n            return 'unknown';\n    }\n}\n\n// timeline can be paused when directly changing the state\nlet isTimelineActive = true;\nconst componentStateTypes = [];\nconst MUTATIONS_LAYER_ID = 'pinia:mutations';\nconst INSPECTOR_ID = 'pinia';\nconst { assign: assign$1 } = Object;\n/**\n * Gets the displayed name of a store in devtools\n *\n * @param id - id of the store\n * @returns a formatted string\n */\nconst getStoreType = (id) => '🍍 ' + id;\n/**\n * Add the pinia plugin without any store. Allows displaying a Pinia plugin tab\n * as soon as it is added to the application.\n *\n * @param app - Vue application\n * @param pinia - pinia instance\n */\nfunction registerPiniaDevtools(app, pinia) {\n    setupDevtoolsPlugin({\n        id: 'dev.esm.pinia',\n        label: 'Pinia 🍍',\n        logo: 'https://pinia.vuejs.org/logo.svg',\n        packageName: 'pinia',\n        homepage: 'https://pinia.vuejs.org',\n        componentStateTypes,\n        app,\n    }, (api) => {\n        if (typeof api.now !== 'function') {\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.');\n        }\n        api.addTimelineLayer({\n            id: MUTATIONS_LAYER_ID,\n            label: `Pinia 🍍`,\n            color: 0xe5df88,\n        });\n        api.addInspector({\n            id: INSPECTOR_ID,\n            label: 'Pinia 🍍',\n            icon: 'storage',\n            treeFilterPlaceholder: 'Search stores',\n            actions: [\n                {\n                    icon: 'content_copy',\n                    action: () => {\n                        actionGlobalCopyState(pinia);\n                    },\n                    tooltip: 'Serialize and copy the state',\n                },\n                {\n                    icon: 'content_paste',\n                    action: async () => {\n                        await actionGlobalPasteState(pinia);\n                        api.sendInspectorTree(INSPECTOR_ID);\n                        api.sendInspectorState(INSPECTOR_ID);\n                    },\n                    tooltip: 'Replace the state with the content of your clipboard',\n                },\n                {\n                    icon: 'save',\n                    action: () => {\n                        actionGlobalSaveState(pinia);\n                    },\n                    tooltip: 'Save the state as a JSON file',\n                },\n                {\n                    icon: 'folder_open',\n                    action: async () => {\n                        await actionGlobalOpenStateFile(pinia);\n                        api.sendInspectorTree(INSPECTOR_ID);\n                        api.sendInspectorState(INSPECTOR_ID);\n                    },\n                    tooltip: 'Import the state from a JSON file',\n                },\n            ],\n            nodeActions: [\n                {\n                    icon: 'restore',\n                    tooltip: 'Reset the state (with \"$reset\")',\n                    action: (nodeId) => {\n                        const store = pinia._s.get(nodeId);\n                        if (!store) {\n                            toastMessage(`Cannot reset \"${nodeId}\" store because it wasn't found.`, 'warn');\n                        }\n                        else if (typeof store.$reset !== 'function') {\n                            toastMessage(`Cannot reset \"${nodeId}\" store because it doesn't have a \"$reset\" method implemented.`, 'warn');\n                        }\n                        else {\n                            store.$reset();\n                            toastMessage(`Store \"${nodeId}\" reset.`);\n                        }\n                    },\n                },\n            ],\n        });\n        api.on.inspectComponent((payload, ctx) => {\n            const proxy = (payload.componentInstance &&\n                payload.componentInstance.proxy);\n            if (proxy && proxy._pStores) {\n                const piniaStores = payload.componentInstance.proxy._pStores;\n                Object.values(piniaStores).forEach((store) => {\n                    payload.instanceData.state.push({\n                        type: getStoreType(store.$id),\n                        key: 'state',\n                        editable: true,\n                        value: store._isOptionsAPI\n                            ? {\n                                _custom: {\n                                    value: toRaw(store.$state),\n                                    actions: [\n                                        {\n                                            icon: 'restore',\n                                            tooltip: 'Reset the state of this store',\n                                            action: () => store.$reset(),\n                                        },\n                                    ],\n                                },\n                            }\n                            : // NOTE: workaround to unwrap transferred refs\n                                Object.keys(store.$state).reduce((state, key) => {\n                                    state[key] = store.$state[key];\n                                    return state;\n                                }, {}),\n                    });\n                    if (store._getters && store._getters.length) {\n                        payload.instanceData.state.push({\n                            type: getStoreType(store.$id),\n                            key: 'getters',\n                            editable: false,\n                            value: store._getters.reduce((getters, key) => {\n                                try {\n                                    getters[key] = store[key];\n                                }\n                                catch (error) {\n                                    // @ts-expect-error: we just want to show it in devtools\n                                    getters[key] = error;\n                                }\n                                return getters;\n                            }, {}),\n                        });\n                    }\n                });\n            }\n        });\n        api.on.getInspectorTree((payload) => {\n            if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n                let stores = [pinia];\n                stores = stores.concat(Array.from(pinia._s.values()));\n                payload.rootNodes = (payload.filter\n                    ? stores.filter((store) => '$id' in store\n                        ? store.$id\n                            .toLowerCase()\n                            .includes(payload.filter.toLowerCase())\n                        : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase()))\n                    : stores).map(formatStoreForInspectorTree);\n            }\n        });\n        // Expose pinia instance as $pinia to window\n        globalThis.$pinia = pinia;\n        api.on.getInspectorState((payload) => {\n            if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n                const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n                    ? pinia\n                    : pinia._s.get(payload.nodeId);\n                if (!inspectedStore) {\n                    // this could be the selected store restored for a different project\n                    // so it's better not to say anything here\n                    return;\n                }\n                if (inspectedStore) {\n                    // Expose selected store as $store to window\n                    if (payload.nodeId !== PINIA_ROOT_ID)\n                        globalThis.$store = toRaw(inspectedStore);\n                    payload.state = formatStoreForInspectorState(inspectedStore);\n                }\n            }\n        });\n        api.on.editInspectorState((payload, ctx) => {\n            if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n                const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n                    ? pinia\n                    : pinia._s.get(payload.nodeId);\n                if (!inspectedStore) {\n                    return toastMessage(`store \"${payload.nodeId}\" not found`, 'error');\n                }\n                const { path } = payload;\n                if (!isPinia(inspectedStore)) {\n                    // access only the state\n                    if (path.length !== 1 ||\n                        !inspectedStore._customProperties.has(path[0]) ||\n                        path[0] in inspectedStore.$state) {\n                        path.unshift('$state');\n                    }\n                }\n                else {\n                    // Root access, we can omit the `.value` because the devtools API does it for us\n                    path.unshift('state');\n                }\n                isTimelineActive = false;\n                payload.set(inspectedStore, path, payload.state.value);\n                isTimelineActive = true;\n            }\n        });\n        api.on.editComponentState((payload) => {\n            if (payload.type.startsWith('🍍')) {\n                const storeId = payload.type.replace(/^🍍\\s*/, '');\n                const store = pinia._s.get(storeId);\n                if (!store) {\n                    return toastMessage(`store \"${storeId}\" not found`, 'error');\n                }\n                const { path } = payload;\n                if (path[0] !== 'state') {\n                    return toastMessage(`Invalid path for store \"${storeId}\":\\n${path}\\nOnly state can be modified.`);\n                }\n                // rewrite the first entry to be able to directly set the state as\n                // well as any other path\n                path[0] = '$state';\n                isTimelineActive = false;\n                payload.set(store, path, payload.state.value);\n                isTimelineActive = true;\n            }\n        });\n    });\n}\nfunction addStoreToDevtools(app, store) {\n    if (!componentStateTypes.includes(getStoreType(store.$id))) {\n        componentStateTypes.push(getStoreType(store.$id));\n    }\n    setupDevtoolsPlugin({\n        id: 'dev.esm.pinia',\n        label: 'Pinia 🍍',\n        logo: 'https://pinia.vuejs.org/logo.svg',\n        packageName: 'pinia',\n        homepage: 'https://pinia.vuejs.org',\n        componentStateTypes,\n        app,\n        settings: {\n            logStoreChanges: {\n                label: 'Notify about new/deleted stores',\n                type: 'boolean',\n                defaultValue: true,\n            },\n            // useEmojis: {\n            //   label: 'Use emojis in messages ⚡️',\n            //   type: 'boolean',\n            //   defaultValue: true,\n            // },\n        },\n    }, (api) => {\n        // gracefully handle errors\n        const now = typeof api.now === 'function' ? api.now.bind(api) : Date.now;\n        store.$onAction(({ after, onError, name, args }) => {\n            const groupId = runningActionId++;\n            api.addTimelineEvent({\n                layerId: MUTATIONS_LAYER_ID,\n                event: {\n                    time: now(),\n                    title: '🛫 ' + name,\n                    subtitle: 'start',\n                    data: {\n                        store: formatDisplay(store.$id),\n                        action: formatDisplay(name),\n                        args,\n                    },\n                    groupId,\n                },\n            });\n            after((result) => {\n                activeAction = undefined;\n                api.addTimelineEvent({\n                    layerId: MUTATIONS_LAYER_ID,\n                    event: {\n                        time: now(),\n                        title: '🛬 ' + name,\n                        subtitle: 'end',\n                        data: {\n                            store: formatDisplay(store.$id),\n                            action: formatDisplay(name),\n                            args,\n                            result,\n                        },\n                        groupId,\n                    },\n                });\n            });\n            onError((error) => {\n                activeAction = undefined;\n                api.addTimelineEvent({\n                    layerId: MUTATIONS_LAYER_ID,\n                    event: {\n                        time: now(),\n                        logType: 'error',\n                        title: '💥 ' + name,\n                        subtitle: 'end',\n                        data: {\n                            store: formatDisplay(store.$id),\n                            action: formatDisplay(name),\n                            args,\n                            error,\n                        },\n                        groupId,\n                    },\n                });\n            });\n        }, true);\n        store._customProperties.forEach((name) => {\n            watch(() => unref(store[name]), (newValue, oldValue) => {\n                api.notifyComponentUpdate();\n                api.sendInspectorState(INSPECTOR_ID);\n                if (isTimelineActive) {\n                    api.addTimelineEvent({\n                        layerId: MUTATIONS_LAYER_ID,\n                        event: {\n                            time: now(),\n                            title: 'Change',\n                            subtitle: name,\n                            data: {\n                                newValue,\n                                oldValue,\n                            },\n                            groupId: activeAction,\n                        },\n                    });\n                }\n            }, { deep: true });\n        });\n        store.$subscribe(({ events, type }, state) => {\n            api.notifyComponentUpdate();\n            api.sendInspectorState(INSPECTOR_ID);\n            if (!isTimelineActive)\n                return;\n            // rootStore.state[store.id] = state\n            const eventData = {\n                time: now(),\n                title: formatMutationType(type),\n                data: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)),\n                groupId: activeAction,\n            };\n            if (type === MutationType.patchFunction) {\n                eventData.subtitle = '⤵️';\n            }\n            else if (type === MutationType.patchObject) {\n                eventData.subtitle = '🧩';\n            }\n            else if (events && !Array.isArray(events)) {\n                eventData.subtitle = events.type;\n            }\n            if (events) {\n                eventData.data['rawEvent(s)'] = {\n                    _custom: {\n                        display: 'DebuggerEvent',\n                        type: 'object',\n                        tooltip: 'raw DebuggerEvent[]',\n                        value: events,\n                    },\n                };\n            }\n            api.addTimelineEvent({\n                layerId: MUTATIONS_LAYER_ID,\n                event: eventData,\n            });\n        }, { detached: true, flush: 'sync' });\n        const hotUpdate = store._hotUpdate;\n        store._hotUpdate = markRaw((newStore) => {\n            hotUpdate(newStore);\n            api.addTimelineEvent({\n                layerId: MUTATIONS_LAYER_ID,\n                event: {\n                    time: now(),\n                    title: '🔥 ' + store.$id,\n                    subtitle: 'HMR update',\n                    data: {\n                        store: formatDisplay(store.$id),\n                        info: formatDisplay(`HMR update`),\n                    },\n                },\n            });\n            // update the devtools too\n            api.notifyComponentUpdate();\n            api.sendInspectorTree(INSPECTOR_ID);\n            api.sendInspectorState(INSPECTOR_ID);\n        });\n        const { $dispose } = store;\n        store.$dispose = () => {\n            $dispose();\n            api.notifyComponentUpdate();\n            api.sendInspectorTree(INSPECTOR_ID);\n            api.sendInspectorState(INSPECTOR_ID);\n            api.getSettings().logStoreChanges &&\n                toastMessage(`Disposed \"${store.$id}\" store 🗑`);\n        };\n        // trigger an update so it can display new registered stores\n        api.notifyComponentUpdate();\n        api.sendInspectorTree(INSPECTOR_ID);\n        api.sendInspectorState(INSPECTOR_ID);\n        api.getSettings().logStoreChanges &&\n            toastMessage(`\"${store.$id}\" store installed 🆕`);\n    });\n}\nlet runningActionId = 0;\nlet activeAction;\n/**\n * Patches a store to enable action grouping in devtools by wrapping the store with a Proxy that is passed as the\n * context of all actions, allowing us to set `runningAction` on each access and effectively associating any state\n * mutation to the action.\n *\n * @param store - store to patch\n * @param actionNames - list of actionst to patch\n */\nfunction patchActionForGrouping(store, actionNames, wrapWithProxy) {\n    // original actions of the store as they are given by pinia. We are going to override them\n    const actions = actionNames.reduce((storeActions, actionName) => {\n        // use toRaw to avoid tracking #541\n        storeActions[actionName] = toRaw(store)[actionName];\n        return storeActions;\n    }, {});\n    for (const actionName in actions) {\n        store[actionName] = function () {\n            // the running action id is incremented in a before action hook\n            const _actionId = runningActionId;\n            const trackedStore = wrapWithProxy\n                ? new Proxy(store, {\n                    get(...args) {\n                        activeAction = _actionId;\n                        return Reflect.get(...args);\n                    },\n                    set(...args) {\n                        activeAction = _actionId;\n                        return Reflect.set(...args);\n                    },\n                })\n                : store;\n            // For Setup Stores we need https://github.com/tc39/proposal-async-context\n            activeAction = _actionId;\n            const retValue = actions[actionName].apply(trackedStore, arguments);\n            // this is safer as async actions in Setup Stores would associate mutations done outside of the action\n            activeAction = undefined;\n            return retValue;\n        };\n    }\n}\n/**\n * pinia.use(devtoolsPlugin)\n */\nfunction devtoolsPlugin({ app, store, options }) {\n    // HMR module\n    if (store.$id.startsWith('__hot:')) {\n        return;\n    }\n    // detect option api vs setup api\n    store._isOptionsAPI = !!options.state;\n    // Do not overwrite actions mocked by @pinia/testing (#2298)\n    if (!store._p._testing) {\n        patchActionForGrouping(store, Object.keys(options.actions), store._isOptionsAPI);\n        // Upgrade the HMR to also update the new actions\n        const originalHotUpdate = store._hotUpdate;\n        toRaw(store)._hotUpdate = function (newStore) {\n            originalHotUpdate.apply(this, arguments);\n            patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions), !!store._isOptionsAPI);\n        };\n    }\n    addStoreToDevtools(app, \n    // FIXME: is there a way to allow the assignment from Store<Id, S, G, A> to StoreGeneric?\n    store);\n}\n\n/**\n * Creates a Pinia instance to be used by the application\n */\nfunction createPinia() {\n    const scope = effectScope(true);\n    // NOTE: here we could check the window object for a state and directly set it\n    // if there is anything like it with Vue 3 SSR\n    const state = scope.run(() => ref({}));\n    let _p = [];\n    // plugins added before calling app.use(pinia)\n    let toBeInstalled = [];\n    const pinia = markRaw({\n        install(app) {\n            // this allows calling useStore() outside of a component setup after\n            // installing pinia's plugin\n            setActivePinia(pinia);\n            if (!isVue2) {\n                pinia._a = app;\n                app.provide(piniaSymbol, pinia);\n                app.config.globalProperties.$pinia = pinia;\n                /* istanbul ignore else */\n                if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n                    registerPiniaDevtools(app, pinia);\n                }\n                toBeInstalled.forEach((plugin) => _p.push(plugin));\n                toBeInstalled = [];\n            }\n        },\n        use(plugin) {\n            if (!this._a && !isVue2) {\n                toBeInstalled.push(plugin);\n            }\n            else {\n                _p.push(plugin);\n            }\n            return this;\n        },\n        _p,\n        // it's actually undefined here\n        // @ts-expect-error\n        _a: null,\n        _e: scope,\n        _s: new Map(),\n        state,\n    });\n    // pinia devtools rely on dev only features so they cannot be forced unless\n    // the dev build of Vue is used. Avoid old browsers like IE11.\n    if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && typeof Proxy !== 'undefined') {\n        pinia.use(devtoolsPlugin);\n    }\n    return pinia;\n}\n/**\n * Dispose a Pinia instance by stopping its effectScope and removing the state, plugins and stores. This is mostly\n * useful in tests, with both a testing pinia or a regular pinia and in applications that use multiple pinia instances.\n * Once disposed, the pinia instance cannot be used anymore.\n *\n * @param pinia - pinia instance\n */\nfunction disposePinia(pinia) {\n    pinia._e.stop();\n    pinia._s.clear();\n    pinia._p.splice(0);\n    pinia.state.value = {};\n    // @ts-expect-error: non valid\n    pinia._a = null;\n}\n\n/**\n * Checks if a function is a `StoreDefinition`.\n *\n * @param fn - object to test\n * @returns true if `fn` is a StoreDefinition\n */\nconst isUseStore = (fn) => {\n    return typeof fn === 'function' && typeof fn.$id === 'string';\n};\n/**\n * Mutates in place `newState` with `oldState` to _hot update_ it. It will\n * remove any key not existing in `newState` and recursively merge plain\n * objects.\n *\n * @param newState - new state object to be patched\n * @param oldState - old state that should be used to patch newState\n * @returns - newState\n */\nfunction patchObject(newState, oldState) {\n    // no need to go through symbols because they cannot be serialized anyway\n    for (const key in oldState) {\n        const subPatch = oldState[key];\n        // skip the whole sub tree\n        if (!(key in newState)) {\n            continue;\n        }\n        const targetValue = newState[key];\n        if (isPlainObject(targetValue) &&\n            isPlainObject(subPatch) &&\n            !isRef(subPatch) &&\n            !isReactive(subPatch)) {\n            newState[key] = patchObject(targetValue, subPatch);\n        }\n        else {\n            // objects are either a bit more complex (e.g. refs) or primitives, so we\n            // just set the whole thing\n            if (isVue2) {\n                set(newState, key, subPatch);\n            }\n            else {\n                newState[key] = subPatch;\n            }\n        }\n    }\n    return newState;\n}\n/**\n * Creates an _accept_ function to pass to `import.meta.hot` in Vite applications.\n *\n * @example\n * ```js\n * const useUser = defineStore(...)\n * if (import.meta.hot) {\n *   import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot))\n * }\n * ```\n *\n * @param initialUseStore - return of the defineStore to hot update\n * @param hot - `import.meta.hot`\n */\nfunction acceptHMRUpdate(initialUseStore, hot) {\n    // strip as much as possible from iife.prod\n    if (!(process.env.NODE_ENV !== 'production')) {\n        return () => { };\n    }\n    return (newModule) => {\n        const pinia = hot.data.pinia || initialUseStore._pinia;\n        if (!pinia) {\n            // this store is still not used\n            return;\n        }\n        // preserve the pinia instance across loads\n        hot.data.pinia = pinia;\n        // console.log('got data', newStore)\n        for (const exportName in newModule) {\n            const useStore = newModule[exportName];\n            // console.log('checking for', exportName)\n            if (isUseStore(useStore) && pinia._s.has(useStore.$id)) {\n                // console.log('Accepting update for', useStore.$id)\n                const id = useStore.$id;\n                if (id !== initialUseStore.$id) {\n                    console.warn(`The id of the store changed from \"${initialUseStore.$id}\" to \"${id}\". Reloading.`);\n                    // return import.meta.hot.invalidate()\n                    return hot.invalidate();\n                }\n                const existingStore = pinia._s.get(id);\n                if (!existingStore) {\n                    console.log(`[Pinia]: skipping hmr because store doesn't exist yet`);\n                    return;\n                }\n                useStore(pinia, existingStore);\n            }\n        }\n    };\n}\n\nconst noop = () => { };\nfunction addSubscription(subscriptions, callback, detached, onCleanup = noop) {\n    subscriptions.push(callback);\n    const removeSubscription = () => {\n        const idx = subscriptions.indexOf(callback);\n        if (idx > -1) {\n            subscriptions.splice(idx, 1);\n            onCleanup();\n        }\n    };\n    if (!detached && getCurrentScope()) {\n        onScopeDispose(removeSubscription);\n    }\n    return removeSubscription;\n}\nfunction triggerSubscriptions(subscriptions, ...args) {\n    subscriptions.slice().forEach((callback) => {\n        callback(...args);\n    });\n}\n\nconst fallbackRunWithContext = (fn) => fn();\n/**\n * Marks a function as an action for `$onAction`\n * @internal\n */\nconst ACTION_MARKER = Symbol();\n/**\n * Action name symbol. Allows to add a name to an action after defining it\n * @internal\n */\nconst ACTION_NAME = Symbol();\nfunction mergeReactiveObjects(target, patchToApply) {\n    // Handle Map instances\n    if (target instanceof Map && patchToApply instanceof Map) {\n        patchToApply.forEach((value, key) => target.set(key, value));\n    }\n    else if (target instanceof Set && patchToApply instanceof Set) {\n        // Handle Set instances\n        patchToApply.forEach(target.add, target);\n    }\n    // no need to go through symbols because they cannot be serialized anyway\n    for (const key in patchToApply) {\n        if (!patchToApply.hasOwnProperty(key))\n            continue;\n        const subPatch = patchToApply[key];\n        const targetValue = target[key];\n        if (isPlainObject(targetValue) &&\n            isPlainObject(subPatch) &&\n            target.hasOwnProperty(key) &&\n            !isRef(subPatch) &&\n            !isReactive(subPatch)) {\n            // NOTE: here I wanted to warn about inconsistent types but it's not possible because in setup stores one might\n            // start the value of a property as a certain type e.g. a Map, and then for some reason, during SSR, change that\n            // to `undefined`. When trying to hydrate, we want to override the Map with `undefined`.\n            target[key] = mergeReactiveObjects(targetValue, subPatch);\n        }\n        else {\n            // @ts-expect-error: subPatch is a valid value\n            target[key] = subPatch;\n        }\n    }\n    return target;\n}\nconst skipHydrateSymbol = (process.env.NODE_ENV !== 'production')\n    ? Symbol('pinia:skipHydration')\n    : /* istanbul ignore next */ Symbol();\nconst skipHydrateMap = /*#__PURE__*/ new WeakMap();\n/**\n * Tells Pinia to skip the hydration process of a given object. This is useful in setup stores (only) when you return a\n * stateful object in the store but it isn't really state. e.g. returning a router instance in a setup store.\n *\n * @param obj - target object\n * @returns obj\n */\nfunction skipHydrate(obj) {\n    return isVue2\n        ? // in @vue/composition-api, the refs are sealed so defineProperty doesn't work...\n            /* istanbul ignore next */ skipHydrateMap.set(obj, 1) && obj\n        : Object.defineProperty(obj, skipHydrateSymbol, {});\n}\n/**\n * Returns whether a value should be hydrated\n *\n * @param obj - target variable\n * @returns true if `obj` should be hydrated\n */\nfunction shouldHydrate(obj) {\n    return isVue2\n        ? /* istanbul ignore next */ !skipHydrateMap.has(obj)\n        : !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);\n}\nconst { assign } = Object;\nfunction isComputed(o) {\n    return !!(isRef(o) && o.effect);\n}\nfunction createOptionsStore(id, options, pinia, hot) {\n    const { state, actions, getters } = options;\n    const initialState = pinia.state.value[id];\n    let store;\n    function setup() {\n        if (!initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n            /* istanbul ignore if */\n            if (isVue2) {\n                set(pinia.state.value, id, state ? state() : {});\n            }\n            else {\n                pinia.state.value[id] = state ? state() : {};\n            }\n        }\n        // avoid creating a state in pinia.state.value\n        const localState = (process.env.NODE_ENV !== 'production') && hot\n            ? // use ref() to unwrap refs inside state TODO: check if this is still necessary\n                toRefs(ref(state ? state() : {}).value)\n            : toRefs(pinia.state.value[id]);\n        return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {\n            if ((process.env.NODE_ENV !== 'production') && name in localState) {\n                console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with \"${name}\" in store \"${id}\".`);\n            }\n            computedGetters[name] = markRaw(computed(() => {\n                setActivePinia(pinia);\n                // it was created just before\n                const store = pinia._s.get(id);\n                // allow cross using stores\n                /* istanbul ignore if */\n                if (isVue2 && !store._r)\n                    return;\n                // @ts-expect-error\n                // return getters![name].call(context, context)\n                // TODO: avoid reading the getter while assigning with a global variable\n                return getters[name].call(store, store);\n            }));\n            return computedGetters;\n        }, {}));\n    }\n    store = createSetupStore(id, setup, options, pinia, hot, true);\n    return store;\n}\nfunction createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {\n    let scope;\n    const optionsForPlugin = assign({ actions: {} }, options);\n    /* istanbul ignore if */\n    if ((process.env.NODE_ENV !== 'production') && !pinia._e.active) {\n        throw new Error('Pinia destroyed');\n    }\n    // watcher options for $subscribe\n    const $subscribeOptions = { deep: true };\n    /* istanbul ignore else */\n    if ((process.env.NODE_ENV !== 'production') && !isVue2) {\n        $subscribeOptions.onTrigger = (event) => {\n            /* istanbul ignore else */\n            if (isListening) {\n                debuggerEvents = event;\n                // avoid triggering this while the store is being built and the state is being set in pinia\n            }\n            else if (isListening == false && !store._hotUpdating) {\n                // let patch send all the events together later\n                /* istanbul ignore else */\n                if (Array.isArray(debuggerEvents)) {\n                    debuggerEvents.push(event);\n                }\n                else {\n                    console.error('🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.');\n                }\n            }\n        };\n    }\n    // internal state\n    let isListening; // set to true at the end\n    let isSyncListening; // set to true at the end\n    let subscriptions = [];\n    let actionSubscriptions = [];\n    let debuggerEvents;\n    const initialState = pinia.state.value[$id];\n    // avoid setting the state for option stores if it is set\n    // by the setup\n    if (!isOptionsStore && !initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n        /* istanbul ignore if */\n        if (isVue2) {\n            set(pinia.state.value, $id, {});\n        }\n        else {\n            pinia.state.value[$id] = {};\n        }\n    }\n    const hotState = ref({});\n    // avoid triggering too many listeners\n    // https://github.com/vuejs/pinia/issues/1129\n    let activeListener;\n    function $patch(partialStateOrMutator) {\n        let subscriptionMutation;\n        isListening = isSyncListening = false;\n        // reset the debugger events since patches are sync\n        /* istanbul ignore else */\n        if ((process.env.NODE_ENV !== 'production')) {\n            debuggerEvents = [];\n        }\n        if (typeof partialStateOrMutator === 'function') {\n            partialStateOrMutator(pinia.state.value[$id]);\n            subscriptionMutation = {\n                type: MutationType.patchFunction,\n                storeId: $id,\n                events: debuggerEvents,\n            };\n        }\n        else {\n            mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);\n            subscriptionMutation = {\n                type: MutationType.patchObject,\n                payload: partialStateOrMutator,\n                storeId: $id,\n                events: debuggerEvents,\n            };\n        }\n        const myListenerId = (activeListener = Symbol());\n        nextTick().then(() => {\n            if (activeListener === myListenerId) {\n                isListening = true;\n            }\n        });\n        isSyncListening = true;\n        // because we paused the watcher, we need to manually call the subscriptions\n        triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);\n    }\n    const $reset = isOptionsStore\n        ? function $reset() {\n            const { state } = options;\n            const newState = state ? state() : {};\n            // we use a patch to group all changes into one single subscription\n            this.$patch(($state) => {\n                // @ts-expect-error: FIXME: shouldn't error?\n                assign($state, newState);\n            });\n        }\n        : /* istanbul ignore next */\n            (process.env.NODE_ENV !== 'production')\n                ? () => {\n                    throw new Error(`🍍: Store \"${$id}\" is built using the setup syntax and does not implement $reset().`);\n                }\n                : noop;\n    function $dispose() {\n        scope.stop();\n        subscriptions = [];\n        actionSubscriptions = [];\n        pinia._s.delete($id);\n    }\n    /**\n     * Helper that wraps function so it can be tracked with $onAction\n     * @param fn - action to wrap\n     * @param name - name of the action\n     */\n    const action = (fn, name = '') => {\n        if (ACTION_MARKER in fn) {\n            fn[ACTION_NAME] = name;\n            return fn;\n        }\n        const wrappedAction = function () {\n            setActivePinia(pinia);\n            const args = Array.from(arguments);\n            const afterCallbackList = [];\n            const onErrorCallbackList = [];\n            function after(callback) {\n                afterCallbackList.push(callback);\n            }\n            function onError(callback) {\n                onErrorCallbackList.push(callback);\n            }\n            // @ts-expect-error\n            triggerSubscriptions(actionSubscriptions, {\n                args,\n                name: wrappedAction[ACTION_NAME],\n                store,\n                after,\n                onError,\n            });\n            let ret;\n            try {\n                ret = fn.apply(this && this.$id === $id ? this : store, args);\n                // handle sync errors\n            }\n            catch (error) {\n                triggerSubscriptions(onErrorCallbackList, error);\n                throw error;\n            }\n            if (ret instanceof Promise) {\n                return ret\n                    .then((value) => {\n                    triggerSubscriptions(afterCallbackList, value);\n                    return value;\n                })\n                    .catch((error) => {\n                    triggerSubscriptions(onErrorCallbackList, error);\n                    return Promise.reject(error);\n                });\n            }\n            // trigger after callbacks\n            triggerSubscriptions(afterCallbackList, ret);\n            return ret;\n        };\n        wrappedAction[ACTION_MARKER] = true;\n        wrappedAction[ACTION_NAME] = name; // will be set later\n        // @ts-expect-error: we are intentionally limiting the returned type to just Fn\n        // because all the added properties are internals that are exposed through `$onAction()` only\n        return wrappedAction;\n    };\n    const _hmrPayload = /*#__PURE__*/ markRaw({\n        actions: {},\n        getters: {},\n        state: [],\n        hotState,\n    });\n    const partialStore = {\n        _p: pinia,\n        // _s: scope,\n        $id,\n        $onAction: addSubscription.bind(null, actionSubscriptions),\n        $patch,\n        $reset,\n        $subscribe(callback, options = {}) {\n            const removeSubscription = addSubscription(subscriptions, callback, options.detached, () => stopWatcher());\n            const stopWatcher = scope.run(() => watch(() => pinia.state.value[$id], (state) => {\n                if (options.flush === 'sync' ? isSyncListening : isListening) {\n                    callback({\n                        storeId: $id,\n                        type: MutationType.direct,\n                        events: debuggerEvents,\n                    }, state);\n                }\n            }, assign({}, $subscribeOptions, options)));\n            return removeSubscription;\n        },\n        $dispose,\n    };\n    /* istanbul ignore if */\n    if (isVue2) {\n        // start as non ready\n        partialStore._r = false;\n    }\n    const store = reactive((process.env.NODE_ENV !== 'production') || ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT)\n        ? assign({\n            _hmrPayload,\n            _customProperties: markRaw(new Set()), // devtools custom properties\n        }, partialStore\n        // must be added later\n        // setupStore\n        )\n        : partialStore);\n    // store the partial store now so the setup of stores can instantiate each other before they are finished without\n    // creating infinite loops.\n    pinia._s.set($id, store);\n    const runWithContext = (pinia._a && pinia._a.runWithContext) || fallbackRunWithContext;\n    // TODO: idea create skipSerialize that marks properties as non serializable and they are skipped\n    const setupStore = runWithContext(() => pinia._e.run(() => (scope = effectScope()).run(() => setup({ action }))));\n    // overwrite existing actions to support $onAction\n    for (const key in setupStore) {\n        const prop = setupStore[key];\n        if ((isRef(prop) && !isComputed(prop)) || isReactive(prop)) {\n            // mark it as a piece of state to be serialized\n            if ((process.env.NODE_ENV !== 'production') && hot) {\n                set(hotState.value, key, toRef(setupStore, key));\n                // createOptionStore directly sets the state in pinia.state.value so we\n                // can just skip that\n            }\n            else if (!isOptionsStore) {\n                // in setup stores we must hydrate the state and sync pinia state tree with the refs the user just created\n                if (initialState && shouldHydrate(prop)) {\n                    if (isRef(prop)) {\n                        prop.value = initialState[key];\n                    }\n                    else {\n                        // probably a reactive object, lets recursively assign\n                        // @ts-expect-error: prop is unknown\n                        mergeReactiveObjects(prop, initialState[key]);\n                    }\n                }\n                // transfer the ref to the pinia state to keep everything in sync\n                /* istanbul ignore if */\n                if (isVue2) {\n                    set(pinia.state.value[$id], key, prop);\n                }\n                else {\n                    pinia.state.value[$id][key] = prop;\n                }\n            }\n            /* istanbul ignore else */\n            if ((process.env.NODE_ENV !== 'production')) {\n                _hmrPayload.state.push(key);\n            }\n            // action\n        }\n        else if (typeof prop === 'function') {\n            const actionValue = (process.env.NODE_ENV !== 'production') && hot ? prop : action(prop, key);\n            // this a hot module replacement store because the hotUpdate method needs\n            // to do it with the right context\n            /* istanbul ignore if */\n            if (isVue2) {\n                set(setupStore, key, actionValue);\n            }\n            else {\n                // @ts-expect-error\n                setupStore[key] = actionValue;\n            }\n            /* istanbul ignore else */\n            if ((process.env.NODE_ENV !== 'production')) {\n                _hmrPayload.actions[key] = prop;\n            }\n            // list actions so they can be used in plugins\n            // @ts-expect-error\n            optionsForPlugin.actions[key] = prop;\n        }\n        else if ((process.env.NODE_ENV !== 'production')) {\n            // add getters for devtools\n            if (isComputed(prop)) {\n                _hmrPayload.getters[key] = isOptionsStore\n                    ? // @ts-expect-error\n                        options.getters[key]\n                    : prop;\n                if (IS_CLIENT) {\n                    const getters = setupStore._getters ||\n                        // @ts-expect-error: same\n                        (setupStore._getters = markRaw([]));\n                    getters.push(key);\n                }\n            }\n        }\n    }\n    // add the state, getters, and action properties\n    /* istanbul ignore if */\n    if (isVue2) {\n        Object.keys(setupStore).forEach((key) => {\n            set(store, key, setupStore[key]);\n        });\n    }\n    else {\n        assign(store, setupStore);\n        // allows retrieving reactive objects with `storeToRefs()`. Must be called after assigning to the reactive object.\n        // Make `storeToRefs()` work with `reactive()` #799\n        assign(toRaw(store), setupStore);\n    }\n    // use this instead of a computed with setter to be able to create it anywhere\n    // without linking the computed lifespan to wherever the store is first\n    // created.\n    Object.defineProperty(store, '$state', {\n        get: () => ((process.env.NODE_ENV !== 'production') && hot ? hotState.value : pinia.state.value[$id]),\n        set: (state) => {\n            /* istanbul ignore if */\n            if ((process.env.NODE_ENV !== 'production') && hot) {\n                throw new Error('cannot set hotState');\n            }\n            $patch(($state) => {\n                // @ts-expect-error: FIXME: shouldn't error?\n                assign($state, state);\n            });\n        },\n    });\n    // add the hotUpdate before plugins to allow them to override it\n    /* istanbul ignore else */\n    if ((process.env.NODE_ENV !== 'production')) {\n        store._hotUpdate = markRaw((newStore) => {\n            store._hotUpdating = true;\n            newStore._hmrPayload.state.forEach((stateKey) => {\n                if (stateKey in store.$state) {\n                    const newStateTarget = newStore.$state[stateKey];\n                    const oldStateSource = store.$state[stateKey];\n                    if (typeof newStateTarget === 'object' &&\n                        isPlainObject(newStateTarget) &&\n                        isPlainObject(oldStateSource)) {\n                        patchObject(newStateTarget, oldStateSource);\n                    }\n                    else {\n                        // transfer the ref\n                        newStore.$state[stateKey] = oldStateSource;\n                    }\n                }\n                // patch direct access properties to allow store.stateProperty to work as\n                // store.$state.stateProperty\n                set(store, stateKey, toRef(newStore.$state, stateKey));\n            });\n            // remove deleted state properties\n            Object.keys(store.$state).forEach((stateKey) => {\n                if (!(stateKey in newStore.$state)) {\n                    del(store, stateKey);\n                }\n            });\n            // avoid devtools logging this as a mutation\n            isListening = false;\n            isSyncListening = false;\n            pinia.state.value[$id] = toRef(newStore._hmrPayload, 'hotState');\n            isSyncListening = true;\n            nextTick().then(() => {\n                isListening = true;\n            });\n            for (const actionName in newStore._hmrPayload.actions) {\n                const actionFn = newStore[actionName];\n                set(store, actionName, action(actionFn, actionName));\n            }\n            // TODO: does this work in both setup and option store?\n            for (const getterName in newStore._hmrPayload.getters) {\n                const getter = newStore._hmrPayload.getters[getterName];\n                const getterValue = isOptionsStore\n                    ? // special handling of options api\n                        computed(() => {\n                            setActivePinia(pinia);\n                            return getter.call(store, store);\n                        })\n                    : getter;\n                set(store, getterName, getterValue);\n            }\n            // remove deleted getters\n            Object.keys(store._hmrPayload.getters).forEach((key) => {\n                if (!(key in newStore._hmrPayload.getters)) {\n                    del(store, key);\n                }\n            });\n            // remove old actions\n            Object.keys(store._hmrPayload.actions).forEach((key) => {\n                if (!(key in newStore._hmrPayload.actions)) {\n                    del(store, key);\n                }\n            });\n            // update the values used in devtools and to allow deleting new properties later on\n            store._hmrPayload = newStore._hmrPayload;\n            store._getters = newStore._getters;\n            store._hotUpdating = false;\n        });\n    }\n    if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n        const nonEnumerable = {\n            writable: true,\n            configurable: true,\n            // avoid warning on devtools trying to display this property\n            enumerable: false,\n        };\n        ['_p', '_hmrPayload', '_getters', '_customProperties'].forEach((p) => {\n            Object.defineProperty(store, p, assign({ value: store[p] }, nonEnumerable));\n        });\n    }\n    /* istanbul ignore if */\n    if (isVue2) {\n        // mark the store as ready before plugins\n        store._r = true;\n    }\n    // apply all plugins\n    pinia._p.forEach((extender) => {\n        /* istanbul ignore else */\n        if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n            const extensions = scope.run(() => extender({\n                store: store,\n                app: pinia._a,\n                pinia,\n                options: optionsForPlugin,\n            }));\n            Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));\n            assign(store, extensions);\n        }\n        else {\n            assign(store, scope.run(() => extender({\n                store: store,\n                app: pinia._a,\n                pinia,\n                options: optionsForPlugin,\n            })));\n        }\n    });\n    if ((process.env.NODE_ENV !== 'production') &&\n        store.$state &&\n        typeof store.$state === 'object' &&\n        typeof store.$state.constructor === 'function' &&\n        !store.$state.constructor.toString().includes('[native code]')) {\n        console.warn(`[🍍]: The \"state\" must be a plain object. It cannot be\\n` +\n            `\\tstate: () => new MyClass()\\n` +\n            `Found in store \"${store.$id}\".`);\n    }\n    // only apply hydrate to option stores with an initial state in pinia\n    if (initialState &&\n        isOptionsStore &&\n        options.hydrate) {\n        options.hydrate(store.$state, initialState);\n    }\n    isListening = true;\n    isSyncListening = true;\n    return store;\n}\n// improves tree shaking\n/*#__NO_SIDE_EFFECTS__*/\nfunction defineStore(\n// TODO: add proper types from above\nidOrOptions, setup, setupOptions) {\n    let id;\n    let options;\n    const isSetupStore = typeof setup === 'function';\n    if (typeof idOrOptions === 'string') {\n        id = idOrOptions;\n        // the option store setup will contain the actual options in this case\n        options = isSetupStore ? setupOptions : setup;\n    }\n    else {\n        options = idOrOptions;\n        id = idOrOptions.id;\n        if ((process.env.NODE_ENV !== 'production') && typeof id !== 'string') {\n            throw new Error(`[🍍]: \"defineStore()\" must be passed a store id as its first argument.`);\n        }\n    }\n    function useStore(pinia, hot) {\n        const hasContext = hasInjectionContext();\n        pinia =\n            // in test mode, ignore the argument provided as we can always retrieve a\n            // pinia instance with getActivePinia()\n            ((process.env.NODE_ENV === 'test') && activePinia && activePinia._testing ? null : pinia) ||\n                (hasContext ? inject(piniaSymbol, null) : null);\n        if (pinia)\n            setActivePinia(pinia);\n        if ((process.env.NODE_ENV !== 'production') && !activePinia) {\n            throw new Error(`[🍍]: \"getActivePinia()\" was called but there was no active Pinia. Are you trying to use a store before calling \"app.use(pinia)\"?\\n` +\n                `See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\\n` +\n                `This will fail in production.`);\n        }\n        pinia = activePinia;\n        if (!pinia._s.has(id)) {\n            // creating the store registers it in `pinia._s`\n            if (isSetupStore) {\n                createSetupStore(id, setup, options, pinia);\n            }\n            else {\n                createOptionsStore(id, options, pinia);\n            }\n            /* istanbul ignore else */\n            if ((process.env.NODE_ENV !== 'production')) {\n                // @ts-expect-error: not the right inferred type\n                useStore._pinia = pinia;\n            }\n        }\n        const store = pinia._s.get(id);\n        if ((process.env.NODE_ENV !== 'production') && hot) {\n            const hotId = '__hot:' + id;\n            const newStore = isSetupStore\n                ? createSetupStore(hotId, setup, options, pinia, true)\n                : createOptionsStore(hotId, assign({}, options), pinia, true);\n            hot._hotUpdate(newStore);\n            // cleanup the state properties and the store from the cache\n            delete pinia.state.value[hotId];\n            pinia._s.delete(hotId);\n        }\n        if ((process.env.NODE_ENV !== 'production') && IS_CLIENT) {\n            const currentInstance = getCurrentInstance();\n            // save stores in instances to access them devtools\n            if (currentInstance &&\n                currentInstance.proxy &&\n                // avoid adding stores that are just built for hot module replacement\n                !hot) {\n                const vm = currentInstance.proxy;\n                const cache = '_pStores' in vm ? vm._pStores : (vm._pStores = {});\n                cache[id] = store;\n            }\n        }\n        // StoreGeneric cannot be casted towards Store\n        return store;\n    }\n    useStore.$id = id;\n    return useStore;\n}\n\nlet mapStoreSuffix = 'Store';\n/**\n * Changes the suffix added by `mapStores()`. Can be set to an empty string.\n * Defaults to `\"Store\"`. Make sure to extend the MapStoresCustomization\n * interface if you are using TypeScript.\n *\n * @param suffix - new suffix\n */\nfunction setMapStoreSuffix(suffix // could be 'Store' but that would be annoying for JS\n) {\n    mapStoreSuffix = suffix;\n}\n/**\n * Allows using stores without the composition API (`setup()`) by generating an\n * object to be spread in the `computed` field of a component. It accepts a list\n * of store definitions.\n *\n * @example\n * ```js\n * export default {\n *   computed: {\n *     // other computed properties\n *     ...mapStores(useUserStore, useCartStore)\n *   },\n *\n *   created() {\n *     this.userStore // store with id \"user\"\n *     this.cartStore // store with id \"cart\"\n *   }\n * }\n * ```\n *\n * @param stores - list of stores to map to an object\n */\nfunction mapStores(...stores) {\n    if ((process.env.NODE_ENV !== 'production') && Array.isArray(stores[0])) {\n        console.warn(`[🍍]: Directly pass all stores to \"mapStores()\" without putting them in an array:\\n` +\n            `Replace\\n` +\n            `\\tmapStores([useAuthStore, useCartStore])\\n` +\n            `with\\n` +\n            `\\tmapStores(useAuthStore, useCartStore)\\n` +\n            `This will fail in production if not fixed.`);\n        stores = stores[0];\n    }\n    return stores.reduce((reduced, useStore) => {\n        // @ts-expect-error: $id is added by defineStore\n        reduced[useStore.$id + mapStoreSuffix] = function () {\n            return useStore(this.$pinia);\n        };\n        return reduced;\n    }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapState(useStore, keysOrMapper) {\n    return Array.isArray(keysOrMapper)\n        ? keysOrMapper.reduce((reduced, key) => {\n            reduced[key] = function () {\n                // @ts-expect-error: FIXME: should work?\n                return useStore(this.$pinia)[key];\n            };\n            return reduced;\n        }, {})\n        : Object.keys(keysOrMapper).reduce((reduced, key) => {\n            // @ts-expect-error\n            reduced[key] = function () {\n                const store = useStore(this.$pinia);\n                const storeKey = keysOrMapper[key];\n                // for some reason TS is unable to infer the type of storeKey to be a\n                // function\n                return typeof storeKey === 'function'\n                    ? storeKey.call(this, store)\n                    : // @ts-expect-error: FIXME: should work?\n                        store[storeKey];\n            };\n            return reduced;\n        }, {});\n}\n/**\n * Alias for `mapState()`. You should use `mapState()` instead.\n * @deprecated use `mapState()` instead.\n */\nconst mapGetters = mapState;\n/**\n * Allows directly using actions from your store without using the composition\n * API (`setup()`) by generating an object to be spread in the `methods` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapActions(useStore, keysOrMapper) {\n    return Array.isArray(keysOrMapper)\n        ? keysOrMapper.reduce((reduced, key) => {\n            // @ts-expect-error\n            reduced[key] = function (...args) {\n                // @ts-expect-error: FIXME: should work?\n                return useStore(this.$pinia)[key](...args);\n            };\n            return reduced;\n        }, {})\n        : Object.keys(keysOrMapper).reduce((reduced, key) => {\n            // @ts-expect-error\n            reduced[key] = function (...args) {\n                // @ts-expect-error: FIXME: should work?\n                return useStore(this.$pinia)[keysOrMapper[key]](...args);\n            };\n            return reduced;\n        }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapWritableState(useStore, keysOrMapper) {\n    return Array.isArray(keysOrMapper)\n        ? keysOrMapper.reduce((reduced, key) => {\n            // @ts-ignore\n            reduced[key] = {\n                get() {\n                    // @ts-expect-error: FIXME: should work?\n                    return useStore(this.$pinia)[key];\n                },\n                set(value) {\n                    // @ts-expect-error: FIXME: should work?\n                    return (useStore(this.$pinia)[key] = value);\n                },\n            };\n            return reduced;\n        }, {})\n        : Object.keys(keysOrMapper).reduce((reduced, key) => {\n            // @ts-ignore\n            reduced[key] = {\n                get() {\n                    // @ts-expect-error: FIXME: should work?\n                    return useStore(this.$pinia)[keysOrMapper[key]];\n                },\n                set(value) {\n                    // @ts-expect-error: FIXME: should work?\n                    return (useStore(this.$pinia)[keysOrMapper[key]] = value);\n                },\n            };\n            return reduced;\n        }, {});\n}\n\n/**\n * Creates an object of references with all the state, getters, and plugin-added\n * state properties of the store. Similar to `toRefs()` but specifically\n * designed for Pinia stores so methods and non reactive properties are\n * completely ignored.\n *\n * @param store - store to extract the refs from\n */\nfunction storeToRefs(store) {\n    // See https://github.com/vuejs/pinia/issues/852\n    // It's easier to just use toRefs() even if it includes more stuff\n    if (isVue2) {\n        // @ts-expect-error: toRefs include methods and others\n        return toRefs(store);\n    }\n    else {\n        store = toRaw(store);\n        const refs = {};\n        for (const key in store) {\n            const value = store[key];\n            if (isRef(value) || isReactive(value)) {\n                // @ts-expect-error: the key is state or getter\n                refs[key] =\n                    // ---\n                    toRef(store, key);\n            }\n        }\n        return refs;\n    }\n}\n\n/**\n * Vue 2 Plugin that must be installed for pinia to work. Note **you don't need\n * this plugin if you are using Nuxt.js**. Use the `buildModule` instead:\n * https://pinia.vuejs.org/ssr/nuxt.html.\n *\n * @example\n * ```js\n * import Vue from 'vue'\n * import { PiniaVuePlugin, createPinia } from 'pinia'\n *\n * Vue.use(PiniaVuePlugin)\n * const pinia = createPinia()\n *\n * new Vue({\n *   el: '#app',\n *   // ...\n *   pinia,\n * })\n * ```\n *\n * @param _Vue - `Vue` imported from 'vue'.\n */\nconst PiniaVuePlugin = function (_Vue) {\n    // Equivalent of\n    // app.config.globalProperties.$pinia = pinia\n    _Vue.mixin({\n        beforeCreate() {\n            const options = this.$options;\n            if (options.pinia) {\n                const pinia = options.pinia;\n                // HACK: taken from provide(): https://github.com/vuejs/composition-api/blob/main/src/apis/inject.ts#L31\n                /* istanbul ignore else */\n                if (!this._provided) {\n                    const provideCache = {};\n                    Object.defineProperty(this, '_provided', {\n                        get: () => provideCache,\n                        set: (v) => Object.assign(provideCache, v),\n                    });\n                }\n                this._provided[piniaSymbol] = pinia;\n                // propagate the pinia instance in an SSR friendly way\n                // avoid adding it to nuxt twice\n                /* istanbul ignore else */\n                if (!this.$pinia) {\n                    this.$pinia = pinia;\n                }\n                pinia._a = this;\n                if (IS_CLIENT) {\n                    // this allows calling useStore() outside of a component setup after\n                    // installing pinia's plugin\n                    setActivePinia(pinia);\n                }\n                if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n                    registerPiniaDevtools(pinia._a, pinia);\n                }\n            }\n            else if (!this.$pinia && options.parent && options.parent.$pinia) {\n                this.$pinia = options.parent.$pinia;\n            }\n        },\n        destroyed() {\n            delete this._pStores;\n        },\n    });\n};\n\nexport { MutationType, PiniaVuePlugin, acceptHMRUpdate, createPinia, defineStore, disposePinia, getActivePinia, mapActions, mapGetters, mapState, mapStores, mapWritableState, setActivePinia, setMapStoreSuffix, skipHydrate, storeToRefs };\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.38\n   Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n   MIT License *//*\n   Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n   Supports browser & node.js environment. \n   Demo   : https://faisalman.github.io/ua-parser-js\n   Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n    'use strict';\n\n    //////////////\n    // Constants\n    /////////////\n\n\n    var LIBVERSION  = '1.0.38',\n        EMPTY       = '',\n        UNKNOWN     = '?',\n        FUNC_TYPE   = 'function',\n        UNDEF_TYPE  = 'undefined',\n        OBJ_TYPE    = 'object',\n        STR_TYPE    = 'string',\n        MAJOR       = 'major',\n        MODEL       = 'model',\n        NAME        = 'name',\n        TYPE        = 'type',\n        VENDOR      = 'vendor',\n        VERSION     = 'version',\n        ARCHITECTURE= 'architecture',\n        CONSOLE     = 'console',\n        MOBILE      = 'mobile',\n        TABLET      = 'tablet',\n        SMARTTV     = 'smarttv',\n        WEARABLE    = 'wearable',\n        EMBEDDED    = 'embedded',\n        UA_MAX_LENGTH = 500;\n\n    var AMAZON  = 'Amazon',\n        APPLE   = 'Apple',\n        ASUS    = 'ASUS',\n        BLACKBERRY = 'BlackBerry',\n        BROWSER = 'Browser',\n        CHROME  = 'Chrome',\n        EDGE    = 'Edge',\n        FIREFOX = 'Firefox',\n        GOOGLE  = 'Google',\n        HUAWEI  = 'Huawei',\n        LG      = 'LG',\n        MICROSOFT = 'Microsoft',\n        MOTOROLA  = 'Motorola',\n        OPERA   = 'Opera',\n        SAMSUNG = 'Samsung',\n        SHARP   = 'Sharp',\n        SONY    = 'Sony',\n        XIAOMI  = 'Xiaomi',\n        ZEBRA   = 'Zebra',\n        FACEBOOK    = 'Facebook',\n        CHROMIUM_OS = 'Chromium OS',\n        MAC_OS  = 'Mac OS';\n\n    ///////////\n    // Helper\n    //////////\n\n    var extend = function (regexes, extensions) {\n            var mergedRegexes = {};\n            for (var i in regexes) {\n                if (extensions[i] && extensions[i].length % 2 === 0) {\n                    mergedRegexes[i] = extensions[i].concat(regexes[i]);\n                } else {\n                    mergedRegexes[i] = regexes[i];\n                }\n            }\n            return mergedRegexes;\n        },\n        enumerize = function (arr) {\n            var enums = {};\n            for (var i=0; i<arr.length; i++) {\n                enums[arr[i].toUpperCase()] = arr[i];\n            }\n            return enums;\n        },\n        has = function (str1, str2) {\n            return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n        },\n        lowerize = function (str) {\n            return str.toLowerCase();\n        },\n        majorize = function (version) {\n            return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split('.')[0] : undefined;\n        },\n        trim = function (str, len) {\n            if (typeof(str) === STR_TYPE) {\n                str = str.replace(/^\\s\\s*/, EMPTY);\n                return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n            }\n    };\n\n    ///////////////\n    // Map helper\n    //////////////\n\n    var rgxMapper = function (ua, arrays) {\n\n            var i = 0, j, k, p, q, matches, match;\n\n            // loop through all regexes maps\n            while (i < arrays.length && !matches) {\n\n                var regex = arrays[i],       // even sequence (0,2,4,..)\n                    props = arrays[i + 1];   // odd sequence (1,3,5,..)\n                j = k = 0;\n\n                // try matching uastring with regexes\n                while (j < regex.length && !matches) {\n\n                    if (!regex[j]) { break; }\n                    matches = regex[j++].exec(ua);\n\n                    if (!!matches) {\n                        for (p = 0; p < props.length; p++) {\n                            match = matches[++k];\n                            q = props[p];\n                            // check if given property is actually array\n                            if (typeof q === OBJ_TYPE && q.length > 0) {\n                                if (q.length === 2) {\n                                    if (typeof q[1] == FUNC_TYPE) {\n                                        // assign modified match\n                                        this[q[0]] = q[1].call(this, match);\n                                    } else {\n                                        // assign given value, ignore regex match\n                                        this[q[0]] = q[1];\n                                    }\n                                } else if (q.length === 3) {\n                                    // check whether function or regex\n                                    if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n                                        // call function (usually string mapper)\n                                        this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n                                    } else {\n                                        // sanitize match using given regex\n                                        this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n                                    }\n                                } else if (q.length === 4) {\n                                        this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n                                }\n                            } else {\n                                this[q] = match ? match : undefined;\n                            }\n                        }\n                    }\n                }\n                i += 2;\n            }\n        },\n\n        strMapper = function (str, map) {\n\n            for (var i in map) {\n                // check if current value is array\n                if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n                    for (var j = 0; j < map[i].length; j++) {\n                        if (has(map[i][j], str)) {\n                            return (i === UNKNOWN) ? undefined : i;\n                        }\n                    }\n                } else if (has(map[i], str)) {\n                    return (i === UNKNOWN) ? undefined : i;\n                }\n            }\n            return str;\n    };\n\n    ///////////////\n    // String map\n    //////////////\n\n    // Safari < 3.0\n    var oldSafariMap = {\n            '1.0'   : '/8',\n            '1.2'   : '/1',\n            '1.3'   : '/3',\n            '2.0'   : '/412',\n            '2.0.2' : '/416',\n            '2.0.3' : '/417',\n            '2.0.4' : '/419',\n            '?'     : '/'\n        },\n        windowsVersionMap = {\n            'ME'        : '4.90',\n            'NT 3.11'   : 'NT3.51',\n            'NT 4.0'    : 'NT4.0',\n            '2000'      : 'NT 5.0',\n            'XP'        : ['NT 5.1', 'NT 5.2'],\n            'Vista'     : 'NT 6.0',\n            '7'         : 'NT 6.1',\n            '8'         : 'NT 6.2',\n            '8.1'       : 'NT 6.3',\n            '10'        : ['NT 6.4', 'NT 10.0'],\n            'RT'        : 'ARM'\n    };\n\n    //////////////\n    // Regex map\n    /////////////\n\n    var regexes = {\n\n        browser : [[\n\n            /\\b(?:crmo|crios)\\/([\\w\\.]+)/i                                      // Chrome for Android/iOS\n            ], [VERSION, [NAME, 'Chrome']], [\n            /edg(?:e|ios|a)?\\/([\\w\\.]+)/i                                       // Microsoft Edge\n            ], [VERSION, [NAME, 'Edge']], [\n\n            // Presto based\n            /(opera mini)\\/([-\\w\\.]+)/i,                                        // Opera Mini\n            /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i,                 // Opera Mobi/Tablet\n            /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i                           // Opera\n            ], [NAME, VERSION], [\n            /opios[\\/ ]+([\\w\\.]+)/i                                             // Opera mini on iphone >= 8.0\n            ], [VERSION, [NAME, OPERA+' Mini']], [\n            /\\bop(?:rg)?x\\/([\\w\\.]+)/i                                          // Opera GX\n            ], [VERSION, [NAME, OPERA+' GX']], [\n            /\\bopr\\/([\\w\\.]+)/i                                                 // Opera Webkit\n            ], [VERSION, [NAME, OPERA]], [\n\n            // Mixed\n            /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i            // Baidu\n            ], [VERSION, [NAME, 'Baidu']], [\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i,      // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n            // Trident based\n            /(avant|iemobile|slim)\\s?(?:browser)?[\\/ ]?([\\w\\.]*)/i,             // Avant/IEMobile/SlimBrowser\n            /(?:ms|\\()(ie) ([\\w\\.]+)/i,                                         // Internet Explorer\n\n            // Webkit/KHTML based                                               // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n            /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n                                                                                // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n            /(heytap|ovi)browser\\/([\\d\\.]+)/i,                                  // Heytap/Ovi\n            /(weibo)__([\\d\\.]+)/i                                               // Weibo\n            ], [NAME, VERSION], [\n            /\\bddg\\/([\\w\\.]+)/i                                                 // DuckDuckGo\n            ], [VERSION, [NAME, 'DuckDuckGo']], [\n            /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i                 // UCBrowser\n            ], [VERSION, [NAME, 'UC'+BROWSER]], [\n            /microm.+\\bqbcore\\/([\\w\\.]+)/i,                                     // WeChat Desktop for Windows Built-in Browser\n            /\\bqbcore\\/([\\w\\.]+).+microm/i,\n            /micromessenger\\/([\\w\\.]+)/i                                        // WeChat\n            ], [VERSION, [NAME, 'WeChat']], [\n            /konqueror\\/([\\w\\.]+)/i                                             // Konqueror\n            ], [VERSION, [NAME, 'Konqueror']], [\n            /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i                       // IE11\n            ], [VERSION, [NAME, 'IE']], [\n            /ya(?:search)?browser\\/([\\w\\.]+)/i                                  // Yandex\n            ], [VERSION, [NAME, 'Yandex']], [\n            /slbrowser\\/([\\w\\.]+)/i                                             // Smart Lenovo Browser\n            ], [VERSION, [NAME, 'Smart Lenovo '+BROWSER]], [\n            /(avast|avg)\\/([\\w\\.]+)/i                                           // Avast/AVG Secure Browser\n            ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n            /\\bfocus\\/([\\w\\.]+)/i                                               // Firefox Focus\n            ], [VERSION, [NAME, FIREFOX+' Focus']], [\n            /\\bopt\\/([\\w\\.]+)/i                                                 // Opera Touch\n            ], [VERSION, [NAME, OPERA+' Touch']], [\n            /coc_coc\\w+\\/([\\w\\.]+)/i                                            // Coc Coc Browser\n            ], [VERSION, [NAME, 'Coc Coc']], [\n            /dolfin\\/([\\w\\.]+)/i                                                // Dolphin\n            ], [VERSION, [NAME, 'Dolphin']], [\n            /coast\\/([\\w\\.]+)/i                                                 // Opera Coast\n            ], [VERSION, [NAME, OPERA+' Coast']], [\n            /miuibrowser\\/([\\w\\.]+)/i                                           // MIUI Browser\n            ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n            /fxios\\/([-\\w\\.]+)/i                                                // Firefox for iOS\n            ], [VERSION, [NAME, FIREFOX]], [\n            /\\bqihu|(qi?ho?o?|360)browser/i                                     // 360\n            ], [[NAME, '360 ' + BROWSER]], [\n            /(oculus|sailfish|huawei|vivo)browser\\/([\\w\\.]+)/i\n            ], [[NAME, /(.+)/, '$1 ' + BROWSER], VERSION], [                    // Oculus/Sailfish/HuaweiBrowser/VivoBrowser\n            /samsungbrowser\\/([\\w\\.]+)/i                                        // Samsung Internet\n            ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n            /(comodo_dragon)\\/([\\w\\.]+)/i                                       // Comodo Dragon\n            ], [[NAME, /_/g, ' '], VERSION], [\n            /metasr[\\/ ]?([\\d\\.]+)/i                                            // Sogou Explorer\n            ], [VERSION, [NAME, 'Sogou Explorer']], [\n            /(sogou)mo\\w+\\/([\\d\\.]+)/i                                          // Sogou Mobile\n            ], [[NAME, 'Sogou Mobile'], VERSION], [\n            /(electron)\\/([\\w\\.]+) safari/i,                                    // Electron-based App\n            /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i,                   // Tesla\n            /m?(qqbrowser|2345Explorer)[\\/ ]?([\\w\\.]+)/i                        // QQBrowser/2345 Browser\n            ], [NAME, VERSION], [\n            /(lbbrowser)/i,                                                     // LieBao Browser\n            /\\[(linkedin)app\\]/i                                                // LinkedIn App for iOS & Android\n            ], [NAME], [\n\n            // WebView\n            /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i       // Facebook App for iOS & Android\n            ], [[NAME, FACEBOOK], VERSION], [\n            /(Klarna)\\/([\\w\\.]+)/i,                                             // Klarna Shopping Browser for iOS & Android\n            /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i,                             // Kakao App\n            /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i,                                  // Naver InApp\n            /safari (line)\\/([\\w\\.]+)/i,                                        // Line App for iOS\n            /\\b(line)\\/([\\w\\.]+)\\/iab/i,                                        // Line App for Android\n            /(alipay)client\\/([\\w\\.]+)/i,                                       // Alipay\n            /(twitter)(?:and| f.+e\\/([\\w\\.]+))/i,                               // Twitter\n            /(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i                     // Chromium/Instagram/Snapchat\n            ], [NAME, VERSION], [\n            /\\bgsa\\/([\\w\\.]+) .*safari\\//i                                      // Google Search Appliance on iOS\n            ], [VERSION, [NAME, 'GSA']], [\n            /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i                        // TikTok\n            ], [VERSION, [NAME, 'TikTok']], [\n\n            /headlesschrome(?:\\/([\\w\\.]+)| )/i                                  // Chrome Headless\n            ], [VERSION, [NAME, CHROME+' Headless']], [\n\n            / wv\\).+(chrome)\\/([\\w\\.]+)/i                                       // Chrome WebView\n            ], [[NAME, CHROME+' WebView'], VERSION], [\n\n            /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i           // Android Browser\n            ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n            /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i       // Chrome/OmniWeb/Arora/Tizen/Nokia\n            ], [NAME, VERSION], [\n\n            /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i                      // Mobile Safari\n            ], [VERSION, [NAME, 'Mobile Safari']], [\n            /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i                // Safari & Safari Mobile\n            ], [VERSION, NAME], [\n            /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i                      // Safari < 3.0\n            ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n            /(webkit|khtml)\\/([\\w\\.]+)/i\n            ], [NAME, VERSION], [\n\n            // Gecko based\n            /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i                              // Netscape\n            ], [[NAME, 'Netscape'], VERSION], [\n            /mobile vr; rv:([\\w\\.]+)\\).+firefox/i                               // Firefox Reality\n            ], [VERSION, [NAME, FIREFOX+' Reality']], [\n            /ekiohf.+(flow)\\/([\\w\\.]+)/i,                                       // Flow\n            /(swiftfox)/i,                                                      // Swiftfox\n            /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n                                                                                // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n            /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n                                                                                // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n            /(firefox)\\/([\\w\\.]+)/i,                                            // Other Firefox-based\n            /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i,                         // Mozilla\n\n            // Other\n            /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n                                                                                // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n            /(links) \\(([\\w\\.]+)/i,                                             // Links\n            /panasonic;(viera)/i                                                // Panasonic Viera\n            ], [NAME, VERSION], [\n            \n            /(cobalt)\\/([\\w\\.]+)/i                                              // Cobalt\n            ], [NAME, [VERSION, /master.|lts./, \"\"]]\n        ],\n\n        cpu : [[\n\n            /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i                     // AMD64 (x64)\n            ], [[ARCHITECTURE, 'amd64']], [\n\n            /(ia32(?=;))/i                                                      // IA32 (quicktime)\n            ], [[ARCHITECTURE, lowerize]], [\n\n            /((?:i[346]|x)86)[;\\)]/i                                            // IA32 (x86)\n            ], [[ARCHITECTURE, 'ia32']], [\n\n            /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i                                 // ARM64\n            ], [[ARCHITECTURE, 'arm64']], [\n\n            /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i                                   // ARMHF\n            ], [[ARCHITECTURE, 'armhf']], [\n\n            // PocketPC mistakenly identified as PowerPC\n            /windows (ce|mobile); ppc;/i\n            ], [[ARCHITECTURE, 'arm']], [\n\n            /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i                            // PowerPC\n            ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n            /(sun4\\w)[;\\)]/i                                                    // SPARC\n            ], [[ARCHITECTURE, 'sparc']], [\n\n            /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n                                                                                // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n            ], [[ARCHITECTURE, lowerize]]\n        ],\n\n        device : [[\n\n            //////////////////////////\n            // MOBILES & TABLETS\n            /////////////////////////\n\n            // Samsung\n            /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n            /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n            /samsung[- ]([-\\w]+)/i,\n            /sec-(sgh\\w+)/i\n            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n            // Apple\n            /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i                          // iPod/iPhone\n            ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n            /\\((ipad);[-\\w\\),; ]+apple/i,                                       // iPad\n            /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n            /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n            ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n            /(macintosh);/i\n            ], [MODEL, [VENDOR, APPLE]], [\n\n            // Sharp\n            /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n            ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n            // Huawei\n            /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n            ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n            /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n            /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n            ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n            // Xiaomi\n            /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i,                  // Xiaomi POCO\n            /\\b; (\\w+) build\\/hm\\1/i,                                           // Xiaomi Hongmi 'numeric' models\n            /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i,                             // Xiaomi Hongmi\n            /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i,                   // Xiaomi Redmi\n            /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i,        // Xiaomi Redmi 'numeric' models\n            /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n            ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n            /oid[^\\)]+; (2\\d{4}(283|rpbf)[cgl])( bui|\\))/i,                     // Redmi Pad\n            /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i                        // Mi Pad tablets\n            ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n            // OPPO\n            /; (\\w+) bui.+ oppo/i,\n            /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n            ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n            /\\b(opd2\\d{3}a?) bui/i\n            ], [MODEL, [VENDOR, 'OPPO'], [TYPE, TABLET]], [\n\n            // Vivo\n            /vivo (\\w+)(?: bui|\\))/i,\n            /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n            ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n            // Realme\n            /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n            ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n            // Motorola\n            /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n            /\\bmot(?:orola)?[- ](\\w*)/i,\n            /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n            /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n            // LG\n            /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n            ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n            /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n            /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n            /\\blg-?([\\d\\w]+) bui/i\n            ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n            // Lenovo\n            /(ideatab[-\\w ]+)/i,\n            /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n            ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n            // Nokia\n            /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n            /nokia[-_ ]?([-\\w\\.]*)/i\n            ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n            // Google\n            /(pixel c)\\b/i                                                      // Google Pixel C\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n            /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i                         // Google Pixel\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n            // Sony\n            /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n            ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n            /sony tablet [ps]/i,\n            /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n            ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n            // OnePlus\n            / (kb2005|in20[12]5|be20[12][59])\\b/i,\n            /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n            ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n            // Amazon\n            /(alexa)webm/i,\n            /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i,                             // Kindle Fire without Silk / Echo Show\n            /(kf[a-z]+)( bui|\\)).+silk\\//i                                      // Kindle Fire HD\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n            /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i                     // Fire Phone\n            ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n            // BlackBerry\n            /(playbook);[-\\w\\),; ]+(rim)/i                                      // BlackBerry PlayBook\n            ], [MODEL, VENDOR, [TYPE, TABLET]], [\n            /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n            /\\(bb10; (\\w+)/i                                                    // BlackBerry 10\n            ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n            // Asus\n            /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n            ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n            / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n            ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n            // HTC\n            /(nexus 9)/i                                                        // HTC Nexus 9\n            ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n            /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i,                         // HTC\n\n            // ZTE\n            /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n            /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i         // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n            ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n            // Acer\n            /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n            ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n            // Meizu\n            /droid.+; (m[1-5] note) bui/i,\n            /\\bmz-([-\\w]{2,})/i\n            ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n                \n            // Ulefone\n            /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n            ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n            // MIXED\n            /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\\w]*)/i,\n                                                                                // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n            /(hp) ([\\w ]+\\w)/i,                                                 // HP iPAQ\n            /(asus)-?(\\w+)/i,                                                   // Asus\n            /(microsoft); (lumia[\\w ]+)/i,                                      // Microsoft Lumia\n            /(lenovo)[-_ ]?([-\\w]+)/i,                                          // Lenovo\n            /(jolla)/i,                                                         // Jolla\n            /(oppo) ?([\\w ]+) bui/i                                             // OPPO\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n            /(kobo)\\s(ereader|touch)/i,                                         // Kobo\n            /(archos) (gamepad2?)/i,                                            // Archos\n            /(hp).+(touchpad(?!.+tablet)|tablet)/i,                             // HP TouchPad\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /(nook)[\\w ]+build\\/(\\w+)/i,                                        // Nook\n            /(dell) (strea[kpr\\d ]*[\\dko])/i,                                   // Dell Streak\n            /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i,                                  // Le Pan Tablets\n            /(trinity)[- ]*(t\\d{3}) bui/i,                                      // Trinity Tablets\n            /(gigaset)[- ]+(q\\w{1,9}) bui/i,                                    // Gigaset Tablets\n            /(vodafone) ([\\w ]+)(?:\\)| bui)/i                                   // Vodafone\n            ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n            /(surface duo)/i                                                    // Surface Duo\n            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n            /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i                                 // Fairphone\n            ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n            /(u304aa)/i                                                         // AT&T\n            ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n            /\\bsie-(\\w*)/i                                                      // Siemens\n            ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n            /\\b(rct\\w+) b/i                                                     // RCA Tablets\n            ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n            /\\b(venue[\\d ]{2,7}) b/i                                            // Dell Venue Tablets\n            ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n            /\\b(q(?:mv|ta)\\w+) b/i                                              // Verizon Tablet\n            ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n            /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i                       // Barnes & Noble Tablet\n            ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n            /\\b(tm\\d{3}\\w+) b/i\n            ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n            /\\b(k88) b/i                                                        // ZTE K Series Tablet\n            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n            /\\b(nx\\d{3}j) b/i                                                   // ZTE Nubia\n            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n            /\\b(gen\\d{3}) b.+49h/i                                              // Swiss GEN Mobile\n            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n            /\\b(zur\\d{3}) b/i                                                   // Swiss ZUR Tablet\n            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n            /\\b((zeki)?tb.*\\b) b/i                                              // Zeki Tablets\n            ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n            /\\b([yr]\\d{2}) b/i,\n            /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i                                // Dragon Touch Tablet\n            ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n            /\\b(ns-?\\w{0,9}) b/i                                                // Insignia Tablets\n            ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n            /\\b((nxa|next)-?\\w{0,9}) b/i                                        // NextBook Tablets\n            ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n            /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i                  // Voice Xtreme Phones\n            ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n            /\\b(lvtel\\-)?(v1[12]) b/i                                           // LvTel Phones\n            ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n            /\\b(ph-1) /i                                                        // Essential PH-1\n            ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n            /\\b(v(100md|700na|7011|917g).*\\b) b/i                               // Envizen Tablets\n            ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n            /\\b(trio[-\\w\\. ]+) b/i                                              // MachSpeed Tablets\n            ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n            /\\btu_(1491) b/i                                                    // Rotor Tablets\n            ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n            /(shield[\\w ]+) b/i                                                 // Nvidia Shield Tablets\n            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n            /(sprint) (\\w+)/i                                                   // Sprint Phones\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n            /(kin\\.[onetw]{3})/i                                                // Microsoft Kin\n            ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n            /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i             // Zebra\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n            /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n            ///////////////////\n            // SMARTTVS\n            ///////////////////\n\n            /smart-tv.+(samsung)/i                                              // Samsung\n            ], [VENDOR, [TYPE, SMARTTV]], [\n            /hbbtv.+maple;(\\d+)/i\n            ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n            /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i        // LG SmartTV\n            ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n            /(apple) ?tv/i                                                      // Apple TV\n            ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n            /crkey/i                                                            // Google Chromecast\n            ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n            /droid.+aft(\\w+)( bui|\\))/i                                         // Fire TV\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n            /\\(dtv[\\);].+(aquos)/i,\n            /(aquos-tv[\\w ]+)\\)/i                                               // Sharp\n            ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n            /(bravia[\\w ]+)( bui|\\))/i                                              // Sony\n            ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n            /(mitv-\\w{5}) bui/i                                                 // Xiaomi\n            ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n            /Hbbtv.*(technisat) (.*);/i                                         // TechniSAT\n            ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n            /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i,                          // Roku\n            /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i         // HbbTV devices\n            ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n            /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i                   // SmartTV from Unidentified Vendors\n            ], [[TYPE, SMARTTV]], [\n\n            ///////////////////\n            // CONSOLES\n            ///////////////////\n\n            /(ouya)/i,                                                          // Ouya\n            /(nintendo) ([wids3utch]+)/i                                        // Nintendo\n            ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n            /droid.+; (shield) bui/i                                            // Nvidia\n            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n            /(playstation [345portablevi]+)/i                                   // Playstation\n            ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n            /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i                                // Microsoft Xbox\n            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n            ///////////////////\n            // WEARABLES\n            ///////////////////\n\n            /((pebble))app/i                                                    // Pebble\n            ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n            /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i                              // Apple Watch\n            ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n            /droid.+; (glass) \\d/i                                              // Google Glass\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n            /droid.+; (wt63?0{2,3})\\)/i\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n            /(quest( \\d| pro)?)/i                                               // Oculus Quest\n            ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n            ///////////////////\n            // EMBEDDED\n            ///////////////////\n\n            /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i                              // Tesla\n            ], [VENDOR, [TYPE, EMBEDDED]], [\n            /(aeobc)\\b/i                                                        // Echo Dot\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n\n            ////////////////////\n            // MIXED (GENERIC)\n            ///////////////////\n\n            /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i    // Android Phones from Unidentified Vendors\n            ], [MODEL, [TYPE, MOBILE]], [\n            /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i       // Android Tablets from Unidentified Vendors\n            ], [MODEL, [TYPE, TABLET]], [\n            /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i                      // Unidentifiable Tablet\n            ], [[TYPE, TABLET]], [\n            /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i    // Unidentifiable Mobile\n            ], [[TYPE, MOBILE]], [\n            /(android[-\\w\\. ]{0,9});.+buil/i                                    // Generic Android Device\n            ], [MODEL, [VENDOR, 'Generic']]\n        ],\n\n        engine : [[\n\n            /windows.+ edge\\/([\\w\\.]+)/i                                       // EdgeHTML\n            ], [VERSION, [NAME, EDGE+'HTML']], [\n\n            /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i                         // Blink\n            ], [VERSION, [NAME, 'Blink']], [\n\n            /(presto)\\/([\\w\\.]+)/i,                                             // Presto\n            /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n            /ekioh(flow)\\/([\\w\\.]+)/i,                                          // Flow\n            /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i,                           // KHTML/Tasman/Links\n            /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i,                                      // iCab\n            /\\b(libweb)/i\n            ], [NAME, VERSION], [\n\n            /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i                                     // Gecko\n            ], [VERSION, NAME]\n        ],\n\n        os : [[\n\n            // Windows\n            /microsoft (windows) (vista|xp)/i                                   // Windows (iTunes)\n            ], [NAME, VERSION], [\n            /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i             // Windows Phone\n            ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n            /windows nt 6\\.2; (arm)/i,                                        // Windows RT\n            /windows[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i,\n            /(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n            ], [[VERSION, strMapper, windowsVersionMap], [NAME, 'Windows']], [\n\n            // iOS/macOS\n            /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i,              // iOS\n            /(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,\n            /cfnetwork\\/.+darwin/i\n            ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n            /(mac os x) ?([\\w\\. ]*)/i,\n            /(macintosh|mac_powerpc\\b)(?!.+haiku)/i                             // Mac OS\n            ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n            // Mobile OSes\n            /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i                    // Android-x86/HarmonyOS\n            ], [VERSION, NAME], [                                               // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n            /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n            /(blackberry)\\w*\\/([\\w\\.]*)/i,                                      // Blackberry\n            /(tizen|kaios)[\\/ ]([\\w\\.]+)/i,                                     // Tizen/KaiOS\n            /\\((series40);/i                                                    // Series 40\n            ], [NAME, VERSION], [\n            /\\(bb(10);/i                                                        // BlackBerry 10\n            ], [VERSION, [NAME, BLACKBERRY]], [\n            /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i         // Symbian\n            ], [VERSION, [NAME, 'Symbian']], [\n            /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n            ], [VERSION, [NAME, FIREFOX+' OS']], [\n            /web0s;.+rt(tv)/i,\n            /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i                              // WebOS\n            ], [VERSION, [NAME, 'webOS']], [\n            /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i                              // watchOS\n            ], [VERSION, [NAME, 'watchOS']], [\n\n            // Google Chromecast\n            /crkey\\/([\\d\\.]+)/i                                                 // Google Chromecast\n            ], [VERSION, [NAME, CHROME+'cast']], [\n            /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i                                  // Chromium OS\n            ], [[NAME, CHROMIUM_OS], VERSION],[\n\n            // Smart TVs\n            /panasonic;(viera)/i,                                               // Panasonic Viera\n            /(netrange)mmh/i,                                                   // Netrange\n            /(nettv)\\/(\\d+\\.[\\w\\.]+)/i,                                         // NetTV\n\n            // Console\n            /(nintendo|playstation) ([wids345portablevuch]+)/i,                 // Nintendo/Playstation\n            /(xbox); +xbox ([^\\);]+)/i,                                         // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n            // Other\n            /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i,                            // Joli/Palm\n            /(mint)[\\/\\(\\) ]?(\\w*)/i,                                           // Mint\n            /(mageia|vectorlinux)[; ]/i,                                        // Mageia/VectorLinux\n            /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n                                                                                // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n            /(hurd|linux) ?([\\w\\.]*)/i,                                         // Hurd/Linux\n            /(gnu) ?([\\w\\.]*)/i,                                                // GNU\n            /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n            /(haiku) (\\w+)/i                                                    // Haiku\n            ], [NAME, VERSION], [\n            /(sunos) ?([\\w\\.\\d]*)/i                                             // Solaris\n            ], [[NAME, 'Solaris'], VERSION], [\n            /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i,                              // Solaris\n            /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i,                                  // AIX\n            /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n            /(unix) ?([\\w\\.]*)/i                                                // UNIX\n            ], [NAME, VERSION]\n        ]\n    };\n\n    /////////////////\n    // Constructor\n    ////////////////\n\n    var UAParser = function (ua, extensions) {\n\n        if (typeof ua === OBJ_TYPE) {\n            extensions = ua;\n            ua = undefined;\n        }\n\n        if (!(this instanceof UAParser)) {\n            return new UAParser(ua, extensions).getResult();\n        }\n\n        var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n        var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n        var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n        var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n        var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n        this.getBrowser = function () {\n            var _browser = {};\n            _browser[NAME] = undefined;\n            _browser[VERSION] = undefined;\n            rgxMapper.call(_browser, _ua, _rgxmap.browser);\n            _browser[MAJOR] = majorize(_browser[VERSION]);\n            // Brave-specific detection\n            if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n                _browser[NAME] = 'Brave';\n            }\n            return _browser;\n        };\n        this.getCPU = function () {\n            var _cpu = {};\n            _cpu[ARCHITECTURE] = undefined;\n            rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n            return _cpu;\n        };\n        this.getDevice = function () {\n            var _device = {};\n            _device[VENDOR] = undefined;\n            _device[MODEL] = undefined;\n            _device[TYPE] = undefined;\n            rgxMapper.call(_device, _ua, _rgxmap.device);\n            if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n                _device[TYPE] = MOBILE;\n            }\n            // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n            if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n                _device[MODEL] = 'iPad';\n                _device[TYPE] = TABLET;\n            }\n            return _device;\n        };\n        this.getEngine = function () {\n            var _engine = {};\n            _engine[NAME] = undefined;\n            _engine[VERSION] = undefined;\n            rgxMapper.call(_engine, _ua, _rgxmap.engine);\n            return _engine;\n        };\n        this.getOS = function () {\n            var _os = {};\n            _os[NAME] = undefined;\n            _os[VERSION] = undefined;\n            rgxMapper.call(_os, _ua, _rgxmap.os);\n            if (_isSelfNav && !_os[NAME] && _uach && _uach.platform && _uach.platform != 'Unknown') {\n                _os[NAME] = _uach.platform  \n                                    .replace(/chrome os/i, CHROMIUM_OS)\n                                    .replace(/macos/i, MAC_OS);           // backward compatibility\n            }\n            return _os;\n        };\n        this.getResult = function () {\n            return {\n                ua      : this.getUA(),\n                browser : this.getBrowser(),\n                engine  : this.getEngine(),\n                os      : this.getOS(),\n                device  : this.getDevice(),\n                cpu     : this.getCPU()\n            };\n        };\n        this.getUA = function () {\n            return _ua;\n        };\n        this.setUA = function (ua) {\n            _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n            return this;\n        };\n        this.setUA(_ua);\n        return this;\n    };\n\n    UAParser.VERSION = LIBVERSION;\n    UAParser.BROWSER =  enumerize([NAME, VERSION, MAJOR]);\n    UAParser.CPU = enumerize([ARCHITECTURE]);\n    UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n    UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n    ///////////\n    // Export\n    //////////\n\n    // check js environment\n    if (typeof(exports) !== UNDEF_TYPE) {\n        // nodejs env\n        if (typeof module !== UNDEF_TYPE && module.exports) {\n            exports = module.exports = UAParser;\n        }\n        exports.UAParser = UAParser;\n    } else {\n        // requirejs env (optional)\n        if (typeof(define) === FUNC_TYPE && define.amd) {\n            define(function () {\n                return UAParser;\n            });\n        } else if (typeof window !== UNDEF_TYPE) {\n            // browser env\n            window.UAParser = UAParser;\n        }\n    }\n\n    // jQuery/Zepto specific (optional)\n    // Note:\n    //   In AMD env the global scope should be kept clean, but jQuery is an exception.\n    //   jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n    //   and we should catch that.\n    var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n    if ($ && !$.ua) {\n        var parser = new UAParser();\n        $.ua = parser.getResult();\n        $.ua.get = function () {\n            return parser.getUA();\n        };\n        $.ua.set = function (ua) {\n            parser.setUA(ua);\n            var result = parser.getResult();\n            for (var prop in result) {\n                $.ua[prop] = result[prop];\n            }\n        };\n    }\n\n})(typeof window === 'object' ? window : this);\n","import type { IBrowser, ICPU, IEngine, IOS } from 'ua-parser-js'\nimport UAParser from 'ua-parser-js'\n\nexport interface UserAgent {\n  browser: IBrowser\n  device: 'mobile' | 'desktop'\n  os: IOS\n  cpu: ICPU\n  engine: IEngine\n  supported: boolean\n}\n\nexport const useUseragentStore = defineStore('useragent', () => {\n  const params = useParams()\n  const useragent = ref(init())\n\n  function init() {\n    if (import.meta.server) {\n      const useragentString = (\n        params.all.browser || useRequestHeaders()['user-agent']\n      )?.toString()\n\n      if (!useragentString) {\n        return\n      }\n      const ua = UAParser(useragentString)\n      const result: UserAgent = {\n        browser: ua.browser,\n        device: devicetype(ua.device.type),\n        os: ua.os,\n        cpu: ua.cpu!,\n        engine: ua.engine!,\n        supported:\n          supported[(ua.browser.name || 'X') as keyof typeof supported] >=\n          parseInt(ua.browser.version || '0'),\n      }\n      return result\n    }\n  }\n\n  function update(ua: UserAgent): void {\n    useragent.value = ua\n  }\n\n  return { useragent, update }\n})\n\nconst supported = {\n  Chrome: 88,\n  Firefox: 91,\n  Safari: 14,\n  Edge: 88,\n  'Internet Explorer': 12,\n  IOS: 12,\n  'Samsung Internet': 16,\n  Opera: 82,\n  'Android Browser': 88,\n  X: -1,\n}\n\nfunction devicetype(type?: string) {\n  switch (type) {\n    case 'wearable':\n    case 'mobile':\n      return 'mobile'\n    case 'console':\n    case 'tablet':\n    case 'smarttv':\n    case 'embedded':\n    case undefined:\n    default:\n      return 'desktop'\n  }\n}\n","import type { ActiveHeadEntry, MergeHead } from '@unhead/schema'\nimport type { UseHeadInput } from '@unhead/vue'\n\nexport const usePageHeadStore = defineStore('head', () => {\n  const pageHeader = ref<ActiveHeadEntry<UseHeadInput<MergeHead>>>()\n\n  function update(input: UseHeadInput<MergeHead> | undefined) {\n    if (!input) return\n\n    // To avoid unwanted behavior of the Unheard API, we first remove the old header\n    pageHeader.value?.dispose()\n    pageHeader.value = useHead(input!) ?? undefined\n  }\n\n  return { update }\n})\n","type SettingsValue = boolean | string | number\n\nexport const useSettingsStore = defineStore('settings', () => {\n  const settings = {\n    debug: ref(useRuntimeConfig().public.debug),\n    tracking: ref(false),\n    renderEditorLinks: ref(false),\n\n    autosuggestThreshold: ref(2),\n    autosuggestSearchtype: ref('search_as_you_type'),\n    autosuggestSize: ref(20),\n    autosuggestSource: ref('focus'),\n\n    mapAdditionalBucketZoom: ref(0),\n    mapDeClustering: ref('accosum'),\n    mapShowBounds: ref(false),\n    mapShowProposal: ref(false),\n    mapShowMapInfo: ref(false),\n  }\n\n  function set(name: string, value: SettingsValue) {\n    ;(settings as Record<string, Ref>)[name].value =\n      tryParseInt(value.toString()) ?? value\n  }\n\n  return { ...settings, all: settings, set }\n})\n","export const urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n  let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n  let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n  return (size = defaultSize) => {\n    let id = ''\n    while (true) {\n      let bytes = getRandom(step)\n      let j = step\n      while (j--) {\n        id += alphabet[bytes[j] & mask] || ''\n        if (id.length === size) return id\n      }\n    }\n  }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n  customRandom(alphabet, size, random)\nexport let nanoid = (size = 21) => {\n  let id = ''\n  let bytes = crypto.getRandomValues(new Uint8Array(size))\n  while (size--) {\n    id += scopedUrlAlphabet[bytes[size] & 63]\n  }\n  return id\n}\n","import { nanoid } from 'nanoid'\n\nexport const useIDsStore = defineStore('ids', () => {\n  const cookies = useUserSessionCookies()\n\n  const user = ref('')\n  const session = ref('')\n  const cycle = ref('')\n  const client = ref<string>()\n\n  function init() {\n    user.value = cookies.user.value || nanoid()\n    session.value = cookies.session.value || nanoid()\n    cycle.value = nanoid()\n\n    cookies.user.value = user.value\n    cookies.session.value = session.value\n  }\n\n  return { user, session, cycle, client, init }\n})\n\nfunction useUserSessionCookies() {\n  const options = {\n    secure: true,\n    sameSite: 'none' as const,\n    path: '/',\n    httpOnly: true,\n  }\n\n  const user = useCookie('User-ID', {\n    ...options,\n    expires: monthsAdd(new Date(), 3),\n  })\n  const session = useCookie('Session-ID', options)\n\n  return { user, session }\n}\n","// This composable is used to toggle a boolean value to handle the state of a component or variable, etc.\nexport const useTogglerStore = defineStore('toggler', () => {\n  const toggler: Ref<ToggleState[]> = ref([])\n\n  // Get the state of a toggle.\n  function toggles(name: string) {\n    return computed(() => {\n      return toggler.value.find((toggle) => toggle.name === name)?.state\n    })\n  }\n\n  // Register a new toggle.\n  function register(\n    name: string,\n    options?: { state?: boolean; ignoreDocumentClick?: boolean },\n  ) {\n    toggler.value.push({\n      name,\n      state: options?.state ?? false,\n      ignoreDocumentClick: options?.ignoreDocumentClick ?? false,\n    })\n  }\n\n  // Toggle the state of a toggle and disable all other toggles.\n  function toggle(name: string, options?: ToggleOptions) {\n    toggler.value.forEach((toggleElement) => {\n      if (toggleElement.name === name) {\n        toggleElement.state = options?.state ?? !toggleElement.state\n      } else if (options && options.closeOthers !== false) {\n        toggleElement.state = false\n      }\n    })\n  }\n\n  if (import.meta.client) {\n    document.addEventListener('click', () => {\n      toggler.value\n        .filter((t) => !t.ignoreDocumentClick)\n        .forEach((t) => {\n          t.state = false\n        })\n    })\n  }\n\n  return {\n    register,\n    toggle,\n    toggles,\n    toggler,\n  }\n})\n","import { skipHydrate } from 'pinia'\n\nconst STORAGE_KEY = 'CONSENT'\n\nexport const useConsentStore = defineStore('consent', () => {\n  const consent = useLocalStorage<Consent>(STORAGE_KEY, () => ({}))\n  const configOpen = ref(false)\n\n  const open = computed(() => !consent.value.timestamp)\n\n  function update(value: Consent) {\n    consent.value = value\n    useTracking().trackConsentUpdate(value)\n  }\n\n  return { consent: skipHydrate(consent), open, configOpen, update }\n})\n","export default function useGuestWorldApi() {\n  async function user() {\n    return await useFetch<UserData>('/guestworld-api/v1/users', {\n      headers: useRequestHeaders(['cookie']),\n      credentials: 'include',\n    })\n  }\n\n  async function wishlists(signal: AbortSignal) {\n    return await $fetch<Wishlist[]>('/guestworld-api/v1/users/wishlists', {\n      credentials: 'include',\n      signal,\n    })\n  }\n\n  async function createWishlist(name: string) {\n    return await $fetch<WishlistRes>('/guestworld-api/v1/users/wishlist', {\n      method: 'POST',\n      body: { name },\n      credentials: 'include',\n    })\n  }\n\n  async function addAccommodationToWishlist(\n    wishlistId: string,\n    accommCode: string,\n  ) {\n    return await $fetch<WishlistRes>(\n      `/guestworld-api/v1/users/wishlist/${wishlistId}/accommodation/${accommCode}`,\n      {\n        method: 'POST',\n        body: {},\n        credentials: 'include',\n      },\n    )\n  }\n\n  async function deleteAccommodationFromWishlist(\n    wishlistId: string,\n    accommCode: string,\n  ) {\n    return await $fetch<WishlistRes>(\n      `/guestworld-api/v1/users/wishlist/${wishlistId}/accommodation/${accommCode}`,\n      {\n        method: 'DELETE',\n        body: {},\n        credentials: 'include',\n      },\n    )\n  }\n\n  return {\n    user,\n    wishlists,\n    createWishlist,\n    addAccommodationToWishlist,\n    deleteAccommodationFromWishlist,\n  }\n}\n","import { reactive as F, toRaw as A, createApp as Ae, nextTick as se, isVNode as de, mergeProps as P, defineComponent as W, ref as B, computed as f, watchEffect as z, createVNode as l, cloneVNode as Ne, onMounted as ue, onUnmounted as ce, h as H, Fragment as _e } from \"vue\";\nconst k = {\n  TOP_LEFT: \"top-left\",\n  TOP_RIGHT: \"top-right\",\n  TOP_CENTER: \"top-center\",\n  BOTTOM_LEFT: \"bottom-left\",\n  BOTTOM_RIGHT: \"bottom-right\",\n  BOTTOM_CENTER: \"bottom-center\"\n}, M = {\n  LIGHT: \"light\",\n  DARK: \"dark\",\n  COLORED: \"colored\",\n  AUTO: \"auto\"\n}, g = {\n  INFO: \"info\",\n  SUCCESS: \"success\",\n  WARNING: \"warning\",\n  ERROR: \"error\",\n  DEFAULT: \"default\"\n}, Ie = {\n  BOUNCE: \"bounce\",\n  SLIDE: \"slide\",\n  FLIP: \"flip\",\n  ZOOM: \"zoom\",\n  NONE: \"none\"\n}, fe = {\n  dangerouslyHTMLString: !1,\n  multiple: !0,\n  position: k.TOP_RIGHT,\n  autoClose: 5e3,\n  transition: \"bounce\",\n  hideProgressBar: !1,\n  pauseOnHover: !0,\n  pauseOnFocusLoss: !0,\n  closeOnClick: !0,\n  className: \"\",\n  bodyClassName: \"\",\n  style: {},\n  progressClassName: \"\",\n  progressStyle: {},\n  role: \"alert\",\n  theme: \"light\"\n}, pe = {\n  rtl: !1,\n  newestOnTop: !1,\n  toastClassName: \"\"\n}, me = {\n  ...fe,\n  ...pe\n};\n({\n  ...fe,\n  type: g.DEFAULT\n});\nvar r = /* @__PURE__ */ ((e) => (e[e.COLLAPSE_DURATION = 300] = \"COLLAPSE_DURATION\", e[e.DEBOUNCE_DURATION = 50] = \"DEBOUNCE_DURATION\", e.CSS_NAMESPACE = \"Toastify\", e))(r || {}), J = /* @__PURE__ */ ((e) => (e.ENTRANCE_ANIMATION_END = \"d\", e))(J || {});\nconst he = {\n  enter: \"Toastify--animate Toastify__bounce-enter\",\n  exit: \"Toastify--animate Toastify__bounce-exit\",\n  appendPosition: !0\n}, Oe = {\n  enter: \"Toastify--animate Toastify__slide-enter\",\n  exit: \"Toastify--animate Toastify__slide-exit\",\n  appendPosition: !0\n}, be = {\n  enter: \"Toastify--animate Toastify__zoom-enter\",\n  exit: \"Toastify--animate Toastify__zoom-exit\"\n}, Pe = {\n  enter: \"Toastify--animate Toastify__flip-enter\",\n  exit: \"Toastify--animate Toastify__flip-exit\"\n}, ie = \"Toastify--animate Toastify__none-enter\";\nfunction ge(e, t = !1) {\n  var a;\n  let n = he;\n  if (!e || typeof e == \"string\")\n    switch (e) {\n      case \"flip\":\n        n = Pe;\n        break;\n      case \"zoom\":\n        n = be;\n        break;\n      case \"slide\":\n        n = Oe;\n        break;\n    }\n  else\n    n = e;\n  if (t)\n    n.enter = ie;\n  else if (n.enter === ie) {\n    const o = (a = n.exit.split(\"__\")[1]) == null ? void 0 : a.split(\"-\")[0];\n    n.enter = `Toastify--animate Toastify__${o}-enter`;\n  }\n  return n;\n}\nfunction Le(e) {\n  return e.containerId || String(e.position);\n}\nconst K = \"will-unmount\";\nfunction $e(e = k.TOP_RIGHT) {\n  return !!document.querySelector(`.${r.CSS_NAMESPACE}__toast-container--${e}`);\n}\nfunction Be(e = k.TOP_RIGHT) {\n  return `${r.CSS_NAMESPACE}__toast-container--${e}`;\n}\nfunction qe(e, t, n = !1) {\n  const a = [\n    `${r.CSS_NAMESPACE}__toast-container`,\n    `${r.CSS_NAMESPACE}__toast-container--${e}`,\n    n ? `${r.CSS_NAMESPACE}__toast-container--rtl` : null\n  ].filter(Boolean).join(\" \");\n  return q(t) ? t({\n    position: e,\n    rtl: n,\n    defaultClassName: a\n  }) : `${a} ${t || \"\"}`;\n}\nfunction Me(e) {\n  var E;\n  const { position: t, containerClassName: n, rtl: a = !1, style: o = {} } = e, s = r.CSS_NAMESPACE, d = Be(t), T = document.querySelector(`.${s}`), u = document.querySelector(`.${d}`), N = !!u && !((E = u.className) != null && E.includes(K)), m = T || document.createElement(\"div\"), S = document.createElement(\"div\");\n  S.className = qe(\n    t,\n    n,\n    a\n  ), S.dataset.testid = `${r.CSS_NAMESPACE}__toast-container--${t}`, S.id = Le(e);\n  for (const v in o)\n    if (Object.prototype.hasOwnProperty.call(o, v)) {\n      const I = o[v];\n      S.style[v] = I;\n    }\n  return T || (m.className = r.CSS_NAMESPACE, document.body.appendChild(m)), N || m.appendChild(S), S;\n}\nfunction ee(e) {\n  var a, o, s;\n  const t = typeof e == \"string\" ? e : ((a = e.currentTarget) == null ? void 0 : a.id) || ((o = e.target) == null ? void 0 : o.id), n = document.getElementById(t);\n  n && n.removeEventListener(\"animationend\", ee, !1);\n  try {\n    D[t].unmount(), (s = document.getElementById(t)) == null || s.remove(), delete D[t], delete c[t];\n  } catch {\n  }\n}\nconst D = F({});\nfunction we(e, t) {\n  const n = document.getElementById(String(t));\n  n && (D[n.id] = e);\n}\nfunction te(e, t = !0) {\n  const n = String(e);\n  if (!D[n]) return;\n  const a = document.getElementById(n);\n  a && a.classList.add(K), t ? (Re(e), a && a.addEventListener(\"animationend\", ee, !1)) : ee(n), _.items = _.items.filter((o) => o.containerId !== e);\n}\nfunction Fe(e) {\n  for (const t in D)\n    te(t, e);\n  _.items = [];\n}\nfunction Ce(e, t) {\n  const n = document.getElementById(e.toastId);\n  if (n) {\n    let a = e;\n    a = {\n      ...a,\n      ...ge(a.transition)\n    };\n    const o = a.appendPosition ? `${a.exit}--${a.position}` : a.exit;\n    n.className += ` ${o}`, t && t(n);\n  }\n}\nfunction Re(e) {\n  for (const t in c)\n    if (t === e)\n      for (const n of c[t] || [])\n        Ce(n);\n}\nfunction Ue(e) {\n  const n = w().find((a) => a.toastId === e);\n  return n == null ? void 0 : n.containerId;\n}\nfunction re(e) {\n  return document.getElementById(e);\n}\nfunction xe(e) {\n  const t = re(e.containerId);\n  return t && t.classList.contains(K);\n}\nfunction le(e) {\n  var n;\n  const t = de(e.content) ? A(e.content.props) : null;\n  return t != null ? t : A((n = e.data) != null ? n : {});\n}\nfunction De(e) {\n  return e ? _.items.filter((n) => n.containerId === e).length > 0 : _.items.length > 0;\n}\nfunction ke() {\n  if (_.items.length > 0) {\n    const e = _.items.shift();\n    j(e == null ? void 0 : e.toastContent, e == null ? void 0 : e.toastProps);\n  }\n}\nconst c = F({}), _ = F({\n  items: []\n});\nfunction w() {\n  const e = A(c);\n  return Object.values(e).reduce((t, n) => [...t, ...n], []);\n}\nfunction He(e) {\n  return w().find((n) => n.toastId === e);\n}\nfunction j(e, t = {}) {\n  if (xe(t)) {\n    const n = re(t.containerId);\n    n && n.addEventListener(\"animationend\", ne.bind(null, e, t), !1);\n  } else\n    ne(e, t);\n}\nfunction ne(e, t = {}) {\n  const n = re(t.containerId);\n  n && n.removeEventListener(\"animationend\", ne.bind(null, e, t), !1);\n  const a = c[t.containerId] || [], o = a.length > 0;\n  if (!o && !$e(t.position)) {\n    const s = Me(t), d = Ae(it, t);\n    d.mount(s), we(d, s.id);\n  }\n  o && !t.updateId && (t.position = a[0].position), se(() => {\n    t.updateId ? C.update(t) : C.add(e, t);\n  });\n}\nconst C = {\n  /**\n   * add a toast\n   * @param _ ..\n   * @param opts toast props\n   */\n  add(e, t) {\n    const { containerId: n = \"\" } = t;\n    n && (c[n] = c[n] || [], c[n].find((a) => a.toastId === t.toastId) || setTimeout(() => {\n      var a, o;\n      t.newestOnTop ? (a = c[n]) == null || a.unshift(t) : (o = c[n]) == null || o.push(t), t.onOpen && t.onOpen(le(t));\n    }, t.delay || 0));\n  },\n  /**\n   * remove a toast\n   * @param id toastId\n   */\n  remove(e) {\n    if (e) {\n      const t = Ue(e);\n      if (t) {\n        const n = c[t];\n        let a = n.find((o) => o.toastId === e);\n        c[t] = n.filter((o) => o.toastId !== e), !c[t].length && !De(t) && te(t, !1), ke(), se(() => {\n          a != null && a.onClose && (a.onClose(le(a)), a = void 0);\n        });\n      }\n    }\n  },\n  /**\n   * update the toast\n   * @param opts toast props\n   */\n  update(e = {}) {\n    const { containerId: t = \"\" } = e;\n    if (t && e.updateId) {\n      c[t] = c[t] || [];\n      const n = c[t].find((s) => s.toastId === e.toastId), a = (n == null ? void 0 : n.position) !== e.position || (n == null ? void 0 : n.transition) !== e.transition, o = { ...e, disabledEnterTransition: !a, updateId: void 0 };\n      C.dismissForce(e == null ? void 0 : e.toastId), setTimeout(() => {\n        i(o.content, o);\n      }, e.delay || 0);\n    }\n  },\n  /**\n   * clear all toasts in container.\n   * @param containerId container id\n   */\n  clear(e, t = !0) {\n    e ? te(e, t) : Fe(t);\n  },\n  dismissCallback(e) {\n    var a;\n    const t = (a = e.currentTarget) == null ? void 0 : a.id, n = document.getElementById(t);\n    n && (n.removeEventListener(\"animationend\", C.dismissCallback, !1), setTimeout(() => {\n      C.remove(t);\n    }));\n  },\n  dismiss(e) {\n    if (e) {\n      const t = w();\n      for (const n of t)\n        if (n.toastId === e) {\n          Ce(n, (a) => {\n            a.addEventListener(\"animationend\", C.dismissCallback, !1);\n          });\n          break;\n        }\n    }\n  },\n  dismissForce(e) {\n    if (e) {\n      const t = w();\n      for (const n of t)\n        if (n.toastId === e) {\n          const a = document.getElementById(e);\n          a && (a.remove(), a.removeEventListener(\"animationend\", C.dismissCallback, !1), C.remove(e));\n          break;\n        }\n    }\n  }\n}, Ee = F({}), Q = F({});\nfunction ye() {\n  return Math.random().toString(36).substring(2, 9);\n}\nfunction ze(e) {\n  return typeof e == \"number\" && !isNaN(e);\n}\nfunction ae(e) {\n  return typeof e == \"string\";\n}\nfunction q(e) {\n  return typeof e == \"function\";\n}\nfunction Y(...e) {\n  return P(...e);\n}\nfunction G(e) {\n  return typeof e == \"object\" && (!!(e != null && e.render) || !!(e != null && e.setup) || typeof (e == null ? void 0 : e.type) == \"object\");\n}\nfunction je(e = {}) {\n  Ee[`${r.CSS_NAMESPACE}-default-options`] = e;\n}\nfunction Ge() {\n  return Ee[`${r.CSS_NAMESPACE}-default-options`] || me;\n}\nfunction Ve() {\n  return document.documentElement.classList.contains(\"dark\") ? \"dark\" : \"light\";\n}\nvar V = /* @__PURE__ */ ((e) => (e[e.Enter = 0] = \"Enter\", e[e.Exit = 1] = \"Exit\", e))(V || {});\nconst Te = {\n  containerId: {\n    type: [String, Number],\n    required: !1,\n    default: \"\"\n  },\n  clearOnUrlChange: {\n    type: Boolean,\n    required: !1,\n    default: !0\n  },\n  disabledEnterTransition: {\n    type: Boolean,\n    required: !1,\n    default: !1\n  },\n  dangerouslyHTMLString: {\n    type: Boolean,\n    required: !1,\n    default: !1\n  },\n  multiple: {\n    type: Boolean,\n    required: !1,\n    default: !0\n  },\n  limit: {\n    type: Number,\n    required: !1,\n    default: void 0\n  },\n  position: {\n    type: String,\n    required: !1,\n    default: k.TOP_LEFT\n  },\n  bodyClassName: {\n    type: String,\n    required: !1,\n    default: \"\"\n  },\n  autoClose: {\n    type: [Number, Boolean],\n    required: !1,\n    default: !1\n  },\n  closeButton: {\n    type: [Boolean, Function, Object],\n    required: !1,\n    default: void 0\n  },\n  transition: {\n    type: [String, Object],\n    required: !1,\n    default: \"bounce\"\n  },\n  hideProgressBar: {\n    type: Boolean,\n    required: !1,\n    default: !1\n  },\n  pauseOnHover: {\n    type: Boolean,\n    required: !1,\n    default: !0\n  },\n  pauseOnFocusLoss: {\n    type: Boolean,\n    required: !1,\n    default: !0\n  },\n  closeOnClick: {\n    type: Boolean,\n    required: !1,\n    default: !0\n  },\n  progress: {\n    type: Number,\n    required: !1,\n    default: void 0\n  },\n  progressClassName: {\n    type: String,\n    required: !1,\n    default: \"\"\n  },\n  toastStyle: {\n    type: Object,\n    required: !1,\n    default() {\n      return {};\n    }\n  },\n  progressStyle: {\n    type: Object,\n    required: !1,\n    default() {\n      return {};\n    }\n  },\n  role: {\n    type: String,\n    required: !1,\n    default: \"alert\"\n  },\n  theme: {\n    type: String,\n    required: !1,\n    default: M.AUTO\n  },\n  content: {\n    type: [String, Object, Function],\n    required: !1,\n    default: \"\"\n  },\n  toastId: {\n    type: [String, Number],\n    required: !1,\n    default: \"\"\n  },\n  data: {\n    type: [Object, String],\n    required: !1,\n    default() {\n      return {};\n    }\n  },\n  type: {\n    type: String,\n    required: !1,\n    default: g.DEFAULT\n  },\n  icon: {\n    type: [Boolean, String, Number, Object, Function],\n    required: !1,\n    default: void 0\n  },\n  delay: {\n    type: Number,\n    required: !1,\n    default: void 0\n  },\n  onOpen: {\n    type: Function,\n    required: !1,\n    default: void 0\n  },\n  onClose: {\n    type: Function,\n    required: !1,\n    default: void 0\n  },\n  onClick: {\n    type: Function,\n    required: !1,\n    default: void 0\n  },\n  isLoading: {\n    type: Boolean,\n    required: !1,\n    default: void 0\n  },\n  rtl: {\n    type: Boolean,\n    required: !1,\n    default: !1\n  },\n  toastClassName: {\n    type: String,\n    required: !1,\n    default: \"\"\n  },\n  updateId: {\n    type: [String, Number],\n    required: !1,\n    default: \"\"\n  }\n}, Qe = {\n  autoClose: {\n    type: [Number, Boolean],\n    required: !0\n  },\n  isRunning: {\n    type: Boolean,\n    required: !1,\n    default: void 0\n  },\n  type: {\n    type: String,\n    required: !1,\n    default: g.DEFAULT\n  },\n  theme: {\n    type: String,\n    required: !1,\n    default: M.AUTO\n  },\n  hide: {\n    type: Boolean,\n    required: !1,\n    default: void 0\n  },\n  className: {\n    type: [String, Function],\n    required: !1,\n    default: \"\"\n  },\n  controlledProgress: {\n    type: Boolean,\n    required: !1,\n    default: void 0\n  },\n  rtl: {\n    type: Boolean,\n    required: !1,\n    default: void 0\n  },\n  isIn: {\n    type: Boolean,\n    required: !1,\n    default: void 0\n  },\n  progress: {\n    type: Number,\n    required: !1,\n    default: void 0\n  },\n  closeToast: {\n    type: Function,\n    required: !1,\n    default: void 0\n  }\n}, We = /* @__PURE__ */ W({\n  name: \"ProgressBar\",\n  props: Qe,\n  // @ts-ignore\n  setup(e, {\n    attrs: t\n  }) {\n    const n = B(), a = f(() => e.hide ? \"true\" : \"false\"), o = f(() => ({\n      ...t.style || {},\n      animationDuration: `${e.autoClose === !0 ? 5e3 : e.autoClose}ms`,\n      animationPlayState: e.isRunning ? \"running\" : \"paused\",\n      opacity: e.hide || e.autoClose === !1 ? 0 : 1,\n      transform: e.controlledProgress ? `scaleX(${e.progress})` : \"none\"\n    })), s = f(() => [`${r.CSS_NAMESPACE}__progress-bar`, e.controlledProgress ? `${r.CSS_NAMESPACE}__progress-bar--controlled` : `${r.CSS_NAMESPACE}__progress-bar--animated`, `${r.CSS_NAMESPACE}__progress-bar-theme--${e.theme}`, `${r.CSS_NAMESPACE}__progress-bar--${e.type}`, e.rtl ? `${r.CSS_NAMESPACE}__progress-bar--rtl` : null].filter(Boolean).join(\" \")), d = f(() => `${s.value} ${(t == null ? void 0 : t.class) || \"\"}`), T = () => {\n      n.value && (n.value.onanimationend = null, n.value.ontransitionend = null);\n    }, u = () => {\n      e.isIn && e.closeToast && e.autoClose !== !1 && (e.closeToast(), T());\n    }, N = f(() => e.controlledProgress ? null : u), m = f(() => e.controlledProgress ? u : null);\n    return z(() => {\n      n.value && (T(), n.value.onanimationend = N.value, n.value.ontransitionend = m.value);\n    }), () => l(\"div\", {\n      ref: n,\n      role: \"progressbar\",\n      \"aria-hidden\": a.value,\n      \"aria-label\": \"notification timer\",\n      class: d.value,\n      style: o.value\n    }, null);\n  }\n}), Ke = /* @__PURE__ */ W({\n  name: \"CloseButton\",\n  inheritAttrs: !1,\n  props: {\n    theme: {\n      type: String,\n      required: !1,\n      default: M.AUTO\n    },\n    type: {\n      type: String,\n      required: !1,\n      default: M.LIGHT\n    },\n    ariaLabel: {\n      type: String,\n      required: !1,\n      default: \"close\"\n    },\n    closeToast: {\n      type: Function,\n      required: !1,\n      default: void 0\n    }\n  },\n  setup(e) {\n    return () => l(\"button\", {\n      class: `${r.CSS_NAMESPACE}__close-button ${r.CSS_NAMESPACE}__close-button--${e.theme}`,\n      type: \"button\",\n      onClick: (t) => {\n        t.stopPropagation(), e.closeToast && e.closeToast(t);\n      },\n      \"aria-label\": e.ariaLabel\n    }, [l(\"svg\", {\n      \"aria-hidden\": \"true\",\n      viewBox: \"0 0 14 16\"\n    }, [l(\"path\", {\n      \"fill-rule\": \"evenodd\",\n      d: \"M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z\"\n    }, null)])]);\n  }\n}), Z = ({\n  theme: e,\n  type: t,\n  path: n,\n  ...a\n}) => l(\"svg\", P({\n  viewBox: \"0 0 24 24\",\n  width: \"100%\",\n  height: \"100%\",\n  fill: e === \"colored\" ? \"currentColor\" : `var(--toastify-icon-color-${t})`\n}, a), [l(\"path\", {\n  d: n\n}, null)]);\nfunction Ye(e) {\n  return l(Z, P(e, {\n    path: \"M23.32 17.191L15.438 2.184C14.728.833 13.416 0 11.996 0c-1.42 0-2.733.833-3.443 2.184L.533 17.448a4.744 4.744 0 000 4.368C1.243 23.167 2.555 24 3.975 24h16.05C22.22 24 24 22.044 24 19.632c0-.904-.251-1.746-.68-2.44zm-9.622 1.46c0 1.033-.724 1.823-1.698 1.823s-1.698-.79-1.698-1.822v-.043c0-1.028.724-1.822 1.698-1.822s1.698.79 1.698 1.822v.043zm.039-12.285l-.84 8.06c-.057.581-.408.943-.897.943-.49 0-.84-.367-.896-.942l-.84-8.065c-.057-.624.25-1.095.779-1.095h1.91c.528.005.84.476.784 1.1z\"\n  }), null);\n}\nfunction Ze(e) {\n  return l(Z, P(e, {\n    path: \"M12 0a12 12 0 1012 12A12.013 12.013 0 0012 0zm.25 5a1.5 1.5 0 11-1.5 1.5 1.5 1.5 0 011.5-1.5zm2.25 13.5h-4a1 1 0 010-2h.75a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-.75a1 1 0 010-2h1a2 2 0 012 2v4.75a.25.25 0 00.25.25h.75a1 1 0 110 2z\"\n  }), null);\n}\nfunction Xe(e) {\n  return l(Z, P(e, {\n    path: \"M12 0a12 12 0 1012 12A12.014 12.014 0 0012 0zm6.927 8.2l-6.845 9.289a1.011 1.011 0 01-1.43.188l-4.888-3.908a1 1 0 111.25-1.562l4.076 3.261 6.227-8.451a1 1 0 111.61 1.183z\"\n  }), null);\n}\nfunction Je(e) {\n  return l(Z, P(e, {\n    path: \"M11.983 0a12.206 12.206 0 00-8.51 3.653A11.8 11.8 0 000 12.207 11.779 11.779 0 0011.8 24h.214A12.111 12.111 0 0024 11.791 11.766 11.766 0 0011.983 0zM10.5 16.542a1.476 1.476 0 011.449-1.53h.027a1.527 1.527 0 011.523 1.47 1.475 1.475 0 01-1.449 1.53h-.027a1.529 1.529 0 01-1.523-1.47zM11 12.5v-6a1 1 0 012 0v6a1 1 0 11-2 0z\"\n  }), null);\n}\nfunction et() {\n  return l(\"div\", {\n    class: `${r.CSS_NAMESPACE}__spinner`\n  }, null);\n}\nconst oe = {\n  info: Ze,\n  warning: Ye,\n  success: Xe,\n  error: Je,\n  spinner: et\n}, tt = (e) => e in oe;\nfunction nt({\n  theme: e,\n  type: t,\n  isLoading: n,\n  icon: a\n}) {\n  let o;\n  const s = {\n    theme: e,\n    type: t\n  };\n  return n ? o = oe.spinner() : a === !1 ? o = void 0 : G(a) ? o = A(a) : q(a) ? o = a(s) : de(a) ? o = Ne(a, s) : ae(a) || ze(a) ? o = a : tt(t) && (o = oe[t](s)), o;\n}\nconst at = () => {\n};\nfunction ot(e, t, n = r.COLLAPSE_DURATION) {\n  const { scrollHeight: a, style: o } = e, s = n;\n  requestAnimationFrame(() => {\n    o.minHeight = \"initial\", o.height = a + \"px\", o.transition = `all ${s}ms`, requestAnimationFrame(() => {\n      o.height = \"0\", o.padding = \"0\", o.margin = \"0\", setTimeout(t, s);\n    });\n  });\n}\nfunction st(e) {\n  const t = B(!1), n = B(!1), a = B(!1), o = B(V.Enter), s = F({\n    ...e,\n    appendPosition: e.appendPosition || !1,\n    collapse: typeof e.collapse > \"u\" ? !0 : e.collapse,\n    collapseDuration: e.collapseDuration || r.COLLAPSE_DURATION\n  }), d = s.done || at, T = f(() => s.appendPosition ? `${s.enter}--${s.position}` : s.enter), u = f(() => s.appendPosition ? `${s.exit}--${s.position}` : s.exit), N = f(() => e.pauseOnHover ? {\n    onMouseenter: h,\n    onMouseleave: p\n  } : {});\n  function m() {\n    const y = T.value.split(\" \");\n    E().addEventListener(\n      J.ENTRANCE_ANIMATION_END,\n      p,\n      { once: !0 }\n    );\n    const O = ($) => {\n      const U = E();\n      $.target === U && (U.dispatchEvent(new Event(J.ENTRANCE_ANIMATION_END)), U.removeEventListener(\"animationend\", O), U.removeEventListener(\"animationcancel\", O), o.value === V.Enter && $.type !== \"animationcancel\" && U.classList.remove(...y));\n    }, b = () => {\n      const $ = E();\n      $.classList.add(...y), $.addEventListener(\"animationend\", O), $.addEventListener(\"animationcancel\", O);\n    };\n    e.pauseOnFocusLoss && v(), b();\n  }\n  function S() {\n    if (!E()) return;\n    const y = () => {\n      const b = E();\n      b.removeEventListener(\"animationend\", y), s.collapse ? ot(b, d, s.collapseDuration) : d();\n    }, O = () => {\n      const b = E();\n      o.value = V.Exit, b && (b.className += ` ${u.value}`, b.addEventListener(\"animationend\", y));\n    };\n    n.value || (a.value ? y() : setTimeout(O));\n  }\n  function E() {\n    return e.toastRef.value;\n  }\n  function v() {\n    document.hasFocus() || h(), window.addEventListener(\"focus\", p), window.addEventListener(\"blur\", h);\n  }\n  function I() {\n    window.removeEventListener(\"focus\", p), window.removeEventListener(\"blur\", h);\n  }\n  function p() {\n    (!e.loading.value || e.isLoading === void 0) && (t.value = !0);\n  }\n  function h() {\n    t.value = !1;\n  }\n  function R(y) {\n    y && (y.stopPropagation(), y.preventDefault()), n.value = !1;\n  }\n  return z(S), z(() => {\n    const y = w();\n    n.value = y.findIndex((O) => O.toastId === s.toastId) > -1;\n  }), z(() => {\n    e.isLoading !== void 0 && (e.loading.value ? h() : p());\n  }), ue(m), ce(() => {\n    e.pauseOnFocusLoss && I();\n  }), {\n    isIn: n,\n    isRunning: t,\n    hideToast: R,\n    eventHandlers: N\n  };\n}\nconst rt = /* @__PURE__ */ W({\n  name: \"ToastItem\",\n  inheritAttrs: !1,\n  props: Te,\n  // @ts-ignore\n  setup(e) {\n    const t = B(), n = f(() => !!e.isLoading), a = f(() => e.progress !== void 0 && e.progress !== null), o = f(() => nt(e)), s = f(() => [`${r.CSS_NAMESPACE}__toast`, `${r.CSS_NAMESPACE}__toast-theme--${e.theme}`, `${r.CSS_NAMESPACE}__toast--${e.type}`, e.rtl ? `${r.CSS_NAMESPACE}__toast--rtl` : void 0, e.toastClassName || \"\"].filter(Boolean).join(\" \")), {\n      isRunning: d,\n      isIn: T,\n      hideToast: u,\n      eventHandlers: N\n    } = st({\n      toastRef: t,\n      loading: n,\n      done: () => {\n        C.remove(e.toastId);\n      },\n      ...ge(e.transition, e.disabledEnterTransition),\n      ...e\n    });\n    return () => l(\"div\", P({\n      id: e.toastId,\n      class: s.value,\n      style: e.toastStyle || {},\n      ref: t,\n      \"data-testid\": `toast-item-${e.toastId}`,\n      onClick: (m) => {\n        e.closeOnClick && u(), e.onClick && e.onClick(m);\n      }\n    }, N.value), [l(\"div\", {\n      role: e.role,\n      \"data-testid\": \"toast-body\",\n      class: `${r.CSS_NAMESPACE}__toast-body ${e.bodyClassName || \"\"}`\n    }, [o.value != null && l(\"div\", {\n      \"data-testid\": `toast-icon-${e.type}`,\n      class: [`${r.CSS_NAMESPACE}__toast-icon`, e.isLoading ? \"\" : `${r.CSS_NAMESPACE}--animate-icon ${r.CSS_NAMESPACE}__zoom-enter`].join(\" \")\n    }, [G(o.value) ? H(A(o.value), {\n      theme: e.theme,\n      type: e.type\n    }) : q(o.value) ? o.value({\n      theme: e.theme,\n      type: e.type\n    }) : o.value]), l(\"div\", {\n      \"data-testid\": \"toast-content\"\n    }, [G(e.content) ? H(A(e.content), {\n      toastProps: A(e),\n      closeToast: u,\n      data: e.data\n    }) : q(e.content) ? e.content({\n      toastProps: A(e),\n      closeToast: u,\n      data: e.data\n    }) : e.dangerouslyHTMLString ? H(\"div\", {\n      innerHTML: e.content\n    }) : e.content])]), (e.closeButton === void 0 || e.closeButton === !0) && l(Ke, {\n      theme: e.theme,\n      closeToast: (m) => {\n        m.stopPropagation(), m.preventDefault(), u();\n      }\n    }, null), G(e.closeButton) ? H(A(e.closeButton), {\n      closeToast: u,\n      type: e.type,\n      theme: e.theme\n    }) : q(e.closeButton) ? e.closeButton({\n      closeToast: u,\n      type: e.type,\n      theme: e.theme\n    }) : null, l(We, {\n      className: e.progressClassName,\n      style: e.progressStyle,\n      rtl: e.rtl,\n      theme: e.theme,\n      isIn: T.value,\n      type: e.type,\n      hide: e.hideProgressBar,\n      isRunning: d.value,\n      autoClose: e.autoClose,\n      controlledProgress: a.value,\n      progress: e.progress,\n      closeToast: e.isLoading ? void 0 : u\n    }, null)]);\n  }\n});\nlet x = 0;\nfunction Se() {\n  typeof window > \"u\" || (x && window.cancelAnimationFrame(x), x = window.requestAnimationFrame(Se), Q.lastUrl !== window.location.href && (Q.lastUrl = window.location.href, C.clear()));\n}\nconst it = /* @__PURE__ */ W({\n  name: \"ToastifyContainer\",\n  inheritAttrs: !1,\n  props: Te,\n  // @ts-ignore\n  setup(e) {\n    const t = f(() => e.containerId), n = f(() => c[t.value] || []), a = f(() => n.value.filter((o) => o.position === e.position));\n    return ue(() => {\n      typeof window < \"u\" && e.clearOnUrlChange && window.requestAnimationFrame(Se);\n    }), ce(() => {\n      typeof window < \"u\" && x && (window.cancelAnimationFrame(x), Q.lastUrl = \"\");\n    }), () => l(_e, null, [a.value.map((o) => {\n      const {\n        toastId: s = \"\"\n      } = o;\n      return l(rt, P({\n        key: s\n      }, o), null);\n    })]);\n  }\n});\nlet X = !1;\nfunction ve() {\n  const e = [];\n  return w().forEach((n) => {\n    const a = document.getElementById(n.containerId);\n    a && !a.classList.contains(K) && e.push(n);\n  }), e;\n}\nfunction lt(e) {\n  const t = ve().length, n = e != null ? e : 0;\n  return n > 0 && t + _.items.length >= n;\n}\nfunction dt(e) {\n  lt(e.limit) && !e.updateId && _.items.push({\n    toastId: e.toastId,\n    containerId: e.containerId,\n    toastContent: e.content,\n    toastProps: e\n  });\n}\nfunction L(e, t, n = {}) {\n  if (X) return;\n  n = Y(Ge(), {\n    type: t\n  }, A(n)), (!n.toastId || typeof n.toastId != \"string\" && typeof n.toastId != \"number\") && (n.toastId = ye()), n = {\n    ...n,\n    content: e,\n    containerId: n.containerId || String(n.position)\n  };\n  const a = Number(n == null ? void 0 : n.progress);\n  return a < 0 && (n.progress = 0), a > 1 && (n.progress = 1), n.theme === \"auto\" && (n.theme = Ve()), dt(n), Q.lastUrl = window.location.href, n.multiple ? _.items.length ? n.updateId && j(e, n) : j(e, n) : (X = !0, i.clearAll(void 0, !1), setTimeout(() => {\n    j(e, n);\n  }, 0), setTimeout(() => {\n    X = !1;\n  }, 390)), n.toastId;\n}\nconst i = (e, t) => L(e, g.DEFAULT, t);\ni.info = (e, t) => L(e, g.DEFAULT, {\n  ...t,\n  type: g.INFO\n});\ni.error = (e, t) => L(e, g.DEFAULT, {\n  ...t,\n  type: g.ERROR\n});\ni.warning = (e, t) => L(e, g.DEFAULT, {\n  ...t,\n  type: g.WARNING\n});\ni.warn = i.warning;\ni.success = (e, t) => L(e, g.DEFAULT, {\n  ...t,\n  type: g.SUCCESS\n});\ni.loading = (e, t) => L(e, g.DEFAULT, Y(t, {\n  isLoading: !0,\n  autoClose: !1,\n  closeOnClick: !1,\n  closeButton: !1,\n  draggable: !1\n}));\ni.dark = (e, t) => L(e, g.DEFAULT, Y(t, {\n  theme: M.DARK\n}));\ni.remove = (e) => {\n  e ? C.dismiss(e) : C.clear();\n};\ni.clearAll = (e, t) => {\n  se(() => {\n    C.clear(e, t);\n  });\n};\ni.isActive = (e) => {\n  let t = !1;\n  return t = ve().findIndex((a) => a.toastId === e) > -1, t;\n};\ni.update = (e, t = {}) => {\n  setTimeout(() => {\n    const n = He(e);\n    if (n) {\n      const a = A(n), {\n        content: o\n      } = a, s = {\n        ...a,\n        ...t,\n        toastId: t.toastId || e,\n        updateId: ye()\n      }, d = s.render || o;\n      delete s.render, L(d, s.type, s);\n    }\n  }, 0);\n};\ni.done = (e) => {\n  i.update(e, {\n    isLoading: !1,\n    progress: 1\n  });\n};\ni.promise = ut;\nfunction ut(e, {\n  pending: t,\n  error: n,\n  success: a\n}, o) {\n  var m, S, E;\n  let s;\n  const d = {\n    ...o || {},\n    autoClose: !1\n  };\n  t && (s = ae(t) ? i.loading(t, d) : i.loading(t.render, {\n    ...d,\n    ...t\n  }));\n  const T = {\n    autoClose: (m = o == null ? void 0 : o.autoClose) != null ? m : !0,\n    closeOnClick: (S = o == null ? void 0 : o.closeOnClick) != null ? S : !0,\n    closeButton: (E = o == null ? void 0 : o.autoClose) != null ? E : null,\n    isLoading: void 0,\n    draggable: null,\n    delay: 100\n  }, u = (v, I, p) => {\n    if (I == null) {\n      i.remove(s);\n      return;\n    }\n    const h = {\n      type: v,\n      ...T,\n      ...o,\n      data: p\n    }, R = ae(I) ? {\n      render: I\n    } : I;\n    return s ? i.update(s, {\n      ...h,\n      ...R,\n      isLoading: !1\n    }) : i(R.render, {\n      ...h,\n      ...R,\n      isLoading: !1\n    }), p;\n  }, N = q(e) ? e() : e;\n  return N.then((v) => {\n    u(\"success\", a, v);\n  }).catch((v) => {\n    u(\"error\", n, v);\n  }), N;\n}\ni.POSITION = k;\ni.THEME = M;\ni.TYPE = g;\ni.TRANSITIONS = Ie;\nconst ct = {\n  install(e, t = {}) {\n    ft(t);\n  }\n};\ntypeof window < \"u\" && (window.Vue3Toastify = ct);\nfunction ft(e = {}) {\n  const t = Y(me, e);\n  je(t);\n}\nexport {\n  V as AnimationStep,\n  he as Bounce,\n  Pe as Flip,\n  Oe as Slide,\n  C as ToastActions,\n  it as ToastifyContainer,\n  be as Zoom,\n  Ce as addExitAnimateToNode,\n  ke as appendFromQueue,\n  we as cacheRenderInstance,\n  Fe as clearContainers,\n  D as containerInstances,\n  ct as default,\n  j as doAppend,\n  w as getAllToast,\n  He as getToast,\n  Q as globalCache,\n  Ee as globalOptions,\n  _ as queue,\n  te as removeContainer,\n  i as toast,\n  c as toastContainers,\n  ft as updateGlobalOptions,\n  st as useCssTransition\n};\n","import { toast, type Content as ToastContent } from 'vue3-toastify'\nimport type { ToastOptions, ToastType } from '../../types'\n\nconst TOAST_DURATION_DEFAULT = 4000\n\nexport default function useToaster() {\n  function show(\n    type: ToastType,\n    content: ToastContent,\n    options?: ToastOptions,\n  ) {\n    return toast(content, {\n      type,\n      delay: options?.delay,\n      autoClose: options?.duration ?? TOAST_DURATION_DEFAULT,\n      onOpen: options?.onOpen,\n      onClose: options?.onClose,\n      onClick: options?.onClick,\n      toastClassName: `close-button-${options?.closeButton ?? 'center'}`,\n    })\n  }\n\n  function error(content: ToastContent, options?: ToastOptions) {\n    return show('error', content, options)\n  }\n\n  function warning(content: ToastContent, options?: ToastOptions) {\n    return show('warning', content, options)\n  }\n\n  function success(content: ToastContent, options?: ToastOptions) {\n    return show('success', content, options)\n  }\n\n  function info(content: ToastContent, options?: ToastOptions) {\n    return show('info', content, options)\n  }\n\n  function untyped(content: ToastContent, options?: ToastOptions) {\n    return show('default', content, options)\n  }\n\n  return { show, error, warning, success, info, untyped, raw: toast }\n}\n","import { useQuery, useMutation } from '@tanstack/vue-query'\n\ntype WishlistQueryResult = {\n  wishlists: Wishlist[]\n  accommodationMap?: Map<string, Wishlist>\n}\n\nexport const useWishlistStore = defineStore('wishlist', () => {\n  const { t } = useI18n()\n\n  const { data, isLoading, refetch } = useQuery<WishlistQueryResult>({\n    queryKey: ['wishlists'],\n    queryFn: async ({ signal }): Promise<WishlistQueryResult> => {\n      const response = await useGuestWorldApi().wishlists(signal)\n      const wishlists: Wishlist[] = response || []\n      return { wishlists }\n    },\n    select: ({ wishlists }) => {\n      const accommodationMap = new Map<string, Wishlist>()\n      wishlists.forEach((wishlist) => {\n        ;(wishlist.accommodations || []).forEach((acc) => {\n          accommodationMap.set(acc.accommodationCode, wishlist)\n        })\n      })\n\n      useBookmarks().append(\n        wishlists.flatMap((item) =>\n          (item.accommodations || []).map(\n            (acc: AccommodationRef) => acc.accommodationCode,\n          ),\n        ) || [],\n      )\n      return { wishlists, accommodationMap }\n    },\n  })\n\n  const rawAccom: Ref<string> = ref('')\n  const wishlists = computed<Wishlist[]>(() => data.value?.wishlists || [])\n  const accommodationMap = computed(\n    () => data.value?.accommodationMap || new Map(),\n  )\n  const closeWishlistEvt = useEventBus('closeWishlistModal')\n\n  /* Wishlist management */\n\n  const createWishlistMutation = useMutation({\n    mutationFn: async (wishlistName: string) => {\n      const res = await useGuestWorldApi().createWishlist(wishlistName)\n      return res\n    },\n    onSuccess: async () => {\n      await refetch()\n    },\n    onError: () => {\n      useToaster().error(\n        `${t('www.components.views.search.area.wishlistModal.error' as TranslationKey)}`,\n      )\n    },\n  })\n\n  /* Accommodation management */\n  const addAccommodationMutation = useMutation({\n    mutationFn: async ({\n      wishlistId,\n      wishlistName,\n    }: {\n      wishlistId: string\n      wishlistName: string\n    }) => {\n      const accommCode = rawAccom.value\n\n      const res = await useGuestWorldApi().addAccommodationToWishlist(\n        wishlistId,\n        accommCode,\n      )\n      return { res, wishlistName, accommCode }\n    },\n    onSuccess: async ({ wishlistName, accommCode }) => {\n      useBookmarks().toggle(accommCode)\n      rawAccom.value = ''\n      closeWishlistEvt.emit()\n      useToaster().success(\n        `${t('www.components.views.search.area.wishlistModal.addSuccess' as TranslationKey, { wishlistName })}`,\n      )\n      await refetch()\n    },\n    onError: () => {\n      useToaster().error(\n        `${t('www.components.views.search.area.wishlistModal.error' as TranslationKey)}`,\n      )\n    },\n  })\n\n  const deleteAccommodationMutation = useMutation({\n    mutationFn: async (accommCode: string) => {\n      const wishlist = accommodationMap.value.get(accommCode)\n      if (!wishlist) {\n        throw new Error()\n      }\n      const res = await useGuestWorldApi().deleteAccommodationFromWishlist(\n        wishlist.wishlistId,\n        accommCode,\n      )\n      return { res, accommCode, wishlistName: wishlist.name }\n    },\n    onSuccess: async ({ accommCode, wishlistName }) => {\n      useBookmarks().toggle(accommCode)\n      useToaster().success(\n        `${t('www.components.views.search.area.wishlistModal.removeSuccess' as TranslationKey, { wishlistName })}`,\n      )\n      await refetch()\n    },\n    onError: () => {\n      useToaster().error(\n        `${t('www.components.views.search.area.wishlistModal.error' as TranslationKey)}`,\n      )\n    },\n  })\n\n  function selectAccommodationToAdd(code: string) {\n    rawAccom.value = code\n  }\n\n  return {\n    wishlists,\n    isLoading,\n    selectAccommodationToAdd,\n    createWishlist: createWishlistMutation.mutate,\n    addAccommodationToWishlist: addAccommodationMutation.mutate,\n    deleteAccommodationFromWishlist: deleteAccommodationMutation.mutate,\n  }\n})\n","export const useUserStore = defineStore('user', () => {\n  const raw = ref<UserData>()\n\n  const signedIn = computed(() => !!raw.value)\n  const email = computed(() => raw.value?.contacts.email)\n  const firstName = computed(() => raw.value?.contacts.firstName)\n  const lastName = computed(() => raw.value?.contacts.lastName)\n  const name = computed(() =>\n    [firstName.value, lastName.value].filter(Boolean).join(' '),\n  )\n  const initials = computed(() =>\n    firstName.value && lastName.value\n      ? `${firstName.value[0]}${lastName.value[0]}`\n      : '',\n  )\n  const avatarUrl = computed(() => raw.value?.avatarUrl)\n  const profileImg = computed(() => raw.value?.profileImg)\n\n  async function load() {\n    if (!useAuth().isAuthorized) return\n\n    raw.value = (await useGuestWorldApi().user()).data.value ?? undefined\n  }\n\n  return {\n    name,\n    load,\n    email,\n    signedIn,\n    initials,\n    avatarUrl,\n    profileImg,\n  }\n})\n","export function toFormData(data: object): FormData {\n  const formData = new FormData()\n  Object.entries(data)\n    .filter(([, value]) => value !== undefined)\n    .forEach(([key, value]) =>\n      (Array.isArray(value) ? value : [value]).forEach((val) =>\n        formData.append(key, val),\n      ),\n    )\n\n  return formData\n}\n","export default function useWebccApi() {\n  const gaCookie = useCookie('_ga')\n  const gaUserId = computed(() => {\n    return gaCookie.value?.split('.').slice(-2).join('.')\n  })\n\n  async function partner(jwt: string) {\n    return await useFetch<Partner>('/webcc-api/v1/sales/partners', {\n      headers: { jwt },\n    })\n  }\n\n  async function reviews({ region, place, locale, ...params }: Params) {\n    return await useFetch<ReviewsSearchResult>(\n      `/webcc-api/v1/search/${locale ?? '-'}/reviews`,\n      {\n        query: removeFalsy({\n          ...params,\n          region: region && getLegacyGeoCode(region),\n          place: place && getLegacyGeoCode(place),\n        }),\n      },\n    )\n  }\n\n  async function recommendations(\n    context: 'home',\n    params: {\n      'domain-country'?: string\n      currency?: string\n      language?: string\n      season?: Season\n      count?: number\n      user?: string\n    },\n  ) {\n    const query = { ...params, user: params.user ?? gaUserId.value }\n    return await useFetch<PreparedItem[]>(\n      `/webcc-api/v1/recommendations/${context}`,\n      {\n        query,\n        responseType: 'json', // force JSON type due to webcc-api does not set `Content-Type` header?\n      },\n    )\n  }\n\n  async function accommodationImages(code: string, season: Season) {\n    return await useFetch<string[]>(\n      `/webcc-api/v1/accommodations/${code}/images`,\n      { params: { season } },\n    )\n  }\n\n  async function accommodationReviews(code: string) {\n    return $fetch<Rating>(`/webcc-api/v1/accommodations/${code}/reviews`)\n  }\n\n  async function accommodationVacancies(code: string, params: Params) {\n    return await useFetch<Trips>(\n      `/webcc-api/v1/accommodations/${code}/vacancies`,\n      { params },\n    )\n  }\n\n  async function accommodationCheckTrip(code: string, params: Params) {\n    return await useFetch(`/webcc-api/v1/accommodations/${code}/checktrip`, {\n      params,\n    })\n  }\n\n  async function translate(params: ReviewTranslationParams) {\n    return await useFetch<ReviewTranslation>('/webcc-api/v1/translations', {\n      method: 'POST',\n      body: params,\n      headers: { 'Content-Type': 'application/json' },\n    })\n  }\n\n  async function emailsSubscribe(params: EmailsSubscribeParams) {\n    return await useFetch('/webcc-api/v1/forms/newsletter', {\n      method: 'POST',\n      body: toFormData(params),\n    })\n  }\n\n  async function emailsUnsubscribe(params: EmailsUnsubscribeParams) {\n    return await useFetch('/webcc-api/v1/forms/newsletter/unsubscribe', {\n      method: 'PUT',\n      body: toFormData(params),\n    })\n  }\n\n  async function emailsConfirm({ hash, ...params }: EmailsConfirmParams) {\n    return await useFetch(`/webcc-api/v1/forms/emails/${hash}/confirm`, {\n      method: 'POST',\n      body: toFormData(params),\n    })\n  }\n\n  async function emailsOptIn({ hash, ...params }: EmailsOptInParams) {\n    return await useFetch(`/webcc-api/v1/forms/emails/${hash}/optin`, {\n      method: 'POST',\n      body: toFormData(params),\n    })\n  }\n\n  async function personalCatalogCreate(params: PersonalCatalogCreateParams) {\n    return await useFetch('/webcc-api/v1/forms/personalCatalog', {\n      method: 'POST',\n      body: toFormData(params),\n    })\n  }\n\n  async function personalCatalog(id: string) {\n    return await useFetch<string[]>(`/webcc-api/v1/forms/personalCatalog/${id}`)\n  }\n\n  return {\n    partner,\n    reviews,\n    recommendations,\n    accommodationImages,\n    accommodationReviews,\n    accommodationVacancies,\n    accommodationCheckTrip,\n    translate,\n    emailsSubscribe,\n    emailsUnsubscribe,\n    emailsConfirm,\n    emailsOptIn,\n    personalCatalogCreate,\n    personalCatalog,\n  }\n}\n","import zipObject from 'lodash-es/zipObject'\n\ninterface PartnerData {\n  jwt?: string\n  id?: PartnerId\n  extra?: string\n  directEncashment?: boolean\n  language?: string\n  salesoffice?: string\n}\n\ntype PartnerCookies = {\n  jwt?: MaybeRef<string | null | undefined>\n  partner?: MaybeRef<PartnerCookiesPartner | null | undefined>\n}\n\ntype PartnerCookiesPartner = { id?: PartnerId; extra?: string }\n\nexport const usePartnerStore = defineStore('partner', () => {\n  const params = useParams()\n  const cookies = usePartnerCookies()\n\n  const jwt = ref('')\n  const id = ref('')\n  const extra = ref('')\n  const directEncashment = ref(false)\n  const language = ref('')\n  const salesoffice = ref('')\n\n  async function init() {\n    const partner = await getPartner(\n      params.persistent,\n      cookies,\n      useRequestHeaders(),\n    )\n\n    jwt.value = partner.jwt ?? ''\n    id.value = partner.id ?? ''\n    extra.value = partner.extra ?? ''\n    directEncashment.value = partner.directEncashment ?? false\n    language.value = partner.language ?? ''\n    salesoffice.value = partner.salesoffice ?? ''\n\n    cookies.update(partner)\n\n    if (partner.id) params.persist('partnerid', partner.id)\n    if (partner.id && partner.extra)\n      params.persist('partnerextra', partner.extra)\n  }\n\n  return { jwt, id, extra, directEncashment, salesoffice, language, init }\n})\n\nfunction usePartnerCookies() {\n  const options = {\n    secure: true,\n    sameSite: 'none' as const,\n    path: '/',\n    httpOnly: true,\n  }\n\n  const jwt = useCookie('jwt', {\n    ...options,\n    expires: hoursAdd(new Date(), 12),\n  })\n\n  const partner = useCookie<PartnerCookiesPartner | null | undefined>(\n    'partner',\n    {\n      ...options,\n      expires: daysAdd(new Date(), 30),\n      decode: (raw) => zipObject(['id', 'extra'], raw.split('&') ?? []),\n      encode: (value) =>\n        value?.id ? [value.id, value?.extra].filter(Boolean).join('&') : '',\n    },\n  )\n\n  // Sanitizing `partner` cookie\n  const validPartnerId = getPartnerId(partner.value?.id)\n  partner.value = validPartnerId\n    ? { ...partner.value, id: validPartnerId }\n    : undefined\n\n  function update({ jwt: _jwt, id, extra }: PartnerData) {\n    if (_jwt) jwt.value = _jwt\n    else if (id) partner.value = { id, extra }\n  }\n\n  return { jwt, partner, update }\n}\n\n/**\n * Gets partner data by checking it in order:\n * 1. JWT\n * 2. URL Parameters\n * 3. Referrer\n * 4. Cookie\n *\n * @see https://jira.migros.net/browse/HHDWEBCC-4617\n */\nasync function getPartner(\n  params: PlainParams,\n  cookies: PartnerCookies,\n  headers: Record<string, string>,\n): Promise<PartnerData> {\n  const jwt = toValue(cookies.jwt) || params.jwt?.toString()\n\n  if (jwt) return await getPartnerFromJwt(jwt)\n\n  const [id, extra] = [params.partnerid, params.partnerextra].map(\n    (value) => value?.toString() || undefined,\n  )\n  const partner = { id, extra }\n  if (!partner.id || !PARTNER_ID_WHITELIST.has(partner.id)) {\n    partner.id = getPartnerIdForReferrer(headers.referer) ?? partner.id\n  }\n\n  return partner.id ? partner : (toValue(cookies.partner) ?? {})\n}\n\nasync function getPartnerFromJwt(jwt: string) {\n  const { data } = await useWebccApi().partner(jwt)\n\n  return { ...(data.value ?? {}), jwt }\n}\n\nfunction getPartnerIdForReferrer(referrer: string): string | undefined {\n  if (!referrer) return\n\n  return Object.entries({\n    IH1000116: ['google.'],\n    IH1000117: [\n      'bing.',\n      'ecosia.org',\n      'duckduckgo.',\n      'yahoo.',\n      'baidu.',\n      'seznam.',\n      'qwant.com',\n      'yandex.',\n    ],\n  }).find(([, substrings]) =>\n    substrings.some((substring) => referrer.includes(substring)),\n  )?.[0]\n}\n\n/**\n * @see https://jira.migros.net/browse/HHDWEBCC-4679\n */\nconst PARTNER_ID_WHITELIST: ReadonlySet<string> = new Set([\n  'IH1000019',\n  'IH1000020',\n  'IH1000021',\n  'IH1000022',\n  'IH1000023',\n  'IH1000024',\n  'IH1000025',\n  'IH1000026',\n  'IH1000027',\n  'IH1000028',\n  'IH1000029',\n  'IH1000030',\n  'IH1000031',\n  'IH1000032',\n  'IH1000033',\n  'IH1000034',\n  'IH1000035',\n  'IH1000036',\n  'IH1000223',\n  'IH1000229',\n  'CH1001778',\n])\n","import type { Handlers } from '~/resources/tracking'\n\nexport const useTrackingStore = defineStore('tracking', () => {\n  const params = useParams()\n  const config = useRuntimeConfig()\n  const consent = useConsent()\n  const { gtag } = useGtag()\n\n  const options = ref<{\n    handlers?: Record<string, Function>\n    disabled?: boolean\n    gtmID?: string\n  }>({})\n  const handlers = ref<Handlers>()\n\n  function init(h: Handlers, pageloadHandler: Function) {\n    if (import.meta.server) {\n      return\n    }\n\n    window.dataLayer = window.dataLayer || []\n\n    handlers.value = h\n\n    options.value = { ...config.public.tracking, h }\n\n    trackPageLoad(pageloadHandler(config.public.tracking.gtmID))\n\n    if (consent) {\n      const initialConsent = consent.consent\n      if (initialConsent) {\n        trackConsentDefault(initialConsent)\n      }\n    }\n\n    if (\n      !options.value.disabled &&\n      params.all.tracking !== false &&\n      options.value.gtmID\n    ) {\n      loadGTM(options.value.gtmID)\n    }\n  }\n\n  function send(\n    element:\n      | TrackingElement\n      | TrackingElement[]\n      | Record<string, unknown>\n      | Record<string, unknown>[],\n  ) {\n    if (!Array.isArray(element)) {\n      element = [element]\n    }\n    ;(element as Array<Record<string, unknown>>).forEach((e) => {\n      if (window.dataLayer && !options.value.disabled) {\n        window.dataLayer.push(e)\n      }\n    })\n  }\n\n  function trackPageLoad(event: Pagedata) {\n    const pageLoadEvents = window.dataLayer.filter((e) => isPageLoadEvent(e))\n\n    if (pageLoadEvents.length) {\n      // Tracking the page is loaded only when the route changes\n      if (pageLoadEvents.at(-1)?.page.virtPath === event.page.virtPath) return\n      window.dataLayer.push(event as unknown as Record<string, unknown>)\n    } else {\n      // The first page view event should have `event: undefined` instead of `event: 'page_view'`.\n      // See https://jira.migros.net/browse/IHGWEBCC-1145\n      window.dataLayer.push({ ...event, event: undefined })\n    }\n  }\n\n  function isPageLoadEvent(item: unknown): item is Pagedata {\n    return (\n      !!item &&\n      typeof item === 'object' &&\n      'page' in item &&\n      'event' in item &&\n      [undefined, 'page_view'].includes(item.event?.toString())\n    )\n  }\n\n  function trackConsentDefault(consent: Consent) {\n    // Tracking user consent only once at page load\n    if (\n      !window.dataLayer.some((item) => item.consentStatistics !== undefined)\n    ) {\n      window.dataLayer.push(createConsentEventData(consent))\n    }\n\n    // Tracking consent defaults only once at page load\n    if (\n      !window.dataLayer.some(\n        (item) => item[0] === 'consent' && item[1] === 'default',\n      )\n    ) {\n      gtag('consent', 'default', createConsentDetailedEventData(consent))\n    }\n  }\n\n  function trackConsentUpdate(consent: Consent) {\n    window.dataLayer.push({\n      event: 'user consent',\n      ...createConsentEventData(consent),\n    })\n\n    gtag('consent', 'update', createConsentDetailedEventData(consent))\n    if (!consent.statistics) {\n      gtag('set', 'url_passthrough', true)\n    }\n  }\n\n  return { handlers, init, send, trackConsentUpdate }\n})\n\nfunction useGtag() {\n  return {\n    gtag:\n      window?.gtag ??\n      /**\n       * Define the `gtag` function in case `gtm.js` is not loaded yet and `window.gtag` is unavailable.\n       * @see https://developers.google.com/tag-platform/security/guides/consent?consentmode=advanced#tag-manager_3\n       */\n      function gtag() {\n        // eslint-disable-next-line prefer-rest-params\n        window.dataLayer?.push(arguments as unknown as Record<string, unknown>)\n      },\n  }\n}\n\nfunction loadGTM(gtmID: string) {\n  window.dataLayer.push({\n    event: 'gtm.js',\n    'gtm.start': new Date().getTime(),\n    eventCallback(id: string) {\n      if (id === gtmID && window.gaGlobal) {\n        // Only set client id in projects that need it\n        if (useIDs().client !== undefined) {\n          useIDs().client = window.gaGlobal.vid\n        }\n      }\n    },\n  })\n\n  const script = document.createElement('script')\n  script.async = true\n  script.src = `https://www.googletagmanager.com/gtm.js?id=${gtmID}`\n  document.body.appendChild(script)\n}\n\nfunction createConsentEventData({ other, statistics }: Consent) {\n  return {\n    consentStatistics: statistics,\n    consentRetargeting: other,\n  }\n}\n\nfunction createConsentDetailedEventData({ other, statistics }: Consent) {\n  return {\n    ad_user_data: other ? 'granted' : 'denied',\n    ad_personalization: other ? 'granted' : 'denied',\n    ad_storage: other ? 'granted' : 'denied',\n    analytics_storage: statistics ? 'granted' : 'denied',\n  }\n}\n","export function isFreeCancellation({ percent }: CancelCondition): boolean {\n  return percent === 0\n}\n\nexport function getFreeCancellationRange(\n  conditions: CancelCondition[],\n): number {\n  return conditions.find(isFreeCancellation)?.to ?? 0\n}\n","export default function useConfApi() {\n  async function page(url: URL, params?: Params) {\n    return await useFetch<ConfAPIPagesResponse>(\n      `/conf-api/v1/pages/${getUrlWithoutProtocol(url)}`,\n      { params },\n    )\n  }\n\n  return { page }\n}\n","import type { RouteLocationNormalized } from 'vue-router'\nimport { withQuery } from 'ufo'\nimport type { FetchError } from 'ofetch'\n\nexport const useConfdataStore = defineStore('confdata', () => {\n  const l10n = useL10N()\n  const globalParams = useParams()\n\n  const currentUrl = ref<string>()\n  const raw: Ref<ConfAPIPagesResponse | null> = ref(null)\n  const company = ref('ih') // @TODO remove\n  const domain: Ref<Domain> = computed(() => raw.value?.conf?.domain as Domain)\n  const domainInEnvironment: Ref<string> = computed(\n    () => raw.value?.conf?.domainInEnvironment as string,\n  )\n\n  const announcements: Ref<Announcement[]> = computed(\n    () => raw.value?.conf?.announcements ?? [],\n  )\n  const baseData = computed(() => raw.value?.baseData)\n  const currencies = computed(() => raw.value?.conf?.currencies)\n  const currency = computed(\n    () => globalParams.currency || raw.value?.conf?.currencies[0] || 'EUR',\n  )\n  const pagetype = computed(() => raw.value?.pagetype)\n  const previousPagetype = ref(pagetype.value)\n  const salesoffice = computed(() => raw.value?.conf?.salesoffice)\n  const siteSettings = computed(() => raw.value?.conf?.settings)\n  const paymentForms = computed(() => raw.value?.conf?.salesoffice.paymentForms)\n  const siteCode = computed(() => raw.value?.conf?.siteCode)\n\n  const header = computed(() => raw.value?.conf?.header)\n  const footer = computed(() => raw.value?.conf?.footer)\n  const links = computed(() => raw.value?.conf?.links)\n  const additionalBody = computed(() => raw.value?.additionalBody ?? {})\n  const page = computed(() => raw.value?.page)\n  const body = computed(() => raw.value?.page.body)\n  const seoLinks = computed(() => raw.value?.seoLinks)\n\n  const translations = computed(() => raw.value?.translations)\n  const languagePrefix = computed(() => raw.value?.languageprefix)\n  const locale = computed(() => raw.value?.locale)\n  const language = computed(() => raw.value?.language)\n  const domainsCountryCode = computed(() => raw.value?.conf?.domainsCountryCode)\n  const destination = computed(\n    () => (raw.value?.destination ?? {}) as Destination,\n  )\n  const sites = computed(() => raw.value?.conf?.sites ?? [])\n  const logoCaption = computed(() => raw.value?.conf?.logoCaption)\n  const pageID = computed(() => raw.value?.pageID)\n  const prefixSearchpage = computed(() => raw.value?.conf?.prefixSearchpage)\n  const prefixReviewspage = computed(() => raw.value?.conf?.prefixReviewspage)\n  const bodyComponentsByName = computed(() => {\n    const components = {} as { [key: string]: Block }\n    body.value?.forEach((component) => {\n      components[component.component] = component\n    })\n    return components\n  })\n\n  const signupEnabled = computed(\n    () =>\n      !useRuntimeConfig().public.signup.disabledDomains.some((domain) =>\n        siteCode.value?.includes(domain),\n      ),\n  )\n  const cancelConditions = computed(\n    () => (additionalBody.value as SearchPageBody)?.cancelConditions ?? [],\n  )\n  const freeCancellationRange = computed(() =>\n    getFreeCancellationRange(cancelConditions.value),\n  )\n\n  const head = computed(() => {\n    if (!page.value || !seoLinks.value) return undefined\n\n    const { meta, title, description } = page.value\n    const image = meta.image || `/logos/interhome.svg`\n    const viewport = `width=device-width, initial-scale=1${useUseragent().useragent?.browser.name === 'Safari' ? ', maximum-scale=1' : ''}`\n    const canonical = {\n      rel: seoLinks.value.canonical.rel,\n      href: new URL(seoLinks.value.canonical.href).toString(),\n    }\n    const ogURL = meta.url ?? canonical.href\n    const additional = meta.additional?.ogurl ? {} : (meta.additional ?? {})\n\n    return {\n      title,\n      meta: [\n        { charset: 'utf-8' },\n        { name: 'viewport', content: viewport },\n        { name: 'robots', content: page.value.robots, hid: 'robots' },\n        { name: 'language', content: locale.value },\n        { hid: 'description', name: 'description', content: description },\n        { hid: 'og:image', property: 'og:image', content: image },\n        { hid: 'og:title', property: 'og:title', content: title },\n        {\n          hid: 'og:description',\n          property: 'og:description',\n          content: description,\n        },\n        { hid: 'og:type', property: 'og:type', content: meta.type },\n        { hid: 'og:url', property: 'og:url', content: ogURL },\n        { hid: 'og:locale', property: 'og:locale', content: locale.value },\n        ...Object.entries(additional).map(([key, value]) => ({\n          hid: key,\n          property: key,\n          content: value?.toString(),\n        })),\n      ],\n      link: [\n        { rel: 'preconnect', href: 'https://www.google-analytics.com' },\n        { rel: 'preconnect', href: 'https://www.googletagmanager.com' },\n        { rel: 'preconnect', href: 'https://cdn.trkkn.com' },\n        { rel: 'preconnect', href: 'https://webcc.interhome.group' },\n        { rel: 'icon', type: 'image/x-icon', href: `/interhome/favicon.ico` },\n        {\n          rel: 'apple-touch-icon',\n          sizes: '180*180',\n          href: `/interhome/apple-touch-icon.png`,\n        },\n        {\n          rel: 'icon',\n          type: 'image/png',\n          sizes: '32*32',\n          href: `/interhome/favicon-32x32.png`,\n        },\n        {\n          rel: 'icon',\n          type: 'image/png',\n          sizes: '16*16',\n          href: `/interhome/favicon-16x16.png`,\n        },\n        {\n          rel: 'shortcut icon',\n          sizes: '16*16',\n          href: `/interhome/favicon-16x16.png`,\n        },\n        // { rel: 'manifest', href: `/${company}/manifest.json` },\n        { rel: 'mask-icon', href: `/interhome/safari-pinned-tab.svg` },\n        canonical,\n        ...seoLinks.value.alternates,\n      ],\n    }\n  })\n\n  async function load(\n    to?: RouteLocationNormalized,\n    existingData?: ConfAPIPagesResponse,\n  ) {\n    const url = to\n      ? new URL(to.fullPath, useRequestURL().origin)\n      : useRequestURL()\n\n    if (url.toString() === currentUrl.value) return\n\n    currentUrl.value = url.toString()\n\n    // Keep `partnerid` to get the correct cancellation conditions, otherwise the default conditions will be returned.\n    const params: Params = { partnerid: usePartner().id || undefined }\n\n    // Language will be handled for redirection\n    const query = Object.fromEntries(url.searchParams)\n    url.searchParams.delete('language')\n\n    let data = ref<ConfAPIPagesResponse | null>(existingData || null)\n    let error: Ref<FetchError<unknown> | null> = ref(null)\n\n    if (!data) {\n      const { data: requestData, error: requestError } =\n        await useConfApi().page(url, params)\n      data = requestData\n      error = requestError\n    }\n\n    if (error.value) return error.value\n\n    if (data.value?.pagetype === 'redirect') return data.value.body\n\n    // record previous page type before updating raw.value, to catch page type change on transitions guards\n    previousPagetype.value = pagetype.value\n\n    if (data.value?.pagetype === 'search') {\n      if (!(data.value.additionalBody as SearchPageBody).searchfilterconfs) {\n        ;(data.value.additionalBody as SearchPageBody).searchfilterconfs = (\n          additionalBody.value as SearchPageBody\n        ).searchfilterconfs\n      }\n      raw.value = data.value && { ...raw.value, ...data.value }\n    } else {\n      raw.value = data.value ?? null\n    }\n\n    const pageTranslations = raw.value?.translations\n\n    // update translations on confData load\n    if (pageTranslations) {\n      l10n.setPageTranslations(\n        pageTranslations,\n        raw.value!.locale,\n        raw.value!.language,\n      )\n    }\n\n    if (query.language && query.language !== data.value?.language) {\n      const newPath =\n        getLocalizedUrl(query.language) ??\n        getLocalizedUrl(sites.value[0]?.language) ??\n        ''\n      const newQuery = { ...query, language: undefined }\n      return { location: withQuery(newPath, newQuery) }\n    }\n  }\n\n  function getLocalizedUrl(lang: string) {\n    const localeUrl =\n      footer.value?.localeURLs[company.value + domainsCountryCode.value + lang]\n\n    return localeUrl ? getUrlFullPath(localeUrl) : undefined\n  }\n\n  function isCanonicalPage(url: URL) {\n    const canonicalUrl = seoLinks.value?.canonical.href\n    // Ignore `partnerid` param detecting canonical page because the partnerid is just an info within in the url and\n    // should not affect the canonical page detection.\n    return (\n      !!canonicalUrl &&\n      getUrlFullPath(removeUrlParams(url, 'partnerid')) ===\n        getUrlFullPath(canonicalUrl)\n    )\n  }\n\n  return {\n    load,\n    getLocalizedUrl,\n    isCanonicalPage,\n    raw,\n    baseData,\n    domain,\n    domainInEnvironment,\n    currencies,\n    currency,\n    pagetype,\n    previousPagetype,\n    salesoffice,\n    siteSettings,\n    paymentForms,\n    siteCode,\n    header,\n    footer,\n    links,\n    additionalBody,\n    page,\n    body,\n    seoLinks,\n    translations,\n    languagePrefix,\n    locale,\n    language,\n    domainsCountryCode,\n    destination,\n    sites,\n    logoCaption,\n    pageID,\n    prefixSearchpage,\n    prefixReviewspage,\n    bodyComponentsByName,\n    signupEnabled,\n    cancelConditions,\n    freeCancellationRange,\n    head,\n    announcements,\n  }\n})\n","import { nanoid } from 'nanoid'\n\nexport const useABStore = defineStore('ab', () => {\n  const params = useParams()\n  const confData = useConfdata()\n  const useragent = useUseragent()\n\n  const allABs: Ref<AB[]> = ref([])\n  const sessionStorageKeys = { flexibleDateSearch: 'flexible-search' } as {\n    [key: string]: string\n  }\n\n  function isActive(key: string) {\n    return allABs.value.find((ab) => ab.key === key)?.active\n  }\n\n  function toggle(key: string, value: boolean) {\n    allABs.value = allABs.value.map((ab) => {\n      if (ab.key === key) ab.active = value\n      if (Object.keys(sessionStorageKeys).includes(key)) {\n        window.sessionStorage.setItem(sessionStorageKeys[key], value.toString())\n      }\n      return ab\n    })\n  }\n\n  function init(tests: AB[]) {\n    const testsFromQuery = Object.fromEntries(\n      (params.all.ab?.toString().split(',') || []).map((entry) => {\n        const [key, value] = entry.split(':')\n        return [key, value !== 'false']\n      }),\n    )\n\n    if (!confData.domain)\n      console.warn(\n        'AB-tests are initialized with no domain information in conf response. Assuming single domain application.',\n      )\n    if (!useragent.useragent?.device)\n      console.error(\n        'AB-tests are initialized with no browser information. Ignoring device based restrictions.',\n      )\n\n    allABs.value = tests.map((test) => {\n      if (test.key in testsFromQuery)\n        return createAB(test, testsFromQuery[test.key])\n\n      const validDomain =\n        !confData.domain ||\n        test.domains[0] === '*' ||\n        test.domains.includes(confData.domain)\n      const validDevice =\n        !useragent.useragent?.device ||\n        test.devices[useragent.useragent!.device]\n\n      if (!validDomain || !validDevice) return createAB(test, test.default)\n\n      if (!useIDs().user)\n        console.error(\n          'No user ID found, substituting random non-persistent value.',\n        )\n\n      const numericalId = useIDs().user\n        ? stringToNumber(useIDs().user + test.key)\n        : nanoid()\n      const weightedVariants = Object.entries(test.variants).flatMap(\n        ([value, count]) => Array(count).fill(value === 'true'),\n      )\n      const active = weightedVariants[+numericalId % weightedVariants.length]\n\n      return createAB(test, active)\n    })\n  }\n\n  return { all: allABs, toggle, isActive, init }\n})\n\nfunction createAB(test: AB, active: boolean): AB {\n  return { ...test, active, value: active.toString() }\n}\n\nfunction stringToNumber(string: string) {\n  // Create a byte-array representation from the given string\n  const buffer = Buffer.from(string, 'utf8')\n\n  // Add up all the array values\n  return buffer.reduce((prev, curr) => {\n    return (prev += curr)\n  }, 0)\n}\n","import { skipHydrate } from 'pinia'\n\nconst STORAGE_KEY = 'bookmarks'\n\nexport const useBookmarksStore = defineStore('bookmarks', () => {\n  const raw: Ref<string[]> = useLocalStorage(STORAGE_KEY, [])\n  const catalog: Ref<string[] | null> = ref(null)\n\n  const ids = reactive(new Set(raw.value))\n\n  watch(ids, (collection) => {\n    raw.value = [...collection]\n  })\n\n  const count = computed(() => ids.size)\n\n  function has(id: string) {\n    return ids.has(id)\n  }\n\n  function add(id: string) {\n    ids.add(id)\n  }\n\n  function remove(id: string) {\n    ids.delete(id)\n  }\n\n  function toggle(id: string) {\n    if (has(id)) {\n      remove(id)\n    } else {\n      add(id)\n    }\n  }\n\n  function append(accommCodes: string[]) {\n    accommCodes.forEach((code) => ids.add(code))\n  }\n\n  function clear() {\n    ids.clear()\n  }\n\n  async function createPersonalCatalog(\n    params: Omit<\n      PersonalCatalogCreateParams,\n      'language' | 'salesoffice' | 'url' | 'parameters'\n    >,\n  ) {\n    const partner = usePartner()\n    const { language, salesoffice } = useConfdata()\n\n    return await useWebccApi().personalCatalogCreate({\n      language: language!,\n      salesoffice: salesoffice?.code,\n      url: useRequestURL().toString(),\n      ...params,\n      parameters: Object.entries({\n        PartnerId: partner.id || undefined,\n        retailerMode: partner.id && partner.jwt ? 'T1' : '06',\n      })\n        .filter(([, value]) => value)\n        .map(([key, value]) => `${key}=${value}`),\n    })\n  }\n\n  async function loadPersonalCatalog(id: string) {\n    catalog.value = (await useWebccApi().personalCatalog(id)).data.value\n  }\n\n  return {\n    raw: skipHydrate(raw),\n    count,\n    catalog,\n    add,\n    remove,\n    toggle,\n    clear,\n    append,\n    has,\n    loadPersonalCatalog,\n    createPersonalCatalog,\n  }\n})\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n    const str = toString.call(thing);\n    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (kindOf(val) !== 'object') {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n  let kind;\n  return thing && (\n    (typeof FormData === 'function' && thing instanceof FormData) || (\n      isFunction(thing.append) && (\n        (kind = kindOf(thing)) === 'formdata' ||\n        // detect form-data instance\n        (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n      )\n    )\n  )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n  str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  let i;\n  let l;\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\nfunction findKey(obj, key) {\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== \"undefined\") return globalThis;\n  return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  const {caseless} = isContextDefined(this) && this || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    const targetKey = caseless && findKey(result, key) || key;\n    if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n      result[targetKey] = merge(result[targetKey], val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else {\n      result[targetKey] = val;\n    }\n  }\n\n  for (let i = 0, l = arguments.length; i < l; i++) {\n    arguments[i] && forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n  forEach(b, (val, key) => {\n    if (thisArg && isFunction(val)) {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  }, {allOwnKeys});\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  constructor.prototype.constructor = constructor;\n  Object.defineProperty(constructor, 'super', {\n    value: superConstructor.prototype\n  });\n  props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n  // eslint-disable-next-line func-names\n  return thing => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[Symbol.iterator];\n\n  const iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n    function replacer(m, p1, p2) {\n      return p1.toUpperCase() + p2;\n    }\n  );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if ('writable' in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n      };\n    }\n  });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach(value => {\n      obj[value] = true;\n    });\n  }\n\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n  DIGIT,\n  ALPHA,\n  ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n  let str = '';\n  const {length} = alphabet;\n  while (size--) {\n    str += alphabet[Math.random() * length|0]\n  }\n\n  return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n  const stack = new Array(10);\n\n  const visit = (source, i) => {\n\n    if (isObject(source)) {\n      if (stack.indexOf(source) >= 0) {\n        return;\n      }\n\n      if(!('toJSON' in source)) {\n        stack[i] = source;\n        const target = isArray(source) ? [] : {};\n\n        forEach(source, (value, key) => {\n          const reducedValue = visit(value, i + 1);\n          !isUndefined(reducedValue) && (target[key] = reducedValue);\n        });\n\n        stack[i] = undefined;\n\n        return target;\n      }\n    }\n\n    return source;\n  }\n\n  return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n  thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n\n  return postMessageSupported ? ((token, callbacks) => {\n    _global.addEventListener(\"message\", ({source, data}) => {\n      if (source === _global && data === token) {\n        callbacks.length && callbacks.shift()();\n      }\n    }, false);\n\n    return (cb) => {\n      callbacks.push(cb);\n      _global.postMessage(token, \"*\");\n    }\n  })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n  typeof setImmediate === 'function',\n  isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n  queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  ALPHABET,\n  generateString,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n  Error.call(this);\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, this.constructor);\n  } else {\n    this.stack = (new Error()).stack;\n  }\n\n  this.message = message;\n  this.name = 'AxiosError';\n  code && (this.code = code);\n  config && (this.config = config);\n  request && (this.request = request);\n  if (response) {\n    this.response = response;\n    this.status = response.status ? response.status : null;\n  }\n}\n\nutils.inherits(AxiosError, Error, {\n  toJSON: function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: utils.toJSONObject(this.config),\n      code: this.code,\n      status: this.status\n    };\n  }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n  'ERR_BAD_OPTION_VALUE',\n  'ERR_BAD_OPTION',\n  'ECONNABORTED',\n  'ETIMEDOUT',\n  'ERR_NETWORK',\n  'ERR_FR_TOO_MANY_REDIRECTS',\n  'ERR_DEPRECATED',\n  'ERR_BAD_RESPONSE',\n  'ERR_BAD_REQUEST',\n  'ERR_CANCELED',\n  'ERR_NOT_SUPPORT',\n  'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n  descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n  const axiosError = Object.create(prototype);\n\n  utils.toFlatObject(error, axiosError, function filter(obj) {\n    return obj !== Error.prototype;\n  }, prop => {\n    return prop !== 'isAxiosError';\n  });\n\n  AxiosError.call(axiosError, error.message, code, config, request, response);\n\n  axiosError.cause = error;\n\n  axiosError.name = error.name;\n\n  customProps && Object.assign(axiosError, customProps);\n\n  return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path.concat(key).map(function each(token, i) {\n    // eslint-disable-next-line no-param-reassign\n    token = removeBrackets(token);\n    return !dots && i ? '[' + token + ']' : token;\n  }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  // eslint-disable-next-line no-param-reassign\n  options = utils.toFlatObject(options, {\n    metaTokens: true,\n    dots: false,\n    indexes: false\n  }, false, function defined(option, source) {\n    // eslint-disable-next-line no-eq-null,eqeqeq\n    return !utils.isUndefined(source[option]);\n  });\n\n  const metaTokens = options.metaTokens;\n  // eslint-disable-next-line no-use-before-define\n  const visitor = options.visitor || defaultVisitor;\n  const dots = options.dots;\n  const indexes = options.indexes;\n  const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = JSON.stringify(value);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n        )) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) && formData.append(\n            // eslint-disable-next-line no-nested-ternary\n            indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n            convertValue(el)\n          );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const stack = [];\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable\n  });\n\n  function build(value, path) {\n    if (utils.isUndefined(value)) return;\n\n    if (stack.indexOf(value) !== -1) {\n      throw Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n        formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n      );\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key]);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n    '%00': '\\x00'\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder ? function(value) {\n    return encoder.call(this, value, encode);\n  } : encode;\n\n  return this._pairs.map(function each(pair) {\n    return _encode(pair[0]) + '=' + _encode(pair[1]);\n  }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n  \n  const _encode = options && options.encode || encode;\n\n  const serializeFn = options && options.serialize;\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params) ?\n      params.toString() :\n      new AxiosURLSearchParams(params, options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf(\"#\");\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n  constructor() {\n    this.handlers = [];\n  }\n\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    this.handlers.push({\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null\n    });\n    return this.handlers.length - 1;\n  }\n\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n   */\n  eject(id) {\n    if (this.handlers[id]) {\n      this.handlers[id] = null;\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n    }\n  }\n\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    utils.forEach(this.handlers, function forEachHandler(h) {\n      if (h !== null) {\n        fn(h);\n      }\n    });\n  }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n  isBrowser: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob\n  },\n  protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n  (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  _navigator as navigator,\n  origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n    visitor: function(value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    }\n  }, options));\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z]\n  // foo.x.y.z\n  // foo-x-y-z\n  // foo x y z\n  return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n    return match[0] === '[]' ? '' : match[1] || match[0];\n  });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!target[name] || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [function transformRequest(data, headers) {\n    const contentType = headers.getContentType() || '';\n    const hasJSONContentType = contentType.indexOf('application/json') > -1;\n    const isObjectPayload = utils.isObject(data);\n\n    if (isObjectPayload && utils.isHTMLForm(data)) {\n      data = new FormData(data);\n    }\n\n    const isFormData = utils.isFormData(data);\n\n    if (isFormData) {\n      return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n    }\n\n    if (utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data) ||\n      utils.isReadableStream(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n      return data.toString();\n    }\n\n    let isFileList;\n\n    if (isObjectPayload) {\n      if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n        return toURLEncodedForm(data, this.formSerializer).toString();\n      }\n\n      if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n        const _FormData = this.env && this.env.FormData;\n\n        return toFormData(\n          isFileList ? {'files[]': data} : data,\n          _FormData && new _FormData(),\n          this.formSerializer\n        );\n      }\n    }\n\n    if (isObjectPayload || hasJSONContentType ) {\n      headers.setContentType('application/json', false);\n      return stringifySafely(data);\n    }\n\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    const transitional = this.transitional || defaults.transitional;\n    const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    const JSONRequested = this.responseType === 'json';\n\n    if (utils.isResponse(data) || utils.isReadableStream(data)) {\n      return data;\n    }\n\n    if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n      const silentJSONParsing = transitional && transitional.silentJSONParsing;\n      const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*',\n      'Content-Type': undefined\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n    i = line.indexOf(':');\n    key = line.substring(0, i).trim().toLowerCase();\n    val = line.substring(i + 1).trim();\n\n    if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n      return;\n    }\n\n    if (key === 'set-cookie') {\n      if (parsed[key]) {\n        parsed[key].push(val);\n      } else {\n        parsed[key] = [val];\n      }\n    } else {\n      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header.trim()\n    .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach(methodName => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      value: function(arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        throw new Error('header name must be a non-empty string');\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite)\n    } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isHeaders(header)) {\n      for (const [key, value] of header.entries()) {\n        setHeader(value, key, rewrite);\n      }\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals = this[$internals] = (this[$internals] = {\n      accessors: {}\n    });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    }\n  }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n  this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n  __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n      response.config,\n      response.request,\n      response\n    ));\n  }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1000 / freq;\n  let lastArgs;\n  let timer;\n\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn.apply(null, args);\n  }\n\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if ( passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs)\n        }, threshold - passed);\n      }\n    }\n  }\n\n  const flush = () => lastArgs && invoke(lastArgs);\n\n  return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle(e => {\n    const loaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const progressBytes = loaded - bytesNotified;\n    const rate = _speedometer(progressBytes);\n    const inRange = loaded <= total;\n\n    bytesNotified = loaded;\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? (loaded / total) : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? 'download' : 'upload']: true\n    };\n\n    listener(data);\n  }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n\n  return [(loaded) => throttled[0]({\n    lengthComputable,\n    total,\n    loaded\n  }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n  (function standardBrowserEnv() {\n    const msie = platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent);\n    const urlParsingNode = document.createElement('a');\n    let originURL;\n\n    /**\n    * Parse a URL to discover its components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n    function resolveURL(url) {\n      let href = url;\n\n      if (msie) {\n        // IE needs attribute set twice to normalize properties\n        urlParsingNode.setAttribute('href', href);\n        href = urlParsingNode.href;\n      }\n\n      urlParsingNode.setAttribute('href', href);\n\n      // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n      return {\n        href: urlParsingNode.href,\n        protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n        host: urlParsingNode.host,\n        search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n        hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n        hostname: urlParsingNode.hostname,\n        port: urlParsingNode.port,\n        pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n          urlParsingNode.pathname :\n          '/' + urlParsingNode.pathname\n      };\n    }\n\n    originURL = resolveURL(window.location.href);\n\n    /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n    return function isURLSameOrigin(requestURL) {\n      const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n      return (parsed.protocol === originURL.protocol &&\n          parsed.host === originURL.host);\n    };\n  })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n  (function nonStandardBrowserEnv() {\n    return function isURLSameOrigin() {\n      return true;\n    };\n  })();\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n  // Standard browser envs support document.cookie\n  {\n    write(name, value, expires, path, domain, secure) {\n      const cookie = [name + '=' + encodeURIComponent(value)];\n\n      utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n      utils.isString(path) && cookie.push('path=' + path);\n\n      utils.isString(domain) && cookie.push('domain=' + domain);\n\n      secure === true && cookie.push('secure');\n\n      document.cookie = cookie.join('; ');\n    },\n\n    read(name) {\n      const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n      return (match ? decodeURIComponent(match[3]) : null);\n    },\n\n    remove(name) {\n      this.write(name, '', Date.now() - 86400000);\n    }\n  }\n\n  :\n\n  // Non-standard browser env (web workers, react-native) lack needed support.\n  {\n    write() {},\n    read() {\n      return null;\n    },\n    remove() {}\n  };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n  if (baseURL && !isAbsoluteURL(requestedURL)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  const config = {};\n\n  function getMergedValue(target, source, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({caseless}, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(a, b, caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (prop in config2) {\n      return getMergedValue(a, b);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n  };\n\n  utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n    const merge = mergeMap[prop] || mergeDeepProperties;\n    const configValue = merge(config1[prop], config2[prop], prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n  const newConfig = mergeConfig({}, config);\n\n  let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n  // HTTP basic authentication\n  if (auth) {\n    headers.set('Authorization', 'Basic ' +\n      btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n    );\n  }\n\n  let contentType;\n\n  if (utils.isFormData(data)) {\n    if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n      headers.setContentType(undefined); // Let the browser set it\n    } else if ((contentType = headers.getContentType()) !== false) {\n      // fix semicolon duplication issue for ReactNative FormData implementation\n      const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n      headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n    }\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\n  if (platform.hasStandardBrowserEnv) {\n    withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n    if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n      // Add xsrf header\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    const _config = resolveConfig(config);\n    let requestData = _config.data;\n    const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n    let {responseType, onUploadProgress, onDownloadProgress} = _config;\n    let onCanceled;\n    let uploadThrottled, downloadThrottled;\n    let flushUpload, flushDownload;\n\n    function done() {\n      flushUpload && flushUpload(); // flush events\n      flushDownload && flushDownload(); // flush events\n\n      _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n      _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n    }\n\n    let request = new XMLHttpRequest();\n\n    request.open(_config.method.toUpperCase(), _config.url, true);\n\n    // Set the request timeout in MS\n    request.timeout = _config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      const responseHeaders = AxiosHeaders.from(\n        'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n      );\n      const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n        request.responseText : request.response;\n      const response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config,\n        request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n      const transitional = _config.transitional || transitionalDefaults;\n      if (_config.timeoutErrorMessage) {\n        timeoutErrorMessage = _config.timeoutErrorMessage;\n      }\n      reject(new AxiosError(\n        timeoutErrorMessage,\n        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n        config,\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Remove Content-Type if data is undefined\n    requestData === undefined && requestHeaders.setContentType(null);\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n        request.setRequestHeader(key, val);\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(_config.withCredentials)) {\n      request.withCredentials = !!_config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = _config.responseType;\n    }\n\n    // Handle progress if needed\n    if (onDownloadProgress) {\n      ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n      request.addEventListener('progress', downloadThrottled);\n    }\n\n    // Not all browsers support upload events\n    if (onUploadProgress && request.upload) {\n      ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n      request.upload.addEventListener('progress', uploadThrottled);\n\n      request.upload.addEventListener('loadend', flushUpload);\n    }\n\n    if (_config.cancelToken || _config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = cancel => {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n        request.abort();\n        request = null;\n      };\n\n      _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n      if (_config.signal) {\n        _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    const protocol = parseProtocol(_config.url);\n\n    if (protocol && platform.protocols.indexOf(protocol) === -1) {\n      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n      return;\n    }\n\n\n    // Send the request\n    request.send(requestData || null);\n  });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n  const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n  if (timeout || length) {\n    let controller = new AbortController();\n\n    let aborted;\n\n    const onabort = function (reason) {\n      if (!aborted) {\n        aborted = true;\n        unsubscribe();\n        const err = reason instanceof Error ? reason : this.reason;\n        controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n      }\n    }\n\n    let timer = timeout && setTimeout(() => {\n      timer = null;\n      onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n    }, timeout)\n\n    const unsubscribe = () => {\n      if (signals) {\n        timer && clearTimeout(timer);\n        timer = null;\n        signals.forEach(signal => {\n          signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n        });\n        signals = null;\n      }\n    }\n\n    signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n    const {signal} = controller;\n\n    signal.unsubscribe = () => utils.asap(unsubscribe);\n\n    return signal;\n  }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n}\n\nconst readStream = async function* (stream) {\n  if (stream[Symbol.asyncIterator]) {\n    yield* stream;\n    return;\n  }\n\n  const reader = stream.getReader();\n  try {\n    for (;;) {\n      const {done, value} = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n  const iterator = readBytes(stream, chunkSize);\n\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  }\n\n  return new ReadableStream({\n    async pull(controller) {\n      try {\n        const {done, value} = await iterator.next();\n\n        if (done) {\n         _onFinish();\n          controller.close();\n          return;\n        }\n\n        let len = value.byteLength;\n        if (onProgress) {\n          let loadedBytes = bytes += len;\n          onProgress(loadedBytes);\n        }\n        controller.enqueue(new Uint8Array(value));\n      } catch (err) {\n        _onFinish(err);\n        throw err;\n      }\n    },\n    cancel(reason) {\n      _onFinish(reason);\n      return iterator.return();\n    }\n  }, {\n    highWaterMark: 2\n  })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n    ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n    async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false\n  }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n  let duplexAccessed = false;\n\n  const hasContentType = new Request(platform.origin, {\n    body: new ReadableStream(),\n    method: 'POST',\n    get duplex() {\n      duplexAccessed = true;\n      return 'half';\n    },\n  }).headers.has('Content-Type');\n\n  return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n  test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n  stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n  ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n    !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n      (_, config) => {\n        throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n      })\n  });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n  if (body == null) {\n    return 0;\n  }\n\n  if(utils.isBlob(body)) {\n    return body.size;\n  }\n\n  if(utils.isSpecCompliantForm(body)) {\n    const _request = new Request(platform.origin, {\n      method: 'POST',\n      body,\n    });\n    return (await _request.arrayBuffer()).byteLength;\n  }\n\n  if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n    return body.byteLength;\n  }\n\n  if(utils.isURLSearchParams(body)) {\n    body = body + '';\n  }\n\n  if(utils.isString(body)) {\n    return (await encodeText(body)).byteLength;\n  }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n  const length = utils.toFiniteNumber(headers.getContentLength());\n\n  return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n  let {\n    url,\n    method,\n    data,\n    signal,\n    cancelToken,\n    timeout,\n    onDownloadProgress,\n    onUploadProgress,\n    responseType,\n    headers,\n    withCredentials = 'same-origin',\n    fetchOptions\n  } = resolveConfig(config);\n\n  responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n  let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n  let request;\n\n  const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n      composedSignal.unsubscribe();\n  });\n\n  let requestContentLength;\n\n  try {\n    if (\n      onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n      (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n    ) {\n      let _request = new Request(url, {\n        method: 'POST',\n        body: data,\n        duplex: \"half\"\n      });\n\n      let contentTypeHeader;\n\n      if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n        headers.setContentType(contentTypeHeader)\n      }\n\n      if (_request.body) {\n        const [onProgress, flush] = progressEventDecorator(\n          requestContentLength,\n          progressEventReducer(asyncDecorator(onUploadProgress))\n        );\n\n        data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n      }\n    }\n\n    if (!utils.isString(withCredentials)) {\n      withCredentials = withCredentials ? 'include' : 'omit';\n    }\n\n    // Cloudflare Workers throws when credentials are defined\n    // see https://github.com/cloudflare/workerd/issues/902\n    const isCredentialsSupported = \"credentials\" in Request.prototype;\n    request = new Request(url, {\n      ...fetchOptions,\n      signal: composedSignal,\n      method: method.toUpperCase(),\n      headers: headers.normalize().toJSON(),\n      body: data,\n      duplex: \"half\",\n      credentials: isCredentialsSupported ? withCredentials : undefined\n    });\n\n    let response = await fetch(request);\n\n    const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n    if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n      const options = {};\n\n      ['status', 'statusText', 'headers'].forEach(prop => {\n        options[prop] = response[prop];\n      });\n\n      const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n      const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n        responseContentLength,\n        progressEventReducer(asyncDecorator(onDownloadProgress), true)\n      ) || [];\n\n      response = new Response(\n        trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n          flush && flush();\n          unsubscribe && unsubscribe();\n        }),\n        options\n      );\n    }\n\n    responseType = responseType || 'text';\n\n    let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n    !isStreamResponse && unsubscribe && unsubscribe();\n\n    return await new Promise((resolve, reject) => {\n      settle(resolve, reject, {\n        data: responseData,\n        headers: AxiosHeaders.from(response.headers),\n        status: response.status,\n        statusText: response.statusText,\n        config,\n        request\n      })\n    })\n  } catch (err) {\n    unsubscribe && unsubscribe();\n\n    if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n      throw Object.assign(\n        new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n        {\n          cause: err.cause || err\n        }\n      )\n    }\n\n    throw AxiosError.from(err, err && err.code, config, request);\n  }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      Object.defineProperty(fn, 'name', {value});\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', {value});\n  }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n  getAdapter: (adapters) => {\n    adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n    const {length} = adapters;\n    let nameOrAdapter;\n    let adapter;\n\n    const rejectedReasons = {};\n\n    for (let i = 0; i < length; i++) {\n      nameOrAdapter = adapters[i];\n      let id;\n\n      adapter = nameOrAdapter;\n\n      if (!isResolvedHandle(nameOrAdapter)) {\n        adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n        if (adapter === undefined) {\n          throw new AxiosError(`Unknown adapter '${id}'`);\n        }\n      }\n\n      if (adapter) {\n        break;\n      }\n\n      rejectedReasons[id || '#' + i] = adapter;\n    }\n\n    if (!adapter) {\n\n      const reasons = Object.entries(rejectedReasons)\n        .map(([id, state]) => `adapter ${id} ` +\n          (state === false ? 'is not supported by the environment' : 'is not available in the build')\n        );\n\n      let s = length ?\n        (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n        'as no adapter specified';\n\n      throw new AxiosError(\n        `There is no suitable adapter to dispatch the request ` + s,\n        'ERR_NOT_SUPPORT'\n      );\n    }\n\n    return adapter;\n  },\n  adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(config.headers);\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.transformRequest\n  );\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      config.transformResponse,\n      response\n    );\n\n    response.headers = AxiosHeaders.from(response.headers);\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          config.transformResponse,\n          reason.response\n        );\n        reason.response.headers = AxiosHeaders.from(reason.response.headers);\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n}\n","export const VERSION = \"1.7.7\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    const validator = schema[opt];\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig;\n    this.interceptors = {\n      request: new InterceptorManager(),\n      response: new InterceptorManager()\n    };\n  }\n\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        let dummy;\n\n        Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n        // slice off the Error: ... line\n        const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n        try {\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n            err.stack += '\\n' + stack\n          }\n        } catch (e) {\n          // ignore the case where \"stack\" is an un-writable property\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const {transitional, paramsSerializer, headers} = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(transitional, {\n        silentJSONParsing: validators.transitional(validators.boolean),\n        forcedJSONParsing: validators.transitional(validators.boolean),\n        clarifyTimeoutError: validators.transitional(validators.boolean)\n      }, false);\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer\n        }\n      } else {\n        validator.assertOptions(paramsSerializer, {\n          encode: validators.function,\n          serialize: validators.function\n        }, true);\n      }\n    }\n\n    // Set config.method\n    config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(\n      headers.common,\n      headers[config.method]\n    );\n\n    headers && utils.forEach(\n      ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n      (method) => {\n        delete headers[method];\n      }\n    );\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift.apply(chain, requestInterceptorChain);\n      chain.push.apply(chain, responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    i = 0;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled(newConfig);\n      } catch (error) {\n        onRejected.call(this, error);\n        break;\n      }\n    }\n\n    try {\n      promise = dispatchRequest.call(this, newConfig);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method,\n      url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(mergeConfig(config || {}, {\n        method,\n        headers: isForm ? {\n          'Content-Type': 'multipart/form-data'\n        } : {},\n        url,\n        data\n      }));\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then(cancel => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = onfulfilled => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise(resolve => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  toAbortSignal() {\n    const controller = new AbortController();\n\n    const abort = (err) => {\n      controller.abort(err);\n    };\n\n    this.subscribe(abort);\n\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n    return controller.signal;\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel\n    };\n  }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n  // Copy context to instance\n  utils.extend(instance, context, null, {allOwnKeys: true});\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig\n} = axios;\n\nexport {\n  axios as default,\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Ory APIs\n * Documentation for all public and administrative Ory APIs. Administrative APIs can only be accessed with a valid Personal Access Token. Public APIs are mostly used in browsers.\n *\n * The version of the OpenAPI document: v1.9.0\n * Contact: support@ory.sh\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport globalAxios from 'axios';\nexport const BASE_PATH = \"https://playground.projects.oryapis.com\".replace(/\\/+$/, \"\");\n/**\n *\n * @export\n */\nexport const COLLECTION_FORMATS = {\n    csv: \",\",\n    ssv: \" \",\n    tsv: \"\\t\",\n    pipes: \"|\",\n};\n/**\n *\n * @export\n * @class BaseAPI\n */\nexport class BaseAPI {\n    constructor(configuration, basePath = BASE_PATH, axios = globalAxios) {\n        var _a;\n        this.basePath = basePath;\n        this.axios = axios;\n        if (configuration) {\n            this.configuration = configuration;\n            this.basePath = (_a = configuration.basePath) !== null && _a !== void 0 ? _a : basePath;\n        }\n    }\n}\n;\n/**\n *\n * @export\n * @class RequiredError\n * @extends {Error}\n */\nexport class RequiredError extends Error {\n    constructor(field, msg) {\n        super(msg);\n        this.field = field;\n        this.name = \"RequiredError\";\n    }\n}\n/**\n *\n * @export\n */\nexport const operationServerMap = {};\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Ory APIs\n * Documentation for all public and administrative Ory APIs. Administrative APIs can only be accessed with a valid Personal Access Token. Public APIs are mostly used in browsers.\n *\n * The version of the OpenAPI document: v1.9.0\n * Contact: support@ory.sh\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { RequiredError } from \"./base\";\n/**\n *\n * @export\n */\nexport const DUMMY_BASE_URL = 'https://example.com';\n/**\n *\n * @throws {RequiredError}\n * @export\n */\nexport const assertParamExists = function (functionName, paramName, paramValue) {\n    if (paramValue === null || paramValue === undefined) {\n        throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`);\n    }\n};\n/**\n *\n * @export\n */\nexport const setApiKeyToObject = function (object, keyParamName, configuration) {\n    return __awaiter(this, void 0, void 0, function* () {\n        if (configuration && configuration.apiKey) {\n            const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                ? yield configuration.apiKey(keyParamName)\n                : yield configuration.apiKey;\n            object[keyParamName] = localVarApiKeyValue;\n        }\n    });\n};\n/**\n *\n * @export\n */\nexport const setBasicAuthToObject = function (object, configuration) {\n    if (configuration && (configuration.username || configuration.password)) {\n        object[\"auth\"] = { username: configuration.username, password: configuration.password };\n    }\n};\n/**\n *\n * @export\n */\nexport const setBearerAuthToObject = function (object, configuration) {\n    return __awaiter(this, void 0, void 0, function* () {\n        if (configuration && configuration.accessToken) {\n            const accessToken = typeof configuration.accessToken === 'function'\n                ? yield configuration.accessToken()\n                : yield configuration.accessToken;\n            object[\"Authorization\"] = \"Bearer \" + accessToken;\n        }\n    });\n};\n/**\n *\n * @export\n */\nexport const setOAuthToObject = function (object, name, scopes, configuration) {\n    return __awaiter(this, void 0, void 0, function* () {\n        if (configuration && configuration.accessToken) {\n            const localVarAccessTokenValue = typeof configuration.accessToken === 'function'\n                ? yield configuration.accessToken(name, scopes)\n                : yield configuration.accessToken;\n            object[\"Authorization\"] = \"Bearer \" + localVarAccessTokenValue;\n        }\n    });\n};\nfunction setFlattenedQueryParams(urlSearchParams, parameter, key = \"\") {\n    if (parameter == null)\n        return;\n    if (typeof parameter === \"object\") {\n        if (Array.isArray(parameter)) {\n            parameter.forEach(item => setFlattenedQueryParams(urlSearchParams, item, key));\n        }\n        else {\n            Object.keys(parameter).forEach(currentKey => setFlattenedQueryParams(urlSearchParams, parameter[currentKey], `${key}${key !== '' ? '.' : ''}${currentKey}`));\n        }\n    }\n    else {\n        if (urlSearchParams.has(key)) {\n            urlSearchParams.append(key, parameter);\n        }\n        else {\n            urlSearchParams.set(key, parameter);\n        }\n    }\n}\n/**\n *\n * @export\n */\nexport const setSearchParams = function (url, ...objects) {\n    const searchParams = new URLSearchParams(url.search);\n    setFlattenedQueryParams(searchParams, objects);\n    url.search = searchParams.toString();\n};\n/**\n *\n * @export\n */\nexport const serializeDataIfNeeded = function (value, requestOptions, configuration) {\n    const nonString = typeof value !== 'string';\n    const needsSerialization = nonString && configuration && configuration.isJsonMime\n        ? configuration.isJsonMime(requestOptions.headers['Content-Type'])\n        : nonString;\n    return needsSerialization\n        ? JSON.stringify(value !== undefined ? value : {})\n        : (value || \"\");\n};\n/**\n *\n * @export\n */\nexport const toPathString = function (url) {\n    return url.pathname + url.search + url.hash;\n};\n/**\n *\n * @export\n */\nexport const createRequestFunction = function (axiosArgs, globalAxios, BASE_PATH, configuration) {\n    return (axios = globalAxios, basePath = BASE_PATH) => {\n        var _a;\n        const axiosRequestArgs = Object.assign(Object.assign({}, axiosArgs.options), { url: (axios.defaults.baseURL ? '' : (_a = configuration === null || configuration === void 0 ? void 0 : configuration.basePath) !== null && _a !== void 0 ? _a : basePath) + axiosArgs.url });\n        return axios.request(axiosRequestArgs);\n    };\n};\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Ory APIs\n * Documentation for all public and administrative Ory APIs. Administrative APIs can only be accessed with a valid Personal Access Token. Public APIs are mostly used in browsers.\n *\n * The version of the OpenAPI document: v1.9.0\n * Contact: support@ory.sh\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport globalAxios from 'axios';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { DUMMY_BASE_URL, assertParamExists, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common';\n// @ts-ignore\nimport { BASE_PATH, BaseAPI, operationServerMap } from './base';\nexport const AttributeFilterConditionEnum = {\n    Equals: 'equals',\n    NotEquals: 'not_equals',\n    Contains: 'contains',\n    NotContains: 'not_contains',\n    Regex: 'regex',\n    NotRegex: 'not_regex',\n    Set: 'set',\n    NotSet: 'not_set'\n};\n/**\n * The authenticator assurance level can be one of \\\"aal1\\\", \\\"aal2\\\", or \\\"aal3\\\". A higher number means that it is harder for an attacker to compromise the account.  Generally, \\\"aal1\\\" implies that one authentication factor was used while AAL2 implies that two factors (e.g. password + TOTP) have been used.  To learn more about these levels please head over to: https://www.ory.sh/kratos/docs/concepts/credentials\n * @export\n * @enum {string}\n */\nexport const AuthenticatorAssuranceLevel = {\n    Aal0: 'aal0',\n    Aal1: 'aal1',\n    Aal2: 'aal2',\n    Aal3: 'aal3'\n};\nexport const ConsistencyRequestParametersConsistencyEnum = {\n    Empty: '',\n    Strong: 'strong',\n    Eventual: 'eventual'\n};\nexport const ContinueWithRecoveryUiActionEnum = {\n    ShowRecoveryUi: 'show_recovery_ui'\n};\nexport const ContinueWithSetOrySessionTokenActionEnum = {\n    SetOrySessionToken: 'set_ory_session_token'\n};\nexport const ContinueWithSettingsUiActionEnum = {\n    ShowSettingsUi: 'show_settings_ui'\n};\nexport const ContinueWithVerificationUiActionEnum = {\n    ShowVerificationUi: 'show_verification_ui'\n};\n/**\n * A Message\\'s Status\n * @export\n * @enum {string}\n */\nexport const CourierMessageStatus = {\n    Queued: 'queued',\n    Sent: 'sent',\n    Processing: 'processing',\n    Abandoned: 'abandoned'\n};\n/**\n * It can either be `email` or `phone`\n * @export\n * @enum {string}\n */\nexport const CourierMessageType = {\n    Email: 'email',\n    Phone: 'phone'\n};\nexport const CreateEventStreamBodyTypeEnum = {\n    Sns: 'sns'\n};\nexport const CreateIdentityBodyStateEnum = {\n    Active: 'active',\n    Inactive: 'inactive'\n};\nexport const CreateProjectBodyEnvironmentEnum = {\n    Prod: 'prod',\n    Dev: 'dev'\n};\nexport const CreateProjectNormalizedPayloadEnvironmentEnum = {\n    Prod: 'prod',\n    Dev: 'dev'\n};\nexport const CreateProjectNormalizedPayloadHydraStrategiesAccessTokenEnum = {\n    Opaque: 'opaque',\n    Jwt: 'jwt'\n};\nexport const CreateProjectNormalizedPayloadHydraStrategiesScopeEnum = {\n    Exact: 'exact',\n    Wildcard: 'wildcard'\n};\nexport const CreateProjectNormalizedPayloadKratosSelfserviceFlowsRecoveryUseEnum = {\n    Link: 'link',\n    Code: 'code'\n};\nexport const CreateProjectNormalizedPayloadKratosSelfserviceFlowsVerificationUseEnum = {\n    Link: 'link',\n    Code: 'code'\n};\nexport const CreateSubscriptionBodyCurrencyEnum = {\n    Usd: 'usd',\n    Eur: 'eur'\n};\nexport const CreateSubscriptionBodyIntervalEnum = {\n    Monthly: 'monthly',\n    Yearly: 'yearly'\n};\nexport const CreateSubscriptionCommonCurrencyEnum = {\n    Usd: 'usd',\n    Eur: 'eur'\n};\nexport const CreateSubscriptionCommonIntervalEnum = {\n    Monthly: 'monthly',\n    Yearly: 'yearly'\n};\nexport const CreateWorkspaceSubscriptionBodyCurrencyEnum = {\n    Usd: 'usd',\n    Eur: 'eur'\n};\nexport const CreateWorkspaceSubscriptionBodyIntervalEnum = {\n    Monthly: 'monthly',\n    Yearly: 'yearly'\n};\nexport const CustomDomainSslStatusEnum = {\n    Initializing: 'initializing',\n    PendingValidation: 'pending_validation',\n    Deleted: 'deleted',\n    PendingIssuance: 'pending_issuance',\n    PendingDeployment: 'pending_deployment',\n    PendingDeletion: 'pending_deletion',\n    PendingExpiration: 'pending_expiration',\n    Expired: 'expired',\n    Active: 'active',\n    InitializingTimedOut: 'initializing_timed_out',\n    ValidationTimedOut: 'validation_timed_out',\n    IssuanceTimedOut: 'issuance_timed_out',\n    DeploymentTimedOut: 'deployment_timed_out',\n    DeletionTimedOut: 'deletion_timed_out',\n    PendingCleanup: 'pending_cleanup',\n    StagingDeployment: 'staging_deployment',\n    StagingActive: 'staging_active',\n    Deactivating: 'deactivating',\n    Inactive: 'inactive',\n    BackupIssued: 'backup_issued',\n    HoldingDeployment: 'holding_deployment',\n    Empty: ''\n};\nexport const ExpandedPermissionTreeTypeEnum = {\n    Union: 'union',\n    Exclusion: 'exclusion',\n    Intersection: 'intersection',\n    Leaf: 'leaf',\n    TupleToSubjectSet: 'tuple_to_subject_set',\n    ComputedSubjectSet: 'computed_subject_set',\n    Not: 'not',\n    Unspecified: 'unspecified'\n};\nexport const IdentityStateEnum = {\n    Active: 'active',\n    Inactive: 'inactive'\n};\nexport const IdentityCredentialsTypeEnum = {\n    Password: 'password',\n    Oidc: 'oidc',\n    Totp: 'totp',\n    LookupSecret: 'lookup_secret',\n    Webauthn: 'webauthn',\n    Code: 'code',\n    LinkRecovery: 'link_recovery',\n    CodeRecovery: 'code_recovery'\n};\nexport const IdentityPatchResponseActionEnum = {\n    Create: 'create'\n};\nexport const InternalIsOwnerForProjectBySlugBodyNamespaceEnum = {\n    User: 'User',\n    ApiKey: ' ApiKey'\n};\nexport const JsonPatchOpEnum = {\n    Add: 'add',\n    Remove: 'remove',\n    Replace: 'replace',\n    Move: 'move',\n    Copy: 'copy',\n    Test: 'test'\n};\nexport const LoginFlowActiveEnum = {\n    Password: 'password',\n    Oidc: 'oidc',\n    Totp: 'totp',\n    LookupSecret: 'lookup_secret',\n    Webauthn: 'webauthn',\n    Code: 'code',\n    LinkRecovery: 'link_recovery',\n    CodeRecovery: 'code_recovery'\n};\n/**\n * The state represents the state of the login flow.  choose_method: ask the user to choose a method (e.g. login account via email) sent_email: the email has been sent to the user passed_challenge: the request was successful and the login challenge was passed.\n * @export\n * @enum {string}\n */\nexport const LoginFlowState = {\n    ChooseMethod: 'choose_method',\n    SentEmail: 'sent_email',\n    PassedChallenge: 'passed_challenge'\n};\nexport const MemberInviteStatusEnum = {\n    Pending: 'pending',\n    Accepted: 'accepted',\n    Declined: 'declined',\n    Expired: 'expired',\n    Cancelled: 'cancelled',\n    Removed: 'removed'\n};\nexport const MessageTemplateTypeEnum = {\n    RecoveryInvalid: 'recovery_invalid',\n    RecoveryValid: 'recovery_valid',\n    RecoveryCodeInvalid: 'recovery_code_invalid',\n    RecoveryCodeValid: 'recovery_code_valid',\n    VerificationInvalid: 'verification_invalid',\n    VerificationValid: 'verification_valid',\n    VerificationCodeInvalid: 'verification_code_invalid',\n    VerificationCodeValid: 'verification_code_valid',\n    Stub: 'stub',\n    LoginCodeValid: 'login_code_valid',\n    RegistrationCodeValid: 'registration_code_valid'\n};\nexport const MessageDispatchStatusEnum = {\n    Failed: 'failed',\n    Success: 'success'\n};\nexport const MigrationOptionsEnvironmentEnum = {\n    Prod: 'prod',\n    Dev: 'dev'\n};\nexport const MigrationOptionsProjectSubscriptionEnum = {\n    Migrate: 'migrate',\n    Ignore: 'ignore'\n};\nexport const NormalizedProjectEnvironmentEnum = {\n    Prod: 'prod',\n    Dev: 'dev'\n};\nexport const NormalizedProjectStateEnum = {\n    Running: 'running',\n    Halted: 'halted',\n    Deleted: 'deleted'\n};\nexport const NormalizedProjectRevisionHydraStrategiesAccessTokenEnum = {\n    Opaque: 'opaque',\n    Jwt: 'jwt'\n};\nexport const NormalizedProjectRevisionHydraStrategiesScopeEnum = {\n    Exact: 'exact',\n    Wildcard: 'wildcard'\n};\nexport const NormalizedProjectRevisionKratosSelfserviceFlowsRecoveryUseEnum = {\n    Link: 'link',\n    Code: 'code'\n};\nexport const NormalizedProjectRevisionKratosSelfserviceFlowsVerificationUseEnum = {\n    Link: 'link',\n    Code: 'code'\n};\nexport const NormalizedProjectRevisionCourierChannelRequestConfigAuthTypeEnum = {\n    BasicAuth: 'basic_auth',\n    ApiKey: 'api_key'\n};\nexport const NormalizedProjectRevisionThirdPartyProviderStateEnum = {\n    Enabled: 'enabled',\n    Disabled: 'disabled'\n};\nexport const ProjectStateEnum = {\n    Running: 'running',\n    Halted: 'halted',\n    Deleted: 'deleted'\n};\nexport const ProjectMetadataEnvironmentEnum = {\n    Prod: 'prod',\n    Dev: 'dev'\n};\nexport const ProjectMetadataStateEnum = {\n    Running: 'running',\n    Halted: 'halted',\n    Deleted: 'deleted'\n};\nexport const QuotaUsageFeatureEnum = {\n    RegionEu: 'region_eu',\n    RegionUs: 'region_us',\n    RegionApac: 'region_apac',\n    RegionGlobal: 'region_global',\n    ProductionProjects: 'production_projects',\n    DevelopmentProjects: 'development_projects',\n    DailyActiveUsers: 'daily_active_users',\n    CustomDomains: 'custom_domains',\n    EventStreams: 'event_streams',\n    Sla: 'sla',\n    CollaboratorSeats: 'collaborator_seats',\n    EdgeCache: 'edge_cache',\n    BrandingThemes: 'branding_themes',\n    ZendeskSupport: 'zendesk_support',\n    ProjectMetrics: 'project_metrics',\n    ProjectMetricsTimeWindow: 'project_metrics_time_window',\n    ProjectMetricsEventsHistory: 'project_metrics_events_history',\n    Organizations: 'organizations',\n    RopGrant: 'rop_grant',\n    ConciergeOnboarding: 'concierge_onboarding',\n    Credit: 'credit',\n    RateLimitTier: 'rate_limit_tier',\n    SessionRateLimitTier: 'session_rate_limit_tier',\n    IdentitiesListRateLimitTier: 'identities_list_rate_limit_tier',\n    PermissionChecksRateLimitTier: 'permission_checks_rate_limit_tier',\n    Oauth2IntrospectRateLimitTier: 'oauth2_introspect_rate_limit_tier'\n};\n/**\n * The state represents the state of the recovery flow.  choose_method: ask the user to choose a method (e.g. recover account via email) sent_email: the email has been sent to the user passed_challenge: the request was successful and the recovery challenge was passed.\n * @export\n * @enum {string}\n */\nexport const RecoveryFlowState = {\n    ChooseMethod: 'choose_method',\n    SentEmail: 'sent_email',\n    PassedChallenge: 'passed_challenge'\n};\nexport const RegistrationFlowActiveEnum = {\n    Password: 'password',\n    Oidc: 'oidc',\n    Totp: 'totp',\n    LookupSecret: 'lookup_secret',\n    Webauthn: 'webauthn',\n    Code: 'code',\n    LinkRecovery: 'link_recovery',\n    CodeRecovery: 'code_recovery'\n};\n/**\n * choose_method: ask the user to choose a method (e.g. registration with email) sent_email: the email has been sent to the user passed_challenge: the request was successful and the registration challenge was passed.\n * @export\n * @enum {string}\n */\nexport const RegistrationFlowState = {\n    ChooseMethod: 'choose_method',\n    SentEmail: 'sent_email',\n    PassedChallenge: 'passed_challenge'\n};\nexport const RelationshipPatchActionEnum = {\n    Insert: 'insert',\n    Delete: 'delete'\n};\nexport const SessionAuthenticationMethodMethodEnum = {\n    LinkRecovery: 'link_recovery',\n    CodeRecovery: 'code_recovery',\n    Password: 'password',\n    Code: 'code',\n    Totp: 'totp',\n    Oidc: 'oidc',\n    Webauthn: 'webauthn',\n    LookupSecret: 'lookup_secret',\n    V06LegacySession: 'v0.6_legacy_session'\n};\nexport const SetEventStreamBodyTypeEnum = {\n    Sns: 'sns'\n};\n/**\n * show_form: No user data has been collected, or it is invalid, and thus the form should be shown. success: Indicates that the settings flow has been updated successfully with the provided data. Done will stay true when repeatedly checking. If set to true, done will revert back to false only when a flow with invalid (e.g. \\\"please use a valid phone number\\\") data was sent.\n * @export\n * @enum {string}\n */\nexport const SettingsFlowState = {\n    ShowForm: 'show_form',\n    Success: 'success'\n};\nexport const SubscriptionCurrencyEnum = {\n    Usd: 'usd',\n    Eur: 'eur'\n};\nexport const SubscriptionCurrentIntervalEnum = {\n    Monthly: 'monthly',\n    Yearly: 'yearly'\n};\nexport const UiNodeGroupEnum = {\n    Default: 'default',\n    Password: 'password',\n    Oidc: 'oidc',\n    Profile: 'profile',\n    Link: 'link',\n    Code: 'code',\n    Totp: 'totp',\n    LookupSecret: 'lookup_secret',\n    Webauthn: 'webauthn'\n};\nexport const UiNodeTypeEnum = {\n    Text: 'text',\n    Input: 'input',\n    Img: 'img',\n    A: 'a',\n    Script: 'script'\n};\nexport const UiNodeInputAttributesAutocompleteEnum = {\n    Email: 'email',\n    Tel: 'tel',\n    Url: 'url',\n    CurrentPassword: 'current-password',\n    NewPassword: 'new-password',\n    OneTimeCode: 'one-time-code'\n};\nexport const UiNodeInputAttributesTypeEnum = {\n    Text: 'text',\n    Password: 'password',\n    Number: 'number',\n    Checkbox: 'checkbox',\n    Hidden: 'hidden',\n    Email: 'email',\n    Tel: 'tel',\n    Submit: 'submit',\n    Button: 'button',\n    DatetimeLocal: 'datetime-local',\n    Date: 'date',\n    Url: 'url'\n};\nexport const UiTextTypeEnum = {\n    Info: 'info',\n    Error: 'error',\n    Success: 'success'\n};\nexport const UpdateIdentityBodyStateEnum = {\n    Active: 'active',\n    Inactive: 'inactive'\n};\nexport const UpdateRecoveryFlowWithCodeMethodMethodEnum = {\n    Link: 'link',\n    Code: 'code'\n};\nexport const UpdateRecoveryFlowWithLinkMethodMethodEnum = {\n    Link: 'link',\n    Code: 'code'\n};\nexport const UpdateSubscriptionBodyIntervalEnum = {\n    Monthly: 'monthly',\n    Yearly: 'yearly'\n};\nexport const UpdateVerificationFlowWithCodeMethodMethodEnum = {\n    Link: 'link',\n    Code: 'code'\n};\nexport const UpdateVerificationFlowWithLinkMethodMethodEnum = {\n    Link: 'link',\n    Code: 'code'\n};\nexport const VerifiableIdentityAddressViaEnum = {\n    Email: 'email',\n    Sms: 'sms'\n};\n/**\n * The state represents the state of the verification flow.  choose_method: ask the user to choose a method (e.g. recover account via email) sent_email: the email has been sent to the user passed_challenge: the request was successful and the recovery challenge was passed.\n * @export\n * @enum {string}\n */\nexport const VerificationFlowState = {\n    ChooseMethod: 'choose_method',\n    SentEmail: 'sent_email',\n    PassedChallenge: 'passed_challenge'\n};\n/**\n * CourierApi - axios parameter creator\n * @export\n */\nexport const CourierApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Gets a specific messages by the given ID.\n         * @summary Get a Message\n         * @param {string} id MessageID is the ID of the message.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCourierMessage: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getCourierMessage', 'id', id);\n            const localVarPath = `/admin/courier/messages/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Lists all messages by given status and recipient.\n         * @summary List Messages\n         * @param {number} [pageSize] Items per Page  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {CourierMessageStatus} [status] Status filters out messages based on status. If no value is provided, it doesn\\&#39;t take effect on filter.\n         * @param {string} [recipient] Recipient filters out messages based on recipient. If no value is provided, it doesn\\&#39;t take effect on filter.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listCourierMessages: (pageSize, pageToken, status, recipient, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/courier/messages`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (pageSize !== undefined) {\n                localVarQueryParameter['page_size'] = pageSize;\n            }\n            if (pageToken !== undefined) {\n                localVarQueryParameter['page_token'] = pageToken;\n            }\n            if (status !== undefined) {\n                localVarQueryParameter['status'] = status;\n            }\n            if (recipient !== undefined) {\n                localVarQueryParameter['recipient'] = recipient;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * CourierApi - functional programming interface\n * @export\n */\nexport const CourierApiFp = function (configuration) {\n    const localVarAxiosParamCreator = CourierApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Gets a specific messages by the given ID.\n         * @summary Get a Message\n         * @param {string} id MessageID is the ID of the message.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCourierMessage(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getCourierMessage(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['CourierApi.getCourierMessage']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Lists all messages by given status and recipient.\n         * @summary List Messages\n         * @param {number} [pageSize] Items per Page  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {CourierMessageStatus} [status] Status filters out messages based on status. If no value is provided, it doesn\\&#39;t take effect on filter.\n         * @param {string} [recipient] Recipient filters out messages based on recipient. If no value is provided, it doesn\\&#39;t take effect on filter.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listCourierMessages(pageSize, pageToken, status, recipient, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listCourierMessages(pageSize, pageToken, status, recipient, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['CourierApi.listCourierMessages']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * CourierApi - factory interface\n * @export\n */\nexport const CourierApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = CourierApiFp(configuration);\n    return {\n        /**\n         * Gets a specific messages by the given ID.\n         * @summary Get a Message\n         * @param {CourierApiGetCourierMessageRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCourierMessage(requestParameters, options) {\n            return localVarFp.getCourierMessage(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Lists all messages by given status and recipient.\n         * @summary List Messages\n         * @param {CourierApiListCourierMessagesRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listCourierMessages(requestParameters = {}, options) {\n            return localVarFp.listCourierMessages(requestParameters.pageSize, requestParameters.pageToken, requestParameters.status, requestParameters.recipient, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * CourierApi - object-oriented interface\n * @export\n * @class CourierApi\n * @extends {BaseAPI}\n */\nexport class CourierApi extends BaseAPI {\n    /**\n     * Gets a specific messages by the given ID.\n     * @summary Get a Message\n     * @param {CourierApiGetCourierMessageRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CourierApi\n     */\n    getCourierMessage(requestParameters, options) {\n        return CourierApiFp(this.configuration).getCourierMessage(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Lists all messages by given status and recipient.\n     * @summary List Messages\n     * @param {CourierApiListCourierMessagesRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CourierApi\n     */\n    listCourierMessages(requestParameters = {}, options) {\n        return CourierApiFp(this.configuration).listCourierMessages(requestParameters.pageSize, requestParameters.pageToken, requestParameters.status, requestParameters.recipient, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * EventsApi - axios parameter creator\n * @export\n */\nexport const EventsApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         *\n         * @summary Create an event stream for your project.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {CreateEventStreamBody} createEventStreamBody\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createEventStream: (projectId, createEventStreamBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('createEventStream', 'projectId', projectId);\n            // verify required parameter 'createEventStreamBody' is not null or undefined\n            assertParamExists('createEventStream', 'createEventStreamBody', createEventStreamBody);\n            const localVarPath = `/projects/{project_id}/eventstreams`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(createEventStreamBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Remove an event stream from a project.\n         * @summary Remove an event stream from a project\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {string} eventStreamId Event Stream ID  The ID of the event stream to be deleted, as returned when created.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteEventStream: (projectId, eventStreamId, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('deleteEventStream', 'projectId', projectId);\n            // verify required parameter 'eventStreamId' is not null or undefined\n            assertParamExists('deleteEventStream', 'eventStreamId', eventStreamId);\n            const localVarPath = `/projects/{project_id}/eventstreams/{event_stream_id}`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)))\n                .replace(`{${\"event_stream_id\"}}`, encodeURIComponent(String(eventStreamId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         *\n         * @summary List all event streams for the project. This endpoint is not paginated.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listEventStreams: (projectId, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('listEventStreams', 'projectId', projectId);\n            const localVarPath = `/projects/{project_id}/eventstreams`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         *\n         * @summary Update an event stream for a project.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {string} eventStreamId Event Stream ID  The event stream\\&#39;s ID.\n         * @param {SetEventStreamBody} [setEventStreamBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setEventStream: (projectId, eventStreamId, setEventStreamBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('setEventStream', 'projectId', projectId);\n            // verify required parameter 'eventStreamId' is not null or undefined\n            assertParamExists('setEventStream', 'eventStreamId', eventStreamId);\n            const localVarPath = `/projects/{project_id}/eventstreams/{event_stream_id}`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)))\n                .replace(`{${\"event_stream_id\"}}`, encodeURIComponent(String(eventStreamId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(setEventStreamBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * EventsApi - functional programming interface\n * @export\n */\nexport const EventsApiFp = function (configuration) {\n    const localVarAxiosParamCreator = EventsApiAxiosParamCreator(configuration);\n    return {\n        /**\n         *\n         * @summary Create an event stream for your project.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {CreateEventStreamBody} createEventStreamBody\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createEventStream(projectId, createEventStreamBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createEventStream(projectId, createEventStreamBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['EventsApi.createEventStream']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Remove an event stream from a project.\n         * @summary Remove an event stream from a project\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {string} eventStreamId Event Stream ID  The ID of the event stream to be deleted, as returned when created.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteEventStream(projectId, eventStreamId, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteEventStream(projectId, eventStreamId, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['EventsApi.deleteEventStream']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         *\n         * @summary List all event streams for the project. This endpoint is not paginated.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listEventStreams(projectId, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listEventStreams(projectId, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['EventsApi.listEventStreams']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         *\n         * @summary Update an event stream for a project.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {string} eventStreamId Event Stream ID  The event stream\\&#39;s ID.\n         * @param {SetEventStreamBody} [setEventStreamBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setEventStream(projectId, eventStreamId, setEventStreamBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.setEventStream(projectId, eventStreamId, setEventStreamBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['EventsApi.setEventStream']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * EventsApi - factory interface\n * @export\n */\nexport const EventsApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = EventsApiFp(configuration);\n    return {\n        /**\n         *\n         * @summary Create an event stream for your project.\n         * @param {EventsApiCreateEventStreamRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createEventStream(requestParameters, options) {\n            return localVarFp.createEventStream(requestParameters.projectId, requestParameters.createEventStreamBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Remove an event stream from a project.\n         * @summary Remove an event stream from a project\n         * @param {EventsApiDeleteEventStreamRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteEventStream(requestParameters, options) {\n            return localVarFp.deleteEventStream(requestParameters.projectId, requestParameters.eventStreamId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         *\n         * @summary List all event streams for the project. This endpoint is not paginated.\n         * @param {EventsApiListEventStreamsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listEventStreams(requestParameters, options) {\n            return localVarFp.listEventStreams(requestParameters.projectId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         *\n         * @summary Update an event stream for a project.\n         * @param {EventsApiSetEventStreamRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setEventStream(requestParameters, options) {\n            return localVarFp.setEventStream(requestParameters.projectId, requestParameters.eventStreamId, requestParameters.setEventStreamBody, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * EventsApi - object-oriented interface\n * @export\n * @class EventsApi\n * @extends {BaseAPI}\n */\nexport class EventsApi extends BaseAPI {\n    /**\n     *\n     * @summary Create an event stream for your project.\n     * @param {EventsApiCreateEventStreamRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof EventsApi\n     */\n    createEventStream(requestParameters, options) {\n        return EventsApiFp(this.configuration).createEventStream(requestParameters.projectId, requestParameters.createEventStreamBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Remove an event stream from a project.\n     * @summary Remove an event stream from a project\n     * @param {EventsApiDeleteEventStreamRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof EventsApi\n     */\n    deleteEventStream(requestParameters, options) {\n        return EventsApiFp(this.configuration).deleteEventStream(requestParameters.projectId, requestParameters.eventStreamId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     *\n     * @summary List all event streams for the project. This endpoint is not paginated.\n     * @param {EventsApiListEventStreamsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof EventsApi\n     */\n    listEventStreams(requestParameters, options) {\n        return EventsApiFp(this.configuration).listEventStreams(requestParameters.projectId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     *\n     * @summary Update an event stream for a project.\n     * @param {EventsApiSetEventStreamRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof EventsApi\n     */\n    setEventStream(requestParameters, options) {\n        return EventsApiFp(this.configuration).setEventStream(requestParameters.projectId, requestParameters.eventStreamId, requestParameters.setEventStreamBody, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * FrontendApi - axios parameter creator\n * @export\n */\nexport const FrontendApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * This endpoint initializes a browser-based user login flow. This endpoint will set the appropriate cookies and anti-CSRF measures required for browser-based flows.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.login.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists already, the browser will be redirected to `urls.default_redirect_url` unless the query parameter `?refresh=true` was set.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `session_aal1_required`: Multi-factor auth (e.g. 2fa) was requested but the user has no session yet. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  The optional query parameter login_challenge is set when using Kratos with Hydra in an OAuth2 flow. See the oauth2_provider.url configuration option.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Login Flow for Browsers\n         * @param {boolean} [refresh] Refresh a login session  If set to true, this will refresh an existing login session by asking the user to sign in again. This will reset the authenticated_at time of the session.\n         * @param {string} [aal] Request a Specific AuthenticationMethod Assurance Level  Use this parameter to upgrade an existing session\\&#39;s authenticator assurance level (AAL). This allows you to ask for multi-factor authentication. When an identity sign in using e.g. username+password, the AAL is 1. If you wish to \\&quot;upgrade\\&quot; the session\\&#39;s security by asking the user to perform TOTP / WebAuth/ ... you would set this to \\&quot;aal2\\&quot;.\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {string} [loginChallenge] An optional Hydra login challenge. If present, Kratos will cooperate with Ory Hydra to act as an OAuth2 identity provider.  The value for this parameter comes from &#x60;login_challenge&#x60; URL Query parameter sent to your application (e.g. &#x60;/login?login_challenge&#x3D;abcde&#x60;).\n         * @param {string} [organization] An optional organization ID that should be used for logging this user in. This parameter is only effective in the Ory Network.\n         * @param {string} [via] Via should contain the identity\\&#39;s credential the code should be sent to. Only relevant in aal2 flows.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserLoginFlow: (refresh, aal, returnTo, cookie, loginChallenge, organization, via, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/login/browser`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (refresh !== undefined) {\n                localVarQueryParameter['refresh'] = refresh;\n            }\n            if (aal !== undefined) {\n                localVarQueryParameter['aal'] = aal;\n            }\n            if (returnTo !== undefined) {\n                localVarQueryParameter['return_to'] = returnTo;\n            }\n            if (loginChallenge !== undefined) {\n                localVarQueryParameter['login_challenge'] = loginChallenge;\n            }\n            if (organization !== undefined) {\n                localVarQueryParameter['organization'] = organization;\n            }\n            if (via !== undefined) {\n                localVarQueryParameter['via'] = via;\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint initializes a browser-based user logout flow and a URL which can be used to log out the user.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...). For API clients you can call the `/self-service/logout/api` URL directly with the Ory Session Token.  The URL is only valid for the currently signed in user. If no user is signed in, this endpoint returns a 401 error.  When calling this endpoint from a backend, please ensure to properly forward the HTTP cookies.\n         * @summary Create a Logout URL for Browsers\n         * @param {string} [cookie] HTTP Cookies  If you call this endpoint from a backend, please include the original Cookie header in the request.\n         * @param {string} [returnTo] Return to URL  The URL to which the browser should be redirected to after the logout has been performed.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserLogoutFlow: (cookie, returnTo, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/logout/browser`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (returnTo !== undefined) {\n                localVarQueryParameter['return_to'] = returnTo;\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint initializes a browser-based account recovery flow. Once initialized, the browser will be redirected to `selfservice.flows.recovery.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists, the browser is returned to the configured return URL.  If this endpoint is called via an AJAX request, the response contains the recovery flow without any redirects or a 400 bad request error if the user is already authenticated.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Create Recovery Flow for Browsers\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserRecoveryFlow: (returnTo, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/recovery/browser`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (returnTo !== undefined) {\n                localVarQueryParameter['return_to'] = returnTo;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint initializes a browser-based user registration flow. This endpoint will set the appropriate cookies and anti-CSRF measures required for browser-based flows.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.registration.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists already, the browser will be redirected to `urls.default_redirect_url`.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  If this endpoint is called via an AJAX request, the response contains the registration flow without a redirect.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Registration Flow for Browsers\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {string} [loginChallenge] Ory OAuth 2.0 Login Challenge.  If set will cooperate with Ory OAuth2 and OpenID to act as an OAuth2 server / OpenID Provider.  The value for this parameter comes from &#x60;login_challenge&#x60; URL Query parameter sent to your application (e.g. &#x60;/registration?login_challenge&#x3D;abcde&#x60;).  This feature is compatible with Ory Hydra when not running on the Ory Network.\n         * @param {string} [afterVerificationReturnTo] The URL to return the browser to after the verification flow was completed.  After the registration flow is completed, the user will be sent a verification email. Upon completing the verification flow, this URL will be used to override the default &#x60;selfservice.flows.verification.after.default_redirect_to&#x60; value.\n         * @param {string} [organization]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserRegistrationFlow: (returnTo, loginChallenge, afterVerificationReturnTo, organization, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/registration/browser`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (returnTo !== undefined) {\n                localVarQueryParameter['return_to'] = returnTo;\n            }\n            if (loginChallenge !== undefined) {\n                localVarQueryParameter['login_challenge'] = loginChallenge;\n            }\n            if (afterVerificationReturnTo !== undefined) {\n                localVarQueryParameter['after_verification_return_to'] = afterVerificationReturnTo;\n            }\n            if (organization !== undefined) {\n                localVarQueryParameter['organization'] = organization;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint initializes a browser-based user settings flow. Once initialized, the browser will be redirected to `selfservice.flows.settings.ui_url` with the flow ID set as the query parameter `?flow=`. If no valid Ory Kratos Session Cookie is included in the request, a login flow will be initialized.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.settings.ui_url` with the flow ID set as the query parameter `?flow=`. If no valid user session was set, the browser will be redirected to the login endpoint.  If this endpoint is called via an AJAX request, the response contains the settings flow without any redirects or a 401 forbidden error if no valid session was set.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor (happens automatically for server-side browser flows) or change the configuration.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Create Settings Flow for Browsers\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserSettingsFlow: (returnTo, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/settings/browser`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (returnTo !== undefined) {\n                localVarQueryParameter['return_to'] = returnTo;\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint initializes a browser-based account verification flow. Once initialized, the browser will be redirected to `selfservice.flows.verification.ui_url` with the flow ID set as the query parameter `?flow=`.  If this endpoint is called via an AJAX request, the response contains the recovery flow without any redirects.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...).  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Create Verification Flow for Browser Clients\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserVerificationFlow: (returnTo, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/verification/browser`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (returnTo !== undefined) {\n                localVarQueryParameter['return_to'] = returnTo;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint initiates a login flow for native apps that do not use a browser, such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error will be returned unless the URL query parameter `?refresh=true` is set.  To fetch an existing login flow call `/self-service/login/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks, including CSRF login attacks.  In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `session_aal1_required`: Multi-factor auth (e.g. 2fa) was requested but the user has no session yet. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Login Flow for Native Apps\n         * @param {boolean} [refresh] Refresh a login session  If set to true, this will refresh an existing login session by asking the user to sign in again. This will reset the authenticated_at time of the session.\n         * @param {string} [aal] Request a Specific AuthenticationMethod Assurance Level  Use this parameter to upgrade an existing session\\&#39;s authenticator assurance level (AAL). This allows you to ask for multi-factor authentication. When an identity sign in using e.g. username+password, the AAL is 1. If you wish to \\&quot;upgrade\\&quot; the session\\&#39;s security by asking the user to perform TOTP / WebAuth/ ... you would set this to \\&quot;aal2\\&quot;.\n         * @param {string} [xSessionToken] The Session Token of the Identity performing the settings flow.\n         * @param {boolean} [returnSessionTokenExchangeCode] EnableSessionTokenExchangeCode requests the login flow to include a code that can be used to retrieve the session token after the login flow has been completed.\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {string} [via] Via should contain the identity\\&#39;s credential the code should be sent to. Only relevant in aal2 flows.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeLoginFlow: (refresh, aal, xSessionToken, returnSessionTokenExchangeCode, returnTo, via, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/login/api`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (refresh !== undefined) {\n                localVarQueryParameter['refresh'] = refresh;\n            }\n            if (aal !== undefined) {\n                localVarQueryParameter['aal'] = aal;\n            }\n            if (returnSessionTokenExchangeCode !== undefined) {\n                localVarQueryParameter['return_session_token_exchange_code'] = returnSessionTokenExchangeCode;\n            }\n            if (returnTo !== undefined) {\n                localVarQueryParameter['return_to'] = returnTo;\n            }\n            if (via !== undefined) {\n                localVarQueryParameter['via'] = via;\n            }\n            if (xSessionToken != null) {\n                localVarHeaderParameter['X-Session-Token'] = String(xSessionToken);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint initiates a recovery flow for API clients such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error.  On an existing recovery flow, use the `getRecoveryFlow` API endpoint.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Create Recovery Flow for Native Apps\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeRecoveryFlow: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/recovery/api`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint initiates a registration flow for API clients such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error will be returned unless the URL query parameter `?refresh=true` is set.  To fetch an existing registration flow call `/self-service/registration/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Registration Flow for Native Apps\n         * @param {boolean} [returnSessionTokenExchangeCode] EnableSessionTokenExchangeCode requests the login flow to include a code that can be used to retrieve the session token after the login flow has been completed.\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeRegistrationFlow: (returnSessionTokenExchangeCode, returnTo, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/registration/api`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (returnSessionTokenExchangeCode !== undefined) {\n                localVarQueryParameter['return_session_token_exchange_code'] = returnSessionTokenExchangeCode;\n            }\n            if (returnTo !== undefined) {\n                localVarQueryParameter['return_to'] = returnTo;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint initiates a settings flow for API clients such as mobile devices, smart TVs, and so on. You must provide a valid Ory Kratos Session Token for this endpoint to respond with HTTP 200 OK.  To fetch an existing settings flow call `/self-service/settings/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Create Settings Flow for Native Apps\n         * @param {string} [xSessionToken] The Session Token of the Identity performing the settings flow.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeSettingsFlow: (xSessionToken, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/settings/api`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (xSessionToken != null) {\n                localVarHeaderParameter['X-Session-Token'] = String(xSessionToken);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint initiates a verification flow for API clients such as mobile devices, smart TVs, and so on.  To fetch an existing verification flow call `/self-service/verification/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Create Verification Flow for Native Apps\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeVerificationFlow: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/verification/api`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Calling this endpoint invalidates all except the current session that belong to the logged-in user. Session data are not deleted.\n         * @summary Disable my other sessions\n         * @param {string} [xSessionToken] Set the Session Token when calling from non-browser clients. A session token has a format of &#x60;MP2YWEMeM8MxjkGKpH4dqOQ4Q4DlSPaj&#x60;.\n         * @param {string} [cookie] Set the Cookie Header. This is especially useful when calling this endpoint from a server-side application. In that scenario you must include the HTTP Cookie Header which originally was included in the request to your server. An example of a session in the HTTP Cookie Header is: &#x60;ory_kratos_session&#x3D;a19iOVAbdzdgl70Rq1QZmrKmcjDtdsviCTZx7m9a9yHIUS8Wa9T7hvqyGTsLHi6Qifn2WUfpAKx9DWp0SJGleIn9vh2YF4A16id93kXFTgIgmwIOvbVAScyrx7yVl6bPZnCx27ec4WQDtaTewC1CpgudeDV2jQQnSaCP6ny3xa8qLH-QUgYqdQuoA_LF1phxgRCUfIrCLQOkolX5nv3ze_f&#x3D;&#x3D;&#x60;.  It is ok if more than one cookie are included here as all other cookies will be ignored.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        disableMyOtherSessions: (xSessionToken, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/sessions`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (xSessionToken != null) {\n                localVarHeaderParameter['X-Session-Token'] = String(xSessionToken);\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Calling this endpoint invalidates the specified session. The current session cannot be revoked. Session data are not deleted.\n         * @summary Disable one of my sessions\n         * @param {string} id ID is the session\\&#39;s ID.\n         * @param {string} [xSessionToken] Set the Session Token when calling from non-browser clients. A session token has a format of &#x60;MP2YWEMeM8MxjkGKpH4dqOQ4Q4DlSPaj&#x60;.\n         * @param {string} [cookie] Set the Cookie Header. This is especially useful when calling this endpoint from a server-side application. In that scenario you must include the HTTP Cookie Header which originally was included in the request to your server. An example of a session in the HTTP Cookie Header is: &#x60;ory_kratos_session&#x3D;a19iOVAbdzdgl70Rq1QZmrKmcjDtdsviCTZx7m9a9yHIUS8Wa9T7hvqyGTsLHi6Qifn2WUfpAKx9DWp0SJGleIn9vh2YF4A16id93kXFTgIgmwIOvbVAScyrx7yVl6bPZnCx27ec4WQDtaTewC1CpgudeDV2jQQnSaCP6ny3xa8qLH-QUgYqdQuoA_LF1phxgRCUfIrCLQOkolX5nv3ze_f&#x3D;&#x3D;&#x60;.  It is ok if more than one cookie are included here as all other cookies will be ignored.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        disableMySession: (id, xSessionToken, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('disableMySession', 'id', id);\n            const localVarPath = `/sessions/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (xSessionToken != null) {\n                localVarHeaderParameter['X-Session-Token'] = String(xSessionToken);\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         *\n         * @summary Exchange Session Token\n         * @param {string} initCode The part of the code return when initializing the flow.\n         * @param {string} returnToCode The part of the code returned by the return_to URL.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        exchangeSessionToken: (initCode, returnToCode, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'initCode' is not null or undefined\n            assertParamExists('exchangeSessionToken', 'initCode', initCode);\n            // verify required parameter 'returnToCode' is not null or undefined\n            assertParamExists('exchangeSessionToken', 'returnToCode', returnToCode);\n            const localVarPath = `/sessions/token-exchange`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (initCode !== undefined) {\n                localVarQueryParameter['init_code'] = initCode;\n            }\n            if (returnToCode !== undefined) {\n                localVarQueryParameter['return_to_code'] = returnToCode;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint returns the error associated with a user-facing self service errors.  This endpoint supports stub values to help you implement the error UI:  `?id=stub:500` - returns a stub 500 (Internal Server Error) error.  More information can be found at [Ory Kratos User User Facing Error Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-facing-errors).\n         * @summary Get User-Flow Errors\n         * @param {string} id Error is the error\\&#39;s ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getFlowError: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getFlowError', 'id', id);\n            const localVarPath = `/self-service/errors`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (id !== undefined) {\n                localVarQueryParameter['id'] = id;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint returns a login flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/login\\', async function (req, res) { const flow = await client.getLoginFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'login\\', flow) }) ```  This request may fail due to several reasons. The `error.id` can be one of:  `session_already_available`: The user is already signed in. `self_service_flow_expired`: The flow is expired and you should request a new one.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Get Login Flow\n         * @param {string} id The Login Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/login?flow&#x3D;abcde&#x60;).\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getLoginFlow: (id, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getLoginFlow', 'id', id);\n            const localVarPath = `/self-service/login/flows`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (id !== undefined) {\n                localVarQueryParameter['id'] = id;\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint returns a recovery flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/recovery\\', async function (req, res) { const flow = await client.getRecoveryFlow(req.header(\\'Cookie\\'), req.query[\\'flow\\'])  res.render(\\'recovery\\', flow) }) ```  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Get Recovery Flow\n         * @param {string} id The Flow ID  The value for this parameter comes from &#x60;request&#x60; URL Query parameter sent to your application (e.g. &#x60;/recovery?flow&#x3D;abcde&#x60;).\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRecoveryFlow: (id, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getRecoveryFlow', 'id', id);\n            const localVarPath = `/self-service/recovery/flows`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (id !== undefined) {\n                localVarQueryParameter['id'] = id;\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint returns a registration flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/registration\\', async function (req, res) { const flow = await client.getRegistrationFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'registration\\', flow) }) ```  This request may fail due to several reasons. The `error.id` can be one of:  `session_already_available`: The user is already signed in. `self_service_flow_expired`: The flow is expired and you should request a new one.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Get Registration Flow\n         * @param {string} id The Registration Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/registration?flow&#x3D;abcde&#x60;).\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRegistrationFlow: (id, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getRegistrationFlow', 'id', id);\n            const localVarPath = `/self-service/registration/flows`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (id !== undefined) {\n                localVarQueryParameter['id'] = id;\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * When accessing this endpoint through Ory Kratos\\' Public API you must ensure that either the Ory Kratos Session Cookie or the Ory Kratos Session Token are set.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  You can access this endpoint without credentials when using Ory Kratos\\' Admin API.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The flow was interrupted with `session_refresh_required` but apparently some other identity logged in instead.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Get Settings Flow\n         * @param {string} id ID is the Settings Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/settings?flow&#x3D;abcde&#x60;).\n         * @param {string} [xSessionToken] The Session Token  When using the SDK in an app without a browser, please include the session token here.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSettingsFlow: (id, xSessionToken, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getSettingsFlow', 'id', id);\n            const localVarPath = `/self-service/settings/flows`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (id !== undefined) {\n                localVarQueryParameter['id'] = id;\n            }\n            if (xSessionToken != null) {\n                localVarHeaderParameter['X-Session-Token'] = String(xSessionToken);\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint returns a verification flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/recovery\\', async function (req, res) { const flow = await client.getVerificationFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'verification\\', flow) }) ```  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Get Verification Flow\n         * @param {string} id The Flow ID  The value for this parameter comes from &#x60;request&#x60; URL Query parameter sent to your application (e.g. &#x60;/verification?flow&#x3D;abcde&#x60;).\n         * @param {string} [cookie] HTTP Cookies  When using the SDK on the server side you must include the HTTP Cookie Header originally sent to your HTTP handler here.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVerificationFlow: (id, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getVerificationFlow', 'id', id);\n            const localVarPath = `/self-service/verification/flows`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (id !== undefined) {\n                localVarQueryParameter['id'] = id;\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint provides JavaScript which is needed in order to perform WebAuthn login and registration.  If you are building a JavaScript Browser App (e.g. in ReactJS or AngularJS) you will need to load this file:  ```html <script src=\\\"https://public-kratos.example.org/.well-known/ory/webauthn.js\\\" type=\\\"script\\\" async /> ```  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Get WebAuthn JavaScript\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getWebAuthnJavaScript: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/.well-known/ory/webauthn.js`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoints returns all other active sessions that belong to the logged-in user. The current session can be retrieved by calling the `/sessions/whoami` endpoint.\n         * @summary Get My Active Sessions\n         * @param {number} [perPage] Deprecated Items per Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This is the number of items per page.\n         * @param {number} [page] Deprecated Pagination Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This value is currently an integer, but it is not sequential. The value is not the page number, but a reference. The next page can be any number and some numbers might return an empty list.  For example, page 2 might not follow after page 1. And even if page 3 and 5 exist, but page 4 might not exist. The first page can be retrieved by omitting this parameter. Following page pointers will be returned in the &#x60;Link&#x60; header.\n         * @param {number} [pageSize] Page Size  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [xSessionToken] Set the Session Token when calling from non-browser clients. A session token has a format of &#x60;MP2YWEMeM8MxjkGKpH4dqOQ4Q4DlSPaj&#x60;.\n         * @param {string} [cookie] Set the Cookie Header. This is especially useful when calling this endpoint from a server-side application. In that scenario you must include the HTTP Cookie Header which originally was included in the request to your server. An example of a session in the HTTP Cookie Header is: &#x60;ory_kratos_session&#x3D;a19iOVAbdzdgl70Rq1QZmrKmcjDtdsviCTZx7m9a9yHIUS8Wa9T7hvqyGTsLHi6Qifn2WUfpAKx9DWp0SJGleIn9vh2YF4A16id93kXFTgIgmwIOvbVAScyrx7yVl6bPZnCx27ec4WQDtaTewC1CpgudeDV2jQQnSaCP6ny3xa8qLH-QUgYqdQuoA_LF1phxgRCUfIrCLQOkolX5nv3ze_f&#x3D;&#x3D;&#x60;.  It is ok if more than one cookie are included here as all other cookies will be ignored.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listMySessions: (perPage, page, pageSize, pageToken, xSessionToken, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/sessions`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (perPage !== undefined) {\n                localVarQueryParameter['per_page'] = perPage;\n            }\n            if (page !== undefined) {\n                localVarQueryParameter['page'] = page;\n            }\n            if (pageSize !== undefined) {\n                localVarQueryParameter['page_size'] = pageSize;\n            }\n            if (pageToken !== undefined) {\n                localVarQueryParameter['page_token'] = pageToken;\n            }\n            if (xSessionToken != null) {\n                localVarHeaderParameter['X-Session-Token'] = String(xSessionToken);\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to log out an identity using an Ory Session Token. If the Ory Session Token was successfully revoked, the server returns a 204 No Content response. A 204 No Content response is also sent when the Ory Session Token has been revoked already before.  If the Ory Session Token is malformed or does not exist a 403 Forbidden response will be returned.  This endpoint does not remove any HTTP Cookies - use the Browser-Based Self-Service Logout Flow instead.\n         * @summary Perform Logout for Native Apps\n         * @param {PerformNativeLogoutBody} performNativeLogoutBody\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        performNativeLogout: (performNativeLogoutBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'performNativeLogoutBody' is not null or undefined\n            assertParamExists('performNativeLogout', 'performNativeLogoutBody', performNativeLogoutBody);\n            const localVarPath = `/self-service/logout/api`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(performNativeLogoutBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Uses the HTTP Headers in the GET request to determine (e.g. by using checking the cookies) who is authenticated. Returns a session object in the body or 401 if the credentials are invalid or no credentials were sent. When the request it successful it adds the user ID to the \\'X-Kratos-Authenticated-Identity-Id\\' header in the response.  If you call this endpoint from a server-side application, you must forward the HTTP Cookie Header to this endpoint:  ```js pseudo-code example router.get(\\'/protected-endpoint\\', async function (req, res) { const session = await client.toSession(undefined, req.header(\\'cookie\\'))  console.log(session) }) ```  When calling this endpoint from a non-browser application (e.g. mobile app) you must include the session token:  ```js pseudo-code example ... const session = await client.toSession(\\\"the-session-token\\\")  console.log(session) ```  When using a token template, the token is included in the `tokenized` field of the session.  ```js pseudo-code example ... const session = await client.toSession(\\\"the-session-token\\\", { tokenize_as: \\\"example-jwt-template\\\" })  console.log(session.tokenized) // The JWT ```  Depending on your configuration this endpoint might return a 403 status code if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  This endpoint is useful for:  AJAX calls. Remember to send credentials and set up CORS correctly! Reverse proxies and API Gateways Server-side calls - use the `X-Session-Token` header!  This endpoint authenticates users by checking:  if the `Cookie` HTTP header was set containing an Ory Kratos Session Cookie; if the `Authorization: bearer <ory-session-token>` HTTP header was set with a valid Ory Kratos Session Token; if the `X-Session-Token` HTTP header was set with a valid Ory Kratos Session Token.  If none of these headers are set or the cookie or token are invalid, the endpoint returns a HTTP 401 status code.  As explained above, this request may fail due to several reasons. The `error.id` can be one of:  `session_inactive`: No active session was found in the request (e.g. no Ory Session Cookie / Ory Session Token). `session_aal2_required`: An active session was found but it does not fulfil the Authenticator Assurance Level, implying that the session must (e.g.) authenticate the second factor.\n         * @summary Check Who the Current HTTP Session Belongs To\n         * @param {string} [xSessionToken] Set the Session Token when calling from non-browser clients. A session token has a format of &#x60;MP2YWEMeM8MxjkGKpH4dqOQ4Q4DlSPaj&#x60;.\n         * @param {string} [cookie] Set the Cookie Header. This is especially useful when calling this endpoint from a server-side application. In that scenario you must include the HTTP Cookie Header which originally was included in the request to your server. An example of a session in the HTTP Cookie Header is: &#x60;ory_kratos_session&#x3D;a19iOVAbdzdgl70Rq1QZmrKmcjDtdsviCTZx7m9a9yHIUS8Wa9T7hvqyGTsLHi6Qifn2WUfpAKx9DWp0SJGleIn9vh2YF4A16id93kXFTgIgmwIOvbVAScyrx7yVl6bPZnCx27ec4WQDtaTewC1CpgudeDV2jQQnSaCP6ny3xa8qLH-QUgYqdQuoA_LF1phxgRCUfIrCLQOkolX5nv3ze_f&#x3D;&#x3D;&#x60;.  It is ok if more than one cookie are included here as all other cookies will be ignored.\n         * @param {string} [tokenizeAs] Returns the session additionally as a token (such as a JWT)  The value of this parameter has to be a valid, configured Ory Session token template. For more information head over to [the documentation](http://ory.sh/docs/identities/session-to-jwt-cors).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        toSession: (xSessionToken, cookie, tokenizeAs, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/sessions/whoami`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (tokenizeAs !== undefined) {\n                localVarQueryParameter['tokenize_as'] = tokenizeAs;\n            }\n            if (xSessionToken != null) {\n                localVarHeaderParameter['X-Session-Token'] = String(xSessionToken);\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to complete a login flow. This endpoint behaves differently for API and browser flows.  API flows expect `application/json` to be sent in the body and responds with HTTP 200 and a application/json body with the session token on success; HTTP 410 if the original flow expired with the appropriate error messages set and optionally a `use_flow_id` parameter in the body; HTTP 400 on form validation errors.  Browser flows expect a Content-Type of `application/x-www-form-urlencoded` or `application/json` to be sent in the body and respond with a HTTP 303 redirect to the post/after login URL or the `return_to` value if it was set and if the login succeeded; a HTTP 303 redirect to the login UI URL with the flow ID containing the validation errors otherwise.  Browser flows with an accept header of `application/json` will not redirect but instead respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors.  If this endpoint is called with `Accept: application/json` in the header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Submit a Login Flow\n         * @param {string} flow The Login Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/login?flow&#x3D;abcde&#x60;).\n         * @param {UpdateLoginFlowBody} updateLoginFlowBody\n         * @param {string} [xSessionToken] The Session Token of the Identity performing the settings flow.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateLoginFlow: (flow, updateLoginFlowBody, xSessionToken, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'flow' is not null or undefined\n            assertParamExists('updateLoginFlow', 'flow', flow);\n            // verify required parameter 'updateLoginFlowBody' is not null or undefined\n            assertParamExists('updateLoginFlow', 'updateLoginFlowBody', updateLoginFlowBody);\n            const localVarPath = `/self-service/login`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (flow !== undefined) {\n                localVarQueryParameter['flow'] = flow;\n            }\n            if (xSessionToken != null) {\n                localVarHeaderParameter['X-Session-Token'] = String(xSessionToken);\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(updateLoginFlowBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint logs out an identity in a self-service manner.  If the `Accept` HTTP header is not set to `application/json`, the browser will be redirected (HTTP 303 See Other) to the `return_to` parameter of the initial request or fall back to `urls.default_return_to`.  If the `Accept` HTTP header is set to `application/json`, a 204 No Content response will be sent on successful logout instead.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...). For API clients you can call the `/self-service/logout/api` URL directly with the Ory Session Token.  More information can be found at [Ory Kratos User Logout Documentation](https://www.ory.sh/docs/next/kratos/self-service/flows/user-logout).\n         * @summary Update Logout Flow\n         * @param {string} [token] A Valid Logout Token  If you do not have a logout token because you only have a session cookie, call &#x60;/self-service/logout/browser&#x60; to generate a URL for this endpoint.\n         * @param {string} [returnTo] The URL to return to after the logout was completed.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateLogoutFlow: (token, returnTo, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/self-service/logout`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (token !== undefined) {\n                localVarQueryParameter['token'] = token;\n            }\n            if (returnTo !== undefined) {\n                localVarQueryParameter['return_to'] = returnTo;\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to update a recovery flow. This endpoint behaves differently for API and browser flows and has several states:  `choose_method` expects `flow` (in the URL query) and `email` (in the body) to be sent and works with API- and Browser-initiated flows. For API clients and Browser clients with HTTP Header `Accept: application/json` it either returns a HTTP 200 OK when the form is valid and HTTP 400 OK when the form is invalid. and a HTTP 303 See Other redirect with a fresh recovery flow if the flow was otherwise invalid (e.g. expired). For Browser clients without HTTP Header `Accept` or with `Accept: text/_*` it returns a HTTP 303 See Other redirect to the Recovery UI URL with the Recovery Flow ID appended. `sent_email` is the success state after `choose_method` for the `link` method and allows the user to request another recovery email. It works for both API and Browser-initiated flows and returns the same responses as the flow in `choose_method` state. `passed_challenge` expects a `token` to be sent in the URL query and given the nature of the flow (\\\"sending a recovery link\\\") does not have any API capabilities. The server responds with a HTTP 303 See Other redirect either to the Settings UI URL (if the link was valid) and instructs the user to update their password, or a redirect to the Recover UI URL with a new Recovery Flow ID which contains an error message that the recovery link was invalid.  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Update Recovery Flow\n         * @param {string} flow The Recovery Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/recovery?flow&#x3D;abcde&#x60;).\n         * @param {UpdateRecoveryFlowBody} updateRecoveryFlowBody\n         * @param {string} [token] Recovery Token  The recovery token which completes the recovery request. If the token is invalid (e.g. expired) an error will be shown to the end-user.  This parameter is usually set in a link and not used by any direct API call.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRecoveryFlow: (flow, updateRecoveryFlowBody, token, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'flow' is not null or undefined\n            assertParamExists('updateRecoveryFlow', 'flow', flow);\n            // verify required parameter 'updateRecoveryFlowBody' is not null or undefined\n            assertParamExists('updateRecoveryFlow', 'updateRecoveryFlowBody', updateRecoveryFlowBody);\n            const localVarPath = `/self-service/recovery`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (flow !== undefined) {\n                localVarQueryParameter['flow'] = flow;\n            }\n            if (token !== undefined) {\n                localVarQueryParameter['token'] = token;\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(updateRecoveryFlowBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to complete a registration flow by sending an identity\\'s traits and password. This endpoint behaves differently for API and browser flows.  API flows expect `application/json` to be sent in the body and respond with HTTP 200 and a application/json body with the created identity success - if the session hook is configured the `session` and `session_token` will also be included; HTTP 410 if the original flow expired with the appropriate error messages set and optionally a `use_flow_id` parameter in the body; HTTP 400 on form validation errors.  Browser flows expect a Content-Type of `application/x-www-form-urlencoded` or `application/json` to be sent in the body and respond with a HTTP 303 redirect to the post/after registration URL or the `return_to` value if it was set and if the registration succeeded; a HTTP 303 redirect to the registration UI URL with the flow ID containing the validation errors otherwise.  Browser flows with an accept header of `application/json` will not redirect but instead respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors.  If this endpoint is called with `Accept: application/json` in the header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Update Registration Flow\n         * @param {string} flow The Registration Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/registration?flow&#x3D;abcde&#x60;).\n         * @param {UpdateRegistrationFlowBody} updateRegistrationFlowBody\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRegistrationFlow: (flow, updateRegistrationFlowBody, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'flow' is not null or undefined\n            assertParamExists('updateRegistrationFlow', 'flow', flow);\n            // verify required parameter 'updateRegistrationFlowBody' is not null or undefined\n            assertParamExists('updateRegistrationFlow', 'updateRegistrationFlowBody', updateRegistrationFlowBody);\n            const localVarPath = `/self-service/registration`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (flow !== undefined) {\n                localVarQueryParameter['flow'] = flow;\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(updateRegistrationFlowBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to complete a settings flow by sending an identity\\'s updated password. This endpoint behaves differently for API and browser flows.  API-initiated flows expect `application/json` to be sent in the body and respond with HTTP 200 and an application/json body with the session token on success; HTTP 303 redirect to a fresh settings flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors. HTTP 401 when the endpoint is called without a valid session token. HTTP 403 when `selfservice.flows.settings.privileged_session_max_age` was reached or the session\\'s AAL is too low. Implies that the user needs to re-authenticate.  Browser flows without HTTP Header `Accept` or with `Accept: text/_*` respond with a HTTP 303 redirect to the post/after settings URL or the `return_to` value if it was set and if the flow succeeded; a HTTP 303 redirect to the Settings UI URL with the flow ID containing the validation errors otherwise. a HTTP 303 redirect to the login endpoint when `selfservice.flows.settings.privileged_session_max_age` was reached or the session\\'s AAL is too low.  Browser flows with HTTP Header `Accept: application/json` respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 401 when the endpoint is called without a valid session cookie. HTTP 403 when the page is accessed without a session cookie or the session\\'s AAL is too low. HTTP 400 on form validation errors.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor (happens automatically for server-side browser flows) or change the configuration.  If this endpoint is called with a `Accept: application/json` HTTP header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_refresh_required`: The identity requested to change something that needs a privileged session. Redirect the identity to the login init endpoint with query parameters `?refresh=true&return_to=<the-current-browser-url>`, or initiate a refresh login flow otherwise. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The flow was interrupted with `session_refresh_required` but apparently some other identity logged in instead. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Complete Settings Flow\n         * @param {string} flow The Settings Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/settings?flow&#x3D;abcde&#x60;).\n         * @param {UpdateSettingsFlowBody} updateSettingsFlowBody\n         * @param {string} [xSessionToken] The Session Token of the Identity performing the settings flow.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateSettingsFlow: (flow, updateSettingsFlowBody, xSessionToken, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'flow' is not null or undefined\n            assertParamExists('updateSettingsFlow', 'flow', flow);\n            // verify required parameter 'updateSettingsFlowBody' is not null or undefined\n            assertParamExists('updateSettingsFlow', 'updateSettingsFlowBody', updateSettingsFlowBody);\n            const localVarPath = `/self-service/settings`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (flow !== undefined) {\n                localVarQueryParameter['flow'] = flow;\n            }\n            if (xSessionToken != null) {\n                localVarHeaderParameter['X-Session-Token'] = String(xSessionToken);\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(updateSettingsFlowBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to complete a verification flow. This endpoint behaves differently for API and browser flows and has several states:  `choose_method` expects `flow` (in the URL query) and `email` (in the body) to be sent and works with API- and Browser-initiated flows. For API clients and Browser clients with HTTP Header `Accept: application/json` it either returns a HTTP 200 OK when the form is valid and HTTP 400 OK when the form is invalid and a HTTP 303 See Other redirect with a fresh verification flow if the flow was otherwise invalid (e.g. expired). For Browser clients without HTTP Header `Accept` or with `Accept: text/_*` it returns a HTTP 303 See Other redirect to the Verification UI URL with the Verification Flow ID appended. `sent_email` is the success state after `choose_method` when using the `link` method and allows the user to request another verification email. It works for both API and Browser-initiated flows and returns the same responses as the flow in `choose_method` state. `passed_challenge` expects a `token` to be sent in the URL query and given the nature of the flow (\\\"sending a verification link\\\") does not have any API capabilities. The server responds with a HTTP 303 See Other redirect either to the Settings UI URL (if the link was valid) and instructs the user to update their password, or a redirect to the Verification UI URL with a new Verification Flow ID which contains an error message that the verification link was invalid.  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Complete Verification Flow\n         * @param {string} flow The Verification Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/verification?flow&#x3D;abcde&#x60;).\n         * @param {UpdateVerificationFlowBody} updateVerificationFlowBody\n         * @param {string} [token] Verification Token  The verification token which completes the verification request. If the token is invalid (e.g. expired) an error will be shown to the end-user.  This parameter is usually set in a link and not used by any direct API call.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateVerificationFlow: (flow, updateVerificationFlowBody, token, cookie, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'flow' is not null or undefined\n            assertParamExists('updateVerificationFlow', 'flow', flow);\n            // verify required parameter 'updateVerificationFlowBody' is not null or undefined\n            assertParamExists('updateVerificationFlow', 'updateVerificationFlowBody', updateVerificationFlowBody);\n            const localVarPath = `/self-service/verification`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (flow !== undefined) {\n                localVarQueryParameter['flow'] = flow;\n            }\n            if (token !== undefined) {\n                localVarQueryParameter['token'] = token;\n            }\n            if (cookie != null) {\n                localVarHeaderParameter['Cookie'] = String(cookie);\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(updateVerificationFlowBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * FrontendApi - functional programming interface\n * @export\n */\nexport const FrontendApiFp = function (configuration) {\n    const localVarAxiosParamCreator = FrontendApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * This endpoint initializes a browser-based user login flow. This endpoint will set the appropriate cookies and anti-CSRF measures required for browser-based flows.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.login.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists already, the browser will be redirected to `urls.default_redirect_url` unless the query parameter `?refresh=true` was set.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `session_aal1_required`: Multi-factor auth (e.g. 2fa) was requested but the user has no session yet. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  The optional query parameter login_challenge is set when using Kratos with Hydra in an OAuth2 flow. See the oauth2_provider.url configuration option.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Login Flow for Browsers\n         * @param {boolean} [refresh] Refresh a login session  If set to true, this will refresh an existing login session by asking the user to sign in again. This will reset the authenticated_at time of the session.\n         * @param {string} [aal] Request a Specific AuthenticationMethod Assurance Level  Use this parameter to upgrade an existing session\\&#39;s authenticator assurance level (AAL). This allows you to ask for multi-factor authentication. When an identity sign in using e.g. username+password, the AAL is 1. If you wish to \\&quot;upgrade\\&quot; the session\\&#39;s security by asking the user to perform TOTP / WebAuth/ ... you would set this to \\&quot;aal2\\&quot;.\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {string} [loginChallenge] An optional Hydra login challenge. If present, Kratos will cooperate with Ory Hydra to act as an OAuth2 identity provider.  The value for this parameter comes from &#x60;login_challenge&#x60; URL Query parameter sent to your application (e.g. &#x60;/login?login_challenge&#x3D;abcde&#x60;).\n         * @param {string} [organization] An optional organization ID that should be used for logging this user in. This parameter is only effective in the Ory Network.\n         * @param {string} [via] Via should contain the identity\\&#39;s credential the code should be sent to. Only relevant in aal2 flows.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserLoginFlow(refresh, aal, returnTo, cookie, loginChallenge, organization, via, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createBrowserLoginFlow(refresh, aal, returnTo, cookie, loginChallenge, organization, via, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.createBrowserLoginFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint initializes a browser-based user logout flow and a URL which can be used to log out the user.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...). For API clients you can call the `/self-service/logout/api` URL directly with the Ory Session Token.  The URL is only valid for the currently signed in user. If no user is signed in, this endpoint returns a 401 error.  When calling this endpoint from a backend, please ensure to properly forward the HTTP cookies.\n         * @summary Create a Logout URL for Browsers\n         * @param {string} [cookie] HTTP Cookies  If you call this endpoint from a backend, please include the original Cookie header in the request.\n         * @param {string} [returnTo] Return to URL  The URL to which the browser should be redirected to after the logout has been performed.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserLogoutFlow(cookie, returnTo, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createBrowserLogoutFlow(cookie, returnTo, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.createBrowserLogoutFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint initializes a browser-based account recovery flow. Once initialized, the browser will be redirected to `selfservice.flows.recovery.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists, the browser is returned to the configured return URL.  If this endpoint is called via an AJAX request, the response contains the recovery flow without any redirects or a 400 bad request error if the user is already authenticated.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Create Recovery Flow for Browsers\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserRecoveryFlow(returnTo, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createBrowserRecoveryFlow(returnTo, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.createBrowserRecoveryFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint initializes a browser-based user registration flow. This endpoint will set the appropriate cookies and anti-CSRF measures required for browser-based flows.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.registration.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists already, the browser will be redirected to `urls.default_redirect_url`.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  If this endpoint is called via an AJAX request, the response contains the registration flow without a redirect.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Registration Flow for Browsers\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {string} [loginChallenge] Ory OAuth 2.0 Login Challenge.  If set will cooperate with Ory OAuth2 and OpenID to act as an OAuth2 server / OpenID Provider.  The value for this parameter comes from &#x60;login_challenge&#x60; URL Query parameter sent to your application (e.g. &#x60;/registration?login_challenge&#x3D;abcde&#x60;).  This feature is compatible with Ory Hydra when not running on the Ory Network.\n         * @param {string} [afterVerificationReturnTo] The URL to return the browser to after the verification flow was completed.  After the registration flow is completed, the user will be sent a verification email. Upon completing the verification flow, this URL will be used to override the default &#x60;selfservice.flows.verification.after.default_redirect_to&#x60; value.\n         * @param {string} [organization]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserRegistrationFlow(returnTo, loginChallenge, afterVerificationReturnTo, organization, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createBrowserRegistrationFlow(returnTo, loginChallenge, afterVerificationReturnTo, organization, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.createBrowserRegistrationFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint initializes a browser-based user settings flow. Once initialized, the browser will be redirected to `selfservice.flows.settings.ui_url` with the flow ID set as the query parameter `?flow=`. If no valid Ory Kratos Session Cookie is included in the request, a login flow will be initialized.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.settings.ui_url` with the flow ID set as the query parameter `?flow=`. If no valid user session was set, the browser will be redirected to the login endpoint.  If this endpoint is called via an AJAX request, the response contains the settings flow without any redirects or a 401 forbidden error if no valid session was set.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor (happens automatically for server-side browser flows) or change the configuration.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Create Settings Flow for Browsers\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserSettingsFlow(returnTo, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createBrowserSettingsFlow(returnTo, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.createBrowserSettingsFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint initializes a browser-based account verification flow. Once initialized, the browser will be redirected to `selfservice.flows.verification.ui_url` with the flow ID set as the query parameter `?flow=`.  If this endpoint is called via an AJAX request, the response contains the recovery flow without any redirects.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...).  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Create Verification Flow for Browser Clients\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserVerificationFlow(returnTo, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createBrowserVerificationFlow(returnTo, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.createBrowserVerificationFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint initiates a login flow for native apps that do not use a browser, such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error will be returned unless the URL query parameter `?refresh=true` is set.  To fetch an existing login flow call `/self-service/login/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks, including CSRF login attacks.  In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `session_aal1_required`: Multi-factor auth (e.g. 2fa) was requested but the user has no session yet. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Login Flow for Native Apps\n         * @param {boolean} [refresh] Refresh a login session  If set to true, this will refresh an existing login session by asking the user to sign in again. This will reset the authenticated_at time of the session.\n         * @param {string} [aal] Request a Specific AuthenticationMethod Assurance Level  Use this parameter to upgrade an existing session\\&#39;s authenticator assurance level (AAL). This allows you to ask for multi-factor authentication. When an identity sign in using e.g. username+password, the AAL is 1. If you wish to \\&quot;upgrade\\&quot; the session\\&#39;s security by asking the user to perform TOTP / WebAuth/ ... you would set this to \\&quot;aal2\\&quot;.\n         * @param {string} [xSessionToken] The Session Token of the Identity performing the settings flow.\n         * @param {boolean} [returnSessionTokenExchangeCode] EnableSessionTokenExchangeCode requests the login flow to include a code that can be used to retrieve the session token after the login flow has been completed.\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {string} [via] Via should contain the identity\\&#39;s credential the code should be sent to. Only relevant in aal2 flows.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeLoginFlow(refresh, aal, xSessionToken, returnSessionTokenExchangeCode, returnTo, via, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createNativeLoginFlow(refresh, aal, xSessionToken, returnSessionTokenExchangeCode, returnTo, via, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.createNativeLoginFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint initiates a recovery flow for API clients such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error.  On an existing recovery flow, use the `getRecoveryFlow` API endpoint.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Create Recovery Flow for Native Apps\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeRecoveryFlow(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createNativeRecoveryFlow(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.createNativeRecoveryFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint initiates a registration flow for API clients such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error will be returned unless the URL query parameter `?refresh=true` is set.  To fetch an existing registration flow call `/self-service/registration/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Registration Flow for Native Apps\n         * @param {boolean} [returnSessionTokenExchangeCode] EnableSessionTokenExchangeCode requests the login flow to include a code that can be used to retrieve the session token after the login flow has been completed.\n         * @param {string} [returnTo] The URL to return the browser to after the flow was completed.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeRegistrationFlow(returnSessionTokenExchangeCode, returnTo, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createNativeRegistrationFlow(returnSessionTokenExchangeCode, returnTo, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.createNativeRegistrationFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint initiates a settings flow for API clients such as mobile devices, smart TVs, and so on. You must provide a valid Ory Kratos Session Token for this endpoint to respond with HTTP 200 OK.  To fetch an existing settings flow call `/self-service/settings/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Create Settings Flow for Native Apps\n         * @param {string} [xSessionToken] The Session Token of the Identity performing the settings flow.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeSettingsFlow(xSessionToken, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createNativeSettingsFlow(xSessionToken, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.createNativeSettingsFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint initiates a verification flow for API clients such as mobile devices, smart TVs, and so on.  To fetch an existing verification flow call `/self-service/verification/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Create Verification Flow for Native Apps\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeVerificationFlow(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createNativeVerificationFlow(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.createNativeVerificationFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Calling this endpoint invalidates all except the current session that belong to the logged-in user. Session data are not deleted.\n         * @summary Disable my other sessions\n         * @param {string} [xSessionToken] Set the Session Token when calling from non-browser clients. A session token has a format of &#x60;MP2YWEMeM8MxjkGKpH4dqOQ4Q4DlSPaj&#x60;.\n         * @param {string} [cookie] Set the Cookie Header. This is especially useful when calling this endpoint from a server-side application. In that scenario you must include the HTTP Cookie Header which originally was included in the request to your server. An example of a session in the HTTP Cookie Header is: &#x60;ory_kratos_session&#x3D;a19iOVAbdzdgl70Rq1QZmrKmcjDtdsviCTZx7m9a9yHIUS8Wa9T7hvqyGTsLHi6Qifn2WUfpAKx9DWp0SJGleIn9vh2YF4A16id93kXFTgIgmwIOvbVAScyrx7yVl6bPZnCx27ec4WQDtaTewC1CpgudeDV2jQQnSaCP6ny3xa8qLH-QUgYqdQuoA_LF1phxgRCUfIrCLQOkolX5nv3ze_f&#x3D;&#x3D;&#x60;.  It is ok if more than one cookie are included here as all other cookies will be ignored.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        disableMyOtherSessions(xSessionToken, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.disableMyOtherSessions(xSessionToken, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.disableMyOtherSessions']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Calling this endpoint invalidates the specified session. The current session cannot be revoked. Session data are not deleted.\n         * @summary Disable one of my sessions\n         * @param {string} id ID is the session\\&#39;s ID.\n         * @param {string} [xSessionToken] Set the Session Token when calling from non-browser clients. A session token has a format of &#x60;MP2YWEMeM8MxjkGKpH4dqOQ4Q4DlSPaj&#x60;.\n         * @param {string} [cookie] Set the Cookie Header. This is especially useful when calling this endpoint from a server-side application. In that scenario you must include the HTTP Cookie Header which originally was included in the request to your server. An example of a session in the HTTP Cookie Header is: &#x60;ory_kratos_session&#x3D;a19iOVAbdzdgl70Rq1QZmrKmcjDtdsviCTZx7m9a9yHIUS8Wa9T7hvqyGTsLHi6Qifn2WUfpAKx9DWp0SJGleIn9vh2YF4A16id93kXFTgIgmwIOvbVAScyrx7yVl6bPZnCx27ec4WQDtaTewC1CpgudeDV2jQQnSaCP6ny3xa8qLH-QUgYqdQuoA_LF1phxgRCUfIrCLQOkolX5nv3ze_f&#x3D;&#x3D;&#x60;.  It is ok if more than one cookie are included here as all other cookies will be ignored.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        disableMySession(id, xSessionToken, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.disableMySession(id, xSessionToken, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.disableMySession']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         *\n         * @summary Exchange Session Token\n         * @param {string} initCode The part of the code return when initializing the flow.\n         * @param {string} returnToCode The part of the code returned by the return_to URL.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        exchangeSessionToken(initCode, returnToCode, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.exchangeSessionToken(initCode, returnToCode, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.exchangeSessionToken']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint returns the error associated with a user-facing self service errors.  This endpoint supports stub values to help you implement the error UI:  `?id=stub:500` - returns a stub 500 (Internal Server Error) error.  More information can be found at [Ory Kratos User User Facing Error Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-facing-errors).\n         * @summary Get User-Flow Errors\n         * @param {string} id Error is the error\\&#39;s ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getFlowError(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getFlowError(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.getFlowError']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint returns a login flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/login\\', async function (req, res) { const flow = await client.getLoginFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'login\\', flow) }) ```  This request may fail due to several reasons. The `error.id` can be one of:  `session_already_available`: The user is already signed in. `self_service_flow_expired`: The flow is expired and you should request a new one.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Get Login Flow\n         * @param {string} id The Login Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/login?flow&#x3D;abcde&#x60;).\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getLoginFlow(id, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getLoginFlow(id, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.getLoginFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint returns a recovery flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/recovery\\', async function (req, res) { const flow = await client.getRecoveryFlow(req.header(\\'Cookie\\'), req.query[\\'flow\\'])  res.render(\\'recovery\\', flow) }) ```  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Get Recovery Flow\n         * @param {string} id The Flow ID  The value for this parameter comes from &#x60;request&#x60; URL Query parameter sent to your application (e.g. &#x60;/recovery?flow&#x3D;abcde&#x60;).\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRecoveryFlow(id, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getRecoveryFlow(id, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.getRecoveryFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint returns a registration flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/registration\\', async function (req, res) { const flow = await client.getRegistrationFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'registration\\', flow) }) ```  This request may fail due to several reasons. The `error.id` can be one of:  `session_already_available`: The user is already signed in. `self_service_flow_expired`: The flow is expired and you should request a new one.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Get Registration Flow\n         * @param {string} id The Registration Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/registration?flow&#x3D;abcde&#x60;).\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRegistrationFlow(id, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getRegistrationFlow(id, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.getRegistrationFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * When accessing this endpoint through Ory Kratos\\' Public API you must ensure that either the Ory Kratos Session Cookie or the Ory Kratos Session Token are set.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  You can access this endpoint without credentials when using Ory Kratos\\' Admin API.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The flow was interrupted with `session_refresh_required` but apparently some other identity logged in instead.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Get Settings Flow\n         * @param {string} id ID is the Settings Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/settings?flow&#x3D;abcde&#x60;).\n         * @param {string} [xSessionToken] The Session Token  When using the SDK in an app without a browser, please include the session token here.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSettingsFlow(id, xSessionToken, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getSettingsFlow(id, xSessionToken, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.getSettingsFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint returns a verification flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/recovery\\', async function (req, res) { const flow = await client.getVerificationFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'verification\\', flow) }) ```  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Get Verification Flow\n         * @param {string} id The Flow ID  The value for this parameter comes from &#x60;request&#x60; URL Query parameter sent to your application (e.g. &#x60;/verification?flow&#x3D;abcde&#x60;).\n         * @param {string} [cookie] HTTP Cookies  When using the SDK on the server side you must include the HTTP Cookie Header originally sent to your HTTP handler here.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVerificationFlow(id, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getVerificationFlow(id, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.getVerificationFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint provides JavaScript which is needed in order to perform WebAuthn login and registration.  If you are building a JavaScript Browser App (e.g. in ReactJS or AngularJS) you will need to load this file:  ```html <script src=\\\"https://public-kratos.example.org/.well-known/ory/webauthn.js\\\" type=\\\"script\\\" async /> ```  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Get WebAuthn JavaScript\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getWebAuthnJavaScript(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getWebAuthnJavaScript(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.getWebAuthnJavaScript']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoints returns all other active sessions that belong to the logged-in user. The current session can be retrieved by calling the `/sessions/whoami` endpoint.\n         * @summary Get My Active Sessions\n         * @param {number} [perPage] Deprecated Items per Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This is the number of items per page.\n         * @param {number} [page] Deprecated Pagination Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This value is currently an integer, but it is not sequential. The value is not the page number, but a reference. The next page can be any number and some numbers might return an empty list.  For example, page 2 might not follow after page 1. And even if page 3 and 5 exist, but page 4 might not exist. The first page can be retrieved by omitting this parameter. Following page pointers will be returned in the &#x60;Link&#x60; header.\n         * @param {number} [pageSize] Page Size  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [xSessionToken] Set the Session Token when calling from non-browser clients. A session token has a format of &#x60;MP2YWEMeM8MxjkGKpH4dqOQ4Q4DlSPaj&#x60;.\n         * @param {string} [cookie] Set the Cookie Header. This is especially useful when calling this endpoint from a server-side application. In that scenario you must include the HTTP Cookie Header which originally was included in the request to your server. An example of a session in the HTTP Cookie Header is: &#x60;ory_kratos_session&#x3D;a19iOVAbdzdgl70Rq1QZmrKmcjDtdsviCTZx7m9a9yHIUS8Wa9T7hvqyGTsLHi6Qifn2WUfpAKx9DWp0SJGleIn9vh2YF4A16id93kXFTgIgmwIOvbVAScyrx7yVl6bPZnCx27ec4WQDtaTewC1CpgudeDV2jQQnSaCP6ny3xa8qLH-QUgYqdQuoA_LF1phxgRCUfIrCLQOkolX5nv3ze_f&#x3D;&#x3D;&#x60;.  It is ok if more than one cookie are included here as all other cookies will be ignored.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listMySessions(perPage, page, pageSize, pageToken, xSessionToken, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listMySessions(perPage, page, pageSize, pageToken, xSessionToken, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.listMySessions']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to log out an identity using an Ory Session Token. If the Ory Session Token was successfully revoked, the server returns a 204 No Content response. A 204 No Content response is also sent when the Ory Session Token has been revoked already before.  If the Ory Session Token is malformed or does not exist a 403 Forbidden response will be returned.  This endpoint does not remove any HTTP Cookies - use the Browser-Based Self-Service Logout Flow instead.\n         * @summary Perform Logout for Native Apps\n         * @param {PerformNativeLogoutBody} performNativeLogoutBody\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        performNativeLogout(performNativeLogoutBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.performNativeLogout(performNativeLogoutBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.performNativeLogout']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Uses the HTTP Headers in the GET request to determine (e.g. by using checking the cookies) who is authenticated. Returns a session object in the body or 401 if the credentials are invalid or no credentials were sent. When the request it successful it adds the user ID to the \\'X-Kratos-Authenticated-Identity-Id\\' header in the response.  If you call this endpoint from a server-side application, you must forward the HTTP Cookie Header to this endpoint:  ```js pseudo-code example router.get(\\'/protected-endpoint\\', async function (req, res) { const session = await client.toSession(undefined, req.header(\\'cookie\\'))  console.log(session) }) ```  When calling this endpoint from a non-browser application (e.g. mobile app) you must include the session token:  ```js pseudo-code example ... const session = await client.toSession(\\\"the-session-token\\\")  console.log(session) ```  When using a token template, the token is included in the `tokenized` field of the session.  ```js pseudo-code example ... const session = await client.toSession(\\\"the-session-token\\\", { tokenize_as: \\\"example-jwt-template\\\" })  console.log(session.tokenized) // The JWT ```  Depending on your configuration this endpoint might return a 403 status code if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  This endpoint is useful for:  AJAX calls. Remember to send credentials and set up CORS correctly! Reverse proxies and API Gateways Server-side calls - use the `X-Session-Token` header!  This endpoint authenticates users by checking:  if the `Cookie` HTTP header was set containing an Ory Kratos Session Cookie; if the `Authorization: bearer <ory-session-token>` HTTP header was set with a valid Ory Kratos Session Token; if the `X-Session-Token` HTTP header was set with a valid Ory Kratos Session Token.  If none of these headers are set or the cookie or token are invalid, the endpoint returns a HTTP 401 status code.  As explained above, this request may fail due to several reasons. The `error.id` can be one of:  `session_inactive`: No active session was found in the request (e.g. no Ory Session Cookie / Ory Session Token). `session_aal2_required`: An active session was found but it does not fulfil the Authenticator Assurance Level, implying that the session must (e.g.) authenticate the second factor.\n         * @summary Check Who the Current HTTP Session Belongs To\n         * @param {string} [xSessionToken] Set the Session Token when calling from non-browser clients. A session token has a format of &#x60;MP2YWEMeM8MxjkGKpH4dqOQ4Q4DlSPaj&#x60;.\n         * @param {string} [cookie] Set the Cookie Header. This is especially useful when calling this endpoint from a server-side application. In that scenario you must include the HTTP Cookie Header which originally was included in the request to your server. An example of a session in the HTTP Cookie Header is: &#x60;ory_kratos_session&#x3D;a19iOVAbdzdgl70Rq1QZmrKmcjDtdsviCTZx7m9a9yHIUS8Wa9T7hvqyGTsLHi6Qifn2WUfpAKx9DWp0SJGleIn9vh2YF4A16id93kXFTgIgmwIOvbVAScyrx7yVl6bPZnCx27ec4WQDtaTewC1CpgudeDV2jQQnSaCP6ny3xa8qLH-QUgYqdQuoA_LF1phxgRCUfIrCLQOkolX5nv3ze_f&#x3D;&#x3D;&#x60;.  It is ok if more than one cookie are included here as all other cookies will be ignored.\n         * @param {string} [tokenizeAs] Returns the session additionally as a token (such as a JWT)  The value of this parameter has to be a valid, configured Ory Session token template. For more information head over to [the documentation](http://ory.sh/docs/identities/session-to-jwt-cors).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        toSession(xSessionToken, cookie, tokenizeAs, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.toSession(xSessionToken, cookie, tokenizeAs, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.toSession']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to complete a login flow. This endpoint behaves differently for API and browser flows.  API flows expect `application/json` to be sent in the body and responds with HTTP 200 and a application/json body with the session token on success; HTTP 410 if the original flow expired with the appropriate error messages set and optionally a `use_flow_id` parameter in the body; HTTP 400 on form validation errors.  Browser flows expect a Content-Type of `application/x-www-form-urlencoded` or `application/json` to be sent in the body and respond with a HTTP 303 redirect to the post/after login URL or the `return_to` value if it was set and if the login succeeded; a HTTP 303 redirect to the login UI URL with the flow ID containing the validation errors otherwise.  Browser flows with an accept header of `application/json` will not redirect but instead respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors.  If this endpoint is called with `Accept: application/json` in the header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Submit a Login Flow\n         * @param {string} flow The Login Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/login?flow&#x3D;abcde&#x60;).\n         * @param {UpdateLoginFlowBody} updateLoginFlowBody\n         * @param {string} [xSessionToken] The Session Token of the Identity performing the settings flow.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateLoginFlow(flow, updateLoginFlowBody, xSessionToken, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.updateLoginFlow(flow, updateLoginFlowBody, xSessionToken, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.updateLoginFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint logs out an identity in a self-service manner.  If the `Accept` HTTP header is not set to `application/json`, the browser will be redirected (HTTP 303 See Other) to the `return_to` parameter of the initial request or fall back to `urls.default_return_to`.  If the `Accept` HTTP header is set to `application/json`, a 204 No Content response will be sent on successful logout instead.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...). For API clients you can call the `/self-service/logout/api` URL directly with the Ory Session Token.  More information can be found at [Ory Kratos User Logout Documentation](https://www.ory.sh/docs/next/kratos/self-service/flows/user-logout).\n         * @summary Update Logout Flow\n         * @param {string} [token] A Valid Logout Token  If you do not have a logout token because you only have a session cookie, call &#x60;/self-service/logout/browser&#x60; to generate a URL for this endpoint.\n         * @param {string} [returnTo] The URL to return to after the logout was completed.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateLogoutFlow(token, returnTo, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.updateLogoutFlow(token, returnTo, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.updateLogoutFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to update a recovery flow. This endpoint behaves differently for API and browser flows and has several states:  `choose_method` expects `flow` (in the URL query) and `email` (in the body) to be sent and works with API- and Browser-initiated flows. For API clients and Browser clients with HTTP Header `Accept: application/json` it either returns a HTTP 200 OK when the form is valid and HTTP 400 OK when the form is invalid. and a HTTP 303 See Other redirect with a fresh recovery flow if the flow was otherwise invalid (e.g. expired). For Browser clients without HTTP Header `Accept` or with `Accept: text/_*` it returns a HTTP 303 See Other redirect to the Recovery UI URL with the Recovery Flow ID appended. `sent_email` is the success state after `choose_method` for the `link` method and allows the user to request another recovery email. It works for both API and Browser-initiated flows and returns the same responses as the flow in `choose_method` state. `passed_challenge` expects a `token` to be sent in the URL query and given the nature of the flow (\\\"sending a recovery link\\\") does not have any API capabilities. The server responds with a HTTP 303 See Other redirect either to the Settings UI URL (if the link was valid) and instructs the user to update their password, or a redirect to the Recover UI URL with a new Recovery Flow ID which contains an error message that the recovery link was invalid.  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Update Recovery Flow\n         * @param {string} flow The Recovery Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/recovery?flow&#x3D;abcde&#x60;).\n         * @param {UpdateRecoveryFlowBody} updateRecoveryFlowBody\n         * @param {string} [token] Recovery Token  The recovery token which completes the recovery request. If the token is invalid (e.g. expired) an error will be shown to the end-user.  This parameter is usually set in a link and not used by any direct API call.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRecoveryFlow(flow, updateRecoveryFlowBody, token, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.updateRecoveryFlow(flow, updateRecoveryFlowBody, token, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.updateRecoveryFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to complete a registration flow by sending an identity\\'s traits and password. This endpoint behaves differently for API and browser flows.  API flows expect `application/json` to be sent in the body and respond with HTTP 200 and a application/json body with the created identity success - if the session hook is configured the `session` and `session_token` will also be included; HTTP 410 if the original flow expired with the appropriate error messages set and optionally a `use_flow_id` parameter in the body; HTTP 400 on form validation errors.  Browser flows expect a Content-Type of `application/x-www-form-urlencoded` or `application/json` to be sent in the body and respond with a HTTP 303 redirect to the post/after registration URL or the `return_to` value if it was set and if the registration succeeded; a HTTP 303 redirect to the registration UI URL with the flow ID containing the validation errors otherwise.  Browser flows with an accept header of `application/json` will not redirect but instead respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors.  If this endpoint is called with `Accept: application/json` in the header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Update Registration Flow\n         * @param {string} flow The Registration Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/registration?flow&#x3D;abcde&#x60;).\n         * @param {UpdateRegistrationFlowBody} updateRegistrationFlowBody\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRegistrationFlow(flow, updateRegistrationFlowBody, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.updateRegistrationFlow(flow, updateRegistrationFlowBody, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.updateRegistrationFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to complete a settings flow by sending an identity\\'s updated password. This endpoint behaves differently for API and browser flows.  API-initiated flows expect `application/json` to be sent in the body and respond with HTTP 200 and an application/json body with the session token on success; HTTP 303 redirect to a fresh settings flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors. HTTP 401 when the endpoint is called without a valid session token. HTTP 403 when `selfservice.flows.settings.privileged_session_max_age` was reached or the session\\'s AAL is too low. Implies that the user needs to re-authenticate.  Browser flows without HTTP Header `Accept` or with `Accept: text/_*` respond with a HTTP 303 redirect to the post/after settings URL or the `return_to` value if it was set and if the flow succeeded; a HTTP 303 redirect to the Settings UI URL with the flow ID containing the validation errors otherwise. a HTTP 303 redirect to the login endpoint when `selfservice.flows.settings.privileged_session_max_age` was reached or the session\\'s AAL is too low.  Browser flows with HTTP Header `Accept: application/json` respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 401 when the endpoint is called without a valid session cookie. HTTP 403 when the page is accessed without a session cookie or the session\\'s AAL is too low. HTTP 400 on form validation errors.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor (happens automatically for server-side browser flows) or change the configuration.  If this endpoint is called with a `Accept: application/json` HTTP header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_refresh_required`: The identity requested to change something that needs a privileged session. Redirect the identity to the login init endpoint with query parameters `?refresh=true&return_to=<the-current-browser-url>`, or initiate a refresh login flow otherwise. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The flow was interrupted with `session_refresh_required` but apparently some other identity logged in instead. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Complete Settings Flow\n         * @param {string} flow The Settings Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/settings?flow&#x3D;abcde&#x60;).\n         * @param {UpdateSettingsFlowBody} updateSettingsFlowBody\n         * @param {string} [xSessionToken] The Session Token of the Identity performing the settings flow.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateSettingsFlow(flow, updateSettingsFlowBody, xSessionToken, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.updateSettingsFlow(flow, updateSettingsFlowBody, xSessionToken, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.updateSettingsFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to complete a verification flow. This endpoint behaves differently for API and browser flows and has several states:  `choose_method` expects `flow` (in the URL query) and `email` (in the body) to be sent and works with API- and Browser-initiated flows. For API clients and Browser clients with HTTP Header `Accept: application/json` it either returns a HTTP 200 OK when the form is valid and HTTP 400 OK when the form is invalid and a HTTP 303 See Other redirect with a fresh verification flow if the flow was otherwise invalid (e.g. expired). For Browser clients without HTTP Header `Accept` or with `Accept: text/_*` it returns a HTTP 303 See Other redirect to the Verification UI URL with the Verification Flow ID appended. `sent_email` is the success state after `choose_method` when using the `link` method and allows the user to request another verification email. It works for both API and Browser-initiated flows and returns the same responses as the flow in `choose_method` state. `passed_challenge` expects a `token` to be sent in the URL query and given the nature of the flow (\\\"sending a verification link\\\") does not have any API capabilities. The server responds with a HTTP 303 See Other redirect either to the Settings UI URL (if the link was valid) and instructs the user to update their password, or a redirect to the Verification UI URL with a new Verification Flow ID which contains an error message that the verification link was invalid.  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Complete Verification Flow\n         * @param {string} flow The Verification Flow ID  The value for this parameter comes from &#x60;flow&#x60; URL Query parameter sent to your application (e.g. &#x60;/verification?flow&#x3D;abcde&#x60;).\n         * @param {UpdateVerificationFlowBody} updateVerificationFlowBody\n         * @param {string} [token] Verification Token  The verification token which completes the verification request. If the token is invalid (e.g. expired) an error will be shown to the end-user.  This parameter is usually set in a link and not used by any direct API call.\n         * @param {string} [cookie] HTTP Cookies  When using the SDK in a browser app, on the server side you must include the HTTP Cookie Header sent by the client to your server here. This ensures that CSRF and session cookies are respected.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateVerificationFlow(flow, updateVerificationFlowBody, token, cookie, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.updateVerificationFlow(flow, updateVerificationFlowBody, token, cookie, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['FrontendApi.updateVerificationFlow']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * FrontendApi - factory interface\n * @export\n */\nexport const FrontendApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = FrontendApiFp(configuration);\n    return {\n        /**\n         * This endpoint initializes a browser-based user login flow. This endpoint will set the appropriate cookies and anti-CSRF measures required for browser-based flows.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.login.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists already, the browser will be redirected to `urls.default_redirect_url` unless the query parameter `?refresh=true` was set.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `session_aal1_required`: Multi-factor auth (e.g. 2fa) was requested but the user has no session yet. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  The optional query parameter login_challenge is set when using Kratos with Hydra in an OAuth2 flow. See the oauth2_provider.url configuration option.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Login Flow for Browsers\n         * @param {FrontendApiCreateBrowserLoginFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserLoginFlow(requestParameters = {}, options) {\n            return localVarFp.createBrowserLoginFlow(requestParameters.refresh, requestParameters.aal, requestParameters.returnTo, requestParameters.cookie, requestParameters.loginChallenge, requestParameters.organization, requestParameters.via, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint initializes a browser-based user logout flow and a URL which can be used to log out the user.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...). For API clients you can call the `/self-service/logout/api` URL directly with the Ory Session Token.  The URL is only valid for the currently signed in user. If no user is signed in, this endpoint returns a 401 error.  When calling this endpoint from a backend, please ensure to properly forward the HTTP cookies.\n         * @summary Create a Logout URL for Browsers\n         * @param {FrontendApiCreateBrowserLogoutFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserLogoutFlow(requestParameters = {}, options) {\n            return localVarFp.createBrowserLogoutFlow(requestParameters.cookie, requestParameters.returnTo, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint initializes a browser-based account recovery flow. Once initialized, the browser will be redirected to `selfservice.flows.recovery.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists, the browser is returned to the configured return URL.  If this endpoint is called via an AJAX request, the response contains the recovery flow without any redirects or a 400 bad request error if the user is already authenticated.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Create Recovery Flow for Browsers\n         * @param {FrontendApiCreateBrowserRecoveryFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserRecoveryFlow(requestParameters = {}, options) {\n            return localVarFp.createBrowserRecoveryFlow(requestParameters.returnTo, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint initializes a browser-based user registration flow. This endpoint will set the appropriate cookies and anti-CSRF measures required for browser-based flows.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.registration.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists already, the browser will be redirected to `urls.default_redirect_url`.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  If this endpoint is called via an AJAX request, the response contains the registration flow without a redirect.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Registration Flow for Browsers\n         * @param {FrontendApiCreateBrowserRegistrationFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserRegistrationFlow(requestParameters = {}, options) {\n            return localVarFp.createBrowserRegistrationFlow(requestParameters.returnTo, requestParameters.loginChallenge, requestParameters.afterVerificationReturnTo, requestParameters.organization, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint initializes a browser-based user settings flow. Once initialized, the browser will be redirected to `selfservice.flows.settings.ui_url` with the flow ID set as the query parameter `?flow=`. If no valid Ory Kratos Session Cookie is included in the request, a login flow will be initialized.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.settings.ui_url` with the flow ID set as the query parameter `?flow=`. If no valid user session was set, the browser will be redirected to the login endpoint.  If this endpoint is called via an AJAX request, the response contains the settings flow without any redirects or a 401 forbidden error if no valid session was set.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor (happens automatically for server-side browser flows) or change the configuration.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Create Settings Flow for Browsers\n         * @param {FrontendApiCreateBrowserSettingsFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserSettingsFlow(requestParameters = {}, options) {\n            return localVarFp.createBrowserSettingsFlow(requestParameters.returnTo, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint initializes a browser-based account verification flow. Once initialized, the browser will be redirected to `selfservice.flows.verification.ui_url` with the flow ID set as the query parameter `?flow=`.  If this endpoint is called via an AJAX request, the response contains the recovery flow without any redirects.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...).  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Create Verification Flow for Browser Clients\n         * @param {FrontendApiCreateBrowserVerificationFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createBrowserVerificationFlow(requestParameters = {}, options) {\n            return localVarFp.createBrowserVerificationFlow(requestParameters.returnTo, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint initiates a login flow for native apps that do not use a browser, such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error will be returned unless the URL query parameter `?refresh=true` is set.  To fetch an existing login flow call `/self-service/login/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks, including CSRF login attacks.  In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `session_aal1_required`: Multi-factor auth (e.g. 2fa) was requested but the user has no session yet. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Login Flow for Native Apps\n         * @param {FrontendApiCreateNativeLoginFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeLoginFlow(requestParameters = {}, options) {\n            return localVarFp.createNativeLoginFlow(requestParameters.refresh, requestParameters.aal, requestParameters.xSessionToken, requestParameters.returnSessionTokenExchangeCode, requestParameters.returnTo, requestParameters.via, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint initiates a recovery flow for API clients such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error.  On an existing recovery flow, use the `getRecoveryFlow` API endpoint.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Create Recovery Flow for Native Apps\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeRecoveryFlow(options) {\n            return localVarFp.createNativeRecoveryFlow(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint initiates a registration flow for API clients such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error will be returned unless the URL query parameter `?refresh=true` is set.  To fetch an existing registration flow call `/self-service/registration/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Create Registration Flow for Native Apps\n         * @param {FrontendApiCreateNativeRegistrationFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeRegistrationFlow(requestParameters = {}, options) {\n            return localVarFp.createNativeRegistrationFlow(requestParameters.returnSessionTokenExchangeCode, requestParameters.returnTo, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint initiates a settings flow for API clients such as mobile devices, smart TVs, and so on. You must provide a valid Ory Kratos Session Token for this endpoint to respond with HTTP 200 OK.  To fetch an existing settings flow call `/self-service/settings/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Create Settings Flow for Native Apps\n         * @param {FrontendApiCreateNativeSettingsFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeSettingsFlow(requestParameters = {}, options) {\n            return localVarFp.createNativeSettingsFlow(requestParameters.xSessionToken, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint initiates a verification flow for API clients such as mobile devices, smart TVs, and so on.  To fetch an existing verification flow call `/self-service/verification/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Create Verification Flow for Native Apps\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createNativeVerificationFlow(options) {\n            return localVarFp.createNativeVerificationFlow(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Calling this endpoint invalidates all except the current session that belong to the logged-in user. Session data are not deleted.\n         * @summary Disable my other sessions\n         * @param {FrontendApiDisableMyOtherSessionsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        disableMyOtherSessions(requestParameters = {}, options) {\n            return localVarFp.disableMyOtherSessions(requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Calling this endpoint invalidates the specified session. The current session cannot be revoked. Session data are not deleted.\n         * @summary Disable one of my sessions\n         * @param {FrontendApiDisableMySessionRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        disableMySession(requestParameters, options) {\n            return localVarFp.disableMySession(requestParameters.id, requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         *\n         * @summary Exchange Session Token\n         * @param {FrontendApiExchangeSessionTokenRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        exchangeSessionToken(requestParameters, options) {\n            return localVarFp.exchangeSessionToken(requestParameters.initCode, requestParameters.returnToCode, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint returns the error associated with a user-facing self service errors.  This endpoint supports stub values to help you implement the error UI:  `?id=stub:500` - returns a stub 500 (Internal Server Error) error.  More information can be found at [Ory Kratos User User Facing Error Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-facing-errors).\n         * @summary Get User-Flow Errors\n         * @param {FrontendApiGetFlowErrorRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getFlowError(requestParameters, options) {\n            return localVarFp.getFlowError(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint returns a login flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/login\\', async function (req, res) { const flow = await client.getLoginFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'login\\', flow) }) ```  This request may fail due to several reasons. The `error.id` can be one of:  `session_already_available`: The user is already signed in. `self_service_flow_expired`: The flow is expired and you should request a new one.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Get Login Flow\n         * @param {FrontendApiGetLoginFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getLoginFlow(requestParameters, options) {\n            return localVarFp.getLoginFlow(requestParameters.id, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint returns a recovery flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/recovery\\', async function (req, res) { const flow = await client.getRecoveryFlow(req.header(\\'Cookie\\'), req.query[\\'flow\\'])  res.render(\\'recovery\\', flow) }) ```  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Get Recovery Flow\n         * @param {FrontendApiGetRecoveryFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRecoveryFlow(requestParameters, options) {\n            return localVarFp.getRecoveryFlow(requestParameters.id, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint returns a registration flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/registration\\', async function (req, res) { const flow = await client.getRegistrationFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'registration\\', flow) }) ```  This request may fail due to several reasons. The `error.id` can be one of:  `session_already_available`: The user is already signed in. `self_service_flow_expired`: The flow is expired and you should request a new one.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Get Registration Flow\n         * @param {FrontendApiGetRegistrationFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRegistrationFlow(requestParameters, options) {\n            return localVarFp.getRegistrationFlow(requestParameters.id, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * When accessing this endpoint through Ory Kratos\\' Public API you must ensure that either the Ory Kratos Session Cookie or the Ory Kratos Session Token are set.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  You can access this endpoint without credentials when using Ory Kratos\\' Admin API.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The flow was interrupted with `session_refresh_required` but apparently some other identity logged in instead.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Get Settings Flow\n         * @param {FrontendApiGetSettingsFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSettingsFlow(requestParameters, options) {\n            return localVarFp.getSettingsFlow(requestParameters.id, requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint returns a verification flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/recovery\\', async function (req, res) { const flow = await client.getVerificationFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'verification\\', flow) }) ```  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Get Verification Flow\n         * @param {FrontendApiGetVerificationFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVerificationFlow(requestParameters, options) {\n            return localVarFp.getVerificationFlow(requestParameters.id, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint provides JavaScript which is needed in order to perform WebAuthn login and registration.  If you are building a JavaScript Browser App (e.g. in ReactJS or AngularJS) you will need to load this file:  ```html <script src=\\\"https://public-kratos.example.org/.well-known/ory/webauthn.js\\\" type=\\\"script\\\" async /> ```  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Get WebAuthn JavaScript\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getWebAuthnJavaScript(options) {\n            return localVarFp.getWebAuthnJavaScript(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoints returns all other active sessions that belong to the logged-in user. The current session can be retrieved by calling the `/sessions/whoami` endpoint.\n         * @summary Get My Active Sessions\n         * @param {FrontendApiListMySessionsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listMySessions(requestParameters = {}, options) {\n            return localVarFp.listMySessions(requestParameters.perPage, requestParameters.page, requestParameters.pageSize, requestParameters.pageToken, requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to log out an identity using an Ory Session Token. If the Ory Session Token was successfully revoked, the server returns a 204 No Content response. A 204 No Content response is also sent when the Ory Session Token has been revoked already before.  If the Ory Session Token is malformed or does not exist a 403 Forbidden response will be returned.  This endpoint does not remove any HTTP Cookies - use the Browser-Based Self-Service Logout Flow instead.\n         * @summary Perform Logout for Native Apps\n         * @param {FrontendApiPerformNativeLogoutRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        performNativeLogout(requestParameters, options) {\n            return localVarFp.performNativeLogout(requestParameters.performNativeLogoutBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Uses the HTTP Headers in the GET request to determine (e.g. by using checking the cookies) who is authenticated. Returns a session object in the body or 401 if the credentials are invalid or no credentials were sent. When the request it successful it adds the user ID to the \\'X-Kratos-Authenticated-Identity-Id\\' header in the response.  If you call this endpoint from a server-side application, you must forward the HTTP Cookie Header to this endpoint:  ```js pseudo-code example router.get(\\'/protected-endpoint\\', async function (req, res) { const session = await client.toSession(undefined, req.header(\\'cookie\\'))  console.log(session) }) ```  When calling this endpoint from a non-browser application (e.g. mobile app) you must include the session token:  ```js pseudo-code example ... const session = await client.toSession(\\\"the-session-token\\\")  console.log(session) ```  When using a token template, the token is included in the `tokenized` field of the session.  ```js pseudo-code example ... const session = await client.toSession(\\\"the-session-token\\\", { tokenize_as: \\\"example-jwt-template\\\" })  console.log(session.tokenized) // The JWT ```  Depending on your configuration this endpoint might return a 403 status code if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  This endpoint is useful for:  AJAX calls. Remember to send credentials and set up CORS correctly! Reverse proxies and API Gateways Server-side calls - use the `X-Session-Token` header!  This endpoint authenticates users by checking:  if the `Cookie` HTTP header was set containing an Ory Kratos Session Cookie; if the `Authorization: bearer <ory-session-token>` HTTP header was set with a valid Ory Kratos Session Token; if the `X-Session-Token` HTTP header was set with a valid Ory Kratos Session Token.  If none of these headers are set or the cookie or token are invalid, the endpoint returns a HTTP 401 status code.  As explained above, this request may fail due to several reasons. The `error.id` can be one of:  `session_inactive`: No active session was found in the request (e.g. no Ory Session Cookie / Ory Session Token). `session_aal2_required`: An active session was found but it does not fulfil the Authenticator Assurance Level, implying that the session must (e.g.) authenticate the second factor.\n         * @summary Check Who the Current HTTP Session Belongs To\n         * @param {FrontendApiToSessionRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        toSession(requestParameters = {}, options) {\n            return localVarFp.toSession(requestParameters.xSessionToken, requestParameters.cookie, requestParameters.tokenizeAs, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to complete a login flow. This endpoint behaves differently for API and browser flows.  API flows expect `application/json` to be sent in the body and responds with HTTP 200 and a application/json body with the session token on success; HTTP 410 if the original flow expired with the appropriate error messages set and optionally a `use_flow_id` parameter in the body; HTTP 400 on form validation errors.  Browser flows expect a Content-Type of `application/x-www-form-urlencoded` or `application/json` to be sent in the body and respond with a HTTP 303 redirect to the post/after login URL or the `return_to` value if it was set and if the login succeeded; a HTTP 303 redirect to the login UI URL with the flow ID containing the validation errors otherwise.  Browser flows with an accept header of `application/json` will not redirect but instead respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors.  If this endpoint is called with `Accept: application/json` in the header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Submit a Login Flow\n         * @param {FrontendApiUpdateLoginFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateLoginFlow(requestParameters, options) {\n            return localVarFp.updateLoginFlow(requestParameters.flow, requestParameters.updateLoginFlowBody, requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint logs out an identity in a self-service manner.  If the `Accept` HTTP header is not set to `application/json`, the browser will be redirected (HTTP 303 See Other) to the `return_to` parameter of the initial request or fall back to `urls.default_return_to`.  If the `Accept` HTTP header is set to `application/json`, a 204 No Content response will be sent on successful logout instead.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...). For API clients you can call the `/self-service/logout/api` URL directly with the Ory Session Token.  More information can be found at [Ory Kratos User Logout Documentation](https://www.ory.sh/docs/next/kratos/self-service/flows/user-logout).\n         * @summary Update Logout Flow\n         * @param {FrontendApiUpdateLogoutFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateLogoutFlow(requestParameters = {}, options) {\n            return localVarFp.updateLogoutFlow(requestParameters.token, requestParameters.returnTo, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to update a recovery flow. This endpoint behaves differently for API and browser flows and has several states:  `choose_method` expects `flow` (in the URL query) and `email` (in the body) to be sent and works with API- and Browser-initiated flows. For API clients and Browser clients with HTTP Header `Accept: application/json` it either returns a HTTP 200 OK when the form is valid and HTTP 400 OK when the form is invalid. and a HTTP 303 See Other redirect with a fresh recovery flow if the flow was otherwise invalid (e.g. expired). For Browser clients without HTTP Header `Accept` or with `Accept: text/_*` it returns a HTTP 303 See Other redirect to the Recovery UI URL with the Recovery Flow ID appended. `sent_email` is the success state after `choose_method` for the `link` method and allows the user to request another recovery email. It works for both API and Browser-initiated flows and returns the same responses as the flow in `choose_method` state. `passed_challenge` expects a `token` to be sent in the URL query and given the nature of the flow (\\\"sending a recovery link\\\") does not have any API capabilities. The server responds with a HTTP 303 See Other redirect either to the Settings UI URL (if the link was valid) and instructs the user to update their password, or a redirect to the Recover UI URL with a new Recovery Flow ID which contains an error message that the recovery link was invalid.  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n         * @summary Update Recovery Flow\n         * @param {FrontendApiUpdateRecoveryFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRecoveryFlow(requestParameters, options) {\n            return localVarFp.updateRecoveryFlow(requestParameters.flow, requestParameters.updateRecoveryFlowBody, requestParameters.token, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to complete a registration flow by sending an identity\\'s traits and password. This endpoint behaves differently for API and browser flows.  API flows expect `application/json` to be sent in the body and respond with HTTP 200 and a application/json body with the created identity success - if the session hook is configured the `session` and `session_token` will also be included; HTTP 410 if the original flow expired with the appropriate error messages set and optionally a `use_flow_id` parameter in the body; HTTP 400 on form validation errors.  Browser flows expect a Content-Type of `application/x-www-form-urlencoded` or `application/json` to be sent in the body and respond with a HTTP 303 redirect to the post/after registration URL or the `return_to` value if it was set and if the registration succeeded; a HTTP 303 redirect to the registration UI URL with the flow ID containing the validation errors otherwise.  Browser flows with an accept header of `application/json` will not redirect but instead respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors.  If this endpoint is called with `Accept: application/json` in the header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n         * @summary Update Registration Flow\n         * @param {FrontendApiUpdateRegistrationFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRegistrationFlow(requestParameters, options) {\n            return localVarFp.updateRegistrationFlow(requestParameters.flow, requestParameters.updateRegistrationFlowBody, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to complete a settings flow by sending an identity\\'s updated password. This endpoint behaves differently for API and browser flows.  API-initiated flows expect `application/json` to be sent in the body and respond with HTTP 200 and an application/json body with the session token on success; HTTP 303 redirect to a fresh settings flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors. HTTP 401 when the endpoint is called without a valid session token. HTTP 403 when `selfservice.flows.settings.privileged_session_max_age` was reached or the session\\'s AAL is too low. Implies that the user needs to re-authenticate.  Browser flows without HTTP Header `Accept` or with `Accept: text/_*` respond with a HTTP 303 redirect to the post/after settings URL or the `return_to` value if it was set and if the flow succeeded; a HTTP 303 redirect to the Settings UI URL with the flow ID containing the validation errors otherwise. a HTTP 303 redirect to the login endpoint when `selfservice.flows.settings.privileged_session_max_age` was reached or the session\\'s AAL is too low.  Browser flows with HTTP Header `Accept: application/json` respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 401 when the endpoint is called without a valid session cookie. HTTP 403 when the page is accessed without a session cookie or the session\\'s AAL is too low. HTTP 400 on form validation errors.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor (happens automatically for server-side browser flows) or change the configuration.  If this endpoint is called with a `Accept: application/json` HTTP header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_refresh_required`: The identity requested to change something that needs a privileged session. Redirect the identity to the login init endpoint with query parameters `?refresh=true&return_to=<the-current-browser-url>`, or initiate a refresh login flow otherwise. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The flow was interrupted with `session_refresh_required` but apparently some other identity logged in instead. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n         * @summary Complete Settings Flow\n         * @param {FrontendApiUpdateSettingsFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateSettingsFlow(requestParameters, options) {\n            return localVarFp.updateSettingsFlow(requestParameters.flow, requestParameters.updateSettingsFlowBody, requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to complete a verification flow. This endpoint behaves differently for API and browser flows and has several states:  `choose_method` expects `flow` (in the URL query) and `email` (in the body) to be sent and works with API- and Browser-initiated flows. For API clients and Browser clients with HTTP Header `Accept: application/json` it either returns a HTTP 200 OK when the form is valid and HTTP 400 OK when the form is invalid and a HTTP 303 See Other redirect with a fresh verification flow if the flow was otherwise invalid (e.g. expired). For Browser clients without HTTP Header `Accept` or with `Accept: text/_*` it returns a HTTP 303 See Other redirect to the Verification UI URL with the Verification Flow ID appended. `sent_email` is the success state after `choose_method` when using the `link` method and allows the user to request another verification email. It works for both API and Browser-initiated flows and returns the same responses as the flow in `choose_method` state. `passed_challenge` expects a `token` to be sent in the URL query and given the nature of the flow (\\\"sending a verification link\\\") does not have any API capabilities. The server responds with a HTTP 303 See Other redirect either to the Settings UI URL (if the link was valid) and instructs the user to update their password, or a redirect to the Verification UI URL with a new Verification Flow ID which contains an error message that the verification link was invalid.  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n         * @summary Complete Verification Flow\n         * @param {FrontendApiUpdateVerificationFlowRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateVerificationFlow(requestParameters, options) {\n            return localVarFp.updateVerificationFlow(requestParameters.flow, requestParameters.updateVerificationFlowBody, requestParameters.token, requestParameters.cookie, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * FrontendApi - object-oriented interface\n * @export\n * @class FrontendApi\n * @extends {BaseAPI}\n */\nexport class FrontendApi extends BaseAPI {\n    /**\n     * This endpoint initializes a browser-based user login flow. This endpoint will set the appropriate cookies and anti-CSRF measures required for browser-based flows.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.login.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists already, the browser will be redirected to `urls.default_redirect_url` unless the query parameter `?refresh=true` was set.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `session_aal1_required`: Multi-factor auth (e.g. 2fa) was requested but the user has no session yet. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  The optional query parameter login_challenge is set when using Kratos with Hydra in an OAuth2 flow. See the oauth2_provider.url configuration option.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n     * @summary Create Login Flow for Browsers\n     * @param {FrontendApiCreateBrowserLoginFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    createBrowserLoginFlow(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).createBrowserLoginFlow(requestParameters.refresh, requestParameters.aal, requestParameters.returnTo, requestParameters.cookie, requestParameters.loginChallenge, requestParameters.organization, requestParameters.via, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint initializes a browser-based user logout flow and a URL which can be used to log out the user.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...). For API clients you can call the `/self-service/logout/api` URL directly with the Ory Session Token.  The URL is only valid for the currently signed in user. If no user is signed in, this endpoint returns a 401 error.  When calling this endpoint from a backend, please ensure to properly forward the HTTP cookies.\n     * @summary Create a Logout URL for Browsers\n     * @param {FrontendApiCreateBrowserLogoutFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    createBrowserLogoutFlow(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).createBrowserLogoutFlow(requestParameters.cookie, requestParameters.returnTo, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint initializes a browser-based account recovery flow. Once initialized, the browser will be redirected to `selfservice.flows.recovery.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists, the browser is returned to the configured return URL.  If this endpoint is called via an AJAX request, the response contains the recovery flow without any redirects or a 400 bad request error if the user is already authenticated.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n     * @summary Create Recovery Flow for Browsers\n     * @param {FrontendApiCreateBrowserRecoveryFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    createBrowserRecoveryFlow(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).createBrowserRecoveryFlow(requestParameters.returnTo, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint initializes a browser-based user registration flow. This endpoint will set the appropriate cookies and anti-CSRF measures required for browser-based flows.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.registration.ui_url` with the flow ID set as the query parameter `?flow=`. If a valid user session exists already, the browser will be redirected to `urls.default_redirect_url`.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  If this endpoint is called via an AJAX request, the response contains the registration flow without a redirect.  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n     * @summary Create Registration Flow for Browsers\n     * @param {FrontendApiCreateBrowserRegistrationFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    createBrowserRegistrationFlow(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).createBrowserRegistrationFlow(requestParameters.returnTo, requestParameters.loginChallenge, requestParameters.afterVerificationReturnTo, requestParameters.organization, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint initializes a browser-based user settings flow. Once initialized, the browser will be redirected to `selfservice.flows.settings.ui_url` with the flow ID set as the query parameter `?flow=`. If no valid Ory Kratos Session Cookie is included in the request, a login flow will be initialized.  If this endpoint is opened as a link in the browser, it will be redirected to `selfservice.flows.settings.ui_url` with the flow ID set as the query parameter `?flow=`. If no valid user session was set, the browser will be redirected to the login endpoint.  If this endpoint is called via an AJAX request, the response contains the settings flow without any redirects or a 401 forbidden error if no valid session was set.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor (happens automatically for server-side browser flows) or change the configuration.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration!  This endpoint is NOT INTENDED for clients that do not have a browser (Chrome, Firefox, ...) as cookies are needed.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n     * @summary Create Settings Flow for Browsers\n     * @param {FrontendApiCreateBrowserSettingsFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    createBrowserSettingsFlow(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).createBrowserSettingsFlow(requestParameters.returnTo, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint initializes a browser-based account verification flow. Once initialized, the browser will be redirected to `selfservice.flows.verification.ui_url` with the flow ID set as the query parameter `?flow=`.  If this endpoint is called via an AJAX request, the response contains the recovery flow without any redirects.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...).  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n     * @summary Create Verification Flow for Browser Clients\n     * @param {FrontendApiCreateBrowserVerificationFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    createBrowserVerificationFlow(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).createBrowserVerificationFlow(requestParameters.returnTo, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint initiates a login flow for native apps that do not use a browser, such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error will be returned unless the URL query parameter `?refresh=true` is set.  To fetch an existing login flow call `/self-service/login/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks, including CSRF login attacks.  In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `session_aal1_required`: Multi-factor auth (e.g. 2fa) was requested but the user has no session yet. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n     * @summary Create Login Flow for Native Apps\n     * @param {FrontendApiCreateNativeLoginFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    createNativeLoginFlow(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).createNativeLoginFlow(requestParameters.refresh, requestParameters.aal, requestParameters.xSessionToken, requestParameters.returnSessionTokenExchangeCode, requestParameters.returnTo, requestParameters.via, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint initiates a recovery flow for API clients such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error.  On an existing recovery flow, use the `getRecoveryFlow` API endpoint.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n     * @summary Create Recovery Flow for Native Apps\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    createNativeRecoveryFlow(options) {\n        return FrontendApiFp(this.configuration).createNativeRecoveryFlow(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint initiates a registration flow for API clients such as mobile devices, smart TVs, and so on.  If a valid provided session cookie or session token is provided, a 400 Bad Request error will be returned unless the URL query parameter `?refresh=true` is set.  To fetch an existing registration flow call `/self-service/registration/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n     * @summary Create Registration Flow for Native Apps\n     * @param {FrontendApiCreateNativeRegistrationFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    createNativeRegistrationFlow(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).createNativeRegistrationFlow(requestParameters.returnSessionTokenExchangeCode, requestParameters.returnTo, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint initiates a settings flow for API clients such as mobile devices, smart TVs, and so on. You must provide a valid Ory Kratos Session Token for this endpoint to respond with HTTP 200 OK.  To fetch an existing settings flow call `/self-service/settings/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n     * @summary Create Settings Flow for Native Apps\n     * @param {FrontendApiCreateNativeSettingsFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    createNativeSettingsFlow(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).createNativeSettingsFlow(requestParameters.xSessionToken, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint initiates a verification flow for API clients such as mobile devices, smart TVs, and so on.  To fetch an existing verification flow call `/self-service/verification/flows?flow=<flow_id>`.  You MUST NOT use this endpoint in client-side (Single Page Apps, ReactJS, AngularJS) nor server-side (Java Server Pages, NodeJS, PHP, Golang, ...) browser applications. Using this endpoint in these applications will make you vulnerable to a variety of CSRF attacks.  This endpoint MUST ONLY be used in scenarios such as native mobile apps (React Native, Objective C, Swift, Java, ...).  More information can be found at [Ory Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n     * @summary Create Verification Flow for Native Apps\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    createNativeVerificationFlow(options) {\n        return FrontendApiFp(this.configuration).createNativeVerificationFlow(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Calling this endpoint invalidates all except the current session that belong to the logged-in user. Session data are not deleted.\n     * @summary Disable my other sessions\n     * @param {FrontendApiDisableMyOtherSessionsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    disableMyOtherSessions(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).disableMyOtherSessions(requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Calling this endpoint invalidates the specified session. The current session cannot be revoked. Session data are not deleted.\n     * @summary Disable one of my sessions\n     * @param {FrontendApiDisableMySessionRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    disableMySession(requestParameters, options) {\n        return FrontendApiFp(this.configuration).disableMySession(requestParameters.id, requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     *\n     * @summary Exchange Session Token\n     * @param {FrontendApiExchangeSessionTokenRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    exchangeSessionToken(requestParameters, options) {\n        return FrontendApiFp(this.configuration).exchangeSessionToken(requestParameters.initCode, requestParameters.returnToCode, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint returns the error associated with a user-facing self service errors.  This endpoint supports stub values to help you implement the error UI:  `?id=stub:500` - returns a stub 500 (Internal Server Error) error.  More information can be found at [Ory Kratos User User Facing Error Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-facing-errors).\n     * @summary Get User-Flow Errors\n     * @param {FrontendApiGetFlowErrorRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    getFlowError(requestParameters, options) {\n        return FrontendApiFp(this.configuration).getFlowError(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint returns a login flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/login\\', async function (req, res) { const flow = await client.getLoginFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'login\\', flow) }) ```  This request may fail due to several reasons. The `error.id` can be one of:  `session_already_available`: The user is already signed in. `self_service_flow_expired`: The flow is expired and you should request a new one.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n     * @summary Get Login Flow\n     * @param {FrontendApiGetLoginFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    getLoginFlow(requestParameters, options) {\n        return FrontendApiFp(this.configuration).getLoginFlow(requestParameters.id, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint returns a recovery flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/recovery\\', async function (req, res) { const flow = await client.getRecoveryFlow(req.header(\\'Cookie\\'), req.query[\\'flow\\'])  res.render(\\'recovery\\', flow) }) ```  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n     * @summary Get Recovery Flow\n     * @param {FrontendApiGetRecoveryFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    getRecoveryFlow(requestParameters, options) {\n        return FrontendApiFp(this.configuration).getRecoveryFlow(requestParameters.id, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint returns a registration flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/registration\\', async function (req, res) { const flow = await client.getRegistrationFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'registration\\', flow) }) ```  This request may fail due to several reasons. The `error.id` can be one of:  `session_already_available`: The user is already signed in. `self_service_flow_expired`: The flow is expired and you should request a new one.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n     * @summary Get Registration Flow\n     * @param {FrontendApiGetRegistrationFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    getRegistrationFlow(requestParameters, options) {\n        return FrontendApiFp(this.configuration).getRegistrationFlow(requestParameters.id, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * When accessing this endpoint through Ory Kratos\\' Public API you must ensure that either the Ory Kratos Session Cookie or the Ory Kratos Session Token are set.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  You can access this endpoint without credentials when using Ory Kratos\\' Admin API.  If this endpoint is called via an AJAX request, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The flow was interrupted with `session_refresh_required` but apparently some other identity logged in instead.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n     * @summary Get Settings Flow\n     * @param {FrontendApiGetSettingsFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    getSettingsFlow(requestParameters, options) {\n        return FrontendApiFp(this.configuration).getSettingsFlow(requestParameters.id, requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint returns a verification flow\\'s context with, for example, error details and other information.  Browser flows expect the anti-CSRF cookie to be included in the request\\'s HTTP Cookie Header. For AJAX requests you must ensure that cookies are included in the request or requests will fail.  If you use the browser-flow for server-side apps, the services need to run on a common top-level-domain and you need to forward the incoming HTTP Cookie header to this endpoint:  ```js pseudo-code example router.get(\\'/recovery\\', async function (req, res) { const flow = await client.getVerificationFlow(req.header(\\'cookie\\'), req.query[\\'flow\\'])  res.render(\\'verification\\', flow) }) ```  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n     * @summary Get Verification Flow\n     * @param {FrontendApiGetVerificationFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    getVerificationFlow(requestParameters, options) {\n        return FrontendApiFp(this.configuration).getVerificationFlow(requestParameters.id, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint provides JavaScript which is needed in order to perform WebAuthn login and registration.  If you are building a JavaScript Browser App (e.g. in ReactJS or AngularJS) you will need to load this file:  ```html <script src=\\\"https://public-kratos.example.org/.well-known/ory/webauthn.js\\\" type=\\\"script\\\" async /> ```  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n     * @summary Get WebAuthn JavaScript\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    getWebAuthnJavaScript(options) {\n        return FrontendApiFp(this.configuration).getWebAuthnJavaScript(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoints returns all other active sessions that belong to the logged-in user. The current session can be retrieved by calling the `/sessions/whoami` endpoint.\n     * @summary Get My Active Sessions\n     * @param {FrontendApiListMySessionsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    listMySessions(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).listMySessions(requestParameters.perPage, requestParameters.page, requestParameters.pageSize, requestParameters.pageToken, requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to log out an identity using an Ory Session Token. If the Ory Session Token was successfully revoked, the server returns a 204 No Content response. A 204 No Content response is also sent when the Ory Session Token has been revoked already before.  If the Ory Session Token is malformed or does not exist a 403 Forbidden response will be returned.  This endpoint does not remove any HTTP Cookies - use the Browser-Based Self-Service Logout Flow instead.\n     * @summary Perform Logout for Native Apps\n     * @param {FrontendApiPerformNativeLogoutRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    performNativeLogout(requestParameters, options) {\n        return FrontendApiFp(this.configuration).performNativeLogout(requestParameters.performNativeLogoutBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Uses the HTTP Headers in the GET request to determine (e.g. by using checking the cookies) who is authenticated. Returns a session object in the body or 401 if the credentials are invalid or no credentials were sent. When the request it successful it adds the user ID to the \\'X-Kratos-Authenticated-Identity-Id\\' header in the response.  If you call this endpoint from a server-side application, you must forward the HTTP Cookie Header to this endpoint:  ```js pseudo-code example router.get(\\'/protected-endpoint\\', async function (req, res) { const session = await client.toSession(undefined, req.header(\\'cookie\\'))  console.log(session) }) ```  When calling this endpoint from a non-browser application (e.g. mobile app) you must include the session token:  ```js pseudo-code example ... const session = await client.toSession(\\\"the-session-token\\\")  console.log(session) ```  When using a token template, the token is included in the `tokenized` field of the session.  ```js pseudo-code example ... const session = await client.toSession(\\\"the-session-token\\\", { tokenize_as: \\\"example-jwt-template\\\" })  console.log(session.tokenized) // The JWT ```  Depending on your configuration this endpoint might return a 403 status code if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor or change the configuration.  This endpoint is useful for:  AJAX calls. Remember to send credentials and set up CORS correctly! Reverse proxies and API Gateways Server-side calls - use the `X-Session-Token` header!  This endpoint authenticates users by checking:  if the `Cookie` HTTP header was set containing an Ory Kratos Session Cookie; if the `Authorization: bearer <ory-session-token>` HTTP header was set with a valid Ory Kratos Session Token; if the `X-Session-Token` HTTP header was set with a valid Ory Kratos Session Token.  If none of these headers are set or the cookie or token are invalid, the endpoint returns a HTTP 401 status code.  As explained above, this request may fail due to several reasons. The `error.id` can be one of:  `session_inactive`: No active session was found in the request (e.g. no Ory Session Cookie / Ory Session Token). `session_aal2_required`: An active session was found but it does not fulfil the Authenticator Assurance Level, implying that the session must (e.g.) authenticate the second factor.\n     * @summary Check Who the Current HTTP Session Belongs To\n     * @param {FrontendApiToSessionRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    toSession(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).toSession(requestParameters.xSessionToken, requestParameters.cookie, requestParameters.tokenizeAs, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to complete a login flow. This endpoint behaves differently for API and browser flows.  API flows expect `application/json` to be sent in the body and responds with HTTP 200 and a application/json body with the session token on success; HTTP 410 if the original flow expired with the appropriate error messages set and optionally a `use_flow_id` parameter in the body; HTTP 400 on form validation errors.  Browser flows expect a Content-Type of `application/x-www-form-urlencoded` or `application/json` to be sent in the body and respond with a HTTP 303 redirect to the post/after login URL or the `return_to` value if it was set and if the login succeeded; a HTTP 303 redirect to the login UI URL with the flow ID containing the validation errors otherwise.  Browser flows with an accept header of `application/json` will not redirect but instead respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors.  If this endpoint is called with `Accept: application/json` in the header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n     * @summary Submit a Login Flow\n     * @param {FrontendApiUpdateLoginFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    updateLoginFlow(requestParameters, options) {\n        return FrontendApiFp(this.configuration).updateLoginFlow(requestParameters.flow, requestParameters.updateLoginFlowBody, requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint logs out an identity in a self-service manner.  If the `Accept` HTTP header is not set to `application/json`, the browser will be redirected (HTTP 303 See Other) to the `return_to` parameter of the initial request or fall back to `urls.default_return_to`.  If the `Accept` HTTP header is set to `application/json`, a 204 No Content response will be sent on successful logout instead.  This endpoint is NOT INTENDED for API clients and only works with browsers (Chrome, Firefox, ...). For API clients you can call the `/self-service/logout/api` URL directly with the Ory Session Token.  More information can be found at [Ory Kratos User Logout Documentation](https://www.ory.sh/docs/next/kratos/self-service/flows/user-logout).\n     * @summary Update Logout Flow\n     * @param {FrontendApiUpdateLogoutFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    updateLogoutFlow(requestParameters = {}, options) {\n        return FrontendApiFp(this.configuration).updateLogoutFlow(requestParameters.token, requestParameters.returnTo, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to update a recovery flow. This endpoint behaves differently for API and browser flows and has several states:  `choose_method` expects `flow` (in the URL query) and `email` (in the body) to be sent and works with API- and Browser-initiated flows. For API clients and Browser clients with HTTP Header `Accept: application/json` it either returns a HTTP 200 OK when the form is valid and HTTP 400 OK when the form is invalid. and a HTTP 303 See Other redirect with a fresh recovery flow if the flow was otherwise invalid (e.g. expired). For Browser clients without HTTP Header `Accept` or with `Accept: text/_*` it returns a HTTP 303 See Other redirect to the Recovery UI URL with the Recovery Flow ID appended. `sent_email` is the success state after `choose_method` for the `link` method and allows the user to request another recovery email. It works for both API and Browser-initiated flows and returns the same responses as the flow in `choose_method` state. `passed_challenge` expects a `token` to be sent in the URL query and given the nature of the flow (\\\"sending a recovery link\\\") does not have any API capabilities. The server responds with a HTTP 303 See Other redirect either to the Settings UI URL (if the link was valid) and instructs the user to update their password, or a redirect to the Recover UI URL with a new Recovery Flow ID which contains an error message that the recovery link was invalid.  More information can be found at [Ory Kratos Account Recovery Documentation](../self-service/flows/account-recovery).\n     * @summary Update Recovery Flow\n     * @param {FrontendApiUpdateRecoveryFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    updateRecoveryFlow(requestParameters, options) {\n        return FrontendApiFp(this.configuration).updateRecoveryFlow(requestParameters.flow, requestParameters.updateRecoveryFlowBody, requestParameters.token, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to complete a registration flow by sending an identity\\'s traits and password. This endpoint behaves differently for API and browser flows.  API flows expect `application/json` to be sent in the body and respond with HTTP 200 and a application/json body with the created identity success - if the session hook is configured the `session` and `session_token` will also be included; HTTP 410 if the original flow expired with the appropriate error messages set and optionally a `use_flow_id` parameter in the body; HTTP 400 on form validation errors.  Browser flows expect a Content-Type of `application/x-www-form-urlencoded` or `application/json` to be sent in the body and respond with a HTTP 303 redirect to the post/after registration URL or the `return_to` value if it was set and if the registration succeeded; a HTTP 303 redirect to the registration UI URL with the flow ID containing the validation errors otherwise.  Browser flows with an accept header of `application/json` will not redirect but instead respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors.  If this endpoint is called with `Accept: application/json` in the header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_already_available`: The user is already signed in. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Login](https://www.ory.sh/docs/kratos/self-service/flows/user-login) and [User Registration Documentation](https://www.ory.sh/docs/kratos/self-service/flows/user-registration).\n     * @summary Update Registration Flow\n     * @param {FrontendApiUpdateRegistrationFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    updateRegistrationFlow(requestParameters, options) {\n        return FrontendApiFp(this.configuration).updateRegistrationFlow(requestParameters.flow, requestParameters.updateRegistrationFlowBody, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to complete a settings flow by sending an identity\\'s updated password. This endpoint behaves differently for API and browser flows.  API-initiated flows expect `application/json` to be sent in the body and respond with HTTP 200 and an application/json body with the session token on success; HTTP 303 redirect to a fresh settings flow if the original flow expired with the appropriate error messages set; HTTP 400 on form validation errors. HTTP 401 when the endpoint is called without a valid session token. HTTP 403 when `selfservice.flows.settings.privileged_session_max_age` was reached or the session\\'s AAL is too low. Implies that the user needs to re-authenticate.  Browser flows without HTTP Header `Accept` or with `Accept: text/_*` respond with a HTTP 303 redirect to the post/after settings URL or the `return_to` value if it was set and if the flow succeeded; a HTTP 303 redirect to the Settings UI URL with the flow ID containing the validation errors otherwise. a HTTP 303 redirect to the login endpoint when `selfservice.flows.settings.privileged_session_max_age` was reached or the session\\'s AAL is too low.  Browser flows with HTTP Header `Accept: application/json` respond with HTTP 200 and a application/json body with the signed in identity and a `Set-Cookie` header on success; HTTP 303 redirect to a fresh login flow if the original flow expired with the appropriate error messages set; HTTP 401 when the endpoint is called without a valid session cookie. HTTP 403 when the page is accessed without a session cookie or the session\\'s AAL is too low. HTTP 400 on form validation errors.  Depending on your configuration this endpoint might return a 403 error if the session has a lower Authenticator Assurance Level (AAL) than is possible for the identity. This can happen if the identity has password + webauthn credentials (which would result in AAL2) but the session has only AAL1. If this error occurs, ask the user to sign in with the second factor (happens automatically for server-side browser flows) or change the configuration.  If this endpoint is called with a `Accept: application/json` HTTP header, the response contains the flow without a redirect. In the case of an error, the `error.id` of the JSON response body can be one of:  `session_refresh_required`: The identity requested to change something that needs a privileged session. Redirect the identity to the login init endpoint with query parameters `?refresh=true&return_to=<the-current-browser-url>`, or initiate a refresh login flow otherwise. `security_csrf_violation`: Unable to fetch the flow because a CSRF violation occurred. `session_inactive`: No Ory Session was found - sign in a user first. `security_identity_mismatch`: The flow was interrupted with `session_refresh_required` but apparently some other identity logged in instead. `security_identity_mismatch`: The requested `?return_to` address is not allowed to be used. Adjust this in the configuration! `browser_location_change_required`: Usually sent when an AJAX request indicates that the browser needs to open a specific URL. Most likely used in Social Sign In flows.  More information can be found at [Ory Kratos User Settings & Profile Management Documentation](../self-service/flows/user-settings).\n     * @summary Complete Settings Flow\n     * @param {FrontendApiUpdateSettingsFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    updateSettingsFlow(requestParameters, options) {\n        return FrontendApiFp(this.configuration).updateSettingsFlow(requestParameters.flow, requestParameters.updateSettingsFlowBody, requestParameters.xSessionToken, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to complete a verification flow. This endpoint behaves differently for API and browser flows and has several states:  `choose_method` expects `flow` (in the URL query) and `email` (in the body) to be sent and works with API- and Browser-initiated flows. For API clients and Browser clients with HTTP Header `Accept: application/json` it either returns a HTTP 200 OK when the form is valid and HTTP 400 OK when the form is invalid and a HTTP 303 See Other redirect with a fresh verification flow if the flow was otherwise invalid (e.g. expired). For Browser clients without HTTP Header `Accept` or with `Accept: text/_*` it returns a HTTP 303 See Other redirect to the Verification UI URL with the Verification Flow ID appended. `sent_email` is the success state after `choose_method` when using the `link` method and allows the user to request another verification email. It works for both API and Browser-initiated flows and returns the same responses as the flow in `choose_method` state. `passed_challenge` expects a `token` to be sent in the URL query and given the nature of the flow (\\\"sending a verification link\\\") does not have any API capabilities. The server responds with a HTTP 303 See Other redirect either to the Settings UI URL (if the link was valid) and instructs the user to update their password, or a redirect to the Verification UI URL with a new Verification Flow ID which contains an error message that the verification link was invalid.  More information can be found at [Ory Kratos Email and Phone Verification Documentation](https://www.ory.sh/docs/kratos/self-service/flows/verify-email-account-activation).\n     * @summary Complete Verification Flow\n     * @param {FrontendApiUpdateVerificationFlowRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof FrontendApi\n     */\n    updateVerificationFlow(requestParameters, options) {\n        return FrontendApiFp(this.configuration).updateVerificationFlow(requestParameters.flow, requestParameters.updateVerificationFlowBody, requestParameters.token, requestParameters.cookie, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * IdentityApi - axios parameter creator\n * @export\n */\nexport const IdentityApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Creates or delete multiple [identities](https://www.ory.sh/docs/kratos/concepts/identity-user-model). This endpoint can also be used to [import credentials](https://www.ory.sh/docs/kratos/manage-identities/import-user-accounts-identities) for instance passwords, social sign in configurations or multifactor methods.\n         * @summary Create and deletes multiple identities\n         * @param {PatchIdentitiesBody} [patchIdentitiesBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        batchPatchIdentities: (patchIdentitiesBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/identities`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PATCH' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(patchIdentitiesBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Create an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model).  This endpoint can also be used to [import credentials](https://www.ory.sh/docs/kratos/manage-identities/import-user-accounts-identities) for instance passwords, social sign in configurations or multifactor methods.\n         * @summary Create an Identity\n         * @param {CreateIdentityBody} [createIdentityBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createIdentity: (createIdentityBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/identities`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(createIdentityBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint creates a recovery code which should be given to the user in order for them to recover (or activate) their account.\n         * @summary Create a Recovery Code\n         * @param {CreateRecoveryCodeForIdentityBody} [createRecoveryCodeForIdentityBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createRecoveryCodeForIdentity: (createRecoveryCodeForIdentityBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/recovery/code`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(createRecoveryCodeForIdentityBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint creates a recovery link which should be given to the user in order for them to recover (or activate) their account.\n         * @summary Create a Recovery Link\n         * @param {string} [returnTo]\n         * @param {CreateRecoveryLinkForIdentityBody} [createRecoveryLinkForIdentityBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createRecoveryLinkForIdentity: (returnTo, createRecoveryLinkForIdentityBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/recovery/link`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (returnTo !== undefined) {\n                localVarQueryParameter['return_to'] = returnTo;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(createRecoveryLinkForIdentityBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Calling this endpoint irrecoverably and permanently deletes the [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) given its ID. This action can not be undone. This endpoint returns 204 when the identity was deleted or when the identity was not found, in which case it is assumed that is has been deleted already.\n         * @summary Delete an Identity\n         * @param {string} id ID is the identity\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteIdentity: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('deleteIdentity', 'id', id);\n            const localVarPath = `/admin/identities/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Delete an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) credential by its type You can only delete second factor (aal2) credentials.\n         * @summary Delete a credential for a specific identity\n         * @param {string} id ID is the identity\\&#39;s ID.\n         * @param {DeleteIdentityCredentialsTypeEnum} type Type is the type of credentials to be deleted. password CredentialsTypePassword oidc CredentialsTypeOIDC totp CredentialsTypeTOTP lookup_secret CredentialsTypeLookup webauthn CredentialsTypeWebAuthn code CredentialsTypeCodeAuth link_recovery CredentialsTypeRecoveryLink  CredentialsTypeRecoveryLink is a special credential type linked to the link strategy (recovery flow).  It is not used within the credentials object itself. code_recovery CredentialsTypeRecoveryCode\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteIdentityCredentials: (id, type, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('deleteIdentityCredentials', 'id', id);\n            // verify required parameter 'type' is not null or undefined\n            assertParamExists('deleteIdentityCredentials', 'type', type);\n            const localVarPath = `/admin/identities/{id}/credentials/{type}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)))\n                .replace(`{${\"type\"}}`, encodeURIComponent(String(type)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Calling this endpoint irrecoverably and permanently deletes and invalidates all sessions that belong to the given Identity.\n         * @summary Delete & Invalidate an Identity\\'s Sessions\n         * @param {string} id ID is the identity\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteIdentitySessions: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('deleteIdentitySessions', 'id', id);\n            const localVarPath = `/admin/identities/{id}/sessions`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Calling this endpoint deactivates the specified session. Session data is not deleted.\n         * @summary Deactivate a Session\n         * @param {string} id ID is the session\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        disableSession: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('disableSession', 'id', id);\n            const localVarPath = `/admin/sessions/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Calling this endpoint extends the given session ID. If `session.earliest_possible_extend` is set it will only extend the session after the specified time has passed.  Retrieve the session ID from the `/sessions/whoami` endpoint / `toSession` SDK method.\n         * @summary Extend a Session\n         * @param {string} id ID is the session\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        extendSession: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('extendSession', 'id', id);\n            const localVarPath = `/admin/sessions/{id}/extend`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PATCH' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Return an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) by its ID. You can optionally include credentials (e.g. social sign in connections) in the response by using the `include_credential` query parameter.\n         * @summary Get an Identity\n         * @param {string} id ID must be set to the ID of identity you want to get\n         * @param {Array<GetIdentityIncludeCredentialEnum>} [includeCredential] Include Credentials in Response  Include any credential, for example &#x60;password&#x60; or &#x60;oidc&#x60;, in the response. When set to &#x60;oidc&#x60;, This will return the initial OAuth 2.0 Access Token, OAuth 2.0 Refresh Token and the OpenID Connect ID Token if available.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getIdentity: (id, includeCredential, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getIdentity', 'id', id);\n            const localVarPath = `/admin/identities/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (includeCredential) {\n                localVarQueryParameter['include_credential'] = includeCredential;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Return a specific identity schema.\n         * @summary Get Identity JSON Schema\n         * @param {string} id ID must be set to the ID of schema you want to get\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getIdentitySchema: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getIdentitySchema', 'id', id);\n            const localVarPath = `/schemas/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint is useful for:  Getting a session object with all specified expandables that exist in an administrative context.\n         * @summary Get Session\n         * @param {string} id ID is the session\\&#39;s ID.\n         * @param {GetSessionExpandEnum} [expand] ExpandOptions is a query parameter encoded list of all properties that must be expanded in the Session. Example - ?expand&#x3D;Identity&amp;expand&#x3D;Devices If no value is provided, the expandable properties are skipped.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSession: (id, expand, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getSession', 'id', id);\n            const localVarPath = `/admin/sessions/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (expand) {\n                localVarQueryParameter['expand'] = expand;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Lists all [identities](https://www.ory.sh/docs/kratos/concepts/identity-user-model) in the system.\n         * @summary List Identities\n         * @param {number} [perPage] Deprecated Items per Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This is the number of items per page.\n         * @param {number} [page] Deprecated Pagination Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This value is currently an integer, but it is not sequential. The value is not the page number, but a reference. The next page can be any number and some numbers might return an empty list.  For example, page 2 might not follow after page 1. And even if page 3 and 5 exist, but page 4 might not exist. The first page can be retrieved by omitting this parameter. Following page pointers will be returned in the &#x60;Link&#x60; header.\n         * @param {number} [pageSize] Page Size  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {ListIdentitiesConsistencyEnum} [consistency] Read Consistency Level (preview)  The read consistency level determines the consistency guarantee for reads:  strong (slow): The read is guaranteed to return the most recent data committed at the start of the read. eventual (very fast): The result will return data that is about 4.8 seconds old.  The default consistency guarantee can be changed in the Ory Network Console or using the Ory CLI with &#x60;ory patch project --replace \\&#39;/previews/default_read_consistency_level&#x3D;\\&quot;strong\\&quot;\\&#39;&#x60;.  Setting the default consistency level to &#x60;eventual&#x60; may cause regressions in the future as we add consistency controls to more APIs. Currently, the following APIs will be affected by this setting:  &#x60;GET /admin/identities&#x60;  This feature is in preview and only available in Ory Network.  ConsistencyLevelUnset  ConsistencyLevelUnset is the unset / default consistency level. strong ConsistencyLevelStrong  ConsistencyLevelStrong is the strong consistency level. eventual ConsistencyLevelEventual  ConsistencyLevelEventual is the eventual consistency level using follower read timestamps.\n         * @param {Array<string>} [ids] List of ids used to filter identities. If this list is empty, then no filter will be applied.\n         * @param {string} [credentialsIdentifier] CredentialsIdentifier is the identifier (username, email) of the credentials to look up using exact match. Only one of CredentialsIdentifier and CredentialsIdentifierSimilar can be used.\n         * @param {string} [previewCredentialsIdentifierSimilar] This is an EXPERIMENTAL parameter that WILL CHANGE. Do NOT rely on consistent, deterministic behavior. THIS PARAMETER WILL BE REMOVED IN AN UPCOMING RELEASE WITHOUT ANY MIGRATION PATH.  CredentialsIdentifierSimilar is the (partial) identifier (username, email) of the credentials to look up using similarity search. Only one of CredentialsIdentifier and CredentialsIdentifierSimilar can be used.\n         * @param {Array<string>} [includeCredential] Include Credentials in Response  Include any credential, for example &#x60;password&#x60; or &#x60;oidc&#x60;, in the response. When set to &#x60;oidc&#x60;, This will return the initial OAuth 2.0 Access Token, OAuth 2.0 Refresh Token and the OpenID Connect ID Token if available.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIdentities: (perPage, page, pageSize, pageToken, consistency, ids, credentialsIdentifier, previewCredentialsIdentifierSimilar, includeCredential, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/identities`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (perPage !== undefined) {\n                localVarQueryParameter['per_page'] = perPage;\n            }\n            if (page !== undefined) {\n                localVarQueryParameter['page'] = page;\n            }\n            if (pageSize !== undefined) {\n                localVarQueryParameter['page_size'] = pageSize;\n            }\n            if (pageToken !== undefined) {\n                localVarQueryParameter['page_token'] = pageToken;\n            }\n            if (consistency !== undefined) {\n                localVarQueryParameter['consistency'] = consistency;\n            }\n            if (ids) {\n                localVarQueryParameter['ids'] = ids;\n            }\n            if (credentialsIdentifier !== undefined) {\n                localVarQueryParameter['credentials_identifier'] = credentialsIdentifier;\n            }\n            if (previewCredentialsIdentifierSimilar !== undefined) {\n                localVarQueryParameter['preview_credentials_identifier_similar'] = previewCredentialsIdentifierSimilar;\n            }\n            if (includeCredential) {\n                localVarQueryParameter['include_credential'] = includeCredential;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Returns a list of all identity schemas currently in use.\n         * @summary Get all Identity Schemas\n         * @param {number} [perPage] Deprecated Items per Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This is the number of items per page.\n         * @param {number} [page] Deprecated Pagination Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This value is currently an integer, but it is not sequential. The value is not the page number, but a reference. The next page can be any number and some numbers might return an empty list.  For example, page 2 might not follow after page 1. And even if page 3 and 5 exist, but page 4 might not exist. The first page can be retrieved by omitting this parameter. Following page pointers will be returned in the &#x60;Link&#x60; header.\n         * @param {number} [pageSize] Page Size  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIdentitySchemas: (perPage, page, pageSize, pageToken, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/schemas`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            if (perPage !== undefined) {\n                localVarQueryParameter['per_page'] = perPage;\n            }\n            if (page !== undefined) {\n                localVarQueryParameter['page'] = page;\n            }\n            if (pageSize !== undefined) {\n                localVarQueryParameter['page_size'] = pageSize;\n            }\n            if (pageToken !== undefined) {\n                localVarQueryParameter['page_token'] = pageToken;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint returns all sessions that belong to the given Identity.\n         * @summary List an Identity\\'s Sessions\n         * @param {string} id ID is the identity\\&#39;s ID.\n         * @param {number} [perPage] Deprecated Items per Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This is the number of items per page.\n         * @param {number} [page] Deprecated Pagination Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This value is currently an integer, but it is not sequential. The value is not the page number, but a reference. The next page can be any number and some numbers might return an empty list.  For example, page 2 might not follow after page 1. And even if page 3 and 5 exist, but page 4 might not exist. The first page can be retrieved by omitting this parameter. Following page pointers will be returned in the &#x60;Link&#x60; header.\n         * @param {number} [pageSize] Page Size  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {boolean} [active] Active is a boolean flag that filters out sessions based on the state. If no value is provided, all sessions are returned.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIdentitySessions: (id, perPage, page, pageSize, pageToken, active, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('listIdentitySessions', 'id', id);\n            const localVarPath = `/admin/identities/{id}/sessions`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (perPage !== undefined) {\n                localVarQueryParameter['per_page'] = perPage;\n            }\n            if (page !== undefined) {\n                localVarQueryParameter['page'] = page;\n            }\n            if (pageSize !== undefined) {\n                localVarQueryParameter['page_size'] = pageSize;\n            }\n            if (pageToken !== undefined) {\n                localVarQueryParameter['page_token'] = pageToken;\n            }\n            if (active !== undefined) {\n                localVarQueryParameter['active'] = active;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Listing all sessions that exist.\n         * @summary List All Sessions\n         * @param {number} [pageSize] Items per Page  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {boolean} [active] Active is a boolean flag that filters out sessions based on the state. If no value is provided, all sessions are returned.\n         * @param {ListSessionsExpandEnum} [expand] ExpandOptions is a query parameter encoded list of all properties that must be expanded in the Session. If no value is provided, the expandable properties are skipped.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listSessions: (pageSize, pageToken, active, expand, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/sessions`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (pageSize !== undefined) {\n                localVarQueryParameter['page_size'] = pageSize;\n            }\n            if (pageToken !== undefined) {\n                localVarQueryParameter['page_token'] = pageToken;\n            }\n            if (active !== undefined) {\n                localVarQueryParameter['active'] = active;\n            }\n            if (expand) {\n                localVarQueryParameter['expand'] = expand;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Partially updates an [identity\\'s](https://www.ory.sh/docs/kratos/concepts/identity-user-model) field using [JSON Patch](https://jsonpatch.com/). The fields `id`, `stateChangedAt` and `credentials` can not be updated using this method.\n         * @summary Patch an Identity\n         * @param {string} id ID must be set to the ID of identity you want to update\n         * @param {Array<JsonPatch>} [jsonPatch]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchIdentity: (id, jsonPatch, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('patchIdentity', 'id', id);\n            const localVarPath = `/admin/identities/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PATCH' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(jsonPatch, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint updates an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model). The full identity payload (except credentials) is expected. It is possible to update the identity\\'s credentials as well.\n         * @summary Update an Identity\n         * @param {string} id ID must be set to the ID of identity you want to update\n         * @param {UpdateIdentityBody} [updateIdentityBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateIdentity: (id, updateIdentityBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('updateIdentity', 'id', id);\n            const localVarPath = `/admin/identities/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(updateIdentityBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * IdentityApi - functional programming interface\n * @export\n */\nexport const IdentityApiFp = function (configuration) {\n    const localVarAxiosParamCreator = IdentityApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Creates or delete multiple [identities](https://www.ory.sh/docs/kratos/concepts/identity-user-model). This endpoint can also be used to [import credentials](https://www.ory.sh/docs/kratos/manage-identities/import-user-accounts-identities) for instance passwords, social sign in configurations or multifactor methods.\n         * @summary Create and deletes multiple identities\n         * @param {PatchIdentitiesBody} [patchIdentitiesBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        batchPatchIdentities(patchIdentitiesBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.batchPatchIdentities(patchIdentitiesBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.batchPatchIdentities']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Create an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model).  This endpoint can also be used to [import credentials](https://www.ory.sh/docs/kratos/manage-identities/import-user-accounts-identities) for instance passwords, social sign in configurations or multifactor methods.\n         * @summary Create an Identity\n         * @param {CreateIdentityBody} [createIdentityBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createIdentity(createIdentityBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createIdentity(createIdentityBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.createIdentity']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint creates a recovery code which should be given to the user in order for them to recover (or activate) their account.\n         * @summary Create a Recovery Code\n         * @param {CreateRecoveryCodeForIdentityBody} [createRecoveryCodeForIdentityBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createRecoveryCodeForIdentity(createRecoveryCodeForIdentityBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createRecoveryCodeForIdentity(createRecoveryCodeForIdentityBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.createRecoveryCodeForIdentity']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint creates a recovery link which should be given to the user in order for them to recover (or activate) their account.\n         * @summary Create a Recovery Link\n         * @param {string} [returnTo]\n         * @param {CreateRecoveryLinkForIdentityBody} [createRecoveryLinkForIdentityBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createRecoveryLinkForIdentity(returnTo, createRecoveryLinkForIdentityBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createRecoveryLinkForIdentity(returnTo, createRecoveryLinkForIdentityBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.createRecoveryLinkForIdentity']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Calling this endpoint irrecoverably and permanently deletes the [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) given its ID. This action can not be undone. This endpoint returns 204 when the identity was deleted or when the identity was not found, in which case it is assumed that is has been deleted already.\n         * @summary Delete an Identity\n         * @param {string} id ID is the identity\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteIdentity(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteIdentity(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.deleteIdentity']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Delete an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) credential by its type You can only delete second factor (aal2) credentials.\n         * @summary Delete a credential for a specific identity\n         * @param {string} id ID is the identity\\&#39;s ID.\n         * @param {DeleteIdentityCredentialsTypeEnum} type Type is the type of credentials to be deleted. password CredentialsTypePassword oidc CredentialsTypeOIDC totp CredentialsTypeTOTP lookup_secret CredentialsTypeLookup webauthn CredentialsTypeWebAuthn code CredentialsTypeCodeAuth link_recovery CredentialsTypeRecoveryLink  CredentialsTypeRecoveryLink is a special credential type linked to the link strategy (recovery flow).  It is not used within the credentials object itself. code_recovery CredentialsTypeRecoveryCode\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteIdentityCredentials(id, type, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteIdentityCredentials(id, type, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.deleteIdentityCredentials']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Calling this endpoint irrecoverably and permanently deletes and invalidates all sessions that belong to the given Identity.\n         * @summary Delete & Invalidate an Identity\\'s Sessions\n         * @param {string} id ID is the identity\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteIdentitySessions(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteIdentitySessions(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.deleteIdentitySessions']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Calling this endpoint deactivates the specified session. Session data is not deleted.\n         * @summary Deactivate a Session\n         * @param {string} id ID is the session\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        disableSession(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.disableSession(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.disableSession']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Calling this endpoint extends the given session ID. If `session.earliest_possible_extend` is set it will only extend the session after the specified time has passed.  Retrieve the session ID from the `/sessions/whoami` endpoint / `toSession` SDK method.\n         * @summary Extend a Session\n         * @param {string} id ID is the session\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        extendSession(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.extendSession(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.extendSession']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Return an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) by its ID. You can optionally include credentials (e.g. social sign in connections) in the response by using the `include_credential` query parameter.\n         * @summary Get an Identity\n         * @param {string} id ID must be set to the ID of identity you want to get\n         * @param {Array<GetIdentityIncludeCredentialEnum>} [includeCredential] Include Credentials in Response  Include any credential, for example &#x60;password&#x60; or &#x60;oidc&#x60;, in the response. When set to &#x60;oidc&#x60;, This will return the initial OAuth 2.0 Access Token, OAuth 2.0 Refresh Token and the OpenID Connect ID Token if available.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getIdentity(id, includeCredential, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getIdentity(id, includeCredential, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.getIdentity']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Return a specific identity schema.\n         * @summary Get Identity JSON Schema\n         * @param {string} id ID must be set to the ID of schema you want to get\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getIdentitySchema(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getIdentitySchema(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.getIdentitySchema']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint is useful for:  Getting a session object with all specified expandables that exist in an administrative context.\n         * @summary Get Session\n         * @param {string} id ID is the session\\&#39;s ID.\n         * @param {GetSessionExpandEnum} [expand] ExpandOptions is a query parameter encoded list of all properties that must be expanded in the Session. Example - ?expand&#x3D;Identity&amp;expand&#x3D;Devices If no value is provided, the expandable properties are skipped.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSession(id, expand, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getSession(id, expand, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.getSession']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Lists all [identities](https://www.ory.sh/docs/kratos/concepts/identity-user-model) in the system.\n         * @summary List Identities\n         * @param {number} [perPage] Deprecated Items per Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This is the number of items per page.\n         * @param {number} [page] Deprecated Pagination Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This value is currently an integer, but it is not sequential. The value is not the page number, but a reference. The next page can be any number and some numbers might return an empty list.  For example, page 2 might not follow after page 1. And even if page 3 and 5 exist, but page 4 might not exist. The first page can be retrieved by omitting this parameter. Following page pointers will be returned in the &#x60;Link&#x60; header.\n         * @param {number} [pageSize] Page Size  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {ListIdentitiesConsistencyEnum} [consistency] Read Consistency Level (preview)  The read consistency level determines the consistency guarantee for reads:  strong (slow): The read is guaranteed to return the most recent data committed at the start of the read. eventual (very fast): The result will return data that is about 4.8 seconds old.  The default consistency guarantee can be changed in the Ory Network Console or using the Ory CLI with &#x60;ory patch project --replace \\&#39;/previews/default_read_consistency_level&#x3D;\\&quot;strong\\&quot;\\&#39;&#x60;.  Setting the default consistency level to &#x60;eventual&#x60; may cause regressions in the future as we add consistency controls to more APIs. Currently, the following APIs will be affected by this setting:  &#x60;GET /admin/identities&#x60;  This feature is in preview and only available in Ory Network.  ConsistencyLevelUnset  ConsistencyLevelUnset is the unset / default consistency level. strong ConsistencyLevelStrong  ConsistencyLevelStrong is the strong consistency level. eventual ConsistencyLevelEventual  ConsistencyLevelEventual is the eventual consistency level using follower read timestamps.\n         * @param {Array<string>} [ids] List of ids used to filter identities. If this list is empty, then no filter will be applied.\n         * @param {string} [credentialsIdentifier] CredentialsIdentifier is the identifier (username, email) of the credentials to look up using exact match. Only one of CredentialsIdentifier and CredentialsIdentifierSimilar can be used.\n         * @param {string} [previewCredentialsIdentifierSimilar] This is an EXPERIMENTAL parameter that WILL CHANGE. Do NOT rely on consistent, deterministic behavior. THIS PARAMETER WILL BE REMOVED IN AN UPCOMING RELEASE WITHOUT ANY MIGRATION PATH.  CredentialsIdentifierSimilar is the (partial) identifier (username, email) of the credentials to look up using similarity search. Only one of CredentialsIdentifier and CredentialsIdentifierSimilar can be used.\n         * @param {Array<string>} [includeCredential] Include Credentials in Response  Include any credential, for example &#x60;password&#x60; or &#x60;oidc&#x60;, in the response. When set to &#x60;oidc&#x60;, This will return the initial OAuth 2.0 Access Token, OAuth 2.0 Refresh Token and the OpenID Connect ID Token if available.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIdentities(perPage, page, pageSize, pageToken, consistency, ids, credentialsIdentifier, previewCredentialsIdentifierSimilar, includeCredential, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listIdentities(perPage, page, pageSize, pageToken, consistency, ids, credentialsIdentifier, previewCredentialsIdentifierSimilar, includeCredential, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.listIdentities']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Returns a list of all identity schemas currently in use.\n         * @summary Get all Identity Schemas\n         * @param {number} [perPage] Deprecated Items per Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This is the number of items per page.\n         * @param {number} [page] Deprecated Pagination Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This value is currently an integer, but it is not sequential. The value is not the page number, but a reference. The next page can be any number and some numbers might return an empty list.  For example, page 2 might not follow after page 1. And even if page 3 and 5 exist, but page 4 might not exist. The first page can be retrieved by omitting this parameter. Following page pointers will be returned in the &#x60;Link&#x60; header.\n         * @param {number} [pageSize] Page Size  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIdentitySchemas(perPage, page, pageSize, pageToken, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listIdentitySchemas(perPage, page, pageSize, pageToken, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.listIdentitySchemas']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint returns all sessions that belong to the given Identity.\n         * @summary List an Identity\\'s Sessions\n         * @param {string} id ID is the identity\\&#39;s ID.\n         * @param {number} [perPage] Deprecated Items per Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This is the number of items per page.\n         * @param {number} [page] Deprecated Pagination Page  DEPRECATED: Please use &#x60;page_token&#x60; instead. This parameter will be removed in the future.  This value is currently an integer, but it is not sequential. The value is not the page number, but a reference. The next page can be any number and some numbers might return an empty list.  For example, page 2 might not follow after page 1. And even if page 3 and 5 exist, but page 4 might not exist. The first page can be retrieved by omitting this parameter. Following page pointers will be returned in the &#x60;Link&#x60; header.\n         * @param {number} [pageSize] Page Size  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {boolean} [active] Active is a boolean flag that filters out sessions based on the state. If no value is provided, all sessions are returned.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIdentitySessions(id, perPage, page, pageSize, pageToken, active, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listIdentitySessions(id, perPage, page, pageSize, pageToken, active, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.listIdentitySessions']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Listing all sessions that exist.\n         * @summary List All Sessions\n         * @param {number} [pageSize] Items per Page  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {boolean} [active] Active is a boolean flag that filters out sessions based on the state. If no value is provided, all sessions are returned.\n         * @param {ListSessionsExpandEnum} [expand] ExpandOptions is a query parameter encoded list of all properties that must be expanded in the Session. If no value is provided, the expandable properties are skipped.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listSessions(pageSize, pageToken, active, expand, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listSessions(pageSize, pageToken, active, expand, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.listSessions']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Partially updates an [identity\\'s](https://www.ory.sh/docs/kratos/concepts/identity-user-model) field using [JSON Patch](https://jsonpatch.com/). The fields `id`, `stateChangedAt` and `credentials` can not be updated using this method.\n         * @summary Patch an Identity\n         * @param {string} id ID must be set to the ID of identity you want to update\n         * @param {Array<JsonPatch>} [jsonPatch]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchIdentity(id, jsonPatch, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.patchIdentity(id, jsonPatch, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.patchIdentity']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint updates an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model). The full identity payload (except credentials) is expected. It is possible to update the identity\\'s credentials as well.\n         * @summary Update an Identity\n         * @param {string} id ID must be set to the ID of identity you want to update\n         * @param {UpdateIdentityBody} [updateIdentityBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateIdentity(id, updateIdentityBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.updateIdentity(id, updateIdentityBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['IdentityApi.updateIdentity']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * IdentityApi - factory interface\n * @export\n */\nexport const IdentityApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = IdentityApiFp(configuration);\n    return {\n        /**\n         * Creates or delete multiple [identities](https://www.ory.sh/docs/kratos/concepts/identity-user-model). This endpoint can also be used to [import credentials](https://www.ory.sh/docs/kratos/manage-identities/import-user-accounts-identities) for instance passwords, social sign in configurations or multifactor methods.\n         * @summary Create and deletes multiple identities\n         * @param {IdentityApiBatchPatchIdentitiesRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        batchPatchIdentities(requestParameters = {}, options) {\n            return localVarFp.batchPatchIdentities(requestParameters.patchIdentitiesBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Create an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model).  This endpoint can also be used to [import credentials](https://www.ory.sh/docs/kratos/manage-identities/import-user-accounts-identities) for instance passwords, social sign in configurations or multifactor methods.\n         * @summary Create an Identity\n         * @param {IdentityApiCreateIdentityRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createIdentity(requestParameters = {}, options) {\n            return localVarFp.createIdentity(requestParameters.createIdentityBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint creates a recovery code which should be given to the user in order for them to recover (or activate) their account.\n         * @summary Create a Recovery Code\n         * @param {IdentityApiCreateRecoveryCodeForIdentityRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createRecoveryCodeForIdentity(requestParameters = {}, options) {\n            return localVarFp.createRecoveryCodeForIdentity(requestParameters.createRecoveryCodeForIdentityBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint creates a recovery link which should be given to the user in order for them to recover (or activate) their account.\n         * @summary Create a Recovery Link\n         * @param {IdentityApiCreateRecoveryLinkForIdentityRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createRecoveryLinkForIdentity(requestParameters = {}, options) {\n            return localVarFp.createRecoveryLinkForIdentity(requestParameters.returnTo, requestParameters.createRecoveryLinkForIdentityBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Calling this endpoint irrecoverably and permanently deletes the [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) given its ID. This action can not be undone. This endpoint returns 204 when the identity was deleted or when the identity was not found, in which case it is assumed that is has been deleted already.\n         * @summary Delete an Identity\n         * @param {IdentityApiDeleteIdentityRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteIdentity(requestParameters, options) {\n            return localVarFp.deleteIdentity(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Delete an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) credential by its type You can only delete second factor (aal2) credentials.\n         * @summary Delete a credential for a specific identity\n         * @param {IdentityApiDeleteIdentityCredentialsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteIdentityCredentials(requestParameters, options) {\n            return localVarFp.deleteIdentityCredentials(requestParameters.id, requestParameters.type, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Calling this endpoint irrecoverably and permanently deletes and invalidates all sessions that belong to the given Identity.\n         * @summary Delete & Invalidate an Identity\\'s Sessions\n         * @param {IdentityApiDeleteIdentitySessionsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteIdentitySessions(requestParameters, options) {\n            return localVarFp.deleteIdentitySessions(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Calling this endpoint deactivates the specified session. Session data is not deleted.\n         * @summary Deactivate a Session\n         * @param {IdentityApiDisableSessionRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        disableSession(requestParameters, options) {\n            return localVarFp.disableSession(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Calling this endpoint extends the given session ID. If `session.earliest_possible_extend` is set it will only extend the session after the specified time has passed.  Retrieve the session ID from the `/sessions/whoami` endpoint / `toSession` SDK method.\n         * @summary Extend a Session\n         * @param {IdentityApiExtendSessionRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        extendSession(requestParameters, options) {\n            return localVarFp.extendSession(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Return an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) by its ID. You can optionally include credentials (e.g. social sign in connections) in the response by using the `include_credential` query parameter.\n         * @summary Get an Identity\n         * @param {IdentityApiGetIdentityRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getIdentity(requestParameters, options) {\n            return localVarFp.getIdentity(requestParameters.id, requestParameters.includeCredential, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Return a specific identity schema.\n         * @summary Get Identity JSON Schema\n         * @param {IdentityApiGetIdentitySchemaRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getIdentitySchema(requestParameters, options) {\n            return localVarFp.getIdentitySchema(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint is useful for:  Getting a session object with all specified expandables that exist in an administrative context.\n         * @summary Get Session\n         * @param {IdentityApiGetSessionRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSession(requestParameters, options) {\n            return localVarFp.getSession(requestParameters.id, requestParameters.expand, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Lists all [identities](https://www.ory.sh/docs/kratos/concepts/identity-user-model) in the system.\n         * @summary List Identities\n         * @param {IdentityApiListIdentitiesRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIdentities(requestParameters = {}, options) {\n            return localVarFp.listIdentities(requestParameters.perPage, requestParameters.page, requestParameters.pageSize, requestParameters.pageToken, requestParameters.consistency, requestParameters.ids, requestParameters.credentialsIdentifier, requestParameters.previewCredentialsIdentifierSimilar, requestParameters.includeCredential, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns a list of all identity schemas currently in use.\n         * @summary Get all Identity Schemas\n         * @param {IdentityApiListIdentitySchemasRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIdentitySchemas(requestParameters = {}, options) {\n            return localVarFp.listIdentitySchemas(requestParameters.perPage, requestParameters.page, requestParameters.pageSize, requestParameters.pageToken, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint returns all sessions that belong to the given Identity.\n         * @summary List an Identity\\'s Sessions\n         * @param {IdentityApiListIdentitySessionsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIdentitySessions(requestParameters, options) {\n            return localVarFp.listIdentitySessions(requestParameters.id, requestParameters.perPage, requestParameters.page, requestParameters.pageSize, requestParameters.pageToken, requestParameters.active, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Listing all sessions that exist.\n         * @summary List All Sessions\n         * @param {IdentityApiListSessionsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listSessions(requestParameters = {}, options) {\n            return localVarFp.listSessions(requestParameters.pageSize, requestParameters.pageToken, requestParameters.active, requestParameters.expand, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Partially updates an [identity\\'s](https://www.ory.sh/docs/kratos/concepts/identity-user-model) field using [JSON Patch](https://jsonpatch.com/). The fields `id`, `stateChangedAt` and `credentials` can not be updated using this method.\n         * @summary Patch an Identity\n         * @param {IdentityApiPatchIdentityRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchIdentity(requestParameters, options) {\n            return localVarFp.patchIdentity(requestParameters.id, requestParameters.jsonPatch, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint updates an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model). The full identity payload (except credentials) is expected. It is possible to update the identity\\'s credentials as well.\n         * @summary Update an Identity\n         * @param {IdentityApiUpdateIdentityRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateIdentity(requestParameters, options) {\n            return localVarFp.updateIdentity(requestParameters.id, requestParameters.updateIdentityBody, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * IdentityApi - object-oriented interface\n * @export\n * @class IdentityApi\n * @extends {BaseAPI}\n */\nexport class IdentityApi extends BaseAPI {\n    /**\n     * Creates or delete multiple [identities](https://www.ory.sh/docs/kratos/concepts/identity-user-model). This endpoint can also be used to [import credentials](https://www.ory.sh/docs/kratos/manage-identities/import-user-accounts-identities) for instance passwords, social sign in configurations or multifactor methods.\n     * @summary Create and deletes multiple identities\n     * @param {IdentityApiBatchPatchIdentitiesRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    batchPatchIdentities(requestParameters = {}, options) {\n        return IdentityApiFp(this.configuration).batchPatchIdentities(requestParameters.patchIdentitiesBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Create an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model).  This endpoint can also be used to [import credentials](https://www.ory.sh/docs/kratos/manage-identities/import-user-accounts-identities) for instance passwords, social sign in configurations or multifactor methods.\n     * @summary Create an Identity\n     * @param {IdentityApiCreateIdentityRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    createIdentity(requestParameters = {}, options) {\n        return IdentityApiFp(this.configuration).createIdentity(requestParameters.createIdentityBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint creates a recovery code which should be given to the user in order for them to recover (or activate) their account.\n     * @summary Create a Recovery Code\n     * @param {IdentityApiCreateRecoveryCodeForIdentityRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    createRecoveryCodeForIdentity(requestParameters = {}, options) {\n        return IdentityApiFp(this.configuration).createRecoveryCodeForIdentity(requestParameters.createRecoveryCodeForIdentityBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint creates a recovery link which should be given to the user in order for them to recover (or activate) their account.\n     * @summary Create a Recovery Link\n     * @param {IdentityApiCreateRecoveryLinkForIdentityRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    createRecoveryLinkForIdentity(requestParameters = {}, options) {\n        return IdentityApiFp(this.configuration).createRecoveryLinkForIdentity(requestParameters.returnTo, requestParameters.createRecoveryLinkForIdentityBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Calling this endpoint irrecoverably and permanently deletes the [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) given its ID. This action can not be undone. This endpoint returns 204 when the identity was deleted or when the identity was not found, in which case it is assumed that is has been deleted already.\n     * @summary Delete an Identity\n     * @param {IdentityApiDeleteIdentityRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    deleteIdentity(requestParameters, options) {\n        return IdentityApiFp(this.configuration).deleteIdentity(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Delete an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) credential by its type You can only delete second factor (aal2) credentials.\n     * @summary Delete a credential for a specific identity\n     * @param {IdentityApiDeleteIdentityCredentialsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    deleteIdentityCredentials(requestParameters, options) {\n        return IdentityApiFp(this.configuration).deleteIdentityCredentials(requestParameters.id, requestParameters.type, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Calling this endpoint irrecoverably and permanently deletes and invalidates all sessions that belong to the given Identity.\n     * @summary Delete & Invalidate an Identity\\'s Sessions\n     * @param {IdentityApiDeleteIdentitySessionsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    deleteIdentitySessions(requestParameters, options) {\n        return IdentityApiFp(this.configuration).deleteIdentitySessions(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Calling this endpoint deactivates the specified session. Session data is not deleted.\n     * @summary Deactivate a Session\n     * @param {IdentityApiDisableSessionRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    disableSession(requestParameters, options) {\n        return IdentityApiFp(this.configuration).disableSession(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Calling this endpoint extends the given session ID. If `session.earliest_possible_extend` is set it will only extend the session after the specified time has passed.  Retrieve the session ID from the `/sessions/whoami` endpoint / `toSession` SDK method.\n     * @summary Extend a Session\n     * @param {IdentityApiExtendSessionRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    extendSession(requestParameters, options) {\n        return IdentityApiFp(this.configuration).extendSession(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Return an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model) by its ID. You can optionally include credentials (e.g. social sign in connections) in the response by using the `include_credential` query parameter.\n     * @summary Get an Identity\n     * @param {IdentityApiGetIdentityRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    getIdentity(requestParameters, options) {\n        return IdentityApiFp(this.configuration).getIdentity(requestParameters.id, requestParameters.includeCredential, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Return a specific identity schema.\n     * @summary Get Identity JSON Schema\n     * @param {IdentityApiGetIdentitySchemaRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    getIdentitySchema(requestParameters, options) {\n        return IdentityApiFp(this.configuration).getIdentitySchema(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint is useful for:  Getting a session object with all specified expandables that exist in an administrative context.\n     * @summary Get Session\n     * @param {IdentityApiGetSessionRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    getSession(requestParameters, options) {\n        return IdentityApiFp(this.configuration).getSession(requestParameters.id, requestParameters.expand, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Lists all [identities](https://www.ory.sh/docs/kratos/concepts/identity-user-model) in the system.\n     * @summary List Identities\n     * @param {IdentityApiListIdentitiesRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    listIdentities(requestParameters = {}, options) {\n        return IdentityApiFp(this.configuration).listIdentities(requestParameters.perPage, requestParameters.page, requestParameters.pageSize, requestParameters.pageToken, requestParameters.consistency, requestParameters.ids, requestParameters.credentialsIdentifier, requestParameters.previewCredentialsIdentifierSimilar, requestParameters.includeCredential, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns a list of all identity schemas currently in use.\n     * @summary Get all Identity Schemas\n     * @param {IdentityApiListIdentitySchemasRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    listIdentitySchemas(requestParameters = {}, options) {\n        return IdentityApiFp(this.configuration).listIdentitySchemas(requestParameters.perPage, requestParameters.page, requestParameters.pageSize, requestParameters.pageToken, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint returns all sessions that belong to the given Identity.\n     * @summary List an Identity\\'s Sessions\n     * @param {IdentityApiListIdentitySessionsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    listIdentitySessions(requestParameters, options) {\n        return IdentityApiFp(this.configuration).listIdentitySessions(requestParameters.id, requestParameters.perPage, requestParameters.page, requestParameters.pageSize, requestParameters.pageToken, requestParameters.active, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Listing all sessions that exist.\n     * @summary List All Sessions\n     * @param {IdentityApiListSessionsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    listSessions(requestParameters = {}, options) {\n        return IdentityApiFp(this.configuration).listSessions(requestParameters.pageSize, requestParameters.pageToken, requestParameters.active, requestParameters.expand, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Partially updates an [identity\\'s](https://www.ory.sh/docs/kratos/concepts/identity-user-model) field using [JSON Patch](https://jsonpatch.com/). The fields `id`, `stateChangedAt` and `credentials` can not be updated using this method.\n     * @summary Patch an Identity\n     * @param {IdentityApiPatchIdentityRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    patchIdentity(requestParameters, options) {\n        return IdentityApiFp(this.configuration).patchIdentity(requestParameters.id, requestParameters.jsonPatch, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint updates an [identity](https://www.ory.sh/docs/kratos/concepts/identity-user-model). The full identity payload (except credentials) is expected. It is possible to update the identity\\'s credentials as well.\n     * @summary Update an Identity\n     * @param {IdentityApiUpdateIdentityRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof IdentityApi\n     */\n    updateIdentity(requestParameters, options) {\n        return IdentityApiFp(this.configuration).updateIdentity(requestParameters.id, requestParameters.updateIdentityBody, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * @export\n */\nexport const DeleteIdentityCredentialsTypeEnum = {\n    Password: 'password',\n    Oidc: 'oidc',\n    Totp: 'totp',\n    LookupSecret: 'lookup_secret',\n    Webauthn: 'webauthn',\n    Code: 'code',\n    LinkRecovery: 'link_recovery',\n    CodeRecovery: 'code_recovery'\n};\n/**\n * @export\n */\nexport const GetIdentityIncludeCredentialEnum = {\n    Password: 'password',\n    Oidc: 'oidc',\n    Totp: 'totp',\n    LookupSecret: 'lookup_secret',\n    Webauthn: 'webauthn',\n    Code: 'code',\n    LinkRecovery: 'link_recovery',\n    CodeRecovery: 'code_recovery'\n};\n/**\n * @export\n */\nexport const GetSessionExpandEnum = {};\n/**\n * @export\n */\nexport const ListIdentitiesConsistencyEnum = {\n    Empty: '',\n    Strong: 'strong',\n    Eventual: 'eventual'\n};\n/**\n * @export\n */\nexport const ListSessionsExpandEnum = {};\n/**\n * JwkApi - axios parameter creator\n * @export\n */\nexport const JwkApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * This endpoint is capable of generating JSON Web Key Sets for you. There a different strategies available, such as symmetric cryptographic keys (HS256, HS512) and asymetric cryptographic keys (RS256, ECDSA). If the specified JSON Web Key Set does not exist, it will be created.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Create JSON Web Key\n         * @param {string} set The JSON Web Key Set ID\n         * @param {CreateJsonWebKeySet} createJsonWebKeySet\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createJsonWebKeySet: (set, createJsonWebKeySet, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'set' is not null or undefined\n            assertParamExists('createJsonWebKeySet', 'set', set);\n            // verify required parameter 'createJsonWebKeySet' is not null or undefined\n            assertParamExists('createJsonWebKeySet', 'createJsonWebKeySet', createJsonWebKeySet);\n            const localVarPath = `/admin/keys/{set}`\n                .replace(`{${\"set\"}}`, encodeURIComponent(String(set)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(createJsonWebKeySet, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to delete a single JSON Web Key.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Delete JSON Web Key\n         * @param {string} set The JSON Web Key Set\n         * @param {string} kid The JSON Web Key ID (kid)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteJsonWebKey: (set, kid, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'set' is not null or undefined\n            assertParamExists('deleteJsonWebKey', 'set', set);\n            // verify required parameter 'kid' is not null or undefined\n            assertParamExists('deleteJsonWebKey', 'kid', kid);\n            const localVarPath = `/admin/keys/{set}/{kid}`\n                .replace(`{${\"set\"}}`, encodeURIComponent(String(set)))\n                .replace(`{${\"kid\"}}`, encodeURIComponent(String(kid)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to delete a complete JSON Web Key Set and all the keys in that set.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Delete JSON Web Key Set\n         * @param {string} set The JSON Web Key Set\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteJsonWebKeySet: (set, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'set' is not null or undefined\n            assertParamExists('deleteJsonWebKeySet', 'set', set);\n            const localVarPath = `/admin/keys/{set}`\n                .replace(`{${\"set\"}}`, encodeURIComponent(String(set)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint returns a singular JSON Web Key contained in a set. It is identified by the set and the specific key ID (kid).\n         * @summary Get JSON Web Key\n         * @param {string} set JSON Web Key Set ID\n         * @param {string} kid JSON Web Key ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getJsonWebKey: (set, kid, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'set' is not null or undefined\n            assertParamExists('getJsonWebKey', 'set', set);\n            // verify required parameter 'kid' is not null or undefined\n            assertParamExists('getJsonWebKey', 'kid', kid);\n            const localVarPath = `/admin/keys/{set}/{kid}`\n                .replace(`{${\"set\"}}`, encodeURIComponent(String(set)))\n                .replace(`{${\"kid\"}}`, encodeURIComponent(String(kid)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint can be used to retrieve JWK Sets stored in ORY Hydra.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Retrieve a JSON Web Key Set\n         * @param {string} set JSON Web Key Set ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getJsonWebKeySet: (set, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'set' is not null or undefined\n            assertParamExists('getJsonWebKeySet', 'set', set);\n            const localVarPath = `/admin/keys/{set}`\n                .replace(`{${\"set\"}}`, encodeURIComponent(String(set)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this method if you do not want to let Hydra generate the JWKs for you, but instead save your own.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Set JSON Web Key\n         * @param {string} set The JSON Web Key Set ID\n         * @param {string} kid JSON Web Key ID\n         * @param {JsonWebKey} [jsonWebKey]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setJsonWebKey: (set, kid, jsonWebKey, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'set' is not null or undefined\n            assertParamExists('setJsonWebKey', 'set', set);\n            // verify required parameter 'kid' is not null or undefined\n            assertParamExists('setJsonWebKey', 'kid', kid);\n            const localVarPath = `/admin/keys/{set}/{kid}`\n                .replace(`{${\"set\"}}`, encodeURIComponent(String(set)))\n                .replace(`{${\"kid\"}}`, encodeURIComponent(String(kid)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(jsonWebKey, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this method if you do not want to let Hydra generate the JWKs for you, but instead save your own.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Update a JSON Web Key Set\n         * @param {string} set The JSON Web Key Set ID\n         * @param {JsonWebKeySet} [jsonWebKeySet]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setJsonWebKeySet: (set, jsonWebKeySet, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'set' is not null or undefined\n            assertParamExists('setJsonWebKeySet', 'set', set);\n            const localVarPath = `/admin/keys/{set}`\n                .replace(`{${\"set\"}}`, encodeURIComponent(String(set)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(jsonWebKeySet, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * JwkApi - functional programming interface\n * @export\n */\nexport const JwkApiFp = function (configuration) {\n    const localVarAxiosParamCreator = JwkApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * This endpoint is capable of generating JSON Web Key Sets for you. There a different strategies available, such as symmetric cryptographic keys (HS256, HS512) and asymetric cryptographic keys (RS256, ECDSA). If the specified JSON Web Key Set does not exist, it will be created.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Create JSON Web Key\n         * @param {string} set The JSON Web Key Set ID\n         * @param {CreateJsonWebKeySet} createJsonWebKeySet\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createJsonWebKeySet(set, createJsonWebKeySet, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createJsonWebKeySet(set, createJsonWebKeySet, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['JwkApi.createJsonWebKeySet']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to delete a single JSON Web Key.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Delete JSON Web Key\n         * @param {string} set The JSON Web Key Set\n         * @param {string} kid The JSON Web Key ID (kid)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteJsonWebKey(set, kid, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteJsonWebKey(set, kid, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['JwkApi.deleteJsonWebKey']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to delete a complete JSON Web Key Set and all the keys in that set.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Delete JSON Web Key Set\n         * @param {string} set The JSON Web Key Set\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteJsonWebKeySet(set, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteJsonWebKeySet(set, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['JwkApi.deleteJsonWebKeySet']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint returns a singular JSON Web Key contained in a set. It is identified by the set and the specific key ID (kid).\n         * @summary Get JSON Web Key\n         * @param {string} set JSON Web Key Set ID\n         * @param {string} kid JSON Web Key ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getJsonWebKey(set, kid, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getJsonWebKey(set, kid, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['JwkApi.getJsonWebKey']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint can be used to retrieve JWK Sets stored in ORY Hydra.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Retrieve a JSON Web Key Set\n         * @param {string} set JSON Web Key Set ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getJsonWebKeySet(set, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getJsonWebKeySet(set, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['JwkApi.getJsonWebKeySet']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this method if you do not want to let Hydra generate the JWKs for you, but instead save your own.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Set JSON Web Key\n         * @param {string} set The JSON Web Key Set ID\n         * @param {string} kid JSON Web Key ID\n         * @param {JsonWebKey} [jsonWebKey]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setJsonWebKey(set, kid, jsonWebKey, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.setJsonWebKey(set, kid, jsonWebKey, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['JwkApi.setJsonWebKey']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this method if you do not want to let Hydra generate the JWKs for you, but instead save your own.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Update a JSON Web Key Set\n         * @param {string} set The JSON Web Key Set ID\n         * @param {JsonWebKeySet} [jsonWebKeySet]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setJsonWebKeySet(set, jsonWebKeySet, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.setJsonWebKeySet(set, jsonWebKeySet, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['JwkApi.setJsonWebKeySet']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * JwkApi - factory interface\n * @export\n */\nexport const JwkApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = JwkApiFp(configuration);\n    return {\n        /**\n         * This endpoint is capable of generating JSON Web Key Sets for you. There a different strategies available, such as symmetric cryptographic keys (HS256, HS512) and asymetric cryptographic keys (RS256, ECDSA). If the specified JSON Web Key Set does not exist, it will be created.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Create JSON Web Key\n         * @param {JwkApiCreateJsonWebKeySetRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createJsonWebKeySet(requestParameters, options) {\n            return localVarFp.createJsonWebKeySet(requestParameters.set, requestParameters.createJsonWebKeySet, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to delete a single JSON Web Key.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Delete JSON Web Key\n         * @param {JwkApiDeleteJsonWebKeyRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteJsonWebKey(requestParameters, options) {\n            return localVarFp.deleteJsonWebKey(requestParameters.set, requestParameters.kid, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to delete a complete JSON Web Key Set and all the keys in that set.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Delete JSON Web Key Set\n         * @param {JwkApiDeleteJsonWebKeySetRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteJsonWebKeySet(requestParameters, options) {\n            return localVarFp.deleteJsonWebKeySet(requestParameters.set, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint returns a singular JSON Web Key contained in a set. It is identified by the set and the specific key ID (kid).\n         * @summary Get JSON Web Key\n         * @param {JwkApiGetJsonWebKeyRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getJsonWebKey(requestParameters, options) {\n            return localVarFp.getJsonWebKey(requestParameters.set, requestParameters.kid, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint can be used to retrieve JWK Sets stored in ORY Hydra.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Retrieve a JSON Web Key Set\n         * @param {JwkApiGetJsonWebKeySetRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getJsonWebKeySet(requestParameters, options) {\n            return localVarFp.getJsonWebKeySet(requestParameters.set, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this method if you do not want to let Hydra generate the JWKs for you, but instead save your own.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Set JSON Web Key\n         * @param {JwkApiSetJsonWebKeyRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setJsonWebKey(requestParameters, options) {\n            return localVarFp.setJsonWebKey(requestParameters.set, requestParameters.kid, requestParameters.jsonWebKey, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this method if you do not want to let Hydra generate the JWKs for you, but instead save your own.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n         * @summary Update a JSON Web Key Set\n         * @param {JwkApiSetJsonWebKeySetRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setJsonWebKeySet(requestParameters, options) {\n            return localVarFp.setJsonWebKeySet(requestParameters.set, requestParameters.jsonWebKeySet, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * JwkApi - object-oriented interface\n * @export\n * @class JwkApi\n * @extends {BaseAPI}\n */\nexport class JwkApi extends BaseAPI {\n    /**\n     * This endpoint is capable of generating JSON Web Key Sets for you. There a different strategies available, such as symmetric cryptographic keys (HS256, HS512) and asymetric cryptographic keys (RS256, ECDSA). If the specified JSON Web Key Set does not exist, it will be created.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n     * @summary Create JSON Web Key\n     * @param {JwkApiCreateJsonWebKeySetRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof JwkApi\n     */\n    createJsonWebKeySet(requestParameters, options) {\n        return JwkApiFp(this.configuration).createJsonWebKeySet(requestParameters.set, requestParameters.createJsonWebKeySet, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to delete a single JSON Web Key.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n     * @summary Delete JSON Web Key\n     * @param {JwkApiDeleteJsonWebKeyRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof JwkApi\n     */\n    deleteJsonWebKey(requestParameters, options) {\n        return JwkApiFp(this.configuration).deleteJsonWebKey(requestParameters.set, requestParameters.kid, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to delete a complete JSON Web Key Set and all the keys in that set.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n     * @summary Delete JSON Web Key Set\n     * @param {JwkApiDeleteJsonWebKeySetRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof JwkApi\n     */\n    deleteJsonWebKeySet(requestParameters, options) {\n        return JwkApiFp(this.configuration).deleteJsonWebKeySet(requestParameters.set, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint returns a singular JSON Web Key contained in a set. It is identified by the set and the specific key ID (kid).\n     * @summary Get JSON Web Key\n     * @param {JwkApiGetJsonWebKeyRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof JwkApi\n     */\n    getJsonWebKey(requestParameters, options) {\n        return JwkApiFp(this.configuration).getJsonWebKey(requestParameters.set, requestParameters.kid, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint can be used to retrieve JWK Sets stored in ORY Hydra.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n     * @summary Retrieve a JSON Web Key Set\n     * @param {JwkApiGetJsonWebKeySetRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof JwkApi\n     */\n    getJsonWebKeySet(requestParameters, options) {\n        return JwkApiFp(this.configuration).getJsonWebKeySet(requestParameters.set, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this method if you do not want to let Hydra generate the JWKs for you, but instead save your own.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n     * @summary Set JSON Web Key\n     * @param {JwkApiSetJsonWebKeyRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof JwkApi\n     */\n    setJsonWebKey(requestParameters, options) {\n        return JwkApiFp(this.configuration).setJsonWebKey(requestParameters.set, requestParameters.kid, requestParameters.jsonWebKey, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this method if you do not want to let Hydra generate the JWKs for you, but instead save your own.  A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. A JWK Set is a JSON data structure that represents a set of JWKs. A JSON Web Key is identified by its set and key id. ORY Hydra uses this functionality to store cryptographic keys used for TLS and JSON Web Tokens (such as OpenID Connect ID tokens), and allows storing user-defined keys as well.\n     * @summary Update a JSON Web Key Set\n     * @param {JwkApiSetJsonWebKeySetRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof JwkApi\n     */\n    setJsonWebKeySet(requestParameters, options) {\n        return JwkApiFp(this.configuration).setJsonWebKeySet(requestParameters.set, requestParameters.jsonWebKeySet, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * MetadataApi - axios parameter creator\n * @export\n */\nexport const MetadataApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * This endpoint returns the version of Ory Kratos.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of this service, the version will never refer to the cluster state, only to a single instance.\n         * @summary Return Running Software Version.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVersion: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/version`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint returns a HTTP 200 status code when Ory Kratos is accepting incoming HTTP requests. This status does currently not include checks whether the database connection is working.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of this service, the health status will never refer to the cluster state, only to a single instance.\n         * @summary Check HTTP Server Status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        isAlive: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/health/alive`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint returns a HTTP 200 status code when Ory Kratos is up running and the environment dependencies (e.g. the database) are responsive as well.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of Ory Kratos, the health status will never refer to the cluster state, only to a single instance.\n         * @summary Check HTTP Server and Database Status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        isReady: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/health/ready`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * MetadataApi - functional programming interface\n * @export\n */\nexport const MetadataApiFp = function (configuration) {\n    const localVarAxiosParamCreator = MetadataApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * This endpoint returns the version of Ory Kratos.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of this service, the version will never refer to the cluster state, only to a single instance.\n         * @summary Return Running Software Version.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVersion(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getVersion(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['MetadataApi.getVersion']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint returns a HTTP 200 status code when Ory Kratos is accepting incoming HTTP requests. This status does currently not include checks whether the database connection is working.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of this service, the health status will never refer to the cluster state, only to a single instance.\n         * @summary Check HTTP Server Status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        isAlive(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.isAlive(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['MetadataApi.isAlive']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint returns a HTTP 200 status code when Ory Kratos is up running and the environment dependencies (e.g. the database) are responsive as well.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of Ory Kratos, the health status will never refer to the cluster state, only to a single instance.\n         * @summary Check HTTP Server and Database Status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        isReady(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.isReady(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['MetadataApi.isReady']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * MetadataApi - factory interface\n * @export\n */\nexport const MetadataApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = MetadataApiFp(configuration);\n    return {\n        /**\n         * This endpoint returns the version of Ory Kratos.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of this service, the version will never refer to the cluster state, only to a single instance.\n         * @summary Return Running Software Version.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVersion(options) {\n            return localVarFp.getVersion(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint returns a HTTP 200 status code when Ory Kratos is accepting incoming HTTP requests. This status does currently not include checks whether the database connection is working.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of this service, the health status will never refer to the cluster state, only to a single instance.\n         * @summary Check HTTP Server Status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        isAlive(options) {\n            return localVarFp.isAlive(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint returns a HTTP 200 status code when Ory Kratos is up running and the environment dependencies (e.g. the database) are responsive as well.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of Ory Kratos, the health status will never refer to the cluster state, only to a single instance.\n         * @summary Check HTTP Server and Database Status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        isReady(options) {\n            return localVarFp.isReady(options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * MetadataApi - object-oriented interface\n * @export\n * @class MetadataApi\n * @extends {BaseAPI}\n */\nexport class MetadataApi extends BaseAPI {\n    /**\n     * This endpoint returns the version of Ory Kratos.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of this service, the version will never refer to the cluster state, only to a single instance.\n     * @summary Return Running Software Version.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MetadataApi\n     */\n    getVersion(options) {\n        return MetadataApiFp(this.configuration).getVersion(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint returns a HTTP 200 status code when Ory Kratos is accepting incoming HTTP requests. This status does currently not include checks whether the database connection is working.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of this service, the health status will never refer to the cluster state, only to a single instance.\n     * @summary Check HTTP Server Status\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MetadataApi\n     */\n    isAlive(options) {\n        return MetadataApiFp(this.configuration).isAlive(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint returns a HTTP 200 status code when Ory Kratos is up running and the environment dependencies (e.g. the database) are responsive as well.  If the service supports TLS Edge Termination, this endpoint does not require the `X-Forwarded-Proto` header to be set.  Be aware that if you are running multiple nodes of Ory Kratos, the health status will never refer to the cluster state, only to a single instance.\n     * @summary Check HTTP Server and Database Status\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MetadataApi\n     */\n    isReady(options) {\n        return MetadataApiFp(this.configuration).isReady(options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * OAuth2Api - axios parameter creator\n * @export\n */\nexport const OAuth2ApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  This endpoint tells Ory that the subject has authorized the OAuth 2.0 client to access resources on his/her behalf. The consent provider includes additional information, such as session data for access and ID tokens, and if the consent request should be used as basis for future requests.  The response contains a redirect URL which the consent provider should redirect the user-agent to.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n         * @summary Accept OAuth 2.0 Consent Request\n         * @param {string} consentChallenge OAuth 2.0 Consent Request Challenge\n         * @param {AcceptOAuth2ConsentRequest} [acceptOAuth2ConsentRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        acceptOAuth2ConsentRequest: (consentChallenge, acceptOAuth2ConsentRequest, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'consentChallenge' is not null or undefined\n            assertParamExists('acceptOAuth2ConsentRequest', 'consentChallenge', consentChallenge);\n            const localVarPath = `/admin/oauth2/auth/requests/consent/accept`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (consentChallenge !== undefined) {\n                localVarQueryParameter['consent_challenge'] = consentChallenge;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(acceptOAuth2ConsentRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.  This endpoint tells Ory that the subject has successfully authenticated and includes additional information such as the subject\\'s ID and if Ory should remember the subject\\'s subject agent for future authentication attempts by setting a cookie.  The response contains a redirect URL which the login provider should redirect the user-agent to.\n         * @summary Accept OAuth 2.0 Login Request\n         * @param {string} loginChallenge OAuth 2.0 Login Request Challenge\n         * @param {AcceptOAuth2LoginRequest} [acceptOAuth2LoginRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        acceptOAuth2LoginRequest: (loginChallenge, acceptOAuth2LoginRequest, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'loginChallenge' is not null or undefined\n            assertParamExists('acceptOAuth2LoginRequest', 'loginChallenge', loginChallenge);\n            const localVarPath = `/admin/oauth2/auth/requests/login/accept`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (loginChallenge !== undefined) {\n                localVarQueryParameter['login_challenge'] = loginChallenge;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(acceptOAuth2LoginRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * When a user or an application requests Ory OAuth 2.0 to remove the session state of a subject, this endpoint is used to confirm that logout request.  The response contains a redirect URL which the consent provider should redirect the user-agent to.\n         * @summary Accept OAuth 2.0 Session Logout Request\n         * @param {string} logoutChallenge OAuth 2.0 Logout Request Challenge\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        acceptOAuth2LogoutRequest: (logoutChallenge, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'logoutChallenge' is not null or undefined\n            assertParamExists('acceptOAuth2LogoutRequest', 'logoutChallenge', logoutChallenge);\n            const localVarPath = `/admin/oauth2/auth/requests/logout/accept`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (logoutChallenge !== undefined) {\n                localVarQueryParameter['logout_challenge'] = logoutChallenge;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Create a new OAuth 2.0 client. If you pass `client_secret` the secret is used, otherwise a random secret is generated. The secret is echoed in the response. It is not possible to retrieve it later on.\n         * @summary Create OAuth 2.0 Client\n         * @param {OAuth2Client} oAuth2Client OAuth 2.0 Client Request Body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createOAuth2Client: (oAuth2Client, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'oAuth2Client' is not null or undefined\n            assertParamExists('createOAuth2Client', 'oAuth2Client', oAuth2Client);\n            const localVarPath = `/admin/clients`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(oAuth2Client, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Delete an existing OAuth 2.0 Client by its ID.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.  Make sure that this endpoint is well protected and only callable by first-party components.\n         * @summary Delete OAuth 2.0 Client\n         * @param {string} id The id of the OAuth 2.0 Client.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOAuth2Client: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('deleteOAuth2Client', 'id', id);\n            const localVarPath = `/admin/clients/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint deletes OAuth2 access tokens issued to an OAuth 2.0 Client from the database.\n         * @summary Delete OAuth 2.0 Access Tokens from specific OAuth 2.0 Client\n         * @param {string} clientId OAuth 2.0 Client ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOAuth2Token: (clientId, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'clientId' is not null or undefined\n            assertParamExists('deleteOAuth2Token', 'clientId', clientId);\n            const localVarPath = `/admin/oauth2/tokens`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (clientId !== undefined) {\n                localVarQueryParameter['client_id'] = clientId;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to delete trusted JWT Bearer Grant Type Issuer. The ID is the one returned when you created the trust relationship.  Once deleted, the associated issuer will no longer be able to perform the JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grant.\n         * @summary Delete Trusted OAuth2 JWT Bearer Grant Type Issuer\n         * @param {string} id The id of the desired grant\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteTrustedOAuth2JwtGrantIssuer: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('deleteTrustedOAuth2JwtGrantIssuer', 'id', id);\n            const localVarPath = `/admin/trust/grants/jwt-bearer/issuers/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Get an OAuth 2.0 client by its ID. This endpoint never returns the client secret.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Get an OAuth 2.0 Client\n         * @param {string} id The id of the OAuth 2.0 Client.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2Client: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getOAuth2Client', 'id', id);\n            const localVarPath = `/admin/clients/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n         * @summary Get OAuth 2.0 Consent Request\n         * @param {string} consentChallenge OAuth 2.0 Consent Request Challenge\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2ConsentRequest: (consentChallenge, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'consentChallenge' is not null or undefined\n            assertParamExists('getOAuth2ConsentRequest', 'consentChallenge', consentChallenge);\n            const localVarPath = `/admin/oauth2/auth/requests/consent`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (consentChallenge !== undefined) {\n                localVarQueryParameter['consent_challenge'] = consentChallenge;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  Per default, the login provider is Ory itself. You may use a different login provider which needs to be a web-app you write and host, and it must be able to authenticate (\\\"show the subject a login screen\\\") a subject (in OAuth2 the proper name for subject is \\\"resource owner\\\").  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.\n         * @summary Get OAuth 2.0 Login Request\n         * @param {string} loginChallenge OAuth 2.0 Login Request Challenge\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2LoginRequest: (loginChallenge, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'loginChallenge' is not null or undefined\n            assertParamExists('getOAuth2LoginRequest', 'loginChallenge', loginChallenge);\n            const localVarPath = `/admin/oauth2/auth/requests/login`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (loginChallenge !== undefined) {\n                localVarQueryParameter['login_challenge'] = loginChallenge;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to fetch an Ory OAuth 2.0 logout request.\n         * @summary Get OAuth 2.0 Session Logout Request\n         * @param {string} logoutChallenge\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2LogoutRequest: (logoutChallenge, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'logoutChallenge' is not null or undefined\n            assertParamExists('getOAuth2LogoutRequest', 'logoutChallenge', logoutChallenge);\n            const localVarPath = `/admin/oauth2/auth/requests/logout`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (logoutChallenge !== undefined) {\n                localVarQueryParameter['logout_challenge'] = logoutChallenge;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to get a trusted JWT Bearer Grant Type Issuer. The ID is the one returned when you created the trust relationship.\n         * @summary Get Trusted OAuth2 JWT Bearer Grant Type Issuer\n         * @param {string} id The id of the desired grant\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getTrustedOAuth2JwtGrantIssuer: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getTrustedOAuth2JwtGrantIssuer', 'id', id);\n            const localVarPath = `/admin/trust/grants/jwt-bearer/issuers/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * The introspection endpoint allows to check if a token (both refresh and access) is active or not. An active token is neither expired nor revoked. If a token is active, additional information on the token will be included. You can set additional data for a token by setting `session.access_token` during the consent flow.\n         * @summary Introspect OAuth2 Access and Refresh Tokens\n         * @param {string} token The string value of the token. For access tokens, this is the \\\\\\&quot;access_token\\\\\\&quot; value returned from the token endpoint defined in OAuth 2.0. For refresh tokens, this is the \\\\\\&quot;refresh_token\\\\\\&quot; value returned.\n         * @param {string} [scope] An optional, space separated list of required scopes. If the access token was not granted one of the scopes, the result of active will be false.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        introspectOAuth2Token: (token, scope, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'token' is not null or undefined\n            assertParamExists('introspectOAuth2Token', 'token', token);\n            const localVarPath = `/admin/oauth2/introspect`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            const localVarFormParams = new URLSearchParams();\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (scope !== undefined) {\n                localVarFormParams.set('scope', scope);\n            }\n            if (token !== undefined) {\n                localVarFormParams.set('token', token);\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/x-www-form-urlencoded';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = localVarFormParams.toString();\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint lists all clients in the database, and never returns client secrets. As a default it lists the first 100 clients.\n         * @summary List OAuth 2.0 Clients\n         * @param {number} [pageSize] Items per Page  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [clientName] The name of the clients to filter by.\n         * @param {string} [owner] The owner of the clients to filter by.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listOAuth2Clients: (pageSize, pageToken, clientName, owner, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/clients`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (pageSize !== undefined) {\n                localVarQueryParameter['page_size'] = pageSize;\n            }\n            if (pageToken !== undefined) {\n                localVarQueryParameter['page_token'] = pageToken;\n            }\n            if (clientName !== undefined) {\n                localVarQueryParameter['client_name'] = clientName;\n            }\n            if (owner !== undefined) {\n                localVarQueryParameter['owner'] = owner;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint lists all subject\\'s granted consent sessions, including client and granted scope. If the subject is unknown or has not granted any consent sessions yet, the endpoint returns an empty JSON array with status code 200 OK.\n         * @summary List OAuth 2.0 Consent Sessions of a Subject\n         * @param {string} subject The subject to list the consent sessions for.\n         * @param {number} [pageSize] Items per Page  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [loginSessionId] The login session id to list the consent sessions for.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listOAuth2ConsentSessions: (subject, pageSize, pageToken, loginSessionId, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'subject' is not null or undefined\n            assertParamExists('listOAuth2ConsentSessions', 'subject', subject);\n            const localVarPath = `/admin/oauth2/auth/sessions/consent`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (pageSize !== undefined) {\n                localVarQueryParameter['page_size'] = pageSize;\n            }\n            if (pageToken !== undefined) {\n                localVarQueryParameter['page_token'] = pageToken;\n            }\n            if (subject !== undefined) {\n                localVarQueryParameter['subject'] = subject;\n            }\n            if (loginSessionId !== undefined) {\n                localVarQueryParameter['login_session_id'] = loginSessionId;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to list all trusted JWT Bearer Grant Type Issuers.\n         * @summary List Trusted OAuth2 JWT Bearer Grant Type Issuers\n         * @param {number} [maxItems]\n         * @param {number} [defaultItems]\n         * @param {string} [issuer] If optional \\&quot;issuer\\&quot; is supplied, only jwt-bearer grants with this issuer will be returned.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listTrustedOAuth2JwtGrantIssuers: (maxItems, defaultItems, issuer, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/trust/grants/jwt-bearer/issuers`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (maxItems !== undefined) {\n                localVarQueryParameter['MaxItems'] = maxItems;\n            }\n            if (defaultItems !== undefined) {\n                localVarQueryParameter['DefaultItems'] = defaultItems;\n            }\n            if (issuer !== undefined) {\n                localVarQueryParameter['issuer'] = issuer;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use open source libraries to perform OAuth 2.0 and OpenID Connect available for any programming language. You can find a list of libraries at https://oauth.net/code/  The Ory SDK is not yet able to this endpoint properly.\n         * @summary OAuth 2.0 Authorize Endpoint\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        oAuth2Authorize: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/oauth2/auth`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use open source libraries to perform OAuth 2.0 and OpenID Connect available for any programming language. You can find a list of libraries here https://oauth.net/code/  The Ory SDK is not yet able to this endpoint properly.\n         * @summary The OAuth 2.0 Token Endpoint\n         * @param {string} grantType\n         * @param {string} [clientId]\n         * @param {string} [code]\n         * @param {string} [redirectUri]\n         * @param {string} [refreshToken]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        oauth2TokenExchange: (grantType, clientId, code, redirectUri, refreshToken, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'grantType' is not null or undefined\n            assertParamExists('oauth2TokenExchange', 'grantType', grantType);\n            const localVarPath = `/oauth2/token`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            const localVarFormParams = new URLSearchParams();\n            // authentication basic required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication oauth2 required\n            // oauth required\n            yield setOAuthToObject(localVarHeaderParameter, \"oauth2\", [], configuration);\n            if (clientId !== undefined) {\n                localVarFormParams.set('client_id', clientId);\n            }\n            if (code !== undefined) {\n                localVarFormParams.set('code', code);\n            }\n            if (grantType !== undefined) {\n                localVarFormParams.set('grant_type', grantType);\n            }\n            if (redirectUri !== undefined) {\n                localVarFormParams.set('redirect_uri', redirectUri);\n            }\n            if (refreshToken !== undefined) {\n                localVarFormParams.set('refresh_token', refreshToken);\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/x-www-form-urlencoded';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = localVarFormParams.toString();\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Patch an existing OAuth 2.0 Client using JSON Patch. If you pass `client_secret` the secret will be updated and returned via the API. This is the only time you will be able to retrieve the client secret, so write it down and keep it safe.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Patch OAuth 2.0 Client\n         * @param {string} id The id of the OAuth 2.0 Client.\n         * @param {Array<JsonPatch>} jsonPatch OAuth 2.0 Client JSON Patch Body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchOAuth2Client: (id, jsonPatch, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('patchOAuth2Client', 'id', id);\n            // verify required parameter 'jsonPatch' is not null or undefined\n            assertParamExists('patchOAuth2Client', 'jsonPatch', jsonPatch);\n            const localVarPath = `/admin/clients/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PATCH' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(jsonPatch, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  This endpoint tells Ory that the subject has not authorized the OAuth 2.0 client to access resources on his/her behalf. The consent provider must include a reason why the consent was not granted.  The response contains a redirect URL which the consent provider should redirect the user-agent to.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n         * @summary Reject OAuth 2.0 Consent Request\n         * @param {string} consentChallenge OAuth 2.0 Consent Request Challenge\n         * @param {RejectOAuth2Request} [rejectOAuth2Request]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        rejectOAuth2ConsentRequest: (consentChallenge, rejectOAuth2Request, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'consentChallenge' is not null or undefined\n            assertParamExists('rejectOAuth2ConsentRequest', 'consentChallenge', consentChallenge);\n            const localVarPath = `/admin/oauth2/auth/requests/consent/reject`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (consentChallenge !== undefined) {\n                localVarQueryParameter['consent_challenge'] = consentChallenge;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(rejectOAuth2Request, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.  This endpoint tells Ory that the subject has not authenticated and includes a reason why the authentication was denied.  The response contains a redirect URL which the login provider should redirect the user-agent to.\n         * @summary Reject OAuth 2.0 Login Request\n         * @param {string} loginChallenge OAuth 2.0 Login Request Challenge\n         * @param {RejectOAuth2Request} [rejectOAuth2Request]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        rejectOAuth2LoginRequest: (loginChallenge, rejectOAuth2Request, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'loginChallenge' is not null or undefined\n            assertParamExists('rejectOAuth2LoginRequest', 'loginChallenge', loginChallenge);\n            const localVarPath = `/admin/oauth2/auth/requests/login/reject`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (loginChallenge !== undefined) {\n                localVarQueryParameter['login_challenge'] = loginChallenge;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(rejectOAuth2Request, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * When a user or an application requests Ory OAuth 2.0 to remove the session state of a subject, this endpoint is used to deny that logout request. No HTTP request body is required.  The response is empty as the logout provider has to chose what action to perform next.\n         * @summary Reject OAuth 2.0 Session Logout Request\n         * @param {string} logoutChallenge\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        rejectOAuth2LogoutRequest: (logoutChallenge, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'logoutChallenge' is not null or undefined\n            assertParamExists('rejectOAuth2LogoutRequest', 'logoutChallenge', logoutChallenge);\n            const localVarPath = `/admin/oauth2/auth/requests/logout/reject`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (logoutChallenge !== undefined) {\n                localVarQueryParameter['logout_challenge'] = logoutChallenge;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint revokes a subject\\'s granted consent sessions and invalidates all associated OAuth 2.0 Access Tokens. You may also only revoke sessions for a specific OAuth 2.0 Client ID.\n         * @summary Revoke OAuth 2.0 Consent Sessions of a Subject\n         * @param {string} subject OAuth 2.0 Consent Subject  The subject whose consent sessions should be deleted.\n         * @param {string} [client] OAuth 2.0 Client ID  If set, deletes only those consent sessions that have been granted to the specified OAuth 2.0 Client ID.\n         * @param {boolean} [all] Revoke All Consent Sessions  If set to &#x60;true&#x60; deletes all consent sessions by the Subject that have been granted.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOAuth2ConsentSessions: (subject, client, all, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'subject' is not null or undefined\n            assertParamExists('revokeOAuth2ConsentSessions', 'subject', subject);\n            const localVarPath = `/admin/oauth2/auth/sessions/consent`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (subject !== undefined) {\n                localVarQueryParameter['subject'] = subject;\n            }\n            if (client !== undefined) {\n                localVarQueryParameter['client'] = client;\n            }\n            if (all !== undefined) {\n                localVarQueryParameter['all'] = all;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint invalidates authentication sessions. After revoking the authentication session(s), the subject has to re-authenticate at the Ory OAuth2 Provider. This endpoint does not invalidate any tokens.  If you send the subject in a query param, all authentication sessions that belong to that subject are revoked. No OpenID Connect Front- or Back-channel logout is performed in this case.  Alternatively, you can send a SessionID via `sid` query param, in which case, only the session that is connected to that SessionID is revoked. OpenID Connect Back-channel logout is performed in this case.\n         * @summary Revokes OAuth 2.0 Login Sessions by either a Subject or a SessionID\n         * @param {string} [subject] OAuth 2.0 Subject  The subject to revoke authentication sessions for.\n         * @param {string} [sid] OAuth 2.0 Subject  The subject to revoke authentication sessions for.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOAuth2LoginSessions: (subject, sid, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/oauth2/auth/sessions/login`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (subject !== undefined) {\n                localVarQueryParameter['subject'] = subject;\n            }\n            if (sid !== undefined) {\n                localVarQueryParameter['sid'] = sid;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Revoking a token (both access and refresh) means that the tokens will be invalid. A revoked access token can no longer be used to make access requests, and a revoked refresh token can no longer be used to refresh an access token. Revoking a refresh token also invalidates the access token that was created with it. A token may only be revoked by the client the token was generated for.\n         * @summary Revoke OAuth 2.0 Access or Refresh Token\n         * @param {string} token\n         * @param {string} [clientId]\n         * @param {string} [clientSecret]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOAuth2Token: (token, clientId, clientSecret, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'token' is not null or undefined\n            assertParamExists('revokeOAuth2Token', 'token', token);\n            const localVarPath = `/oauth2/revoke`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            const localVarFormParams = new URLSearchParams();\n            // authentication basic required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication oauth2 required\n            // oauth required\n            yield setOAuthToObject(localVarHeaderParameter, \"oauth2\", [], configuration);\n            if (clientId !== undefined) {\n                localVarFormParams.set('client_id', clientId);\n            }\n            if (clientSecret !== undefined) {\n                localVarFormParams.set('client_secret', clientSecret);\n            }\n            if (token !== undefined) {\n                localVarFormParams.set('token', token);\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/x-www-form-urlencoded';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = localVarFormParams.toString();\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Replaces an existing OAuth 2.0 Client with the payload you send. If you pass `client_secret` the secret is used, otherwise the existing secret is used.  If set, the secret is echoed in the response. It is not possible to retrieve it later on.  OAuth 2.0 Clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Set OAuth 2.0 Client\n         * @param {string} id OAuth 2.0 Client ID\n         * @param {OAuth2Client} oAuth2Client OAuth 2.0 Client Request Body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOAuth2Client: (id, oAuth2Client, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('setOAuth2Client', 'id', id);\n            // verify required parameter 'oAuth2Client' is not null or undefined\n            assertParamExists('setOAuth2Client', 'oAuth2Client', oAuth2Client);\n            const localVarPath = `/admin/clients/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(oAuth2Client, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Set lifespans of different token types issued for this OAuth 2.0 client. Does not modify other fields.\n         * @summary Set OAuth2 Client Token Lifespans\n         * @param {string} id OAuth 2.0 Client ID\n         * @param {OAuth2ClientTokenLifespans} [oAuth2ClientTokenLifespans]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOAuth2ClientLifespans: (id, oAuth2ClientTokenLifespans, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('setOAuth2ClientLifespans', 'id', id);\n            const localVarPath = `/admin/clients/{id}/lifespans`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(oAuth2ClientTokenLifespans, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to establish a trust relationship for a JWT issuer to perform JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants [RFC7523](https://datatracker.ietf.org/doc/html/rfc7523).\n         * @summary Trust OAuth2 JWT Bearer Grant Type Issuer\n         * @param {TrustOAuth2JwtGrantIssuer} [trustOAuth2JwtGrantIssuer]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        trustOAuth2JwtGrantIssuer: (trustOAuth2JwtGrantIssuer, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/trust/grants/jwt-bearer/issuers`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(trustOAuth2JwtGrantIssuer, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * OAuth2Api - functional programming interface\n * @export\n */\nexport const OAuth2ApiFp = function (configuration) {\n    const localVarAxiosParamCreator = OAuth2ApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  This endpoint tells Ory that the subject has authorized the OAuth 2.0 client to access resources on his/her behalf. The consent provider includes additional information, such as session data for access and ID tokens, and if the consent request should be used as basis for future requests.  The response contains a redirect URL which the consent provider should redirect the user-agent to.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n         * @summary Accept OAuth 2.0 Consent Request\n         * @param {string} consentChallenge OAuth 2.0 Consent Request Challenge\n         * @param {AcceptOAuth2ConsentRequest} [acceptOAuth2ConsentRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        acceptOAuth2ConsentRequest(consentChallenge, acceptOAuth2ConsentRequest, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.acceptOAuth2ConsentRequest(consentChallenge, acceptOAuth2ConsentRequest, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.acceptOAuth2ConsentRequest']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.  This endpoint tells Ory that the subject has successfully authenticated and includes additional information such as the subject\\'s ID and if Ory should remember the subject\\'s subject agent for future authentication attempts by setting a cookie.  The response contains a redirect URL which the login provider should redirect the user-agent to.\n         * @summary Accept OAuth 2.0 Login Request\n         * @param {string} loginChallenge OAuth 2.0 Login Request Challenge\n         * @param {AcceptOAuth2LoginRequest} [acceptOAuth2LoginRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        acceptOAuth2LoginRequest(loginChallenge, acceptOAuth2LoginRequest, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.acceptOAuth2LoginRequest(loginChallenge, acceptOAuth2LoginRequest, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.acceptOAuth2LoginRequest']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * When a user or an application requests Ory OAuth 2.0 to remove the session state of a subject, this endpoint is used to confirm that logout request.  The response contains a redirect URL which the consent provider should redirect the user-agent to.\n         * @summary Accept OAuth 2.0 Session Logout Request\n         * @param {string} logoutChallenge OAuth 2.0 Logout Request Challenge\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        acceptOAuth2LogoutRequest(logoutChallenge, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.acceptOAuth2LogoutRequest(logoutChallenge, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.acceptOAuth2LogoutRequest']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Create a new OAuth 2.0 client. If you pass `client_secret` the secret is used, otherwise a random secret is generated. The secret is echoed in the response. It is not possible to retrieve it later on.\n         * @summary Create OAuth 2.0 Client\n         * @param {OAuth2Client} oAuth2Client OAuth 2.0 Client Request Body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createOAuth2Client(oAuth2Client, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createOAuth2Client(oAuth2Client, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.createOAuth2Client']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Delete an existing OAuth 2.0 Client by its ID.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.  Make sure that this endpoint is well protected and only callable by first-party components.\n         * @summary Delete OAuth 2.0 Client\n         * @param {string} id The id of the OAuth 2.0 Client.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOAuth2Client(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteOAuth2Client(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.deleteOAuth2Client']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint deletes OAuth2 access tokens issued to an OAuth 2.0 Client from the database.\n         * @summary Delete OAuth 2.0 Access Tokens from specific OAuth 2.0 Client\n         * @param {string} clientId OAuth 2.0 Client ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOAuth2Token(clientId, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteOAuth2Token(clientId, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.deleteOAuth2Token']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to delete trusted JWT Bearer Grant Type Issuer. The ID is the one returned when you created the trust relationship.  Once deleted, the associated issuer will no longer be able to perform the JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grant.\n         * @summary Delete Trusted OAuth2 JWT Bearer Grant Type Issuer\n         * @param {string} id The id of the desired grant\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteTrustedOAuth2JwtGrantIssuer(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteTrustedOAuth2JwtGrantIssuer(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.deleteTrustedOAuth2JwtGrantIssuer']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Get an OAuth 2.0 client by its ID. This endpoint never returns the client secret.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Get an OAuth 2.0 Client\n         * @param {string} id The id of the OAuth 2.0 Client.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2Client(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getOAuth2Client(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.getOAuth2Client']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n         * @summary Get OAuth 2.0 Consent Request\n         * @param {string} consentChallenge OAuth 2.0 Consent Request Challenge\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2ConsentRequest(consentChallenge, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getOAuth2ConsentRequest(consentChallenge, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.getOAuth2ConsentRequest']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  Per default, the login provider is Ory itself. You may use a different login provider which needs to be a web-app you write and host, and it must be able to authenticate (\\\"show the subject a login screen\\\") a subject (in OAuth2 the proper name for subject is \\\"resource owner\\\").  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.\n         * @summary Get OAuth 2.0 Login Request\n         * @param {string} loginChallenge OAuth 2.0 Login Request Challenge\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2LoginRequest(loginChallenge, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getOAuth2LoginRequest(loginChallenge, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.getOAuth2LoginRequest']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to fetch an Ory OAuth 2.0 logout request.\n         * @summary Get OAuth 2.0 Session Logout Request\n         * @param {string} logoutChallenge\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2LogoutRequest(logoutChallenge, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getOAuth2LogoutRequest(logoutChallenge, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.getOAuth2LogoutRequest']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to get a trusted JWT Bearer Grant Type Issuer. The ID is the one returned when you created the trust relationship.\n         * @summary Get Trusted OAuth2 JWT Bearer Grant Type Issuer\n         * @param {string} id The id of the desired grant\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getTrustedOAuth2JwtGrantIssuer(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getTrustedOAuth2JwtGrantIssuer(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.getTrustedOAuth2JwtGrantIssuer']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * The introspection endpoint allows to check if a token (both refresh and access) is active or not. An active token is neither expired nor revoked. If a token is active, additional information on the token will be included. You can set additional data for a token by setting `session.access_token` during the consent flow.\n         * @summary Introspect OAuth2 Access and Refresh Tokens\n         * @param {string} token The string value of the token. For access tokens, this is the \\\\\\&quot;access_token\\\\\\&quot; value returned from the token endpoint defined in OAuth 2.0. For refresh tokens, this is the \\\\\\&quot;refresh_token\\\\\\&quot; value returned.\n         * @param {string} [scope] An optional, space separated list of required scopes. If the access token was not granted one of the scopes, the result of active will be false.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        introspectOAuth2Token(token, scope, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.introspectOAuth2Token(token, scope, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.introspectOAuth2Token']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint lists all clients in the database, and never returns client secrets. As a default it lists the first 100 clients.\n         * @summary List OAuth 2.0 Clients\n         * @param {number} [pageSize] Items per Page  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [clientName] The name of the clients to filter by.\n         * @param {string} [owner] The owner of the clients to filter by.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listOAuth2Clients(pageSize, pageToken, clientName, owner, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listOAuth2Clients(pageSize, pageToken, clientName, owner, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.listOAuth2Clients']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint lists all subject\\'s granted consent sessions, including client and granted scope. If the subject is unknown or has not granted any consent sessions yet, the endpoint returns an empty JSON array with status code 200 OK.\n         * @summary List OAuth 2.0 Consent Sessions of a Subject\n         * @param {string} subject The subject to list the consent sessions for.\n         * @param {number} [pageSize] Items per Page  This is the number of items per page to return. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [pageToken] Next Page Token  The next page token. For details on pagination please head over to the [pagination documentation](https://www.ory.sh/docs/ecosystem/api-design#pagination).\n         * @param {string} [loginSessionId] The login session id to list the consent sessions for.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listOAuth2ConsentSessions(subject, pageSize, pageToken, loginSessionId, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listOAuth2ConsentSessions(subject, pageSize, pageToken, loginSessionId, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.listOAuth2ConsentSessions']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to list all trusted JWT Bearer Grant Type Issuers.\n         * @summary List Trusted OAuth2 JWT Bearer Grant Type Issuers\n         * @param {number} [maxItems]\n         * @param {number} [defaultItems]\n         * @param {string} [issuer] If optional \\&quot;issuer\\&quot; is supplied, only jwt-bearer grants with this issuer will be returned.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listTrustedOAuth2JwtGrantIssuers(maxItems, defaultItems, issuer, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listTrustedOAuth2JwtGrantIssuers(maxItems, defaultItems, issuer, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.listTrustedOAuth2JwtGrantIssuers']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use open source libraries to perform OAuth 2.0 and OpenID Connect available for any programming language. You can find a list of libraries at https://oauth.net/code/  The Ory SDK is not yet able to this endpoint properly.\n         * @summary OAuth 2.0 Authorize Endpoint\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        oAuth2Authorize(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.oAuth2Authorize(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.oAuth2Authorize']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use open source libraries to perform OAuth 2.0 and OpenID Connect available for any programming language. You can find a list of libraries here https://oauth.net/code/  The Ory SDK is not yet able to this endpoint properly.\n         * @summary The OAuth 2.0 Token Endpoint\n         * @param {string} grantType\n         * @param {string} [clientId]\n         * @param {string} [code]\n         * @param {string} [redirectUri]\n         * @param {string} [refreshToken]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        oauth2TokenExchange(grantType, clientId, code, redirectUri, refreshToken, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.oauth2TokenExchange(grantType, clientId, code, redirectUri, refreshToken, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.oauth2TokenExchange']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Patch an existing OAuth 2.0 Client using JSON Patch. If you pass `client_secret` the secret will be updated and returned via the API. This is the only time you will be able to retrieve the client secret, so write it down and keep it safe.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Patch OAuth 2.0 Client\n         * @param {string} id The id of the OAuth 2.0 Client.\n         * @param {Array<JsonPatch>} jsonPatch OAuth 2.0 Client JSON Patch Body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchOAuth2Client(id, jsonPatch, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.patchOAuth2Client(id, jsonPatch, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.patchOAuth2Client']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  This endpoint tells Ory that the subject has not authorized the OAuth 2.0 client to access resources on his/her behalf. The consent provider must include a reason why the consent was not granted.  The response contains a redirect URL which the consent provider should redirect the user-agent to.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n         * @summary Reject OAuth 2.0 Consent Request\n         * @param {string} consentChallenge OAuth 2.0 Consent Request Challenge\n         * @param {RejectOAuth2Request} [rejectOAuth2Request]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        rejectOAuth2ConsentRequest(consentChallenge, rejectOAuth2Request, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.rejectOAuth2ConsentRequest(consentChallenge, rejectOAuth2Request, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.rejectOAuth2ConsentRequest']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.  This endpoint tells Ory that the subject has not authenticated and includes a reason why the authentication was denied.  The response contains a redirect URL which the login provider should redirect the user-agent to.\n         * @summary Reject OAuth 2.0 Login Request\n         * @param {string} loginChallenge OAuth 2.0 Login Request Challenge\n         * @param {RejectOAuth2Request} [rejectOAuth2Request]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        rejectOAuth2LoginRequest(loginChallenge, rejectOAuth2Request, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.rejectOAuth2LoginRequest(loginChallenge, rejectOAuth2Request, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.rejectOAuth2LoginRequest']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * When a user or an application requests Ory OAuth 2.0 to remove the session state of a subject, this endpoint is used to deny that logout request. No HTTP request body is required.  The response is empty as the logout provider has to chose what action to perform next.\n         * @summary Reject OAuth 2.0 Session Logout Request\n         * @param {string} logoutChallenge\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        rejectOAuth2LogoutRequest(logoutChallenge, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.rejectOAuth2LogoutRequest(logoutChallenge, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.rejectOAuth2LogoutRequest']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint revokes a subject\\'s granted consent sessions and invalidates all associated OAuth 2.0 Access Tokens. You may also only revoke sessions for a specific OAuth 2.0 Client ID.\n         * @summary Revoke OAuth 2.0 Consent Sessions of a Subject\n         * @param {string} subject OAuth 2.0 Consent Subject  The subject whose consent sessions should be deleted.\n         * @param {string} [client] OAuth 2.0 Client ID  If set, deletes only those consent sessions that have been granted to the specified OAuth 2.0 Client ID.\n         * @param {boolean} [all] Revoke All Consent Sessions  If set to &#x60;true&#x60; deletes all consent sessions by the Subject that have been granted.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOAuth2ConsentSessions(subject, client, all, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.revokeOAuth2ConsentSessions(subject, client, all, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.revokeOAuth2ConsentSessions']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint invalidates authentication sessions. After revoking the authentication session(s), the subject has to re-authenticate at the Ory OAuth2 Provider. This endpoint does not invalidate any tokens.  If you send the subject in a query param, all authentication sessions that belong to that subject are revoked. No OpenID Connect Front- or Back-channel logout is performed in this case.  Alternatively, you can send a SessionID via `sid` query param, in which case, only the session that is connected to that SessionID is revoked. OpenID Connect Back-channel logout is performed in this case.\n         * @summary Revokes OAuth 2.0 Login Sessions by either a Subject or a SessionID\n         * @param {string} [subject] OAuth 2.0 Subject  The subject to revoke authentication sessions for.\n         * @param {string} [sid] OAuth 2.0 Subject  The subject to revoke authentication sessions for.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOAuth2LoginSessions(subject, sid, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.revokeOAuth2LoginSessions(subject, sid, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.revokeOAuth2LoginSessions']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Revoking a token (both access and refresh) means that the tokens will be invalid. A revoked access token can no longer be used to make access requests, and a revoked refresh token can no longer be used to refresh an access token. Revoking a refresh token also invalidates the access token that was created with it. A token may only be revoked by the client the token was generated for.\n         * @summary Revoke OAuth 2.0 Access or Refresh Token\n         * @param {string} token\n         * @param {string} [clientId]\n         * @param {string} [clientSecret]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOAuth2Token(token, clientId, clientSecret, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.revokeOAuth2Token(token, clientId, clientSecret, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.revokeOAuth2Token']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Replaces an existing OAuth 2.0 Client with the payload you send. If you pass `client_secret` the secret is used, otherwise the existing secret is used.  If set, the secret is echoed in the response. It is not possible to retrieve it later on.  OAuth 2.0 Clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Set OAuth 2.0 Client\n         * @param {string} id OAuth 2.0 Client ID\n         * @param {OAuth2Client} oAuth2Client OAuth 2.0 Client Request Body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOAuth2Client(id, oAuth2Client, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.setOAuth2Client(id, oAuth2Client, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.setOAuth2Client']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Set lifespans of different token types issued for this OAuth 2.0 client. Does not modify other fields.\n         * @summary Set OAuth2 Client Token Lifespans\n         * @param {string} id OAuth 2.0 Client ID\n         * @param {OAuth2ClientTokenLifespans} [oAuth2ClientTokenLifespans]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOAuth2ClientLifespans(id, oAuth2ClientTokenLifespans, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.setOAuth2ClientLifespans(id, oAuth2ClientTokenLifespans, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.setOAuth2ClientLifespans']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to establish a trust relationship for a JWT issuer to perform JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants [RFC7523](https://datatracker.ietf.org/doc/html/rfc7523).\n         * @summary Trust OAuth2 JWT Bearer Grant Type Issuer\n         * @param {TrustOAuth2JwtGrantIssuer} [trustOAuth2JwtGrantIssuer]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        trustOAuth2JwtGrantIssuer(trustOAuth2JwtGrantIssuer, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.trustOAuth2JwtGrantIssuer(trustOAuth2JwtGrantIssuer, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OAuth2Api.trustOAuth2JwtGrantIssuer']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * OAuth2Api - factory interface\n * @export\n */\nexport const OAuth2ApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = OAuth2ApiFp(configuration);\n    return {\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  This endpoint tells Ory that the subject has authorized the OAuth 2.0 client to access resources on his/her behalf. The consent provider includes additional information, such as session data for access and ID tokens, and if the consent request should be used as basis for future requests.  The response contains a redirect URL which the consent provider should redirect the user-agent to.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n         * @summary Accept OAuth 2.0 Consent Request\n         * @param {OAuth2ApiAcceptOAuth2ConsentRequestRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        acceptOAuth2ConsentRequest(requestParameters, options) {\n            return localVarFp.acceptOAuth2ConsentRequest(requestParameters.consentChallenge, requestParameters.acceptOAuth2ConsentRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.  This endpoint tells Ory that the subject has successfully authenticated and includes additional information such as the subject\\'s ID and if Ory should remember the subject\\'s subject agent for future authentication attempts by setting a cookie.  The response contains a redirect URL which the login provider should redirect the user-agent to.\n         * @summary Accept OAuth 2.0 Login Request\n         * @param {OAuth2ApiAcceptOAuth2LoginRequestRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        acceptOAuth2LoginRequest(requestParameters, options) {\n            return localVarFp.acceptOAuth2LoginRequest(requestParameters.loginChallenge, requestParameters.acceptOAuth2LoginRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * When a user or an application requests Ory OAuth 2.0 to remove the session state of a subject, this endpoint is used to confirm that logout request.  The response contains a redirect URL which the consent provider should redirect the user-agent to.\n         * @summary Accept OAuth 2.0 Session Logout Request\n         * @param {OAuth2ApiAcceptOAuth2LogoutRequestRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        acceptOAuth2LogoutRequest(requestParameters, options) {\n            return localVarFp.acceptOAuth2LogoutRequest(requestParameters.logoutChallenge, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Create a new OAuth 2.0 client. If you pass `client_secret` the secret is used, otherwise a random secret is generated. The secret is echoed in the response. It is not possible to retrieve it later on.\n         * @summary Create OAuth 2.0 Client\n         * @param {OAuth2ApiCreateOAuth2ClientRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createOAuth2Client(requestParameters, options) {\n            return localVarFp.createOAuth2Client(requestParameters.oAuth2Client, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Delete an existing OAuth 2.0 Client by its ID.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.  Make sure that this endpoint is well protected and only callable by first-party components.\n         * @summary Delete OAuth 2.0 Client\n         * @param {OAuth2ApiDeleteOAuth2ClientRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOAuth2Client(requestParameters, options) {\n            return localVarFp.deleteOAuth2Client(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint deletes OAuth2 access tokens issued to an OAuth 2.0 Client from the database.\n         * @summary Delete OAuth 2.0 Access Tokens from specific OAuth 2.0 Client\n         * @param {OAuth2ApiDeleteOAuth2TokenRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOAuth2Token(requestParameters, options) {\n            return localVarFp.deleteOAuth2Token(requestParameters.clientId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to delete trusted JWT Bearer Grant Type Issuer. The ID is the one returned when you created the trust relationship.  Once deleted, the associated issuer will no longer be able to perform the JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grant.\n         * @summary Delete Trusted OAuth2 JWT Bearer Grant Type Issuer\n         * @param {OAuth2ApiDeleteTrustedOAuth2JwtGrantIssuerRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteTrustedOAuth2JwtGrantIssuer(requestParameters, options) {\n            return localVarFp.deleteTrustedOAuth2JwtGrantIssuer(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get an OAuth 2.0 client by its ID. This endpoint never returns the client secret.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Get an OAuth 2.0 Client\n         * @param {OAuth2ApiGetOAuth2ClientRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2Client(requestParameters, options) {\n            return localVarFp.getOAuth2Client(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n         * @summary Get OAuth 2.0 Consent Request\n         * @param {OAuth2ApiGetOAuth2ConsentRequestRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2ConsentRequest(requestParameters, options) {\n            return localVarFp.getOAuth2ConsentRequest(requestParameters.consentChallenge, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  Per default, the login provider is Ory itself. You may use a different login provider which needs to be a web-app you write and host, and it must be able to authenticate (\\\"show the subject a login screen\\\") a subject (in OAuth2 the proper name for subject is \\\"resource owner\\\").  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.\n         * @summary Get OAuth 2.0 Login Request\n         * @param {OAuth2ApiGetOAuth2LoginRequestRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2LoginRequest(requestParameters, options) {\n            return localVarFp.getOAuth2LoginRequest(requestParameters.loginChallenge, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to fetch an Ory OAuth 2.0 logout request.\n         * @summary Get OAuth 2.0 Session Logout Request\n         * @param {OAuth2ApiGetOAuth2LogoutRequestRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOAuth2LogoutRequest(requestParameters, options) {\n            return localVarFp.getOAuth2LogoutRequest(requestParameters.logoutChallenge, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to get a trusted JWT Bearer Grant Type Issuer. The ID is the one returned when you created the trust relationship.\n         * @summary Get Trusted OAuth2 JWT Bearer Grant Type Issuer\n         * @param {OAuth2ApiGetTrustedOAuth2JwtGrantIssuerRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getTrustedOAuth2JwtGrantIssuer(requestParameters, options) {\n            return localVarFp.getTrustedOAuth2JwtGrantIssuer(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * The introspection endpoint allows to check if a token (both refresh and access) is active or not. An active token is neither expired nor revoked. If a token is active, additional information on the token will be included. You can set additional data for a token by setting `session.access_token` during the consent flow.\n         * @summary Introspect OAuth2 Access and Refresh Tokens\n         * @param {OAuth2ApiIntrospectOAuth2TokenRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        introspectOAuth2Token(requestParameters, options) {\n            return localVarFp.introspectOAuth2Token(requestParameters.token, requestParameters.scope, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint lists all clients in the database, and never returns client secrets. As a default it lists the first 100 clients.\n         * @summary List OAuth 2.0 Clients\n         * @param {OAuth2ApiListOAuth2ClientsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listOAuth2Clients(requestParameters = {}, options) {\n            return localVarFp.listOAuth2Clients(requestParameters.pageSize, requestParameters.pageToken, requestParameters.clientName, requestParameters.owner, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint lists all subject\\'s granted consent sessions, including client and granted scope. If the subject is unknown or has not granted any consent sessions yet, the endpoint returns an empty JSON array with status code 200 OK.\n         * @summary List OAuth 2.0 Consent Sessions of a Subject\n         * @param {OAuth2ApiListOAuth2ConsentSessionsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listOAuth2ConsentSessions(requestParameters, options) {\n            return localVarFp.listOAuth2ConsentSessions(requestParameters.subject, requestParameters.pageSize, requestParameters.pageToken, requestParameters.loginSessionId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to list all trusted JWT Bearer Grant Type Issuers.\n         * @summary List Trusted OAuth2 JWT Bearer Grant Type Issuers\n         * @param {OAuth2ApiListTrustedOAuth2JwtGrantIssuersRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listTrustedOAuth2JwtGrantIssuers(requestParameters = {}, options) {\n            return localVarFp.listTrustedOAuth2JwtGrantIssuers(requestParameters.maxItems, requestParameters.defaultItems, requestParameters.issuer, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use open source libraries to perform OAuth 2.0 and OpenID Connect available for any programming language. You can find a list of libraries at https://oauth.net/code/  The Ory SDK is not yet able to this endpoint properly.\n         * @summary OAuth 2.0 Authorize Endpoint\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        oAuth2Authorize(options) {\n            return localVarFp.oAuth2Authorize(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use open source libraries to perform OAuth 2.0 and OpenID Connect available for any programming language. You can find a list of libraries here https://oauth.net/code/  The Ory SDK is not yet able to this endpoint properly.\n         * @summary The OAuth 2.0 Token Endpoint\n         * @param {OAuth2ApiOauth2TokenExchangeRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        oauth2TokenExchange(requestParameters, options) {\n            return localVarFp.oauth2TokenExchange(requestParameters.grantType, requestParameters.clientId, requestParameters.code, requestParameters.redirectUri, requestParameters.refreshToken, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Patch an existing OAuth 2.0 Client using JSON Patch. If you pass `client_secret` the secret will be updated and returned via the API. This is the only time you will be able to retrieve the client secret, so write it down and keep it safe.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Patch OAuth 2.0 Client\n         * @param {OAuth2ApiPatchOAuth2ClientRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchOAuth2Client(requestParameters, options) {\n            return localVarFp.patchOAuth2Client(requestParameters.id, requestParameters.jsonPatch, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  This endpoint tells Ory that the subject has not authorized the OAuth 2.0 client to access resources on his/her behalf. The consent provider must include a reason why the consent was not granted.  The response contains a redirect URL which the consent provider should redirect the user-agent to.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n         * @summary Reject OAuth 2.0 Consent Request\n         * @param {OAuth2ApiRejectOAuth2ConsentRequestRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        rejectOAuth2ConsentRequest(requestParameters, options) {\n            return localVarFp.rejectOAuth2ConsentRequest(requestParameters.consentChallenge, requestParameters.rejectOAuth2Request, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.  This endpoint tells Ory that the subject has not authenticated and includes a reason why the authentication was denied.  The response contains a redirect URL which the login provider should redirect the user-agent to.\n         * @summary Reject OAuth 2.0 Login Request\n         * @param {OAuth2ApiRejectOAuth2LoginRequestRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        rejectOAuth2LoginRequest(requestParameters, options) {\n            return localVarFp.rejectOAuth2LoginRequest(requestParameters.loginChallenge, requestParameters.rejectOAuth2Request, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * When a user or an application requests Ory OAuth 2.0 to remove the session state of a subject, this endpoint is used to deny that logout request. No HTTP request body is required.  The response is empty as the logout provider has to chose what action to perform next.\n         * @summary Reject OAuth 2.0 Session Logout Request\n         * @param {OAuth2ApiRejectOAuth2LogoutRequestRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        rejectOAuth2LogoutRequest(requestParameters, options) {\n            return localVarFp.rejectOAuth2LogoutRequest(requestParameters.logoutChallenge, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint revokes a subject\\'s granted consent sessions and invalidates all associated OAuth 2.0 Access Tokens. You may also only revoke sessions for a specific OAuth 2.0 Client ID.\n         * @summary Revoke OAuth 2.0 Consent Sessions of a Subject\n         * @param {OAuth2ApiRevokeOAuth2ConsentSessionsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOAuth2ConsentSessions(requestParameters, options) {\n            return localVarFp.revokeOAuth2ConsentSessions(requestParameters.subject, requestParameters.client, requestParameters.all, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint invalidates authentication sessions. After revoking the authentication session(s), the subject has to re-authenticate at the Ory OAuth2 Provider. This endpoint does not invalidate any tokens.  If you send the subject in a query param, all authentication sessions that belong to that subject are revoked. No OpenID Connect Front- or Back-channel logout is performed in this case.  Alternatively, you can send a SessionID via `sid` query param, in which case, only the session that is connected to that SessionID is revoked. OpenID Connect Back-channel logout is performed in this case.\n         * @summary Revokes OAuth 2.0 Login Sessions by either a Subject or a SessionID\n         * @param {OAuth2ApiRevokeOAuth2LoginSessionsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOAuth2LoginSessions(requestParameters = {}, options) {\n            return localVarFp.revokeOAuth2LoginSessions(requestParameters.subject, requestParameters.sid, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Revoking a token (both access and refresh) means that the tokens will be invalid. A revoked access token can no longer be used to make access requests, and a revoked refresh token can no longer be used to refresh an access token. Revoking a refresh token also invalidates the access token that was created with it. A token may only be revoked by the client the token was generated for.\n         * @summary Revoke OAuth 2.0 Access or Refresh Token\n         * @param {OAuth2ApiRevokeOAuth2TokenRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOAuth2Token(requestParameters, options) {\n            return localVarFp.revokeOAuth2Token(requestParameters.token, requestParameters.clientId, requestParameters.clientSecret, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Replaces an existing OAuth 2.0 Client with the payload you send. If you pass `client_secret` the secret is used, otherwise the existing secret is used.  If set, the secret is echoed in the response. It is not possible to retrieve it later on.  OAuth 2.0 Clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Set OAuth 2.0 Client\n         * @param {OAuth2ApiSetOAuth2ClientRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOAuth2Client(requestParameters, options) {\n            return localVarFp.setOAuth2Client(requestParameters.id, requestParameters.oAuth2Client, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Set lifespans of different token types issued for this OAuth 2.0 client. Does not modify other fields.\n         * @summary Set OAuth2 Client Token Lifespans\n         * @param {OAuth2ApiSetOAuth2ClientLifespansRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOAuth2ClientLifespans(requestParameters, options) {\n            return localVarFp.setOAuth2ClientLifespans(requestParameters.id, requestParameters.oAuth2ClientTokenLifespans, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to establish a trust relationship for a JWT issuer to perform JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants [RFC7523](https://datatracker.ietf.org/doc/html/rfc7523).\n         * @summary Trust OAuth2 JWT Bearer Grant Type Issuer\n         * @param {OAuth2ApiTrustOAuth2JwtGrantIssuerRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        trustOAuth2JwtGrantIssuer(requestParameters = {}, options) {\n            return localVarFp.trustOAuth2JwtGrantIssuer(requestParameters.trustOAuth2JwtGrantIssuer, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * OAuth2Api - object-oriented interface\n * @export\n * @class OAuth2Api\n * @extends {BaseAPI}\n */\nexport class OAuth2Api extends BaseAPI {\n    /**\n     * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  This endpoint tells Ory that the subject has authorized the OAuth 2.0 client to access resources on his/her behalf. The consent provider includes additional information, such as session data for access and ID tokens, and if the consent request should be used as basis for future requests.  The response contains a redirect URL which the consent provider should redirect the user-agent to.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n     * @summary Accept OAuth 2.0 Consent Request\n     * @param {OAuth2ApiAcceptOAuth2ConsentRequestRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    acceptOAuth2ConsentRequest(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).acceptOAuth2ConsentRequest(requestParameters.consentChallenge, requestParameters.acceptOAuth2ConsentRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.  This endpoint tells Ory that the subject has successfully authenticated and includes additional information such as the subject\\'s ID and if Ory should remember the subject\\'s subject agent for future authentication attempts by setting a cookie.  The response contains a redirect URL which the login provider should redirect the user-agent to.\n     * @summary Accept OAuth 2.0 Login Request\n     * @param {OAuth2ApiAcceptOAuth2LoginRequestRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    acceptOAuth2LoginRequest(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).acceptOAuth2LoginRequest(requestParameters.loginChallenge, requestParameters.acceptOAuth2LoginRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * When a user or an application requests Ory OAuth 2.0 to remove the session state of a subject, this endpoint is used to confirm that logout request.  The response contains a redirect URL which the consent provider should redirect the user-agent to.\n     * @summary Accept OAuth 2.0 Session Logout Request\n     * @param {OAuth2ApiAcceptOAuth2LogoutRequestRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    acceptOAuth2LogoutRequest(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).acceptOAuth2LogoutRequest(requestParameters.logoutChallenge, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Create a new OAuth 2.0 client. If you pass `client_secret` the secret is used, otherwise a random secret is generated. The secret is echoed in the response. It is not possible to retrieve it later on.\n     * @summary Create OAuth 2.0 Client\n     * @param {OAuth2ApiCreateOAuth2ClientRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    createOAuth2Client(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).createOAuth2Client(requestParameters.oAuth2Client, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Delete an existing OAuth 2.0 Client by its ID.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.  Make sure that this endpoint is well protected and only callable by first-party components.\n     * @summary Delete OAuth 2.0 Client\n     * @param {OAuth2ApiDeleteOAuth2ClientRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    deleteOAuth2Client(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).deleteOAuth2Client(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint deletes OAuth2 access tokens issued to an OAuth 2.0 Client from the database.\n     * @summary Delete OAuth 2.0 Access Tokens from specific OAuth 2.0 Client\n     * @param {OAuth2ApiDeleteOAuth2TokenRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    deleteOAuth2Token(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).deleteOAuth2Token(requestParameters.clientId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to delete trusted JWT Bearer Grant Type Issuer. The ID is the one returned when you created the trust relationship.  Once deleted, the associated issuer will no longer be able to perform the JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grant.\n     * @summary Delete Trusted OAuth2 JWT Bearer Grant Type Issuer\n     * @param {OAuth2ApiDeleteTrustedOAuth2JwtGrantIssuerRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    deleteTrustedOAuth2JwtGrantIssuer(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).deleteTrustedOAuth2JwtGrantIssuer(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get an OAuth 2.0 client by its ID. This endpoint never returns the client secret.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n     * @summary Get an OAuth 2.0 Client\n     * @param {OAuth2ApiGetOAuth2ClientRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    getOAuth2Client(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).getOAuth2Client(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n     * @summary Get OAuth 2.0 Consent Request\n     * @param {OAuth2ApiGetOAuth2ConsentRequestRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    getOAuth2ConsentRequest(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).getOAuth2ConsentRequest(requestParameters.consentChallenge, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  Per default, the login provider is Ory itself. You may use a different login provider which needs to be a web-app you write and host, and it must be able to authenticate (\\\"show the subject a login screen\\\") a subject (in OAuth2 the proper name for subject is \\\"resource owner\\\").  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.\n     * @summary Get OAuth 2.0 Login Request\n     * @param {OAuth2ApiGetOAuth2LoginRequestRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    getOAuth2LoginRequest(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).getOAuth2LoginRequest(requestParameters.loginChallenge, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to fetch an Ory OAuth 2.0 logout request.\n     * @summary Get OAuth 2.0 Session Logout Request\n     * @param {OAuth2ApiGetOAuth2LogoutRequestRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    getOAuth2LogoutRequest(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).getOAuth2LogoutRequest(requestParameters.logoutChallenge, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to get a trusted JWT Bearer Grant Type Issuer. The ID is the one returned when you created the trust relationship.\n     * @summary Get Trusted OAuth2 JWT Bearer Grant Type Issuer\n     * @param {OAuth2ApiGetTrustedOAuth2JwtGrantIssuerRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    getTrustedOAuth2JwtGrantIssuer(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).getTrustedOAuth2JwtGrantIssuer(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * The introspection endpoint allows to check if a token (both refresh and access) is active or not. An active token is neither expired nor revoked. If a token is active, additional information on the token will be included. You can set additional data for a token by setting `session.access_token` during the consent flow.\n     * @summary Introspect OAuth2 Access and Refresh Tokens\n     * @param {OAuth2ApiIntrospectOAuth2TokenRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    introspectOAuth2Token(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).introspectOAuth2Token(requestParameters.token, requestParameters.scope, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint lists all clients in the database, and never returns client secrets. As a default it lists the first 100 clients.\n     * @summary List OAuth 2.0 Clients\n     * @param {OAuth2ApiListOAuth2ClientsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    listOAuth2Clients(requestParameters = {}, options) {\n        return OAuth2ApiFp(this.configuration).listOAuth2Clients(requestParameters.pageSize, requestParameters.pageToken, requestParameters.clientName, requestParameters.owner, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint lists all subject\\'s granted consent sessions, including client and granted scope. If the subject is unknown or has not granted any consent sessions yet, the endpoint returns an empty JSON array with status code 200 OK.\n     * @summary List OAuth 2.0 Consent Sessions of a Subject\n     * @param {OAuth2ApiListOAuth2ConsentSessionsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    listOAuth2ConsentSessions(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).listOAuth2ConsentSessions(requestParameters.subject, requestParameters.pageSize, requestParameters.pageToken, requestParameters.loginSessionId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to list all trusted JWT Bearer Grant Type Issuers.\n     * @summary List Trusted OAuth2 JWT Bearer Grant Type Issuers\n     * @param {OAuth2ApiListTrustedOAuth2JwtGrantIssuersRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    listTrustedOAuth2JwtGrantIssuers(requestParameters = {}, options) {\n        return OAuth2ApiFp(this.configuration).listTrustedOAuth2JwtGrantIssuers(requestParameters.maxItems, requestParameters.defaultItems, requestParameters.issuer, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use open source libraries to perform OAuth 2.0 and OpenID Connect available for any programming language. You can find a list of libraries at https://oauth.net/code/  The Ory SDK is not yet able to this endpoint properly.\n     * @summary OAuth 2.0 Authorize Endpoint\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    oAuth2Authorize(options) {\n        return OAuth2ApiFp(this.configuration).oAuth2Authorize(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use open source libraries to perform OAuth 2.0 and OpenID Connect available for any programming language. You can find a list of libraries here https://oauth.net/code/  The Ory SDK is not yet able to this endpoint properly.\n     * @summary The OAuth 2.0 Token Endpoint\n     * @param {OAuth2ApiOauth2TokenExchangeRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    oauth2TokenExchange(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).oauth2TokenExchange(requestParameters.grantType, requestParameters.clientId, requestParameters.code, requestParameters.redirectUri, requestParameters.refreshToken, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Patch an existing OAuth 2.0 Client using JSON Patch. If you pass `client_secret` the secret will be updated and returned via the API. This is the only time you will be able to retrieve the client secret, so write it down and keep it safe.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n     * @summary Patch OAuth 2.0 Client\n     * @param {OAuth2ApiPatchOAuth2ClientRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    patchOAuth2Client(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).patchOAuth2Client(requestParameters.id, requestParameters.jsonPatch, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell Ory now about it. If the subject authenticated, he/she must now be asked if the OAuth 2.0 Client which initiated the flow should be allowed to access the resources on the subject\\'s behalf.  The consent challenge is appended to the consent provider\\'s URL to which the subject\\'s user-agent (browser) is redirected to. The consent provider uses that challenge to fetch information on the OAuth2 request and then tells Ory if the subject accepted or rejected the request.  This endpoint tells Ory that the subject has not authorized the OAuth 2.0 client to access resources on his/her behalf. The consent provider must include a reason why the consent was not granted.  The response contains a redirect URL which the consent provider should redirect the user-agent to.  The default consent provider is available via the Ory Managed Account Experience. To customize the consent provider, please head over to the OAuth 2.0 documentation.\n     * @summary Reject OAuth 2.0 Consent Request\n     * @param {OAuth2ApiRejectOAuth2ConsentRequestRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    rejectOAuth2ConsentRequest(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).rejectOAuth2ConsentRequest(requestParameters.consentChallenge, requestParameters.rejectOAuth2Request, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * When an authorization code, hybrid, or implicit OAuth 2.0 Flow is initiated, Ory asks the login provider to authenticate the subject and then tell the Ory OAuth2 Service about it.  The authentication challenge is appended to the login provider URL to which the subject\\'s user-agent (browser) is redirected to. The login provider uses that challenge to fetch information on the OAuth2 request and then accept or reject the requested authentication process.  This endpoint tells Ory that the subject has not authenticated and includes a reason why the authentication was denied.  The response contains a redirect URL which the login provider should redirect the user-agent to.\n     * @summary Reject OAuth 2.0 Login Request\n     * @param {OAuth2ApiRejectOAuth2LoginRequestRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    rejectOAuth2LoginRequest(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).rejectOAuth2LoginRequest(requestParameters.loginChallenge, requestParameters.rejectOAuth2Request, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * When a user or an application requests Ory OAuth 2.0 to remove the session state of a subject, this endpoint is used to deny that logout request. No HTTP request body is required.  The response is empty as the logout provider has to chose what action to perform next.\n     * @summary Reject OAuth 2.0 Session Logout Request\n     * @param {OAuth2ApiRejectOAuth2LogoutRequestRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    rejectOAuth2LogoutRequest(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).rejectOAuth2LogoutRequest(requestParameters.logoutChallenge, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint revokes a subject\\'s granted consent sessions and invalidates all associated OAuth 2.0 Access Tokens. You may also only revoke sessions for a specific OAuth 2.0 Client ID.\n     * @summary Revoke OAuth 2.0 Consent Sessions of a Subject\n     * @param {OAuth2ApiRevokeOAuth2ConsentSessionsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    revokeOAuth2ConsentSessions(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).revokeOAuth2ConsentSessions(requestParameters.subject, requestParameters.client, requestParameters.all, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint invalidates authentication sessions. After revoking the authentication session(s), the subject has to re-authenticate at the Ory OAuth2 Provider. This endpoint does not invalidate any tokens.  If you send the subject in a query param, all authentication sessions that belong to that subject are revoked. No OpenID Connect Front- or Back-channel logout is performed in this case.  Alternatively, you can send a SessionID via `sid` query param, in which case, only the session that is connected to that SessionID is revoked. OpenID Connect Back-channel logout is performed in this case.\n     * @summary Revokes OAuth 2.0 Login Sessions by either a Subject or a SessionID\n     * @param {OAuth2ApiRevokeOAuth2LoginSessionsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    revokeOAuth2LoginSessions(requestParameters = {}, options) {\n        return OAuth2ApiFp(this.configuration).revokeOAuth2LoginSessions(requestParameters.subject, requestParameters.sid, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Revoking a token (both access and refresh) means that the tokens will be invalid. A revoked access token can no longer be used to make access requests, and a revoked refresh token can no longer be used to refresh an access token. Revoking a refresh token also invalidates the access token that was created with it. A token may only be revoked by the client the token was generated for.\n     * @summary Revoke OAuth 2.0 Access or Refresh Token\n     * @param {OAuth2ApiRevokeOAuth2TokenRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    revokeOAuth2Token(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).revokeOAuth2Token(requestParameters.token, requestParameters.clientId, requestParameters.clientSecret, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Replaces an existing OAuth 2.0 Client with the payload you send. If you pass `client_secret` the secret is used, otherwise the existing secret is used.  If set, the secret is echoed in the response. It is not possible to retrieve it later on.  OAuth 2.0 Clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n     * @summary Set OAuth 2.0 Client\n     * @param {OAuth2ApiSetOAuth2ClientRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    setOAuth2Client(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).setOAuth2Client(requestParameters.id, requestParameters.oAuth2Client, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Set lifespans of different token types issued for this OAuth 2.0 client. Does not modify other fields.\n     * @summary Set OAuth2 Client Token Lifespans\n     * @param {OAuth2ApiSetOAuth2ClientLifespansRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    setOAuth2ClientLifespans(requestParameters, options) {\n        return OAuth2ApiFp(this.configuration).setOAuth2ClientLifespans(requestParameters.id, requestParameters.oAuth2ClientTokenLifespans, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to establish a trust relationship for a JWT issuer to perform JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants [RFC7523](https://datatracker.ietf.org/doc/html/rfc7523).\n     * @summary Trust OAuth2 JWT Bearer Grant Type Issuer\n     * @param {OAuth2ApiTrustOAuth2JwtGrantIssuerRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OAuth2Api\n     */\n    trustOAuth2JwtGrantIssuer(requestParameters = {}, options) {\n        return OAuth2ApiFp(this.configuration).trustOAuth2JwtGrantIssuer(requestParameters.trustOAuth2JwtGrantIssuer, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * OidcApi - axios parameter creator\n * @export\n */\nexport const OidcApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * This endpoint behaves like the administrative counterpart (`createOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol. This feature needs to be enabled in the configuration. This endpoint is disabled by default. It can be enabled by an administrator.  Please note that using this endpoint you are not able to choose the `client_secret` nor the `client_id` as those values will be server generated when specifying `token_endpoint_auth_method` as `client_secret_basic` or `client_secret_post`.  The `client_secret` will be returned in the response and you will not be able to retrieve it later on. Write the secret down and keep it somewhere safe.\n         * @summary Register OAuth2 Client using OpenID Dynamic Client Registration\n         * @param {OAuth2Client} oAuth2Client Dynamic Client Registration Request Body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createOidcDynamicClient: (oAuth2Client, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'oAuth2Client' is not null or undefined\n            assertParamExists('createOidcDynamicClient', 'oAuth2Client', oAuth2Client);\n            const localVarPath = `/oauth2/register`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(oAuth2Client, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint creates a verifiable credential that attests that the user authenticated with the provided access token owns a certain public/private key pair.  More information can be found at https://openid.net/specs/openid-connect-userinfo-vc-1_0.html.\n         * @summary Issues a Verifiable Credential\n         * @param {CreateVerifiableCredentialRequestBody} [createVerifiableCredentialRequestBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createVerifiableCredential: (createVerifiableCredentialRequestBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/credentials`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(createVerifiableCredentialRequestBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint behaves like the administrative counterpart (`deleteOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol. This feature needs to be enabled in the configuration. This endpoint is disabled by default. It can be enabled by an administrator.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Delete OAuth 2.0 Client using the OpenID Dynamic Client Registration Management Protocol\n         * @param {string} id The id of the OAuth 2.0 Client.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOidcDynamicClient: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('deleteOidcDynamicClient', 'id', id);\n            const localVarPath = `/oauth2/register/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication bearer required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * A mechanism for an OpenID Connect Relying Party to discover the End-User\\'s OpenID Provider and obtain information needed to interact with it, including its OAuth 2.0 endpoint locations.  Popular libraries for OpenID Connect clients include oidc-client-js (JavaScript), go-oidc (Golang), and others. For a full list of clients go here: https://openid.net/developers/certified/\n         * @summary OpenID Connect Discovery\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        discoverOidcConfiguration: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/.well-known/openid-configuration`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint behaves like the administrative counterpart (`getOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.\n         * @summary Get OAuth2 Client using OpenID Dynamic Client Registration\n         * @param {string} id The id of the OAuth 2.0 Client.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOidcDynamicClient: (id, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getOidcDynamicClient', 'id', id);\n            const localVarPath = `/oauth2/register/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication bearer required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint returns the payload of the ID Token, including `session.id_token` values, of the provided OAuth 2.0 Access Token\\'s consent request.  In the case of authentication error, a WWW-Authenticate header might be set in the response with more information about the error. See [the spec](https://datatracker.ietf.org/doc/html/rfc6750#section-3) for more details about header format.\n         * @summary OpenID Connect Userinfo\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOidcUserInfo: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/userinfo`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oauth2 required\n            // oauth required\n            yield setOAuthToObject(localVarHeaderParameter, \"oauth2\", [], configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint initiates and completes user logout at the Ory OAuth2 & OpenID provider and initiates OpenID Connect Front- / Back-channel logout:  https://openid.net/specs/openid-connect-frontchannel-1_0.html https://openid.net/specs/openid-connect-backchannel-1_0.html  Back-channel logout is performed asynchronously and does not affect logout flow.\n         * @summary OpenID Connect Front- and Back-channel Enabled Logout\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOidcSession: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/oauth2/sessions/logout`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint behaves like the administrative counterpart (`setOAuth2Client`) but is capable of facing the public internet directly to be used by third parties. It implements the OpenID Connect Dynamic Client Registration Protocol.  This feature is disabled per default. It can be enabled by a system administrator.  If you pass `client_secret` the secret is used, otherwise the existing secret is used. If set, the secret is echoed in the response. It is not possible to retrieve it later on.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Set OAuth2 Client using OpenID Dynamic Client Registration\n         * @param {string} id OAuth 2.0 Client ID\n         * @param {OAuth2Client} oAuth2Client OAuth 2.0 Client Request Body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOidcDynamicClient: (id, oAuth2Client, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('setOidcDynamicClient', 'id', id);\n            // verify required parameter 'oAuth2Client' is not null or undefined\n            assertParamExists('setOidcDynamicClient', 'oAuth2Client', oAuth2Client);\n            const localVarPath = `/oauth2/register/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication bearer required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(oAuth2Client, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * OidcApi - functional programming interface\n * @export\n */\nexport const OidcApiFp = function (configuration) {\n    const localVarAxiosParamCreator = OidcApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * This endpoint behaves like the administrative counterpart (`createOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol. This feature needs to be enabled in the configuration. This endpoint is disabled by default. It can be enabled by an administrator.  Please note that using this endpoint you are not able to choose the `client_secret` nor the `client_id` as those values will be server generated when specifying `token_endpoint_auth_method` as `client_secret_basic` or `client_secret_post`.  The `client_secret` will be returned in the response and you will not be able to retrieve it later on. Write the secret down and keep it somewhere safe.\n         * @summary Register OAuth2 Client using OpenID Dynamic Client Registration\n         * @param {OAuth2Client} oAuth2Client Dynamic Client Registration Request Body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createOidcDynamicClient(oAuth2Client, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createOidcDynamicClient(oAuth2Client, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OidcApi.createOidcDynamicClient']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint creates a verifiable credential that attests that the user authenticated with the provided access token owns a certain public/private key pair.  More information can be found at https://openid.net/specs/openid-connect-userinfo-vc-1_0.html.\n         * @summary Issues a Verifiable Credential\n         * @param {CreateVerifiableCredentialRequestBody} [createVerifiableCredentialRequestBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createVerifiableCredential(createVerifiableCredentialRequestBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createVerifiableCredential(createVerifiableCredentialRequestBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OidcApi.createVerifiableCredential']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint behaves like the administrative counterpart (`deleteOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol. This feature needs to be enabled in the configuration. This endpoint is disabled by default. It can be enabled by an administrator.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Delete OAuth 2.0 Client using the OpenID Dynamic Client Registration Management Protocol\n         * @param {string} id The id of the OAuth 2.0 Client.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOidcDynamicClient(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteOidcDynamicClient(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OidcApi.deleteOidcDynamicClient']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * A mechanism for an OpenID Connect Relying Party to discover the End-User\\'s OpenID Provider and obtain information needed to interact with it, including its OAuth 2.0 endpoint locations.  Popular libraries for OpenID Connect clients include oidc-client-js (JavaScript), go-oidc (Golang), and others. For a full list of clients go here: https://openid.net/developers/certified/\n         * @summary OpenID Connect Discovery\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        discoverOidcConfiguration(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.discoverOidcConfiguration(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OidcApi.discoverOidcConfiguration']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint behaves like the administrative counterpart (`getOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.\n         * @summary Get OAuth2 Client using OpenID Dynamic Client Registration\n         * @param {string} id The id of the OAuth 2.0 Client.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOidcDynamicClient(id, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getOidcDynamicClient(id, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OidcApi.getOidcDynamicClient']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint returns the payload of the ID Token, including `session.id_token` values, of the provided OAuth 2.0 Access Token\\'s consent request.  In the case of authentication error, a WWW-Authenticate header might be set in the response with more information about the error. See [the spec](https://datatracker.ietf.org/doc/html/rfc6750#section-3) for more details about header format.\n         * @summary OpenID Connect Userinfo\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOidcUserInfo(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getOidcUserInfo(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OidcApi.getOidcUserInfo']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint initiates and completes user logout at the Ory OAuth2 & OpenID provider and initiates OpenID Connect Front- / Back-channel logout:  https://openid.net/specs/openid-connect-frontchannel-1_0.html https://openid.net/specs/openid-connect-backchannel-1_0.html  Back-channel logout is performed asynchronously and does not affect logout flow.\n         * @summary OpenID Connect Front- and Back-channel Enabled Logout\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOidcSession(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.revokeOidcSession(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OidcApi.revokeOidcSession']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint behaves like the administrative counterpart (`setOAuth2Client`) but is capable of facing the public internet directly to be used by third parties. It implements the OpenID Connect Dynamic Client Registration Protocol.  This feature is disabled per default. It can be enabled by a system administrator.  If you pass `client_secret` the secret is used, otherwise the existing secret is used. If set, the secret is echoed in the response. It is not possible to retrieve it later on.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Set OAuth2 Client using OpenID Dynamic Client Registration\n         * @param {string} id OAuth 2.0 Client ID\n         * @param {OAuth2Client} oAuth2Client OAuth 2.0 Client Request Body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOidcDynamicClient(id, oAuth2Client, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.setOidcDynamicClient(id, oAuth2Client, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['OidcApi.setOidcDynamicClient']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * OidcApi - factory interface\n * @export\n */\nexport const OidcApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = OidcApiFp(configuration);\n    return {\n        /**\n         * This endpoint behaves like the administrative counterpart (`createOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol. This feature needs to be enabled in the configuration. This endpoint is disabled by default. It can be enabled by an administrator.  Please note that using this endpoint you are not able to choose the `client_secret` nor the `client_id` as those values will be server generated when specifying `token_endpoint_auth_method` as `client_secret_basic` or `client_secret_post`.  The `client_secret` will be returned in the response and you will not be able to retrieve it later on. Write the secret down and keep it somewhere safe.\n         * @summary Register OAuth2 Client using OpenID Dynamic Client Registration\n         * @param {OidcApiCreateOidcDynamicClientRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createOidcDynamicClient(requestParameters, options) {\n            return localVarFp.createOidcDynamicClient(requestParameters.oAuth2Client, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint creates a verifiable credential that attests that the user authenticated with the provided access token owns a certain public/private key pair.  More information can be found at https://openid.net/specs/openid-connect-userinfo-vc-1_0.html.\n         * @summary Issues a Verifiable Credential\n         * @param {OidcApiCreateVerifiableCredentialRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createVerifiableCredential(requestParameters = {}, options) {\n            return localVarFp.createVerifiableCredential(requestParameters.createVerifiableCredentialRequestBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint behaves like the administrative counterpart (`deleteOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol. This feature needs to be enabled in the configuration. This endpoint is disabled by default. It can be enabled by an administrator.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Delete OAuth 2.0 Client using the OpenID Dynamic Client Registration Management Protocol\n         * @param {OidcApiDeleteOidcDynamicClientRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOidcDynamicClient(requestParameters, options) {\n            return localVarFp.deleteOidcDynamicClient(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * A mechanism for an OpenID Connect Relying Party to discover the End-User\\'s OpenID Provider and obtain information needed to interact with it, including its OAuth 2.0 endpoint locations.  Popular libraries for OpenID Connect clients include oidc-client-js (JavaScript), go-oidc (Golang), and others. For a full list of clients go here: https://openid.net/developers/certified/\n         * @summary OpenID Connect Discovery\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        discoverOidcConfiguration(options) {\n            return localVarFp.discoverOidcConfiguration(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint behaves like the administrative counterpart (`getOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.\n         * @summary Get OAuth2 Client using OpenID Dynamic Client Registration\n         * @param {OidcApiGetOidcDynamicClientRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOidcDynamicClient(requestParameters, options) {\n            return localVarFp.getOidcDynamicClient(requestParameters.id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint returns the payload of the ID Token, including `session.id_token` values, of the provided OAuth 2.0 Access Token\\'s consent request.  In the case of authentication error, a WWW-Authenticate header might be set in the response with more information about the error. See [the spec](https://datatracker.ietf.org/doc/html/rfc6750#section-3) for more details about header format.\n         * @summary OpenID Connect Userinfo\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOidcUserInfo(options) {\n            return localVarFp.getOidcUserInfo(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint initiates and completes user logout at the Ory OAuth2 & OpenID provider and initiates OpenID Connect Front- / Back-channel logout:  https://openid.net/specs/openid-connect-frontchannel-1_0.html https://openid.net/specs/openid-connect-backchannel-1_0.html  Back-channel logout is performed asynchronously and does not affect logout flow.\n         * @summary OpenID Connect Front- and Back-channel Enabled Logout\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        revokeOidcSession(options) {\n            return localVarFp.revokeOidcSession(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint behaves like the administrative counterpart (`setOAuth2Client`) but is capable of facing the public internet directly to be used by third parties. It implements the OpenID Connect Dynamic Client Registration Protocol.  This feature is disabled per default. It can be enabled by a system administrator.  If you pass `client_secret` the secret is used, otherwise the existing secret is used. If set, the secret is echoed in the response. It is not possible to retrieve it later on.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n         * @summary Set OAuth2 Client using OpenID Dynamic Client Registration\n         * @param {OidcApiSetOidcDynamicClientRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOidcDynamicClient(requestParameters, options) {\n            return localVarFp.setOidcDynamicClient(requestParameters.id, requestParameters.oAuth2Client, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * OidcApi - object-oriented interface\n * @export\n * @class OidcApi\n * @extends {BaseAPI}\n */\nexport class OidcApi extends BaseAPI {\n    /**\n     * This endpoint behaves like the administrative counterpart (`createOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol. This feature needs to be enabled in the configuration. This endpoint is disabled by default. It can be enabled by an administrator.  Please note that using this endpoint you are not able to choose the `client_secret` nor the `client_id` as those values will be server generated when specifying `token_endpoint_auth_method` as `client_secret_basic` or `client_secret_post`.  The `client_secret` will be returned in the response and you will not be able to retrieve it later on. Write the secret down and keep it somewhere safe.\n     * @summary Register OAuth2 Client using OpenID Dynamic Client Registration\n     * @param {OidcApiCreateOidcDynamicClientRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OidcApi\n     */\n    createOidcDynamicClient(requestParameters, options) {\n        return OidcApiFp(this.configuration).createOidcDynamicClient(requestParameters.oAuth2Client, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint creates a verifiable credential that attests that the user authenticated with the provided access token owns a certain public/private key pair.  More information can be found at https://openid.net/specs/openid-connect-userinfo-vc-1_0.html.\n     * @summary Issues a Verifiable Credential\n     * @param {OidcApiCreateVerifiableCredentialRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OidcApi\n     */\n    createVerifiableCredential(requestParameters = {}, options) {\n        return OidcApiFp(this.configuration).createVerifiableCredential(requestParameters.createVerifiableCredentialRequestBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint behaves like the administrative counterpart (`deleteOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol. This feature needs to be enabled in the configuration. This endpoint is disabled by default. It can be enabled by an administrator.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n     * @summary Delete OAuth 2.0 Client using the OpenID Dynamic Client Registration Management Protocol\n     * @param {OidcApiDeleteOidcDynamicClientRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OidcApi\n     */\n    deleteOidcDynamicClient(requestParameters, options) {\n        return OidcApiFp(this.configuration).deleteOidcDynamicClient(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * A mechanism for an OpenID Connect Relying Party to discover the End-User\\'s OpenID Provider and obtain information needed to interact with it, including its OAuth 2.0 endpoint locations.  Popular libraries for OpenID Connect clients include oidc-client-js (JavaScript), go-oidc (Golang), and others. For a full list of clients go here: https://openid.net/developers/certified/\n     * @summary OpenID Connect Discovery\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OidcApi\n     */\n    discoverOidcConfiguration(options) {\n        return OidcApiFp(this.configuration).discoverOidcConfiguration(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint behaves like the administrative counterpart (`getOAuth2Client`) but is capable of facing the public internet directly and can be used in self-service. It implements the OpenID Connect Dynamic Client Registration Protocol.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.\n     * @summary Get OAuth2 Client using OpenID Dynamic Client Registration\n     * @param {OidcApiGetOidcDynamicClientRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OidcApi\n     */\n    getOidcDynamicClient(requestParameters, options) {\n        return OidcApiFp(this.configuration).getOidcDynamicClient(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint returns the payload of the ID Token, including `session.id_token` values, of the provided OAuth 2.0 Access Token\\'s consent request.  In the case of authentication error, a WWW-Authenticate header might be set in the response with more information about the error. See [the spec](https://datatracker.ietf.org/doc/html/rfc6750#section-3) for more details about header format.\n     * @summary OpenID Connect Userinfo\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OidcApi\n     */\n    getOidcUserInfo(options) {\n        return OidcApiFp(this.configuration).getOidcUserInfo(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint initiates and completes user logout at the Ory OAuth2 & OpenID provider and initiates OpenID Connect Front- / Back-channel logout:  https://openid.net/specs/openid-connect-frontchannel-1_0.html https://openid.net/specs/openid-connect-backchannel-1_0.html  Back-channel logout is performed asynchronously and does not affect logout flow.\n     * @summary OpenID Connect Front- and Back-channel Enabled Logout\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OidcApi\n     */\n    revokeOidcSession(options) {\n        return OidcApiFp(this.configuration).revokeOidcSession(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint behaves like the administrative counterpart (`setOAuth2Client`) but is capable of facing the public internet directly to be used by third parties. It implements the OpenID Connect Dynamic Client Registration Protocol.  This feature is disabled per default. It can be enabled by a system administrator.  If you pass `client_secret` the secret is used, otherwise the existing secret is used. If set, the secret is echoed in the response. It is not possible to retrieve it later on.  To use this endpoint, you will need to present the client\\'s authentication credentials. If the OAuth2 Client uses the Token Endpoint Authentication Method `client_secret_post`, you need to present the client secret in the URL query. If it uses `client_secret_basic`, present the Client ID and the Client Secret in the Authorization header.  OAuth 2.0 clients are used to perform OAuth 2.0 and OpenID Connect flows. Usually, OAuth 2.0 clients are generated for applications which want to consume your OAuth 2.0 or OpenID Connect capabilities.\n     * @summary Set OAuth2 Client using OpenID Dynamic Client Registration\n     * @param {OidcApiSetOidcDynamicClientRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OidcApi\n     */\n    setOidcDynamicClient(requestParameters, options) {\n        return OidcApiFp(this.configuration).setOidcDynamicClient(requestParameters.id, requestParameters.oAuth2Client, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * PermissionApi - axios parameter creator\n * @export\n */\nexport const PermissionApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {string} [namespace] Namespace of the Relationship\n         * @param {string} [object] Object of the Relationship\n         * @param {string} [relation] Relation of the Relationship\n         * @param {string} [subjectId] SubjectID of the Relationship\n         * @param {string} [subjectSetNamespace] Namespace of the Subject Set\n         * @param {string} [subjectSetObject] Object of the Subject Set\n         * @param {string} [subjectSetRelation] Relation of the Subject Set\n         * @param {number} [maxDepth]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkPermission: (namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, maxDepth, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/relation-tuples/check/openapi`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (namespace !== undefined) {\n                localVarQueryParameter['namespace'] = namespace;\n            }\n            if (object !== undefined) {\n                localVarQueryParameter['object'] = object;\n            }\n            if (relation !== undefined) {\n                localVarQueryParameter['relation'] = relation;\n            }\n            if (subjectId !== undefined) {\n                localVarQueryParameter['subject_id'] = subjectId;\n            }\n            if (subjectSetNamespace !== undefined) {\n                localVarQueryParameter['subject_set.namespace'] = subjectSetNamespace;\n            }\n            if (subjectSetObject !== undefined) {\n                localVarQueryParameter['subject_set.object'] = subjectSetObject;\n            }\n            if (subjectSetRelation !== undefined) {\n                localVarQueryParameter['subject_set.relation'] = subjectSetRelation;\n            }\n            if (maxDepth !== undefined) {\n                localVarQueryParameter['max-depth'] = maxDepth;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {string} [namespace] Namespace of the Relationship\n         * @param {string} [object] Object of the Relationship\n         * @param {string} [relation] Relation of the Relationship\n         * @param {string} [subjectId] SubjectID of the Relationship\n         * @param {string} [subjectSetNamespace] Namespace of the Subject Set\n         * @param {string} [subjectSetObject] Object of the Subject Set\n         * @param {string} [subjectSetRelation] Relation of the Subject Set\n         * @param {number} [maxDepth]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkPermissionOrError: (namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, maxDepth, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/relation-tuples/check`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (namespace !== undefined) {\n                localVarQueryParameter['namespace'] = namespace;\n            }\n            if (object !== undefined) {\n                localVarQueryParameter['object'] = object;\n            }\n            if (relation !== undefined) {\n                localVarQueryParameter['relation'] = relation;\n            }\n            if (subjectId !== undefined) {\n                localVarQueryParameter['subject_id'] = subjectId;\n            }\n            if (subjectSetNamespace !== undefined) {\n                localVarQueryParameter['subject_set.namespace'] = subjectSetNamespace;\n            }\n            if (subjectSetObject !== undefined) {\n                localVarQueryParameter['subject_set.object'] = subjectSetObject;\n            }\n            if (subjectSetRelation !== undefined) {\n                localVarQueryParameter['subject_set.relation'] = subjectSetRelation;\n            }\n            if (maxDepth !== undefined) {\n                localVarQueryParameter['max-depth'] = maxDepth;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to expand a relationship tuple into permissions.\n         * @summary Expand a Relationship into permissions.\n         * @param {string} namespace Namespace of the Subject Set\n         * @param {string} object Object of the Subject Set\n         * @param {string} relation Relation of the Subject Set\n         * @param {number} [maxDepth]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        expandPermissions: (namespace, object, relation, maxDepth, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'namespace' is not null or undefined\n            assertParamExists('expandPermissions', 'namespace', namespace);\n            // verify required parameter 'object' is not null or undefined\n            assertParamExists('expandPermissions', 'object', object);\n            // verify required parameter 'relation' is not null or undefined\n            assertParamExists('expandPermissions', 'relation', relation);\n            const localVarPath = `/relation-tuples/expand`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (namespace !== undefined) {\n                localVarQueryParameter['namespace'] = namespace;\n            }\n            if (object !== undefined) {\n                localVarQueryParameter['object'] = object;\n            }\n            if (relation !== undefined) {\n                localVarQueryParameter['relation'] = relation;\n            }\n            if (maxDepth !== undefined) {\n                localVarQueryParameter['max-depth'] = maxDepth;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {number} [maxDepth]\n         * @param {PostCheckPermissionBody} [postCheckPermissionBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        postCheckPermission: (maxDepth, postCheckPermissionBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/relation-tuples/check/openapi`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (maxDepth !== undefined) {\n                localVarQueryParameter['max-depth'] = maxDepth;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(postCheckPermissionBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {number} [maxDepth]\n         * @param {PostCheckPermissionOrErrorBody} [postCheckPermissionOrErrorBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        postCheckPermissionOrError: (maxDepth, postCheckPermissionOrErrorBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/relation-tuples/check`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (maxDepth !== undefined) {\n                localVarQueryParameter['max-depth'] = maxDepth;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(postCheckPermissionOrErrorBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * PermissionApi - functional programming interface\n * @export\n */\nexport const PermissionApiFp = function (configuration) {\n    const localVarAxiosParamCreator = PermissionApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {string} [namespace] Namespace of the Relationship\n         * @param {string} [object] Object of the Relationship\n         * @param {string} [relation] Relation of the Relationship\n         * @param {string} [subjectId] SubjectID of the Relationship\n         * @param {string} [subjectSetNamespace] Namespace of the Subject Set\n         * @param {string} [subjectSetObject] Object of the Subject Set\n         * @param {string} [subjectSetRelation] Relation of the Subject Set\n         * @param {number} [maxDepth]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkPermission(namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, maxDepth, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.checkPermission(namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, maxDepth, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['PermissionApi.checkPermission']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {string} [namespace] Namespace of the Relationship\n         * @param {string} [object] Object of the Relationship\n         * @param {string} [relation] Relation of the Relationship\n         * @param {string} [subjectId] SubjectID of the Relationship\n         * @param {string} [subjectSetNamespace] Namespace of the Subject Set\n         * @param {string} [subjectSetObject] Object of the Subject Set\n         * @param {string} [subjectSetRelation] Relation of the Subject Set\n         * @param {number} [maxDepth]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkPermissionOrError(namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, maxDepth, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.checkPermissionOrError(namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, maxDepth, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['PermissionApi.checkPermissionOrError']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to expand a relationship tuple into permissions.\n         * @summary Expand a Relationship into permissions.\n         * @param {string} namespace Namespace of the Subject Set\n         * @param {string} object Object of the Subject Set\n         * @param {string} relation Relation of the Subject Set\n         * @param {number} [maxDepth]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        expandPermissions(namespace, object, relation, maxDepth, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.expandPermissions(namespace, object, relation, maxDepth, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['PermissionApi.expandPermissions']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {number} [maxDepth]\n         * @param {PostCheckPermissionBody} [postCheckPermissionBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        postCheckPermission(maxDepth, postCheckPermissionBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.postCheckPermission(maxDepth, postCheckPermissionBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['PermissionApi.postCheckPermission']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {number} [maxDepth]\n         * @param {PostCheckPermissionOrErrorBody} [postCheckPermissionOrErrorBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        postCheckPermissionOrError(maxDepth, postCheckPermissionOrErrorBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.postCheckPermissionOrError(maxDepth, postCheckPermissionOrErrorBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['PermissionApi.postCheckPermissionOrError']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * PermissionApi - factory interface\n * @export\n */\nexport const PermissionApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = PermissionApiFp(configuration);\n    return {\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {PermissionApiCheckPermissionRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkPermission(requestParameters = {}, options) {\n            return localVarFp.checkPermission(requestParameters.namespace, requestParameters.object, requestParameters.relation, requestParameters.subjectId, requestParameters.subjectSetNamespace, requestParameters.subjectSetObject, requestParameters.subjectSetRelation, requestParameters.maxDepth, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {PermissionApiCheckPermissionOrErrorRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkPermissionOrError(requestParameters = {}, options) {\n            return localVarFp.checkPermissionOrError(requestParameters.namespace, requestParameters.object, requestParameters.relation, requestParameters.subjectId, requestParameters.subjectSetNamespace, requestParameters.subjectSetObject, requestParameters.subjectSetRelation, requestParameters.maxDepth, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to expand a relationship tuple into permissions.\n         * @summary Expand a Relationship into permissions.\n         * @param {PermissionApiExpandPermissionsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        expandPermissions(requestParameters, options) {\n            return localVarFp.expandPermissions(requestParameters.namespace, requestParameters.object, requestParameters.relation, requestParameters.maxDepth, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {PermissionApiPostCheckPermissionRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        postCheckPermission(requestParameters = {}, options) {\n            return localVarFp.postCheckPermission(requestParameters.maxDepth, requestParameters.postCheckPermissionBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n         * @summary Check a permission\n         * @param {PermissionApiPostCheckPermissionOrErrorRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        postCheckPermissionOrError(requestParameters = {}, options) {\n            return localVarFp.postCheckPermissionOrError(requestParameters.maxDepth, requestParameters.postCheckPermissionOrErrorBody, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * PermissionApi - object-oriented interface\n * @export\n * @class PermissionApi\n * @extends {BaseAPI}\n */\nexport class PermissionApi extends BaseAPI {\n    /**\n     * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n     * @summary Check a permission\n     * @param {PermissionApiCheckPermissionRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof PermissionApi\n     */\n    checkPermission(requestParameters = {}, options) {\n        return PermissionApiFp(this.configuration).checkPermission(requestParameters.namespace, requestParameters.object, requestParameters.relation, requestParameters.subjectId, requestParameters.subjectSetNamespace, requestParameters.subjectSetObject, requestParameters.subjectSetRelation, requestParameters.maxDepth, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n     * @summary Check a permission\n     * @param {PermissionApiCheckPermissionOrErrorRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof PermissionApi\n     */\n    checkPermissionOrError(requestParameters = {}, options) {\n        return PermissionApiFp(this.configuration).checkPermissionOrError(requestParameters.namespace, requestParameters.object, requestParameters.relation, requestParameters.subjectId, requestParameters.subjectSetNamespace, requestParameters.subjectSetObject, requestParameters.subjectSetRelation, requestParameters.maxDepth, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to expand a relationship tuple into permissions.\n     * @summary Expand a Relationship into permissions.\n     * @param {PermissionApiExpandPermissionsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof PermissionApi\n     */\n    expandPermissions(requestParameters, options) {\n        return PermissionApiFp(this.configuration).expandPermissions(requestParameters.namespace, requestParameters.object, requestParameters.relation, requestParameters.maxDepth, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n     * @summary Check a permission\n     * @param {PermissionApiPostCheckPermissionRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof PermissionApi\n     */\n    postCheckPermission(requestParameters = {}, options) {\n        return PermissionApiFp(this.configuration).postCheckPermission(requestParameters.maxDepth, requestParameters.postCheckPermissionBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * To learn how relationship tuples and the check works, head over to [the documentation](https://www.ory.sh/docs/keto/concepts/api-overview).\n     * @summary Check a permission\n     * @param {PermissionApiPostCheckPermissionOrErrorRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof PermissionApi\n     */\n    postCheckPermissionOrError(requestParameters = {}, options) {\n        return PermissionApiFp(this.configuration).postCheckPermissionOrError(requestParameters.maxDepth, requestParameters.postCheckPermissionOrErrorBody, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * ProjectApi - axios parameter creator\n * @export\n */\nexport const ProjectApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Create a B2B SSO Organization\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {OrganizationBody} [organizationBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createOrganization: (projectId, organizationBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('createOrganization', 'projectId', projectId);\n            const localVarPath = `/projects/{project_id}/organizations`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(organizationBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Creates a new project.\n         * @summary Create a Project\n         * @param {CreateProjectBody} [createProjectBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProject: (createProjectBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/projects`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(createProjectBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Create an API token for a project.\n         * @summary Create project API token\n         * @param {string} project The Project ID or Project slug\n         * @param {CreateProjectApiKeyRequest} [createProjectApiKeyRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProjectApiKey: (project, createProjectApiKeyRequest, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'project' is not null or undefined\n            assertParamExists('createProjectApiKey', 'project', project);\n            const localVarPath = `/projects/{project}/tokens`\n                .replace(`{${\"project\"}}`, encodeURIComponent(String(project)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(createProjectApiKeyRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         *\n         * @summary Delete a B2B SSO Organization for a project.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {string} organizationId Organization ID  The Organization\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOrganization: (projectId, organizationId, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('deleteOrganization', 'projectId', projectId);\n            // verify required parameter 'organizationId' is not null or undefined\n            assertParamExists('deleteOrganization', 'organizationId', organizationId);\n            const localVarPath = `/projects/{project_id}/organizations/{organization_id}`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)))\n                .replace(`{${\"organization_id\"}}`, encodeURIComponent(String(organizationId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Deletes an API token and immediately removes it.\n         * @summary Delete project API token\n         * @param {string} project The Project ID or Project slug\n         * @param {string} tokenId The Token ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteProjectApiKey: (project, tokenId, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'project' is not null or undefined\n            assertParamExists('deleteProjectApiKey', 'project', project);\n            // verify required parameter 'tokenId' is not null or undefined\n            assertParamExists('deleteProjectApiKey', 'tokenId', tokenId);\n            const localVarPath = `/projects/{project}/tokens/{token_id}`\n                .replace(`{${\"project\"}}`, encodeURIComponent(String(project)))\n                .replace(`{${\"token_id\"}}`, encodeURIComponent(String(tokenId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this API to get your active project in the Ory Network Console UI.\n         * @summary Returns the Ory Network Project selected in the Ory Network Console\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getActiveProjectInConsole: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/console/active/project`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         *\n         * @summary Returns a B2B SSO Organization for a project by it\\'s ID.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {string} organizationId Organization ID  The Organization\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOrganization: (projectId, organizationId, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('getOrganization', 'projectId', projectId);\n            // verify required parameter 'organizationId' is not null or undefined\n            assertParamExists('getOrganization', 'organizationId', organizationId);\n            const localVarPath = `/projects/{project_id}/organizations/{organization_id}`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)))\n                .replace(`{${\"organization_id\"}}`, encodeURIComponent(String(organizationId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Get a projects you have access to by its ID.\n         * @summary Get a Project\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProject: (projectId, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('getProject', 'projectId', projectId);\n            const localVarPath = `/projects/{project_id}`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoint requires the user to be a member of the project with the role `OWNER` or `DEVELOPER`.\n         * @summary Get all members associated with this project\n         * @param {string} project\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProjectMembers: (project, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'project' is not null or undefined\n            assertParamExists('getProjectMembers', 'project', project);\n            const localVarPath = `/projects/{project}/members`\n                .replace(`{${\"project\"}}`, encodeURIComponent(String(project)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Retrieves project metrics for the specified event type and time range\n         * @param {string} projectId Project ID\n         * @param {string} eventType The event type to query for\n         * @param {string} resolution The resolution of the buckets  The minimum resolution is 1 minute.\n         * @param {string} from The start RFC3339 date of the time window\n         * @param {string} to The end RFC3339 date of the time window\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProjectMetrics: (projectId, eventType, resolution, from, to, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('getProjectMetrics', 'projectId', projectId);\n            // verify required parameter 'eventType' is not null or undefined\n            assertParamExists('getProjectMetrics', 'eventType', eventType);\n            // verify required parameter 'resolution' is not null or undefined\n            assertParamExists('getProjectMetrics', 'resolution', resolution);\n            // verify required parameter 'from' is not null or undefined\n            assertParamExists('getProjectMetrics', 'from', from);\n            // verify required parameter 'to' is not null or undefined\n            assertParamExists('getProjectMetrics', 'to', to);\n            const localVarPath = `/projects/{project_id}/metrics`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (eventType !== undefined) {\n                localVarQueryParameter['event_type'] = eventType;\n            }\n            if (resolution !== undefined) {\n                localVarQueryParameter['resolution'] = resolution;\n            }\n            if (from !== undefined) {\n                localVarQueryParameter['from'] = (from instanceof Date) ?\n                    from.toISOString() :\n                    from;\n            }\n            if (to !== undefined) {\n                localVarQueryParameter['to'] = (to instanceof Date) ?\n                    to.toISOString() :\n                    to;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         *\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listOrganizations: (projectId, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('listOrganizations', 'projectId', projectId);\n            const localVarPath = `/projects/{project_id}/organizations`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * A list of all the project\\'s API tokens.\n         * @summary List a project\\'s API Tokens\n         * @param {string} project The Project ID or Project slug\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listProjectApiKeys: (project, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'project' is not null or undefined\n            assertParamExists('listProjectApiKeys', 'project', project);\n            const localVarPath = `/projects/{project}/tokens`\n                .replace(`{${\"project\"}}`, encodeURIComponent(String(project)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Lists all projects you have access to.\n         * @summary List All Projects\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listProjects: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/projects`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Deprecated: Use the `patchProjectWithRevision` endpoint instead to specify the exact revision the patch was generated for.  This endpoints allows you to patch individual Ory Network project configuration keys for Ory\\'s services (identity, permission, ...). The configuration format is fully compatible with the open source projects for the respective services (e.g. Ory Kratos for Identity, Ory Keto for Permissions).  This endpoint expects the `version` key to be set in the payload. If it is unset, it will try to import the config as if it is from the most recent version.  If you have an older version of a configuration, you should set the version key in the payload!  While this endpoint is able to process all configuration items related to features (e.g. password reset), it does not support operational configuration items (e.g. port, tracing, logging) otherwise available in the open source.  For configuration items that can not be translated to the Ory Network, this endpoint will return a list of warnings to help you understand which parts of your config could not be processed.\n         * @summary Patch an Ory Network Project Configuration\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {Array<JsonPatch>} [jsonPatch]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchProject: (projectId, jsonPatch, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('patchProject', 'projectId', projectId);\n            const localVarPath = `/projects/{project_id}`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PATCH' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(jsonPatch, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * !! Use with extreme caution !!  Using this API endpoint you can purge (completely delete) a project and its data. This action can not be undone and will delete ALL your data.  !! Use with extreme caution !!\n         * @summary Irrecoverably purge a project\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        purgeProject: (projectId, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('purgeProject', 'projectId', projectId);\n            const localVarPath = `/projects/{project_id}`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This also sets their invite status to `REMOVED`. This endpoint requires the user to be a member of the project with the role `OWNER`.\n         * @summary Remove a member associated with this project\n         * @param {string} project\n         * @param {string} member\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        removeProjectMember: (project, member, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'project' is not null or undefined\n            assertParamExists('removeProjectMember', 'project', project);\n            // verify required parameter 'member' is not null or undefined\n            assertParamExists('removeProjectMember', 'member', member);\n            const localVarPath = `/projects/{project}/members/{member}`\n                .replace(`{${\"project\"}}`, encodeURIComponent(String(project)))\n                .replace(`{${\"member\"}}`, encodeURIComponent(String(member)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this API to set your active project in the Ory Network Console UI.\n         * @summary Sets the Ory Network Project active in the Ory Network Console\n         * @param {SetActiveProjectInConsoleBody} [setActiveProjectInConsoleBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setActiveProjectInConsole: (setActiveProjectInConsoleBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/console/active/project`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(setActiveProjectInConsoleBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * This endpoints allows you to update the Ory Network project configuration for individual services (identity, permission, ...). The configuration is fully compatible with the open source projects for the respective services (e.g. Ory Kratos for Identity, Ory Keto for Permissions).  This endpoint expects the `version` key to be set in the payload. If it is unset, it will try to import the config as if it is from the most recent version.  If you have an older version of a configuration, you should set the version key in the payload!  While this endpoint is able to process all configuration items related to features (e.g. password reset), it does not support operational configuration items (e.g. port, tracing, logging) otherwise available in the open source.  For configuration items that can not be translated to the Ory Network, this endpoint will return a list of warnings to help you understand which parts of your config could not be processed.  Be aware that updating any service\\'s configuration will completely override your current configuration for that service!\n         * @summary Update an Ory Network Project Configuration\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {SetProject} [setProject]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setProject: (projectId, setProject, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('setProject', 'projectId', projectId);\n            const localVarPath = `/projects/{project_id}`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(setProject, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         *\n         * @summary Update a B2B SSO Organization for a project.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {string} organizationId Organization ID  The Organization\\&#39;s ID.\n         * @param {OrganizationBody} [organizationBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateOrganization: (projectId, organizationId, organizationBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            // verify required parameter 'projectId' is not null or undefined\n            assertParamExists('updateOrganization', 'projectId', projectId);\n            // verify required parameter 'organizationId' is not null or undefined\n            assertParamExists('updateOrganization', 'organizationId', organizationId);\n            const localVarPath = `/projects/{project_id}/organizations/{organization_id}`\n                .replace(`{${\"project_id\"}}`, encodeURIComponent(String(projectId)))\n                .replace(`{${\"organization_id\"}}`, encodeURIComponent(String(organizationId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(organizationBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * ProjectApi - functional programming interface\n * @export\n */\nexport const ProjectApiFp = function (configuration) {\n    const localVarAxiosParamCreator = ProjectApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Create a B2B SSO Organization\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {OrganizationBody} [organizationBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createOrganization(projectId, organizationBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createOrganization(projectId, organizationBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.createOrganization']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Creates a new project.\n         * @summary Create a Project\n         * @param {CreateProjectBody} [createProjectBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProject(createProjectBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createProject(createProjectBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.createProject']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Create an API token for a project.\n         * @summary Create project API token\n         * @param {string} project The Project ID or Project slug\n         * @param {CreateProjectApiKeyRequest} [createProjectApiKeyRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProjectApiKey(project, createProjectApiKeyRequest, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createProjectApiKey(project, createProjectApiKeyRequest, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.createProjectApiKey']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         *\n         * @summary Delete a B2B SSO Organization for a project.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {string} organizationId Organization ID  The Organization\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOrganization(projectId, organizationId, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteOrganization(projectId, organizationId, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.deleteOrganization']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Deletes an API token and immediately removes it.\n         * @summary Delete project API token\n         * @param {string} project The Project ID or Project slug\n         * @param {string} tokenId The Token ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteProjectApiKey(project, tokenId, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteProjectApiKey(project, tokenId, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.deleteProjectApiKey']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this API to get your active project in the Ory Network Console UI.\n         * @summary Returns the Ory Network Project selected in the Ory Network Console\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getActiveProjectInConsole(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getActiveProjectInConsole(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.getActiveProjectInConsole']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         *\n         * @summary Returns a B2B SSO Organization for a project by it\\'s ID.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {string} organizationId Organization ID  The Organization\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOrganization(projectId, organizationId, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getOrganization(projectId, organizationId, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.getOrganization']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Get a projects you have access to by its ID.\n         * @summary Get a Project\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProject(projectId, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getProject(projectId, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.getProject']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoint requires the user to be a member of the project with the role `OWNER` or `DEVELOPER`.\n         * @summary Get all members associated with this project\n         * @param {string} project\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProjectMembers(project, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getProjectMembers(project, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.getProjectMembers']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Retrieves project metrics for the specified event type and time range\n         * @param {string} projectId Project ID\n         * @param {string} eventType The event type to query for\n         * @param {string} resolution The resolution of the buckets  The minimum resolution is 1 minute.\n         * @param {string} from The start RFC3339 date of the time window\n         * @param {string} to The end RFC3339 date of the time window\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProjectMetrics(projectId, eventType, resolution, from, to, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getProjectMetrics(projectId, eventType, resolution, from, to, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.getProjectMetrics']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         *\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listOrganizations(projectId, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listOrganizations(projectId, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.listOrganizations']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * A list of all the project\\'s API tokens.\n         * @summary List a project\\'s API Tokens\n         * @param {string} project The Project ID or Project slug\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listProjectApiKeys(project, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listProjectApiKeys(project, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.listProjectApiKeys']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Lists all projects you have access to.\n         * @summary List All Projects\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listProjects(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listProjects(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.listProjects']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Deprecated: Use the `patchProjectWithRevision` endpoint instead to specify the exact revision the patch was generated for.  This endpoints allows you to patch individual Ory Network project configuration keys for Ory\\'s services (identity, permission, ...). The configuration format is fully compatible with the open source projects for the respective services (e.g. Ory Kratos for Identity, Ory Keto for Permissions).  This endpoint expects the `version` key to be set in the payload. If it is unset, it will try to import the config as if it is from the most recent version.  If you have an older version of a configuration, you should set the version key in the payload!  While this endpoint is able to process all configuration items related to features (e.g. password reset), it does not support operational configuration items (e.g. port, tracing, logging) otherwise available in the open source.  For configuration items that can not be translated to the Ory Network, this endpoint will return a list of warnings to help you understand which parts of your config could not be processed.\n         * @summary Patch an Ory Network Project Configuration\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {Array<JsonPatch>} [jsonPatch]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchProject(projectId, jsonPatch, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.patchProject(projectId, jsonPatch, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.patchProject']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * !! Use with extreme caution !!  Using this API endpoint you can purge (completely delete) a project and its data. This action can not be undone and will delete ALL your data.  !! Use with extreme caution !!\n         * @summary Irrecoverably purge a project\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        purgeProject(projectId, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.purgeProject(projectId, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.purgeProject']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This also sets their invite status to `REMOVED`. This endpoint requires the user to be a member of the project with the role `OWNER`.\n         * @summary Remove a member associated with this project\n         * @param {string} project\n         * @param {string} member\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        removeProjectMember(project, member, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.removeProjectMember(project, member, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.removeProjectMember']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this API to set your active project in the Ory Network Console UI.\n         * @summary Sets the Ory Network Project active in the Ory Network Console\n         * @param {SetActiveProjectInConsoleBody} [setActiveProjectInConsoleBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setActiveProjectInConsole(setActiveProjectInConsoleBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.setActiveProjectInConsole(setActiveProjectInConsoleBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.setActiveProjectInConsole']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * This endpoints allows you to update the Ory Network project configuration for individual services (identity, permission, ...). The configuration is fully compatible with the open source projects for the respective services (e.g. Ory Kratos for Identity, Ory Keto for Permissions).  This endpoint expects the `version` key to be set in the payload. If it is unset, it will try to import the config as if it is from the most recent version.  If you have an older version of a configuration, you should set the version key in the payload!  While this endpoint is able to process all configuration items related to features (e.g. password reset), it does not support operational configuration items (e.g. port, tracing, logging) otherwise available in the open source.  For configuration items that can not be translated to the Ory Network, this endpoint will return a list of warnings to help you understand which parts of your config could not be processed.  Be aware that updating any service\\'s configuration will completely override your current configuration for that service!\n         * @summary Update an Ory Network Project Configuration\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {SetProject} [setProject]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setProject(projectId, setProject, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.setProject(projectId, setProject, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.setProject']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         *\n         * @summary Update a B2B SSO Organization for a project.\n         * @param {string} projectId Project ID  The project\\&#39;s ID.\n         * @param {string} organizationId Organization ID  The Organization\\&#39;s ID.\n         * @param {OrganizationBody} [organizationBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateOrganization(projectId, organizationId, organizationBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.updateOrganization(projectId, organizationId, organizationBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['ProjectApi.updateOrganization']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * ProjectApi - factory interface\n * @export\n */\nexport const ProjectApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = ProjectApiFp(configuration);\n    return {\n        /**\n         * Create a B2B SSO Organization\n         * @param {ProjectApiCreateOrganizationRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createOrganization(requestParameters, options) {\n            return localVarFp.createOrganization(requestParameters.projectId, requestParameters.organizationBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Creates a new project.\n         * @summary Create a Project\n         * @param {ProjectApiCreateProjectRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProject(requestParameters = {}, options) {\n            return localVarFp.createProject(requestParameters.createProjectBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Create an API token for a project.\n         * @summary Create project API token\n         * @param {ProjectApiCreateProjectApiKeyRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProjectApiKey(requestParameters, options) {\n            return localVarFp.createProjectApiKey(requestParameters.project, requestParameters.createProjectApiKeyRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         *\n         * @summary Delete a B2B SSO Organization for a project.\n         * @param {ProjectApiDeleteOrganizationRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOrganization(requestParameters, options) {\n            return localVarFp.deleteOrganization(requestParameters.projectId, requestParameters.organizationId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deletes an API token and immediately removes it.\n         * @summary Delete project API token\n         * @param {ProjectApiDeleteProjectApiKeyRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteProjectApiKey(requestParameters, options) {\n            return localVarFp.deleteProjectApiKey(requestParameters.project, requestParameters.tokenId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this API to get your active project in the Ory Network Console UI.\n         * @summary Returns the Ory Network Project selected in the Ory Network Console\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getActiveProjectInConsole(options) {\n            return localVarFp.getActiveProjectInConsole(options).then((request) => request(axios, basePath));\n        },\n        /**\n         *\n         * @summary Returns a B2B SSO Organization for a project by it\\'s ID.\n         * @param {ProjectApiGetOrganizationRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOrganization(requestParameters, options) {\n            return localVarFp.getOrganization(requestParameters.projectId, requestParameters.organizationId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get a projects you have access to by its ID.\n         * @summary Get a Project\n         * @param {ProjectApiGetProjectRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProject(requestParameters, options) {\n            return localVarFp.getProject(requestParameters.projectId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoint requires the user to be a member of the project with the role `OWNER` or `DEVELOPER`.\n         * @summary Get all members associated with this project\n         * @param {ProjectApiGetProjectMembersRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProjectMembers(requestParameters, options) {\n            return localVarFp.getProjectMembers(requestParameters.project, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Retrieves project metrics for the specified event type and time range\n         * @param {ProjectApiGetProjectMetricsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProjectMetrics(requestParameters, options) {\n            return localVarFp.getProjectMetrics(requestParameters.projectId, requestParameters.eventType, requestParameters.resolution, requestParameters.from, requestParameters.to, options).then((request) => request(axios, basePath));\n        },\n        /**\n         *\n         * @param {ProjectApiListOrganizationsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listOrganizations(requestParameters, options) {\n            return localVarFp.listOrganizations(requestParameters.projectId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * A list of all the project\\'s API tokens.\n         * @summary List a project\\'s API Tokens\n         * @param {ProjectApiListProjectApiKeysRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listProjectApiKeys(requestParameters, options) {\n            return localVarFp.listProjectApiKeys(requestParameters.project, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Lists all projects you have access to.\n         * @summary List All Projects\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listProjects(options) {\n            return localVarFp.listProjects(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated: Use the `patchProjectWithRevision` endpoint instead to specify the exact revision the patch was generated for.  This endpoints allows you to patch individual Ory Network project configuration keys for Ory\\'s services (identity, permission, ...). The configuration format is fully compatible with the open source projects for the respective services (e.g. Ory Kratos for Identity, Ory Keto for Permissions).  This endpoint expects the `version` key to be set in the payload. If it is unset, it will try to import the config as if it is from the most recent version.  If you have an older version of a configuration, you should set the version key in the payload!  While this endpoint is able to process all configuration items related to features (e.g. password reset), it does not support operational configuration items (e.g. port, tracing, logging) otherwise available in the open source.  For configuration items that can not be translated to the Ory Network, this endpoint will return a list of warnings to help you understand which parts of your config could not be processed.\n         * @summary Patch an Ory Network Project Configuration\n         * @param {ProjectApiPatchProjectRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchProject(requestParameters, options) {\n            return localVarFp.patchProject(requestParameters.projectId, requestParameters.jsonPatch, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * !! Use with extreme caution !!  Using this API endpoint you can purge (completely delete) a project and its data. This action can not be undone and will delete ALL your data.  !! Use with extreme caution !!\n         * @summary Irrecoverably purge a project\n         * @param {ProjectApiPurgeProjectRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        purgeProject(requestParameters, options) {\n            return localVarFp.purgeProject(requestParameters.projectId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This also sets their invite status to `REMOVED`. This endpoint requires the user to be a member of the project with the role `OWNER`.\n         * @summary Remove a member associated with this project\n         * @param {ProjectApiRemoveProjectMemberRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        removeProjectMember(requestParameters, options) {\n            return localVarFp.removeProjectMember(requestParameters.project, requestParameters.member, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this API to set your active project in the Ory Network Console UI.\n         * @summary Sets the Ory Network Project active in the Ory Network Console\n         * @param {ProjectApiSetActiveProjectInConsoleRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setActiveProjectInConsole(requestParameters = {}, options) {\n            return localVarFp.setActiveProjectInConsole(requestParameters.setActiveProjectInConsoleBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This endpoints allows you to update the Ory Network project configuration for individual services (identity, permission, ...). The configuration is fully compatible with the open source projects for the respective services (e.g. Ory Kratos for Identity, Ory Keto for Permissions).  This endpoint expects the `version` key to be set in the payload. If it is unset, it will try to import the config as if it is from the most recent version.  If you have an older version of a configuration, you should set the version key in the payload!  While this endpoint is able to process all configuration items related to features (e.g. password reset), it does not support operational configuration items (e.g. port, tracing, logging) otherwise available in the open source.  For configuration items that can not be translated to the Ory Network, this endpoint will return a list of warnings to help you understand which parts of your config could not be processed.  Be aware that updating any service\\'s configuration will completely override your current configuration for that service!\n         * @summary Update an Ory Network Project Configuration\n         * @param {ProjectApiSetProjectRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setProject(requestParameters, options) {\n            return localVarFp.setProject(requestParameters.projectId, requestParameters.setProject, options).then((request) => request(axios, basePath));\n        },\n        /**\n         *\n         * @summary Update a B2B SSO Organization for a project.\n         * @param {ProjectApiUpdateOrganizationRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateOrganization(requestParameters, options) {\n            return localVarFp.updateOrganization(requestParameters.projectId, requestParameters.organizationId, requestParameters.organizationBody, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * ProjectApi - object-oriented interface\n * @export\n * @class ProjectApi\n * @extends {BaseAPI}\n */\nexport class ProjectApi extends BaseAPI {\n    /**\n     * Create a B2B SSO Organization\n     * @param {ProjectApiCreateOrganizationRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    createOrganization(requestParameters, options) {\n        return ProjectApiFp(this.configuration).createOrganization(requestParameters.projectId, requestParameters.organizationBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Creates a new project.\n     * @summary Create a Project\n     * @param {ProjectApiCreateProjectRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    createProject(requestParameters = {}, options) {\n        return ProjectApiFp(this.configuration).createProject(requestParameters.createProjectBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Create an API token for a project.\n     * @summary Create project API token\n     * @param {ProjectApiCreateProjectApiKeyRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    createProjectApiKey(requestParameters, options) {\n        return ProjectApiFp(this.configuration).createProjectApiKey(requestParameters.project, requestParameters.createProjectApiKeyRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     *\n     * @summary Delete a B2B SSO Organization for a project.\n     * @param {ProjectApiDeleteOrganizationRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    deleteOrganization(requestParameters, options) {\n        return ProjectApiFp(this.configuration).deleteOrganization(requestParameters.projectId, requestParameters.organizationId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deletes an API token and immediately removes it.\n     * @summary Delete project API token\n     * @param {ProjectApiDeleteProjectApiKeyRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    deleteProjectApiKey(requestParameters, options) {\n        return ProjectApiFp(this.configuration).deleteProjectApiKey(requestParameters.project, requestParameters.tokenId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this API to get your active project in the Ory Network Console UI.\n     * @summary Returns the Ory Network Project selected in the Ory Network Console\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    getActiveProjectInConsole(options) {\n        return ProjectApiFp(this.configuration).getActiveProjectInConsole(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     *\n     * @summary Returns a B2B SSO Organization for a project by it\\'s ID.\n     * @param {ProjectApiGetOrganizationRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    getOrganization(requestParameters, options) {\n        return ProjectApiFp(this.configuration).getOrganization(requestParameters.projectId, requestParameters.organizationId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get a projects you have access to by its ID.\n     * @summary Get a Project\n     * @param {ProjectApiGetProjectRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    getProject(requestParameters, options) {\n        return ProjectApiFp(this.configuration).getProject(requestParameters.projectId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoint requires the user to be a member of the project with the role `OWNER` or `DEVELOPER`.\n     * @summary Get all members associated with this project\n     * @param {ProjectApiGetProjectMembersRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    getProjectMembers(requestParameters, options) {\n        return ProjectApiFp(this.configuration).getProjectMembers(requestParameters.project, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Retrieves project metrics for the specified event type and time range\n     * @param {ProjectApiGetProjectMetricsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    getProjectMetrics(requestParameters, options) {\n        return ProjectApiFp(this.configuration).getProjectMetrics(requestParameters.projectId, requestParameters.eventType, requestParameters.resolution, requestParameters.from, requestParameters.to, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     *\n     * @param {ProjectApiListOrganizationsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    listOrganizations(requestParameters, options) {\n        return ProjectApiFp(this.configuration).listOrganizations(requestParameters.projectId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * A list of all the project\\'s API tokens.\n     * @summary List a project\\'s API Tokens\n     * @param {ProjectApiListProjectApiKeysRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    listProjectApiKeys(requestParameters, options) {\n        return ProjectApiFp(this.configuration).listProjectApiKeys(requestParameters.project, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Lists all projects you have access to.\n     * @summary List All Projects\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    listProjects(options) {\n        return ProjectApiFp(this.configuration).listProjects(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated: Use the `patchProjectWithRevision` endpoint instead to specify the exact revision the patch was generated for.  This endpoints allows you to patch individual Ory Network project configuration keys for Ory\\'s services (identity, permission, ...). The configuration format is fully compatible with the open source projects for the respective services (e.g. Ory Kratos for Identity, Ory Keto for Permissions).  This endpoint expects the `version` key to be set in the payload. If it is unset, it will try to import the config as if it is from the most recent version.  If you have an older version of a configuration, you should set the version key in the payload!  While this endpoint is able to process all configuration items related to features (e.g. password reset), it does not support operational configuration items (e.g. port, tracing, logging) otherwise available in the open source.  For configuration items that can not be translated to the Ory Network, this endpoint will return a list of warnings to help you understand which parts of your config could not be processed.\n     * @summary Patch an Ory Network Project Configuration\n     * @param {ProjectApiPatchProjectRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    patchProject(requestParameters, options) {\n        return ProjectApiFp(this.configuration).patchProject(requestParameters.projectId, requestParameters.jsonPatch, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * !! Use with extreme caution !!  Using this API endpoint you can purge (completely delete) a project and its data. This action can not be undone and will delete ALL your data.  !! Use with extreme caution !!\n     * @summary Irrecoverably purge a project\n     * @param {ProjectApiPurgeProjectRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    purgeProject(requestParameters, options) {\n        return ProjectApiFp(this.configuration).purgeProject(requestParameters.projectId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This also sets their invite status to `REMOVED`. This endpoint requires the user to be a member of the project with the role `OWNER`.\n     * @summary Remove a member associated with this project\n     * @param {ProjectApiRemoveProjectMemberRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    removeProjectMember(requestParameters, options) {\n        return ProjectApiFp(this.configuration).removeProjectMember(requestParameters.project, requestParameters.member, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this API to set your active project in the Ory Network Console UI.\n     * @summary Sets the Ory Network Project active in the Ory Network Console\n     * @param {ProjectApiSetActiveProjectInConsoleRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    setActiveProjectInConsole(requestParameters = {}, options) {\n        return ProjectApiFp(this.configuration).setActiveProjectInConsole(requestParameters.setActiveProjectInConsoleBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This endpoints allows you to update the Ory Network project configuration for individual services (identity, permission, ...). The configuration is fully compatible with the open source projects for the respective services (e.g. Ory Kratos for Identity, Ory Keto for Permissions).  This endpoint expects the `version` key to be set in the payload. If it is unset, it will try to import the config as if it is from the most recent version.  If you have an older version of a configuration, you should set the version key in the payload!  While this endpoint is able to process all configuration items related to features (e.g. password reset), it does not support operational configuration items (e.g. port, tracing, logging) otherwise available in the open source.  For configuration items that can not be translated to the Ory Network, this endpoint will return a list of warnings to help you understand which parts of your config could not be processed.  Be aware that updating any service\\'s configuration will completely override your current configuration for that service!\n     * @summary Update an Ory Network Project Configuration\n     * @param {ProjectApiSetProjectRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    setProject(requestParameters, options) {\n        return ProjectApiFp(this.configuration).setProject(requestParameters.projectId, requestParameters.setProject, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     *\n     * @summary Update a B2B SSO Organization for a project.\n     * @param {ProjectApiUpdateOrganizationRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProjectApi\n     */\n    updateOrganization(requestParameters, options) {\n        return ProjectApiFp(this.configuration).updateOrganization(requestParameters.projectId, requestParameters.organizationId, requestParameters.organizationBody, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * RelationshipApi - axios parameter creator\n * @export\n */\nexport const RelationshipApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * The OPL file is expected in the body of the request.\n         * @summary Check the syntax of an OPL file\n         * @param {string} [body]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkOplSyntax: (body, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/opl/syntax/check`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'text/plain';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to create a relationship.\n         * @summary Create a Relationship\n         * @param {CreateRelationshipBody} [createRelationshipBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createRelationship: (createRelationshipBody, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/relation-tuples`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PUT' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(createRelationshipBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to delete relationships\n         * @summary Delete Relationships\n         * @param {string} [namespace] Namespace of the Relationship\n         * @param {string} [object] Object of the Relationship\n         * @param {string} [relation] Relation of the Relationship\n         * @param {string} [subjectId] SubjectID of the Relationship\n         * @param {string} [subjectSetNamespace] Namespace of the Subject Set\n         * @param {string} [subjectSetObject] Object of the Subject Set\n         * @param {string} [subjectSetRelation] Relation of the Subject Set\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteRelationships: (namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/relation-tuples`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (namespace !== undefined) {\n                localVarQueryParameter['namespace'] = namespace;\n            }\n            if (object !== undefined) {\n                localVarQueryParameter['object'] = object;\n            }\n            if (relation !== undefined) {\n                localVarQueryParameter['relation'] = relation;\n            }\n            if (subjectId !== undefined) {\n                localVarQueryParameter['subject_id'] = subjectId;\n            }\n            if (subjectSetNamespace !== undefined) {\n                localVarQueryParameter['subject_set.namespace'] = subjectSetNamespace;\n            }\n            if (subjectSetObject !== undefined) {\n                localVarQueryParameter['subject_set.object'] = subjectSetObject;\n            }\n            if (subjectSetRelation !== undefined) {\n                localVarQueryParameter['subject_set.relation'] = subjectSetRelation;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Get all relationships that match the query. Only the namespace field is required.\n         * @summary Query relationships\n         * @param {string} [pageToken]\n         * @param {number} [pageSize]\n         * @param {string} [namespace] Namespace of the Relationship\n         * @param {string} [object] Object of the Relationship\n         * @param {string} [relation] Relation of the Relationship\n         * @param {string} [subjectId] SubjectID of the Relationship\n         * @param {string} [subjectSetNamespace] Namespace of the Subject Set\n         * @param {string} [subjectSetObject] Object of the Subject Set\n         * @param {string} [subjectSetRelation] Relation of the Subject Set\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRelationships: (pageToken, pageSize, namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/relation-tuples`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (pageToken !== undefined) {\n                localVarQueryParameter['page_token'] = pageToken;\n            }\n            if (pageSize !== undefined) {\n                localVarQueryParameter['page_size'] = pageSize;\n            }\n            if (namespace !== undefined) {\n                localVarQueryParameter['namespace'] = namespace;\n            }\n            if (object !== undefined) {\n                localVarQueryParameter['object'] = object;\n            }\n            if (relation !== undefined) {\n                localVarQueryParameter['relation'] = relation;\n            }\n            if (subjectId !== undefined) {\n                localVarQueryParameter['subject_id'] = subjectId;\n            }\n            if (subjectSetNamespace !== undefined) {\n                localVarQueryParameter['subject_set.namespace'] = subjectSetNamespace;\n            }\n            if (subjectSetObject !== undefined) {\n                localVarQueryParameter['subject_set.object'] = subjectSetObject;\n            }\n            if (subjectSetRelation !== undefined) {\n                localVarQueryParameter['subject_set.relation'] = subjectSetRelation;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Get all namespaces\n         * @summary Query namespaces\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listRelationshipNamespaces: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/namespaces`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n        /**\n         * Use this endpoint to patch one or more relationships.\n         * @summary Patch Multiple Relationships\n         * @param {Array<RelationshipPatch>} [relationshipPatch]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchRelationships: (relationshipPatch, options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/admin/relation-tuples`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'PATCH' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication oryAccessToken required\n            // http bearer authentication required\n            yield setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            localVarRequestOptions.data = serializeDataIfNeeded(relationshipPatch, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * RelationshipApi - functional programming interface\n * @export\n */\nexport const RelationshipApiFp = function (configuration) {\n    const localVarAxiosParamCreator = RelationshipApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * The OPL file is expected in the body of the request.\n         * @summary Check the syntax of an OPL file\n         * @param {string} [body]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkOplSyntax(body, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.checkOplSyntax(body, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['RelationshipApi.checkOplSyntax']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to create a relationship.\n         * @summary Create a Relationship\n         * @param {CreateRelationshipBody} [createRelationshipBody]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createRelationship(createRelationshipBody, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.createRelationship(createRelationshipBody, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['RelationshipApi.createRelationship']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to delete relationships\n         * @summary Delete Relationships\n         * @param {string} [namespace] Namespace of the Relationship\n         * @param {string} [object] Object of the Relationship\n         * @param {string} [relation] Relation of the Relationship\n         * @param {string} [subjectId] SubjectID of the Relationship\n         * @param {string} [subjectSetNamespace] Namespace of the Subject Set\n         * @param {string} [subjectSetObject] Object of the Subject Set\n         * @param {string} [subjectSetRelation] Relation of the Subject Set\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteRelationships(namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteRelationships(namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['RelationshipApi.deleteRelationships']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Get all relationships that match the query. Only the namespace field is required.\n         * @summary Query relationships\n         * @param {string} [pageToken]\n         * @param {number} [pageSize]\n         * @param {string} [namespace] Namespace of the Relationship\n         * @param {string} [object] Object of the Relationship\n         * @param {string} [relation] Relation of the Relationship\n         * @param {string} [subjectId] SubjectID of the Relationship\n         * @param {string} [subjectSetNamespace] Namespace of the Subject Set\n         * @param {string} [subjectSetObject] Object of the Subject Set\n         * @param {string} [subjectSetRelation] Relation of the Subject Set\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRelationships(pageToken, pageSize, namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.getRelationships(pageToken, pageSize, namespace, object, relation, subjectId, subjectSetNamespace, subjectSetObject, subjectSetRelation, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['RelationshipApi.getRelationships']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Get all namespaces\n         * @summary Query namespaces\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listRelationshipNamespaces(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.listRelationshipNamespaces(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['RelationshipApi.listRelationshipNamespaces']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n        /**\n         * Use this endpoint to patch one or more relationships.\n         * @summary Patch Multiple Relationships\n         * @param {Array<RelationshipPatch>} [relationshipPatch]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchRelationships(relationshipPatch, options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.patchRelationships(relationshipPatch, options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['RelationshipApi.patchRelationships']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * RelationshipApi - factory interface\n * @export\n */\nexport const RelationshipApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = RelationshipApiFp(configuration);\n    return {\n        /**\n         * The OPL file is expected in the body of the request.\n         * @summary Check the syntax of an OPL file\n         * @param {RelationshipApiCheckOplSyntaxRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkOplSyntax(requestParameters = {}, options) {\n            return localVarFp.checkOplSyntax(requestParameters.body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to create a relationship.\n         * @summary Create a Relationship\n         * @param {RelationshipApiCreateRelationshipRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createRelationship(requestParameters = {}, options) {\n            return localVarFp.createRelationship(requestParameters.createRelationshipBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to delete relationships\n         * @summary Delete Relationships\n         * @param {RelationshipApiDeleteRelationshipsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteRelationships(requestParameters = {}, options) {\n            return localVarFp.deleteRelationships(requestParameters.namespace, requestParameters.object, requestParameters.relation, requestParameters.subjectId, requestParameters.subjectSetNamespace, requestParameters.subjectSetObject, requestParameters.subjectSetRelation, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get all relationships that match the query. Only the namespace field is required.\n         * @summary Query relationships\n         * @param {RelationshipApiGetRelationshipsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRelationships(requestParameters = {}, options) {\n            return localVarFp.getRelationships(requestParameters.pageToken, requestParameters.pageSize, requestParameters.namespace, requestParameters.object, requestParameters.relation, requestParameters.subjectId, requestParameters.subjectSetNamespace, requestParameters.subjectSetObject, requestParameters.subjectSetRelation, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get all namespaces\n         * @summary Query namespaces\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listRelationshipNamespaces(options) {\n            return localVarFp.listRelationshipNamespaces(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Use this endpoint to patch one or more relationships.\n         * @summary Patch Multiple Relationships\n         * @param {RelationshipApiPatchRelationshipsRequest} requestParameters Request parameters.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        patchRelationships(requestParameters = {}, options) {\n            return localVarFp.patchRelationships(requestParameters.relationshipPatch, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * RelationshipApi - object-oriented interface\n * @export\n * @class RelationshipApi\n * @extends {BaseAPI}\n */\nexport class RelationshipApi extends BaseAPI {\n    /**\n     * The OPL file is expected in the body of the request.\n     * @summary Check the syntax of an OPL file\n     * @param {RelationshipApiCheckOplSyntaxRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof RelationshipApi\n     */\n    checkOplSyntax(requestParameters = {}, options) {\n        return RelationshipApiFp(this.configuration).checkOplSyntax(requestParameters.body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to create a relationship.\n     * @summary Create a Relationship\n     * @param {RelationshipApiCreateRelationshipRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof RelationshipApi\n     */\n    createRelationship(requestParameters = {}, options) {\n        return RelationshipApiFp(this.configuration).createRelationship(requestParameters.createRelationshipBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to delete relationships\n     * @summary Delete Relationships\n     * @param {RelationshipApiDeleteRelationshipsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof RelationshipApi\n     */\n    deleteRelationships(requestParameters = {}, options) {\n        return RelationshipApiFp(this.configuration).deleteRelationships(requestParameters.namespace, requestParameters.object, requestParameters.relation, requestParameters.subjectId, requestParameters.subjectSetNamespace, requestParameters.subjectSetObject, requestParameters.subjectSetRelation, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get all relationships that match the query. Only the namespace field is required.\n     * @summary Query relationships\n     * @param {RelationshipApiGetRelationshipsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof RelationshipApi\n     */\n    getRelationships(requestParameters = {}, options) {\n        return RelationshipApiFp(this.configuration).getRelationships(requestParameters.pageToken, requestParameters.pageSize, requestParameters.namespace, requestParameters.object, requestParameters.relation, requestParameters.subjectId, requestParameters.subjectSetNamespace, requestParameters.subjectSetObject, requestParameters.subjectSetRelation, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get all namespaces\n     * @summary Query namespaces\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof RelationshipApi\n     */\n    listRelationshipNamespaces(options) {\n        return RelationshipApiFp(this.configuration).listRelationshipNamespaces(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Use this endpoint to patch one or more relationships.\n     * @summary Patch Multiple Relationships\n     * @param {RelationshipApiPatchRelationshipsRequest} requestParameters Request parameters.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof RelationshipApi\n     */\n    patchRelationships(requestParameters = {}, options) {\n        return RelationshipApiFp(this.configuration).patchRelationships(requestParameters.relationshipPatch, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * WellknownApi - axios parameter creator\n * @export\n */\nexport const WellknownApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * This endpoint returns JSON Web Keys required to verifying OpenID Connect ID Tokens and, if enabled, OAuth 2.0 JWT Access Tokens. This endpoint can be used with client libraries like [node-jwks-rsa](https://github.com/auth0/node-jwks-rsa) among others.\n         * @summary Discover Well-Known JSON Web Keys\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        discoverJsonWebKeys: (options = {}) => __awaiter(this, void 0, void 0, function* () {\n            const localVarPath = `/.well-known/jwks.json`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        }),\n    };\n};\n/**\n * WellknownApi - functional programming interface\n * @export\n */\nexport const WellknownApiFp = function (configuration) {\n    const localVarAxiosParamCreator = WellknownApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * This endpoint returns JSON Web Keys required to verifying OpenID Connect ID Tokens and, if enabled, OAuth 2.0 JWT Access Tokens. This endpoint can be used with client libraries like [node-jwks-rsa](https://github.com/auth0/node-jwks-rsa) among others.\n         * @summary Discover Well-Known JSON Web Keys\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        discoverJsonWebKeys(options) {\n            var _a, _b, _c;\n            return __awaiter(this, void 0, void 0, function* () {\n                const localVarAxiosArgs = yield localVarAxiosParamCreator.discoverJsonWebKeys(options);\n                const index = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;\n                const operationBasePath = (_c = (_b = operationServerMap['WellknownApi.discoverJsonWebKeys']) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.url;\n                return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, operationBasePath || basePath);\n            });\n        },\n    };\n};\n/**\n * WellknownApi - factory interface\n * @export\n */\nexport const WellknownApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = WellknownApiFp(configuration);\n    return {\n        /**\n         * This endpoint returns JSON Web Keys required to verifying OpenID Connect ID Tokens and, if enabled, OAuth 2.0 JWT Access Tokens. This endpoint can be used with client libraries like [node-jwks-rsa](https://github.com/auth0/node-jwks-rsa) among others.\n         * @summary Discover Well-Known JSON Web Keys\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        discoverJsonWebKeys(options) {\n            return localVarFp.discoverJsonWebKeys(options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * WellknownApi - object-oriented interface\n * @export\n * @class WellknownApi\n * @extends {BaseAPI}\n */\nexport class WellknownApi extends BaseAPI {\n    /**\n     * This endpoint returns JSON Web Keys required to verifying OpenID Connect ID Tokens and, if enabled, OAuth 2.0 JWT Access Tokens. This endpoint can be used with client libraries like [node-jwks-rsa](https://github.com/auth0/node-jwks-rsa) among others.\n     * @summary Discover Well-Known JSON Web Keys\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof WellknownApi\n     */\n    discoverJsonWebKeys(options) {\n        return WellknownApiFp(this.configuration).discoverJsonWebKeys(options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Ory APIs\n * Documentation for all public and administrative Ory APIs. Administrative APIs can only be accessed with a valid Personal Access Token. Public APIs are mostly used in browsers.\n *\n * The version of the OpenAPI document: v1.9.0\n * Contact: support@ory.sh\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nexport class Configuration {\n    constructor(param = {}) {\n        this.apiKey = param.apiKey;\n        this.username = param.username;\n        this.password = param.password;\n        this.accessToken = param.accessToken;\n        this.basePath = param.basePath;\n        this.serverIndex = param.serverIndex;\n        this.baseOptions = param.baseOptions;\n        this.formDataCtor = param.formDataCtor;\n    }\n    /**\n     * Check if the given MIME is a JSON MIME.\n     * JSON MIME examples:\n     *   application/json\n     *   application/json; charset=UTF8\n     *   APPLICATION/JSON\n     *   application/vnd.company+json\n     * @param mime - MIME (Multipurpose Internet Mail Extensions)\n     * @return True if the given MIME is JSON, false otherwise.\n     */\n    isJsonMime(mime) {\n        const jsonMime = new RegExp('^(application\\/json|[^;/ \\t]+\\/[^;/ \\t]+[+]json)[ \\t]*(;.*)?$', 'i');\n        return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');\n    }\n}\n","import type { Session, LogoutFlow } from '@ory/client'\nimport { FrontendApi, Configuration } from '@ory/client'\nimport { isAxiosError } from 'axios'\n\nexport const useAuthStore = defineStore('auth', () => {\n  const orySessionCookie = useCookie(\n    useRuntimeConfig().public.ory.sessionCookieName,\n  )\n  const partner = usePartnerStore()\n  const orySessionCookieAvailable = useState(\n    'ory-session-cookie-available',\n    () => (orySessionCookie.value ? true : false),\n  )\n\n  const ory = new FrontendApi(\n    new Configuration({\n      basePath: getOryAPIUrl(),\n      baseOptions: {\n        // Ensures we send cookies and all other headers in the CORS requests.\n        withCredentials: true,\n      },\n    }),\n  )\n\n  const pending = ref(false)\n  const session = ref<Session>()\n  const logoutFlow = ref<LogoutFlow>()\n\n  const isAuthorized = computed(() => !!session.value)\n\n  async function init() {\n    // To traffic and latency, Ory asked not to call the `/whoami` endpoint if the session cookie is missing.\n    // See https://jira.migros.net/browse/IHGWEBCC-1632\n    if (!orySessionCookieAvailable.value) return\n\n    try {\n      pending.value = true\n      session.value = (await ory.toSession(useRequestHeaders(['cookie']))).data\n      logoutFlow.value = (await ory.createBrowserLogoutFlow()).data\n    } catch (error) {\n      if (!isAxiosError(error) || error.response?.status !== 401)\n        console.error('Authentication check failed', error)\n    } finally {\n      pending.value = false\n    }\n  }\n\n  async function logout() {\n    if (!logoutFlow.value) return\n\n    try {\n      pending.value = true\n      await ory.updateLogoutFlow({ token: logoutFlow.value.logout_token })\n      session.value = undefined\n      await updateBookmarks()\n    } catch (error) {\n      console.error('Logout failed', error)\n    } finally {\n      pending.value = false\n    }\n  }\n\n  function getOryAPIUrl() {\n    const { hostname } = useRequestURL()\n\n    const routes = {\n      localhost: 'http://localhost:4000', // Ory tunnel\n      'webcc.hpk8s.com': 'https://ory-auth.webcc.hpk8s.com',\n      'interhome.hpk8s.com': 'https://ory-auth.interhome.hpk8s.com',\n      '*': `https://ory-auth.${hostname.replace(/^www\\./, '')}`,\n    }\n\n    return (\n      Object.entries(routes).find(([pattern]) =>\n        hostname.includes(pattern),\n      )?.[1] ?? routes['*']\n    )\n  }\n\n  async function updateBookmarks() {\n    if (!partner.id) {\n      useBookmarksStore().clear()\n    }\n  }\n\n  return { isAuthorized, pending, init, logout, session }\n})\n","import { differenceInMilliseconds } from 'date-fns'\n\nconst STORAGE_KEY = 'userSurvey'\n\nexport const useUserSurveyStore = defineStore('userSurvey', () => {\n  const state = useLocalStorage<UserSurvey>(\n    STORAGE_KEY,\n    _createState('scheduled'),\n  )\n\n  const visible = computed(() => state.value.status === 'visible')\n  const url = computed(() => useRuntimeConfig().public.userSurvey.url)\n\n  function _createState(status: UserSurveyStatus): UserSurvey {\n    return {\n      status,\n      session: useIDs().session,\n      updatedAt: new Date().toISOString(),\n    }\n  }\n\n  function schedule() {\n    if (\n      state.value.status !== 'postponed' ||\n      state.value.session === useIDs().session\n    )\n      return\n\n    setStatus('scheduled')\n  }\n\n  function show() {\n    if (!['scheduled', 'visible'].includes(state.value.status)) return\n\n    const lifetime = differenceInMilliseconds(\n      new Date(),\n      new Date(state.value.updatedAt),\n    )\n    const delay = Math.max(\n      useRuntimeConfig().public.userSurvey.delay - lifetime,\n      0,\n    )\n    setTimeout(() => setStatus('visible'), delay)\n  }\n\n  function setStatus(status: UserSurveyStatus) {\n    state.value = _createState(status)\n    if (status !== 'scheduled')\n      useTracking().handlers?.detail.externalUserSurvey(status)\n  }\n\n  return { visible, url, schedule, show, setStatus }\n})\n","export const useReviewsStore = defineStore('reviews', () => {\n  const params = useParams()\n  const confData = useConfdata()\n\n  const rating = ref<ReviewsRating>()\n  const reviews = ref<ReviewsSearchResultItem[]>([])\n  const reviewCount = ref(0)\n  const totalPages = ref(0)\n  const loading = ref(false)\n\n  async function translate(\n    review: ReviewTranslationParams,\n  ): Promise<ReviewTranslation | null> {\n    const { data, error } = await useWebccApi().translate(review)\n\n    if (error.value) return null\n\n    return data.value ?? null\n  }\n\n  async function loadReviews(\n    page: number,\n    geo: { country?: string; region?: string; place?: string },\n    locale: string = useL10N().language,\n    pagesize: number = 20,\n    bestReviews: boolean = false,\n  ) {\n    // console.log('this is loadReviews')\n    // const additionalBody = useConfdata().additionalBody as ReviewspageBody\n    // console.log(useConfdata().additionalBody)\n\n    // console.log('additionalBody.Resource.destinationSlugEn: ', additionalBody.Resource.destinationSlugEn)\n\n    // const geo = additionalBody.Resource.destinationSlugEn.split('/')\n    // const [country, region, place] = geo\n\n    const { data, error, pending } = await useWebccApi().reviews({\n      ...parseURL(),\n      ...removeFalsy(geo),\n      ...params.all,\n      bestReviews,\n      pagesize,\n      locale, // Doesn't affect anything. Should be `language` param?\n      page,\n    })\n\n    loading.value = pending.value\n\n    if (error.value) return\n\n    reviews.value = data.value?.reviews || []\n    rating.value = data.value?.rating\n    reviewCount.value = data.value?._stats.totalHits || 0\n    totalPages.value = Math.ceil(reviewCount.value / pagesize)\n  }\n\n  async function fetch(\n    searchParams: Params,\n    options?: { bestReviews?: boolean; page?: number; pagesize?: number },\n  ) {\n    return await useWebccApi().reviews({\n      locale: useL10N().locale,\n      ...searchParams,\n      ...(options ?? {}),\n    })\n  }\n\n  // TODO: add implementation for searchfilterconf in search middleware\n  function parseURL() {\n    const country = confData.destination?.countryCode as string\n    const region = confData.destination?.regionCode as string\n    const place = confData.destination?.placeCode as string\n    const query = { country, region, place, ...params.persistent }\n    const pathelements = useRequestURL()\n      .pathname.split('/')\n      .filter((p) => !!p)\n    const searchfilterconf = (confData.additionalBody as ReviewspageBody)\n      .searchfilterconfs\n    for (const conf of searchfilterconf || []) {\n      if (pathelements.includes(conf.slug.path)) {\n        const filtername = conf.filter\n        if (['sea', 'lake', 'ski', 'center', 'pax'].includes(filtername)) {\n          query[conf.filter] = conf.slug.value\n        } else {\n          query[conf.filter] = true\n        }\n      }\n    }\n    // falsy Werte löschen\n    Object.keys(query).forEach((key) => !query[key] && delete query[key])\n    return query\n  }\n\n  return {\n    rating,\n    reviews,\n    loading,\n    reviewCount,\n    totalPages,\n    loadReviews,\n    fetch,\n    translate,\n  }\n})\n","export const DURATION_MIN = 1\nexport const DURATION_MAX = 28\nexport const DURATION_MAX_FLEX = 90\nexport const DURATION_DEFAULT = 7\n\nexport function getTripDuration({\n  checkin,\n  checkout,\n}: {\n  checkin?: UnparsedDate\n  checkout?: UnparsedDate\n}): number | undefined {\n  return checkin && checkout ? calculateDuration(checkin, checkout) : undefined\n}\n","const trPrefix = 'www.components.elements.FlexibleDates.'\n\nexport interface TripDateParams {\n  checkin: string\n  checkout: string\n  fuzzyness?: number\n  duration?: number\n}\n\nexport const useFlexTripStore = defineStore('flextrip', () => {\n  const isFlexEnabled = useFlag('flexible-date-search')\n\n  const updateKey = ref('')\n  const open = ref(false)\n  const start = ref<Date>()\n  const end = ref<Date>()\n  const fuzzyness = ref(0)\n  const flexDuration = ref<number>()\n  const flexibleCalendar = ref(false)\n  const i18n = useI18n()\n\n  function init(params: Partial<TripDateParams>) {\n    start.value = tryParseDate(params.checkin)\n    end.value = tryParseDate(params.checkout)\n    fuzzyness.value = tryParseInt(params.fuzzyness) ?? 0\n    flexibleCalendar.value = !!params.duration && !fuzzyness.value\n    flexDuration.value =\n      tryParseInt(params.duration) ||\n      (flexibleCalendar.value ? DURATION_DEFAULT : undefined)\n  }\n\n  const range = computed<DateRange>({\n    get() {\n      return { start: start.value, end: end.value }\n    },\n    set(r) {\n      start.value = r.start\n      end.value = r.end\n      if (!flexibleSearch.value) open.value = false\n    },\n  })\n\n  const valid = computed(\n    () => isDateRangeValid(range.value) && !!getDateRangeInDays(range.value),\n  )\n\n  const flexibleSearch = computed(\n    () => flexibleCalendar.value || isFlexEnabled.value,\n  )\n  const duration = computed(() =>\n    flexibleCalendar.value || fuzzyness.value > 0\n      ? flexDuration.value\n      : undefined,\n  )\n  const durationText = computed(() =>\n    duration.value ? getDurationText(duration.value) : '',\n  )\n  const fuzzynessText = computed(() =>\n    fuzzyness.value > 0\n      ? ` ± ${i18n.t(`${trPrefix}night_s`, {}, fuzzyness.value)}`\n      : '',\n  )\n\n  const filter = computed(() =>\n    start.value && end.value\n      ? {\n          checkin: toDate(start.value),\n          checkout: toDate(end.value),\n          duration: duration.value,\n        }\n      : { checkin: undefined, checkout: undefined, duration: undefined },\n  )\n\n  const tripText = computed(() => {\n    const { start: rangeStart, end: rangeEnd } = range.value\n\n    if (flexibleCalendar.value && valid.value) {\n      return i18n.t(`${trPrefix}night_between`, {\n        duration: durationText.value,\n        start: formatDatetime(toDate(rangeStart!), '2-digit-short'),\n        end: formatDatetime(toDate(rangeEnd!), '2-digit-short'),\n      })\n    }\n\n    if (rangeStart) {\n      return (\n        [rangeStart, rangeEnd]\n          .map((date) => (date ? formatDatetime(toDate(date), undefined) : ''))\n          .join(' - ') + fuzzynessText.value\n      )\n    }\n\n    return ''\n  })\n\n  function reset() {\n    start.value = undefined\n    end.value = undefined\n    fuzzyness.value = 0\n    flexDuration.value = undefined\n    updateKey.value = new Date().toISOString()\n  }\n\n  function changeDuration(d: number | undefined) {\n    flexDuration.value = d\n    if (\n      start.value &&\n      end.value &&\n      d &&\n      d > calculateDuration(start.value, end.value)\n    ) {\n      end.value = daysAdd(start.value, d)\n    }\n  }\n\n  function getDurationText(duration: number) {\n    return duration % 7\n      ? i18n.t(`${trPrefix}night_s`, duration)\n      : i18n.t(`${trPrefix}week_s`, duration / 7)\n  }\n\n  return {\n    init,\n    flexibleCalendar,\n    flexibleSearch,\n    open,\n    range,\n    updateKey,\n    valid,\n    duration,\n    filter,\n    durationText,\n    tripText,\n    reset,\n    changeDuration,\n    getDurationText,\n    fuzzyness,\n    fuzzynessText,\n    flexDuration,\n  }\n})\n","import { joinURL, withQuery } from 'ufo'\n\nexport default function useURLs() {\n  const runtimeConfig = useRuntimeConfig()\n  const params = useParams()\n  const partner = usePartner()\n  const confData = useConfdata()\n\n  function buildUrl(\n    path: string,\n    query: Params,\n    options?: { languagePrefix?: boolean },\n  ): URL {\n    const url = useRequestURL()\n    url.pathname = buildPath(\n      options?.languagePrefix ? confData.languagePrefix : '',\n      path,\n    )\n    url.search = new URLSearchParams(asQueryParams(unpack(query))).toString()\n\n    return url\n  }\n\n  function buildSearchUrl(\n    filters: Params,\n    geo?: {\n      country?: SearchApiDestFacet\n      region?: SearchApiDestFacet\n      place?: SearchApiDestFacet\n    },\n  ): URL {\n    const { searchfilterconfs } = confData.additionalBody as SearchPageBody\n    const { prefixSearchpage } = confData\n    const maxPathLength = filters.place || filters.region ? 3 : 2\n\n    const geoConfs = [\n      {\n        filter: 'country',\n        slug: {\n          value: filters.country,\n          path: geo?.country?.slug || filters.country,\n        },\n      },\n      {\n        filter: 'region',\n        slug: {\n          value: filters.region,\n          path: geo?.region?.slug || filters.region,\n        },\n      },\n      {\n        filter: 'place',\n        slug: { value: filters.place, path: geo?.place?.slug || filters.place },\n      },\n    ]\n\n    const slugs = new Map(\n      [...geoConfs, ...(searchfilterconfs ?? [])]\n        .filter(\n          ({ slug, filter }) => filters[filter] && slug.value && slug.path,\n        )\n        .map(({ slug, filter }) => {\n          if (['sea', 'lake', 'ski', 'center'].includes(filter)) {\n            return slug.value === filters[filter]\n              ? [filter, slug.path]\n              : undefined\n          }\n          if (filter === 'pax') {\n            return slug.value &&\n              parseInt(slug.value) === tryParseInt(filters[filter]?.toString())\n              ? [filter, slug.path]\n              : undefined\n          }\n          return [filter, slug.path]\n        })\n        .filter(Boolean)\n        .slice(0, maxPathLength) as [string, string][],\n    )\n\n    const path = slugs.size\n      ? buildPath(...slugs.values())\n      : buildPath(prefixSearchpage)\n    const query = {\n      ...Object.fromEntries(\n        Object.entries(filters).filter(([key]) => !slugs.has(key)),\n      ),\n      partnerid: partner.id,\n      ...params.persistent,\n    }\n\n    return buildUrl(path, query, { languagePrefix: true })\n  }\n\n  function buildAccommodationUrl(accom: {\n    slug: string\n    code: string\n    trip?: Trip\n  }): URL {\n    const { filters } = useSearch()\n    const { checkin, checkout } =\n      filters.checkin && filters.checkout\n        ? (accom.trip ?? filters)\n        : ({} as Trip)\n    const searchParams = {\n      checkin,\n      checkout,\n      partnerid: partner.id,\n      ...params.persistent,\n    }\n\n    return buildUrl([accom.slug || accom.code, ''].join('/'), searchParams, {\n      languagePrefix: true,\n    })\n  }\n\n  function buildBookingUrl(\n    accom: { code: string },\n    { checkin, checkout, pax }: TripParams,\n    options?: BookingOptions,\n  ): URL {\n    return buildUrl('booking', {\n      accommodation: accom.code,\n      checkin: toDate(checkin),\n      checkout: toDate(checkout),\n      pax: pax.toString(),\n      language: confData.languagePrefix ? confData.language : undefined,\n      isOption: options?.isOption ? 'true' : undefined,\n      partnerid: partner.id,\n      ...params.persistent,\n    })\n  }\n\n  function buildImageUrl(imageId: string, transformation?: string): string {\n    return joinURL(\n      runtimeConfig.public.imagekitBase,\n      imageId,\n      transformation ?? '',\n    )\n  }\n\n  function buildReviewsUrl(): URL {\n    // TODO: slugs are not the best base for reviews-link, sometimes with leading slash, sometimes without\n    // conf-api should deliver link to review-page\n    const { prefixSearchpage, prefixReviewspage, languagePrefix } = confData\n\n    const url = useRequestURL()\n    url.pathname = buildPath(\n      languagePrefix,\n      prefixReviewspage,\n      deleteFromPath(url.pathname, prefixSearchpage, languagePrefix),\n    )\n    url.searchParams.delete('page')\n\n    return url\n  }\n\n  function buildValidUrl(href: string): URL {\n    const url = new URL(href, useRequestURL())\n    url.search = new URLSearchParams({\n      ...asQueryParams(params.persistent),\n      ...Object.fromEntries(url.searchParams),\n    }).toString()\n    return url\n  }\n\n  function buildRedirectUrl(href: string): URL {\n    return new URL(withQuery(href, useRoute().query), useRequestURL())\n  }\n\n  function buildGuestWorldUrl(path: string, searchParams?: object): string {\n    return withQuery(path, {\n      language: confData.languagePrefix ? confData.language : undefined,\n      ...(searchParams ?? {}),\n    })\n  }\n\n  function buildLoginUrl(): string {\n    return buildGuestWorldUrl('/login', {\n      returnTo: addUrlParams(useRequestURL(), {\n        signedIn: true,\n      }).toString(),\n      ...params.persistent,\n    })\n  }\n\n  function buildLoginUrlWishAccomCode(code?: string): string {\n    return buildGuestWorldUrl('/login', {\n      returnTo: addUrlParams(useRequestURL(), {\n        signedIn: true,\n        addToWishlist: code ? encodeURIComponent(code) : '',\n      }).toString(),\n      ...params.persistent,\n    })\n  }\n\n  function buildLoginToWishlistUrl(): string {\n    return buildGuestWorldUrl('/login', {\n      returnTo: buildRedirectUrl(\n        `${buildUrl('/myaccount/wishlists', { signedIn: true })}`,\n      ).href,\n      ...params.persistent,\n    })\n  }\n\n  function buildBookmarksUrl(): string {\n    const { href } = confData.links?.bookmarks ?? {}\n\n    return href ? withQuery(href, { partnerid: partner.id || undefined }) : ''\n  }\n\n  function buildProfileUrl(): string {\n    return buildGuestWorldUrl('/myaccount/profile', useRoute().query)\n  }\n\n  function buildWishlistUrl(): string {\n    return buildGuestWorldUrl('/myaccount/wishlists', useRoute().query)\n  }\n\n  function buildBookingsUrl(): string {\n    return buildGuestWorldUrl('/myaccount/bookings', useRoute().query)\n  }\n\n  function buildNewsletterUrl() {\n    // Host does not matter\n    const url = new URL('https://www.interhome.com')\n    url.pathname = `${confData.languagePrefix}/newsletter`\n    url.searchParams.set('type', 'Bar')\n\n    url.search = new URLSearchParams({\n      ...(Object.fromEntries(url.searchParams) as Record<string, string>),\n      ...(params.persistent as Record<string, string>),\n    }).toString()\n    return url.pathname + url.search\n  }\n\n  return {\n    buildUrl,\n    buildSearchUrl,\n    buildImageUrl,\n    buildAccommodationUrl,\n    buildBookingUrl,\n    buildReviewsUrl,\n    buildValidUrl,\n    buildRedirectUrl,\n    buildLoginUrl,\n    buildProfileUrl,\n    buildBookingsUrl,\n    buildWishlistUrl,\n    buildBookmarksUrl,\n    buildNewsletterUrl,\n    buildLoginToWishlistUrl,\n    buildLoginUrlWishAccomCode,\n  }\n}\n","export function getSeason(date?: Date | string) {\n  return isWinter(date ?? '') ? 'w' : 's'\n}\n","const SEASON_NAMES: Record<string, Season> = {\n  s: 's',\n  summer: 's',\n  w: 'w',\n  winter: 'w',\n}\n\nexport function parseSeason(name: unknown): Season | undefined {\n  return SEASON_NAMES[name as keyof typeof SEASON_NAMES]\n}\n\n/**\n * Legacy non-reactive season composable.\n *\n * @deprecated Use {@link parseSeason}, {@link getSeason} instead.\n */\nexport const useSeason = (date?: Date | string): Season => {\n  return parseSeason(useParams().all.season) ?? getSeason(date)\n}\n","/**\n * Keep previous query data between requests - data does not set to null when query key is changed.\n * Provides safe types.\n *\n * @param {object} previousData\n * @return {object}\n */\nexport function keepPreviousDataPlaceholder<\n  TQueryFnData = unknown,\n  TQueryData = TQueryFnData,\n>(previousData: TQueryData | undefined): TQueryData | undefined {\n  return previousData\n}\n","import type {\n  SearchApiSuggestion,\n  SearchApiSuggestionType,\n} from '~/api/search-api.types'\n\nexport type AutosuggestItem = {\n  type: SearchApiSuggestionType\n  code: string\n  label: string\n  flag: string\n  path: string\n  selected: boolean\n}\n\nconst TYPES_ORDER = ['C', 'R', 'P', 'H', 'A', 'B', 'G']\n\nexport function flatSuggestions(\n  items: SearchApiSuggestion[],\n): SearchApiSuggestion[] {\n  return items\n    .filter(({ type }) => TYPES_ORDER.includes(type))\n    .toSorted(\n      (a, b) => TYPES_ORDER.indexOf(a.type) - TYPES_ORDER.indexOf(b.type),\n    )\n    .flatMap((item) => [\n      item,\n      ...(item.type === 'C' ? (item.topRegions ?? []) : []),\n    ])\n}\n\nexport function mapDestinationToSuggestion(\n  destination: Destination,\n): SearchApiSuggestion | undefined {\n  const { urlPath } = destination\n  const { country, region, place } = getDestinationQuery(destination)\n\n  if (!urlPath || !country) return undefined\n\n  return {\n    type: place ? 'P' : region ? 'R' : 'C',\n    code: place ?? region ?? country ?? '',\n    label: getDestinationName(destination),\n    country,\n    slug: removeLanguagePrefix(urlPath),\n  }\n}\n\nexport function mapTeaserToSuggestion(\n  { title, link }: TeaserWithImage,\n  allCountries: CountryLink[],\n): SearchApiSuggestion | undefined {\n  const { country, region, place } = splitDestinationPath(link?.href ?? '')\n  // Detecting country code based on slug and icon since conf API doesn't return it yet.\n  const countryCode = allCountries.find(\n    ({ href }) => splitDestinationPath(href).country === country,\n  )?.icon\n\n  if (!countryCode) return undefined\n\n  return {\n    type: region ? 'R' : 'C',\n    code: region ? '' : countryCode,\n    label: title,\n    country: countryCode,\n    slug: buildPath(country, region, place),\n  }\n}\n","import { pick } from 'lodash-es'\nimport { minutesToMilliseconds } from 'date-fns'\nimport type { UseQueryOptions } from '@tanstack/vue-query'\nimport { useQuery } from '@tanstack/vue-query'\nimport type { SearchApiSuggestionsResponse } from './search-api.types'\n\ntype SearchQueryOptions<R = SearchApiResult> = Partial<\n  Omit<UseQueryOptions<R>, 'select'>\n> & {\n  enabled?: MaybeRefOrGetter<boolean | undefined>\n  select?(result: SearchApiResult, params: SearchApiParams): R\n}\n\nexport function useSearchQuery<R = SearchApiResult>(\n  query: MaybeRefOrGetter<SearchApiParams>,\n  options: SearchQueryOptions<R> = {},\n) {\n  const fetch = useRequestFetch()\n  const l10n = useL10N()\n  const params = computed(() =>\n    sortKeys({ language: l10n.language, ...toValue(query) }),\n  )\n  return useQuery({\n    ...(options as Omit<typeof options, 'enabled' | 'select'>),\n    placeholderData: (prev: SearchApiResult | undefined) => prev, // Keep previous data between requests\n    enabled: computed(\n      () => toValue(options.enabled) !== false && import.meta.client,\n    ),\n    queryKey: ['search-api', 'accomtrips', params] as const,\n    queryFn({ queryKey: [_, __, q], signal }) {\n      return fetch<SearchApiResult>('/search-api/v1/engines/accomtrips', {\n        query: mapSearchApiParams(q),\n        signal,\n      })\n    },\n    select(result) {\n      return (\n        options.select ? options.select(result, toValue(query)) : result\n      ) as R\n    },\n  })\n}\n\ntype SearchMultiQuery = {\n  requests: SearchApiParams[]\n  language?: string\n}\n\nexport function useSearchMultiQuery<R = SearchApiResult[]>(\n  query: MaybeRefOrGetter<SearchMultiQuery>,\n  options: {\n    enabled?: MaybeRefOrGetter<boolean>\n    select?(result: SearchApiResult[], params: SearchMultiQuery): R\n  } = {},\n) {\n  const fetch = useRequestFetch()\n  const params = computed(() => ({\n    requests: toValue(query).requests.map(sortKeys),\n    language: toValue(query).language,\n  }))\n  return useQuery({\n    enabled: toRef(options.enabled),\n    queryKey: ['search-api', 'multi', params] as const,\n    queryFn({ queryKey: [_, __, { requests, language }], signal }) {\n      return fetch<SearchApiResult[]>(\n        '/search-api/v1/engines/accomtrips/multi',\n        {\n          query: { request: requests.map(stringifyParams) },\n          headers: removeFalsy({ 'Accept-Language': language }),\n          signal,\n        },\n      )\n    },\n    select(result) {\n      return (\n        options.select ? options.select(result, toValue(query)) : result\n      ) as R\n    },\n  })\n}\n\nexport function useSearchAccommodationsQuery(\n  query: MaybeRefOrGetter<SearchApiParams>,\n  options: Omit<SearchQueryOptions, 'select'> = {},\n) {\n  return useSearchQuery(query, {\n    ...options,\n    select(result) {\n      return setDocPosition(result, toValue(query))\n    },\n  })\n}\n\nexport function useSearchRegionPlacesQuery(\n  query: MaybeRefOrGetter<\n    Pick<SearchApiParams, 'country' | 'region' | 'facet'>\n  >,\n  options: { enabled?: MaybeRefOrGetter<boolean | undefined> } = {},\n) {\n  return useSearchAccommodationsQuery(\n    computed(() => ({\n      pagesize: -1,\n      ...pick(toValue(query), ['country', 'region', 'facet']),\n    })),\n    options,\n  )\n}\n\nexport function useSearchLinkedObjectsQuery(params: {\n  code: MaybeRef<string>\n  language?: MaybeRef<string | undefined>\n}) {\n  const fetch = useRequestFetch()\n  return useQuery({\n    enabled: import.meta.client,\n    queryKey: ['search-api', 'linked-objects', params] as const,\n    queryFn({ queryKey: [_, __, { code, language }], signal }) {\n      return fetch(`/search-api/v1/accoms/${code}/linked-objects`, {\n        headers: removeFalsy({\n          'Accept-Language': language,\n        }),\n        signal,\n      })\n    },\n  })\n}\n\nconst SUGGESTIONS_FUZZINESS_DEFAULT = 5\nconst SUGGESTIONS_STALE_TIME_MINUTES = 20\n\nexport function useSearchApiSuggestionsQuery(\n  params: MaybeRefOrGetter<OnlyRequired<SearchApiSuggestParams, 'query'>>,\n  options: {\n    enabled?: MaybeRefOrGetter<boolean>\n  } = {},\n) {\n  const fetch = useRequestFetch()\n  const l10n = useL10N()\n  const settings = useSettings()\n\n  const normalizedParams = computed(() => ({\n    type: settings.autosuggestSearchtype,\n    source: settings.autosuggestSource,\n    size: settings.autosuggestSize,\n    fuzziness: SUGGESTIONS_FUZZINESS_DEFAULT,\n    language: l10n.language,\n    locale: l10n.locale,\n    ...toValue(params),\n  }))\n\n  return useQuery({\n    staleTime: minutesToMilliseconds(SUGGESTIONS_STALE_TIME_MINUTES),\n    placeholderData: keepPreviousDataPlaceholder,\n    ...options,\n    queryKey: ['search-suggestions', normalizedParams] as const,\n    queryFn({ queryKey: [_, queryParams], signal }) {\n      return fetch<SearchApiSuggestionsResponse>('/search-api/v1/suggest', {\n        query: queryParams,\n        signal,\n      })\n    },\n    select(data) {\n      return flatSuggestions(data?.Suggestions ?? [])\n    },\n  })\n}\n\n/**\n * Converts params to a multi-search request string.\n *\n * @param params Request params.\n * @returns String in format `country:AT,pets:true,sorting:-averagerating`.\n */\nfunction stringifyParams(params: object): string {\n  return JSON.stringify(params).replace(/[\"{}]/g, '')\n}\n","import { toRefs } from '@vueuse/core'\nimport { useSearchRegionPlacesQuery } from '~/api/search-api'\n\nexport const useSearchStore = defineStore(\n  'search',\n  (): {\n    docs: Ref<ResultDocument[] | undefined>\n    loading: Ref<boolean>\n    facets: Ref<SearchApiFacets | undefined>\n    geo: Ref<{\n      countries?: SearchApiDestFacet[]\n      regions?: SearchApiDestFacet[]\n      places?: SearchApiDestFacet[]\n    }>\n    geoAll: Ref<{\n      countries: SearchApiDestFacet[]\n      regions: SearchApiDestFacet[]\n      places: SearchApiDestFacet[]\n    }>\n    geoCurrent: Ref<{\n      country?: SearchApiDestFacet\n      region?: SearchApiDestFacet\n      place?: SearchApiDestFacet\n    }>\n    filters: Ref<Params>\n    trip: Ref<Params>\n    total: Ref<number>\n    totalPages: Ref<number>\n    viewport: Ref<Viewport | undefined>\n    url: Ref<string>\n    setFilter: (f: Params, options?: { reset?: boolean }) => void\n  } => {\n    const globalParams = useParams()\n    const confData = useConfdata()\n    const flexTrip = useFlexTrip()\n    const tracking = useTracking()\n    const { buildSearchUrl } = useURLs()\n\n    const filters = ref<Params>({})\n    const lastChanged = ref<string[]>([])\n\n    const isRedesign = useFlag('srp-redesign')\n\n    const pagesizeDefault = computed(() => (isRedesign.value ? 18 : 20))\n\n    const searchApiParams = computed(() => {\n      const params = {\n        ...filters.value,\n        currency: confData.currency,\n        season:\n          filters.value.season ??\n          parseSeason(globalParams.all.season) ??\n          getSeason(filters.value.checkin),\n      }\n\n      return {\n        pagesize: pagesizeDefault,\n        ...params,\n        salesoffice: confData.salesoffice?.code,\n        ...(hasDateParams(params) && !params.duration && flexTrip.fuzzyness\n          ? addDatesFuzziness(params, flexTrip.fuzzyness)\n          : {}),\n        sorting: params.sorting,\n      } as SearchApiParams\n    })\n\n    const {\n      data,\n      isFetching, // using `isFetching` instead of `isLoading`\n      isPending,\n    } = useSearchAccommodationsQuery(searchApiParams, {\n      enabled: computed(() => confData.pagetype === 'search'),\n    })\n\n    const loading = computed(\n      () =>\n        isFetching.value || (confData.pagetype === 'search' && isPending.value),\n    )\n\n    const { total, totalPages, facets, docs, geo, viewport } = toRefs(\n      computed(() => {\n        return {\n          totalPages: data.value?.totalPages ?? 0,\n          total: data.value?.totalHits || 0,\n          facets: data.value?.facets,\n          docs: data.value?.docs,\n          geo: {\n            countries: data.value?.facets?.countries,\n            regions: data.value?.facets?.regions,\n            places: data.value?.facets?.places,\n          },\n          viewport: data.value?.viewport,\n        }\n      }),\n    )\n\n    // Tracking\n    watch(data, (dataObj) => {\n      if (!dataObj) return\n      tracking.handlers?.search.results(\n        confData.destination,\n        filters.value,\n        total.value ?? 0,\n      )\n      tracking.handlers?.search.resultCount(total.value ?? 0)\n      nextTick(() => {\n        tracking.handlers?.ecommerce.viewItemList(dataObj.docs ?? [])\n        tracking.handlers?.eec.productImpression(dataObj.docs ?? [])\n      })\n    })\n\n    const { data: facetsData, isLoading: loadingFilters } =\n      useSearchRegionPlacesQuery(\n        computed(() => {\n          const changed = lastChanged.value\n          const { country, region: regionFilter } = filters.value\n          let facet: (keyof SearchApiFacets)[] = ['regions', 'places']\n          let region: string | undefined = undefined\n          if (\n            (!changed.length || changed.includes('region')) &&\n            country &&\n            region\n          ) {\n            facet = ['places']\n            region = regionFilter\n          }\n          return removeFalsy({\n            country,\n            region,\n            facet,\n          })\n        }),\n        {\n          enabled: computed(() => {\n            if (confData.pagetype !== 'search') return false\n            const changed = lastChanged.value\n            return (\n              (!changed.length ||\n                changed.includes('country') ||\n                changed.includes('region')) &&\n              !!filters.value.country\n            )\n          }),\n        },\n      )\n\n    const { allRegions, allPlaces } = toRefs(\n      computed(() => ({\n        allRegions: facetsData.value?.facets?.regions ?? [],\n        allPlaces: facetsData.value?.facets?.places ?? [],\n      })),\n    )\n\n    const trip = computed(() => {\n      const { checkin, checkout, duration, pax } = filters.value\n      return { checkin, checkout, duration, pax }\n    })\n\n    const geoAll = computed(() => {\n      return {\n        countries: geo.value.countries ?? [],\n        regions: allRegions.value ?? [],\n        places: allPlaces.value ?? [],\n      }\n    })\n\n    const geoCurrent = computed(() => {\n      const { country, region, place } = filters.value\n      return {\n        country: country\n          ? geoAll.value.countries.find(geoByCode(country))\n          : undefined,\n        region: region\n          ? geoAll.value.regions.find(geoByCode(region))\n          : undefined,\n        place: place ? geoAll.value.places.find(geoByCode(place)) : undefined,\n      }\n    })\n\n    const url = computed(() => {\n      // Waiting for countries, regions, and places to load to form the URL\n      if (\n        loadingFilters.value ||\n        (!geo.value.countries?.length && loading.value)\n      )\n        return ''\n      const paramsFromFilters = {\n        ...removeFalsy(filters.value),\n        fuzzyness: flexTrip.fuzzyness,\n      }\n\n      if (!flexTrip.fuzzyness) {\n        paramsFromFilters.duration = filters.value.duration\n      }\n\n      return buildSearchUrl(paramsFromFilters, geoCurrent.value).toString()\n    })\n\n    async function setFilter(\n      params: Params,\n      { reset = false }: { reset?: boolean } = {},\n    ) {\n      if (params.fuzzyness) {\n        flexTrip.fuzzyness = params.fuzzyness\n      }\n      const updates = Object.fromEntries(\n        Object.entries(params).filter(([key]) => key in ALLOWED_SEARCH_PARAMS),\n      ) as Pick<typeof params, keyof typeof ALLOWED_SEARCH_PARAMS>\n      const newFilters = removeFalsy({\n        ...(reset ? {} : filters.value),\n        ...updates,\n        page: (updates.page ?? undefined) as number | undefined,\n      })\n\n      if (!reset && objectsEqual(newFilters, filters.value)) return\n\n      filters.value = newFilters\n\n      lastChanged.value = Object.keys(updates)\n      if (import.meta.client && lastChanged.value.length && !reset) {\n        tracking.handlers?.facette.filter(updates, filters.value, facets.value)\n      }\n    }\n\n    return {\n      facets,\n      docs,\n      loading,\n      geo,\n      geoAll,\n      geoCurrent,\n      viewport,\n      filters,\n      trip,\n      total,\n      totalPages,\n      url,\n      setFilter,\n    }\n  },\n)\n","import { skipHydrate } from 'pinia'\n\nconst STORAGE_KEY = 'POPUPS'\n\nexport const usePopupsStore = defineStore('popups', () => {\n  const popups = useLocalStorage<Record<string, boolean>>(\n    STORAGE_KEY,\n    () => ({}),\n  )\n\n  function update(name: string, state: boolean) {\n    ;(popups.value as Record<string, boolean>)[name] = state\n  }\n\n  return { popups: skipHydrate(popups), update }\n})\n","import type { Pinia } from 'pinia'\n\nconst storesOrder = [\n  // no deps\n  ['useragent', useUseragentStore] as const,\n  ['pagehead', usePageHeadStore] as const,\n  ['settings', useSettingsStore] as const,\n  ['ids', useIDsStore] as const,\n  ['toggler', useTogglerStore] as const,\n  ['consent', useConsentStore] as const, // has `useTracking` dep, but only during `update()` fn call\n  ['wishlist', useWishlistStore] as const,\n  ['user', useUserStore] as const,\n  ['partner', usePartnerStore] as const, // params, cookies\n  ['tracking', useTrackingStore] as const, // consent, params, cookies, gtag, ids\n  ['confdata', useConfdataStore] as const, // params, useragent, partner\n  ['ab', useABStore] as const, // params, confdata, ids\n  ['auth', useAuthStore] as const, // ab\n  ['usersurvey', useUserSurveyStore] as const, // ids, tracking\n  ['bookmarks', useBookmarksStore] as const, // partner, confdata\n  ['reviews', useReviewsStore] as const, // confdata, params\n  ['flextrip', useFlexTripStore] as const, // params, ab\n  ['search', useSearchStore] as const, // tracking, confdata\n  ['popups', usePopupsStore] as const,\n  // ['recommendations', useRecommendationsStore] as const,\n] as const\n\nfunction mutateStores(stores: Record<string, unknown>, pinia: Pinia) {\n  for (const [name, storeFn] of storesOrder) {\n    Object.assign(stores, { [name]: storeFn(pinia) })\n  }\n  return stores\n}\n\nconst piniaStorePlugin = defineNuxtPlugin({\n  name: 'stores',\n  enforce: 'pre',\n  dependsOn: ['pinia', 'app:i18n', 'app:params', 'unleash:plugin'],\n  setup(nuxtApp) {\n    const $pinia = nuxtApp.$pinia as Pinia\n    let $stores = {}\n    Object.defineProperty(nuxtApp.vueApp, '$stores', { get: () => $stores })\n    nuxtApp.provide('stores', $stores)\n    mutateStores($stores, $pinia)\n    $stores = Object.freeze($stores)\n  },\n})\n\nexport default piniaStorePlugin\n\ninterface StoresMap {\n  useragent: ReturnType<typeof useUseragentStore>\n  ab: ReturnType<typeof useABStore>\n  auth: ReturnType<typeof useAuthStore>\n  bookmarks: ReturnType<typeof useBookmarksStore>\n  confdata: ReturnType<typeof useConfdataStore>\n  consent: ReturnType<typeof useConsentStore>\n  popups: ReturnType<typeof usePopupsStore>\n  flextrip: ReturnType<typeof useFlexTripStore>\n  pagehead: ReturnType<typeof usePageHeadStore>\n  partner: ReturnType<typeof usePartnerStore>\n  // recommendations: ReturnType<typeof useRecommendationsStore>\n  reviews: ReturnType<typeof useReviewsStore>\n  ids: ReturnType<typeof useIDsStore>\n  search: ReturnType<typeof useSearchStore>\n  settings: ReturnType<typeof useSettingsStore>\n  toggler: ReturnType<typeof useTogglerStore>\n  tracking: ReturnType<typeof useTrackingStore>\n  user: ReturnType<typeof useUserStore>\n  usersurvey: ReturnType<typeof useUserSurveyStore>\n}\n\ndeclare module '#app' {\n  interface NuxtApp {\n    $stores: StoresMap\n  }\n}\n\ndeclare module 'vue' {\n  interface ComponentCustomProperties {\n    $stores: StoresMap\n  }\n}\ndeclare module '@vue/runtime-core' {\n  interface ComponentCustomProperties {\n    $stores: StoresMap\n  }\n}\n","import type {\n  DehydratedState,\n  VueQueryPluginOptions,\n} from '@tanstack/vue-query'\nimport {\n  VueQueryPlugin,\n  QueryClient,\n  hydrate,\n  dehydrate,\n} from '@tanstack/vue-query'\n\nexport default defineNuxtPlugin({\n  name: 'vue-query',\n  enforce: 'pre',\n  setup(nuxt) {\n    const vueQueryState = useState<DehydratedState | null>('vue-query')\n\n    // Modify your Vue Query global settings here\n    const queryClient = new QueryClient({\n      defaultOptions: { queries: { staleTime: 5 * 60 * 1000 } },\n    })\n    const options: VueQueryPluginOptions = {\n      queryClient,\n      enableDevtoolsV6Plugin: true,\n    }\n\n    nuxt.vueApp.use(VueQueryPlugin, options)\n\n    if (import.meta.server) {\n      nuxt.hooks.hook('app:rendered', () => {\n        vueQueryState.value = dehydrate(queryClient)\n      })\n    }\n\n    if (import.meta.client) {\n      nuxt.hooks.hook('app:created', () => {\n        hydrate(queryClient, vueQueryState.value)\n      })\n    }\n  },\n})\n","import { defineNuxtPlugin } from \"../nuxt.js\";\nimport { loadPayload } from \"../composables/payload.js\";\nimport { onNuxtReady } from \"../composables/ready.js\";\nimport { useRouter } from \"../composables/router.js\";\nimport { getAppManifest } from \"../composables/manifest.js\";\nimport { appManifest as isAppManifestEnabled } from \"#build/nuxt.config.mjs\";\nexport default defineNuxtPlugin({\n  name: \"nuxt:payload\",\n  setup(nuxtApp) {\n    if (import.meta.dev) {\n      return;\n    }\n    useRouter().beforeResolve(async (to, from) => {\n      if (to.path === from.path) {\n        return;\n      }\n      const payload = await loadPayload(to.path);\n      if (!payload) {\n        return;\n      }\n      Object.assign(nuxtApp.static.data, payload.data);\n    });\n    onNuxtReady(() => {\n      nuxtApp.hooks.hook(\"link:prefetch\", async (url) => {\n        const { hostname } = new URL(url, window.location.href);\n        if (hostname === window.location.hostname) {\n          await loadPayload(url);\n        }\n      });\n      if (isAppManifestEnabled && navigator.connection?.effectiveType !== \"slow-2g\") {\n        setTimeout(getAppManifest, 1e3);\n      }\n    });\n  }\n});\n","import { defineNuxtPlugin } from \"../nuxt.js\";\nimport { onNuxtReady } from \"../composables/ready.js\";\nimport { useRouter } from \"../composables/router.js\";\nexport default defineNuxtPlugin(() => {\n  const router = useRouter();\n  onNuxtReady(() => {\n    router.beforeResolve(async () => {\n      await new Promise((resolve) => {\n        setTimeout(resolve, 100);\n        requestAnimationFrame(() => {\n          setTimeout(resolve, 0);\n        });\n      });\n    });\n  });\n});\n","import { defineNuxtPlugin } from \"../nuxt.js\";\nimport { getAppManifest } from \"../composables/manifest.js\";\nimport { onNuxtReady } from \"../composables/ready.js\";\nimport { buildAssetsURL } from \"#internal/nuxt/paths\";\nimport { outdatedBuildInterval } from \"#build/nuxt.config.mjs\";\nexport default defineNuxtPlugin((nuxtApp) => {\n  if (import.meta.test) {\n    return;\n  }\n  let timeout;\n  async function getLatestManifest() {\n    const currentManifest = await getAppManifest();\n    if (timeout) {\n      clearTimeout(timeout);\n    }\n    timeout = setTimeout(getLatestManifest, outdatedBuildInterval);\n    try {\n      const meta = await $fetch(buildAssetsURL(\"builds/latest.json\") + `?${Date.now()}`);\n      if (meta.id !== currentManifest.id) {\n        nuxtApp.hooks.callHook(\"app:manifest:update\", meta);\n      }\n    } catch {\n    }\n  }\n  onNuxtReady(() => {\n    timeout = setTimeout(getLatestManifest, outdatedBuildInterval);\n  });\n});\n","import { joinURL } from \"ufo\";\nimport { defineNuxtPlugin, useRuntimeConfig } from \"../nuxt.js\";\nimport { useRouter } from \"../composables/router.js\";\nimport { reloadNuxtApp } from \"../composables/chunk.js\";\nexport default defineNuxtPlugin({\n  name: \"nuxt:chunk-reload\",\n  setup(nuxtApp) {\n    const router = useRouter();\n    const config = useRuntimeConfig();\n    const chunkErrors = /* @__PURE__ */ new Set();\n    router.beforeEach(() => {\n      chunkErrors.clear();\n    });\n    nuxtApp.hook(\"app:chunkError\", ({ error }) => {\n      chunkErrors.add(error);\n    });\n    function reloadAppAtPath(to) {\n      const isHash = \"href\" in to && to.href[0] === \"#\";\n      const path = isHash ? config.app.baseURL + to.href : joinURL(config.app.baseURL, to.fullPath);\n      reloadNuxtApp({ path, persistState: true });\n    }\n    nuxtApp.hook(\"app:manifest:update\", () => {\n      router.beforeResolve(reloadAppAtPath);\n    });\n    router.onError((error, to) => {\n      if (chunkErrors.has(error)) {\n        reloadAppAtPath(to);\n      }\n    });\n  }\n});\n","import { createPinia, setActivePinia } from \"pinia\";\nimport { defineNuxtPlugin } from \"#app\";\nconst plugin = defineNuxtPlugin({\n  name: \"pinia\",\n  setup(nuxtApp) {\n    const pinia = createPinia();\n    nuxtApp.vueApp.use(pinia);\n    setActivePinia(pinia);\n    if (import.meta.server) {\n      nuxtApp.payload.pinia = pinia.state.value;\n    } else if (nuxtApp.payload && nuxtApp.payload.pinia) {\n      pinia.state.value = nuxtApp.payload.pinia;\n    }\n    return {\n      provide: {\n        pinia\n      }\n    };\n  }\n});\nexport default plugin;\n","import { defineNuxtPlugin } from '#app/nuxt'\nimport { LazyWebccBreadcrumb, LazyWebccButton, LazyWebccCancellationStepper, LazyWebccCaptcha, LazyWebccCompanyLogo, LazyWebccDateRangePlusMinusDays, LazyWebccDateRangeSearchFlex, LazyWebccDateRangeSearchSimple, LazyWebccDaterangeSearch, LazyWebccDestinationPicker, LazyWebccExpandable, LazyWebccFieldset, LazyWebccFreeCancellationInfo, LazyWebccHeading, LazyWebccIcon, LazyWebccLink, LazyWebccLoader, LazyWebccLoaderOverlay, LazyWebccMarkdown, LazyWebccModal, LazyWebccPagination, LazyWebccRadioSwitch, LazyWebccScroll, LazyWebccSearch, LazyWebccTooltip, LazyWebccTripPicker, LazyWebccCheckbox, LazyWebccDateRangepicker, LazyWebccDatepicker, LazyWebccForm, LazyWebccFormfield, LazyWebccInput, LazyWebccRadio, LazyWebccSelect, LazyWebccSwitch, LazyBlocks, LazyBlocksBreadcrumbs, LazyBlocksCatalogs, LazyBlocksColumns, LazyBlocksHeading, LazyBlocksHero, LazyBlocksLSODetail, LazyBlocksLSOList, LazyBlocksLSOMedia, LazyBlocksLandingContainer, LazyBlocksLandingH1, LazyBlocksLandingHero, LazyBlocksLandingIFrame, LazyBlocksLandingImageCarouselWithText, LazyBlocksLandingMarkdown, LazyBlocksLandingRecommendations, LazyBlocksLandingTeasers, LazyBlocksLandingTextCarousel, LazyBlocksLandingTextWithImage, LazyBlocksMedia, LazyBlocksMenu, LazyBlocksObjectList, LazyBlocksRichtext, LazyBlocksSearchBar, LazyBlocksStartHeaderTeasers, LazyBlocksStartInspirations, LazyBlocksStartOwnerTeaser, LazyBlocksStartRecommendations, LazyBlocksStartSEOLinks, LazyBlocksStartSeoTeaser, LazyBlocksStartTopDestinations, LazyBlocksStartUSPBar, LazyBlocksStartUSPCards, LazyBlocksStartUSPColumns, LazyBlocksTeaserGrid, LazyBlocksTeaserList, LazyBlocksTextColumns, LazyBlocksUSPBarBlock, LazyBlocksUSPCardsBlock, LazyBlocksUSPColumnsBlock, LazyBlocksUSPCorona, LazyErrorContent, LazyErrorFull, LazyPageBookmarks, LazyPageContent, LazyPageDetails, LazyPageEmails, LazyPageMyrent, LazyPageNewsletter, LazyPageReviews, LazyPageSearch, LazyPageStart, LazyPageUnknown, LazyLiveness, LazyReadiness, LazyStartup } from '#components'\nconst lazyGlobalComponents = [\n  [\"WebccBreadcrumb\", LazyWebccBreadcrumb],\n[\"WebccButton\", LazyWebccButton],\n[\"WebccCancellationStepper\", LazyWebccCancellationStepper],\n[\"WebccCaptcha\", LazyWebccCaptcha],\n[\"WebccCompanyLogo\", LazyWebccCompanyLogo],\n[\"WebccDateRangePlusMinusDays\", LazyWebccDateRangePlusMinusDays],\n[\"WebccDateRangeSearchFlex\", LazyWebccDateRangeSearchFlex],\n[\"WebccDateRangeSearchSimple\", LazyWebccDateRangeSearchSimple],\n[\"WebccDaterangeSearch\", LazyWebccDaterangeSearch],\n[\"WebccDestinationPicker\", LazyWebccDestinationPicker],\n[\"WebccExpandable\", LazyWebccExpandable],\n[\"WebccFieldset\", LazyWebccFieldset],\n[\"WebccFreeCancellationInfo\", LazyWebccFreeCancellationInfo],\n[\"WebccHeading\", LazyWebccHeading],\n[\"WebccIcon\", LazyWebccIcon],\n[\"WebccLink\", LazyWebccLink],\n[\"WebccLoader\", LazyWebccLoader],\n[\"WebccLoaderOverlay\", LazyWebccLoaderOverlay],\n[\"WebccMarkdown\", LazyWebccMarkdown],\n[\"WebccModal\", LazyWebccModal],\n[\"WebccPagination\", LazyWebccPagination],\n[\"WebccRadioSwitch\", LazyWebccRadioSwitch],\n[\"WebccScroll\", LazyWebccScroll],\n[\"WebccSearch\", LazyWebccSearch],\n[\"WebccTooltip\", LazyWebccTooltip],\n[\"WebccTripPicker\", LazyWebccTripPicker],\n[\"WebccCheckbox\", LazyWebccCheckbox],\n[\"WebccDateRangepicker\", LazyWebccDateRangepicker],\n[\"WebccDatepicker\", LazyWebccDatepicker],\n[\"WebccForm\", LazyWebccForm],\n[\"WebccFormfield\", LazyWebccFormfield],\n[\"WebccInput\", LazyWebccInput],\n[\"WebccRadio\", LazyWebccRadio],\n[\"WebccSelect\", LazyWebccSelect],\n[\"WebccSwitch\", LazyWebccSwitch],\n[\"Blocks\", LazyBlocks],\n[\"BlocksBreadcrumbs\", LazyBlocksBreadcrumbs],\n[\"BlocksCatalogs\", LazyBlocksCatalogs],\n[\"BlocksColumns\", LazyBlocksColumns],\n[\"BlocksHeading\", LazyBlocksHeading],\n[\"BlocksHero\", LazyBlocksHero],\n[\"BlocksLSODetail\", LazyBlocksLSODetail],\n[\"BlocksLSOList\", LazyBlocksLSOList],\n[\"BlocksLSOMedia\", LazyBlocksLSOMedia],\n[\"BlocksLandingContainer\", LazyBlocksLandingContainer],\n[\"BlocksLandingH1\", LazyBlocksLandingH1],\n[\"BlocksLandingHero\", LazyBlocksLandingHero],\n[\"BlocksLandingIFrame\", LazyBlocksLandingIFrame],\n[\"BlocksLandingImageCarouselWithText\", LazyBlocksLandingImageCarouselWithText],\n[\"BlocksLandingMarkdown\", LazyBlocksLandingMarkdown],\n[\"BlocksLandingRecommendations\", LazyBlocksLandingRecommendations],\n[\"BlocksLandingTeasers\", LazyBlocksLandingTeasers],\n[\"BlocksLandingTextCarousel\", LazyBlocksLandingTextCarousel],\n[\"BlocksLandingTextWithImage\", LazyBlocksLandingTextWithImage],\n[\"BlocksMedia\", LazyBlocksMedia],\n[\"BlocksMenu\", LazyBlocksMenu],\n[\"BlocksObjectList\", LazyBlocksObjectList],\n[\"BlocksRichtext\", LazyBlocksRichtext],\n[\"BlocksSearchBar\", LazyBlocksSearchBar],\n[\"BlocksStartHeaderTeasers\", LazyBlocksStartHeaderTeasers],\n[\"BlocksStartInspirations\", LazyBlocksStartInspirations],\n[\"BlocksStartOwnerTeaser\", LazyBlocksStartOwnerTeaser],\n[\"BlocksStartRecommendations\", LazyBlocksStartRecommendations],\n[\"BlocksStartSEOLinks\", LazyBlocksStartSEOLinks],\n[\"BlocksStartSeoTeaser\", LazyBlocksStartSeoTeaser],\n[\"BlocksStartTopDestinations\", LazyBlocksStartTopDestinations],\n[\"BlocksStartUSPBar\", LazyBlocksStartUSPBar],\n[\"BlocksStartUSPCards\", LazyBlocksStartUSPCards],\n[\"BlocksStartUSPColumns\", LazyBlocksStartUSPColumns],\n[\"BlocksTeaserGrid\", LazyBlocksTeaserGrid],\n[\"BlocksTeaserList\", LazyBlocksTeaserList],\n[\"BlocksTextColumns\", LazyBlocksTextColumns],\n[\"BlocksUSPBarBlock\", LazyBlocksUSPBarBlock],\n[\"BlocksUSPCardsBlock\", LazyBlocksUSPCardsBlock],\n[\"BlocksUSPColumnsBlock\", LazyBlocksUSPColumnsBlock],\n[\"BlocksUSPCorona\", LazyBlocksUSPCorona],\n[\"ErrorContent\", LazyErrorContent],\n[\"ErrorFull\", LazyErrorFull],\n[\"PageBookmarks\", LazyPageBookmarks],\n[\"PageContent\", LazyPageContent],\n[\"PageDetails\", LazyPageDetails],\n[\"PageEmails\", LazyPageEmails],\n[\"PageMyrent\", LazyPageMyrent],\n[\"PageNewsletter\", LazyPageNewsletter],\n[\"PageReviews\", LazyPageReviews],\n[\"PageSearch\", LazyPageSearch],\n[\"PageStart\", LazyPageStart],\n[\"PageUnknown\", LazyPageUnknown],\n[\"Liveness\", LazyLiveness],\n[\"Readiness\", LazyReadiness],\n[\"Startup\", LazyStartup],\n  \n]\n\nexport default defineNuxtPlugin({\n  name: 'nuxt:global-components',\n  setup (nuxtApp) {\n    for (const [name, component] of lazyGlobalComponents) {\n      nuxtApp.vueApp.component(name, component)\n      nuxtApp.vueApp.component('Lazy' + name, component)\n    }\n  }\n})\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nimport { reactive, computed, ref, watch, onUnmounted, provide, inject, onMounted, watchEffect, defineComponent, toRefs, nextTick, openBlock, createElementBlock, normalizeClass, createVNode, Transition, withCtx, mergeProps, renderSlot, createTextVNode, toDisplayString, createElementVNode, createCommentVNode, unref, createBlock, resolveDynamicComponent, normalizeProps, Fragment, renderList, normalizeStyle, withKeys, withDirectives, toRef, resolveComponent, resolveDirective, toHandlers, withModifiers, isRef, guardReactiveProps } from \"vue\";\nimport { createPopper } from \"@popperjs/core\";\nvar commonjsGlobal = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nfunction getDefaultExportFromCjs(x) {\n  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nvar objectProto$g = Object.prototype;\nvar hasOwnProperty$d = objectProto$g.hasOwnProperty;\nfunction baseHas$1(object, key) {\n  return object != null && hasOwnProperty$d.call(object, key);\n}\nvar _baseHas = baseHas$1;\nvar isArray$c = Array.isArray;\nvar isArray_1 = isArray$c;\nvar freeGlobal$1 = typeof commonjsGlobal == \"object\" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\nvar _freeGlobal = freeGlobal$1;\nvar freeGlobal = _freeGlobal;\nvar freeSelf = typeof self == \"object\" && self && self.Object === Object && self;\nvar root$8 = freeGlobal || freeSelf || Function(\"return this\")();\nvar _root = root$8;\nvar root$7 = _root;\nvar Symbol$5 = root$7.Symbol;\nvar _Symbol = Symbol$5;\nvar Symbol$4 = _Symbol;\nvar objectProto$f = Object.prototype;\nvar hasOwnProperty$c = objectProto$f.hasOwnProperty;\nvar nativeObjectToString$1 = objectProto$f.toString;\nvar symToStringTag$1 = Symbol$4 ? Symbol$4.toStringTag : void 0;\nfunction getRawTag$1(value) {\n  var isOwn = hasOwnProperty$c.call(value, symToStringTag$1), tag = value[symToStringTag$1];\n  try {\n    value[symToStringTag$1] = void 0;\n    var unmasked = true;\n  } catch (e) {\n  }\n  var result = nativeObjectToString$1.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag$1] = tag;\n    } else {\n      delete value[symToStringTag$1];\n    }\n  }\n  return result;\n}\nvar _getRawTag = getRawTag$1;\nvar objectProto$e = Object.prototype;\nvar nativeObjectToString = objectProto$e.toString;\nfunction objectToString$1(value) {\n  return nativeObjectToString.call(value);\n}\nvar _objectToString = objectToString$1;\nvar Symbol$3 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString;\nvar nullTag = \"[object Null]\", undefinedTag = \"[object Undefined]\";\nvar symToStringTag = Symbol$3 ? Symbol$3.toStringTag : void 0;\nfunction baseGetTag$a(value) {\n  if (value == null) {\n    return value === void 0 ? undefinedTag : nullTag;\n  }\n  return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n}\nvar _baseGetTag = baseGetTag$a;\nfunction isObjectLike$b(value) {\n  return value != null && typeof value == \"object\";\n}\nvar isObjectLike_1 = isObjectLike$b;\nvar baseGetTag$9 = _baseGetTag, isObjectLike$a = isObjectLike_1;\nvar symbolTag$1 = \"[object Symbol]\";\nfunction isSymbol$3(value) {\n  return typeof value == \"symbol\" || isObjectLike$a(value) && baseGetTag$9(value) == symbolTag$1;\n}\nvar isSymbol_1 = isSymbol$3;\nvar isArray$b = isArray_1, isSymbol$2 = isSymbol_1;\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/, reIsPlainProp = /^\\w*$/;\nfunction isKey$3(value, object) {\n  if (isArray$b(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == \"number\" || type == \"symbol\" || type == \"boolean\" || value == null || isSymbol$2(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);\n}\nvar _isKey = isKey$3;\nfunction isObject$a(value) {\n  var type = typeof value;\n  return value != null && (type == \"object\" || type == \"function\");\n}\nvar isObject_1 = isObject$a;\nvar baseGetTag$8 = _baseGetTag, isObject$9 = isObject_1;\nvar asyncTag = \"[object AsyncFunction]\", funcTag$1 = \"[object Function]\", genTag = \"[object GeneratorFunction]\", proxyTag = \"[object Proxy]\";\nfunction isFunction$3(value) {\n  if (!isObject$9(value)) {\n    return false;\n  }\n  var tag = baseGetTag$8(value);\n  return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\nvar isFunction_1 = isFunction$3;\nvar root$6 = _root;\nvar coreJsData$1 = root$6[\"__core-js_shared__\"];\nvar _coreJsData = coreJsData$1;\nvar coreJsData = _coreJsData;\nvar maskSrcKey = function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || \"\");\n  return uid ? \"Symbol(src)_1.\" + uid : \"\";\n}();\nfunction isMasked$1(func) {\n  return !!maskSrcKey && maskSrcKey in func;\n}\nvar _isMasked = isMasked$1;\nvar funcProto$2 = Function.prototype;\nvar funcToString$2 = funcProto$2.toString;\nfunction toSource$2(func) {\n  if (func != null) {\n    try {\n      return funcToString$2.call(func);\n    } catch (e) {\n    }\n    try {\n      return func + \"\";\n    } catch (e) {\n    }\n  }\n  return \"\";\n}\nvar _toSource = toSource$2;\nvar isFunction$2 = isFunction_1, isMasked = _isMasked, isObject$8 = isObject_1, toSource$1 = _toSource;\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\nvar funcProto$1 = Function.prototype, objectProto$d = Object.prototype;\nvar funcToString$1 = funcProto$1.toString;\nvar hasOwnProperty$b = objectProto$d.hasOwnProperty;\nvar reIsNative = RegExp(\n  \"^\" + funcToString$1.call(hasOwnProperty$b).replace(reRegExpChar, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"\n);\nfunction baseIsNative$1(value) {\n  if (!isObject$8(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource$1(value));\n}\nvar _baseIsNative = baseIsNative$1;\nfunction getValue$1(object, key) {\n  return object == null ? void 0 : object[key];\n}\nvar _getValue = getValue$1;\nvar baseIsNative = _baseIsNative, getValue = _getValue;\nfunction getNative$7(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : void 0;\n}\nvar _getNative = getNative$7;\nvar getNative$6 = _getNative;\nvar nativeCreate$4 = getNative$6(Object, \"create\");\nvar _nativeCreate = nativeCreate$4;\nvar nativeCreate$3 = _nativeCreate;\nfunction hashClear$1() {\n  this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {};\n  this.size = 0;\n}\nvar _hashClear = hashClear$1;\nfunction hashDelete$1(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\nvar _hashDelete = hashDelete$1;\nvar nativeCreate$2 = _nativeCreate;\nvar HASH_UNDEFINED$2 = \"__lodash_hash_undefined__\";\nvar objectProto$c = Object.prototype;\nvar hasOwnProperty$a = objectProto$c.hasOwnProperty;\nfunction hashGet$1(key) {\n  var data2 = this.__data__;\n  if (nativeCreate$2) {\n    var result = data2[key];\n    return result === HASH_UNDEFINED$2 ? void 0 : result;\n  }\n  return hasOwnProperty$a.call(data2, key) ? data2[key] : void 0;\n}\nvar _hashGet = hashGet$1;\nvar nativeCreate$1 = _nativeCreate;\nvar objectProto$b = Object.prototype;\nvar hasOwnProperty$9 = objectProto$b.hasOwnProperty;\nfunction hashHas$1(key) {\n  var data2 = this.__data__;\n  return nativeCreate$1 ? data2[key] !== void 0 : hasOwnProperty$9.call(data2, key);\n}\nvar _hashHas = hashHas$1;\nvar nativeCreate = _nativeCreate;\nvar HASH_UNDEFINED$1 = \"__lodash_hash_undefined__\";\nfunction hashSet$1(key, value) {\n  var data2 = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data2[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED$1 : value;\n  return this;\n}\nvar _hashSet = hashSet$1;\nvar hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet;\nfunction Hash$1(entries) {\n  var index2 = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index2 < length) {\n    var entry = entries[index2];\n    this.set(entry[0], entry[1]);\n  }\n}\nHash$1.prototype.clear = hashClear;\nHash$1.prototype[\"delete\"] = hashDelete;\nHash$1.prototype.get = hashGet;\nHash$1.prototype.has = hashHas;\nHash$1.prototype.set = hashSet;\nvar _Hash = Hash$1;\nfunction listCacheClear$1() {\n  this.__data__ = [];\n  this.size = 0;\n}\nvar _listCacheClear = listCacheClear$1;\nfunction eq$6(value, other) {\n  return value === other || value !== value && other !== other;\n}\nvar eq_1 = eq$6;\nvar eq$5 = eq_1;\nfunction assocIndexOf$4(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq$5(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\nvar _assocIndexOf = assocIndexOf$4;\nvar assocIndexOf$3 = _assocIndexOf;\nvar arrayProto = Array.prototype;\nvar splice = arrayProto.splice;\nfunction listCacheDelete$1(key) {\n  var data2 = this.__data__, index2 = assocIndexOf$3(data2, key);\n  if (index2 < 0) {\n    return false;\n  }\n  var lastIndex = data2.length - 1;\n  if (index2 == lastIndex) {\n    data2.pop();\n  } else {\n    splice.call(data2, index2, 1);\n  }\n  --this.size;\n  return true;\n}\nvar _listCacheDelete = listCacheDelete$1;\nvar assocIndexOf$2 = _assocIndexOf;\nfunction listCacheGet$1(key) {\n  var data2 = this.__data__, index2 = assocIndexOf$2(data2, key);\n  return index2 < 0 ? void 0 : data2[index2][1];\n}\nvar _listCacheGet = listCacheGet$1;\nvar assocIndexOf$1 = _assocIndexOf;\nfunction listCacheHas$1(key) {\n  return assocIndexOf$1(this.__data__, key) > -1;\n}\nvar _listCacheHas = listCacheHas$1;\nvar assocIndexOf = _assocIndexOf;\nfunction listCacheSet$1(key, value) {\n  var data2 = this.__data__, index2 = assocIndexOf(data2, key);\n  if (index2 < 0) {\n    ++this.size;\n    data2.push([key, value]);\n  } else {\n    data2[index2][1] = value;\n  }\n  return this;\n}\nvar _listCacheSet = listCacheSet$1;\nvar listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet;\nfunction ListCache$4(entries) {\n  var index2 = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index2 < length) {\n    var entry = entries[index2];\n    this.set(entry[0], entry[1]);\n  }\n}\nListCache$4.prototype.clear = listCacheClear;\nListCache$4.prototype[\"delete\"] = listCacheDelete;\nListCache$4.prototype.get = listCacheGet;\nListCache$4.prototype.has = listCacheHas;\nListCache$4.prototype.set = listCacheSet;\nvar _ListCache = ListCache$4;\nvar getNative$5 = _getNative, root$5 = _root;\nvar Map$3 = getNative$5(root$5, \"Map\");\nvar _Map = Map$3;\nvar Hash = _Hash, ListCache$3 = _ListCache, Map$2 = _Map;\nfunction mapCacheClear$1() {\n  this.size = 0;\n  this.__data__ = {\n    \"hash\": new Hash(),\n    \"map\": new (Map$2 || ListCache$3)(),\n    \"string\": new Hash()\n  };\n}\nvar _mapCacheClear = mapCacheClear$1;\nfunction isKeyable$1(value) {\n  var type = typeof value;\n  return type == \"string\" || type == \"number\" || type == \"symbol\" || type == \"boolean\" ? value !== \"__proto__\" : value === null;\n}\nvar _isKeyable = isKeyable$1;\nvar isKeyable = _isKeyable;\nfunction getMapData$4(map, key) {\n  var data2 = map.__data__;\n  return isKeyable(key) ? data2[typeof key == \"string\" ? \"string\" : \"hash\"] : data2.map;\n}\nvar _getMapData = getMapData$4;\nvar getMapData$3 = _getMapData;\nfunction mapCacheDelete$1(key) {\n  var result = getMapData$3(this, key)[\"delete\"](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\nvar _mapCacheDelete = mapCacheDelete$1;\nvar getMapData$2 = _getMapData;\nfunction mapCacheGet$1(key) {\n  return getMapData$2(this, key).get(key);\n}\nvar _mapCacheGet = mapCacheGet$1;\nvar getMapData$1 = _getMapData;\nfunction mapCacheHas$1(key) {\n  return getMapData$1(this, key).has(key);\n}\nvar _mapCacheHas = mapCacheHas$1;\nvar getMapData = _getMapData;\nfunction mapCacheSet$1(key, value) {\n  var data2 = getMapData(this, key), size = data2.size;\n  data2.set(key, value);\n  this.size += data2.size == size ? 0 : 1;\n  return this;\n}\nvar _mapCacheSet = mapCacheSet$1;\nvar mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet;\nfunction MapCache$3(entries) {\n  var index2 = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index2 < length) {\n    var entry = entries[index2];\n    this.set(entry[0], entry[1]);\n  }\n}\nMapCache$3.prototype.clear = mapCacheClear;\nMapCache$3.prototype[\"delete\"] = mapCacheDelete;\nMapCache$3.prototype.get = mapCacheGet;\nMapCache$3.prototype.has = mapCacheHas;\nMapCache$3.prototype.set = mapCacheSet;\nvar _MapCache = MapCache$3;\nvar MapCache$2 = _MapCache;\nvar FUNC_ERROR_TEXT = \"Expected a function\";\nfunction memoize$1(func, resolver) {\n  if (typeof func != \"function\" || resolver != null && typeof resolver != \"function\") {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize$1.Cache || MapCache$2)();\n  return memoized;\n}\nmemoize$1.Cache = MapCache$2;\nvar memoize_1 = memoize$1;\nvar memoize = memoize_1;\nvar MAX_MEMOIZE_SIZE = 500;\nfunction memoizeCapped$1(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n  var cache = result.cache;\n  return result;\n}\nvar _memoizeCapped = memoizeCapped$1;\nvar memoizeCapped = _memoizeCapped;\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g;\nvar stringToPath$1 = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46) {\n    result.push(\"\");\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, \"$1\") : number || match);\n  });\n  return result;\n});\nvar _stringToPath = stringToPath$1;\nfunction arrayMap$1(array, iteratee) {\n  var index2 = -1, length = array == null ? 0 : array.length, result = Array(length);\n  while (++index2 < length) {\n    result[index2] = iteratee(array[index2], index2, array);\n  }\n  return result;\n}\nvar _arrayMap = arrayMap$1;\nvar Symbol$2 = _Symbol, arrayMap = _arrayMap, isArray$a = isArray_1, isSymbol$1 = isSymbol_1;\nvar INFINITY$1 = 1 / 0;\nvar symbolProto$1 = Symbol$2 ? Symbol$2.prototype : void 0, symbolToString = symbolProto$1 ? symbolProto$1.toString : void 0;\nfunction baseToString$1(value) {\n  if (typeof value == \"string\") {\n    return value;\n  }\n  if (isArray$a(value)) {\n    return arrayMap(value, baseToString$1) + \"\";\n  }\n  if (isSymbol$1(value)) {\n    return symbolToString ? symbolToString.call(value) : \"\";\n  }\n  var result = value + \"\";\n  return result == \"0\" && 1 / value == -INFINITY$1 ? \"-0\" : result;\n}\nvar _baseToString = baseToString$1;\nvar baseToString = _baseToString;\nfunction toString$1(value) {\n  return value == null ? \"\" : baseToString(value);\n}\nvar toString_1 = toString$1;\nvar isArray$9 = isArray_1, isKey$2 = _isKey, stringToPath = _stringToPath, toString = toString_1;\nfunction castPath$2(value, object) {\n  if (isArray$9(value)) {\n    return value;\n  }\n  return isKey$2(value, object) ? [value] : stringToPath(toString(value));\n}\nvar _castPath = castPath$2;\nvar baseGetTag$7 = _baseGetTag, isObjectLike$9 = isObjectLike_1;\nvar argsTag$2 = \"[object Arguments]\";\nfunction baseIsArguments$1(value) {\n  return isObjectLike$9(value) && baseGetTag$7(value) == argsTag$2;\n}\nvar _baseIsArguments = baseIsArguments$1;\nvar baseIsArguments = _baseIsArguments, isObjectLike$8 = isObjectLike_1;\nvar objectProto$a = Object.prototype;\nvar hasOwnProperty$8 = objectProto$a.hasOwnProperty;\nvar propertyIsEnumerable$1 = objectProto$a.propertyIsEnumerable;\nvar isArguments$3 = baseIsArguments(function() {\n  return arguments;\n}()) ? baseIsArguments : function(value) {\n  return isObjectLike$8(value) && hasOwnProperty$8.call(value, \"callee\") && !propertyIsEnumerable$1.call(value, \"callee\");\n};\nvar isArguments_1 = isArguments$3;\nvar MAX_SAFE_INTEGER$1 = 9007199254740991;\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\nfunction isIndex$3(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER$1 : length;\n  return !!length && (type == \"number\" || type != \"symbol\" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);\n}\nvar _isIndex = isIndex$3;\nvar MAX_SAFE_INTEGER = 9007199254740991;\nfunction isLength$3(value) {\n  return typeof value == \"number\" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\nvar isLength_1 = isLength$3;\nvar isSymbol = isSymbol_1;\nvar INFINITY = 1 / 0;\nfunction toKey$4(value) {\n  if (typeof value == \"string\" || isSymbol(value)) {\n    return value;\n  }\n  var result = value + \"\";\n  return result == \"0\" && 1 / value == -INFINITY ? \"-0\" : result;\n}\nvar _toKey = toKey$4;\nvar castPath$1 = _castPath, isArguments$2 = isArguments_1, isArray$8 = isArray_1, isIndex$2 = _isIndex, isLength$2 = isLength_1, toKey$3 = _toKey;\nfunction hasPath$2(object, path, hasFunc) {\n  path = castPath$1(path, object);\n  var index2 = -1, length = path.length, result = false;\n  while (++index2 < length) {\n    var key = toKey$3(path[index2]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index2 != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength$2(length) && isIndex$2(key, length) && (isArray$8(object) || isArguments$2(object));\n}\nvar _hasPath = hasPath$2;\nvar baseHas = _baseHas, hasPath$1 = _hasPath;\nfunction has$1(object, path) {\n  return object != null && hasPath$1(object, path, baseHas);\n}\nvar has_1 = has$1;\nvar baseGetTag$6 = _baseGetTag, isObjectLike$7 = isObjectLike_1;\nvar dateTag$2 = \"[object Date]\";\nfunction baseIsDate$1(value) {\n  return isObjectLike$7(value) && baseGetTag$6(value) == dateTag$2;\n}\nvar _baseIsDate = baseIsDate$1;\nfunction baseUnary$2(func) {\n  return function(value) {\n    return func(value);\n  };\n}\nvar _baseUnary = baseUnary$2;\nvar _nodeUtilExports = {};\nvar _nodeUtil = {\n  get exports() {\n    return _nodeUtilExports;\n  },\n  set exports(v) {\n    _nodeUtilExports = v;\n  }\n};\n(function(module, exports) {\n  var freeGlobal2 = _freeGlobal;\n  var freeExports = exports && !exports.nodeType && exports;\n  var freeModule = freeExports && true && module && !module.nodeType && module;\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n  var freeProcess = moduleExports && freeGlobal2.process;\n  var nodeUtil2 = function() {\n    try {\n      var types = freeModule && freeModule.require && freeModule.require(\"util\").types;\n      if (types) {\n        return types;\n      }\n      return freeProcess && freeProcess.binding && freeProcess.binding(\"util\");\n    } catch (e) {\n    }\n  }();\n  module.exports = nodeUtil2;\n})(_nodeUtil, _nodeUtilExports);\nvar baseIsDate = _baseIsDate, baseUnary$1 = _baseUnary, nodeUtil$1 = _nodeUtilExports;\nvar nodeIsDate = nodeUtil$1 && nodeUtil$1.isDate;\nvar isDate$1 = nodeIsDate ? baseUnary$1(nodeIsDate) : baseIsDate;\nvar isDate_1 = isDate$1;\nvar baseGetTag$5 = _baseGetTag, isArray$7 = isArray_1, isObjectLike$6 = isObjectLike_1;\nvar stringTag$2 = \"[object String]\";\nfunction isString(value) {\n  return typeof value == \"string\" || !isArray$7(value) && isObjectLike$6(value) && baseGetTag$5(value) == stringTag$2;\n}\nvar isString_1 = isString;\nfunction arraySome$2(array, predicate) {\n  var index2 = -1, length = array == null ? 0 : array.length;\n  while (++index2 < length) {\n    if (predicate(array[index2], index2, array)) {\n      return true;\n    }\n  }\n  return false;\n}\nvar _arraySome = arraySome$2;\nvar ListCache$2 = _ListCache;\nfunction stackClear$1() {\n  this.__data__ = new ListCache$2();\n  this.size = 0;\n}\nvar _stackClear = stackClear$1;\nfunction stackDelete$1(key) {\n  var data2 = this.__data__, result = data2[\"delete\"](key);\n  this.size = data2.size;\n  return result;\n}\nvar _stackDelete = stackDelete$1;\nfunction stackGet$1(key) {\n  return this.__data__.get(key);\n}\nvar _stackGet = stackGet$1;\nfunction stackHas$1(key) {\n  return this.__data__.has(key);\n}\nvar _stackHas = stackHas$1;\nvar ListCache$1 = _ListCache, Map$1 = _Map, MapCache$1 = _MapCache;\nvar LARGE_ARRAY_SIZE = 200;\nfunction stackSet$1(key, value) {\n  var data2 = this.__data__;\n  if (data2 instanceof ListCache$1) {\n    var pairs = data2.__data__;\n    if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {\n      pairs.push([key, value]);\n      this.size = ++data2.size;\n      return this;\n    }\n    data2 = this.__data__ = new MapCache$1(pairs);\n  }\n  data2.set(key, value);\n  this.size = data2.size;\n  return this;\n}\nvar _stackSet = stackSet$1;\nvar ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet;\nfunction Stack$3(entries) {\n  var data2 = this.__data__ = new ListCache(entries);\n  this.size = data2.size;\n}\nStack$3.prototype.clear = stackClear;\nStack$3.prototype[\"delete\"] = stackDelete;\nStack$3.prototype.get = stackGet;\nStack$3.prototype.has = stackHas;\nStack$3.prototype.set = stackSet;\nvar _Stack = Stack$3;\nvar HASH_UNDEFINED = \"__lodash_hash_undefined__\";\nfunction setCacheAdd$1(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\nvar _setCacheAdd = setCacheAdd$1;\nfunction setCacheHas$1(value) {\n  return this.__data__.has(value);\n}\nvar _setCacheHas = setCacheHas$1;\nvar MapCache = _MapCache, setCacheAdd = _setCacheAdd, setCacheHas = _setCacheHas;\nfunction SetCache$1(values) {\n  var index2 = -1, length = values == null ? 0 : values.length;\n  this.__data__ = new MapCache();\n  while (++index2 < length) {\n    this.add(values[index2]);\n  }\n}\nSetCache$1.prototype.add = SetCache$1.prototype.push = setCacheAdd;\nSetCache$1.prototype.has = setCacheHas;\nvar _SetCache = SetCache$1;\nfunction cacheHas$1(cache, key) {\n  return cache.has(key);\n}\nvar _cacheHas = cacheHas$1;\nvar SetCache = _SetCache, arraySome$1 = _arraySome, cacheHas = _cacheHas;\nvar COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2;\nfunction equalArrays$2(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length;\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\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 index2 = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0;\n  stack.set(array, other);\n  stack.set(other, array);\n  while (++index2 < arrLength) {\n    var arrValue = array[index2], othValue = other[index2];\n    if (customizer) {\n      var compared = isPartial ? customizer(othValue, arrValue, index2, other, array, stack) : customizer(arrValue, othValue, index2, array, other, stack);\n    }\n    if (compared !== void 0) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    if (seen) {\n      if (!arraySome$1(other, function(othValue2, othIndex) {\n        if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {\n          return seen.push(othIndex);\n        }\n      })) {\n        result = false;\n        break;\n      }\n    } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n      result = false;\n      break;\n    }\n  }\n  stack[\"delete\"](array);\n  stack[\"delete\"](other);\n  return result;\n}\nvar _equalArrays = equalArrays$2;\nvar root$4 = _root;\nvar Uint8Array$2 = root$4.Uint8Array;\nvar _Uint8Array = Uint8Array$2;\nfunction mapToArray$1(map) {\n  var index2 = -1, result = Array(map.size);\n  map.forEach(function(value, key) {\n    result[++index2] = [key, value];\n  });\n  return result;\n}\nvar _mapToArray = mapToArray$1;\nfunction setToArray$1(set) {\n  var index2 = -1, result = Array(set.size);\n  set.forEach(function(value) {\n    result[++index2] = value;\n  });\n  return result;\n}\nvar _setToArray = setToArray$1;\nvar Symbol$1 = _Symbol, Uint8Array$1 = _Uint8Array, eq$4 = eq_1, equalArrays$1 = _equalArrays, mapToArray = _mapToArray, setToArray = _setToArray;\nvar COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2;\nvar boolTag$2 = \"[object Boolean]\", dateTag$1 = \"[object Date]\", errorTag$1 = \"[object Error]\", mapTag$2 = \"[object Map]\", numberTag$2 = \"[object Number]\", regexpTag$1 = \"[object RegExp]\", setTag$2 = \"[object Set]\", stringTag$1 = \"[object String]\", symbolTag = \"[object Symbol]\";\nvar arrayBufferTag$1 = \"[object ArrayBuffer]\", dataViewTag$2 = \"[object DataView]\";\nvar symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;\nfunction equalByTag$1(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag$2:\n      if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n    case arrayBufferTag$1:\n      if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) {\n        return false;\n      }\n      return true;\n    case boolTag$2:\n    case dateTag$1:\n    case numberTag$2:\n      return eq$4(+object, +other);\n    case errorTag$1:\n      return object.name == other.name && object.message == other.message;\n    case regexpTag$1:\n    case stringTag$1:\n      return object == other + \"\";\n    case mapTag$2:\n      var convert = mapToArray;\n    case setTag$2:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4;\n      convert || (convert = setToArray);\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG$2;\n      stack.set(object, other);\n      var result = equalArrays$1(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack[\"delete\"](object);\n      return result;\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\nvar _equalByTag = equalByTag$1;\nfunction arrayPush$1(array, values) {\n  var index2 = -1, length = values.length, offset = array.length;\n  while (++index2 < length) {\n    array[offset + index2] = values[index2];\n  }\n  return array;\n}\nvar _arrayPush = arrayPush$1;\nvar arrayPush = _arrayPush, isArray$6 = isArray_1;\nfunction baseGetAllKeys$1(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray$6(object) ? result : arrayPush(result, symbolsFunc(object));\n}\nvar _baseGetAllKeys = baseGetAllKeys$1;\nfunction arrayFilter$1(array, predicate) {\n  var index2 = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];\n  while (++index2 < length) {\n    var value = array[index2];\n    if (predicate(value, index2, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\nvar _arrayFilter = arrayFilter$1;\nfunction stubArray$1() {\n  return [];\n}\nvar stubArray_1 = stubArray$1;\nvar arrayFilter = _arrayFilter, stubArray = stubArray_1;\nvar objectProto$9 = Object.prototype;\nvar propertyIsEnumerable = objectProto$9.propertyIsEnumerable;\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\nvar getSymbols$1 = !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};\nvar _getSymbols = getSymbols$1;\nfunction baseTimes$1(n, iteratee) {\n  var index2 = -1, result = Array(n);\n  while (++index2 < n) {\n    result[index2] = iteratee(index2);\n  }\n  return result;\n}\nvar _baseTimes = baseTimes$1;\nvar isBufferExports = {};\nvar isBuffer$3 = {\n  get exports() {\n    return isBufferExports;\n  },\n  set exports(v) {\n    isBufferExports = v;\n  }\n};\nfunction stubFalse() {\n  return false;\n}\nvar stubFalse_1 = stubFalse;\n(function(module, exports) {\n  var root2 = _root, stubFalse2 = stubFalse_1;\n  var freeExports = exports && !exports.nodeType && exports;\n  var freeModule = freeExports && true && module && !module.nodeType && module;\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n  var Buffer2 = moduleExports ? root2.Buffer : void 0;\n  var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;\n  var isBuffer2 = nativeIsBuffer || stubFalse2;\n  module.exports = isBuffer2;\n})(isBuffer$3, isBufferExports);\nvar baseGetTag$4 = _baseGetTag, isLength$1 = isLength_1, isObjectLike$5 = isObjectLike_1;\nvar argsTag$1 = \"[object Arguments]\", arrayTag$1 = \"[object Array]\", boolTag$1 = \"[object Boolean]\", dateTag = \"[object Date]\", errorTag = \"[object Error]\", funcTag = \"[object Function]\", mapTag$1 = \"[object Map]\", numberTag$1 = \"[object Number]\", objectTag$3 = \"[object Object]\", regexpTag = \"[object RegExp]\", setTag$1 = \"[object Set]\", stringTag = \"[object String]\", weakMapTag$1 = \"[object WeakMap]\";\nvar arrayBufferTag = \"[object ArrayBuffer]\", dataViewTag$1 = \"[object DataView]\", float32Tag = \"[object Float32Array]\", float64Tag = \"[object Float64Array]\", int8Tag = \"[object Int8Array]\", int16Tag = \"[object Int16Array]\", int32Tag = \"[object Int32Array]\", uint8Tag = \"[object Uint8Array]\", uint8ClampedTag = \"[object Uint8ClampedArray]\", uint16Tag = \"[object Uint16Array]\", uint32Tag = \"[object Uint32Array]\";\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag$1] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag$1] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag] = typedArrayTags[setTag$1] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag$1] = false;\nfunction baseIsTypedArray$1(value) {\n  return isObjectLike$5(value) && isLength$1(value.length) && !!typedArrayTags[baseGetTag$4(value)];\n}\nvar _baseIsTypedArray = baseIsTypedArray$1;\nvar baseIsTypedArray = _baseIsTypedArray, baseUnary = _baseUnary, nodeUtil = _nodeUtilExports;\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\nvar isTypedArray$3 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\nvar isTypedArray_1 = isTypedArray$3;\nvar baseTimes = _baseTimes, isArguments$1 = isArguments_1, isArray$5 = isArray_1, isBuffer$2 = isBufferExports, isIndex$1 = _isIndex, isTypedArray$2 = isTypedArray_1;\nvar objectProto$8 = Object.prototype;\nvar hasOwnProperty$7 = objectProto$8.hasOwnProperty;\nfunction arrayLikeKeys$2(value, inherited) {\n  var isArr = isArray$5(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$2(value), isType = !isArr && !isArg && !isBuff && isTypedArray$2(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;\n  for (var key in value) {\n    if ((inherited || hasOwnProperty$7.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.\n    (key == \"length\" || // Node.js 0.10 has enumerable non-index properties on buffers.\n    isBuff && (key == \"offset\" || key == \"parent\") || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n    isType && (key == \"buffer\" || key == \"byteLength\" || key == \"byteOffset\") || // Skip index properties.\n    isIndex$1(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nvar _arrayLikeKeys = arrayLikeKeys$2;\nvar objectProto$7 = Object.prototype;\nfunction isPrototype$3(value) {\n  var Ctor = value && value.constructor, proto = typeof Ctor == \"function\" && Ctor.prototype || objectProto$7;\n  return value === proto;\n}\nvar _isPrototype = isPrototype$3;\nfunction overArg$2(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\nvar _overArg = overArg$2;\nvar overArg$1 = _overArg;\nvar nativeKeys$1 = overArg$1(Object.keys, Object);\nvar _nativeKeys = nativeKeys$1;\nvar isPrototype$2 = _isPrototype, nativeKeys = _nativeKeys;\nvar objectProto$6 = Object.prototype;\nvar hasOwnProperty$6 = objectProto$6.hasOwnProperty;\nfunction baseKeys$1(object) {\n  if (!isPrototype$2(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty$6.call(object, key) && key != \"constructor\") {\n      result.push(key);\n    }\n  }\n  return result;\n}\nvar _baseKeys = baseKeys$1;\nvar isFunction$1 = isFunction_1, isLength = isLength_1;\nfunction isArrayLike$5(value) {\n  return value != null && isLength(value.length) && !isFunction$1(value);\n}\nvar isArrayLike_1 = isArrayLike$5;\nvar arrayLikeKeys$1 = _arrayLikeKeys, baseKeys = _baseKeys, isArrayLike$4 = isArrayLike_1;\nfunction keys$3(object) {\n  return isArrayLike$4(object) ? arrayLikeKeys$1(object) : baseKeys(object);\n}\nvar keys_1 = keys$3;\nvar baseGetAllKeys = _baseGetAllKeys, getSymbols = _getSymbols, keys$2 = keys_1;\nfunction getAllKeys$1(object) {\n  return baseGetAllKeys(object, keys$2, getSymbols);\n}\nvar _getAllKeys = getAllKeys$1;\nvar getAllKeys = _getAllKeys;\nvar COMPARE_PARTIAL_FLAG$3 = 1;\nvar objectProto$5 = Object.prototype;\nvar hasOwnProperty$5 = objectProto$5.hasOwnProperty;\nfunction equalObjects$1(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index2 = objLength;\n  while (index2--) {\n    var key = objProps[index2];\n    if (!(isPartial ? key in other : hasOwnProperty$5.call(other, key))) {\n      return false;\n    }\n  }\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  var skipCtor = isPartial;\n  while (++index2 < objLength) {\n    key = objProps[index2];\n    var objValue = object[key], othValue = other[key];\n    if (customizer) {\n      var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n    }\n    if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == \"constructor\");\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor, othCtor = other.constructor;\n    if (objCtor != othCtor && (\"constructor\" in object && \"constructor\" in other) && !(typeof objCtor == \"function\" && objCtor instanceof objCtor && typeof othCtor == \"function\" && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack[\"delete\"](object);\n  stack[\"delete\"](other);\n  return result;\n}\nvar _equalObjects = equalObjects$1;\nvar getNative$4 = _getNative, root$3 = _root;\nvar DataView$1 = getNative$4(root$3, \"DataView\");\nvar _DataView = DataView$1;\nvar getNative$3 = _getNative, root$2 = _root;\nvar Promise$2 = getNative$3(root$2, \"Promise\");\nvar _Promise = Promise$2;\nvar getNative$2 = _getNative, root$1 = _root;\nvar Set$1 = getNative$2(root$1, \"Set\");\nvar _Set = Set$1;\nvar getNative$1 = _getNative, root = _root;\nvar WeakMap$1 = getNative$1(root, \"WeakMap\");\nvar _WeakMap = WeakMap$1;\nvar DataView = _DataView, Map = _Map, Promise$1 = _Promise, Set = _Set, WeakMap = _WeakMap, baseGetTag$3 = _baseGetTag, toSource = _toSource;\nvar mapTag = \"[object Map]\", objectTag$2 = \"[object Object]\", promiseTag = \"[object Promise]\", setTag = \"[object Set]\", weakMapTag = \"[object WeakMap]\";\nvar dataViewTag = \"[object DataView]\";\nvar dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap);\nvar getTag$1 = baseGetTag$3;\nif (DataView && getTag$1(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag$1(new Map()) != mapTag || Promise$1 && getTag$1(Promise$1.resolve()) != promiseTag || Set && getTag$1(new Set()) != setTag || WeakMap && getTag$1(new WeakMap()) != weakMapTag) {\n  getTag$1 = function(value) {\n    var result = baseGetTag$3(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : \"\";\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString:\n          return dataViewTag;\n        case mapCtorString:\n          return mapTag;\n        case promiseCtorString:\n          return promiseTag;\n        case setCtorString:\n          return setTag;\n        case weakMapCtorString:\n          return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\nvar _getTag = getTag$1;\nvar Stack$2 = _Stack, equalArrays = _equalArrays, equalByTag = _equalByTag, equalObjects = _equalObjects, getTag = _getTag, isArray$4 = isArray_1, isBuffer$1 = isBufferExports, isTypedArray$1 = isTypedArray_1;\nvar COMPARE_PARTIAL_FLAG$2 = 1;\nvar argsTag = \"[object Arguments]\", arrayTag = \"[object Array]\", objectTag$1 = \"[object Object]\";\nvar objectProto$4 = Object.prototype;\nvar hasOwnProperty$4 = objectProto$4.hasOwnProperty;\nfunction baseIsEqualDeep$1(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray$4(object), othIsArr = isArray$4(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other);\n  objTag = objTag == argsTag ? objectTag$1 : objTag;\n  othTag = othTag == argsTag ? objectTag$1 : othTag;\n  var objIsObj = objTag == objectTag$1, othIsObj = othTag == objectTag$1, isSameTag = objTag == othTag;\n  if (isSameTag && isBuffer$1(object)) {\n    if (!isBuffer$1(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack$2());\n    return objIsArr || isTypedArray$1(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) {\n    var objIsWrapped = objIsObj && hasOwnProperty$4.call(object, \"__wrapped__\"), othIsWrapped = othIsObj && hasOwnProperty$4.call(other, \"__wrapped__\");\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;\n      stack || (stack = new Stack$2());\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack$2());\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\nvar _baseIsEqualDeep = baseIsEqualDeep$1;\nvar baseIsEqualDeep = _baseIsEqualDeep, isObjectLike$4 = isObjectLike_1;\nfunction baseIsEqual$2(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || !isObjectLike$4(value) && !isObjectLike$4(other)) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual$2, stack);\n}\nvar _baseIsEqual = baseIsEqual$2;\nvar Stack$1 = _Stack, baseIsEqual$1 = _baseIsEqual;\nvar COMPARE_PARTIAL_FLAG$1 = 1, COMPARE_UNORDERED_FLAG$1 = 2;\nfunction baseIsMatch$1(object, source, matchData, customizer) {\n  var index2 = matchData.length, length = index2, noCustomizer = !customizer;\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index2--) {\n    var data2 = matchData[index2];\n    if (noCustomizer && data2[2] ? data2[1] !== object[data2[0]] : !(data2[0] in object)) {\n      return false;\n    }\n  }\n  while (++index2 < length) {\n    data2 = matchData[index2];\n    var key = data2[0], objValue = object[key], srcValue = data2[1];\n    if (noCustomizer && data2[2]) {\n      if (objValue === void 0 && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack$1();\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === void 0 ? baseIsEqual$1(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\nvar _baseIsMatch = baseIsMatch$1;\nvar isObject$7 = isObject_1;\nfunction isStrictComparable$2(value) {\n  return value === value && !isObject$7(value);\n}\nvar _isStrictComparable = isStrictComparable$2;\nvar isStrictComparable$1 = _isStrictComparable, keys$1 = keys_1;\nfunction getMatchData$1(object) {\n  var result = keys$1(object), length = result.length;\n  while (length--) {\n    var key = result[length], value = object[key];\n    result[length] = [key, value, isStrictComparable$1(value)];\n  }\n  return result;\n}\nvar _getMatchData = getMatchData$1;\nfunction matchesStrictComparable$2(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue && (srcValue !== void 0 || key in Object(object));\n  };\n}\nvar _matchesStrictComparable = matchesStrictComparable$2;\nvar baseIsMatch = _baseIsMatch, getMatchData = _getMatchData, matchesStrictComparable$1 = _matchesStrictComparable;\nfunction baseMatches$1(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable$1(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\nvar _baseMatches = baseMatches$1;\nvar castPath = _castPath, toKey$2 = _toKey;\nfunction baseGet$2(object, path) {\n  path = castPath(path, object);\n  var index2 = 0, length = path.length;\n  while (object != null && index2 < length) {\n    object = object[toKey$2(path[index2++])];\n  }\n  return index2 && index2 == length ? object : void 0;\n}\nvar _baseGet = baseGet$2;\nvar baseGet$1 = _baseGet;\nfunction get$1(object, path, defaultValue) {\n  var result = object == null ? void 0 : baseGet$1(object, path);\n  return result === void 0 ? defaultValue : result;\n}\nvar get_1 = get$1;\nfunction baseHasIn$1(object, key) {\n  return object != null && key in Object(object);\n}\nvar _baseHasIn = baseHasIn$1;\nvar baseHasIn = _baseHasIn, hasPath = _hasPath;\nfunction hasIn$1(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\nvar hasIn_1 = hasIn$1;\nvar baseIsEqual = _baseIsEqual, get = get_1, hasIn = hasIn_1, isKey$1 = _isKey, isStrictComparable = _isStrictComparable, matchesStrictComparable = _matchesStrictComparable, toKey$1 = _toKey;\nvar COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2;\nfunction baseMatchesProperty$1(path, srcValue) {\n  if (isKey$1(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey$1(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\nvar _baseMatchesProperty = baseMatchesProperty$1;\nfunction identity$3(value) {\n  return value;\n}\nvar identity_1 = identity$3;\nfunction baseProperty$1(key) {\n  return function(object) {\n    return object == null ? void 0 : object[key];\n  };\n}\nvar _baseProperty = baseProperty$1;\nvar baseGet = _baseGet;\nfunction basePropertyDeep$1(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\nvar _basePropertyDeep = basePropertyDeep$1;\nvar baseProperty = _baseProperty, basePropertyDeep = _basePropertyDeep, isKey = _isKey, toKey = _toKey;\nfunction property$1(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\nvar property_1 = property$1;\nvar baseMatches = _baseMatches, baseMatchesProperty = _baseMatchesProperty, identity$2 = identity_1, isArray$3 = isArray_1, property = property_1;\nfunction baseIteratee$2(value) {\n  if (typeof value == \"function\") {\n    return value;\n  }\n  if (value == null) {\n    return identity$2;\n  }\n  if (typeof value == \"object\") {\n    return isArray$3(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);\n  }\n  return property(value);\n}\nvar _baseIteratee = baseIteratee$2;\nfunction createBaseFor$1(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index2 = -1, iterable = Object(object), props = keysFunc(object), length = props.length;\n    while (length--) {\n      var key = props[fromRight ? length : ++index2];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\nvar _createBaseFor = createBaseFor$1;\nvar createBaseFor = _createBaseFor;\nvar baseFor$2 = createBaseFor();\nvar _baseFor = baseFor$2;\nvar baseFor$1 = _baseFor, keys = keys_1;\nfunction baseForOwn$2(object, iteratee) {\n  return object && baseFor$1(object, iteratee, keys);\n}\nvar _baseForOwn = baseForOwn$2;\nvar isArrayLike$3 = isArrayLike_1;\nfunction createBaseEach$1(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike$3(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length, index2 = fromRight ? length : -1, iterable = Object(collection);\n    while (fromRight ? index2-- : ++index2 < length) {\n      if (iteratee(iterable[index2], index2, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\nvar _createBaseEach = createBaseEach$1;\nvar baseForOwn$1 = _baseForOwn, createBaseEach = _createBaseEach;\nvar baseEach$1 = createBaseEach(baseForOwn$1);\nvar _baseEach = baseEach$1;\nvar baseEach = _baseEach;\nfunction baseSome$1(collection, predicate) {\n  var result;\n  baseEach(collection, function(value, index2, collection2) {\n    result = predicate(value, index2, collection2);\n    return !result;\n  });\n  return !!result;\n}\nvar _baseSome = baseSome$1;\nvar eq$3 = eq_1, isArrayLike$2 = isArrayLike_1, isIndex = _isIndex, isObject$6 = isObject_1;\nfunction isIterateeCall$3(value, index2, object) {\n  if (!isObject$6(object)) {\n    return false;\n  }\n  var type = typeof index2;\n  if (type == \"number\" ? isArrayLike$2(object) && isIndex(index2, object.length) : type == \"string\" && index2 in object) {\n    return eq$3(object[index2], value);\n  }\n  return false;\n}\nvar _isIterateeCall = isIterateeCall$3;\nvar arraySome = _arraySome, baseIteratee$1 = _baseIteratee, baseSome = _baseSome, isArray$2 = isArray_1, isIterateeCall$2 = _isIterateeCall;\nfunction some(collection, predicate, guard) {\n  var func = isArray$2(collection) ? arraySome : baseSome;\n  if (guard && isIterateeCall$2(collection, predicate, guard)) {\n    predicate = void 0;\n  }\n  return func(collection, baseIteratee$1(predicate));\n}\nvar some_1 = some;\nvar baseGetTag$2 = _baseGetTag, isObjectLike$3 = isObjectLike_1;\nvar boolTag = \"[object Boolean]\";\nfunction isBoolean(value) {\n  return value === true || value === false || isObjectLike$3(value) && baseGetTag$2(value) == boolTag;\n}\nvar isBoolean_1 = isBoolean;\nvar baseGetTag$1 = _baseGetTag, isObjectLike$2 = isObjectLike_1;\nvar numberTag = \"[object Number]\";\nfunction isNumber(value) {\n  return typeof value == \"number\" || isObjectLike$2(value) && baseGetTag$1(value) == numberTag;\n}\nvar isNumber_1 = isNumber;\nvar getNative = _getNative;\nvar defineProperty$2 = function() {\n  try {\n    var func = getNative(Object, \"defineProperty\");\n    func({}, \"\", {});\n    return func;\n  } catch (e) {\n  }\n}();\nvar _defineProperty = defineProperty$2;\nvar defineProperty$1 = _defineProperty;\nfunction baseAssignValue$4(object, key, value) {\n  if (key == \"__proto__\" && defineProperty$1) {\n    defineProperty$1(object, key, {\n      \"configurable\": true,\n      \"enumerable\": true,\n      \"value\": value,\n      \"writable\": true\n    });\n  } else {\n    object[key] = value;\n  }\n}\nvar _baseAssignValue = baseAssignValue$4;\nvar baseAssignValue$3 = _baseAssignValue, eq$2 = eq_1;\nvar objectProto$3 = Object.prototype;\nvar hasOwnProperty$3 = objectProto$3.hasOwnProperty;\nfunction assignValue$1(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty$3.call(object, key) && eq$2(objValue, value)) || value === void 0 && !(key in object)) {\n    baseAssignValue$3(object, key, value);\n  }\n}\nvar _assignValue = assignValue$1;\nvar baseAssignValue$2 = _baseAssignValue, baseForOwn = _baseForOwn, baseIteratee = _baseIteratee;\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee);\n  baseForOwn(object, function(value, key, object2) {\n    baseAssignValue$2(result, key, iteratee(value, key, object2));\n  });\n  return result;\n}\nvar mapValues_1 = mapValues;\nfunction apply$2(func, thisArg, args) {\n  switch (args.length) {\n    case 0:\n      return func.call(thisArg);\n    case 1:\n      return func.call(thisArg, args[0]);\n    case 2:\n      return func.call(thisArg, args[0], args[1]);\n    case 3:\n      return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\nvar _apply = apply$2;\nvar apply$1 = _apply;\nvar nativeMax = Math.max;\nfunction overRest$1(func, start, transform) {\n  start = nativeMax(start === void 0 ? func.length - 1 : start, 0);\n  return function() {\n    var args = arguments, index2 = -1, length = nativeMax(args.length - start, 0), array = Array(length);\n    while (++index2 < length) {\n      array[index2] = args[start + index2];\n    }\n    index2 = -1;\n    var otherArgs = Array(start + 1);\n    while (++index2 < start) {\n      otherArgs[index2] = args[index2];\n    }\n    otherArgs[start] = transform(array);\n    return apply$1(func, this, otherArgs);\n  };\n}\nvar _overRest = overRest$1;\nfunction constant$1(value) {\n  return function() {\n    return value;\n  };\n}\nvar constant_1 = constant$1;\nvar constant = constant_1, defineProperty = _defineProperty, identity$1 = identity_1;\nvar baseSetToString$1 = !defineProperty ? identity$1 : function(func, string) {\n  return defineProperty(func, \"toString\", {\n    \"configurable\": true,\n    \"enumerable\": false,\n    \"value\": constant(string),\n    \"writable\": true\n  });\n};\nvar _baseSetToString = baseSetToString$1;\nvar HOT_COUNT = 800, HOT_SPAN = 16;\nvar nativeNow = Date.now;\nfunction shortOut$1(func) {\n  var count = 0, lastCalled = 0;\n  return function() {\n    var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);\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(void 0, arguments);\n  };\n}\nvar _shortOut = shortOut$1;\nvar baseSetToString = _baseSetToString, shortOut = _shortOut;\nvar setToString$1 = shortOut(baseSetToString);\nvar _setToString = setToString$1;\nvar identity = identity_1, overRest = _overRest, setToString = _setToString;\nfunction baseRest$3(func, start) {\n  return setToString(overRest(func, start, identity), func + \"\");\n}\nvar _baseRest = baseRest$3;\nfunction nativeKeysIn$1(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nvar _nativeKeysIn = nativeKeysIn$1;\nvar isObject$5 = isObject_1, isPrototype$1 = _isPrototype, nativeKeysIn = _nativeKeysIn;\nvar objectProto$2 = Object.prototype;\nvar hasOwnProperty$2 = objectProto$2.hasOwnProperty;\nfunction baseKeysIn$1(object) {\n  if (!isObject$5(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype$1(object), result = [];\n  for (var key in object) {\n    if (!(key == \"constructor\" && (isProto || !hasOwnProperty$2.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nvar _baseKeysIn = baseKeysIn$1;\nvar arrayLikeKeys = _arrayLikeKeys, baseKeysIn = _baseKeysIn, isArrayLike$1 = isArrayLike_1;\nfunction keysIn$3(object) {\n  return isArrayLike$1(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\nvar keysIn_1 = keysIn$3;\nvar baseRest$2 = _baseRest, eq$1 = eq_1, isIterateeCall$1 = _isIterateeCall, keysIn$2 = keysIn_1;\nvar objectProto$1 = Object.prototype;\nvar hasOwnProperty$1 = objectProto$1.hasOwnProperty;\nvar defaults = baseRest$2(function(object, sources) {\n  object = Object(object);\n  var index2 = -1;\n  var length = sources.length;\n  var guard = length > 2 ? sources[2] : void 0;\n  if (guard && isIterateeCall$1(sources[0], sources[1], guard)) {\n    length = 1;\n  }\n  while (++index2 < length) {\n    var source = sources[index2];\n    var props = keysIn$2(source);\n    var propsIndex = -1;\n    var propsLength = props.length;\n    while (++propsIndex < propsLength) {\n      var key = props[propsIndex];\n      var value = object[key];\n      if (value === void 0 || eq$1(value, objectProto$1[key]) && !hasOwnProperty$1.call(object, key)) {\n        object[key] = source[key];\n      }\n    }\n  }\n  return object;\n});\nvar defaults_1 = defaults;\nvar baseAssignValue$1 = _baseAssignValue, eq = eq_1;\nfunction assignMergeValue$2(object, key, value) {\n  if (value !== void 0 && !eq(object[key], value) || value === void 0 && !(key in object)) {\n    baseAssignValue$1(object, key, value);\n  }\n}\nvar _assignMergeValue = assignMergeValue$2;\nvar _cloneBufferExports = {};\nvar _cloneBuffer = {\n  get exports() {\n    return _cloneBufferExports;\n  },\n  set exports(v) {\n    _cloneBufferExports = v;\n  }\n};\n(function(module, exports) {\n  var root2 = _root;\n  var freeExports = exports && !exports.nodeType && exports;\n  var freeModule = freeExports && true && module && !module.nodeType && module;\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n  var Buffer2 = moduleExports ? root2.Buffer : void 0, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : void 0;\n  function cloneBuffer2(buffer, isDeep) {\n    if (isDeep) {\n      return buffer.slice();\n    }\n    var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n    buffer.copy(result);\n    return result;\n  }\n  module.exports = cloneBuffer2;\n})(_cloneBuffer, _cloneBufferExports);\nvar Uint8Array2 = _Uint8Array;\nfunction cloneArrayBuffer$1(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array2(result).set(new Uint8Array2(arrayBuffer));\n  return result;\n}\nvar _cloneArrayBuffer = cloneArrayBuffer$1;\nvar cloneArrayBuffer = _cloneArrayBuffer;\nfunction cloneTypedArray$1(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\nvar _cloneTypedArray = cloneTypedArray$1;\nfunction copyArray$1(source, array) {\n  var index2 = -1, length = source.length;\n  array || (array = Array(length));\n  while (++index2 < length) {\n    array[index2] = source[index2];\n  }\n  return array;\n}\nvar _copyArray = copyArray$1;\nvar isObject$4 = isObject_1;\nvar objectCreate = Object.create;\nvar baseCreate$1 = function() {\n  function object() {\n  }\n  return function(proto) {\n    if (!isObject$4(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object();\n    object.prototype = void 0;\n    return result;\n  };\n}();\nvar _baseCreate = baseCreate$1;\nvar overArg = _overArg;\nvar getPrototype$2 = overArg(Object.getPrototypeOf, Object);\nvar _getPrototype = getPrototype$2;\nvar baseCreate = _baseCreate, getPrototype$1 = _getPrototype, isPrototype = _isPrototype;\nfunction initCloneObject$1(object) {\n  return typeof object.constructor == \"function\" && !isPrototype(object) ? baseCreate(getPrototype$1(object)) : {};\n}\nvar _initCloneObject = initCloneObject$1;\nvar isArrayLike = isArrayLike_1, isObjectLike$1 = isObjectLike_1;\nfunction isArrayLikeObject$1(value) {\n  return isObjectLike$1(value) && isArrayLike(value);\n}\nvar isArrayLikeObject_1 = isArrayLikeObject$1;\nvar baseGetTag = _baseGetTag, getPrototype = _getPrototype, isObjectLike = isObjectLike_1;\nvar objectTag = \"[object Object]\";\nvar funcProto = Function.prototype, objectProto = Object.prototype;\nvar funcToString = funcProto.toString;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nvar objectCtorString = funcToString.call(Object);\nfunction isPlainObject$1(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n  return typeof Ctor == \"function\" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;\n}\nvar isPlainObject_1 = isPlainObject$1;\nfunction safeGet$2(object, key) {\n  if (key === \"constructor\" && typeof object[key] === \"function\") {\n    return;\n  }\n  if (key == \"__proto__\") {\n    return;\n  }\n  return object[key];\n}\nvar _safeGet = safeGet$2;\nvar assignValue = _assignValue, baseAssignValue = _baseAssignValue;\nfunction copyObject$1(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n  var index2 = -1, length = props.length;\n  while (++index2 < length) {\n    var key = props[index2];\n    var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;\n    if (newValue === void 0) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\nvar _copyObject = copyObject$1;\nvar copyObject = _copyObject, keysIn$1 = keysIn_1;\nfunction toPlainObject$1(value) {\n  return copyObject(value, keysIn$1(value));\n}\nvar toPlainObject_1 = toPlainObject$1;\nvar assignMergeValue$1 = _assignMergeValue, cloneBuffer = _cloneBufferExports, cloneTypedArray = _cloneTypedArray, copyArray = _copyArray, initCloneObject = _initCloneObject, isArguments = isArguments_1, isArray$1 = isArray_1, isArrayLikeObject = isArrayLikeObject_1, isBuffer = isBufferExports, isFunction = isFunction_1, isObject$3 = isObject_1, isPlainObject = isPlainObject_1, isTypedArray = isTypedArray_1, safeGet$1 = _safeGet, toPlainObject = toPlainObject_1;\nfunction baseMergeDeep$1(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet$1(object, key), srcValue = safeGet$1(source, key), stacked = stack.get(srcValue);\n  if (stacked) {\n    assignMergeValue$1(object, key, stacked);\n    return;\n  }\n  var newValue = customizer ? customizer(objValue, srcValue, key + \"\", object, source, stack) : void 0;\n  var isCommon = newValue === void 0;\n  if (isCommon) {\n    var isArr = isArray$1(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray$1(objValue)) {\n        newValue = objValue;\n      } else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      } else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      } else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      } else {\n        newValue = [];\n      }\n    } else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      } else if (!isObject$3(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    } else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack[\"delete\"](srcValue);\n  }\n  assignMergeValue$1(object, key, newValue);\n}\nvar _baseMergeDeep = baseMergeDeep$1;\nvar Stack = _Stack, assignMergeValue = _assignMergeValue, baseFor = _baseFor, baseMergeDeep = _baseMergeDeep, isObject$2 = isObject_1, keysIn = keysIn_1, safeGet = _safeGet;\nfunction baseMerge$2(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack());\n    if (isObject$2(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge$2, customizer, stack);\n    } else {\n      var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + \"\", object, source, stack) : void 0;\n      if (newValue === void 0) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\nvar _baseMerge = baseMerge$2;\nvar baseMerge$1 = _baseMerge, isObject$1 = isObject_1;\nfunction customDefaultsMerge$1(objValue, srcValue, key, object, source, stack) {\n  if (isObject$1(objValue) && isObject$1(srcValue)) {\n    stack.set(srcValue, objValue);\n    baseMerge$1(objValue, srcValue, void 0, customDefaultsMerge$1, stack);\n    stack[\"delete\"](srcValue);\n  }\n  return objValue;\n}\nvar _customDefaultsMerge = customDefaultsMerge$1;\nvar baseRest$1 = _baseRest, isIterateeCall = _isIterateeCall;\nfunction createAssigner$1(assigner) {\n  return baseRest$1(function(object, sources) {\n    var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;\n    customizer = assigner.length > 3 && typeof customizer == \"function\" ? (length--, customizer) : void 0;\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? void 0 : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index2 < length) {\n      var source = sources[index2];\n      if (source) {\n        assigner(object, source, index2, customizer);\n      }\n    }\n    return object;\n  });\n}\nvar _createAssigner = createAssigner$1;\nvar baseMerge = _baseMerge, createAssigner = _createAssigner;\nvar mergeWith$1 = createAssigner(function(object, source, srcIndex, customizer) {\n  baseMerge(object, source, srcIndex, customizer);\n});\nvar mergeWith_1 = mergeWith$1;\nvar apply = _apply, baseRest = _baseRest, customDefaultsMerge = _customDefaultsMerge, mergeWith = mergeWith_1;\nvar defaultsDeep = baseRest(function(args) {\n  args.push(void 0, customDefaultsMerge);\n  return apply(mergeWith, void 0, args);\n});\nvar defaultsDeep_1 = defaultsDeep;\nfunction head(array) {\n  return array && array.length ? array[0] : void 0;\n}\nvar head_1 = head;\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : void 0;\n}\nvar last_1 = last;\nconst getType = (value) => Object.prototype.toString.call(value).slice(8, -1);\nconst isDate = (value) => isDate_1(value) && !isNaN(value.getTime());\nconst isObject = (value) => getType(value) === \"Object\";\nconst has = has_1;\nconst hasAny = (obj, props) => some_1(props, (p) => has_1(obj, p));\nconst pad = (val, len, char = \"0\") => {\n  val = val !== null && val !== void 0 ? String(val) : \"\";\n  len = len || 2;\n  while (val.length < len) {\n    val = `${char}${val}`;\n  }\n  return val;\n};\nconst isArray = (val) => Array.isArray(val);\nconst arrayHasItems = (array) => isArray(array) && array.length > 0;\nconst resolveEl = (target) => {\n  if (target == null)\n    return null;\n  if (document && isString_1(target))\n    return document.querySelector(target);\n  return target.$el ?? target;\n};\nconst off = (element, event, handler, opts = void 0) => {\n  element.removeEventListener(event, handler, opts);\n};\nconst on = (element, event, handler, opts = void 0) => {\n  element.addEventListener(event, handler, opts);\n  return () => off(element, event, handler, opts);\n};\nconst elementContains = (element, child) => !!element && !!child && (element === child || element.contains(child));\nconst onSpaceOrEnter = (event, handler) => {\n  if (event.key === \" \" || event.key === \"Enter\") {\n    handler(event);\n    event.preventDefault();\n  }\n};\nconst omit = (obj, ...keys2) => {\n  const ret = {};\n  let key;\n  for (key in obj) {\n    if (!keys2.includes(key)) {\n      ret[key] = obj[key];\n    }\n  }\n  return ret;\n};\nconst pick = (obj, keys2) => {\n  const ret = {};\n  keys2.forEach((key) => {\n    if (key in obj)\n      ret[key] = obj[key];\n  });\n  return ret;\n};\nfunction clamp(num, min, max) {\n  return Math.min(Math.max(num, min), max);\n}\nvar toIntegerExports = {};\nvar toInteger$2 = {\n  get exports() {\n    return toIntegerExports;\n  },\n  set exports(v) {\n    toIntegerExports = v;\n  }\n};\n(function(module, exports) {\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = toInteger2;\n  function toInteger2(dirtyNumber) {\n    if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n      return NaN;\n    }\n    var number = Number(dirtyNumber);\n    if (isNaN(number)) {\n      return number;\n    }\n    return number < 0 ? Math.ceil(number) : Math.floor(number);\n  }\n  module.exports = exports.default;\n})(toInteger$2, toIntegerExports);\nconst toInteger$1 = /* @__PURE__ */ getDefaultExportFromCjs(toIntegerExports);\nvar getTimezoneOffsetInMillisecondsExports = {};\nvar getTimezoneOffsetInMilliseconds$2 = {\n  get exports() {\n    return getTimezoneOffsetInMillisecondsExports;\n  },\n  set exports(v) {\n    getTimezoneOffsetInMillisecondsExports = v;\n  }\n};\n(function(module, exports) {\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = getTimezoneOffsetInMilliseconds2;\n  function getTimezoneOffsetInMilliseconds2(date) {\n    var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n    utcDate.setUTCFullYear(date.getFullYear());\n    return date.getTime() - utcDate.getTime();\n  }\n  module.exports = exports.default;\n})(getTimezoneOffsetInMilliseconds$2, getTimezoneOffsetInMillisecondsExports);\nconst getTimezoneOffsetInMilliseconds$1 = /* @__PURE__ */ getDefaultExportFromCjs(getTimezoneOffsetInMillisecondsExports);\nfunction tzTokenizeDate(date, timeZone) {\n  var dtf = getDateTimeFormat(timeZone);\n  return dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date);\n}\nvar typeToPos = {\n  year: 0,\n  month: 1,\n  day: 2,\n  hour: 3,\n  minute: 4,\n  second: 5\n};\nfunction partsOffset(dtf, date) {\n  try {\n    var formatted = dtf.formatToParts(date);\n    var filled = [];\n    for (var i = 0; i < formatted.length; i++) {\n      var pos = typeToPos[formatted[i].type];\n      if (pos >= 0) {\n        filled[pos] = parseInt(formatted[i].value, 10);\n      }\n    }\n    return filled;\n  } catch (error) {\n    if (error instanceof RangeError) {\n      return [NaN];\n    }\n    throw error;\n  }\n}\nfunction hackyOffset(dtf, date) {\n  var formatted = dtf.format(date).replace(/\\u200E/g, \"\");\n  var parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted);\n  return [parsed[3], parsed[1], parsed[2], parsed[4], parsed[5], parsed[6]];\n}\nvar dtfCache = {};\nfunction getDateTimeFormat(timeZone) {\n  if (!dtfCache[timeZone]) {\n    var testDateFormatted = new Intl.DateTimeFormat(\"en-US\", {\n      hour12: false,\n      timeZone: \"America/New_York\",\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\"\n    }).format(/* @__PURE__ */ new Date(\"2014-06-25T04:00:00.123Z\"));\n    var hourCycleSupported = testDateFormatted === \"06/25/2014, 00:00:00\" || testDateFormatted === \"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00\";\n    dtfCache[timeZone] = hourCycleSupported ? new Intl.DateTimeFormat(\"en-US\", {\n      hour12: false,\n      timeZone,\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\"\n    }) : new Intl.DateTimeFormat(\"en-US\", {\n      hourCycle: \"h23\",\n      timeZone,\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\"\n    });\n  }\n  return dtfCache[timeZone];\n}\nfunction newDateUTC(fullYear, month, day, hour, minute, second, millisecond) {\n  var utcDate = /* @__PURE__ */ new Date(0);\n  utcDate.setUTCFullYear(fullYear, month, day);\n  utcDate.setUTCHours(hour, minute, second, millisecond);\n  return utcDate;\n}\nvar MILLISECONDS_IN_HOUR$1 = 36e5;\nvar MILLISECONDS_IN_MINUTE$1 = 6e4;\nvar patterns$1 = {\n  timezone: /([Z+-].*)$/,\n  timezoneZ: /^(Z)$/,\n  timezoneHH: /^([+-]\\d{2})$/,\n  timezoneHHMM: /^([+-]\\d{2}):?(\\d{2})$/\n};\nfunction tzParseTimezone(timezoneString, date, isUtcDate) {\n  var token2;\n  var absoluteOffset;\n  if (!timezoneString) {\n    return 0;\n  }\n  token2 = patterns$1.timezoneZ.exec(timezoneString);\n  if (token2) {\n    return 0;\n  }\n  var hours2;\n  token2 = patterns$1.timezoneHH.exec(timezoneString);\n  if (token2) {\n    hours2 = parseInt(token2[1], 10);\n    if (!validateTimezone(hours2)) {\n      return NaN;\n    }\n    return -(hours2 * MILLISECONDS_IN_HOUR$1);\n  }\n  token2 = patterns$1.timezoneHHMM.exec(timezoneString);\n  if (token2) {\n    hours2 = parseInt(token2[1], 10);\n    var minutes = parseInt(token2[2], 10);\n    if (!validateTimezone(hours2, minutes)) {\n      return NaN;\n    }\n    absoluteOffset = Math.abs(hours2) * MILLISECONDS_IN_HOUR$1 + minutes * MILLISECONDS_IN_MINUTE$1;\n    return hours2 > 0 ? -absoluteOffset : absoluteOffset;\n  }\n  if (isValidTimezoneIANAString(timezoneString)) {\n    date = new Date(date || Date.now());\n    var utcDate = isUtcDate ? date : toUtcDate(date);\n    var offset = calcOffset(utcDate, timezoneString);\n    var fixedOffset = isUtcDate ? offset : fixOffset(date, offset, timezoneString);\n    return -fixedOffset;\n  }\n  return NaN;\n}\nfunction toUtcDate(date) {\n  return newDateUTC(\n    date.getFullYear(),\n    date.getMonth(),\n    date.getDate(),\n    date.getHours(),\n    date.getMinutes(),\n    date.getSeconds(),\n    date.getMilliseconds()\n  );\n}\nfunction calcOffset(date, timezoneString) {\n  var tokens = tzTokenizeDate(date, timezoneString);\n  var asUTC = newDateUTC(\n    tokens[0],\n    tokens[1] - 1,\n    tokens[2],\n    tokens[3] % 24,\n    tokens[4],\n    tokens[5],\n    0\n  ).getTime();\n  var asTS = date.getTime();\n  var over = asTS % 1e3;\n  asTS -= over >= 0 ? over : 1e3 + over;\n  return asUTC - asTS;\n}\nfunction fixOffset(date, offset, timezoneString) {\n  var localTS = date.getTime();\n  var utcGuess = localTS - offset;\n  var o2 = calcOffset(new Date(utcGuess), timezoneString);\n  if (offset === o2) {\n    return offset;\n  }\n  utcGuess -= o2 - offset;\n  var o3 = calcOffset(new Date(utcGuess), timezoneString);\n  if (o2 === o3) {\n    return o2;\n  }\n  return Math.max(o2, o3);\n}\nfunction validateTimezone(hours2, minutes) {\n  return -23 <= hours2 && hours2 <= 23 && (minutes == null || 0 <= minutes && minutes <= 59);\n}\nvar validIANATimezoneCache = {};\nfunction isValidTimezoneIANAString(timeZoneString) {\n  if (validIANATimezoneCache[timeZoneString])\n    return true;\n  try {\n    new Intl.DateTimeFormat(void 0, { timeZone: timeZoneString });\n    validIANATimezoneCache[timeZoneString] = true;\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\nvar tzPattern = /(Z|[+-]\\d{2}(?::?\\d{2})?| UTC| [a-zA-Z]+\\/[a-zA-Z_]+(?:\\/[a-zA-Z_]+)?)$/;\nconst tzPattern$1 = tzPattern;\nvar MILLISECONDS_IN_HOUR = 36e5;\nvar MILLISECONDS_IN_MINUTE = 6e4;\nvar DEFAULT_ADDITIONAL_DIGITS = 2;\nvar patterns = {\n  dateTimePattern: /^([0-9W+-]+)(T| )(.*)/,\n  datePattern: /^([0-9W+-]+)(.*)/,\n  plainTime: /:/,\n  // year tokens\n  YY: /^(\\d{2})$/,\n  YYY: [\n    /^([+-]\\d{2})$/,\n    // 0 additional digits\n    /^([+-]\\d{3})$/,\n    // 1 additional digit\n    /^([+-]\\d{4})$/\n    // 2 additional digits\n  ],\n  YYYY: /^(\\d{4})/,\n  YYYYY: [\n    /^([+-]\\d{4})/,\n    // 0 additional digits\n    /^([+-]\\d{5})/,\n    // 1 additional digit\n    /^([+-]\\d{6})/\n    // 2 additional digits\n  ],\n  // date tokens\n  MM: /^-(\\d{2})$/,\n  DDD: /^-?(\\d{3})$/,\n  MMDD: /^-?(\\d{2})-?(\\d{2})$/,\n  Www: /^-?W(\\d{2})$/,\n  WwwD: /^-?W(\\d{2})-?(\\d{1})$/,\n  HH: /^(\\d{2}([.,]\\d*)?)$/,\n  HHMM: /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n  HHMMSS: /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n  // time zone tokens (to identify the presence of a tz)\n  timeZone: tzPattern$1\n};\nfunction toDate$1(argument, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\"1 argument required, but only \" + arguments.length + \" present\");\n  }\n  if (argument === null) {\n    return /* @__PURE__ */ new Date(NaN);\n  }\n  var options = dirtyOptions || {};\n  var additionalDigits = options.additionalDigits == null ? DEFAULT_ADDITIONAL_DIGITS : toInteger$1(options.additionalDigits);\n  if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n    throw new RangeError(\"additionalDigits must be 0, 1 or 2\");\n  }\n  if (argument instanceof Date || typeof argument === \"object\" && Object.prototype.toString.call(argument) === \"[object Date]\") {\n    return new Date(argument.getTime());\n  } else if (typeof argument === \"number\" || Object.prototype.toString.call(argument) === \"[object Number]\") {\n    return new Date(argument);\n  } else if (!(typeof argument === \"string\" || Object.prototype.toString.call(argument) === \"[object String]\")) {\n    return /* @__PURE__ */ new Date(NaN);\n  }\n  var dateStrings = splitDateString(argument);\n  var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n  var year = parseYearResult.year;\n  var restDateString = parseYearResult.restDateString;\n  var date = parseDate$1(restDateString, year);\n  if (isNaN(date)) {\n    return /* @__PURE__ */ new Date(NaN);\n  }\n  if (date) {\n    var timestamp = date.getTime();\n    var time = 0;\n    var offset;\n    if (dateStrings.time) {\n      time = parseTime(dateStrings.time);\n      if (isNaN(time)) {\n        return /* @__PURE__ */ new Date(NaN);\n      }\n    }\n    if (dateStrings.timeZone || options.timeZone) {\n      offset = tzParseTimezone(dateStrings.timeZone || options.timeZone, new Date(timestamp + time));\n      if (isNaN(offset)) {\n        return /* @__PURE__ */ new Date(NaN);\n      }\n    } else {\n      offset = getTimezoneOffsetInMilliseconds$1(new Date(timestamp + time));\n      offset = getTimezoneOffsetInMilliseconds$1(new Date(timestamp + time + offset));\n    }\n    return new Date(timestamp + time + offset);\n  } else {\n    return /* @__PURE__ */ new Date(NaN);\n  }\n}\nfunction splitDateString(dateString) {\n  var dateStrings = {};\n  var parts = patterns.dateTimePattern.exec(dateString);\n  var timeString;\n  if (!parts) {\n    parts = patterns.datePattern.exec(dateString);\n    if (parts) {\n      dateStrings.date = parts[1];\n      timeString = parts[2];\n    } else {\n      dateStrings.date = null;\n      timeString = dateString;\n    }\n  } else {\n    dateStrings.date = parts[1];\n    timeString = parts[3];\n  }\n  if (timeString) {\n    var token2 = patterns.timeZone.exec(timeString);\n    if (token2) {\n      dateStrings.time = timeString.replace(token2[1], \"\");\n      dateStrings.timeZone = token2[1].trim();\n    } else {\n      dateStrings.time = timeString;\n    }\n  }\n  return dateStrings;\n}\nfunction parseYear(dateString, additionalDigits) {\n  var patternYYY = patterns.YYY[additionalDigits];\n  var patternYYYYY = patterns.YYYYY[additionalDigits];\n  var token2;\n  token2 = patterns.YYYY.exec(dateString) || patternYYYYY.exec(dateString);\n  if (token2) {\n    var yearString = token2[1];\n    return {\n      year: parseInt(yearString, 10),\n      restDateString: dateString.slice(yearString.length)\n    };\n  }\n  token2 = patterns.YY.exec(dateString) || patternYYY.exec(dateString);\n  if (token2) {\n    var centuryString = token2[1];\n    return {\n      year: parseInt(centuryString, 10) * 100,\n      restDateString: dateString.slice(centuryString.length)\n    };\n  }\n  return {\n    year: null\n  };\n}\nfunction parseDate$1(dateString, year) {\n  if (year === null) {\n    return null;\n  }\n  var token2;\n  var date;\n  var month;\n  var week;\n  if (dateString.length === 0) {\n    date = /* @__PURE__ */ new Date(0);\n    date.setUTCFullYear(year);\n    return date;\n  }\n  token2 = patterns.MM.exec(dateString);\n  if (token2) {\n    date = /* @__PURE__ */ new Date(0);\n    month = parseInt(token2[1], 10) - 1;\n    if (!validateDate(year, month)) {\n      return /* @__PURE__ */ new Date(NaN);\n    }\n    date.setUTCFullYear(year, month);\n    return date;\n  }\n  token2 = patterns.DDD.exec(dateString);\n  if (token2) {\n    date = /* @__PURE__ */ new Date(0);\n    var dayOfYear = parseInt(token2[1], 10);\n    if (!validateDayOfYearDate(year, dayOfYear)) {\n      return /* @__PURE__ */ new Date(NaN);\n    }\n    date.setUTCFullYear(year, 0, dayOfYear);\n    return date;\n  }\n  token2 = patterns.MMDD.exec(dateString);\n  if (token2) {\n    date = /* @__PURE__ */ new Date(0);\n    month = parseInt(token2[1], 10) - 1;\n    var day = parseInt(token2[2], 10);\n    if (!validateDate(year, month, day)) {\n      return /* @__PURE__ */ new Date(NaN);\n    }\n    date.setUTCFullYear(year, month, day);\n    return date;\n  }\n  token2 = patterns.Www.exec(dateString);\n  if (token2) {\n    week = parseInt(token2[1], 10) - 1;\n    if (!validateWeekDate(year, week)) {\n      return /* @__PURE__ */ new Date(NaN);\n    }\n    return dayOfISOWeekYear(year, week);\n  }\n  token2 = patterns.WwwD.exec(dateString);\n  if (token2) {\n    week = parseInt(token2[1], 10) - 1;\n    var dayOfWeek = parseInt(token2[2], 10) - 1;\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return /* @__PURE__ */ new Date(NaN);\n    }\n    return dayOfISOWeekYear(year, week, dayOfWeek);\n  }\n  return null;\n}\nfunction parseTime(timeString) {\n  var token2;\n  var hours2;\n  var minutes;\n  token2 = patterns.HH.exec(timeString);\n  if (token2) {\n    hours2 = parseFloat(token2[1].replace(\",\", \".\"));\n    if (!validateTime(hours2)) {\n      return NaN;\n    }\n    return hours2 % 24 * MILLISECONDS_IN_HOUR;\n  }\n  token2 = patterns.HHMM.exec(timeString);\n  if (token2) {\n    hours2 = parseInt(token2[1], 10);\n    minutes = parseFloat(token2[2].replace(\",\", \".\"));\n    if (!validateTime(hours2, minutes)) {\n      return NaN;\n    }\n    return hours2 % 24 * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE;\n  }\n  token2 = patterns.HHMMSS.exec(timeString);\n  if (token2) {\n    hours2 = parseInt(token2[1], 10);\n    minutes = parseInt(token2[2], 10);\n    var seconds = parseFloat(token2[3].replace(\",\", \".\"));\n    if (!validateTime(hours2, minutes, seconds)) {\n      return NaN;\n    }\n    return hours2 % 24 * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1e3;\n  }\n  return null;\n}\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  week = week || 0;\n  day = day || 0;\n  var date = /* @__PURE__ */ new Date(0);\n  date.setUTCFullYear(isoWeekYear, 0, 4);\n  var fourthOfJanuaryDay = date.getUTCDay() || 7;\n  var diff = week * 7 + day + 1 - fourthOfJanuaryDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\nfunction validateDate(year, month, date) {\n  if (month < 0 || month > 11) {\n    return false;\n  }\n  if (date != null) {\n    if (date < 1) {\n      return false;\n    }\n    var isLeapYear = isLeapYearIndex(year);\n    if (isLeapYear && date > DAYS_IN_MONTH_LEAP_YEAR[month]) {\n      return false;\n    }\n    if (!isLeapYear && date > DAYS_IN_MONTH[month]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction validateDayOfYearDate(year, dayOfYear) {\n  if (dayOfYear < 1) {\n    return false;\n  }\n  var isLeapYear = isLeapYearIndex(year);\n  if (isLeapYear && dayOfYear > 366) {\n    return false;\n  }\n  if (!isLeapYear && dayOfYear > 365) {\n    return false;\n  }\n  return true;\n}\nfunction validateWeekDate(year, week, day) {\n  if (week < 0 || week > 52) {\n    return false;\n  }\n  if (day != null && (day < 0 || day > 6)) {\n    return false;\n  }\n  return true;\n}\nfunction validateTime(hours2, minutes, seconds) {\n  if (hours2 != null && (hours2 < 0 || hours2 >= 25)) {\n    return false;\n  }\n  if (minutes != null && (minutes < 0 || minutes >= 60)) {\n    return false;\n  }\n  if (seconds != null && (seconds < 0 || seconds >= 60)) {\n    return false;\n  }\n  return true;\n}\nfunction requiredArgs(required, args) {\n  if (args.length < required) {\n    throw new TypeError(required + \" argument\" + (required > 1 ? \"s\" : \"\") + \" required, but only \" + args.length + \" present\");\n  }\n}\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function _typeof2(obj2) {\n      return typeof obj2;\n    };\n  } else {\n    _typeof = function _typeof2(obj2) {\n      return obj2 && typeof Symbol === \"function\" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? \"symbol\" : typeof obj2;\n    };\n  }\n  return _typeof(obj);\n}\nfunction toDate(argument) {\n  requiredArgs(1, arguments);\n  var argStr = Object.prototype.toString.call(argument);\n  if (argument instanceof Date || _typeof(argument) === \"object\" && argStr === \"[object Date]\") {\n    return new Date(argument.getTime());\n  } else if (typeof argument === \"number\" || argStr === \"[object Number]\") {\n    return new Date(argument);\n  } else {\n    if ((typeof argument === \"string\" || argStr === \"[object String]\") && typeof console !== \"undefined\") {\n      console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\");\n      console.warn(new Error().stack);\n    }\n    return /* @__PURE__ */ new Date(NaN);\n  }\n}\nfunction toInteger(dirtyNumber) {\n  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n    return NaN;\n  }\n  var number = Number(dirtyNumber);\n  if (isNaN(number)) {\n    return number;\n  }\n  return number < 0 ? Math.ceil(number) : Math.floor(number);\n}\nvar defaultOptions = {};\nfunction getDefaultOptions() {\n  return defaultOptions;\n}\nfunction startOfWeek$1(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions2 = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions2.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions2.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError(\"weekStartsOn must be between 0 and 6 inclusively\");\n  }\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setDate(date.getDate() - diff);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}\nfunction getTimezoneOffsetInMilliseconds(date) {\n  var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n  utcDate.setUTCFullYear(date.getFullYear());\n  return date.getTime() - utcDate.getTime();\n}\nvar MILLISECONDS_IN_WEEK$2 = 6048e5;\nfunction differenceInCalendarWeeks(dirtyDateLeft, dirtyDateRight, options) {\n  requiredArgs(2, arguments);\n  var startOfWeekLeft = startOfWeek$1(dirtyDateLeft, options);\n  var startOfWeekRight = startOfWeek$1(dirtyDateRight, options);\n  var timestampLeft = startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft);\n  var timestampRight = startOfWeekRight.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekRight);\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK$2);\n}\nfunction lastDayOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var month = date.getMonth();\n  date.setFullYear(date.getFullYear(), month + 1, 0);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}\nfunction startOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}\nfunction getWeeksInMonth(date, options) {\n  requiredArgs(1, arguments);\n  return differenceInCalendarWeeks(lastDayOfMonth(date), startOfMonth(date), options) + 1;\n}\nfunction getWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var defaultOptions2 = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions2.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError(\"firstWeekContainsDate must be between 1 and 7 inclusively\");\n  }\n  var firstWeekOfNextYear = /* @__PURE__ */ new Date(0);\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setHours(0, 0, 0, 0);\n  var startOfNextYear = startOfWeek$1(firstWeekOfNextYear, options);\n  var firstWeekOfThisYear = /* @__PURE__ */ new Date(0);\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setHours(0, 0, 0, 0);\n  var startOfThisYear = startOfWeek$1(firstWeekOfThisYear, options);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\nfunction startOfWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions2 = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions2.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n  var year = getWeekYear(dirtyDate, options);\n  var firstWeek = /* @__PURE__ */ new Date(0);\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  var date = startOfWeek$1(firstWeek, options);\n  return date;\n}\nvar MILLISECONDS_IN_WEEK$1 = 6048e5;\nfunction getWeek(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfWeek$1(date, options).getTime() - startOfWeekYear(date, options).getTime();\n  return Math.round(diff / MILLISECONDS_IN_WEEK$1) + 1;\n}\nfunction startOfISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  return startOfWeek$1(dirtyDate, {\n    weekStartsOn: 1\n  });\n}\nfunction getISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var fourthOfJanuaryOfNextYear = /* @__PURE__ */ new Date(0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n  var fourthOfJanuaryOfThisYear = /* @__PURE__ */ new Date(0);\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n  var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\nfunction startOfISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getISOWeekYear(dirtyDate);\n  var fourthOfJanuary = /* @__PURE__ */ new Date(0);\n  fourthOfJanuary.setFullYear(year, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  var date = startOfISOWeek(fourthOfJanuary);\n  return date;\n}\nvar MILLISECONDS_IN_WEEK = 6048e5;\nfunction getISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime();\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}\nfunction addDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n  if (isNaN(amount)) {\n    return /* @__PURE__ */ new Date(NaN);\n  }\n  if (!amount) {\n    return date;\n  }\n  date.setDate(date.getDate() + amount);\n  return date;\n}\nfunction addMonths(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n  if (isNaN(amount)) {\n    return /* @__PURE__ */ new Date(NaN);\n  }\n  if (!amount) {\n    return date;\n  }\n  var dayOfMonth = date.getDate();\n  var endOfDesiredMonth = new Date(date.getTime());\n  endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n  var daysInMonth = endOfDesiredMonth.getDate();\n  if (dayOfMonth >= daysInMonth) {\n    return endOfDesiredMonth;\n  } else {\n    date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n    return date;\n  }\n}\nfunction addYears(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMonths(dirtyDate, amount * 12);\n}\nconst viewAddressKeys = {\n  daily: [\"year\", \"month\", \"day\"],\n  weekly: [\"year\", \"month\", \"week\"],\n  monthly: [\"year\", \"month\"]\n};\nfunction getDays({\n  monthComps,\n  prevMonthComps,\n  nextMonthComps\n}, locale) {\n  const days = [];\n  const {\n    firstDayOfWeek,\n    firstWeekday,\n    isoWeeknumbers,\n    weeknumbers,\n    numDays,\n    numWeeks\n  } = monthComps;\n  const prevMonthDaysToShow = firstWeekday + (firstWeekday < firstDayOfWeek ? daysInWeek : 0) - firstDayOfWeek;\n  let prevMonth = true;\n  let thisMonth = false;\n  let nextMonth = false;\n  let position = 0;\n  const formatter = new Intl.DateTimeFormat(locale.id, {\n    weekday: \"long\",\n    year: \"numeric\",\n    month: \"short\",\n    day: \"numeric\"\n  });\n  let day = prevMonthComps.numDays - prevMonthDaysToShow + 1;\n  let dayFromEnd = prevMonthComps.numDays - day + 1;\n  let weekdayOrdinal = Math.floor((day - 1) / daysInWeek + 1);\n  let weekdayOrdinalFromEnd = 1;\n  let week = prevMonthComps.numWeeks;\n  let weekFromEnd = 1;\n  let month = prevMonthComps.month;\n  let year = prevMonthComps.year;\n  const today = /* @__PURE__ */ new Date();\n  const todayDay = today.getDate();\n  const todayMonth = today.getMonth() + 1;\n  const todayYear = today.getFullYear();\n  for (let w = 1; w <= weeksInMonth; w++) {\n    for (let i = 1, weekday = firstDayOfWeek; i <= daysInWeek; i++, weekday += weekday === daysInWeek ? 1 - daysInWeek : 1) {\n      if (prevMonth && weekday === firstWeekday) {\n        day = 1;\n        dayFromEnd = monthComps.numDays;\n        weekdayOrdinal = Math.floor((day - 1) / daysInWeek + 1);\n        weekdayOrdinalFromEnd = Math.floor((numDays - day) / daysInWeek + 1);\n        week = 1;\n        weekFromEnd = numWeeks;\n        month = monthComps.month;\n        year = monthComps.year;\n        prevMonth = false;\n        thisMonth = true;\n      }\n      const startDate = locale.getDateFromParams(year, month, day, 0, 0, 0, 0);\n      const noonDate = locale.getDateFromParams(year, month, day, 12, 0, 0, 0);\n      const endDate = locale.getDateFromParams(\n        year,\n        month,\n        day,\n        23,\n        59,\n        59,\n        999\n      );\n      const date = startDate;\n      const id = `${pad(year, 4)}-${pad(month, 2)}-${pad(day, 2)}`;\n      const weekdayPosition = i;\n      const weekdayPositionFromEnd = daysInWeek - i;\n      const weeknumber = weeknumbers[w - 1];\n      const isoWeeknumber = isoWeeknumbers[w - 1];\n      const isToday = day === todayDay && month === todayMonth && year === todayYear;\n      const isFirstDay = thisMonth && day === 1;\n      const isLastDay = thisMonth && day === numDays;\n      const onTop = w === 1;\n      const onBottom = w === numWeeks;\n      const onLeft = i === 1;\n      const onRight = i === daysInWeek;\n      const dayIndex = getDayIndex(year, month, day);\n      days.push({\n        locale,\n        id,\n        position: ++position,\n        label: day.toString(),\n        ariaLabel: formatter.format(new Date(year, month - 1, day)),\n        day,\n        dayFromEnd,\n        weekday,\n        weekdayPosition,\n        weekdayPositionFromEnd,\n        weekdayOrdinal,\n        weekdayOrdinalFromEnd,\n        week,\n        weekFromEnd,\n        weekPosition: w,\n        weeknumber,\n        isoWeeknumber,\n        month,\n        year,\n        date,\n        startDate,\n        endDate,\n        noonDate,\n        dayIndex,\n        isToday,\n        isFirstDay,\n        isLastDay,\n        isDisabled: !thisMonth,\n        isFocusable: !thisMonth,\n        isFocused: false,\n        inMonth: thisMonth,\n        inPrevMonth: prevMonth,\n        inNextMonth: nextMonth,\n        onTop,\n        onBottom,\n        onLeft,\n        onRight,\n        classes: [\n          `id-${id}`,\n          `day-${day}`,\n          `day-from-end-${dayFromEnd}`,\n          `weekday-${weekday}`,\n          `weekday-position-${weekdayPosition}`,\n          `weekday-ordinal-${weekdayOrdinal}`,\n          `weekday-ordinal-from-end-${weekdayOrdinalFromEnd}`,\n          `week-${week}`,\n          `week-from-end-${weekFromEnd}`,\n          {\n            \"is-today\": isToday,\n            \"is-first-day\": isFirstDay,\n            \"is-last-day\": isLastDay,\n            \"in-month\": thisMonth,\n            \"in-prev-month\": prevMonth,\n            \"in-next-month\": nextMonth,\n            \"on-top\": onTop,\n            \"on-bottom\": onBottom,\n            \"on-left\": onLeft,\n            \"on-right\": onRight\n          }\n        ]\n      });\n      if (thisMonth && isLastDay) {\n        thisMonth = false;\n        nextMonth = true;\n        day = 1;\n        dayFromEnd = numDays;\n        weekdayOrdinal = 1;\n        weekdayOrdinalFromEnd = Math.floor((numDays - day) / daysInWeek + 1);\n        week = 1;\n        weekFromEnd = nextMonthComps.numWeeks;\n        month = nextMonthComps.month;\n        year = nextMonthComps.year;\n      } else {\n        day++;\n        dayFromEnd--;\n        weekdayOrdinal = Math.floor((day - 1) / daysInWeek + 1);\n        weekdayOrdinalFromEnd = Math.floor((numDays - day) / daysInWeek + 1);\n      }\n    }\n    week++;\n    weekFromEnd--;\n  }\n  return days;\n}\nfunction getWeeks(days, showWeeknumbers, showIsoWeeknumbers, locale) {\n  const result = days.reduce((result2, day, i) => {\n    const weekIndex = Math.floor(i / 7);\n    let week = result2[weekIndex];\n    if (!week) {\n      week = {\n        id: `week-${weekIndex + 1}`,\n        title: \"\",\n        week: day.week,\n        weekPosition: day.weekPosition,\n        weeknumber: day.weeknumber,\n        isoWeeknumber: day.isoWeeknumber,\n        weeknumberDisplay: showWeeknumbers ? day.weeknumber : showIsoWeeknumbers ? day.isoWeeknumber : void 0,\n        days: []\n      };\n      result2[weekIndex] = week;\n    }\n    week.days.push(day);\n    return result2;\n  }, Array(days.length / daysInWeek));\n  result.forEach((week) => {\n    const fromDay = week.days[0];\n    const toDay = week.days[week.days.length - 1];\n    if (fromDay.month === toDay.month) {\n      week.title = `${locale.formatDate(fromDay.date, \"MMMM YYYY\")}`;\n    } else if (fromDay.year === toDay.year) {\n      week.title = `${locale.formatDate(\n        fromDay.date,\n        \"MMM\"\n      )} - ${locale.formatDate(toDay.date, \"MMM YYYY\")}`;\n    } else {\n      week.title = `${locale.formatDate(\n        fromDay.date,\n        \"MMM YYYY\"\n      )} - ${locale.formatDate(toDay.date, \"MMM YYYY\")}`;\n    }\n  });\n  return result;\n}\nfunction getWeekdays(week, locale) {\n  return week.days.map((day) => ({\n    label: locale.formatDate(day.date, locale.masks.weekdays),\n    weekday: day.weekday\n  }));\n}\nfunction getPageId(month, year) {\n  return `${year}.${pad(month, 2)}`;\n}\nfunction getPageAddressForDate(date, view, locale) {\n  return pick(\n    locale.getDateParts(locale.toDate(date)),\n    viewAddressKeys[view]\n  );\n}\nfunction addPages({ day, week, month, year }, count, view, locale) {\n  if (view === \"daily\" && day) {\n    const date = new Date(year, month - 1, day);\n    const newDate = addDays(date, count);\n    return {\n      day: newDate.getDate(),\n      month: newDate.getMonth() + 1,\n      year: newDate.getFullYear()\n    };\n  } else if (view === \"weekly\" && week) {\n    const comps = locale.getMonthParts(month, year);\n    const date = comps.firstDayOfMonth;\n    const newDate = addDays(date, (week - 1 + count) * 7);\n    const parts = locale.getDateParts(newDate);\n    return {\n      week: parts.week,\n      month: parts.month,\n      year: parts.year\n    };\n  } else {\n    const date = new Date(year, month - 1, 1);\n    const newDate = addMonths(date, count);\n    return {\n      month: newDate.getMonth() + 1,\n      year: newDate.getFullYear()\n    };\n  }\n}\nfunction pageIsValid(page) {\n  return page != null && page.month != null && page.year != null;\n}\nfunction pageIsBeforePage(page, comparePage) {\n  if (!pageIsValid(page) || !pageIsValid(comparePage))\n    return false;\n  page = page;\n  comparePage = comparePage;\n  if (page.year !== comparePage.year)\n    return page.year < comparePage.year;\n  if (page.month && comparePage.month && page.month !== comparePage.month)\n    return page.month < comparePage.month;\n  if (page.week && comparePage.week && page.week !== comparePage.week) {\n    return page.week < comparePage.week;\n  }\n  if (page.day && comparePage.day && page.day !== comparePage.day) {\n    return page.day < comparePage.day;\n  }\n  return false;\n}\nfunction pageIsAfterPage(page, comparePage) {\n  if (!pageIsValid(page) || !pageIsValid(comparePage))\n    return false;\n  page = page;\n  comparePage = comparePage;\n  if (page.year !== comparePage.year) {\n    return page.year > comparePage.year;\n  }\n  if (page.month && comparePage.month && page.month !== comparePage.month) {\n    return page.month > comparePage.month;\n  }\n  if (page.week && comparePage.week && page.week !== comparePage.week) {\n    return page.week > comparePage.week;\n  }\n  if (page.day && comparePage.day && page.day !== comparePage.day) {\n    return page.day > comparePage.day;\n  }\n  return false;\n}\nfunction pageIsBetweenPages(page, fromPage, toPage) {\n  return (page || false) && !pageIsBeforePage(page, fromPage) && !pageIsAfterPage(page, toPage);\n}\nfunction pageIsEqualToPage(aPage, bPage) {\n  if (!aPage && bPage)\n    return false;\n  if (aPage && !bPage)\n    return false;\n  if (!aPage && !bPage)\n    return true;\n  aPage = aPage;\n  bPage = bPage;\n  return aPage.year === bPage.year && aPage.month === bPage.month && aPage.week === bPage.week && aPage.day === bPage.day;\n}\nfunction pageRangeToArray(from, to, view, locale) {\n  if (!pageIsValid(from) || !pageIsValid(to))\n    return [];\n  const result = [];\n  while (!pageIsAfterPage(from, to)) {\n    result.push(from);\n    from = addPages(from, 1, view, locale);\n  }\n  return result;\n}\nfunction getPageKey(config) {\n  const { day, week, month, year } = config;\n  let id = `${year}-${pad(month, 2)}`;\n  if (week)\n    id = `${id}-w${week}`;\n  if (day)\n    id = `${id}-${pad(day, 2)}`;\n  return id;\n}\nfunction getCachedPage(config, locale) {\n  const { month, year, showWeeknumbers, showIsoWeeknumbers } = config;\n  const date = new Date(year, month - 1, 15);\n  const monthComps = locale.getMonthParts(month, year);\n  const prevMonthComps = locale.getPrevMonthParts(month, year);\n  const nextMonthComps = locale.getNextMonthParts(month, year);\n  const days = getDays({ monthComps, prevMonthComps, nextMonthComps }, locale);\n  const weeks = getWeeks(days, showWeeknumbers, showIsoWeeknumbers, locale);\n  const weekdays2 = getWeekdays(weeks[0], locale);\n  return {\n    id: getPageKey(config),\n    month,\n    year,\n    monthTitle: locale.formatDate(date, locale.masks.title),\n    shortMonthLabel: locale.formatDate(date, \"MMM\"),\n    monthLabel: locale.formatDate(date, \"MMMM\"),\n    shortYearLabel: year.toString().substring(2),\n    yearLabel: year.toString(),\n    monthComps,\n    prevMonthComps,\n    nextMonthComps,\n    days,\n    weeks,\n    weekdays: weekdays2\n  };\n}\nfunction getPage(config, cachedPage) {\n  const { day, week, view, trimWeeks } = config;\n  const page = {\n    ...cachedPage,\n    ...config,\n    title: \"\",\n    viewDays: [],\n    viewWeeks: []\n  };\n  switch (view) {\n    case \"daily\": {\n      let dayObj = page.days.find((d) => d.inMonth);\n      if (day) {\n        dayObj = page.days.find((d) => d.day === day && d.inMonth) || dayObj;\n      } else if (week) {\n        dayObj = page.days.find((d) => d.week === week && d.inMonth);\n      }\n      const weekObj = page.weeks[dayObj.week - 1];\n      page.viewWeeks = [weekObj];\n      page.viewDays = [dayObj];\n      page.week = dayObj.week;\n      page.weekTitle = weekObj.title;\n      page.day = dayObj.day;\n      page.dayTitle = dayObj.ariaLabel;\n      page.title = page.dayTitle;\n      break;\n    }\n    case \"weekly\": {\n      page.week = week || 1;\n      const weekObj = page.weeks[page.week - 1];\n      page.viewWeeks = [weekObj];\n      page.viewDays = weekObj.days;\n      page.weekTitle = weekObj.title;\n      page.title = page.weekTitle;\n      break;\n    }\n    default: {\n      page.title = page.monthTitle;\n      page.viewWeeks = page.weeks.slice(\n        0,\n        trimWeeks ? page.monthComps.numWeeks : void 0\n      );\n      page.viewDays = page.days;\n      break;\n    }\n  }\n  return page;\n}\nclass Cache {\n  constructor(size, createKey, createItem) {\n    __publicField(this, \"keys\", []);\n    __publicField(this, \"store\", {});\n    this.size = size;\n    this.createKey = createKey;\n    this.createItem = createItem;\n  }\n  get(...args) {\n    const key = this.createKey(...args);\n    return this.store[key];\n  }\n  getOrSet(...args) {\n    const key = this.createKey(...args);\n    if (this.store[key])\n      return this.store[key];\n    const item = this.createItem(...args);\n    if (this.keys.length >= this.size) {\n      const removeKey = this.keys.shift();\n      if (removeKey != null) {\n        delete this.store[removeKey];\n      }\n    }\n    this.keys.push(key);\n    this.store[key] = item;\n    return item;\n  }\n}\nclass DateRange {\n  constructor(config, locale = new Locale()) {\n    __publicField(this, \"order\");\n    __publicField(this, \"locale\");\n    __publicField(this, \"start\", null);\n    __publicField(this, \"end\", null);\n    __publicField(this, \"repeat\", null);\n    var _a;\n    this.locale = locale;\n    const { start, end, span, order, repeat } = config;\n    if (isDate(start)) {\n      this.start = locale.getDateParts(start);\n    }\n    if (isDate(end)) {\n      this.end = locale.getDateParts(end);\n    } else if (this.start != null && span) {\n      this.end = locale.getDateParts(addDays(this.start.date, span - 1));\n    }\n    this.order = order ?? 0;\n    if (repeat) {\n      this.repeat = new DateRepeat(\n        {\n          from: (_a = this.start) == null ? void 0 : _a.date,\n          ...repeat\n        },\n        {\n          locale: this.locale\n        }\n      );\n    }\n  }\n  static fromMany(ranges, locale) {\n    return (isArray(ranges) ? ranges : [ranges]).filter((d) => d).map((d) => DateRange.from(d, locale));\n  }\n  static from(source, locale) {\n    if (source instanceof DateRange)\n      return source;\n    const config = {\n      start: null,\n      end: null\n    };\n    if (source != null) {\n      if (isArray(source)) {\n        config.start = source[0] ?? null;\n        config.end = source[1] ?? null;\n      } else if (isObject(source)) {\n        Object.assign(config, source);\n      } else {\n        config.start = source;\n        config.end = source;\n      }\n    }\n    if (config.start != null)\n      config.start = new Date(config.start);\n    if (config.end != null)\n      config.end = new Date(config.end);\n    return new DateRange(config, locale);\n  }\n  get opts() {\n    const { order, locale } = this;\n    return { order, locale };\n  }\n  get hasRepeat() {\n    return !!this.repeat;\n  }\n  get isSingleDay() {\n    const { start, end } = this;\n    return start && end && start.year === end.year && start.month === end.month && start.day === end.day;\n  }\n  get isMultiDay() {\n    return !this.isSingleDay;\n  }\n  get daySpan() {\n    if (this.start == null || this.end == null) {\n      if (this.hasRepeat)\n        return 1;\n      return Infinity;\n    }\n    return this.end.dayIndex - this.start.dayIndex;\n  }\n  startsOnDay(dayParts) {\n    var _a, _b;\n    return ((_a = this.start) == null ? void 0 : _a.dayIndex) === dayParts.dayIndex || !!((_b = this.repeat) == null ? void 0 : _b.passes(dayParts));\n  }\n  intersectsDay(dayIndex) {\n    return this.intersectsDayRange(dayIndex, dayIndex);\n  }\n  intersectsRange(range) {\n    var _a, _b;\n    return this.intersectsDayRange(\n      ((_a = range.start) == null ? void 0 : _a.dayIndex) ?? -Infinity,\n      ((_b = range.end) == null ? void 0 : _b.dayIndex) ?? Infinity\n    );\n  }\n  intersectsDayRange(startDayIndex, endDayIndex) {\n    if (this.start && this.start.dayIndex > endDayIndex)\n      return false;\n    if (this.end && this.end.dayIndex < startDayIndex)\n      return false;\n    return true;\n  }\n}\nclass DateRangeContext {\n  constructor() {\n    __publicField(this, \"records\", {});\n  }\n  render(data2, range, days) {\n    var _a, _b, _c, _d;\n    let result = null;\n    const startDayIndex = days[0].dayIndex;\n    const endDayIndex = days[days.length - 1].dayIndex;\n    if (range.hasRepeat) {\n      days.forEach((day) => {\n        var _a2, _b2;\n        if (range.startsOnDay(day)) {\n          const span = range.daySpan < Infinity ? range.daySpan : 1;\n          result = {\n            startDay: day.dayIndex,\n            startTime: ((_a2 = range.start) == null ? void 0 : _a2.time) ?? 0,\n            endDay: day.dayIndex + span - 1,\n            endTime: ((_b2 = range.end) == null ? void 0 : _b2.time) ?? MS_PER_DAY\n          };\n          this.getRangeRecords(data2).push(result);\n        }\n      });\n    } else if (range.intersectsDayRange(startDayIndex, endDayIndex)) {\n      result = {\n        startDay: ((_a = range.start) == null ? void 0 : _a.dayIndex) ?? -Infinity,\n        startTime: ((_b = range.start) == null ? void 0 : _b.time) ?? -Infinity,\n        endDay: ((_c = range.end) == null ? void 0 : _c.dayIndex) ?? Infinity,\n        endTime: ((_d = range.end) == null ? void 0 : _d.time) ?? Infinity\n      };\n      this.getRangeRecords(data2).push(result);\n    }\n    return result;\n  }\n  getRangeRecords(data2) {\n    let record = this.records[data2.key];\n    if (!record) {\n      record = {\n        ranges: [],\n        data: data2\n      };\n      this.records[data2.key] = record;\n    }\n    return record.ranges;\n  }\n  getCell(key, day) {\n    const cells = this.getCells(day);\n    const result = cells.find((cell) => cell.data.key === key);\n    return result;\n  }\n  cellExists(key, dayIndex) {\n    const records = this.records[key];\n    if (records == null)\n      return false;\n    return records.ranges.some(\n      (r) => r.startDay <= dayIndex && r.endDay >= dayIndex\n    );\n  }\n  getCells(day) {\n    const records = Object.values(this.records);\n    const result = [];\n    const { dayIndex } = day;\n    records.forEach(({ data: data2, ranges }) => {\n      ranges.filter((r) => r.startDay <= dayIndex && r.endDay >= dayIndex).forEach((range) => {\n        const onStart = dayIndex === range.startDay;\n        const onEnd = dayIndex === range.endDay;\n        const startTime = onStart ? range.startTime : 0;\n        const startDate = new Date(day.startDate.getTime() + startTime);\n        const endTime = onEnd ? range.endTime : MS_PER_DAY;\n        const endDate = new Date(day.endDate.getTime() + endTime);\n        const allDay = startTime === 0 && endTime === MS_PER_DAY;\n        const order = data2.order || 0;\n        result.push({\n          ...range,\n          data: data2,\n          onStart,\n          onEnd,\n          startTime,\n          startDate,\n          endTime,\n          endDate,\n          allDay,\n          order\n        });\n      });\n    });\n    result.sort((a, b) => a.order - b.order);\n    return result;\n  }\n}\nconst locales = {\n  // Arabic\n  ar: { dow: 7, L: \"D/‏M/‏YYYY\" },\n  // Bulgarian\n  bg: { dow: 2, L: \"D.MM.YYYY\" },\n  // Catalan\n  ca: { dow: 2, L: \"DD/MM/YYYY\" },\n  // Chinese (China)\n  \"zh-CN\": { dow: 2, L: \"YYYY/MM/DD\" },\n  // Chinese (Taiwan)\n  \"zh-TW\": { dow: 1, L: \"YYYY/MM/DD\" },\n  // Croatian\n  hr: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Czech\n  cs: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Danish\n  da: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Dutch\n  nl: { dow: 2, L: \"DD-MM-YYYY\" },\n  // English (US)\n  \"en-US\": { dow: 1, L: \"MM/DD/YYYY\" },\n  // English (Australia)\n  \"en-AU\": { dow: 2, L: \"DD/MM/YYYY\" },\n  // English (Canada)\n  \"en-CA\": { dow: 1, L: \"YYYY-MM-DD\" },\n  // English (Great Britain)\n  \"en-GB\": { dow: 2, L: \"DD/MM/YYYY\" },\n  // English (Ireland)\n  \"en-IE\": { dow: 2, L: \"DD-MM-YYYY\" },\n  // English (New Zealand)\n  \"en-NZ\": { dow: 2, L: \"DD/MM/YYYY\" },\n  // English (South Africa)\n  \"en-ZA\": { dow: 1, L: \"YYYY/MM/DD\" },\n  // Esperanto\n  eo: { dow: 2, L: \"YYYY-MM-DD\" },\n  // Estonian\n  et: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Finnish\n  fi: { dow: 2, L: \"DD.MM.YYYY\" },\n  // French\n  fr: { dow: 2, L: \"DD/MM/YYYY\" },\n  // French (Canada)\n  \"fr-CA\": { dow: 1, L: \"YYYY-MM-DD\" },\n  // French (Switzerland)\n  \"fr-CH\": { dow: 2, L: \"DD.MM.YYYY\" },\n  // German\n  de: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Hebrew\n  he: { dow: 1, L: \"DD.MM.YYYY\" },\n  // Indonesian\n  id: { dow: 2, L: \"DD/MM/YYYY\" },\n  // Italian\n  it: { dow: 2, L: \"DD/MM/YYYY\" },\n  // Japanese\n  ja: { dow: 1, L: \"YYYY年M月D日\" },\n  // Korean\n  ko: { dow: 1, L: \"YYYY.MM.DD\" },\n  // Latvian\n  lv: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Lithuanian\n  lt: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Macedonian\n  mk: { dow: 2, L: \"D.MM.YYYY\" },\n  // Norwegian\n  nb: { dow: 2, L: \"D. MMMM YYYY\" },\n  nn: { dow: 2, L: \"D. MMMM YYYY\" },\n  // Polish\n  pl: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Portuguese\n  pt: { dow: 2, L: \"DD/MM/YYYY\" },\n  // Romanian\n  ro: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Russian\n  ru: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Slovak\n  sk: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Spanish (Spain)\n  \"es-ES\": { dow: 2, L: \"DD/MM/YYYY\" },\n  // Spanish (Mexico)\n  \"es-MX\": { dow: 2, L: \"DD/MM/YYYY\" },\n  // Swedish\n  sv: { dow: 2, L: \"YYYY-MM-DD\" },\n  // Thai\n  th: { dow: 1, L: \"DD/MM/YYYY\" },\n  // Turkish\n  tr: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Ukrainian\n  uk: { dow: 2, L: \"DD.MM.YYYY\" },\n  // Vietnam\n  vi: { dow: 2, L: \"DD/MM/YYYY\" }\n};\nlocales.en = locales[\"en-US\"];\nlocales.es = locales[\"es-ES\"];\nlocales.no = locales.nb;\nlocales.zh = locales[\"zh-CN\"];\nconst localeSettings = Object.entries(locales).reduce(\n  (res, [id, { dow, L }]) => {\n    res[id] = {\n      id,\n      firstDayOfWeek: dow,\n      masks: { L }\n    };\n    return res;\n  },\n  {}\n);\nconst title = \"MMMM YYYY\";\nconst weekdays = \"W\";\nconst navMonths = \"MMM\";\nconst hours = \"h A\";\nconst input = [\n  \"L\",\n  \"YYYY-MM-DD\",\n  \"YYYY/MM/DD\"\n];\nconst inputDateTime = [\n  \"L h:mm A\",\n  \"YYYY-MM-DD h:mm A\",\n  \"YYYY/MM/DD h:mm A\"\n];\nconst inputDateTime24hr = [\n  \"L HH:mm\",\n  \"YYYY-MM-DD HH:mm\",\n  \"YYYY/MM/DD HH:mm\"\n];\nconst inputTime = [\n  \"h:mm A\"\n];\nconst inputTime24hr = [\n  \"HH:mm\"\n];\nconst dayPopover = \"WWW, MMM D, YYYY\";\nconst data = [\n  \"L\",\n  \"YYYY-MM-DD\",\n  \"YYYY/MM/DD\"\n];\nconst model = \"iso\";\nconst iso = \"YYYY-MM-DDTHH:mm:ss.SSSZ\";\nconst masks = {\n  title,\n  weekdays,\n  navMonths,\n  hours,\n  input,\n  inputDateTime,\n  inputDateTime24hr,\n  inputTime,\n  inputTime24hr,\n  dayPopover,\n  data,\n  model,\n  iso\n};\nconst maxSwipeTime = 300;\nconst minHorizontalSwipeDistance = 60;\nconst maxVerticalSwipeDistance = 80;\nconst touch = {\n  maxSwipeTime,\n  minHorizontalSwipeDistance,\n  maxVerticalSwipeDistance\n};\nconst defaultConfig = {\n  componentPrefix: \"V\",\n  color: \"blue\",\n  isDark: false,\n  navVisibility: \"click\",\n  titlePosition: \"center\",\n  transition: \"slide-h\",\n  touch,\n  masks,\n  locales: localeSettings,\n  datePicker: {\n    updateOnInput: true,\n    inputDebounce: 1e3,\n    popover: {\n      visibility: \"hover-focus\",\n      placement: \"bottom-start\",\n      isInteractive: true\n    }\n  }\n};\nconst state = reactive(defaultConfig);\nconst defaultLocales = computed(() => {\n  return mapValues_1(state.locales, (l) => {\n    l.masks = defaultsDeep_1(l.masks, state.masks);\n    return l;\n  });\n});\nconst getDefault = (path) => {\n  if (typeof window !== \"undefined\" && has(window.__vcalendar__, path)) {\n    return get_1(window.__vcalendar__, path);\n  }\n  return get_1(state, path);\n};\nconst setupDefaults = (app, userDefaults) => {\n  app.config.globalProperties.$VCalendar = state;\n  return Object.assign(state, defaultsDeep_1(userDefaults, state));\n};\nconst DEFAULT_MONTH_CACHE_SIZE = 12;\nconst DEFAULT_PAGE_CACHE_SIZE = 5;\nfunction resolveConfig(config, locales2) {\n  const detLocale = new Intl.DateTimeFormat().resolvedOptions().locale;\n  let id;\n  if (isString_1(config)) {\n    id = config;\n  } else if (has(config, \"id\")) {\n    id = config.id;\n  }\n  id = (id || detLocale).toLowerCase();\n  const localeKeys = Object.keys(locales2);\n  const validKey = (k) => localeKeys.find((lk) => lk.toLowerCase() === k);\n  id = validKey(id) || validKey(id.substring(0, 2)) || detLocale;\n  const defLocale = {\n    ...locales2[\"en-IE\"],\n    ...locales2[id],\n    id,\n    monthCacheSize: DEFAULT_MONTH_CACHE_SIZE,\n    pageCacheSize: DEFAULT_PAGE_CACHE_SIZE\n  };\n  const result = isObject(config) ? defaultsDeep_1(config, defLocale) : defLocale;\n  return result;\n}\nclass Locale {\n  constructor(config = void 0, timezone) {\n    __publicField(this, \"id\");\n    __publicField(this, \"daysInWeek\");\n    __publicField(this, \"firstDayOfWeek\");\n    __publicField(this, \"masks\");\n    __publicField(this, \"timezone\");\n    __publicField(this, \"hourLabels\");\n    __publicField(this, \"dayNames\");\n    __publicField(this, \"dayNamesShort\");\n    __publicField(this, \"dayNamesShorter\");\n    __publicField(this, \"dayNamesNarrow\");\n    __publicField(this, \"monthNames\");\n    __publicField(this, \"monthNamesShort\");\n    __publicField(this, \"relativeTimeNames\");\n    __publicField(this, \"amPm\", [\"am\", \"pm\"]);\n    __publicField(this, \"monthCache\");\n    __publicField(this, \"pageCache\");\n    const { id, firstDayOfWeek, masks: masks2, monthCacheSize, pageCacheSize } = resolveConfig(config, defaultLocales.value);\n    this.monthCache = new Cache(\n      monthCacheSize,\n      getMonthPartsKey,\n      getMonthParts\n    );\n    this.pageCache = new Cache(pageCacheSize, getPageKey, getCachedPage);\n    this.id = id;\n    this.daysInWeek = daysInWeek;\n    this.firstDayOfWeek = clamp(firstDayOfWeek, 1, daysInWeek);\n    this.masks = masks2;\n    this.timezone = timezone || void 0;\n    this.hourLabels = this.getHourLabels();\n    this.dayNames = getDayNames(\"long\", this.id);\n    this.dayNamesShort = getDayNames(\"short\", this.id);\n    this.dayNamesShorter = this.dayNamesShort.map((s) => s.substring(0, 2));\n    this.dayNamesNarrow = getDayNames(\"narrow\", this.id);\n    this.monthNames = getMonthNames(\"long\", this.id);\n    this.monthNamesShort = getMonthNames(\"short\", this.id);\n    this.relativeTimeNames = getRelativeTimeNames(this.id);\n  }\n  formatDate(date, masks2) {\n    return formatDate(date, masks2, this);\n  }\n  parseDate(dateString, mask) {\n    return parseDate(dateString, mask, this);\n  }\n  toDate(d, opts = {}) {\n    const nullDate = /* @__PURE__ */ new Date(NaN);\n    let result = nullDate;\n    const { fillDate, mask, patch, rules } = opts;\n    if (isNumber_1(d)) {\n      opts.type = \"number\";\n      result = /* @__PURE__ */ new Date(+d);\n    } else if (isString_1(d)) {\n      opts.type = \"string\";\n      result = d ? parseDate(d, mask || \"iso\", this) : nullDate;\n    } else if (isDate(d)) {\n      opts.type = \"date\";\n      result = new Date(d.getTime());\n    } else if (isDateParts(d)) {\n      opts.type = \"object\";\n      result = this.getDateFromParts(d);\n    }\n    if (result && (patch || rules)) {\n      let parts = this.getDateParts(result);\n      if (patch && fillDate != null) {\n        const fillParts = this.getDateParts(this.toDate(fillDate));\n        parts = this.getDateParts(\n          this.toDate({ ...fillParts, ...pick(parts, DatePatchKeys[patch]) })\n        );\n      }\n      if (rules) {\n        parts = applyRulesForDateParts(parts, rules);\n      }\n      result = this.getDateFromParts(parts);\n    }\n    return result || nullDate;\n  }\n  toDateOrNull(d, opts = {}) {\n    const dte = this.toDate(d, opts);\n    return isNaN(dte.getTime()) ? null : dte;\n  }\n  fromDate(date, { type, mask } = {}) {\n    switch (type) {\n      case \"number\":\n        return date ? date.getTime() : NaN;\n      case \"string\":\n        return date ? this.formatDate(date, mask || \"iso\") : \"\";\n      case \"object\":\n        return date ? this.getDateParts(date) : null;\n      default:\n        return date ? new Date(date) : null;\n    }\n  }\n  range(source) {\n    return DateRange.from(source, this);\n  }\n  ranges(ranges) {\n    return DateRange.fromMany(ranges, this);\n  }\n  getDateParts(date) {\n    return getDateParts(date, this);\n  }\n  getDateFromParts(parts) {\n    return getDateFromParts(parts, this.timezone);\n  }\n  getDateFromParams(year, month, day, hours2, minutes, seconds, milliseconds) {\n    return this.getDateFromParts({\n      year,\n      month,\n      day,\n      hours: hours2,\n      minutes,\n      seconds,\n      milliseconds\n    });\n  }\n  getPage(config) {\n    const cachedPage = this.pageCache.getOrSet(config, this);\n    return getPage(config, cachedPage);\n  }\n  getMonthParts(month, year) {\n    const { firstDayOfWeek } = this;\n    return this.monthCache.getOrSet(month, year, firstDayOfWeek);\n  }\n  getThisMonthParts() {\n    const date = /* @__PURE__ */ new Date();\n    return this.getMonthParts(\n      date.getMonth() + 1,\n      date.getFullYear()\n    );\n  }\n  getPrevMonthParts(month, year) {\n    if (month === 1)\n      return this.getMonthParts(12, year - 1);\n    return this.getMonthParts(month - 1, year);\n  }\n  getNextMonthParts(month, year) {\n    if (month === 12)\n      return this.getMonthParts(1, year + 1);\n    return this.getMonthParts(month + 1, year);\n  }\n  getHourLabels() {\n    return getHourDates().map((d) => {\n      return this.formatDate(d, this.masks.hours);\n    });\n  }\n  getDayId(date) {\n    return this.formatDate(date, \"YYYY-MM-DD\");\n  }\n}\nvar GroupRuleType = /* @__PURE__ */ ((GroupRuleType2) => {\n  GroupRuleType2[\"Any\"] = \"any\";\n  GroupRuleType2[\"All\"] = \"all\";\n  return GroupRuleType2;\n})(GroupRuleType || {});\nvar IntervalRuleType = /* @__PURE__ */ ((IntervalRuleType2) => {\n  IntervalRuleType2[\"Days\"] = \"days\";\n  IntervalRuleType2[\"Weeks\"] = \"weeks\";\n  IntervalRuleType2[\"Months\"] = \"months\";\n  IntervalRuleType2[\"Years\"] = \"years\";\n  return IntervalRuleType2;\n})(IntervalRuleType || {});\nvar ComponentRuleType = /* @__PURE__ */ ((ComponentRuleType2) => {\n  ComponentRuleType2[\"Days\"] = \"days\";\n  ComponentRuleType2[\"Weekdays\"] = \"weekdays\";\n  ComponentRuleType2[\"Weeks\"] = \"weeks\";\n  ComponentRuleType2[\"Months\"] = \"months\";\n  ComponentRuleType2[\"Years\"] = \"years\";\n  return ComponentRuleType2;\n})(ComponentRuleType || {});\nvar OrdinalComponentRuleType = /* @__PURE__ */ ((OrdinalComponentRuleType2) => {\n  OrdinalComponentRuleType2[\"OrdinalWeekdays\"] = \"ordinalWeekdays\";\n  return OrdinalComponentRuleType2;\n})(OrdinalComponentRuleType || {});\nclass IntervalRule {\n  constructor(type, interval, from) {\n    __publicField(this, \"validated\", true);\n    this.type = type;\n    this.interval = interval;\n    this.from = from;\n    if (!this.from) {\n      console.error(\n        `A valid \"from\" date is required for date interval rule. This rule will be skipped.`\n      );\n      this.validated = false;\n    }\n  }\n  passes(dateParts) {\n    if (!this.validated)\n      return true;\n    const { date } = dateParts;\n    switch (this.type) {\n      case \"days\": {\n        return diffInDays(this.from.date, date) % this.interval === 0;\n      }\n      case \"weeks\": {\n        return diffInWeeks(this.from.date, date) % this.interval === 0;\n      }\n      case \"months\": {\n        return diffInMonths(this.from.date, date) % this.interval === 0;\n      }\n      case \"years\": {\n        return diffInYears(this.from.date, date) % this.interval === 0;\n      }\n      default: {\n        return false;\n      }\n    }\n  }\n}\nclass ComponentRule {\n  constructor(type, components2, validator, getter) {\n    __publicField(this, \"components\", []);\n    this.type = type;\n    this.validator = validator;\n    this.getter = getter;\n    this.components = this.normalizeComponents(components2);\n  }\n  static create(type, config) {\n    switch (type) {\n      case \"days\":\n        return new DaysRule(config);\n      case \"weekdays\":\n        return new WeekdaysRule(config);\n      case \"weeks\":\n        return new WeeksRule(config);\n      case \"months\":\n        return new MonthsRule(config);\n      case \"years\":\n        return new YearsRule(config);\n    }\n  }\n  normalizeComponents(components2) {\n    if (this.validator(components2))\n      return [components2];\n    if (!isArray(components2))\n      return [];\n    const result = [];\n    components2.forEach((component) => {\n      if (!this.validator(component)) {\n        console.error(\n          `Component value ${component} in invalid for \"${this.type}\" rule. This rule will be skipped.`\n        );\n        return;\n      }\n      result.push(component);\n    });\n    return result;\n  }\n  passes(dayParts) {\n    const comps = this.getter(dayParts);\n    const result = comps.some((comp) => this.components.includes(comp));\n    return result;\n  }\n}\nclass DaysRule extends ComponentRule {\n  constructor(components2) {\n    super(\n      \"days\",\n      components2,\n      isDayInMonth,\n      ({ day, dayFromEnd }) => [day, -dayFromEnd]\n    );\n  }\n}\nclass WeekdaysRule extends ComponentRule {\n  constructor(components2) {\n    super(\n      \"weekdays\",\n      components2,\n      isDayOfWeek,\n      ({ weekday }) => [weekday]\n    );\n  }\n}\nclass WeeksRule extends ComponentRule {\n  constructor(components2) {\n    super(\n      \"weeks\",\n      components2,\n      isWeekInMonth,\n      ({ week, weekFromEnd }) => [week, -weekFromEnd]\n    );\n  }\n}\nclass MonthsRule extends ComponentRule {\n  constructor(components2) {\n    super(\"months\", components2, isMonthInYear, ({ month }) => [\n      month\n    ]);\n  }\n}\nclass YearsRule extends ComponentRule {\n  constructor(components2) {\n    super(\"years\", components2, isNumber_1, ({ year }) => [year]);\n  }\n}\nclass OrdinalComponentRule {\n  constructor(type, components2) {\n    __publicField(this, \"components\");\n    this.type = type;\n    this.components = this.normalizeComponents(components2);\n  }\n  normalizeArrayConfig(config) {\n    const result = [];\n    config.forEach((numOrArray, i) => {\n      if (isNumber_1(numOrArray)) {\n        if (i === 0)\n          return;\n        if (!isOrdinalWeekInMonth(config[0])) {\n          console.error(\n            `Ordinal range for \"${this.type}\" rule is from -5 to -1 or 1 to 5. This rule will be skipped.`\n          );\n          return;\n        }\n        if (!isDayOfWeek(numOrArray)) {\n          console.error(\n            `Acceptable range for \"${this.type}\" rule is from 1 to 5. This rule will be skipped`\n          );\n          return;\n        }\n        result.push([config[0], numOrArray]);\n      } else if (isArray(numOrArray)) {\n        result.push(...this.normalizeArrayConfig(numOrArray));\n      }\n    });\n    return result;\n  }\n  normalizeComponents(config) {\n    const result = [];\n    config.forEach((numOrArray, i) => {\n      if (isNumber_1(numOrArray)) {\n        if (i === 0)\n          return;\n        if (!isOrdinalWeekInMonth(config[0])) {\n          console.error(\n            `Ordinal range for \"${this.type}\" rule is from -5 to -1 or 1 to 5. This rule will be skipped.`\n          );\n          return;\n        }\n        if (!isDayOfWeek(numOrArray)) {\n          console.error(\n            `Acceptable range for \"${this.type}\" rule is from 1 to 5. This rule will be skipped`\n          );\n          return;\n        }\n        result.push([config[0], numOrArray]);\n      } else if (isArray(numOrArray)) {\n        result.push(...this.normalizeArrayConfig(numOrArray));\n      }\n    });\n    return result;\n  }\n  passes(dayParts) {\n    const { weekday, weekdayOrdinal, weekdayOrdinalFromEnd } = dayParts;\n    return this.components.some(\n      ([ordinalWeek, ordinalWeekday]) => (ordinalWeek === weekdayOrdinal || ordinalWeek === -weekdayOrdinalFromEnd) && weekday === ordinalWeekday\n    );\n  }\n}\nclass FunctionRule {\n  constructor(fn) {\n    __publicField(this, \"type\", \"function\");\n    __publicField(this, \"validated\", true);\n    this.fn = fn;\n    if (!isFunction_1(fn)) {\n      console.error(\n        `The function rule requires a valid function. This rule will be skipped.`\n      );\n      this.validated = false;\n    }\n  }\n  passes(dayParts) {\n    if (!this.validated)\n      return true;\n    return this.fn(dayParts);\n  }\n}\nclass DateRepeat {\n  constructor(config, options = {}, parent) {\n    __publicField(this, \"validated\", true);\n    __publicField(this, \"config\");\n    __publicField(this, \"type\", GroupRuleType.Any);\n    __publicField(this, \"from\");\n    __publicField(this, \"until\");\n    __publicField(this, \"rules\", []);\n    __publicField(this, \"locale\", new Locale());\n    this.parent = parent;\n    if (options.locale)\n      this.locale = options.locale;\n    this.config = config;\n    if (isFunction_1(config)) {\n      this.type = GroupRuleType.All;\n      this.rules = [new FunctionRule(config)];\n    } else if (isArray(config)) {\n      this.type = GroupRuleType.Any;\n      this.rules = config.map((c) => new DateRepeat(c, options, this));\n    } else if (isObject(config)) {\n      this.type = GroupRuleType.All;\n      this.from = config.from ? this.locale.getDateParts(config.from) : parent == null ? void 0 : parent.from;\n      this.until = config.until ? this.locale.getDateParts(config.until) : parent == null ? void 0 : parent.until;\n      this.rules = this.getObjectRules(config);\n    } else {\n      console.error(\"Rule group configuration must be an object or an array.\");\n      this.validated = false;\n    }\n  }\n  getObjectRules(config) {\n    const rules = [];\n    if (config.every) {\n      if (isString_1(config.every)) {\n        config.every = [1, `${config.every}s`];\n      }\n      if (isArray(config.every)) {\n        const [interval = 1, type = IntervalRuleType.Days] = config.every;\n        rules.push(new IntervalRule(type, interval, this.from));\n      }\n    }\n    Object.values(ComponentRuleType).forEach((type) => {\n      if (!(type in config))\n        return;\n      rules.push(ComponentRule.create(type, config[type]));\n    });\n    Object.values(OrdinalComponentRuleType).forEach((type) => {\n      if (!(type in config))\n        return;\n      rules.push(new OrdinalComponentRule(type, config[type]));\n    });\n    if (config.on != null) {\n      if (!isArray(config.on))\n        config.on = [config.on];\n      rules.push(\n        new DateRepeat(config.on, { locale: this.locale }, this.parent)\n      );\n    }\n    return rules;\n  }\n  passes(dayParts) {\n    if (!this.validated)\n      return true;\n    if (this.from && dayParts.dayIndex <= this.from.dayIndex)\n      return false;\n    if (this.until && dayParts.dayIndex >= this.until.dayIndex)\n      return false;\n    if (this.type === GroupRuleType.Any) {\n      return this.rules.some((r) => r.passes(dayParts));\n    }\n    return this.rules.every((r) => r.passes(dayParts));\n  }\n}\nfunction isDayInMonth(dayInMonth) {\n  if (!isNumber_1(dayInMonth))\n    return false;\n  return dayInMonth >= 1 && dayInMonth <= 31;\n}\nfunction isDayOfWeek(dayOfWeek) {\n  if (!isNumber_1(dayOfWeek))\n    return false;\n  return dayOfWeek >= 1 && dayOfWeek <= 7;\n}\nfunction isWeekInMonth(weekInMonth) {\n  if (!isNumber_1(weekInMonth))\n    return false;\n  return weekInMonth >= -6 && weekInMonth <= -1 || weekInMonth >= 1 && weekInMonth <= 6;\n}\nfunction isMonthInYear(monthInYear) {\n  if (!isNumber_1(monthInYear))\n    return false;\n  return monthInYear >= 1 && monthInYear <= 12;\n}\nfunction isOrdinalWeekInMonth(weekInMonth) {\n  if (!isNumber_1(weekInMonth))\n    return false;\n  if (weekInMonth < -5 || weekInMonth > 5 || weekInMonth === 0)\n    return false;\n  return true;\n}\nconst DatePatchKeys = {\n  dateTime: [\n    \"year\",\n    \"month\",\n    \"day\",\n    \"hours\",\n    \"minutes\",\n    \"seconds\",\n    \"milliseconds\"\n  ],\n  date: [\"year\", \"month\", \"day\"],\n  time: [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"]\n};\nconst daysInWeek = 7;\nconst weeksInMonth = 6;\nconst MS_PER_SECOND = 1e3;\nconst MS_PER_MINUTE = MS_PER_SECOND * 60;\nconst MS_PER_HOUR = MS_PER_MINUTE * 60;\nconst MS_PER_DAY = MS_PER_HOUR * 24;\nconst daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst maskMacros = [\"L\", \"iso\"];\nconst DATE_PART_RANGES = {\n  milliseconds: [0, 999, 3],\n  seconds: [0, 59, 2],\n  minutes: [0, 59, 2],\n  hours: [0, 23, 2]\n};\nconst token = /d{1,2}|W{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|Z{1,4}|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\nconst literal = /\\[([^]*?)\\]/gm;\nconst formatFlags = {\n  D(d) {\n    return d.day;\n  },\n  DD(d) {\n    return pad(d.day, 2);\n  },\n  // Do(d: DateParts, l: Locale) {\n  //   return l.DoFn(d.day);\n  // },\n  d(d) {\n    return d.weekday - 1;\n  },\n  dd(d) {\n    return pad(d.weekday - 1, 2);\n  },\n  W(d, l) {\n    return l.dayNamesNarrow[d.weekday - 1];\n  },\n  WW(d, l) {\n    return l.dayNamesShorter[d.weekday - 1];\n  },\n  WWW(d, l) {\n    return l.dayNamesShort[d.weekday - 1];\n  },\n  WWWW(d, l) {\n    return l.dayNames[d.weekday - 1];\n  },\n  M(d) {\n    return d.month;\n  },\n  MM(d) {\n    return pad(d.month, 2);\n  },\n  MMM(d, l) {\n    return l.monthNamesShort[d.month - 1];\n  },\n  MMMM(d, l) {\n    return l.monthNames[d.month - 1];\n  },\n  YY(d) {\n    return String(d.year).substr(2);\n  },\n  YYYY(d) {\n    return pad(d.year, 4);\n  },\n  h(d) {\n    return d.hours % 12 || 12;\n  },\n  hh(d) {\n    return pad(d.hours % 12 || 12, 2);\n  },\n  H(d) {\n    return d.hours;\n  },\n  HH(d) {\n    return pad(d.hours, 2);\n  },\n  m(d) {\n    return d.minutes;\n  },\n  mm(d) {\n    return pad(d.minutes, 2);\n  },\n  s(d) {\n    return d.seconds;\n  },\n  ss(d) {\n    return pad(d.seconds, 2);\n  },\n  S(d) {\n    return Math.round(d.milliseconds / 100);\n  },\n  SS(d) {\n    return pad(Math.round(d.milliseconds / 10), 2);\n  },\n  SSS(d) {\n    return pad(d.milliseconds, 3);\n  },\n  a(d, l) {\n    return d.hours < 12 ? l.amPm[0] : l.amPm[1];\n  },\n  A(d, l) {\n    return d.hours < 12 ? l.amPm[0].toUpperCase() : l.amPm[1].toUpperCase();\n  },\n  Z() {\n    return \"Z\";\n  },\n  ZZ(d) {\n    const o = d.timezoneOffset;\n    return `${o > 0 ? \"-\" : \"+\"}${pad(Math.floor(Math.abs(o) / 60), 2)}`;\n  },\n  ZZZ(d) {\n    const o = d.timezoneOffset;\n    return `${o > 0 ? \"-\" : \"+\"}${pad(\n      Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60,\n      4\n    )}`;\n  },\n  ZZZZ(d) {\n    const o = d.timezoneOffset;\n    return `${o > 0 ? \"-\" : \"+\"}${pad(Math.floor(Math.abs(o) / 60), 2)}:${pad(\n      Math.abs(o) % 60,\n      2\n    )}`;\n  }\n};\nconst twoDigits = /\\d\\d?/;\nconst threeDigits = /\\d{3}/;\nconst fourDigits = /\\d{4}/;\nconst word = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\nconst noop = () => {\n};\nconst monthUpdate = (arrName) => (d, v, l) => {\n  const index2 = l[arrName].indexOf(\n    v.charAt(0).toUpperCase() + v.substr(1).toLowerCase()\n  );\n  if (~index2) {\n    d.month = index2;\n  }\n};\nconst parseFlags = {\n  D: [\n    twoDigits,\n    (d, v) => {\n      d.day = v;\n    }\n  ],\n  Do: [\n    new RegExp(twoDigits.source + word.source),\n    (d, v) => {\n      d.day = parseInt(v, 10);\n    }\n  ],\n  d: [twoDigits, noop],\n  W: [word, noop],\n  M: [\n    twoDigits,\n    (d, v) => {\n      d.month = v - 1;\n    }\n  ],\n  MMM: [word, monthUpdate(\"monthNamesShort\")],\n  MMMM: [word, monthUpdate(\"monthNames\")],\n  YY: [\n    twoDigits,\n    (d, v) => {\n      const da = /* @__PURE__ */ new Date();\n      const cent = +da.getFullYear().toString().substr(0, 2);\n      d.year = +`${v > 68 ? cent - 1 : cent}${v}`;\n    }\n  ],\n  YYYY: [\n    fourDigits,\n    (d, v) => {\n      d.year = v;\n    }\n  ],\n  S: [\n    /\\d/,\n    (d, v) => {\n      d.milliseconds = v * 100;\n    }\n  ],\n  SS: [\n    /\\d{2}/,\n    (d, v) => {\n      d.milliseconds = v * 10;\n    }\n  ],\n  SSS: [\n    threeDigits,\n    (d, v) => {\n      d.milliseconds = v;\n    }\n  ],\n  h: [\n    twoDigits,\n    (d, v) => {\n      d.hours = v;\n    }\n  ],\n  m: [\n    twoDigits,\n    (d, v) => {\n      d.minutes = v;\n    }\n  ],\n  s: [\n    twoDigits,\n    (d, v) => {\n      d.seconds = v;\n    }\n  ],\n  a: [\n    word,\n    (d, v, l) => {\n      const val = v.toLowerCase();\n      if (val === l.amPm[0]) {\n        d.isPm = false;\n      } else if (val === l.amPm[1]) {\n        d.isPm = true;\n      }\n    }\n  ],\n  Z: [\n    /[^\\s]*?[+-]\\d\\d:?\\d\\d|[^\\s]*?Z?/,\n    (d, v) => {\n      if (v === \"Z\")\n        v = \"+00:00\";\n      const parts = `${v}`.match(/([+-]|\\d\\d)/gi);\n      if (parts) {\n        const minutes = +parts[1] * 60 + parseInt(parts[2], 10);\n        d.timezoneOffset = parts[0] === \"+\" ? minutes : -minutes;\n      }\n    }\n  ]\n};\nparseFlags.DD = parseFlags.D;\nparseFlags.dd = parseFlags.d;\nparseFlags.WWWW = parseFlags.WWW = parseFlags.WW = parseFlags.W;\nparseFlags.MM = parseFlags.M;\nparseFlags.mm = parseFlags.m;\nparseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;\nparseFlags.ss = parseFlags.s;\nparseFlags.A = parseFlags.a;\nparseFlags.ZZZZ = parseFlags.ZZZ = parseFlags.ZZ = parseFlags.Z;\nfunction normalizeMasks(masks2, locale) {\n  return (arrayHasItems(masks2) && masks2 || [\n    isString_1(masks2) && masks2 || \"YYYY-MM-DD\"\n  ]).map(\n    (m) => maskMacros.reduce(\n      (prev, curr) => prev.replace(curr, locale.masks[curr] || \"\"),\n      m\n    )\n  );\n}\nfunction isDateParts(parts) {\n  return isObject(parts) && \"year\" in parts && \"month\" in parts && \"day\" in parts;\n}\nfunction startOfWeek(date, firstDayOfWeek = 1) {\n  const day = date.getDay() + 1;\n  const daysToAdd = day >= firstDayOfWeek ? firstDayOfWeek - day : -(7 - (firstDayOfWeek - day));\n  return addDays(date, daysToAdd);\n}\nfunction getDayIndex(year, month, day) {\n  const utcDate = Date.UTC(year, month - 1, day);\n  return diffInDays(/* @__PURE__ */ new Date(0), new Date(utcDate));\n}\nfunction diffInDays(d1, d2) {\n  return Math.round((d2.getTime() - d1.getTime()) / MS_PER_DAY);\n}\nfunction diffInWeeks(d1, d2) {\n  return Math.ceil(diffInDays(startOfWeek(d1), startOfWeek(d2)) / 7);\n}\nfunction diffInYears(d1, d2) {\n  return d2.getUTCFullYear() - d1.getUTCFullYear();\n}\nfunction diffInMonths(d1, d2) {\n  return diffInYears(d1, d2) * 12 + (d2.getMonth() - d1.getMonth());\n}\nfunction getDateFromParts(parts, timezone = \"\") {\n  const d = /* @__PURE__ */ new Date();\n  const {\n    year = d.getFullYear(),\n    month = d.getMonth() + 1,\n    day = d.getDate(),\n    hours: hrs = 0,\n    minutes: min = 0,\n    seconds: sec = 0,\n    milliseconds: ms = 0\n  } = parts;\n  if (timezone) {\n    const dateString = `${pad(year, 4)}-${pad(month, 2)}-${pad(day, 2)}T${pad(\n      hrs,\n      2\n    )}:${pad(min, 2)}:${pad(sec, 2)}.${pad(ms, 3)}`;\n    return toDate$1(dateString, { timeZone: timezone });\n  }\n  return new Date(year, month - 1, day, hrs, min, sec, ms);\n}\nfunction getDateParts(date, locale) {\n  let tzDate = new Date(date.getTime());\n  if (locale.timezone) {\n    tzDate = new Date(\n      date.toLocaleString(\"en-US\", { timeZone: locale.timezone })\n    );\n    tzDate.setMilliseconds(date.getMilliseconds());\n  }\n  const milliseconds = tzDate.getMilliseconds();\n  const seconds = tzDate.getSeconds();\n  const minutes = tzDate.getMinutes();\n  const hours2 = tzDate.getHours();\n  const time = milliseconds + seconds * MS_PER_SECOND + minutes * MS_PER_MINUTE + hours2 * MS_PER_HOUR;\n  const month = tzDate.getMonth() + 1;\n  const year = tzDate.getFullYear();\n  const monthParts = locale.getMonthParts(month, year);\n  const day = tzDate.getDate();\n  const dayFromEnd = monthParts.numDays - day + 1;\n  const weekday = tzDate.getDay() + 1;\n  const weekdayOrdinal = Math.floor((day - 1) / 7 + 1);\n  const weekdayOrdinalFromEnd = Math.floor((monthParts.numDays - day) / 7 + 1);\n  const week = Math.ceil(\n    (day + Math.abs(monthParts.firstWeekday - monthParts.firstDayOfWeek)) / 7\n  );\n  const weekFromEnd = monthParts.numWeeks - week + 1;\n  const weeknumber = monthParts.weeknumbers[week];\n  const dayIndex = getDayIndex(year, month, day);\n  const parts = {\n    milliseconds,\n    seconds,\n    minutes,\n    hours: hours2,\n    time,\n    day,\n    dayFromEnd,\n    weekday,\n    weekdayOrdinal,\n    weekdayOrdinalFromEnd,\n    week,\n    weekFromEnd,\n    weeknumber,\n    month,\n    year,\n    date: tzDate,\n    dateTime: tzDate.getTime(),\n    dayIndex,\n    timezoneOffset: 0,\n    isValid: true\n  };\n  return parts;\n}\nfunction getMonthPartsKey(month, year, firstDayOfWeek) {\n  return `${year}-${month}-${firstDayOfWeek}`;\n}\nfunction getMonthParts(month, year, firstDayOfWeek) {\n  const inLeapYear = year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n  const firstDayOfMonth = new Date(year, month - 1, 1);\n  const firstWeekday = firstDayOfMonth.getDay() + 1;\n  const numDays = month === 2 && inLeapYear ? 29 : daysInMonths[month - 1];\n  const weekStartsOn = firstDayOfWeek - 1;\n  const numWeeks = getWeeksInMonth(firstDayOfMonth, {\n    weekStartsOn\n  });\n  const weeknumbers = [];\n  const isoWeeknumbers = [];\n  for (let i = 0; i < numWeeks; i++) {\n    const date = addDays(firstDayOfMonth, i * 7);\n    weeknumbers.push(getWeek(date, { weekStartsOn }));\n    isoWeeknumbers.push(getISOWeek(date));\n  }\n  return {\n    firstDayOfWeek,\n    firstDayOfMonth,\n    inLeapYear,\n    firstWeekday,\n    numDays,\n    numWeeks,\n    month,\n    year,\n    weeknumbers,\n    isoWeeknumbers\n  };\n}\nfunction getWeekdayDates() {\n  const dates = [];\n  const year = 2020;\n  const month = 1;\n  const day = 5;\n  for (let i = 0; i < daysInWeek; i++) {\n    dates.push(\n      getDateFromParts({\n        year,\n        month,\n        day: day + i,\n        hours: 12\n      })\n    );\n  }\n  return dates;\n}\nfunction getDayNames(length, localeId = void 0) {\n  const dtf = new Intl.DateTimeFormat(localeId, {\n    weekday: length\n  });\n  return getWeekdayDates().map((d) => dtf.format(d));\n}\nfunction getHourDates() {\n  const dates = [];\n  for (let i = 0; i <= 24; i++) {\n    dates.push(new Date(2e3, 0, 1, i));\n  }\n  return dates;\n}\nfunction getRelativeTimeNames(localeId = void 0) {\n  const units = [\n    \"second\",\n    \"minute\",\n    \"hour\",\n    \"day\",\n    \"week\",\n    \"month\",\n    \"quarter\",\n    \"year\"\n  ];\n  const rtf = new Intl.RelativeTimeFormat(localeId);\n  return units.reduce((names, unit) => {\n    const parts = rtf.formatToParts(100, unit);\n    names[unit] = parts[1].unit;\n    return names;\n  }, {});\n}\nfunction getMonthDates() {\n  const dates = [];\n  for (let i = 0; i < 12; i++) {\n    dates.push(new Date(2e3, i, 15));\n  }\n  return dates;\n}\nfunction getMonthNames(length, localeId = void 0) {\n  const dtf = new Intl.DateTimeFormat(localeId, {\n    month: length,\n    timeZone: \"UTC\"\n  });\n  return getMonthDates().map((d) => dtf.format(d));\n}\nfunction datePartIsValid(part, rule, parts) {\n  if (isNumber_1(rule))\n    return rule === part;\n  if (isArray(rule))\n    return rule.includes(part);\n  if (isFunction_1(rule))\n    return rule(part, parts);\n  if (rule.min != null && rule.min > part)\n    return false;\n  if (rule.max != null && rule.max < part)\n    return false;\n  if (rule.interval != null && part % rule.interval !== 0)\n    return false;\n  return true;\n}\nfunction getDatePartOptions(parts, range, rule) {\n  const options = [];\n  const [min, max, padding] = range;\n  for (let i = min; i <= max; i++) {\n    if (rule == null || datePartIsValid(i, rule, parts)) {\n      options.push({\n        value: i,\n        label: pad(i, padding)\n      });\n    }\n  }\n  return options;\n}\nfunction getDatePartsOptions(parts, rules) {\n  return {\n    milliseconds: getDatePartOptions(\n      parts,\n      DATE_PART_RANGES.milliseconds,\n      rules.milliseconds\n    ),\n    seconds: getDatePartOptions(parts, DATE_PART_RANGES.seconds, rules.seconds),\n    minutes: getDatePartOptions(parts, DATE_PART_RANGES.minutes, rules.minutes),\n    hours: getDatePartOptions(parts, DATE_PART_RANGES.hours, rules.hours)\n  };\n}\nfunction getNearestDatePart(parts, range, value, rule) {\n  const options = getDatePartOptions(parts, range, rule);\n  const result = options.reduce((prev, opt) => {\n    if (opt.disabled)\n      return prev;\n    if (isNaN(prev))\n      return opt.value;\n    const diffPrev = Math.abs(prev - value);\n    const diffCurr = Math.abs(opt.value - value);\n    return diffCurr < diffPrev ? opt.value : prev;\n  }, NaN);\n  return isNaN(result) ? value : result;\n}\nfunction applyRulesForDateParts(dateParts, rules) {\n  const result = { ...dateParts };\n  Object.entries(rules).forEach(([key, rule]) => {\n    const range = DATE_PART_RANGES[key];\n    const value = dateParts[key];\n    result[key] = getNearestDatePart(\n      dateParts,\n      range,\n      value,\n      rule\n    );\n  });\n  return result;\n}\nfunction parseDate(dateString, mask, locale) {\n  const masks2 = normalizeMasks(mask, locale);\n  return masks2.map((m) => {\n    if (typeof m !== \"string\") {\n      throw new Error(\"Invalid mask\");\n    }\n    let str = dateString;\n    if (str.length > 1e3) {\n      return false;\n    }\n    let isValid = true;\n    const dp = {};\n    m.replace(token, ($0) => {\n      if (parseFlags[$0]) {\n        const info = parseFlags[$0];\n        const index2 = str.search(info[0]);\n        if (!~index2) {\n          isValid = false;\n        } else {\n          str.replace(info[0], (result) => {\n            info[1](dp, result, locale);\n            str = str.substr(index2 + result.length);\n            return result;\n          });\n        }\n      }\n      return parseFlags[$0] ? \"\" : $0.slice(1, $0.length - 1);\n    });\n    if (!isValid) {\n      return false;\n    }\n    const today = /* @__PURE__ */ new Date();\n    if (dp.hours != null) {\n      if (dp.isPm === true && +dp.hours !== 12) {\n        dp.hours = +dp.hours + 12;\n      } else if (dp.isPm === false && +dp.hours === 12) {\n        dp.hours = 0;\n      }\n    }\n    let date;\n    if (dp.timezoneOffset != null) {\n      dp.minutes = +(dp.minutes || 0) - +dp.timezoneOffset;\n      date = new Date(\n        Date.UTC(\n          dp.year || today.getFullYear(),\n          dp.month || 0,\n          dp.day || 1,\n          dp.hours || 0,\n          dp.minutes || 0,\n          dp.seconds || 0,\n          dp.milliseconds || 0\n        )\n      );\n    } else {\n      date = locale.getDateFromParts({\n        year: dp.year || today.getFullYear(),\n        month: (dp.month || 0) + 1,\n        day: dp.day || 1,\n        hours: dp.hours || 0,\n        minutes: dp.minutes || 0,\n        seconds: dp.seconds || 0,\n        milliseconds: dp.milliseconds || 0\n      });\n    }\n    return date;\n  }).find((d) => d) || new Date(dateString);\n}\nfunction formatDate(date, masks2, locale) {\n  if (date == null)\n    return \"\";\n  let mask = normalizeMasks(masks2, locale)[0];\n  if (/Z$/.test(mask))\n    locale.timezone = \"utc\";\n  const literals = [];\n  mask = mask.replace(literal, ($0, $1) => {\n    literals.push($1);\n    return \"??\";\n  });\n  const dateParts = locale.getDateParts(date);\n  mask = mask.replace(\n    token,\n    ($0) => $0 in formatFlags ? formatFlags[$0](dateParts, locale) : $0.slice(1, $0.length - 1)\n  );\n  return mask.replace(/\\?\\?/g, () => literals.shift());\n}\nlet attrKey = 0;\nclass Attribute {\n  constructor(config, theme, locale) {\n    __publicField(this, \"key\", \"\");\n    __publicField(this, \"hashcode\", \"\");\n    __publicField(this, \"highlight\", null);\n    __publicField(this, \"content\", null);\n    __publicField(this, \"dot\", null);\n    __publicField(this, \"bar\", null);\n    __publicField(this, \"event\", null);\n    __publicField(this, \"popover\", null);\n    __publicField(this, \"customData\", null);\n    __publicField(this, \"ranges\");\n    __publicField(this, \"hasRanges\", false);\n    __publicField(this, \"order\", 0);\n    __publicField(this, \"pinPage\", false);\n    __publicField(this, \"maxRepeatSpan\", 0);\n    __publicField(this, \"locale\");\n    const { dates } = Object.assign(\n      this,\n      { hashcode: \"\", order: 0, pinPage: false },\n      config\n    );\n    this.key || (this.key = ++attrKey);\n    this.locale = locale;\n    theme.normalizeGlyphs(this);\n    this.ranges = locale.ranges(dates ?? []);\n    this.hasRanges = !!arrayHasItems(this.ranges);\n    this.maxRepeatSpan = this.ranges.filter((r) => r.hasRepeat).map((r) => r.daySpan).reduce((res, curr) => Math.max(res, curr), 0);\n  }\n  intersectsRange({ start, end }) {\n    if (start == null || end == null)\n      return false;\n    const simpleRanges = this.ranges.filter((r) => !r.hasRepeat);\n    for (const range of simpleRanges) {\n      if (range.intersectsDayRange(start.dayIndex, end.dayIndex)) {\n        return true;\n      }\n    }\n    const repeatRanges = this.ranges.filter((r) => r.hasRepeat);\n    if (!repeatRanges.length)\n      return false;\n    let day = start;\n    if (this.maxRepeatSpan > 1) {\n      day = this.locale.getDateParts(addDays(day.date, -this.maxRepeatSpan));\n    }\n    while (day.dayIndex <= end.dayIndex) {\n      for (const range of repeatRanges) {\n        if (range.startsOnDay(day))\n          return true;\n      }\n      day = this.locale.getDateParts(addDays(day.date, 1));\n    }\n    return false;\n  }\n}\nfunction showPopover(opts) {\n  if (document) {\n    document.dispatchEvent(\n      new CustomEvent(\"show-popover\", {\n        detail: opts\n      })\n    );\n  }\n}\nfunction hidePopover(opts) {\n  if (document) {\n    document.dispatchEvent(\n      new CustomEvent(\"hide-popover\", {\n        detail: opts\n      })\n    );\n  }\n}\nfunction togglePopover(opts) {\n  if (document) {\n    document.dispatchEvent(\n      new CustomEvent(\"toggle-popover\", {\n        detail: opts\n      })\n    );\n  }\n}\nfunction getPopoverEventHandlers(opts) {\n  const { visibility } = opts;\n  const click = visibility === \"click\";\n  const hover = visibility === \"hover\";\n  const hoverFocus = visibility === \"hover-focus\";\n  const focus = visibility === \"focus\";\n  opts.autoHide = !click;\n  let hovered = false;\n  let focused = false;\n  const clickHandler = (e) => {\n    if (click) {\n      togglePopover({\n        ...opts,\n        target: opts.target || e.currentTarget\n      });\n      e.stopPropagation();\n    }\n  };\n  const mouseMoveHandler = (e) => {\n    if (!hovered) {\n      hovered = true;\n      if (hover || hoverFocus) {\n        showPopover({\n          ...opts,\n          target: opts.target || e.currentTarget\n        });\n      }\n    }\n  };\n  const mouseLeaveHandler = () => {\n    if (hovered) {\n      hovered = false;\n      if (hover || hoverFocus && !focused) {\n        hidePopover(opts);\n      }\n    }\n  };\n  const focusInHandler = (e) => {\n    if (!focused) {\n      focused = true;\n      if (focus || hoverFocus) {\n        showPopover({\n          ...opts,\n          target: opts.target || e.currentTarget\n        });\n      }\n    }\n  };\n  const focusOutHandler = (e) => {\n    if (focused && !elementContains(e.currentTarget, e.relatedTarget)) {\n      focused = false;\n      if (focus || hoverFocus && !hovered) {\n        hidePopover(opts);\n      }\n    }\n  };\n  const handlers = {};\n  switch (opts.visibility) {\n    case \"click\":\n      handlers.click = clickHandler;\n      break;\n    case \"hover\":\n      handlers.mousemove = mouseMoveHandler;\n      handlers.mouseleave = mouseLeaveHandler;\n      break;\n    case \"focus\":\n      handlers.focusin = focusInHandler;\n      handlers.focusout = focusOutHandler;\n      break;\n    case \"hover-focus\":\n      handlers.mousemove = mouseMoveHandler;\n      handlers.mouseleave = mouseLeaveHandler;\n      handlers.focusin = focusInHandler;\n      handlers.focusout = focusOutHandler;\n      break;\n  }\n  return handlers;\n}\nconst removeHandlers = (target) => {\n  const el = resolveEl(target);\n  if (el == null)\n    return;\n  const handlers = el.popoverHandlers;\n  if (!handlers || !handlers.length)\n    return;\n  handlers.forEach((handler) => handler());\n  delete el.popoverHandlers;\n};\nconst addHandlers = (target, opts) => {\n  const el = resolveEl(target);\n  if (el == null)\n    return;\n  const remove = [];\n  const handlers = getPopoverEventHandlers(opts);\n  Object.entries(handlers).forEach(([event, handler]) => {\n    remove.push(on(el, event, handler));\n  });\n  el.popoverHandlers = remove;\n};\nconst popoverDirective = {\n  mounted(el, binding) {\n    const { value } = binding;\n    if (!value)\n      return;\n    addHandlers(el, value);\n  },\n  updated(el, binding) {\n    const { oldValue, value } = binding;\n    const oldVisibility = oldValue == null ? void 0 : oldValue.visibility;\n    const newVisibility = value == null ? void 0 : value.visibility;\n    if (oldVisibility !== newVisibility) {\n      if (oldVisibility) {\n        removeHandlers(el);\n        if (!newVisibility)\n          hidePopover(oldValue);\n      }\n      if (newVisibility) {\n        addHandlers(el, value);\n      }\n    }\n  },\n  unmounted(el) {\n    removeHandlers(el);\n  }\n};\nconst addHorizontalSwipeHandler = (element, handler, {\n  maxSwipeTime: maxSwipeTime2,\n  minHorizontalSwipeDistance: minHorizontalSwipeDistance2,\n  maxVerticalSwipeDistance: maxVerticalSwipeDistance2\n}) => {\n  if (!element || !element.addEventListener || !isFunction_1(handler)) {\n    return null;\n  }\n  let startX = 0;\n  let startY = 0;\n  let startTime = null;\n  let isSwiping = false;\n  function touchStart(e) {\n    const t = e.changedTouches[0];\n    startX = t.screenX;\n    startY = t.screenY;\n    startTime = (/* @__PURE__ */ new Date()).getTime();\n    isSwiping = true;\n  }\n  function touchEnd(e) {\n    if (!isSwiping || !startTime)\n      return;\n    isSwiping = false;\n    const t = e.changedTouches[0];\n    const deltaX = t.screenX - startX;\n    const deltaY = t.screenY - startY;\n    const deltaTime = (/* @__PURE__ */ new Date()).getTime() - startTime;\n    if (deltaTime < maxSwipeTime2) {\n      if (Math.abs(deltaX) >= minHorizontalSwipeDistance2 && Math.abs(deltaY) <= maxVerticalSwipeDistance2) {\n        const arg = { toLeft: false, toRight: false };\n        if (deltaX < 0) {\n          arg.toLeft = true;\n        } else {\n          arg.toRight = true;\n        }\n        handler(arg);\n      }\n    }\n  }\n  on(element, \"touchstart\", touchStart, { passive: true });\n  on(element, \"touchend\", touchEnd, { passive: true });\n  return () => {\n    off(element, \"touchstart\", touchStart);\n    off(element, \"touchend\", touchEnd);\n  };\n};\nconst watchSkippers = {};\nconst skipWatcher = (watcher, durationMs = 10) => {\n  watchSkippers[watcher] = Date.now() + durationMs;\n};\nconst handleWatcher = (watcher, handler) => {\n  if (watcher in watchSkippers) {\n    const dateTime = watchSkippers[watcher];\n    if (Date.now() < dateTime)\n      return;\n    delete watchSkippers[watcher];\n  }\n  handler();\n};\nfunction windowExists() {\n  return typeof window !== \"undefined\";\n}\nfunction windowHasFeature(feature) {\n  return windowExists() && feature in window;\n}\nfunction useDarkMode(config) {\n  const isDark = ref(false);\n  const displayMode = computed(() => isDark.value ? \"dark\" : \"light\");\n  let mediaQuery;\n  let mutationObserver;\n  function mqListener(ev) {\n    isDark.value = ev.matches;\n  }\n  function setupSystem() {\n    if (windowHasFeature(\"matchMedia\")) {\n      mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n      mediaQuery.addEventListener(\"change\", mqListener);\n      isDark.value = mediaQuery.matches;\n    }\n  }\n  function moListener() {\n    const { selector = \":root\", darkClass = \"dark\" } = config.value;\n    const el = document.querySelector(selector);\n    isDark.value = el.classList.contains(darkClass);\n  }\n  function setupClass(config2) {\n    const { selector = \":root\", darkClass = \"dark\" } = config2;\n    if (windowExists() && selector && darkClass) {\n      const el = document.querySelector(selector);\n      if (el) {\n        mutationObserver = new MutationObserver(moListener);\n        mutationObserver.observe(el, {\n          attributes: true,\n          attributeFilter: [\"class\"]\n        });\n        isDark.value = el.classList.contains(darkClass);\n      }\n    }\n  }\n  function setup() {\n    stopObservers();\n    const type = typeof config.value;\n    if (type === \"string\" && config.value.toLowerCase() === \"system\") {\n      setupSystem();\n    } else if (type === \"object\") {\n      setupClass(config.value);\n    } else {\n      isDark.value = !!config.value;\n    }\n  }\n  const stopWatch = watch(() => config.value, () => setup(), {\n    immediate: true\n  });\n  function stopObservers() {\n    if (mediaQuery) {\n      mediaQuery.removeEventListener(\"change\", mqListener);\n      mediaQuery = void 0;\n    }\n    if (mutationObserver) {\n      mutationObserver.disconnect();\n      mutationObserver = void 0;\n    }\n  }\n  function cleanup() {\n    stopObservers();\n    stopWatch();\n  }\n  onUnmounted(() => cleanup());\n  return {\n    isDark,\n    displayMode,\n    cleanup\n  };\n}\nconst targetProps = [\"base\", \"start\", \"end\", \"startEnd\"];\nconst displayProps = [\n  \"class\",\n  \"wrapperClass\",\n  \"contentClass\",\n  \"style\",\n  \"contentStyle\",\n  \"color\",\n  \"fillMode\"\n];\nconst _defaultProfile = { base: {}, start: {}, end: {} };\nfunction normalizeConfig(color, config, defaultProfile = _defaultProfile) {\n  let rootColor = color;\n  let root2 = {};\n  if (config === true || isString_1(config)) {\n    rootColor = isString_1(config) ? config : rootColor;\n    root2 = { ...defaultProfile };\n  } else if (isObject(config)) {\n    if (hasAny(config, targetProps)) {\n      root2 = { ...config };\n    } else {\n      root2 = {\n        base: { ...config },\n        start: { ...config },\n        end: { ...config }\n      };\n    }\n  }\n  const result = defaultsDeep_1(\n    root2,\n    { start: root2.startEnd, end: root2.startEnd },\n    defaultProfile\n  );\n  Object.entries(result).forEach(([targetType, targetConfig]) => {\n    let targetColor = rootColor;\n    if (targetConfig === true || isString_1(targetConfig)) {\n      targetColor = isString_1(targetConfig) ? targetConfig : targetColor;\n      result[targetType] = { color: targetColor };\n    } else if (isObject(targetConfig)) {\n      if (hasAny(targetConfig, displayProps)) {\n        result[targetType] = { ...targetConfig };\n      } else {\n        result[targetType] = {};\n      }\n    }\n    defaultsDeep_1(result[targetType], { color: targetColor });\n  });\n  return result;\n}\nclass HighlightRenderer {\n  constructor() {\n    __publicField(this, \"type\", \"highlight\");\n  }\n  normalizeConfig(color, config) {\n    return normalizeConfig(color, config, {\n      base: { fillMode: \"light\" },\n      start: { fillMode: \"solid\" },\n      end: { fillMode: \"solid\" }\n    });\n  }\n  prepareRender(glyphs) {\n    glyphs.highlights = [];\n    if (!glyphs.content)\n      glyphs.content = [];\n  }\n  render({ data: data2, onStart, onEnd }, glyphs) {\n    const { key, highlight } = data2;\n    if (!highlight)\n      return;\n    const { highlights } = glyphs;\n    const { base, start, end } = highlight;\n    if (onStart && onEnd) {\n      highlights.push({\n        ...start,\n        key,\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${start.color}`,\n        class: [`vc-highlight vc-highlight-bg-${start.fillMode}`, start.class],\n        contentClass: [\n          `vc-attr vc-highlight-content-${start.fillMode} vc-${start.color}`,\n          start.contentClass\n        ]\n      });\n    } else if (onStart) {\n      highlights.push({\n        ...base,\n        key: `${key}-base`,\n        wrapperClass: `vc-day-layer vc-day-box-right-center vc-attr vc-${base.color}`,\n        class: [\n          `vc-highlight vc-highlight-base-start vc-highlight-bg-${base.fillMode}`,\n          base.class\n        ]\n      });\n      highlights.push({\n        ...start,\n        key,\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${start.color}`,\n        class: [`vc-highlight vc-highlight-bg-${start.fillMode}`, start.class],\n        contentClass: [\n          `vc-attr vc-highlight-content-${start.fillMode} vc-${start.color}`,\n          start.contentClass\n        ]\n      });\n    } else if (onEnd) {\n      highlights.push({\n        ...base,\n        key: `${key}-base`,\n        wrapperClass: `vc-day-layer vc-day-box-left-center vc-attr vc-${base.color}`,\n        class: [\n          `vc-highlight vc-highlight-base-end vc-highlight-bg-${base.fillMode}`,\n          base.class\n        ]\n      });\n      highlights.push({\n        ...end,\n        key,\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${end.color}`,\n        class: [`vc-highlight vc-highlight-bg-${end.fillMode}`, end.class],\n        contentClass: [\n          `vc-attr vc-highlight-content-${end.fillMode} vc-${end.color}`,\n          end.contentClass\n        ]\n      });\n    } else {\n      highlights.push({\n        ...base,\n        key: `${key}-middle`,\n        wrapperClass: `vc-day-layer vc-day-box-center-center vc-attr vc-${base.color}`,\n        class: [\n          `vc-highlight vc-highlight-base-middle vc-highlight-bg-${base.fillMode}`,\n          base.class\n        ],\n        contentClass: [\n          `vc-attr vc-highlight-content-${base.fillMode} vc-${base.color}`,\n          base.contentClass\n        ]\n      });\n    }\n  }\n}\nclass BaseRenderer {\n  constructor(type, collectionType) {\n    __publicField(this, \"type\", \"\");\n    __publicField(this, \"collectionType\", \"\");\n    this.type = type;\n    this.collectionType = collectionType;\n  }\n  normalizeConfig(color, config) {\n    return normalizeConfig(color, config);\n  }\n  prepareRender(glyphs) {\n    glyphs[this.collectionType] = [];\n  }\n  render({ data: data2, onStart, onEnd }, glyphs) {\n    const { key } = data2;\n    const item = data2[this.type];\n    if (!key || !item) {\n      return;\n    }\n    const collection = glyphs[this.collectionType];\n    const { base, start, end } = item;\n    if (onStart) {\n      collection.push({\n        ...start,\n        key,\n        class: [\n          `vc-${this.type} vc-${this.type}-start vc-${start.color} vc-attr`,\n          start.class\n        ]\n      });\n    } else if (onEnd) {\n      collection.push({\n        ...end,\n        key,\n        class: [\n          `vc-${this.type} vc-${this.type}-end vc-${end.color} vc-attr`,\n          end.class\n        ]\n      });\n    } else {\n      collection.push({\n        ...base,\n        key,\n        class: [\n          `vc-${this.type} vc-${this.type}-base vc-${base.color} vc-attr`,\n          base.class\n        ]\n      });\n    }\n  }\n}\nclass ContentRenderer extends BaseRenderer {\n  constructor() {\n    super(\"content\", \"content\");\n  }\n  normalizeConfig(_, config) {\n    return normalizeConfig(\"base\", config);\n  }\n}\nclass DotRenderer extends BaseRenderer {\n  constructor() {\n    super(\"dot\", \"dots\");\n  }\n}\nclass BarRenderer extends BaseRenderer {\n  constructor() {\n    super(\"bar\", \"bars\");\n  }\n}\nclass Theme {\n  constructor(color) {\n    __publicField(this, \"color\");\n    __publicField(this, \"renderers\", [\n      new ContentRenderer(),\n      new HighlightRenderer(),\n      new DotRenderer(),\n      new BarRenderer()\n    ]);\n    this.color = color;\n  }\n  normalizeGlyphs(attr) {\n    this.renderers.forEach((renderer) => {\n      const type = renderer.type;\n      if (attr[type] != null) {\n        attr[type] = renderer.normalizeConfig(this.color, attr[type]);\n      }\n    });\n  }\n  prepareRender(glyphs = {}) {\n    this.renderers.forEach((renderer) => {\n      renderer.prepareRender(glyphs);\n    });\n    return glyphs;\n  }\n  render(cell, glyphs) {\n    this.renderers.forEach((renderer) => {\n      renderer.render(cell, glyphs);\n    });\n  }\n}\nconst contextKey$4 = Symbol(\"__vc_base_context__\");\nconst propsDef$2 = {\n  color: {\n    type: String,\n    default: () => getDefault(\"color\")\n  },\n  isDark: {\n    type: [Boolean, String, Object],\n    default: () => getDefault(\"isDark\")\n  },\n  firstDayOfWeek: Number,\n  masks: Object,\n  locale: [String, Object],\n  timezone: String,\n  minDate: null,\n  maxDate: null,\n  disabledDates: null\n};\nfunction createBase(props) {\n  const color = computed(() => props.color ?? \"\");\n  const isDark = computed(() => props.isDark ?? false);\n  const { displayMode } = useDarkMode(isDark);\n  const theme = computed(() => new Theme(color.value));\n  const locale = computed(() => {\n    if (props.locale instanceof Locale)\n      return props.locale;\n    const config = isObject(props.locale) ? props.locale : {\n      id: props.locale,\n      firstDayOfWeek: props.firstDayOfWeek,\n      masks: props.masks\n    };\n    return new Locale(config, props.timezone);\n  });\n  const masks2 = computed(() => locale.value.masks);\n  const minDate = computed(() => props.minDate);\n  const maxDate = computed(() => props.maxDate);\n  const disabledDates = computed(() => {\n    const dates = props.disabledDates ? [...props.disabledDates] : [];\n    if (minDate.value != null) {\n      dates.push({\n        start: null,\n        end: addDays(locale.value.toDate(minDate.value), -1)\n      });\n    }\n    if (maxDate.value != null) {\n      dates.push({\n        start: addDays(locale.value.toDate(maxDate.value), 1),\n        end: null\n      });\n    }\n    return locale.value.ranges(dates);\n  });\n  const disabledAttribute = computed(() => {\n    return new Attribute(\n      {\n        key: \"disabled\",\n        dates: disabledDates.value,\n        order: 100\n      },\n      theme.value,\n      locale.value\n    );\n  });\n  const context = {\n    color,\n    isDark,\n    displayMode,\n    theme,\n    locale,\n    masks: masks2,\n    minDate,\n    maxDate,\n    disabledDates,\n    disabledAttribute\n  };\n  provide(contextKey$4, context);\n  return context;\n}\nfunction useOrCreateBase(props) {\n  return inject(contextKey$4, () => createBase(props), true);\n}\nfunction contextKey$3(slotKey) {\n  return `__vc_slot_${slotKey}__`;\n}\nfunction provideSlots(slots, remap = {}) {\n  Object.keys(slots).forEach((slotKey) => {\n    provide(contextKey$3(remap[slotKey] ?? slotKey), slots[slotKey]);\n  });\n}\nfunction useSlot(slotKey) {\n  return inject(contextKey$3(slotKey), null);\n}\nconst propsDef$1 = {\n  ...propsDef$2,\n  view: {\n    type: String,\n    default: \"monthly\",\n    validator(value) {\n      return [\"daily\", \"weekly\", \"monthly\"].includes(value);\n    }\n  },\n  rows: {\n    type: Number,\n    default: 1\n  },\n  columns: {\n    type: Number,\n    default: 1\n  },\n  step: Number,\n  titlePosition: {\n    type: String,\n    default: () => getDefault(\"titlePosition\")\n  },\n  navVisibility: {\n    type: String,\n    default: () => getDefault(\"navVisibility\")\n  },\n  showWeeknumbers: [Boolean, String],\n  showIsoWeeknumbers: [Boolean, String],\n  expanded: Boolean,\n  borderless: Boolean,\n  transparent: Boolean,\n  initialPage: Object,\n  initialPagePosition: { type: Number, default: 1 },\n  minPage: Object,\n  maxPage: Object,\n  transition: String,\n  attributes: Array,\n  trimWeeks: Boolean,\n  disablePageSwipe: Boolean\n};\nconst emitsDef = [\n  \"dayclick\",\n  \"daymouseenter\",\n  \"daymouseleave\",\n  \"dayfocusin\",\n  \"dayfocusout\",\n  \"daykeydown\",\n  \"weeknumberclick\",\n  \"transition-start\",\n  \"transition-end\",\n  \"did-move\",\n  \"update:view\",\n  \"update:pages\"\n];\nconst contextKey$2 = Symbol(\"__vc_calendar_context__\");\nfunction createCalendar(props, { slots, emit }) {\n  const containerRef = ref(null);\n  const focusedDay = ref(null);\n  const focusableDay = ref((/* @__PURE__ */ new Date()).getDate());\n  const inTransition = ref(false);\n  const navPopoverId = ref(Symbol());\n  const dayPopoverId = ref(Symbol());\n  const _view = ref(props.view);\n  const _pages = ref([]);\n  const transitionName = ref(\"\");\n  let transitionPromise = null;\n  let removeHandlers2 = null;\n  provideSlots(slots);\n  const {\n    theme,\n    color,\n    displayMode,\n    locale,\n    masks: masks2,\n    minDate,\n    maxDate,\n    disabledAttribute,\n    disabledDates\n  } = useOrCreateBase(props);\n  const count = computed(() => props.rows * props.columns);\n  const step = computed(() => props.step || count.value);\n  const firstPage = computed(() => head_1(_pages.value) ?? null);\n  const lastPage = computed(() => last_1(_pages.value) ?? null);\n  const minPage = computed(\n    () => props.minPage || (minDate.value ? getDateAddress(minDate.value) : null)\n  );\n  const maxPage = computed(\n    () => props.maxPage || (maxDate.value ? getDateAddress(maxDate.value) : null)\n  );\n  const navVisibility = computed(() => props.navVisibility);\n  const showWeeknumbers = computed(() => !!props.showWeeknumbers);\n  const showIsoWeeknumbers = computed(() => !!props.showIsoWeeknumbers);\n  const isMonthly = computed(() => _view.value === \"monthly\");\n  const isWeekly = computed(() => _view.value === \"weekly\");\n  const isDaily = computed(() => _view.value === \"daily\");\n  const onTransitionBeforeEnter = () => {\n    inTransition.value = true;\n    emit(\"transition-start\");\n  };\n  const onTransitionAfterEnter = () => {\n    inTransition.value = false;\n    emit(\"transition-end\");\n    if (transitionPromise) {\n      transitionPromise.resolve(true);\n      transitionPromise = null;\n    }\n  };\n  const addPages$1 = (address, count2, view = _view.value) => {\n    return addPages(address, count2, view, locale.value);\n  };\n  const getDateAddress = (date) => {\n    return getPageAddressForDate(date, _view.value, locale.value);\n  };\n  const refreshDisabled = (day) => {\n    if (!disabledAttribute.value || !attributeContext.value)\n      return;\n    day.isDisabled = attributeContext.value.cellExists(\n      disabledAttribute.value.key,\n      day.dayIndex\n    );\n  };\n  const refreshFocusable = (day) => {\n    day.isFocusable = day.inMonth && day.day === focusableDay.value;\n  };\n  const forDays = (pages, fn) => {\n    for (const page of pages) {\n      for (const day of page.days) {\n        if (fn(day) === false)\n          return;\n      }\n    }\n  };\n  const days = computed(\n    () => _pages.value.reduce((result, page) => {\n      result.push(...page.viewDays);\n      return result;\n    }, [])\n  );\n  const attributes = computed(() => {\n    const result = [];\n    (props.attributes || []).forEach((attr, i) => {\n      if (!attr || !attr.dates)\n        return;\n      result.push(\n        new Attribute(\n          {\n            ...attr,\n            order: attr.order || 0\n          },\n          theme.value,\n          locale.value\n        )\n      );\n    });\n    if (disabledAttribute.value) {\n      result.push(disabledAttribute.value);\n    }\n    return result;\n  });\n  const hasAttributes = computed(() => arrayHasItems(attributes.value));\n  const attributeContext = computed(() => {\n    const ctx = new DateRangeContext();\n    attributes.value.forEach((attr) => {\n      attr.ranges.forEach((range) => {\n        ctx.render(attr, range, days.value);\n      });\n    });\n    return ctx;\n  });\n  const dayCells = computed(() => {\n    return days.value.reduce((result, day) => {\n      result[day.dayIndex] = { day, cells: [] };\n      result[day.dayIndex].cells.push(...attributeContext.value.getCells(day));\n      return result;\n    }, {});\n  });\n  const getWeeknumberPosition = (column, columnFromEnd) => {\n    const showWeeknumbers2 = props.showWeeknumbers || props.showIsoWeeknumbers;\n    if (showWeeknumbers2 == null)\n      return \"\";\n    if (isBoolean_1(showWeeknumbers2)) {\n      return showWeeknumbers2 ? \"left\" : \"\";\n    }\n    if (showWeeknumbers2.startsWith(\"right\")) {\n      return columnFromEnd > 1 ? \"right\" : showWeeknumbers2;\n    }\n    return column > 1 ? \"left\" : showWeeknumbers2;\n  };\n  const getPageForAttributes = () => {\n    var _a, _b;\n    if (!hasAttributes.value)\n      return null;\n    const attr = attributes.value.find((attr2) => attr2.pinPage) || attributes.value[0];\n    if (!attr || !attr.hasRanges)\n      return null;\n    const [range] = attr.ranges;\n    const date = ((_a = range.start) == null ? void 0 : _a.date) || ((_b = range.end) == null ? void 0 : _b.date);\n    return date ? getDateAddress(date) : null;\n  };\n  const getDefaultInitialPage = () => {\n    if (pageIsValid(firstPage.value))\n      return firstPage.value;\n    const page = getPageForAttributes();\n    if (pageIsValid(page))\n      return page;\n    return getDateAddress(/* @__PURE__ */ new Date());\n  };\n  const getTargetPageRange = (page, opts = {}) => {\n    const { view = _view.value, position = 1, force } = opts;\n    const pagesToAdd = position > 0 ? 1 - position : -(count.value + position);\n    let fromPage = addPages$1(page, pagesToAdd, view);\n    let toPage = addPages$1(fromPage, count.value - 1, view);\n    if (!force) {\n      if (pageIsBeforePage(fromPage, minPage.value)) {\n        fromPage = minPage.value;\n      } else if (pageIsAfterPage(toPage, maxPage.value)) {\n        fromPage = addPages$1(maxPage.value, 1 - count.value);\n      }\n      toPage = addPages$1(fromPage, count.value - 1);\n    }\n    return { fromPage, toPage };\n  };\n  const getPageTransition = (oldPage, newPage, defaultTransition = \"\") => {\n    if (defaultTransition === \"none\" || defaultTransition === \"fade\")\n      return defaultTransition;\n    if ((oldPage == null ? void 0 : oldPage.view) !== (newPage == null ? void 0 : newPage.view))\n      return \"fade\";\n    const moveNext2 = pageIsAfterPage(newPage, oldPage);\n    const movePrev2 = pageIsBeforePage(newPage, oldPage);\n    if (!moveNext2 && !movePrev2) {\n      return \"fade\";\n    }\n    if (defaultTransition === \"slide-v\") {\n      return movePrev2 ? \"slide-down\" : \"slide-up\";\n    }\n    return movePrev2 ? \"slide-right\" : \"slide-left\";\n  };\n  const refreshPages = (opts = {}) => {\n    return new Promise((resolve, reject) => {\n      const { position = 1, force = false, transition } = opts;\n      const page = pageIsValid(opts.page) ? opts.page : getDefaultInitialPage();\n      const { fromPage } = getTargetPageRange(page, {\n        position,\n        force\n      });\n      const pages = [];\n      for (let i = 0; i < count.value; i++) {\n        const newPage = addPages$1(fromPage, i);\n        const position2 = i + 1;\n        const row = Math.ceil(position2 / props.columns);\n        const rowFromEnd = props.rows - row + 1;\n        const column = position2 % props.columns || props.columns;\n        const columnFromEnd = props.columns - column + 1;\n        const weeknumberPosition = getWeeknumberPosition(column, columnFromEnd);\n        pages.push(\n          locale.value.getPage({\n            ...newPage,\n            view: _view.value,\n            titlePosition: props.titlePosition,\n            trimWeeks: props.trimWeeks,\n            position: position2,\n            row,\n            rowFromEnd,\n            column,\n            columnFromEnd,\n            showWeeknumbers: showWeeknumbers.value,\n            showIsoWeeknumbers: showIsoWeeknumbers.value,\n            weeknumberPosition\n          })\n        );\n      }\n      transitionName.value = getPageTransition(\n        _pages.value[0],\n        pages[0],\n        transition\n      );\n      _pages.value = pages;\n      if (transitionName.value && transitionName.value !== \"none\") {\n        transitionPromise = {\n          resolve,\n          reject\n        };\n      } else {\n        resolve(true);\n      }\n    });\n  };\n  const targetBy = (pages) => {\n    const fromPage = firstPage.value ?? getDateAddress(/* @__PURE__ */ new Date());\n    return addPages$1(fromPage, pages);\n  };\n  const canMove = (target, opts = {}) => {\n    const page = pageIsValid(target) ? target : getDateAddress(target);\n    Object.assign(\n      opts,\n      getTargetPageRange(page, {\n        ...opts,\n        force: true\n      })\n    );\n    const pagesInRange = pageRangeToArray(\n      opts.fromPage,\n      opts.toPage,\n      _view.value,\n      locale.value\n    ).map((p) => pageIsBetweenPages(p, minPage.value, maxPage.value));\n    return pagesInRange.some((val) => val);\n  };\n  const canMoveBy = (pages, opts = {}) => {\n    return canMove(targetBy(pages), opts);\n  };\n  const canMovePrev = computed(() => canMoveBy(-step.value));\n  const canMoveNext = computed(() => canMoveBy(step.value));\n  const move = async (target, opts = {}) => {\n    if (!opts.force && !canMove(target, opts))\n      return false;\n    if (opts.fromPage && !pageIsEqualToPage(opts.fromPage, firstPage.value)) {\n      hidePopover({ id: navPopoverId.value, hideDelay: 0 });\n      if (opts.view) {\n        skipWatcher(\"view\", 10);\n        _view.value = opts.view;\n      }\n      await refreshPages({\n        ...opts,\n        page: opts.fromPage,\n        position: 1,\n        force: true\n      });\n      emit(\"did-move\", _pages.value);\n    }\n    return true;\n  };\n  const moveBy = (pages, opts = {}) => {\n    return move(targetBy(pages), opts);\n  };\n  const movePrev = () => {\n    return moveBy(-step.value);\n  };\n  const moveNext = () => {\n    return moveBy(step.value);\n  };\n  const tryFocusDate = (date) => {\n    const inMonth = isMonthly.value ? \".in-month\" : \"\";\n    const daySelector = `.id-${locale.value.getDayId(date)}${inMonth}`;\n    const selector = `${daySelector}.vc-focusable, ${daySelector} .vc-focusable`;\n    const el = containerRef.value;\n    if (el) {\n      const focusableEl = el.querySelector(selector);\n      if (focusableEl) {\n        focusableEl.focus();\n        return true;\n      }\n    }\n    return false;\n  };\n  const focusDate = async (date, opts = {}) => {\n    if (tryFocusDate(date))\n      return true;\n    await move(date, opts);\n    return tryFocusDate(date);\n  };\n  const onDayClick = (day, event) => {\n    focusableDay.value = day.day;\n    emit(\"dayclick\", day, event);\n  };\n  const onDayMouseenter = (day, event) => {\n    emit(\"daymouseenter\", day, event);\n  };\n  const onDayMouseleave = (day, event) => {\n    emit(\"daymouseleave\", day, event);\n  };\n  const onDayFocusin = (day, event) => {\n    focusableDay.value = day.day;\n    focusedDay.value = day;\n    day.isFocused = true;\n    emit(\"dayfocusin\", day, event);\n  };\n  const onDayFocusout = (day, event) => {\n    focusedDay.value = null;\n    day.isFocused = false;\n    emit(\"dayfocusout\", day, event);\n  };\n  const onDayKeydown = (day, event) => {\n    emit(\"daykeydown\", day, event);\n    const date = day.noonDate;\n    let newDate = null;\n    switch (event.key) {\n      case \"ArrowLeft\": {\n        newDate = addDays(date, -1);\n        break;\n      }\n      case \"ArrowRight\": {\n        newDate = addDays(date, 1);\n        break;\n      }\n      case \"ArrowUp\": {\n        newDate = addDays(date, -7);\n        break;\n      }\n      case \"ArrowDown\": {\n        newDate = addDays(date, 7);\n        break;\n      }\n      case \"Home\": {\n        newDate = addDays(date, -day.weekdayPosition + 1);\n        break;\n      }\n      case \"End\": {\n        newDate = addDays(date, day.weekdayPositionFromEnd);\n        break;\n      }\n      case \"PageUp\": {\n        if (event.altKey) {\n          newDate = addYears(date, -1);\n        } else {\n          newDate = addMonths(date, -1);\n        }\n        break;\n      }\n      case \"PageDown\": {\n        if (event.altKey) {\n          newDate = addYears(date, 1);\n        } else {\n          newDate = addMonths(date, 1);\n        }\n        break;\n      }\n    }\n    if (newDate) {\n      event.preventDefault();\n      focusDate(newDate).catch();\n    }\n  };\n  const onKeydown = (event) => {\n    const day = focusedDay.value;\n    if (day != null) {\n      onDayKeydown(day, event);\n    }\n  };\n  const onWeeknumberClick = (week, event) => {\n    emit(\"weeknumberclick\", week, event);\n  };\n  refreshPages({\n    page: props.initialPage,\n    position: props.initialPagePosition\n  });\n  onMounted(() => {\n    if (!props.disablePageSwipe && containerRef.value) {\n      removeHandlers2 = addHorizontalSwipeHandler(\n        containerRef.value,\n        ({ toLeft = false, toRight = false }) => {\n          if (toLeft) {\n            moveNext();\n          } else if (toRight) {\n            movePrev();\n          }\n        },\n        getDefault(\"touch\")\n      );\n    }\n  });\n  onUnmounted(() => {\n    _pages.value = [];\n    if (removeHandlers2)\n      removeHandlers2();\n  });\n  watch(\n    () => locale.value,\n    () => {\n      refreshPages();\n    }\n  );\n  watch(\n    () => count.value,\n    () => refreshPages()\n  );\n  watch(\n    () => props.view,\n    () => _view.value = props.view\n  );\n  watch(\n    () => _view.value,\n    () => {\n      handleWatcher(\"view\", () => {\n        refreshPages();\n      });\n      emit(\"update:view\", _view.value);\n    }\n  );\n  watch(\n    () => focusableDay.value,\n    () => {\n      forDays(_pages.value, (day) => refreshFocusable(day));\n    }\n  );\n  watchEffect(() => {\n    emit(\"update:pages\", _pages.value);\n    forDays(_pages.value, (day) => {\n      refreshDisabled(day);\n      refreshFocusable(day);\n    });\n  });\n  const context = {\n    emit,\n    containerRef,\n    focusedDay,\n    inTransition,\n    navPopoverId,\n    dayPopoverId,\n    view: _view,\n    pages: _pages,\n    transitionName,\n    theme,\n    color,\n    displayMode,\n    locale,\n    masks: masks2,\n    attributes,\n    disabledAttribute,\n    disabledDates,\n    attributeContext,\n    days,\n    dayCells,\n    count,\n    step,\n    firstPage,\n    lastPage,\n    canMovePrev,\n    canMoveNext,\n    minPage,\n    maxPage,\n    isMonthly,\n    isWeekly,\n    isDaily,\n    navVisibility,\n    showWeeknumbers,\n    showIsoWeeknumbers,\n    getDateAddress,\n    canMove,\n    canMoveBy,\n    move,\n    moveBy,\n    movePrev,\n    moveNext,\n    onTransitionBeforeEnter,\n    onTransitionAfterEnter,\n    tryFocusDate,\n    focusDate,\n    onKeydown,\n    onDayKeydown,\n    onDayClick,\n    onDayMouseenter,\n    onDayMouseleave,\n    onDayFocusin,\n    onDayFocusout,\n    onWeeknumberClick\n  };\n  provide(contextKey$2, context);\n  return context;\n}\nfunction useCalendar() {\n  const context = inject(contextKey$2);\n  if (context)\n    return context;\n  throw new Error(\n    \"Calendar context missing. Please verify this component is nested within a valid context provider.\"\n  );\n}\nconst _sfc_main$k = defineComponent({\n  inheritAttrs: false,\n  emits: [\"before-show\", \"after-show\", \"before-hide\", \"after-hide\"],\n  props: {\n    id: { type: [Number, String, Symbol], required: true },\n    showDelay: { type: Number, default: 0 },\n    hideDelay: { type: Number, default: 110 },\n    boundarySelector: { type: String }\n  },\n  setup(props, { emit }) {\n    let timeout = void 0;\n    const popoverRef = ref();\n    let resizeObserver = null;\n    let popper = null;\n    const state2 = reactive({\n      isVisible: false,\n      target: null,\n      data: null,\n      transition: \"slide-fade\",\n      placement: \"bottom\",\n      direction: \"\",\n      positionFixed: false,\n      modifiers: [],\n      isInteractive: true,\n      visibility: \"click\",\n      isHovered: false,\n      isFocused: false,\n      autoHide: false,\n      force: false\n    });\n    function updateDirection(placement) {\n      if (placement)\n        state2.direction = placement.split(\"-\")[0];\n    }\n    function onPopperUpdate({ placement, options }) {\n      updateDirection(placement || (options == null ? void 0 : options.placement));\n    }\n    const popperOptions = computed(() => {\n      return {\n        placement: state2.placement,\n        strategy: state2.positionFixed ? \"fixed\" : \"absolute\",\n        boundary: \"\",\n        modifiers: [\n          {\n            name: \"onUpdate\",\n            enabled: true,\n            phase: \"afterWrite\",\n            fn: onPopperUpdate\n          },\n          ...state2.modifiers || []\n        ],\n        onFirstUpdate: onPopperUpdate\n      };\n    });\n    const alignment = computed(() => {\n      const isLeftRight = state2.direction === \"left\" || state2.direction === \"right\";\n      let alignment2 = \"\";\n      if (state2.placement) {\n        const parts = state2.placement.split(\"-\");\n        if (parts.length > 1)\n          alignment2 = parts[1];\n      }\n      if ([\"start\", \"top\", \"left\"].includes(alignment2)) {\n        return isLeftRight ? \"top\" : \"left\";\n      }\n      if ([\"end\", \"bottom\", \"right\"].includes(alignment2)) {\n        return isLeftRight ? \"bottom\" : \"right\";\n      }\n      return isLeftRight ? \"middle\" : \"center\";\n    });\n    function destroyPopper() {\n      if (popper) {\n        popper.destroy();\n        popper = null;\n      }\n    }\n    function setupPopper() {\n      nextTick(() => {\n        const el = resolveEl(state2.target);\n        if (!el || !popoverRef.value)\n          return;\n        if (popper && popper.state.elements.reference !== el) {\n          destroyPopper();\n        }\n        if (!popper) {\n          popper = createPopper(\n            el,\n            popoverRef.value,\n            popperOptions.value\n          );\n        } else {\n          popper.update();\n        }\n      });\n    }\n    function updateState(newState) {\n      Object.assign(state2, omit(newState, \"force\"));\n    }\n    function setTimer(delay, fn) {\n      clearTimeout(timeout);\n      if (delay > 0) {\n        timeout = setTimeout(fn, delay);\n      } else {\n        fn();\n      }\n    }\n    function isCurrentTarget(target) {\n      if (!target || !popper)\n        return false;\n      const el = resolveEl(target);\n      return el === popper.state.elements.reference;\n    }\n    async function show(opts = {}) {\n      if (state2.force)\n        return;\n      if (opts.force)\n        state2.force = true;\n      setTimer(opts.showDelay ?? props.showDelay, () => {\n        if (state2.isVisible) {\n          state2.force = false;\n        }\n        updateState({\n          ...opts,\n          isVisible: true\n        });\n        setupPopper();\n      });\n    }\n    function hide(opts = {}) {\n      if (!popper)\n        return;\n      if (opts.target && !isCurrentTarget(opts.target))\n        return;\n      if (state2.force)\n        return;\n      if (opts.force)\n        state2.force = true;\n      setTimer(opts.hideDelay ?? props.hideDelay, () => {\n        if (!state2.isVisible)\n          state2.force = false;\n        state2.isVisible = false;\n      });\n    }\n    function toggle(opts = {}) {\n      if (opts.target == null)\n        return;\n      if (state2.isVisible && isCurrentTarget(opts.target)) {\n        hide(opts);\n      } else {\n        show(opts);\n      }\n    }\n    function onDocumentClick(e) {\n      if (!popper)\n        return;\n      const popperRef = popper.state.elements.reference;\n      if (!popoverRef.value || !popperRef) {\n        return;\n      }\n      const target = e.target;\n      if (elementContains(popoverRef.value, target) || elementContains(popperRef, target)) {\n        return;\n      }\n      hide({ force: true });\n    }\n    function onDocumentKeydown(e) {\n      if (e.key === \"Esc\" || e.key === \"Escape\") {\n        hide();\n      }\n    }\n    function onDocumentShowPopover({ detail }) {\n      if (!detail.id || detail.id !== props.id)\n        return;\n      show(detail);\n    }\n    function onDocumentHidePopover({ detail }) {\n      if (!detail.id || detail.id !== props.id)\n        return;\n      hide(detail);\n    }\n    function onDocumentTogglePopover({ detail }) {\n      if (!detail.id || detail.id !== props.id)\n        return;\n      toggle(detail);\n    }\n    function addEvents() {\n      on(document, \"keydown\", onDocumentKeydown);\n      on(document, \"click\", onDocumentClick);\n      on(document, \"show-popover\", onDocumentShowPopover);\n      on(document, \"hide-popover\", onDocumentHidePopover);\n      on(document, \"toggle-popover\", onDocumentTogglePopover);\n    }\n    function removeEvents() {\n      off(document, \"keydown\", onDocumentKeydown);\n      off(document, \"click\", onDocumentClick);\n      off(document, \"show-popover\", onDocumentShowPopover);\n      off(document, \"hide-popover\", onDocumentHidePopover);\n      off(document, \"toggle-popover\", onDocumentTogglePopover);\n    }\n    function beforeEnter(el) {\n      emit(\"before-show\", el);\n    }\n    function afterEnter(el) {\n      state2.force = false;\n      emit(\"after-show\", el);\n    }\n    function beforeLeave(el) {\n      emit(\"before-hide\", el);\n    }\n    function afterLeave(el) {\n      state2.force = false;\n      destroyPopper();\n      emit(\"after-hide\", el);\n    }\n    function onClick(e) {\n      e.stopPropagation();\n    }\n    function onMouseOver() {\n      state2.isHovered = true;\n      if (state2.isInteractive && [\"hover\", \"hover-focus\"].includes(state2.visibility)) {\n        show();\n      }\n    }\n    function onMouseLeave() {\n      state2.isHovered = false;\n      if (!popper)\n        return;\n      const popperRef = popper.state.elements.reference;\n      if (state2.autoHide && !state2.isFocused && (!popperRef || popperRef !== document.activeElement) && [\"hover\", \"hover-focus\"].includes(state2.visibility)) {\n        hide();\n      }\n    }\n    function onFocusIn() {\n      state2.isFocused = true;\n      if (state2.isInteractive && [\"focus\", \"hover-focus\"].includes(state2.visibility)) {\n        show();\n      }\n    }\n    function onFocusOut(e) {\n      if ([\"focus\", \"hover-focus\"].includes(state2.visibility) && (!e.relatedTarget || !elementContains(popoverRef.value, e.relatedTarget))) {\n        state2.isFocused = false;\n        if (!state2.isHovered && state2.autoHide)\n          hide();\n      }\n    }\n    function cleanupRO() {\n      if (resizeObserver != null) {\n        resizeObserver.disconnect();\n        resizeObserver = null;\n      }\n    }\n    watch(\n      () => popoverRef.value,\n      (val) => {\n        cleanupRO();\n        if (!val)\n          return;\n        resizeObserver = new ResizeObserver(() => {\n          if (popper)\n            popper.update();\n        });\n        resizeObserver.observe(val);\n      }\n    );\n    watch(() => state2.placement, updateDirection, {\n      immediate: true\n    });\n    onMounted(() => {\n      addEvents();\n    });\n    onUnmounted(() => {\n      destroyPopper();\n      cleanupRO();\n      removeEvents();\n    });\n    return {\n      ...toRefs(state2),\n      popoverRef,\n      alignment,\n      hide,\n      setupPopper,\n      beforeEnter,\n      afterEnter,\n      beforeLeave,\n      afterLeave,\n      onClick,\n      onMouseOver,\n      onMouseLeave,\n      onFocusIn,\n      onFocusOut\n    };\n  }\n});\nconst Popover_vue_vue_type_style_index_0_lang = \"\";\nconst _export_sfc = (sfc, props) => {\n  const target = sfc.__vccOpts || sfc;\n  for (const [key, val] of props) {\n    target[key] = val;\n  }\n  return target;\n};\nfunction _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {\n  return openBlock(), createElementBlock(\"div\", {\n    class: normalizeClass([\"vc-popover-content-wrapper\", { \"is-interactive\": _ctx.isInteractive }]),\n    ref: \"popoverRef\",\n    onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClick && _ctx.onClick(...args)),\n    onMouseover: _cache[1] || (_cache[1] = (...args) => _ctx.onMouseOver && _ctx.onMouseOver(...args)),\n    onMouseleave: _cache[2] || (_cache[2] = (...args) => _ctx.onMouseLeave && _ctx.onMouseLeave(...args)),\n    onFocusin: _cache[3] || (_cache[3] = (...args) => _ctx.onFocusIn && _ctx.onFocusIn(...args)),\n    onFocusout: _cache[4] || (_cache[4] = (...args) => _ctx.onFocusOut && _ctx.onFocusOut(...args))\n  }, [\n    createVNode(Transition, {\n      name: `vc-${_ctx.transition}`,\n      appear: \"\",\n      onBeforeEnter: _ctx.beforeEnter,\n      onAfterEnter: _ctx.afterEnter,\n      onBeforeLeave: _ctx.beforeLeave,\n      onAfterLeave: _ctx.afterLeave\n    }, {\n      default: withCtx(() => [\n        _ctx.isVisible ? (openBlock(), createElementBlock(\"div\", mergeProps({\n          key: 0,\n          tabindex: \"-1\",\n          class: `vc-popover-content direction-${_ctx.direction}`\n        }, _ctx.$attrs), [\n          renderSlot(_ctx.$slots, \"default\", {\n            direction: _ctx.direction,\n            alignment: _ctx.alignment,\n            data: _ctx.data,\n            hide: _ctx.hide\n          }, () => [\n            createTextVNode(toDisplayString(_ctx.data), 1)\n          ]),\n          createElementVNode(\"span\", {\n            class: normalizeClass([\n              \"vc-popover-caret\",\n              `direction-${_ctx.direction}`,\n              `align-${_ctx.alignment}`\n            ])\n          }, null, 2)\n        ], 16)) : createCommentVNode(\"\", true)\n      ]),\n      _: 3\n    }, 8, [\"name\", \"onBeforeEnter\", \"onAfterEnter\", \"onBeforeLeave\", \"onAfterLeave\"])\n  ], 34);\n}\nconst Popover = /* @__PURE__ */ _export_sfc(_sfc_main$k, [[\"render\", _sfc_render$7]]);\nconst _hoisted_1$c = { class: \"vc-day-popover-row\" };\nconst _hoisted_2$b = {\n  key: 0,\n  class: \"vc-day-popover-row-indicator\"\n};\nconst _hoisted_3$9 = { class: \"vc-day-popover-row-label\" };\nconst _sfc_main$j = /* @__PURE__ */ defineComponent({\n  __name: \"PopoverRow\",\n  props: {\n    attribute: null\n  },\n  setup(__props) {\n    const props = __props;\n    const indicator = computed(() => {\n      const { content, highlight, dot, bar, popover } = props.attribute;\n      if (popover && popover.hideIndicator)\n        return null;\n      if (content) {\n        return {\n          class: `vc-bar vc-day-popover-row-bar vc-attr vc-${content.base.color}`\n        };\n      }\n      if (highlight) {\n        return {\n          class: `vc-highlight-bg-solid vc-day-popover-row-highlight vc-attr vc-${highlight.base.color}`\n        };\n      }\n      if (dot) {\n        return {\n          class: `vc-dot vc-attr vc-${dot.base.color}`\n        };\n      }\n      if (bar) {\n        return {\n          class: `vc-bar vc-day-popover-row-bar vc-attr vc-${bar.base.color}`\n        };\n      }\n      return null;\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", _hoisted_1$c, [\n        unref(indicator) ? (openBlock(), createElementBlock(\"div\", _hoisted_2$b, [\n          createElementVNode(\"span\", {\n            class: normalizeClass(unref(indicator).class)\n          }, null, 2)\n        ])) : createCommentVNode(\"\", true),\n        createElementVNode(\"div\", _hoisted_3$9, [\n          renderSlot(_ctx.$slots, \"default\", {}, () => [\n            createTextVNode(toDisplayString(__props.attribute.popover ? __props.attribute.popover.label : \"No content provided\"), 1)\n          ])\n        ])\n      ]);\n    };\n  }\n});\nconst PopoverRow_vue_vue_type_style_index_0_lang = \"\";\nconst __default__$3 = {\n  inheritAttrs: false\n};\nconst _sfc_main$i = /* @__PURE__ */ defineComponent({\n  ...__default__$3,\n  __name: \"CalendarSlot\",\n  props: {\n    name: null\n  },\n  setup(__props) {\n    const props = __props;\n    const slot = useSlot(props.name);\n    return (_ctx, _cache) => {\n      return unref(slot) ? (openBlock(), createBlock(resolveDynamicComponent(unref(slot)), normalizeProps(mergeProps({ key: 0 }, _ctx.$attrs)), null, 16)) : renderSlot(_ctx.$slots, \"default\", { key: 1 });\n    };\n  }\n});\nconst _hoisted_1$b = { class: \"vc-day-popover-container\" };\nconst _hoisted_2$a = {\n  key: 0,\n  class: \"vc-day-popover-header\"\n};\nconst _sfc_main$h = /* @__PURE__ */ defineComponent({\n  __name: \"CalendarDayPopover\",\n  setup(__props) {\n    const { dayPopoverId, displayMode, color, masks: masks2, locale } = useCalendar();\n    function format(date, mask) {\n      return locale.value.formatDate(date, mask);\n    }\n    function dayTitle(day) {\n      return locale.value.formatDate(day.date, masks2.value.dayPopover);\n    }\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(Popover, {\n        id: unref(dayPopoverId),\n        class: normalizeClass([`vc-${unref(color)}`, `vc-${unref(displayMode)}`])\n      }, {\n        default: withCtx(({ data: { day, attributes }, hide }) => [\n          createVNode(_sfc_main$i, {\n            name: \"day-popover\",\n            day,\n            \"day-title\": dayTitle(day),\n            attributes,\n            format,\n            masks: unref(masks2),\n            hide\n          }, {\n            default: withCtx(() => [\n              createElementVNode(\"div\", _hoisted_1$b, [\n                unref(masks2).dayPopover ? (openBlock(), createElementBlock(\"div\", _hoisted_2$a, toDisplayString(dayTitle(day)), 1)) : createCommentVNode(\"\", true),\n                (openBlock(true), createElementBlock(Fragment, null, renderList(attributes, (attribute) => {\n                  return openBlock(), createBlock(_sfc_main$j, {\n                    key: attribute.key,\n                    attribute\n                  }, null, 8, [\"attribute\"]);\n                }), 128))\n              ])\n            ]),\n            _: 2\n          }, 1032, [\"day\", \"day-title\", \"attributes\", \"masks\", \"hide\"])\n        ]),\n        _: 1\n      }, 8, [\"id\", \"class\"]);\n    };\n  }\n});\nconst _sfc_main$g = {};\nconst _hoisted_1$a = {\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  viewBox: \"0 0 24 24\"\n};\nconst _hoisted_2$9 = /* @__PURE__ */ createElementVNode(\"polyline\", { points: \"9 18 15 12 9 6\" }, null, -1);\nconst _hoisted_3$8 = [\n  _hoisted_2$9\n];\nfunction _sfc_render$6(_ctx, _cache) {\n  return openBlock(), createElementBlock(\"svg\", _hoisted_1$a, _hoisted_3$8);\n}\nconst IconChevronRight = /* @__PURE__ */ _export_sfc(_sfc_main$g, [[\"render\", _sfc_render$6]]);\nconst _sfc_main$f = {};\nconst _hoisted_1$9 = {\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  viewBox: \"0 0 24 24\"\n};\nconst _hoisted_2$8 = /* @__PURE__ */ createElementVNode(\"polyline\", { points: \"15 18 9 12 15 6\" }, null, -1);\nconst _hoisted_3$7 = [\n  _hoisted_2$8\n];\nfunction _sfc_render$5(_ctx, _cache) {\n  return openBlock(), createElementBlock(\"svg\", _hoisted_1$9, _hoisted_3$7);\n}\nconst IconChevronLeft = /* @__PURE__ */ _export_sfc(_sfc_main$f, [[\"render\", _sfc_render$5]]);\nconst _sfc_main$e = {};\nconst _hoisted_1$8 = {\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  viewBox: \"0 0 24 24\"\n};\nconst _hoisted_2$7 = /* @__PURE__ */ createElementVNode(\"polyline\", { points: \"6 9 12 15 18 9\" }, null, -1);\nconst _hoisted_3$6 = [\n  _hoisted_2$7\n];\nfunction _sfc_render$4(_ctx, _cache) {\n  return openBlock(), createElementBlock(\"svg\", _hoisted_1$8, _hoisted_3$6);\n}\nconst IconChevronDown = /* @__PURE__ */ _export_sfc(_sfc_main$e, [[\"render\", _sfc_render$4]]);\nconst _sfc_main$d = {};\nconst _hoisted_1$7 = {\n  fill: \"none\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"stroke-width\": \"2\",\n  viewBox: \"0 0 24 24\"\n};\nconst _hoisted_2$6 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" }, null, -1);\nconst _hoisted_3$5 = [\n  _hoisted_2$6\n];\nfunction _sfc_render$3(_ctx, _cache) {\n  return openBlock(), createElementBlock(\"svg\", _hoisted_1$7, _hoisted_3$5);\n}\nconst IconClock = /* @__PURE__ */ _export_sfc(_sfc_main$d, [[\"render\", _sfc_render$3]]);\nconst icons = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  IconChevronDown,\n  IconChevronLeft,\n  IconChevronRight,\n  IconClock\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst _sfc_main$c = /* @__PURE__ */ defineComponent({\n  __name: \"BaseIcon\",\n  props: {\n    name: { type: String, required: true },\n    width: { type: String },\n    height: { type: String },\n    size: { type: String, default: \"26\" },\n    viewBox: { type: String }\n  },\n  setup(__props) {\n    const props = __props;\n    const width = computed(() => props.width || props.size);\n    const height = computed(() => props.height || props.size);\n    const icon = computed(() => icons[`Icon${props.name}`]);\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(resolveDynamicComponent(unref(icon)), {\n        width: unref(width),\n        height: unref(height),\n        class: \"vc-base-icon\"\n      }, null, 8, [\"width\", \"height\"]);\n    };\n  }\n});\nconst BaseIcon_vue_vue_type_style_index_0_lang = \"\";\nconst _hoisted_1$6 = [\"disabled\"];\nconst _hoisted_2$5 = {\n  key: 1,\n  class: \"vc-title-wrapper\"\n};\nconst _hoisted_3$4 = {\n  type: \"button\",\n  class: \"vc-title\"\n};\nconst _hoisted_4$3 = [\"disabled\"];\nconst _sfc_main$b = /* @__PURE__ */ defineComponent({\n  __name: \"CalendarHeader\",\n  props: {\n    page: null,\n    layout: null,\n    isLg: { type: Boolean },\n    isXl: { type: Boolean },\n    is2xl: { type: Boolean },\n    hideTitle: { type: Boolean },\n    hideArrows: { type: Boolean }\n  },\n  setup(__props) {\n    const props = __props;\n    const {\n      navPopoverId,\n      navVisibility,\n      canMovePrev,\n      movePrev,\n      canMoveNext,\n      moveNext\n    } = useCalendar();\n    const navPlacement = computed(() => {\n      switch (props.page.titlePosition) {\n        case \"left\":\n          return \"bottom-start\";\n        case \"right\":\n          return \"bottom-end\";\n        default:\n          return \"bottom\";\n      }\n    });\n    const navPopoverOptions = computed(() => {\n      const { page } = props;\n      return {\n        id: navPopoverId.value,\n        visibility: navVisibility.value,\n        placement: navPlacement.value,\n        modifiers: [{ name: \"flip\", options: { fallbackPlacements: [\"bottom\"] } }],\n        data: { page },\n        isInteractive: true\n      };\n    });\n    const titleLeft = computed(() => props.page.titlePosition.includes(\"left\"));\n    const titleRight = computed(() => props.page.titlePosition.includes(\"right\"));\n    const layout_ = computed(() => {\n      if (props.layout)\n        return props.layout;\n      if (titleLeft.value)\n        return \"tu-pn\";\n      if (titleRight.value)\n        return \"pn-tu\";\n      return \"p-tu-n;\";\n    });\n    const show = computed(() => {\n      return {\n        prev: layout_.value.includes(\"p\") && !props.hideArrows,\n        title: layout_.value.includes(\"t\") && !props.hideTitle,\n        next: layout_.value.includes(\"n\") && !props.hideArrows\n      };\n    });\n    const gridStyle = computed(() => {\n      const gridTemplateColumns = layout_.value.split(\"\").map((l) => {\n        switch (l) {\n          case \"p\":\n            return \"[prev] auto\";\n          case \"n\":\n            return \"[next] auto\";\n          case \"t\":\n            return \"[title] auto\";\n          case \"-\":\n            return \"1fr\";\n          default:\n            return \"\";\n        }\n      }).join(\" \");\n      return { gridTemplateColumns };\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: normalizeClass([\"vc-header\", { \"is-lg\": __props.isLg, \"is-xl\": __props.isXl, \"is-2xl\": __props.is2xl }]),\n        style: normalizeStyle(unref(gridStyle))\n      }, [\n        unref(show).prev ? (openBlock(), createElementBlock(\"button\", {\n          key: 0,\n          type: \"button\",\n          class: \"vc-arrow vc-prev vc-focus\",\n          disabled: !unref(canMovePrev),\n          onClick: _cache[0] || (_cache[0] = //@ts-ignore\n          (...args) => unref(movePrev) && unref(movePrev)(...args)),\n          onKeydown: _cache[1] || (_cache[1] = withKeys(\n            //@ts-ignore\n            (...args) => unref(movePrev) && unref(movePrev)(...args),\n            [\"space\", \"enter\"]\n          ))\n        }, [\n          createVNode(_sfc_main$i, {\n            name: \"header-prev-button\",\n            disabled: !unref(canMovePrev)\n          }, {\n            default: withCtx(() => [\n              createVNode(_sfc_main$c, {\n                name: \"ChevronLeft\",\n                size: \"24\"\n              })\n            ]),\n            _: 1\n          }, 8, [\"disabled\"])\n        ], 40, _hoisted_1$6)) : createCommentVNode(\"\", true),\n        unref(show).title ? (openBlock(), createElementBlock(\"div\", _hoisted_2$5, [\n          createVNode(_sfc_main$i, { name: \"header-title-wrapper\" }, {\n            default: withCtx(() => [\n              withDirectives((openBlock(), createElementBlock(\"button\", _hoisted_3$4, [\n                createVNode(_sfc_main$i, {\n                  name: \"header-title\",\n                  title: __props.page.title\n                }, {\n                  default: withCtx(() => [\n                    createElementVNode(\"span\", null, toDisplayString(__props.page.title), 1)\n                  ]),\n                  _: 1\n                }, 8, [\"title\"])\n              ])), [\n                [unref(popoverDirective), unref(navPopoverOptions)]\n              ])\n            ]),\n            _: 1\n          })\n        ])) : createCommentVNode(\"\", true),\n        unref(show).next ? (openBlock(), createElementBlock(\"button\", {\n          key: 2,\n          type: \"button\",\n          class: \"vc-arrow vc-next vc-focus\",\n          disabled: !unref(canMoveNext),\n          onClick: _cache[2] || (_cache[2] = //@ts-ignore\n          (...args) => unref(moveNext) && unref(moveNext)(...args)),\n          onKeydown: _cache[3] || (_cache[3] = withKeys(\n            //@ts-ignore\n            (...args) => unref(moveNext) && unref(moveNext)(...args),\n            [\"space\", \"enter\"]\n          ))\n        }, [\n          createVNode(_sfc_main$i, {\n            name: \"header-next-button\",\n            disabled: !unref(canMoveNext)\n          }, {\n            default: withCtx(() => [\n              createVNode(_sfc_main$c, {\n                name: \"ChevronRight\",\n                size: \"24\"\n              })\n            ]),\n            _: 1\n          }, 8, [\"disabled\"])\n        ], 40, _hoisted_4$3)) : createCommentVNode(\"\", true)\n      ], 6);\n    };\n  }\n});\nconst CalendarHeader_vue_vue_type_style_index_0_lang = \"\";\nconst contextKey$1 = Symbol(\"__vc_page_context__\");\nfunction createPage(page) {\n  const { locale, getDateAddress, canMove } = useCalendar();\n  function getMonthItems(year, mask) {\n    const { month: thisMonth, year: thisYear } = getDateAddress(/* @__PURE__ */ new Date());\n    return getMonthDates().map((d, i) => {\n      const month = i + 1;\n      return {\n        month,\n        year,\n        id: getPageId(month, year),\n        label: locale.value.formatDate(d, mask),\n        ariaLabel: locale.value.formatDate(d, \"MMMM\"),\n        isActive: month === page.value.month && year === page.value.year,\n        isCurrent: month === thisMonth && year === thisYear,\n        isDisabled: !canMove(\n          { month, year },\n          { position: page.value.position }\n        )\n      };\n    });\n  }\n  function getYearItems(startYear, endYear) {\n    const { year: thisYear } = getDateAddress(/* @__PURE__ */ new Date());\n    const { position } = page.value;\n    const items = [];\n    for (let year = startYear; year <= endYear; year += 1) {\n      const enabled = [...Array(12).keys()].some(\n        (m) => canMove({ month: m + 1, year }, { position })\n      );\n      items.push({\n        year,\n        id: year.toString(),\n        label: year.toString(),\n        ariaLabel: year.toString(),\n        isActive: year === page.value.year,\n        isCurrent: year === thisYear,\n        isDisabled: !enabled\n      });\n    }\n    return items;\n  }\n  const context = { page, getMonthItems, getYearItems };\n  provide(contextKey$1, context);\n  return context;\n}\nfunction usePage() {\n  const context = inject(contextKey$1);\n  if (context)\n    return context;\n  throw new Error(\n    \"Page context missing. Please verify this component is nested within a valid context provider.\"\n  );\n}\nconst _hoisted_1$5 = { class: \"vc-nav-header\" };\nconst _hoisted_2$4 = [\"disabled\"];\nconst _hoisted_3$3 = [\"disabled\"];\nconst _hoisted_4$2 = { class: \"vc-nav-items\" };\nconst _hoisted_5$2 = [\"data-id\", \"aria-label\", \"disabled\", \"onClick\", \"onKeydown\"];\nconst _sfc_main$a = /* @__PURE__ */ defineComponent({\n  __name: \"CalendarNav\",\n  setup(__props) {\n    const { masks: masks2, move } = useCalendar();\n    const { page, getMonthItems, getYearItems } = usePage();\n    const monthMode = ref(true);\n    const yearGroupCount = 12;\n    const selectedYear = ref(page.value.year);\n    const selectedYearGroup = ref(getYearGroupIndex(page.value.year));\n    const navContainer = ref(null);\n    function focusFirstItem() {\n      setTimeout(() => {\n        if (navContainer.value == null)\n          return;\n        const focusableEl = navContainer.value.querySelector(\n          \".vc-nav-item:not(:disabled)\"\n        );\n        if (focusableEl) {\n          focusableEl.focus();\n        }\n      }, 10);\n    }\n    function getYearGroupIndex(year) {\n      return Math.floor(year / yearGroupCount);\n    }\n    function toggleMode() {\n      monthMode.value = !monthMode.value;\n    }\n    function getStartYear(groupIndex) {\n      return groupIndex * yearGroupCount;\n    }\n    function getEndYear(groupIndex) {\n      return yearGroupCount * (groupIndex + 1) - 1;\n    }\n    function movePrev() {\n      if (!prevItemsEnabled.value)\n        return;\n      if (monthMode.value) {\n        movePrevYear();\n      }\n      movePrevYearGroup();\n    }\n    function moveNext() {\n      if (!nextItemsEnabled.value)\n        return;\n      if (monthMode.value) {\n        moveNextYear();\n      }\n      moveNextYearGroup();\n    }\n    function movePrevYear() {\n      selectedYear.value--;\n    }\n    function moveNextYear() {\n      selectedYear.value++;\n    }\n    function movePrevYearGroup() {\n      selectedYearGroup.value--;\n    }\n    function moveNextYearGroup() {\n      selectedYearGroup.value++;\n    }\n    const monthItems = computed(\n      () => getMonthItems(selectedYear.value, masks2.value.navMonths).map((item) => ({\n        ...item,\n        click: () => move(\n          { month: item.month, year: item.year },\n          { position: page.value.position }\n        )\n      }))\n    );\n    const prevMonthItems = computed(\n      () => getMonthItems(selectedYear.value - 1, masks2.value.navMonths)\n    );\n    const prevMonthItemsEnabled = computed(\n      () => prevMonthItems.value.some((i) => !i.isDisabled)\n    );\n    const nextMonthItems = computed(\n      () => getMonthItems(selectedYear.value + 1, masks2.value.navMonths)\n    );\n    const nextMonthItemsEnabled = computed(\n      () => nextMonthItems.value.some((i) => !i.isDisabled)\n    );\n    const yearItems = computed(\n      () => getYearItems(\n        getStartYear(selectedYearGroup.value),\n        getEndYear(selectedYearGroup.value)\n      ).map((item) => {\n        return {\n          ...item,\n          click: () => {\n            selectedYear.value = item.year;\n            monthMode.value = true;\n            focusFirstItem();\n          }\n        };\n      })\n    );\n    const prevYearItems = computed(\n      () => getYearItems(\n        getStartYear(selectedYearGroup.value - 1),\n        getEndYear(selectedYearGroup.value - 1)\n      )\n    );\n    const prevYearItemsEnabled = computed(\n      () => prevYearItems.value.some((i) => !i.isDisabled)\n    );\n    const nextYearItems = computed(\n      () => getYearItems(\n        getStartYear(selectedYearGroup.value + 1),\n        getEndYear(selectedYearGroup.value + 1)\n      )\n    );\n    const nextYearItemsEnabled = computed(\n      () => nextYearItems.value.some((i) => !i.isDisabled)\n    );\n    const activeItems = computed(\n      () => monthMode.value ? monthItems.value : yearItems.value\n    );\n    const prevItemsEnabled = computed(\n      () => monthMode.value ? prevMonthItemsEnabled.value : prevYearItemsEnabled.value\n    );\n    const nextItemsEnabled = computed(\n      () => monthMode.value ? nextMonthItemsEnabled.value : nextYearItemsEnabled.value\n    );\n    const firstYear = computed(() => head_1(yearItems.value.map((i) => i.year)));\n    const lastYear = computed(() => last_1(yearItems.value.map((i) => i.year)));\n    const title2 = computed(() => {\n      return monthMode.value ? selectedYear.value : `${firstYear.value} - ${lastYear.value}`;\n    });\n    watchEffect(() => {\n      selectedYear.value = page.value.year;\n      focusFirstItem();\n    });\n    watch(\n      () => selectedYear.value,\n      (val) => selectedYearGroup.value = getYearGroupIndex(val)\n    );\n    onMounted(() => focusFirstItem());\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: \"vc-nav-container\",\n        ref_key: \"navContainer\",\n        ref: navContainer\n      }, [\n        createElementVNode(\"div\", _hoisted_1$5, [\n          createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"vc-nav-arrow is-left vc-focus\",\n            disabled: !unref(prevItemsEnabled),\n            onClick: movePrev,\n            onKeydown: _cache[0] || (_cache[0] = (e) => unref(onSpaceOrEnter)(e, movePrev))\n          }, [\n            createVNode(_sfc_main$i, {\n              name: \"nav-prev-button\",\n              move: movePrev,\n              disabled: !unref(prevItemsEnabled)\n            }, {\n              default: withCtx(() => [\n                createVNode(_sfc_main$c, {\n                  name: \"ChevronLeft\",\n                  width: \"22px\",\n                  height: \"24px\"\n                })\n              ]),\n              _: 1\n            }, 8, [\"disabled\"])\n          ], 40, _hoisted_2$4),\n          createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"vc-nav-title vc-focus\",\n            onClick: toggleMode,\n            onKeydown: _cache[1] || (_cache[1] = (e) => unref(onSpaceOrEnter)(e, toggleMode))\n          }, toDisplayString(unref(title2)), 33),\n          createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"vc-nav-arrow is-right vc-focus\",\n            disabled: !unref(nextItemsEnabled),\n            onClick: moveNext,\n            onKeydown: _cache[2] || (_cache[2] = (e) => unref(onSpaceOrEnter)(e, moveNext))\n          }, [\n            createVNode(_sfc_main$i, {\n              name: \"nav-next-button\",\n              move: moveNext,\n              disabled: !unref(nextItemsEnabled)\n            }, {\n              default: withCtx(() => [\n                createVNode(_sfc_main$c, {\n                  name: \"ChevronRight\",\n                  width: \"22px\",\n                  height: \"24px\"\n                })\n              ]),\n              _: 1\n            }, 8, [\"disabled\"])\n          ], 40, _hoisted_3$3)\n        ]),\n        createElementVNode(\"div\", _hoisted_4$2, [\n          (openBlock(true), createElementBlock(Fragment, null, renderList(unref(activeItems), (item) => {\n            return openBlock(), createElementBlock(\"button\", {\n              key: item.label,\n              type: \"button\",\n              \"data-id\": item.id,\n              \"aria-label\": item.ariaLabel,\n              class: normalizeClass([\"vc-nav-item vc-focus\", [\n                item.isActive ? \"is-active\" : item.isCurrent ? \"is-current\" : \"\"\n              ]]),\n              disabled: item.isDisabled,\n              onClick: item.click,\n              onKeydown: (e) => unref(onSpaceOrEnter)(e, item.click)\n            }, toDisplayString(item.label), 43, _hoisted_5$2);\n          }), 128))\n        ])\n      ], 512);\n    };\n  }\n});\nconst CalendarNav_vue_vue_type_style_index_0_lang = \"\";\nconst _sfc_main$9 = /* @__PURE__ */ defineComponent({\n  __name: \"CalendarPageProvider\",\n  props: {\n    page: null\n  },\n  setup(__props) {\n    const props = __props;\n    createPage(toRef(props, \"page\"));\n    return (_ctx, _cache) => {\n      return renderSlot(_ctx.$slots, \"default\");\n    };\n  }\n});\nconst _sfc_main$8 = /* @__PURE__ */ defineComponent({\n  __name: \"CalendarNavPopover\",\n  setup(__props) {\n    const { navPopoverId, color, displayMode } = useCalendar();\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(Popover, {\n        id: unref(navPopoverId),\n        class: normalizeClass([\"vc-nav-popover-container\", `vc-${unref(color)}`, `vc-${unref(displayMode)}`])\n      }, {\n        default: withCtx(({ data: data2 }) => [\n          createVNode(_sfc_main$9, {\n            page: data2.page\n          }, {\n            default: withCtx(() => [\n              createVNode(_sfc_main$i, { name: \"nav\" }, {\n                default: withCtx(() => [\n                  createVNode(_sfc_main$a)\n                ]),\n                _: 1\n              })\n            ]),\n            _: 2\n          }, 1032, [\"page\"])\n        ]),\n        _: 1\n      }, 8, [\"id\", \"class\"]);\n    };\n  }\n});\nconst _sfc_main$7 = defineComponent({\n  directives: { popover: popoverDirective },\n  components: { CalendarSlot: _sfc_main$i },\n  props: {\n    day: { type: Object, required: true }\n  },\n  setup(props) {\n    const {\n      locale,\n      theme,\n      attributeContext,\n      dayPopoverId,\n      onDayClick,\n      onDayMouseenter,\n      onDayMouseleave,\n      onDayFocusin,\n      onDayFocusout,\n      onDayKeydown\n    } = useCalendar();\n    const day = computed(() => props.day);\n    const attributeCells = computed(() => {\n      return attributeContext.value.getCells(day.value);\n    });\n    const attributes = computed(\n      () => attributeCells.value.map((cell) => cell.data)\n    );\n    const attributedDay = computed(() => {\n      return {\n        ...day.value,\n        attributes: attributes.value,\n        attributeCells: attributeCells.value\n      };\n    });\n    function processPopover({ data: attribute }, { popovers: popovers2 }) {\n      const { key, customData, popover } = attribute;\n      if (!popover)\n        return;\n      const resolvedPopover = defaults_1(\n        {\n          key,\n          customData,\n          attribute\n        },\n        { ...popover },\n        {\n          visibility: popover.label ? \"hover\" : \"click\",\n          placement: \"bottom\",\n          isInteractive: !popover.label\n        }\n      );\n      popovers2.splice(0, 0, resolvedPopover);\n    }\n    const glyphs = computed(() => {\n      const result = {\n        ...theme.value.prepareRender({}),\n        popovers: []\n      };\n      attributeCells.value.forEach((cell) => {\n        theme.value.render(cell, result);\n        processPopover(cell, result);\n      });\n      return result;\n    });\n    const highlights = computed(() => glyphs.value.highlights);\n    const hasHighlights = computed(() => !!arrayHasItems(highlights.value));\n    const content = computed(() => glyphs.value.content);\n    const dots = computed(() => glyphs.value.dots);\n    const hasDots = computed(() => !!arrayHasItems(dots.value));\n    const bars = computed(() => glyphs.value.bars);\n    const hasBars = computed(() => !!arrayHasItems(bars.value));\n    const popovers = computed(() => glyphs.value.popovers);\n    const popoverAttrs = computed(\n      () => popovers.value.map((p) => p.attribute)\n    );\n    const dayContentSlot = useSlot(\"day-content\");\n    const dayClasses = computed(() => {\n      return [\n        \"vc-day\",\n        ...day.value.classes,\n        { \"vc-day-box-center-center\": !dayContentSlot },\n        { \"is-not-in-month\": !props.day.inMonth }\n      ];\n    });\n    const dayContentProps = computed(() => {\n      let tabindex;\n      if (day.value.isFocusable) {\n        tabindex = \"0\";\n      } else {\n        tabindex = \"-1\";\n      }\n      const classes = [\n        \"vc-day-content vc-focusable vc-focus vc-attr\",\n        { \"vc-disabled\": day.value.isDisabled },\n        get_1(last_1(highlights.value), \"contentClass\"),\n        get_1(last_1(content.value), \"class\") || \"\"\n      ];\n      const style = {\n        ...get_1(last_1(highlights.value), \"contentStyle\"),\n        ...get_1(last_1(content.value), \"style\")\n      };\n      return {\n        class: classes,\n        style,\n        tabindex,\n        \"aria-label\": day.value.ariaLabel,\n        \"aria-disabled\": day.value.isDisabled ? true : false,\n        role: \"button\"\n      };\n    });\n    const dayContentEvents = computed(() => {\n      return {\n        click(event) {\n          onDayClick(attributedDay.value, event);\n        },\n        mouseenter(event) {\n          onDayMouseenter(attributedDay.value, event);\n        },\n        mouseleave(event) {\n          onDayMouseleave(attributedDay.value, event);\n        },\n        focusin(event) {\n          onDayFocusin(attributedDay.value, event);\n        },\n        focusout(event) {\n          onDayFocusout(attributedDay.value, event);\n        },\n        keydown(event) {\n          onDayKeydown(attributedDay.value, event);\n        }\n      };\n    });\n    const dayPopover2 = computed(() => {\n      if (!arrayHasItems(popovers.value))\n        return null;\n      return defaults_1(\n        {\n          id: dayPopoverId.value,\n          data: { day, attributes: popoverAttrs.value }\n        },\n        ...popovers.value\n      );\n    });\n    return {\n      attributes,\n      attributeCells,\n      bars,\n      dayClasses,\n      dayContentProps,\n      dayContentEvents,\n      dayPopover: dayPopover2,\n      glyphs,\n      dots,\n      hasDots,\n      hasBars,\n      highlights,\n      hasHighlights,\n      locale,\n      popovers\n    };\n  }\n});\nconst CalendarDay_vue_vue_type_style_index_0_lang = \"\";\nconst _hoisted_1$4 = {\n  key: 0,\n  class: \"vc-highlights vc-day-layer\"\n};\nconst _hoisted_2$3 = {\n  key: 1,\n  class: \"vc-day-layer vc-day-box-center-bottom\"\n};\nconst _hoisted_3$2 = { class: \"vc-dots\" };\nconst _hoisted_4$1 = {\n  key: 2,\n  class: \"vc-day-layer vc-day-box-center-bottom\"\n};\nconst _hoisted_5$1 = { class: \"vc-bars\" };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_CalendarSlot = resolveComponent(\"CalendarSlot\");\n  const _directive_popover = resolveDirective(\"popover\");\n  return openBlock(), createElementBlock(\"div\", {\n    class: normalizeClass(_ctx.dayClasses)\n  }, [\n    _ctx.hasHighlights ? (openBlock(), createElementBlock(\"div\", _hoisted_1$4, [\n      (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.highlights, ({ key, wrapperClass, class: bgClass, style }) => {\n        return openBlock(), createElementBlock(\"div\", {\n          key,\n          class: normalizeClass(wrapperClass)\n        }, [\n          createElementVNode(\"div\", {\n            class: normalizeClass(bgClass),\n            style: normalizeStyle(style)\n          }, null, 6)\n        ], 2);\n      }), 128))\n    ])) : createCommentVNode(\"\", true),\n    createVNode(_component_CalendarSlot, {\n      name: \"day-content\",\n      day: _ctx.day,\n      attributes: _ctx.attributes,\n      \"attribute-cells\": _ctx.attributeCells,\n      dayProps: _ctx.dayContentProps,\n      dayEvents: _ctx.dayContentEvents,\n      locale: _ctx.locale\n    }, {\n      default: withCtx(() => [\n        withDirectives((openBlock(), createElementBlock(\"div\", mergeProps(_ctx.dayContentProps, toHandlers(_ctx.dayContentEvents, true)), [\n          createTextVNode(toDisplayString(_ctx.day.label), 1)\n        ], 16)), [\n          [_directive_popover, _ctx.dayPopover]\n        ])\n      ]),\n      _: 1\n    }, 8, [\"day\", \"attributes\", \"attribute-cells\", \"dayProps\", \"dayEvents\", \"locale\"]),\n    _ctx.hasDots ? (openBlock(), createElementBlock(\"div\", _hoisted_2$3, [\n      createElementVNode(\"div\", _hoisted_3$2, [\n        (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.dots, ({ key, class: bgClass, style }) => {\n          return openBlock(), createElementBlock(\"span\", {\n            key,\n            class: normalizeClass(bgClass),\n            style: normalizeStyle(style)\n          }, null, 6);\n        }), 128))\n      ])\n    ])) : createCommentVNode(\"\", true),\n    _ctx.hasBars ? (openBlock(), createElementBlock(\"div\", _hoisted_4$1, [\n      createElementVNode(\"div\", _hoisted_5$1, [\n        (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.bars, ({ key, class: bgClass, style }) => {\n          return openBlock(), createElementBlock(\"span\", {\n            key,\n            class: normalizeClass(bgClass),\n            style: normalizeStyle(style)\n          }, null, 6);\n        }), 128))\n      ])\n    ])) : createCommentVNode(\"\", true)\n  ], 2);\n}\nconst CalendarDay = /* @__PURE__ */ _export_sfc(_sfc_main$7, [[\"render\", _sfc_render$2]]);\nconst _hoisted_1$3 = { class: \"vc-weekdays\" };\nconst _hoisted_2$2 = [\"onClick\"];\nconst __default__$2 = {\n  inheritAttrs: false\n};\nconst _sfc_main$6 = /* @__PURE__ */ defineComponent({\n  ...__default__$2,\n  __name: \"CalendarPage\",\n  setup(__props) {\n    const { page } = usePage();\n    const { onWeeknumberClick } = useCalendar();\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: normalizeClass([\n          \"vc-pane\",\n          `row-${unref(page).row}`,\n          `row-from-end-${unref(page).rowFromEnd}`,\n          `column-${unref(page).column}`,\n          `column-from-end-${unref(page).columnFromEnd}`\n        ]),\n        ref: \"pane\"\n      }, [\n        createVNode(_sfc_main$b, {\n          page: unref(page),\n          \"is-lg\": \"\",\n          \"hide-arrows\": \"\"\n        }, null, 8, [\"page\"]),\n        createElementVNode(\"div\", {\n          class: normalizeClass([\"vc-weeks\", {\n            [`vc-show-weeknumbers-${unref(page).weeknumberPosition}`]: unref(page).weeknumberPosition\n          }])\n        }, [\n          createElementVNode(\"div\", _hoisted_1$3, [\n            (openBlock(true), createElementBlock(Fragment, null, renderList(unref(page).weekdays, ({ weekday, label }, i) => {\n              return openBlock(), createElementBlock(\"div\", {\n                key: i,\n                class: normalizeClass(`vc-weekday vc-weekday-${weekday}`)\n              }, toDisplayString(label), 3);\n            }), 128))\n          ]),\n          (openBlock(true), createElementBlock(Fragment, null, renderList(unref(page).viewWeeks, (week) => {\n            return openBlock(), createElementBlock(\"div\", {\n              key: `weeknumber-${week.weeknumber}`,\n              class: \"vc-week\"\n            }, [\n              unref(page).weeknumberPosition ? (openBlock(), createElementBlock(\"div\", {\n                key: 0,\n                class: normalizeClass([\"vc-weeknumber\", `is-${unref(page).weeknumberPosition}`])\n              }, [\n                createElementVNode(\"span\", {\n                  class: normalizeClass([\"vc-weeknumber-content\"]),\n                  onClick: ($event) => unref(onWeeknumberClick)(week, $event)\n                }, toDisplayString(week.weeknumberDisplay), 9, _hoisted_2$2)\n              ], 2)) : createCommentVNode(\"\", true),\n              (openBlock(true), createElementBlock(Fragment, null, renderList(week.days, (day) => {\n                return openBlock(), createBlock(CalendarDay, {\n                  key: day.id,\n                  day\n                }, null, 8, [\"day\"]);\n              }), 128))\n            ]);\n          }), 128))\n        ], 2)\n      ], 2);\n    };\n  }\n});\nconst CalendarPage_vue_vue_type_style_index_0_lang = \"\";\nconst _sfc_main$5 = defineComponent({\n  components: {\n    CalendarHeader: _sfc_main$b,\n    CalendarPage: _sfc_main$6,\n    CalendarNavPopover: _sfc_main$8,\n    CalendarDayPopover: _sfc_main$h,\n    CalendarPageProvider: _sfc_main$9,\n    CalendarSlot: _sfc_main$i\n  },\n  props: propsDef$1,\n  emit: emitsDef,\n  setup(props, { emit, slots }) {\n    return createCalendar(props, { emit, slots });\n  }\n});\nconst Calendar_vue_vue_type_style_index_0_lang = \"\";\nconst _hoisted_1$2 = { class: \"vc-pane-header-wrapper\" };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_CalendarHeader = resolveComponent(\"CalendarHeader\");\n  const _component_CalendarPage = resolveComponent(\"CalendarPage\");\n  const _component_CalendarSlot = resolveComponent(\"CalendarSlot\");\n  const _component_CalendarPageProvider = resolveComponent(\"CalendarPageProvider\");\n  const _component_CalendarDayPopover = resolveComponent(\"CalendarDayPopover\");\n  const _component_CalendarNavPopover = resolveComponent(\"CalendarNavPopover\");\n  return openBlock(), createElementBlock(Fragment, null, [\n    createElementVNode(\"div\", mergeProps({ \"data-helptext\": \"Press the arrow keys to navigate by day, Home and End to navigate to week ends, PageUp and PageDown to navigate by month, Alt+PageUp and Alt+PageDown to navigate by year\" }, _ctx.$attrs, {\n      class: [\n        \"vc-container\",\n        `vc-${_ctx.view}`,\n        `vc-${_ctx.color}`,\n        `vc-${_ctx.displayMode}`,\n        {\n          \"vc-expanded\": _ctx.expanded,\n          \"vc-bordered\": !_ctx.borderless,\n          \"vc-transparent\": _ctx.transparent\n        }\n      ],\n      onMouseup: _cache[0] || (_cache[0] = withModifiers(() => {\n      }, [\"prevent\"])),\n      ref: \"containerRef\"\n    }), [\n      createElementVNode(\"div\", {\n        class: normalizeClass([\"vc-pane-container\", { \"in-transition\": _ctx.inTransition }])\n      }, [\n        createElementVNode(\"div\", _hoisted_1$2, [\n          _ctx.firstPage ? (openBlock(), createBlock(_component_CalendarHeader, {\n            key: 0,\n            page: _ctx.firstPage,\n            \"is-lg\": \"\",\n            \"hide-title\": \"\"\n          }, null, 8, [\"page\"])) : createCommentVNode(\"\", true)\n        ]),\n        createVNode(Transition, {\n          name: `vc-${_ctx.transitionName}`,\n          onBeforeEnter: _ctx.onTransitionBeforeEnter,\n          onAfterEnter: _ctx.onTransitionAfterEnter\n        }, {\n          default: withCtx(() => [\n            (openBlock(), createElementBlock(\"div\", {\n              key: _ctx.pages[0].id,\n              class: \"vc-pane-layout\",\n              style: normalizeStyle({\n                gridTemplateColumns: `repeat(${_ctx.columns}, 1fr)`\n              })\n            }, [\n              (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.pages, (page) => {\n                return openBlock(), createBlock(_component_CalendarPageProvider, {\n                  key: page.id,\n                  page\n                }, {\n                  default: withCtx(() => [\n                    createVNode(_component_CalendarSlot, {\n                      name: \"page\",\n                      page\n                    }, {\n                      default: withCtx(() => [\n                        createVNode(_component_CalendarPage)\n                      ]),\n                      _: 2\n                    }, 1032, [\"page\"])\n                  ]),\n                  _: 2\n                }, 1032, [\"page\"]);\n              }), 128))\n            ], 4))\n          ]),\n          _: 1\n        }, 8, [\"name\", \"onBeforeEnter\", \"onAfterEnter\"]),\n        createVNode(_component_CalendarSlot, { name: \"footer\" })\n      ], 2)\n    ], 16),\n    createVNode(_component_CalendarDayPopover),\n    createVNode(_component_CalendarNavPopover)\n  ], 64);\n}\nconst Calendar = /* @__PURE__ */ _export_sfc(_sfc_main$5, [[\"render\", _sfc_render$1]]);\nconst contextKey = Symbol(\"__vc_date_picker_context__\");\nconst propsDef = {\n  ...propsDef$2,\n  mode: { type: String, default: \"date\" },\n  modelValue: {\n    type: [Number, String, Date, Object]\n  },\n  modelModifiers: {\n    type: Object,\n    default: () => ({})\n  },\n  rules: [String, Object],\n  is24hr: Boolean,\n  hideTimeHeader: Boolean,\n  timeAccuracy: { type: Number, default: 2 },\n  isRequired: Boolean,\n  isRange: Boolean,\n  updateOnInput: {\n    type: Boolean,\n    default: () => getDefault(\"datePicker.updateOnInput\")\n  },\n  inputDebounce: {\n    type: Number,\n    default: () => getDefault(\"datePicker.inputDebounce\")\n  },\n  popover: {\n    type: [Boolean, Object],\n    default: true\n  },\n  dragAttribute: Object,\n  selectAttribute: Object,\n  attributes: [Object, Array]\n};\nconst emits = [\n  \"update:modelValue\",\n  \"drag\",\n  \"dayclick\",\n  \"daykeydown\",\n  \"popover-will-show\",\n  \"popover-did-show\",\n  \"popover-will-hide\",\n  \"popover-did-hide\"\n];\nfunction createDatePicker(props, { emit, slots }) {\n  provideSlots(slots, { footer: \"dp-footer\" });\n  const baseCtx = createBase(props);\n  const { locale, masks: masks2, disabledAttribute } = baseCtx;\n  const showCalendar = ref(false);\n  const datePickerPopoverId = ref(Symbol());\n  const dateValue = ref(null);\n  const dragValue = ref(null);\n  const inputValues = ref([\"\", \"\"]);\n  const popoverRef = ref(null);\n  const calendarRef = ref(null);\n  let updateTimeout = void 0;\n  let dragTrackingValue;\n  let watchValue = true;\n  const isRange = computed(() => {\n    return props.isRange || props.modelModifiers.range === true;\n  });\n  const valueStart = computed(\n    () => isRange.value && dateValue.value != null ? dateValue.value.start : null\n  );\n  const valueEnd = computed(\n    () => isRange.value && dateValue.value != null ? dateValue.value.end : null\n  );\n  const isDateMode = computed(() => props.mode.toLowerCase() === \"date\");\n  const isDateTimeMode = computed(\n    () => props.mode.toLowerCase() === \"datetime\"\n  );\n  const isTimeMode = computed(() => props.mode.toLowerCase() === \"time\");\n  const isDragging = computed(() => !!dragValue.value);\n  const modelConfig = computed(() => {\n    let type = \"date\";\n    if (props.modelModifiers.number)\n      type = \"number\";\n    if (props.modelModifiers.string)\n      type = \"string\";\n    const mask = masks2.value.modelValue || \"iso\";\n    return normalizeConfig2({ type, mask });\n  });\n  const dateParts = computed(\n    () => getDateParts2(dragValue.value ?? dateValue.value)\n  );\n  const inputMask = computed(() => {\n    if (isTimeMode.value) {\n      return props.is24hr ? masks2.value.inputTime24hr : masks2.value.inputTime;\n    }\n    if (isDateTimeMode.value) {\n      return props.is24hr ? masks2.value.inputDateTime24hr : masks2.value.inputDateTime;\n    }\n    return masks2.value.input;\n  });\n  const inputMaskHasTime = computed(() => /[Hh]/g.test(inputMask.value));\n  const inputMaskHasDate = computed(\n    () => /[dD]{1,2}|Do|W{1,4}|M{1,4}|YY(?:YY)?/g.test(inputMask.value)\n  );\n  const inputMaskPatch = computed(() => {\n    if (inputMaskHasTime.value && inputMaskHasDate.value) {\n      return \"dateTime\";\n    }\n    if (inputMaskHasDate.value)\n      return \"date\";\n    if (inputMaskHasTime.value)\n      return \"time\";\n    return void 0;\n  });\n  const popover = computed(() => {\n    var _a;\n    const target = ((_a = popoverRef.value) == null ? void 0 : _a.$el.previousElementSibling) ?? void 0;\n    return defaultsDeep_1({}, props.popover, getDefault(\"datePicker.popover\"), {\n      target\n    });\n  });\n  const popoverEvents = computed(\n    () => getPopoverEventHandlers({\n      ...popover.value,\n      id: datePickerPopoverId.value\n    })\n  );\n  const inputValue = computed(() => {\n    return isRange.value ? {\n      start: inputValues.value[0],\n      end: inputValues.value[1]\n    } : inputValues.value[0];\n  });\n  const inputEvents = computed(() => {\n    const events = [\"start\", \"end\"].map((target) => ({\n      input: onInputInput(target),\n      change: onInputChange(target),\n      keyup: onInputKeyup,\n      ...props.popover && popoverEvents.value\n    }));\n    return isRange.value ? {\n      start: events[0],\n      end: events[1]\n    } : events[0];\n  });\n  const selectAttribute = computed(() => {\n    if (!hasValue(dateValue.value))\n      return null;\n    const attribute = {\n      key: \"select-drag\",\n      ...props.selectAttribute,\n      dates: dateValue.value,\n      pinPage: true\n    };\n    const { dot, bar, highlight, content } = attribute;\n    if (!dot && !bar && !highlight && !content) {\n      attribute.highlight = true;\n    }\n    return attribute;\n  });\n  const dragAttribute = computed(() => {\n    if (!isRange.value || !hasValue(dragValue.value)) {\n      return null;\n    }\n    const attribute = {\n      key: \"select-drag\",\n      ...props.dragAttribute,\n      dates: dragValue.value\n    };\n    const { dot, bar, highlight, content } = attribute;\n    if (!dot && !bar && !highlight && !content) {\n      attribute.highlight = {\n        startEnd: {\n          fillMode: \"outline\"\n        }\n      };\n    }\n    return attribute;\n  });\n  const attributes = computed(() => {\n    const attrs = isArray(props.attributes) ? [...props.attributes] : [];\n    if (dragAttribute.value) {\n      attrs.unshift(dragAttribute.value);\n    } else if (selectAttribute.value) {\n      attrs.unshift(selectAttribute.value);\n    }\n    return attrs;\n  });\n  const rules = computed(() => {\n    return normalizeConfig2(\n      props.rules === \"auto\" ? getAutoRules() : props.rules ?? {}\n    );\n  });\n  function getAutoRules() {\n    const _rules = {\n      ms: [0, 999],\n      sec: [0, 59],\n      min: [0, 59],\n      hr: [0, 23]\n    };\n    const accuracy = isDateMode.value ? 0 : props.timeAccuracy;\n    return [0, 1].map((i) => {\n      switch (accuracy) {\n        case 0:\n          return {\n            hours: _rules.hr[i],\n            minutes: _rules.min[i],\n            seconds: _rules.sec[i],\n            milliseconds: _rules.ms[i]\n          };\n        case 1:\n          return {\n            minutes: _rules.min[i],\n            seconds: _rules.sec[i],\n            milliseconds: _rules.ms[i]\n          };\n        case 3:\n          return { milliseconds: _rules.ms[i] };\n        case 4:\n          return {};\n        default:\n          return { seconds: _rules.sec[i], milliseconds: _rules.ms[i] };\n      }\n    });\n  }\n  function normalizeConfig2(config2) {\n    if (isArray(config2)) {\n      if (config2.length === 1)\n        return [config2[0], config2[0]];\n      return config2;\n    }\n    return [config2, config2];\n  }\n  function normalizeDateConfig(config2) {\n    return normalizeConfig2(config2).map(\n      (c, i) => ({\n        ...c,\n        rules: rules.value[i]\n      })\n    );\n  }\n  function hasDateValue(value) {\n    if (value == null)\n      return false;\n    if (isNumber_1(value))\n      return !isNaN(value);\n    if (isDate(value))\n      return !isNaN(value.getTime());\n    if (isString_1(value))\n      return value !== \"\";\n    return isDateParts(value);\n  }\n  function hasRangeValue(value) {\n    return isObject(value) && \"start\" in value && \"end\" in value && hasDateValue(value.start ?? null) && hasDateValue(value.end ?? null);\n  }\n  function hasValue(value) {\n    return hasRangeValue(value) || hasDateValue(value);\n  }\n  function valuesAreEqual(a, b) {\n    if (a == null && b == null)\n      return true;\n    if (a == null || b == null)\n      return false;\n    const aIsDate = isDate(a);\n    const bIsDate = isDate(b);\n    if (aIsDate && bIsDate)\n      return a.getTime() === b.getTime();\n    if (aIsDate || bIsDate)\n      return false;\n    return valuesAreEqual(a.start, b.start) && valuesAreEqual(a.end, b.end);\n  }\n  function valueIsDisabled(value) {\n    if (!hasValue(value) || !disabledAttribute.value)\n      return false;\n    return disabledAttribute.value.intersectsRange(locale.value.range(value));\n  }\n  function normalizeValue(value, config2, patch, targetPriority) {\n    if (!hasValue(value))\n      return null;\n    if (hasRangeValue(value)) {\n      const start = locale.value.toDate(value.start, {\n        ...config2[0],\n        fillDate: valueStart.value ?? void 0,\n        patch\n      });\n      const end = locale.value.toDate(value.end, {\n        ...config2[1],\n        fillDate: valueEnd.value ?? void 0,\n        patch\n      });\n      return sortRange({ start, end }, targetPriority);\n    }\n    return locale.value.toDateOrNull(value, {\n      ...config2[0],\n      fillDate: dateValue.value,\n      patch\n    });\n  }\n  function denormalizeValue(value, config2) {\n    if (hasRangeValue(value)) {\n      return {\n        start: locale.value.fromDate(value.start, config2[0]),\n        end: locale.value.fromDate(value.end, config2[1])\n      };\n    }\n    if (isRange.value) {\n      return null;\n    }\n    return locale.value.fromDate(value, config2[0]);\n  }\n  function updateValue(value, opts = {}) {\n    clearTimeout(updateTimeout);\n    return new Promise((resolve) => {\n      const { debounce = 0, ...args } = opts;\n      if (debounce > 0) {\n        updateTimeout = window.setTimeout(() => {\n          resolve(forceUpdateValue(value, args));\n        }, debounce);\n      } else {\n        resolve(forceUpdateValue(value, args));\n      }\n    });\n  }\n  function forceUpdateValue(value, {\n    config: config2 = modelConfig.value,\n    patch = \"dateTime\",\n    clearIfEqual = false,\n    formatInput: fInput = true,\n    hidePopover: hPopover = false,\n    dragging = isDragging.value,\n    targetPriority,\n    moveToValue: mValue = false\n  } = {}) {\n    const normalizedConfig = normalizeDateConfig(config2);\n    let normalizedValue = normalizeValue(\n      value,\n      normalizedConfig,\n      patch,\n      targetPriority\n    );\n    const isDisabled = valueIsDisabled(normalizedValue);\n    if (isDisabled) {\n      if (dragging)\n        return null;\n      normalizedValue = dateValue.value;\n      hPopover = false;\n    } else if (normalizedValue == null && props.isRequired) {\n      normalizedValue = dateValue.value;\n    } else if (\n      // Clear value if same value was passed\n      normalizedValue != null && valuesAreEqual(dateValue.value, normalizedValue) && clearIfEqual\n    ) {\n      normalizedValue = null;\n    }\n    const valueRef = dragging ? dragValue : dateValue;\n    const notify = !valuesAreEqual(valueRef.value, normalizedValue);\n    valueRef.value = normalizedValue;\n    if (!dragging)\n      dragValue.value = null;\n    const denormalizedValue = denormalizeValue(\n      normalizedValue,\n      modelConfig.value\n    );\n    if (notify) {\n      watchValue = false;\n      emit(dragging ? \"drag\" : \"update:modelValue\", denormalizedValue);\n      nextTick(() => watchValue = true);\n    }\n    if (hPopover && !dragging)\n      hidePopover$1();\n    if (fInput)\n      formatInput();\n    if (mValue) {\n      nextTick(() => moveToValue(targetPriority ?? \"start\"));\n    }\n    return denormalizedValue;\n  }\n  function formatInput() {\n    nextTick(() => {\n      const config2 = normalizeDateConfig({\n        type: \"string\",\n        mask: inputMask.value\n      });\n      const value = denormalizeValue(\n        dragValue.value ?? dateValue.value,\n        config2\n      );\n      if (isRange.value) {\n        inputValues.value = [value && value.start, value && value.end];\n      } else {\n        inputValues.value = [value, \"\"];\n      }\n    });\n  }\n  function onInputUpdate(inputValue2, target, opts) {\n    inputValues.value.splice(target === \"start\" ? 0 : 1, 1, inputValue2);\n    const value = isRange.value ? {\n      start: inputValues.value[0],\n      end: inputValues.value[1] || inputValues.value[0]\n    } : inputValue2;\n    const config2 = {\n      type: \"string\",\n      mask: inputMask.value\n    };\n    updateValue(value, {\n      ...opts,\n      config: config2,\n      patch: inputMaskPatch.value,\n      targetPriority: target,\n      moveToValue: true\n    });\n  }\n  function onInputInput(target) {\n    return (e) => {\n      if (!props.updateOnInput)\n        return;\n      onInputUpdate(e.currentTarget.value, target, {\n        formatInput: false,\n        hidePopover: false,\n        debounce: props.inputDebounce\n      });\n    };\n  }\n  function onInputChange(target) {\n    return (e) => {\n      onInputUpdate(e.currentTarget.value, target, {\n        formatInput: true,\n        hidePopover: false\n      });\n    };\n  }\n  function onInputKeyup(e) {\n    if (e.key !== \"Escape\")\n      return;\n    updateValue(dateValue.value, {\n      formatInput: true,\n      hidePopover: true\n    });\n  }\n  function getDateParts2(value) {\n    if (isRange.value) {\n      return [\n        value && value.start ? locale.value.getDateParts(value.start) : null,\n        value && value.end ? locale.value.getDateParts(value.end) : null\n      ];\n    }\n    return [value ? locale.value.getDateParts(value) : null];\n  }\n  function cancelDrag() {\n    dragValue.value = null;\n    formatInput();\n  }\n  function onPopoverBeforeShow(el) {\n    emit(\"popover-will-show\", el);\n  }\n  function onPopoverAfterShow(el) {\n    emit(\"popover-did-show\", el);\n  }\n  function onPopoverBeforeHide(el) {\n    cancelDrag();\n    emit(\"popover-will-hide\", el);\n  }\n  function onPopoverAfterHide(el) {\n    emit(\"popover-did-hide\", el);\n  }\n  function handleDayClick(day) {\n    const opts = {\n      patch: \"date\",\n      formatInput: true,\n      hidePopover: true\n    };\n    if (isRange.value) {\n      const dragging = !isDragging.value;\n      if (dragging) {\n        dragTrackingValue = { start: day.startDate, end: day.endDate };\n      } else if (dragTrackingValue != null) {\n        dragTrackingValue.end = day.date;\n      }\n      updateValue(dragTrackingValue, {\n        ...opts,\n        dragging\n      });\n    } else {\n      updateValue(day.date, {\n        ...opts,\n        clearIfEqual: !props.isRequired\n      });\n    }\n  }\n  function onDayClick(day, event) {\n    handleDayClick(day);\n    emit(\"dayclick\", day, event);\n  }\n  function onDayKeydown(day, event) {\n    switch (event.key) {\n      case \" \":\n      case \"Enter\": {\n        handleDayClick(day);\n        event.preventDefault();\n        break;\n      }\n      case \"Escape\": {\n        hidePopover$1();\n      }\n    }\n    emit(\"daykeydown\", day, event);\n  }\n  function onDayMouseEnter(day, event) {\n    if (!isDragging.value || dragTrackingValue == null)\n      return;\n    dragTrackingValue.end = day.date;\n    updateValue(sortRange(dragTrackingValue), {\n      patch: \"date\",\n      formatInput: true\n    });\n  }\n  function showPopover$1(opts = {}) {\n    showPopover({\n      ...popover.value,\n      ...opts,\n      isInteractive: true,\n      id: datePickerPopoverId.value\n    });\n  }\n  function hidePopover$1(opts = {}) {\n    hidePopover({\n      hideDelay: 10,\n      force: true,\n      ...popover.value,\n      ...opts,\n      id: datePickerPopoverId.value\n    });\n  }\n  function togglePopover$1(opts) {\n    togglePopover({\n      ...popover.value,\n      ...opts,\n      isInteractive: true,\n      id: datePickerPopoverId.value\n    });\n  }\n  function sortRange(range, priority) {\n    const { start, end } = range;\n    if (start > end) {\n      switch (priority) {\n        case \"start\":\n          return { start, end: start };\n        case \"end\":\n          return { start: end, end };\n        default:\n          return { start: end, end: start };\n      }\n    }\n    return { start, end };\n  }\n  async function move(target, opts = {}) {\n    if (calendarRef.value == null)\n      return false;\n    return calendarRef.value.move(target, opts);\n  }\n  async function moveBy(pages, opts = {}) {\n    if (calendarRef.value == null)\n      return false;\n    return calendarRef.value.moveBy(pages, opts);\n  }\n  async function moveToValue(target, opts = {}) {\n    const dValue = dateValue.value;\n    if (calendarRef.value == null || !hasValue(dValue))\n      return false;\n    const start = target !== \"end\";\n    const position = start ? 1 : -1;\n    const date = hasRangeValue(dValue) ? start ? dValue.start : dValue.end : dValue;\n    const page = getPageAddressForDate(date, \"monthly\", locale.value);\n    return calendarRef.value.move(page, { position, ...opts });\n  }\n  watch(\n    () => props.isRange,\n    (val) => {\n      if (val) {\n        console.warn(\n          \"The `is-range` prop will be deprecated in future releases. Please use the `range` modifier.\"\n        );\n      }\n    },\n    { immediate: true }\n  );\n  watch(\n    () => isRange.value,\n    () => {\n      forceUpdateValue(null, { formatInput: true });\n    }\n  );\n  watch(\n    () => inputMask.value,\n    () => formatInput()\n  );\n  watch(\n    () => props.modelValue,\n    (val) => {\n      if (!watchValue)\n        return;\n      forceUpdateValue(val, {\n        formatInput: true,\n        hidePopover: false\n      });\n    }\n  );\n  watch(\n    () => rules.value,\n    () => {\n      if (isObject(props.rules)) {\n        forceUpdateValue(props.modelValue, {\n          formatInput: true,\n          hidePopover: false\n        });\n      }\n    }\n  );\n  watch(\n    () => props.timezone,\n    () => {\n      forceUpdateValue(dateValue.value, { formatInput: true });\n    }\n  );\n  const config = normalizeConfig2(modelConfig.value);\n  dateValue.value = normalizeValue(\n    props.modelValue ?? null,\n    config,\n    \"dateTime\"\n  );\n  onMounted(() => {\n    forceUpdateValue(props.modelValue, {\n      formatInput: true,\n      hidePopover: false\n    });\n  });\n  nextTick(() => showCalendar.value = true);\n  const context = {\n    ...baseCtx,\n    showCalendar,\n    datePickerPopoverId,\n    popoverRef,\n    popoverEvents,\n    calendarRef,\n    isRange,\n    isTimeMode,\n    isDateTimeMode,\n    is24hr: toRef(props, \"is24hr\"),\n    hideTimeHeader: toRef(props, \"hideTimeHeader\"),\n    timeAccuracy: toRef(props, \"timeAccuracy\"),\n    isDragging,\n    inputValue,\n    inputEvents,\n    dateParts,\n    attributes,\n    rules,\n    move,\n    moveBy,\n    moveToValue,\n    updateValue,\n    showPopover: showPopover$1,\n    hidePopover: hidePopover$1,\n    togglePopover: togglePopover$1,\n    onDayClick,\n    onDayKeydown,\n    onDayMouseEnter,\n    onPopoverBeforeShow,\n    onPopoverAfterShow,\n    onPopoverBeforeHide,\n    onPopoverAfterHide\n  };\n  provide(contextKey, context);\n  return context;\n}\nfunction useDatePicker() {\n  const context = inject(contextKey);\n  if (context)\n    return context;\n  throw new Error(\n    \"DatePicker context missing. Please verify this component is nested within a valid context provider.\"\n  );\n}\nconst _amOptions = [\n  { value: 0, label: \"12\" },\n  { value: 1, label: \"1\" },\n  { value: 2, label: \"2\" },\n  { value: 3, label: \"3\" },\n  { value: 4, label: \"4\" },\n  { value: 5, label: \"5\" },\n  { value: 6, label: \"6\" },\n  { value: 7, label: \"7\" },\n  { value: 8, label: \"8\" },\n  { value: 9, label: \"9\" },\n  { value: 10, label: \"10\" },\n  { value: 11, label: \"11\" }\n];\nconst _pmOptions = [\n  { value: 12, label: \"12\" },\n  { value: 13, label: \"1\" },\n  { value: 14, label: \"2\" },\n  { value: 15, label: \"3\" },\n  { value: 16, label: \"4\" },\n  { value: 17, label: \"5\" },\n  { value: 18, label: \"6\" },\n  { value: 19, label: \"7\" },\n  { value: 20, label: \"8\" },\n  { value: 21, label: \"9\" },\n  { value: 22, label: \"10\" },\n  { value: 23, label: \"11\" }\n];\nfunction createTimePicker(props) {\n  const ctx = useDatePicker();\n  const {\n    locale,\n    isRange,\n    isTimeMode,\n    dateParts,\n    rules,\n    is24hr,\n    hideTimeHeader,\n    timeAccuracy,\n    updateValue: updateDpValue\n  } = ctx;\n  function updateParts(newParts) {\n    newParts = Object.assign(parts.value, newParts);\n    let newValue = null;\n    if (isRange.value) {\n      const start = isStart.value ? newParts : dateParts.value[0];\n      const end = isStart.value ? dateParts.value[1] : newParts;\n      newValue = { start, end };\n    } else {\n      newValue = newParts;\n    }\n    updateDpValue(newValue, {\n      patch: \"time\",\n      targetPriority: isStart.value ? \"start\" : \"end\",\n      moveToValue: true\n    });\n  }\n  const isStart = computed(() => props.position === 0);\n  const parts = computed(\n    () => dateParts.value[props.position] || { isValid: false }\n  );\n  const partsValid = computed(() => isDateParts(parts.value));\n  const isValid = computed(() => !!parts.value.isValid);\n  const showHeader = computed(() => {\n    return !hideTimeHeader.value && isValid.value;\n  });\n  const date = computed(() => {\n    if (!partsValid.value)\n      return null;\n    let date2 = locale.value.toDate(parts.value);\n    if (parts.value.hours === 24) {\n      date2 = new Date(date2.getTime() - 1);\n    }\n    return date2;\n  });\n  const hours2 = computed({\n    get() {\n      return parts.value.hours;\n    },\n    set(val) {\n      updateParts({ hours: val });\n    }\n  });\n  const minutes = computed({\n    get() {\n      return parts.value.minutes;\n    },\n    set(val) {\n      updateParts({ minutes: val });\n    }\n  });\n  const seconds = computed({\n    get() {\n      return parts.value.seconds;\n    },\n    set(val) {\n      updateParts({ seconds: val });\n    }\n  });\n  const milliseconds = computed({\n    get() {\n      return parts.value.milliseconds;\n    },\n    set(val) {\n      updateParts({ milliseconds: val });\n    }\n  });\n  const isAM = computed({\n    get() {\n      return parts.value.hours < 12;\n    },\n    set(value) {\n      value = String(value).toLowerCase() == \"true\";\n      let hValue = hours2.value;\n      if (value && hValue >= 12) {\n        hValue -= 12;\n      } else if (!value && hValue < 12) {\n        hValue += 12;\n      }\n      updateParts({ hours: hValue });\n    }\n  });\n  const options = computed(\n    () => getDatePartsOptions(parts.value, rules.value[props.position])\n  );\n  const amHourOptions = computed(() => {\n    return _amOptions.filter(\n      (opt) => options.value.hours.some((ho) => ho.value === opt.value)\n    );\n  });\n  const pmHourOptions = computed(() => {\n    return _pmOptions.filter(\n      (opt) => options.value.hours.some((ho) => ho.value === opt.value)\n    );\n  });\n  const hourOptions = computed(() => {\n    if (is24hr.value)\n      return options.value.hours;\n    if (isAM.value)\n      return amHourOptions.value;\n    return pmHourOptions.value;\n  });\n  const isAMOptions = computed(() => {\n    const result = [];\n    if (arrayHasItems(amHourOptions.value))\n      result.push({ value: true, label: \"AM\" });\n    if (arrayHasItems(pmHourOptions.value))\n      result.push({ value: false, label: \"PM\" });\n    return result;\n  });\n  return {\n    ...ctx,\n    showHeader,\n    timeAccuracy,\n    parts,\n    isValid,\n    date,\n    hours: hours2,\n    minutes,\n    seconds,\n    milliseconds,\n    options,\n    hourOptions,\n    isAM,\n    isAMOptions,\n    is24hr\n  };\n}\nconst _hoisted_1$1 = [\"value\"];\nconst _hoisted_2$1 = [\"value\", \"disabled\"];\nconst _hoisted_3$1 = {\n  key: 1,\n  class: \"vc-base-sizer\",\n  \"aria-hidden\": \"true\"\n};\nconst __default__$1 = {\n  inheritAttrs: false\n};\nconst _sfc_main$4 = /* @__PURE__ */ defineComponent({\n  ...__default__$1,\n  __name: \"BaseSelect\",\n  props: {\n    options: null,\n    modelValue: null,\n    alignRight: { type: Boolean },\n    alignLeft: { type: Boolean },\n    showIcon: { type: Boolean },\n    fitContent: { type: Boolean }\n  },\n  emits: [\"update:modelValue\"],\n  setup(__props) {\n    const props = __props;\n    const selectedLabel = computed(() => {\n      const option = props.options.find((opt) => opt.value === props.modelValue);\n      return option == null ? void 0 : option.label;\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: normalizeClass([\"vc-base-select\", {\n          \"vc-fit-content\": __props.fitContent,\n          \"vc-has-icon\": __props.showIcon\n        }])\n      }, [\n        createElementVNode(\"select\", mergeProps(_ctx.$attrs, {\n          value: __props.modelValue,\n          class: [\"vc-focus\", {\n            \"vc-align-right\": __props.alignRight,\n            \"vc-align-left\": __props.alignLeft\n          }],\n          onChange: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"update:modelValue\", $event.target.value))\n        }), [\n          (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {\n            return openBlock(), createElementBlock(\"option\", {\n              key: option.value,\n              value: option.value,\n              disabled: option.disabled\n            }, toDisplayString(option.label), 9, _hoisted_2$1);\n          }), 128))\n        ], 16, _hoisted_1$1),\n        __props.showIcon ? (openBlock(), createBlock(_sfc_main$c, {\n          key: 0,\n          name: \"ChevronDown\",\n          size: \"18\"\n        })) : createCommentVNode(\"\", true),\n        __props.fitContent ? (openBlock(), createElementBlock(\"div\", _hoisted_3$1, toDisplayString(unref(selectedLabel)), 1)) : createCommentVNode(\"\", true)\n      ], 2);\n    };\n  }\n});\nconst BaseSelect_vue_vue_type_style_index_0_lang = \"\";\nconst _hoisted_1 = {\n  key: 0,\n  class: \"vc-time-header\"\n};\nconst _hoisted_2 = { class: \"vc-time-weekday\" };\nconst _hoisted_3 = { class: \"vc-time-month\" };\nconst _hoisted_4 = { class: \"vc-time-day\" };\nconst _hoisted_5 = { class: \"vc-time-year\" };\nconst _hoisted_6 = { class: \"vc-time-select-group\" };\nconst _hoisted_7 = /* @__PURE__ */ createElementVNode(\"span\", { class: \"vc-time-colon\" }, \":\", -1);\nconst _hoisted_8 = /* @__PURE__ */ createElementVNode(\"span\", { class: \"vc-time-colon\" }, \":\", -1);\nconst _hoisted_9 = /* @__PURE__ */ createElementVNode(\"span\", { class: \"vc-time-decimal\" }, \".\", -1);\nconst _sfc_main$3 = /* @__PURE__ */ defineComponent({\n  __name: \"TimePicker\",\n  props: {\n    position: null\n  },\n  setup(__props, { expose }) {\n    const props = __props;\n    const timePicker = createTimePicker(props);\n    expose(timePicker);\n    const {\n      locale,\n      isValid,\n      date,\n      hours: hours2,\n      minutes,\n      seconds,\n      milliseconds,\n      options,\n      hourOptions,\n      isTimeMode,\n      isAM,\n      isAMOptions,\n      is24hr,\n      showHeader,\n      timeAccuracy\n    } = timePicker;\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: normalizeClass([\"vc-time-picker\", [{ \"vc-invalid\": !unref(isValid), \"vc-attached\": !unref(isTimeMode) }]])\n      }, [\n        createVNode(_sfc_main$i, { name: \"time-header\" }, {\n          default: withCtx(() => [\n            unref(showHeader) && unref(date) ? (openBlock(), createElementBlock(\"div\", _hoisted_1, [\n              createElementVNode(\"span\", _hoisted_2, toDisplayString(unref(locale).formatDate(unref(date), \"WWW\")), 1),\n              createElementVNode(\"span\", _hoisted_3, toDisplayString(unref(locale).formatDate(unref(date), \"MMM\")), 1),\n              createElementVNode(\"span\", _hoisted_4, toDisplayString(unref(locale).formatDate(unref(date), \"D\")), 1),\n              createElementVNode(\"span\", _hoisted_5, toDisplayString(unref(locale).formatDate(unref(date), \"YYYY\")), 1)\n            ])) : createCommentVNode(\"\", true)\n          ]),\n          _: 1\n        }),\n        createElementVNode(\"div\", _hoisted_6, [\n          createVNode(_sfc_main$c, {\n            name: \"Clock\",\n            size: \"17\"\n          }),\n          createVNode(_sfc_main$4, {\n            modelValue: unref(hours2),\n            \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => isRef(hours2) ? hours2.value = $event : null),\n            modelModifiers: { number: true },\n            options: unref(hourOptions),\n            class: \"vc-time-select-hours\",\n            \"align-right\": \"\"\n          }, null, 8, [\"modelValue\", \"options\"]),\n          unref(timeAccuracy) > 1 ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n            _hoisted_7,\n            createVNode(_sfc_main$4, {\n              modelValue: unref(minutes),\n              \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event) => isRef(minutes) ? minutes.value = $event : null),\n              modelModifiers: { number: true },\n              options: unref(options).minutes,\n              class: \"vc-time-select-minutes\",\n              \"align-left\": unref(timeAccuracy) === 2\n            }, null, 8, [\"modelValue\", \"options\", \"align-left\"])\n          ], 64)) : createCommentVNode(\"\", true),\n          unref(timeAccuracy) > 2 ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [\n            _hoisted_8,\n            createVNode(_sfc_main$4, {\n              modelValue: unref(seconds),\n              \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event) => isRef(seconds) ? seconds.value = $event : null),\n              modelModifiers: { number: true },\n              options: unref(options).seconds,\n              class: \"vc-time-select-seconds\",\n              \"align-left\": unref(timeAccuracy) === 3\n            }, null, 8, [\"modelValue\", \"options\", \"align-left\"])\n          ], 64)) : createCommentVNode(\"\", true),\n          unref(timeAccuracy) > 3 ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [\n            _hoisted_9,\n            createVNode(_sfc_main$4, {\n              modelValue: unref(milliseconds),\n              \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event) => isRef(milliseconds) ? milliseconds.value = $event : null),\n              modelModifiers: { number: true },\n              options: unref(options).milliseconds,\n              class: \"vc-time-select-milliseconds\",\n              \"align-left\": \"\"\n            }, null, 8, [\"modelValue\", \"options\"])\n          ], 64)) : createCommentVNode(\"\", true),\n          !unref(is24hr) ? (openBlock(), createBlock(_sfc_main$4, {\n            key: 3,\n            modelValue: unref(isAM),\n            \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event) => isRef(isAM) ? isAM.value = $event : null),\n            options: unref(isAMOptions)\n          }, null, 8, [\"modelValue\", \"options\"])) : createCommentVNode(\"\", true)\n        ])\n      ], 2);\n    };\n  }\n});\nconst TimePicker_vue_vue_type_style_index_0_lang = \"\";\nconst _sfc_main$2 = /* @__PURE__ */ defineComponent({\n  __name: \"DatePickerBase\",\n  setup(__props) {\n    const {\n      attributes,\n      calendarRef,\n      color,\n      displayMode,\n      isDateTimeMode,\n      isTimeMode,\n      isRange,\n      onDayClick,\n      onDayMouseEnter,\n      onDayKeydown\n    } = useDatePicker();\n    const positions = isRange.value ? [0, 1] : [0];\n    return (_ctx, _cache) => {\n      return unref(isTimeMode) ? (openBlock(), createElementBlock(\"div\", {\n        key: 0,\n        class: normalizeClass(`vc-container vc-bordered vc-${unref(color)} vc-${unref(displayMode)}`)\n      }, [\n        (openBlock(true), createElementBlock(Fragment, null, renderList(unref(positions), (position) => {\n          return openBlock(), createBlock(_sfc_main$3, {\n            key: position,\n            position\n          }, null, 8, [\"position\"]);\n        }), 128))\n      ], 2)) : (openBlock(), createBlock(Calendar, {\n        key: 1,\n        attributes: unref(attributes),\n        ref_key: \"calendarRef\",\n        ref: calendarRef,\n        onDayclick: unref(onDayClick),\n        onDaymouseenter: unref(onDayMouseEnter),\n        onDaykeydown: unref(onDayKeydown)\n      }, {\n        footer: withCtx(() => [\n          unref(isDateTimeMode) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(unref(positions), (position) => {\n            return openBlock(), createBlock(_sfc_main$3, {\n              key: position,\n              position\n            }, null, 8, [\"position\"]);\n          }), 128)) : createCommentVNode(\"\", true),\n          createVNode(_sfc_main$i, { name: \"dp-footer\" })\n        ]),\n        _: 1\n      }, 8, [\"attributes\", \"onDayclick\", \"onDaymouseenter\", \"onDaykeydown\"]));\n    };\n  }\n});\nconst __default__ = {\n  inheritAttrs: false\n};\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  __name: \"DatePickerPopover\",\n  setup(__props) {\n    const {\n      datePickerPopoverId,\n      color,\n      displayMode,\n      popoverRef,\n      onPopoverBeforeShow,\n      onPopoverAfterShow,\n      onPopoverBeforeHide,\n      onPopoverAfterHide\n    } = useDatePicker();\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(Popover, {\n        id: unref(datePickerPopoverId),\n        placement: \"bottom-start\",\n        class: normalizeClass(`vc-date-picker-content vc-${unref(color)} vc-${unref(displayMode)}`),\n        ref_key: \"popoverRef\",\n        ref: popoverRef,\n        onBeforeShow: unref(onPopoverBeforeShow),\n        onAfterShow: unref(onPopoverAfterShow),\n        onBeforeHide: unref(onPopoverBeforeHide),\n        onAfterHide: unref(onPopoverAfterHide)\n      }, {\n        default: withCtx(() => [\n          createVNode(_sfc_main$2, normalizeProps(guardReactiveProps(_ctx.$attrs)), null, 16)\n        ]),\n        _: 1\n      }, 8, [\"id\", \"class\", \"onBeforeShow\", \"onAfterShow\", \"onBeforeHide\", \"onAfterHide\"]);\n    };\n  }\n});\nconst _sfc_main = defineComponent({\n  inheritAttrs: false,\n  emits,\n  props: propsDef,\n  components: { DatePickerBase: _sfc_main$2, DatePickerPopover: _sfc_main$1 },\n  setup(props, ctx) {\n    const datePicker = createDatePicker(props, ctx);\n    const slotCtx = reactive(omit(datePicker, \"calendarRef\", \"popoverRef\"));\n    return { ...datePicker, slotCtx };\n  }\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_DatePickerPopover = resolveComponent(\"DatePickerPopover\");\n  const _component_DatePickerBase = resolveComponent(\"DatePickerBase\");\n  return _ctx.$slots.default ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n    renderSlot(_ctx.$slots, \"default\", normalizeProps(guardReactiveProps(_ctx.slotCtx))),\n    createVNode(_component_DatePickerPopover, normalizeProps(guardReactiveProps(_ctx.$attrs)), null, 16)\n  ], 64)) : (openBlock(), createBlock(_component_DatePickerBase, normalizeProps(mergeProps({ key: 1 }, _ctx.$attrs)), null, 16));\n}\nconst DatePicker = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nconst components = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  Calendar,\n  DatePicker,\n  Popover,\n  PopoverRow: _sfc_main$j\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst index$1 = \"\";\nconst install = (app, defaults2 = {}) => {\n  app.use(setupDefaults, defaults2);\n  const prefix = app.config.globalProperties.$VCalendar.componentPrefix;\n  for (const componentKey in components) {\n    const component = components[componentKey];\n    app.component(`${prefix}${componentKey}`, component);\n  }\n};\nconst index = { install };\nexport {\n  Calendar,\n  DatePicker,\n  Popover,\n  _sfc_main$j as PopoverRow,\n  createCalendar,\n  createDatePicker,\n  index as default,\n  popoverDirective,\n  setupDefaults as setupCalendar,\n  useCalendar,\n  useDatePicker\n};\n//# sourceMappingURL=index.js.map\n","import { defineNuxtPlugin } from \"#app\";\nimport { setupCalendar } from \"v-calendar\";\nexport default defineNuxtPlugin((nuxtApp) => {\n  const calendarOptions = nuxtApp.$config.public.vcalendar;\n  nuxtApp.vueApp.use(setupCalendar, calendarOptions || {});\n});\n","import { escapeRegExp, pickBy } from 'lodash-es'\nimport type { IncomingMessage } from 'http'\nimport type { Context, Unleash } from 'unleash-client'\nimport type { Features } from './unleash.types'\nimport { mapUnleashFeature } from './unleash.mappers'\nimport type { Feature } from '../feature'\nimport { getFeatureVariantEnabled, toggleFeature } from '../feature'\nimport { getPublicDomainName } from '~/utils/domain'\nimport { getLanguagePrefix } from '~/utils/urls'\n\nexport const PERSISTED_UNLEASH_STATE = '__unleash' as const\nconst FEATURE_COOKIE_PREFIX = 'feature.'\n\nexport function getUnleashDataForContext(client: Unleash, userCtx: Context) {\n  return {\n    features: Object.fromEntries(\n      client.getFeatureToggleDefinitions().map((definition) => {\n        const { name } = definition\n        const isEnabled = client.isEnabled(name, userCtx)\n        const variant = client.getVariant(name, userCtx)\n        return [name, mapUnleashFeature(definition, isEnabled, variant)]\n      }),\n    ),\n  }\n}\n\nexport function getUnleashContextFromRequest(req: IncomingMessage): Context {\n  const domain = getPublicDomainName(req.headers.host ?? '')\n\n  return {\n    userId: getUserId(req),\n    domain,\n    remoteAddress: getRemoteAddress(req),\n    properties: {\n      language: getUserLanguage(req, domain ?? '').toUpperCase(),\n      fullDomain: `${domain}${getLanguagePrefix(req.url ?? '')}`,\n      partnerId: useParams().persistent.partnerid?.toString() || 'undefined',\n    },\n  }\n}\n\nexport function getUserId(req: IncomingMessage) {\n  return getRequestCookies(req)['User-ID']\n}\n\nexport function getRemoteAddress(req: IncomingMessage) {\n  return (\n    (req.headers['x-real-ip'] as string) ||\n    (req.headers['x-forwarded-for'] as string) ||\n    req.socket.remoteAddress ||\n    req.connection.remoteAddress\n  )\n}\n\nconst DEFAULT_LANGUAGE = 'en'\nconst TLD_TO_LANGUAGE: Record<string, string> = {\n  be: 'nl',\n  cz: 'cs',\n  dk: 'da',\n  de: 'de',\n  es: 'es',\n  ee: 'en',\n  fr: 'fr',\n  uk: 'en',\n  hr: 'hr',\n  ie: 'en',\n  it: 'it',\n  nl: 'nl',\n  no: 'no',\n  at: 'de',\n  pl: 'pl',\n  pt: 'pt',\n  ch: 'de',\n  fi: 'fi',\n  se: 'sv',\n  com: 'en',\n  au: 'en',\n  ca: 'en',\n  in: 'en',\n  us: 'en',\n}\n\nexport function getUserLanguage(req: IncomingMessage, domain: string): string {\n  try {\n    const cookies = getRequestCookies(req)\n    if ('i18n_redirected' in cookies && cookies.i18n_redirected.length >= 2) {\n      return cookies.i18n_redirected.substr(0, 2).toLowerCase()\n    }\n  } catch (e) {\n    console.error(`Unleash.utils getUserLanguage error`, e)\n    // no throw\n  }\n  const prefix = getLanguagePrefix(req.url ?? '')\n  const topLevelDomain = domain.split('.').pop() ?? ''\n  return (\n    prefix.replaceAll('/', '') ||\n    TLD_TO_LANGUAGE[topLevelDomain] ||\n    DEFAULT_LANGUAGE\n  )\n}\n\nfunction getRequestCookies(req: IncomingMessage) {\n  return parseCookie(req?.headers.cookie ?? '')\n}\n\nexport function parseCookie(cookie: string) {\n  return Object.fromEntries(\n    cookie.split(';').map((c) => c.trim().split('=')) || [],\n  )\n}\n\nexport function getFeatureCookieName(name: string): string {\n  return `${FEATURE_COOKIE_PREFIX}${name}`\n}\n\nexport function getFeaturesFromCookies(cookies: object) {\n  const prefixRegExp = new RegExp(`^${escapeRegExp(FEATURE_COOKIE_PREFIX)}`)\n  const featureCookies = pickBy(\n    cookies,\n    (value, key) => prefixRegExp.test(key) && isFeatureCookieDefined(value),\n  )\n\n  return Object.fromEntries(\n    Object.entries(featureCookies).map(([key, value]) => [\n      key.replace(prefixRegExp, ''),\n      parseFeatureCookieValue(value),\n    ]),\n  )\n}\n\nexport function isFeatureCookieDefined(value: unknown): boolean {\n  return ![null, undefined, ''].includes(value?.toString())\n}\n\nexport function parseFeatureCookieValue(value: unknown): boolean | string {\n  return tryParseBoolean(value) ?? String(value)\n}\n\nexport function toFeatureCookieValue(\n  feature: Feature,\n): string | null | undefined {\n  return getFeatureVariantEnabled(feature)?.name ?? String(feature.isEnabled)\n}\n\nexport function applyFeatureCookies(\n  features: Features,\n  cookies: object,\n): Features {\n  const cookieFeatures = getFeaturesFromCookies(cookies)\n\n  Object.entries(cookieFeatures).forEach(([name, value]) => {\n    const feature = features[name]\n\n    if (!feature) return\n\n    toggleFeature(feature, value)\n  })\n\n  return features\n}\n","import { reactive } from 'vue'\nimport { defineNuxtPlugin, useRequestFetch, useState } from '#app'\nimport type { Features } from './unleash.types'\nimport type { Feature } from '../feature'\nimport {\n  PERSISTED_UNLEASH_STATE,\n  applyFeatureCookies,\n  getFeatureCookieName,\n  toFeatureCookieValue,\n} from './unleash.shared'\n\nexport default defineNuxtPlugin({\n  name: 'unleash:plugin',\n  setup(nuxtApp) {\n    const fetch = useRequestFetch()\n    const unleashState = useState(PERSISTED_UNLEASH_STATE, () => ({\n      features: {} as Features,\n    }))\n\n    const $unleash = reactive({\n      features: computed(() => {\n        const { features } = unleashState.value\n        const cookies = Object.fromEntries(\n          Object.keys(features)\n            .map(getFeatureCookieName)\n            .map((cookieName) => [cookieName, useCookie(cookieName).value]),\n        )\n\n        return applyFeatureCookies(features, cookies)\n      }),\n\n      update(feature: Feature) {\n        const cookie = useCookie(getFeatureCookieName(feature.name))\n        cookie.value = toFeatureCookieValue(feature)\n      },\n\n      async reload() {\n        try {\n          const data = await fetch<{\n            features: Record<string, unknown>\n            payloads: Record<string, unknown>\n          }>('/__ftrs')\n          let newFeatures, newPayloads\n          if (process.env.NODE_ENV === 'development') {\n            newFeatures = data.features\n            newPayloads = data.payloads\n          } else {\n            const dataObj = JSON.parse(base64ToUtf8(data as unknown as string))\n            newFeatures = dataObj.features\n            newPayloads = dataObj.payloads\n          }\n          Object.assign($unleash, {\n            features: newFeatures,\n            payloads: newPayloads,\n          })\n        } catch (e) {\n          console.error('Cannot reload features', e)\n        }\n      },\n    })\n\n    Object.assign(window, { $unleash })\n    nuxtApp.provide('unleash', $unleash)\n  },\n})\n\nfunction base64ToUtf8(str: string) {\n  return new TextDecoder().decode(base64ToBytes(str))\n}\n\nfunction base64ToBytes(base64: string) {\n  const binString = atob(base64)\n  return Uint8Array.from(\n    binString as unknown as ArrayLike<number>,\n    (m) => (m as unknown as string).codePointAt(0)!,\n  )\n}\n","export const KEY = \"ga:user\";\nexport const UID = _getUID();\nfunction _getUID() {\n  let uid;\n  try {\n    uid = localStorage[KEY];\n  } catch {\n  }\n  if (!uid) {\n    uid = Math.random() + \".\" + Math.random();\n    try {\n      localStorage[KEY] = uid;\n    } catch {\n    }\n  }\n  return uid;\n}\nexport function logError(err) {\n  console.error(\"[nuxt vitals]\", err);\n}\nexport function logDebug(label, ...args) {\n  console.log(label, ...args);\n}\nexport function getConnectionSpeed() {\n  return typeof navigator !== \"undefined\" && navigator.connection && navigator.connection.effectiveType || \"\";\n}\nexport function send(url, body) {\n  if (navigator.sendBeacon) {\n    navigator.sendBeacon(url, body);\n    return;\n  }\n  fetch(url, {\n    body,\n    method: \"POST\",\n    credentials: \"omit\",\n    keepalive: true\n  }).catch(logError);\n}\n","import { logError } from \"./utils.mjs\";\nexport async function webVitals({ route, options, sendToAnalytics }) {\n  const context = {\n    fullPath: route.fullPath,\n    href: location.href\n  };\n  try {\n    const { onCLS, onFID, onLCP, onTTFB, onFCP, onINP } = await import(\"web-vitals\").then((r) => r.default || r);\n    onFID((metric) => sendToAnalytics(context, metric, options));\n    onTTFB((metric) => sendToAnalytics(context, metric, options));\n    onLCP((metric) => sendToAnalytics(context, metric, options));\n    onCLS((metric) => sendToAnalytics(context, metric, options));\n    onFCP((metric) => sendToAnalytics(context, metric, options));\n    onINP((metric) => sendToAnalytics(context, metric, options));\n  } catch (err) {\n    logError(err);\n  }\n}\n","import { logError, logDebug, getConnectionSpeed } from \"../utils.mjs\";\nexport function sendToAnalytics({ fullPath, href }, metric, options) {\n  if (!window.dataLayer) {\n    logError(\"window.dataLayer is undefined, probably GTM is not installed\");\n    return;\n  }\n  const event = {\n    event: \"webVitals\",\n    webVitalsMeasurement: {\n      page: fullPath,\n      href,\n      name: metric.name,\n      id: metric.id,\n      value: metric.value,\n      delta: metric.delta,\n      valueRounded: metric.valueRounded,\n      deltaRounded: metric.deltaRounded,\n      speed: getConnectionSpeed()\n    }\n  };\n  if (options.debug) {\n    logDebug(metric.name, JSON.stringify(event, null, 2));\n  }\n  window.dataLayer.push(event);\n}\n","export default {\n  \"debug\": false\n}","import { webVitals } from \"./web-vitals.mjs\";\nimport { defineNuxtPlugin, useRouter } from \"#imports\";\nimport { sendToAnalytics } from \"~web-vitals-provider\";\nimport webVitalsOptions from \"#build/web-vitals-config.mjs\";\nconst sendVitals = (to) => webVitals({\n  options: webVitalsOptions,\n  sendToAnalytics,\n  route: to\n});\nexport default defineNuxtPlugin(() => {\n  const router = useRouter();\n  router.afterEach((to) => sendVitals(to));\n});\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle.\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","import{rectToClientRect as t,computePosition as e}from\"@floating-ui/core\";export{arrow,autoPlacement,detectOverflow,flip,hide,inline,limitShift,offset,shift,size}from\"@floating-ui/core\";function n(t){var e;return(null==(e=t.ownerDocument)?void 0:e.defaultView)||window}function o(t){return n(t).getComputedStyle(t)}const i=Math.min,r=Math.max,l=Math.round;function c(t){const e=o(t);let n=parseFloat(e.width),i=parseFloat(e.height);const r=t.offsetWidth,c=t.offsetHeight,s=l(n)!==r||l(i)!==c;return s&&(n=r,i=c),{width:n,height:i,fallback:s}}function s(t){return h(t)?(t.nodeName||\"\").toLowerCase():\"\"}let f;function u(){if(f)return f;const t=navigator.userAgentData;return t&&Array.isArray(t.brands)?(f=t.brands.map((t=>t.brand+\"/\"+t.version)).join(\" \"),f):navigator.userAgent}function a(t){return t instanceof n(t).HTMLElement}function d(t){return t instanceof n(t).Element}function h(t){return t instanceof n(t).Node}function p(t){if(\"undefined\"==typeof ShadowRoot)return!1;return t instanceof n(t).ShadowRoot||t instanceof ShadowRoot}function g(t){const{overflow:e,overflowX:n,overflowY:i,display:r}=o(t);return/auto|scroll|overlay|hidden|clip/.test(e+i+n)&&![\"inline\",\"contents\"].includes(r)}function m(t){return[\"table\",\"td\",\"th\"].includes(s(t))}function y(t){const e=/firefox/i.test(u()),n=o(t),i=n.backdropFilter||n.WebkitBackdropFilter;return\"none\"!==n.transform||\"none\"!==n.perspective||!!i&&\"none\"!==i||e&&\"filter\"===n.willChange||e&&!!n.filter&&\"none\"!==n.filter||[\"transform\",\"perspective\"].some((t=>n.willChange.includes(t)))||[\"paint\",\"layout\",\"strict\",\"content\"].some((t=>{const e=n.contain;return null!=e&&e.includes(t)}))}function x(){return!/^((?!chrome|android).)*safari/i.test(u())}function w(t){return[\"html\",\"body\",\"#document\"].includes(s(t))}function v(t){return d(t)?t:t.contextElement}const b={x:1,y:1};function L(t){const e=v(t);if(!a(e))return b;const n=e.getBoundingClientRect(),{width:o,height:i,fallback:r}=c(e);let s=(r?l(n.width):n.width)/o,f=(r?l(n.height):n.height)/i;return s&&Number.isFinite(s)||(s=1),f&&Number.isFinite(f)||(f=1),{x:s,y:f}}function E(t,e,o,i){var r,l;void 0===e&&(e=!1),void 0===o&&(o=!1);const c=t.getBoundingClientRect(),s=v(t);let f=b;e&&(i?d(i)&&(f=L(i)):f=L(t));const u=s?n(s):window,a=!x()&&o;let h=(c.left+(a&&(null==(r=u.visualViewport)?void 0:r.offsetLeft)||0))/f.x,p=(c.top+(a&&(null==(l=u.visualViewport)?void 0:l.offsetTop)||0))/f.y,g=c.width/f.x,m=c.height/f.y;if(s){const t=n(s),e=i&&d(i)?n(i):i;let o=t.frameElement;for(;o&&i&&e!==t;){const t=L(o),e=o.getBoundingClientRect(),i=getComputedStyle(o);e.x+=(o.clientLeft+parseFloat(i.paddingLeft))*t.x,e.y+=(o.clientTop+parseFloat(i.paddingTop))*t.y,h*=t.x,p*=t.y,g*=t.x,m*=t.y,h+=e.x,p+=e.y,o=n(o).frameElement}}return{width:g,height:m,top:p,right:h+g,bottom:p+m,left:h,x:h,y:p}}function R(t){return((h(t)?t.ownerDocument:t.document)||window.document).documentElement}function T(t){return d(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function C(t){return E(R(t)).left+T(t).scrollLeft}function F(t){if(\"html\"===s(t))return t;const e=t.assignedSlot||t.parentNode||p(t)&&t.host||R(t);return p(e)?e.host:e}function W(t){const e=F(t);return w(e)?e.ownerDocument.body:a(e)&&g(e)?e:W(e)}function D(t,e){var o;void 0===e&&(e=[]);const i=W(t),r=i===(null==(o=t.ownerDocument)?void 0:o.body),l=n(i);return r?e.concat(l,l.visualViewport||[],g(i)?i:[]):e.concat(i,D(i))}function S(e,i,l){return\"viewport\"===i?t(function(t,e){const o=n(t),i=R(t),r=o.visualViewport;let l=i.clientWidth,c=i.clientHeight,s=0,f=0;if(r){l=r.width,c=r.height;const t=x();(t||!t&&\"fixed\"===e)&&(s=r.offsetLeft,f=r.offsetTop)}return{width:l,height:c,x:s,y:f}}(e,l)):d(i)?t(function(t,e){const n=E(t,!0,\"fixed\"===e),o=n.top+t.clientTop,i=n.left+t.clientLeft,r=a(t)?L(t):{x:1,y:1};return{width:t.clientWidth*r.x,height:t.clientHeight*r.y,x:i*r.x,y:o*r.y}}(i,l)):t(function(t){const e=R(t),n=T(t),i=t.ownerDocument.body,l=r(e.scrollWidth,e.clientWidth,i.scrollWidth,i.clientWidth),c=r(e.scrollHeight,e.clientHeight,i.scrollHeight,i.clientHeight);let s=-n.scrollLeft+C(t);const f=-n.scrollTop;return\"rtl\"===o(i).direction&&(s+=r(e.clientWidth,i.clientWidth)-l),{width:l,height:c,x:s,y:f}}(R(e)))}function A(t){return a(t)&&\"fixed\"!==o(t).position?t.offsetParent:null}function H(t){const e=n(t);let i=A(t);for(;i&&m(i)&&\"static\"===o(i).position;)i=A(i);return i&&(\"html\"===s(i)||\"body\"===s(i)&&\"static\"===o(i).position&&!y(i))?e:i||function(t){let e=F(t);for(;a(e)&&!w(e);){if(y(e))return e;e=F(e)}return null}(t)||e}function O(t,e,n){const o=a(e),i=R(e),r=E(t,!0,\"fixed\"===n,e);let l={scrollLeft:0,scrollTop:0};const c={x:0,y:0};if(o||!o&&\"fixed\"!==n)if((\"body\"!==s(e)||g(i))&&(l=T(e)),a(e)){const t=E(e,!0);c.x=t.x+e.clientLeft,c.y=t.y+e.clientTop}else i&&(c.x=C(i));return{x:r.left+l.scrollLeft-c.x,y:r.top+l.scrollTop-c.y,width:r.width,height:r.height}}const P={getClippingRect:function(t){let{element:e,boundary:n,rootBoundary:l,strategy:c}=t;const f=\"clippingAncestors\"===n?function(t,e){const n=e.get(t);if(n)return n;let i=D(t).filter((t=>d(t)&&\"body\"!==s(t))),r=null;const l=\"fixed\"===o(t).position;let c=l?F(t):t;for(;d(c)&&!w(c);){const t=o(c),e=y(c);(l?e||r:e||\"static\"!==t.position||!r||![\"absolute\",\"fixed\"].includes(r.position))?r=t:i=i.filter((t=>t!==c)),c=F(c)}return e.set(t,i),i}(e,this._c):[].concat(n),u=[...f,l],a=u[0],h=u.reduce(((t,n)=>{const o=S(e,n,c);return t.top=r(o.top,t.top),t.right=i(o.right,t.right),t.bottom=i(o.bottom,t.bottom),t.left=r(o.left,t.left),t}),S(e,a,c));return{width:h.right-h.left,height:h.bottom-h.top,x:h.left,y:h.top}},convertOffsetParentRelativeRectToViewportRelativeRect:function(t){let{rect:e,offsetParent:n,strategy:o}=t;const i=a(n),r=R(n);if(n===r)return e;let l={scrollLeft:0,scrollTop:0},c={x:1,y:1};const f={x:0,y:0};if((i||!i&&\"fixed\"!==o)&&((\"body\"!==s(n)||g(r))&&(l=T(n)),a(n))){const t=E(n);c=L(n),f.x=t.x+n.clientLeft,f.y=t.y+n.clientTop}return{width:e.width*c.x,height:e.height*c.y,x:e.x*c.x-l.scrollLeft*c.x+f.x,y:e.y*c.y-l.scrollTop*c.y+f.y}},isElement:d,getDimensions:function(t){return a(t)?c(t):t.getBoundingClientRect()},getOffsetParent:H,getDocumentElement:R,getScale:L,async getElementRects(t){let{reference:e,floating:n,strategy:o}=t;const i=this.getOffsetParent||H,r=this.getDimensions;return{reference:O(e,await i(n),o),floating:{x:0,y:0,...await r(n)}}},getClientRects:t=>Array.from(t.getClientRects()),isRTL:t=>\"rtl\"===o(t).direction};function z(t,e,n,o){void 0===o&&(o={});const{ancestorScroll:i=!0,ancestorResize:r=!0,elementResize:l=!0,animationFrame:c=!1}=o,s=i&&!c,f=s||r?[...d(t)?D(t):t.contextElement?D(t.contextElement):[],...D(e)]:[];f.forEach((t=>{s&&t.addEventListener(\"scroll\",n,{passive:!0}),r&&t.addEventListener(\"resize\",n)}));let u,a=null;if(l){let o=!0;a=new ResizeObserver((()=>{o||n(),o=!1})),d(t)&&!c&&a.observe(t),d(t)||!t.contextElement||c||a.observe(t.contextElement),a.observe(e)}let h=c?E(t):null;return c&&function e(){const o=E(t);!h||o.x===h.x&&o.y===h.y&&o.width===h.width&&o.height===h.height||n();h=o,u=requestAnimationFrame(e)}(),n(),()=>{var t;f.forEach((t=>{s&&t.removeEventListener(\"scroll\",n),r&&t.removeEventListener(\"resize\",n)})),null==(t=a)||t.disconnect(),a=null,c&&cancelAnimationFrame(u)}}const B=(t,n,o)=>{const i=new Map,r={platform:P,...o},l={...r.platform,_c:i};return e(t,n,{...r,platform:l})};export{z as autoUpdate,B as computePosition,D as getOverflowAncestors,P as platform};\n","import { defineComponent as O, openBlock as f, createElementBlock as T, normalizeClass as J, renderSlot as A, normalizeProps as ke, guardReactiveProps as Le, pushScopeId as De, popScopeId as Ie, nextTick as Fe, createBlock as M, withScopeId as Re, resolveComponent as P, normalizeStyle as W, withKeys as je, createElementVNode as w, Fragment as Ve, createCommentVNode as se, mergeProps as $e, withCtx as N, createVNode as ve, toDisplayString as We, ref as U, createApp as Ge, h as qe } from \"vue\";\nimport { offset as xe, autoPlacement as Ue, shift as Ye, flip as Xe, arrow as Ke, size as Je, computePosition as Qe, getOverflowAncestors as ne } from \"@floating-ui/dom\";\nfunction ye(e, t) {\n  for (const o in t)\n    Object.prototype.hasOwnProperty.call(t, o) && (typeof t[o] == \"object\" && e[o] ? ye(e[o], t[o]) : e[o] = t[o]);\n}\nconst h = {\n  // Disable popper components\n  disabled: !1,\n  // Default position offset along main axis (px)\n  distance: 5,\n  // Default position offset along cross axis (px)\n  skidding: 0,\n  // Default container where the tooltip will be appended\n  container: \"body\",\n  // Element used to compute position and size boundaries\n  boundary: void 0,\n  // Skip delay & CSS transitions when another popper is shown, so that the popper appear to instanly move to the new position.\n  instantMove: !1,\n  // Auto destroy tooltip DOM nodes (ms)\n  disposeTimeout: 150,\n  // Triggers on the popper itself\n  popperTriggers: [],\n  // Positioning strategy\n  strategy: \"absolute\",\n  // Prevent overflow\n  preventOverflow: !0,\n  // Flip to the opposite placement if needed\n  flip: !0,\n  // Shift on the cross axis to prevent the popper from overflowing\n  shift: !0,\n  // Overflow padding (px)\n  overflowPadding: 0,\n  // Arrow padding (px)\n  arrowPadding: 0,\n  // Compute arrow overflow (useful to hide it)\n  arrowOverflow: !0,\n  /**\n   * By default, compute autohide on 'click'.\n   */\n  autoHideOnMousedown: !1,\n  // Themes\n  themes: {\n    tooltip: {\n      // Default tooltip placement relative to target element\n      placement: \"top\",\n      // Default events that trigger the tooltip\n      triggers: [\"hover\", \"focus\", \"touch\"],\n      // Close tooltip on click on tooltip target\n      hideTriggers: (e) => [...e, \"click\"],\n      // Delay (ms)\n      delay: {\n        show: 200,\n        hide: 0\n      },\n      // Update popper on content resize\n      handleResize: !1,\n      // Enable HTML content in directive\n      html: !1,\n      // Displayed when tooltip content is loading\n      loadingContent: \"...\"\n    },\n    dropdown: {\n      // Default dropdown placement relative to target element\n      placement: \"bottom\",\n      // Default events that trigger the dropdown\n      triggers: [\"click\"],\n      // Delay (ms)\n      delay: 0,\n      // Update popper on content resize\n      handleResize: !0,\n      // Hide on clock outside\n      autoHide: !0\n    },\n    menu: {\n      $extend: \"dropdown\",\n      triggers: [\"hover\", \"focus\"],\n      popperTriggers: [\"hover\"],\n      delay: {\n        show: 0,\n        hide: 400\n      }\n    }\n  }\n};\nfunction S(e, t) {\n  let o = h.themes[e] || {}, i;\n  do\n    i = o[t], typeof i > \"u\" ? o.$extend ? o = h.themes[o.$extend] || {} : (o = null, i = h[t]) : o = null;\n  while (o);\n  return i;\n}\nfunction Ze(e) {\n  const t = [e];\n  let o = h.themes[e] || {};\n  do\n    o.$extend && !o.$resetCss ? (t.push(o.$extend), o = h.themes[o.$extend] || {}) : o = null;\n  while (o);\n  return t.map((i) => `v-popper--theme-${i}`);\n}\nfunction re(e) {\n  const t = [e];\n  let o = h.themes[e] || {};\n  do\n    o.$extend ? (t.push(o.$extend), o = h.themes[o.$extend] || {}) : o = null;\n  while (o);\n  return t;\n}\nlet $ = !1;\nif (typeof window < \"u\") {\n  $ = !1;\n  try {\n    const e = Object.defineProperty({}, \"passive\", {\n      get() {\n        $ = !0;\n      }\n    });\n    window.addEventListener(\"test\", null, e);\n  } catch {\n  }\n}\nlet _e = !1;\ntypeof window < \"u\" && typeof navigator < \"u\" && (_e = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream);\nconst Te = [\"auto\", \"top\", \"bottom\", \"left\", \"right\"].reduce((e, t) => e.concat([\n  t,\n  `${t}-start`,\n  `${t}-end`\n]), []), pe = {\n  hover: \"mouseenter\",\n  focus: \"focus\",\n  click: \"click\",\n  touch: \"touchstart\",\n  pointer: \"pointerdown\"\n}, ae = {\n  hover: \"mouseleave\",\n  focus: \"blur\",\n  click: \"click\",\n  touch: \"touchend\",\n  pointer: \"pointerup\"\n};\nfunction de(e, t) {\n  const o = e.indexOf(t);\n  o !== -1 && e.splice(o, 1);\n}\nfunction G() {\n  return new Promise((e) => requestAnimationFrame(() => {\n    requestAnimationFrame(e);\n  }));\n}\nconst d = [];\nlet g = null;\nconst le = {};\nfunction he(e) {\n  let t = le[e];\n  return t || (t = le[e] = []), t;\n}\nlet Y = function() {\n};\ntypeof window < \"u\" && (Y = window.Element);\nfunction n(e) {\n  return function(t) {\n    return S(t.theme, e);\n  };\n}\nconst q = \"__floating-vue__popper\", Q = () => O({\n  name: \"VPopper\",\n  provide() {\n    return {\n      [q]: {\n        parentPopper: this\n      }\n    };\n  },\n  inject: {\n    [q]: { default: null }\n  },\n  props: {\n    theme: {\n      type: String,\n      required: !0\n    },\n    targetNodes: {\n      type: Function,\n      required: !0\n    },\n    referenceNode: {\n      type: Function,\n      default: null\n    },\n    popperNode: {\n      type: Function,\n      required: !0\n    },\n    shown: {\n      type: Boolean,\n      default: !1\n    },\n    showGroup: {\n      type: String,\n      default: null\n    },\n    // eslint-disable-next-line vue/require-prop-types\n    ariaId: {\n      default: null\n    },\n    disabled: {\n      type: Boolean,\n      default: n(\"disabled\")\n    },\n    positioningDisabled: {\n      type: Boolean,\n      default: n(\"positioningDisabled\")\n    },\n    placement: {\n      type: String,\n      default: n(\"placement\"),\n      validator: (e) => Te.includes(e)\n    },\n    delay: {\n      type: [String, Number, Object],\n      default: n(\"delay\")\n    },\n    distance: {\n      type: [Number, String],\n      default: n(\"distance\")\n    },\n    skidding: {\n      type: [Number, String],\n      default: n(\"skidding\")\n    },\n    triggers: {\n      type: Array,\n      default: n(\"triggers\")\n    },\n    showTriggers: {\n      type: [Array, Function],\n      default: n(\"showTriggers\")\n    },\n    hideTriggers: {\n      type: [Array, Function],\n      default: n(\"hideTriggers\")\n    },\n    popperTriggers: {\n      type: Array,\n      default: n(\"popperTriggers\")\n    },\n    popperShowTriggers: {\n      type: [Array, Function],\n      default: n(\"popperShowTriggers\")\n    },\n    popperHideTriggers: {\n      type: [Array, Function],\n      default: n(\"popperHideTriggers\")\n    },\n    container: {\n      type: [String, Object, Y, Boolean],\n      default: n(\"container\")\n    },\n    boundary: {\n      type: [String, Y],\n      default: n(\"boundary\")\n    },\n    strategy: {\n      type: String,\n      validator: (e) => [\"absolute\", \"fixed\"].includes(e),\n      default: n(\"strategy\")\n    },\n    autoHide: {\n      type: [Boolean, Function],\n      default: n(\"autoHide\")\n    },\n    handleResize: {\n      type: Boolean,\n      default: n(\"handleResize\")\n    },\n    instantMove: {\n      type: Boolean,\n      default: n(\"instantMove\")\n    },\n    eagerMount: {\n      type: Boolean,\n      default: n(\"eagerMount\")\n    },\n    popperClass: {\n      type: [String, Array, Object],\n      default: n(\"popperClass\")\n    },\n    computeTransformOrigin: {\n      type: Boolean,\n      default: n(\"computeTransformOrigin\")\n    },\n    /**\n     * @deprecated\n     */\n    autoMinSize: {\n      type: Boolean,\n      default: n(\"autoMinSize\")\n    },\n    autoSize: {\n      type: [Boolean, String],\n      default: n(\"autoSize\")\n    },\n    /**\n     * @deprecated\n     */\n    autoMaxSize: {\n      type: Boolean,\n      default: n(\"autoMaxSize\")\n    },\n    autoBoundaryMaxSize: {\n      type: Boolean,\n      default: n(\"autoBoundaryMaxSize\")\n    },\n    preventOverflow: {\n      type: Boolean,\n      default: n(\"preventOverflow\")\n    },\n    overflowPadding: {\n      type: [Number, String],\n      default: n(\"overflowPadding\")\n    },\n    arrowPadding: {\n      type: [Number, String],\n      default: n(\"arrowPadding\")\n    },\n    arrowOverflow: {\n      type: Boolean,\n      default: n(\"arrowOverflow\")\n    },\n    flip: {\n      type: Boolean,\n      default: n(\"flip\")\n    },\n    shift: {\n      type: Boolean,\n      default: n(\"shift\")\n    },\n    shiftCrossAxis: {\n      type: Boolean,\n      default: n(\"shiftCrossAxis\")\n    },\n    noAutoFocus: {\n      type: Boolean,\n      default: n(\"noAutoFocus\")\n    },\n    disposeTimeout: {\n      type: Number,\n      default: n(\"disposeTimeout\")\n    }\n  },\n  emits: {\n    show: () => !0,\n    hide: () => !0,\n    \"update:shown\": (e) => !0,\n    \"apply-show\": () => !0,\n    \"apply-hide\": () => !0,\n    \"close-group\": () => !0,\n    \"close-directive\": () => !0,\n    \"auto-hide\": () => !0,\n    resize: () => !0\n  },\n  data() {\n    return {\n      isShown: !1,\n      isMounted: !1,\n      skipTransition: !1,\n      classes: {\n        showFrom: !1,\n        showTo: !1,\n        hideFrom: !1,\n        hideTo: !0\n      },\n      result: {\n        x: 0,\n        y: 0,\n        placement: \"\",\n        strategy: this.strategy,\n        arrow: {\n          x: 0,\n          y: 0,\n          centerOffset: 0\n        },\n        transformOrigin: null\n      },\n      randomId: `popper_${[Math.random(), Date.now()].map((e) => e.toString(36).substring(2, 10)).join(\"_\")}`,\n      shownChildren: /* @__PURE__ */ new Set(),\n      lastAutoHide: !0,\n      pendingHide: !1,\n      containsGlobalTarget: !1,\n      isDisposed: !0,\n      mouseDownContains: !1\n    };\n  },\n  computed: {\n    popperId() {\n      return this.ariaId != null ? this.ariaId : this.randomId;\n    },\n    shouldMountContent() {\n      return this.eagerMount || this.isMounted;\n    },\n    slotData() {\n      return {\n        popperId: this.popperId,\n        isShown: this.isShown,\n        shouldMountContent: this.shouldMountContent,\n        skipTransition: this.skipTransition,\n        autoHide: typeof this.autoHide == \"function\" ? this.lastAutoHide : this.autoHide,\n        show: this.show,\n        hide: this.hide,\n        handleResize: this.handleResize,\n        onResize: this.onResize,\n        classes: {\n          ...this.classes,\n          popperClass: this.popperClass\n        },\n        result: this.positioningDisabled ? null : this.result,\n        attrs: this.$attrs\n      };\n    },\n    parentPopper() {\n      var e;\n      return (e = this[q]) == null ? void 0 : e.parentPopper;\n    },\n    hasPopperShowTriggerHover() {\n      var e, t;\n      return ((e = this.popperTriggers) == null ? void 0 : e.includes(\"hover\")) || ((t = this.popperShowTriggers) == null ? void 0 : t.includes(\"hover\"));\n    }\n  },\n  watch: {\n    shown: \"$_autoShowHide\",\n    disabled(e) {\n      e ? this.dispose() : this.init();\n    },\n    async container() {\n      this.isShown && (this.$_ensureTeleport(), await this.$_computePosition());\n    },\n    triggers: {\n      handler: \"$_refreshListeners\",\n      deep: !0\n    },\n    positioningDisabled: \"$_refreshListeners\",\n    ...[\n      \"placement\",\n      \"distance\",\n      \"skidding\",\n      \"boundary\",\n      \"strategy\",\n      \"overflowPadding\",\n      \"arrowPadding\",\n      \"preventOverflow\",\n      \"shift\",\n      \"shiftCrossAxis\",\n      \"flip\"\n    ].reduce((e, t) => (e[t] = \"$_computePosition\", e), {})\n  },\n  created() {\n    this.autoMinSize && console.warn('[floating-vue] `autoMinSize` option is deprecated. Use `autoSize=\"min\"` instead.'), this.autoMaxSize && console.warn(\"[floating-vue] `autoMaxSize` option is deprecated. Use `autoBoundaryMaxSize` instead.\");\n  },\n  mounted() {\n    this.init(), this.$_detachPopperNode();\n  },\n  activated() {\n    this.$_autoShowHide();\n  },\n  deactivated() {\n    this.hide();\n  },\n  beforeUnmount() {\n    this.dispose();\n  },\n  methods: {\n    show({ event: e = null, skipDelay: t = !1, force: o = !1 } = {}) {\n      var i, s;\n      (i = this.parentPopper) != null && i.lockedChild && this.parentPopper.lockedChild !== this || (this.pendingHide = !1, (o || !this.disabled) && (((s = this.parentPopper) == null ? void 0 : s.lockedChild) === this && (this.parentPopper.lockedChild = null), this.$_scheduleShow(e, t), this.$emit(\"show\"), this.$_showFrameLocked = !0, requestAnimationFrame(() => {\n        this.$_showFrameLocked = !1;\n      })), this.$emit(\"update:shown\", !0));\n    },\n    hide({ event: e = null, skipDelay: t = !1 } = {}) {\n      var o;\n      if (!this.$_hideInProgress) {\n        if (this.shownChildren.size > 0) {\n          this.pendingHide = !0;\n          return;\n        }\n        if (this.hasPopperShowTriggerHover && this.$_isAimingPopper()) {\n          this.parentPopper && (this.parentPopper.lockedChild = this, clearTimeout(this.parentPopper.lockedChildTimer), this.parentPopper.lockedChildTimer = setTimeout(() => {\n            this.parentPopper.lockedChild === this && (this.parentPopper.lockedChild.hide({ skipDelay: t }), this.parentPopper.lockedChild = null);\n          }, 1e3));\n          return;\n        }\n        ((o = this.parentPopper) == null ? void 0 : o.lockedChild) === this && (this.parentPopper.lockedChild = null), this.pendingHide = !1, this.$_scheduleHide(e, t), this.$emit(\"hide\"), this.$emit(\"update:shown\", !1);\n      }\n    },\n    init() {\n      var e;\n      this.isDisposed && (this.isDisposed = !1, this.isMounted = !1, this.$_events = [], this.$_preventShow = !1, this.$_referenceNode = ((e = this.referenceNode) == null ? void 0 : e.call(this)) ?? this.$el, this.$_targetNodes = this.targetNodes().filter((t) => t.nodeType === t.ELEMENT_NODE), this.$_popperNode = this.popperNode(), this.$_innerNode = this.$_popperNode.querySelector(\".v-popper__inner\"), this.$_arrowNode = this.$_popperNode.querySelector(\".v-popper__arrow-container\"), this.$_swapTargetAttrs(\"title\", \"data-original-title\"), this.$_detachPopperNode(), this.triggers.length && this.$_addEventListeners(), this.shown && this.show());\n    },\n    dispose() {\n      this.isDisposed || (this.isDisposed = !0, this.$_removeEventListeners(), this.hide({ skipDelay: !0 }), this.$_detachPopperNode(), this.isMounted = !1, this.isShown = !1, this.$_updateParentShownChildren(!1), this.$_swapTargetAttrs(\"data-original-title\", \"title\"));\n    },\n    async onResize() {\n      this.isShown && (await this.$_computePosition(), this.$emit(\"resize\"));\n    },\n    async $_computePosition() {\n      if (this.isDisposed || this.positioningDisabled)\n        return;\n      const e = {\n        strategy: this.strategy,\n        middleware: []\n      };\n      (this.distance || this.skidding) && e.middleware.push(xe({\n        mainAxis: this.distance,\n        crossAxis: this.skidding\n      }));\n      const t = this.placement.startsWith(\"auto\");\n      if (t ? e.middleware.push(Ue({\n        alignment: this.placement.split(\"-\")[1] ?? \"\"\n      })) : e.placement = this.placement, this.preventOverflow && (this.shift && e.middleware.push(Ye({\n        padding: this.overflowPadding,\n        boundary: this.boundary,\n        crossAxis: this.shiftCrossAxis\n      })), !t && this.flip && e.middleware.push(Xe({\n        padding: this.overflowPadding,\n        boundary: this.boundary\n      }))), e.middleware.push(Ke({\n        element: this.$_arrowNode,\n        padding: this.arrowPadding\n      })), this.arrowOverflow && e.middleware.push({\n        name: \"arrowOverflow\",\n        fn: ({ placement: i, rects: s, middlewareData: r }) => {\n          let p;\n          const { centerOffset: a } = r.arrow;\n          return i.startsWith(\"top\") || i.startsWith(\"bottom\") ? p = Math.abs(a) > s.reference.width / 2 : p = Math.abs(a) > s.reference.height / 2, {\n            data: {\n              overflow: p\n            }\n          };\n        }\n      }), this.autoMinSize || this.autoSize) {\n        const i = this.autoSize ? this.autoSize : this.autoMinSize ? \"min\" : null;\n        e.middleware.push({\n          name: \"autoSize\",\n          fn: ({ rects: s, placement: r, middlewareData: p }) => {\n            var u;\n            if ((u = p.autoSize) != null && u.skip)\n              return {};\n            let a, l;\n            return r.startsWith(\"top\") || r.startsWith(\"bottom\") ? a = s.reference.width : l = s.reference.height, this.$_innerNode.style[i === \"min\" ? \"minWidth\" : i === \"max\" ? \"maxWidth\" : \"width\"] = a != null ? `${a}px` : null, this.$_innerNode.style[i === \"min\" ? \"minHeight\" : i === \"max\" ? \"maxHeight\" : \"height\"] = l != null ? `${l}px` : null, {\n              data: {\n                skip: !0\n              },\n              reset: {\n                rects: !0\n              }\n            };\n          }\n        });\n      }\n      (this.autoMaxSize || this.autoBoundaryMaxSize) && (this.$_innerNode.style.maxWidth = null, this.$_innerNode.style.maxHeight = null, e.middleware.push(Je({\n        boundary: this.boundary,\n        padding: this.overflowPadding,\n        apply: ({ availableWidth: i, availableHeight: s }) => {\n          this.$_innerNode.style.maxWidth = i != null ? `${i}px` : null, this.$_innerNode.style.maxHeight = s != null ? `${s}px` : null;\n        }\n      })));\n      const o = await Qe(this.$_referenceNode, this.$_popperNode, e);\n      Object.assign(this.result, {\n        x: o.x,\n        y: o.y,\n        placement: o.placement,\n        strategy: o.strategy,\n        arrow: {\n          ...o.middlewareData.arrow,\n          ...o.middlewareData.arrowOverflow\n        }\n      });\n    },\n    $_scheduleShow(e, t = !1) {\n      if (this.$_updateParentShownChildren(!0), this.$_hideInProgress = !1, clearTimeout(this.$_scheduleTimer), g && this.instantMove && g.instantMove && g !== this.parentPopper) {\n        g.$_applyHide(!0), this.$_applyShow(!0);\n        return;\n      }\n      t ? this.$_applyShow() : this.$_scheduleTimer = setTimeout(this.$_applyShow.bind(this), this.$_computeDelay(\"show\"));\n    },\n    $_scheduleHide(e, t = !1) {\n      if (this.shownChildren.size > 0) {\n        this.pendingHide = !0;\n        return;\n      }\n      this.$_updateParentShownChildren(!1), this.$_hideInProgress = !0, clearTimeout(this.$_scheduleTimer), this.isShown && (g = this), t ? this.$_applyHide() : this.$_scheduleTimer = setTimeout(this.$_applyHide.bind(this), this.$_computeDelay(\"hide\"));\n    },\n    $_computeDelay(e) {\n      const t = this.delay;\n      return parseInt(t && t[e] || t || 0);\n    },\n    async $_applyShow(e = !1) {\n      clearTimeout(this.$_disposeTimer), clearTimeout(this.$_scheduleTimer), this.skipTransition = e, !this.isShown && (this.$_ensureTeleport(), await G(), await this.$_computePosition(), await this.$_applyShowEffect(), this.positioningDisabled || this.$_registerEventListeners([\n        ...ne(this.$_referenceNode),\n        ...ne(this.$_popperNode)\n      ], \"scroll\", () => {\n        this.$_computePosition();\n      }));\n    },\n    async $_applyShowEffect() {\n      if (this.$_hideInProgress)\n        return;\n      if (this.computeTransformOrigin) {\n        const t = this.$_referenceNode.getBoundingClientRect(), o = this.$_popperNode.querySelector(\".v-popper__wrapper\"), i = o.parentNode.getBoundingClientRect(), s = t.x + t.width / 2 - (i.left + o.offsetLeft), r = t.y + t.height / 2 - (i.top + o.offsetTop);\n        this.result.transformOrigin = `${s}px ${r}px`;\n      }\n      this.isShown = !0, this.$_applyAttrsToTarget({\n        \"aria-describedby\": this.popperId,\n        \"data-popper-shown\": \"\"\n      });\n      const e = this.showGroup;\n      if (e) {\n        let t;\n        for (let o = 0; o < d.length; o++)\n          t = d[o], t.showGroup !== e && (t.hide(), t.$emit(\"close-group\"));\n      }\n      d.push(this), document.body.classList.add(\"v-popper--some-open\");\n      for (const t of re(this.theme))\n        he(t).push(this), document.body.classList.add(`v-popper--some-open--${t}`);\n      this.$emit(\"apply-show\"), this.classes.showFrom = !0, this.classes.showTo = !1, this.classes.hideFrom = !1, this.classes.hideTo = !1, await G(), this.classes.showFrom = !1, this.classes.showTo = !0, this.noAutoFocus || this.$_popperNode.focus();\n    },\n    async $_applyHide(e = !1) {\n      if (this.shownChildren.size > 0) {\n        this.pendingHide = !0, this.$_hideInProgress = !1;\n        return;\n      }\n      if (clearTimeout(this.$_scheduleTimer), !this.isShown)\n        return;\n      this.skipTransition = e, de(d, this), d.length === 0 && document.body.classList.remove(\"v-popper--some-open\");\n      for (const o of re(this.theme)) {\n        const i = he(o);\n        de(i, this), i.length === 0 && document.body.classList.remove(`v-popper--some-open--${o}`);\n      }\n      g === this && (g = null), this.isShown = !1, this.$_applyAttrsToTarget({\n        \"aria-describedby\": void 0,\n        \"data-popper-shown\": void 0\n      }), clearTimeout(this.$_disposeTimer);\n      const t = this.disposeTimeout;\n      t !== null && (this.$_disposeTimer = setTimeout(() => {\n        this.$_popperNode && (this.$_detachPopperNode(), this.isMounted = !1);\n      }, t)), this.$_removeEventListeners(\"scroll\"), this.$emit(\"apply-hide\"), this.classes.showFrom = !1, this.classes.showTo = !1, this.classes.hideFrom = !0, this.classes.hideTo = !1, await G(), this.classes.hideFrom = !1, this.classes.hideTo = !0;\n    },\n    $_autoShowHide() {\n      this.shown ? this.show() : this.hide();\n    },\n    $_ensureTeleport() {\n      if (this.isDisposed)\n        return;\n      let e = this.container;\n      if (typeof e == \"string\" ? e = window.document.querySelector(e) : e === !1 && (e = this.$_targetNodes[0].parentNode), !e)\n        throw new Error(\"No container for popover: \" + this.container);\n      e.appendChild(this.$_popperNode), this.isMounted = !0;\n    },\n    $_addEventListeners() {\n      const e = (o) => {\n        this.isShown && !this.$_hideInProgress || (o.usedByTooltip = !0, !this.$_preventShow && this.show({ event: o }));\n      };\n      this.$_registerTriggerListeners(this.$_targetNodes, pe, this.triggers, this.showTriggers, e), this.$_registerTriggerListeners([this.$_popperNode], pe, this.popperTriggers, this.popperShowTriggers, e);\n      const t = (o) => {\n        o.usedByTooltip || this.hide({ event: o });\n      };\n      this.$_registerTriggerListeners(this.$_targetNodes, ae, this.triggers, this.hideTriggers, t), this.$_registerTriggerListeners([this.$_popperNode], ae, this.popperTriggers, this.popperHideTriggers, t);\n    },\n    $_registerEventListeners(e, t, o) {\n      this.$_events.push({ targetNodes: e, eventType: t, handler: o }), e.forEach((i) => i.addEventListener(t, o, $ ? {\n        passive: !0\n      } : void 0));\n    },\n    $_registerTriggerListeners(e, t, o, i, s) {\n      let r = o;\n      i != null && (r = typeof i == \"function\" ? i(r) : i), r.forEach((p) => {\n        const a = t[p];\n        a && this.$_registerEventListeners(e, a, s);\n      });\n    },\n    $_removeEventListeners(e) {\n      const t = [];\n      this.$_events.forEach((o) => {\n        const { targetNodes: i, eventType: s, handler: r } = o;\n        !e || e === s ? i.forEach((p) => p.removeEventListener(s, r)) : t.push(o);\n      }), this.$_events = t;\n    },\n    $_refreshListeners() {\n      this.isDisposed || (this.$_removeEventListeners(), this.$_addEventListeners());\n    },\n    $_handleGlobalClose(e, t = !1) {\n      this.$_showFrameLocked || (this.hide({ event: e }), e.closePopover ? this.$emit(\"close-directive\") : this.$emit(\"auto-hide\"), t && (this.$_preventShow = !0, setTimeout(() => {\n        this.$_preventShow = !1;\n      }, 300)));\n    },\n    $_detachPopperNode() {\n      this.$_popperNode.parentNode && this.$_popperNode.parentNode.removeChild(this.$_popperNode);\n    },\n    $_swapTargetAttrs(e, t) {\n      for (const o of this.$_targetNodes) {\n        const i = o.getAttribute(e);\n        i && (o.removeAttribute(e), o.setAttribute(t, i));\n      }\n    },\n    $_applyAttrsToTarget(e) {\n      for (const t of this.$_targetNodes)\n        for (const o in e) {\n          const i = e[o];\n          i == null ? t.removeAttribute(o) : t.setAttribute(o, i);\n        }\n    },\n    $_updateParentShownChildren(e) {\n      let t = this.parentPopper;\n      for (; t; )\n        e ? t.shownChildren.add(this.randomId) : (t.shownChildren.delete(this.randomId), t.pendingHide && t.hide()), t = t.parentPopper;\n    },\n    $_isAimingPopper() {\n      const e = this.$_referenceNode.getBoundingClientRect();\n      if (y >= e.left && y <= e.right && _ >= e.top && _ <= e.bottom) {\n        const t = this.$_popperNode.getBoundingClientRect(), o = y - c, i = _ - m, r = t.left + t.width / 2 - c + (t.top + t.height / 2) - m + t.width + t.height, p = c + o * r, a = m + i * r;\n        return C(c, m, p, a, t.left, t.top, t.left, t.bottom) || // Left edge\n        C(c, m, p, a, t.left, t.top, t.right, t.top) || // Top edge\n        C(c, m, p, a, t.right, t.top, t.right, t.bottom) || // Right edge\n        C(c, m, p, a, t.left, t.bottom, t.right, t.bottom);\n      }\n      return !1;\n    }\n  },\n  render() {\n    return this.$slots.default(this.slotData);\n  }\n});\nif (typeof document < \"u\" && typeof window < \"u\") {\n  if (_e) {\n    const e = $ ? {\n      passive: !0,\n      capture: !0\n    } : !0;\n    document.addEventListener(\"touchstart\", (t) => ue(t, !0), e), document.addEventListener(\"touchend\", (t) => fe(t, !0), e);\n  } else\n    window.addEventListener(\"mousedown\", (e) => ue(e, !1), !0), window.addEventListener(\"click\", (e) => fe(e, !1), !0);\n  window.addEventListener(\"resize\", tt);\n}\nfunction ue(e, t) {\n  if (h.autoHideOnMousedown)\n    Pe(e, t);\n  else\n    for (let o = 0; o < d.length; o++) {\n      const i = d[o];\n      try {\n        i.mouseDownContains = i.popperNode().contains(e.target);\n      } catch {\n      }\n    }\n}\nfunction fe(e, t) {\n  h.autoHideOnMousedown || Pe(e, t);\n}\nfunction Pe(e, t) {\n  const o = {};\n  for (let i = d.length - 1; i >= 0; i--) {\n    const s = d[i];\n    try {\n      const r = s.containsGlobalTarget = s.mouseDownContains || s.popperNode().contains(e.target);\n      s.pendingHide = !1, requestAnimationFrame(() => {\n        if (s.pendingHide = !1, !o[s.randomId] && ce(s, r, e)) {\n          if (s.$_handleGlobalClose(e, t), !e.closeAllPopover && e.closePopover && r) {\n            let a = s.parentPopper;\n            for (; a; )\n              o[a.randomId] = !0, a = a.parentPopper;\n            return;\n          }\n          let p = s.parentPopper;\n          for (; p && ce(p, p.containsGlobalTarget, e); ) {\n            p.$_handleGlobalClose(e, t);\n            p = p.parentPopper;\n          }\n        }\n      });\n    } catch {\n    }\n  }\n}\nfunction ce(e, t, o) {\n  return o.closeAllPopover || o.closePopover && t || et(e, o) && !t;\n}\nfunction et(e, t) {\n  if (typeof e.autoHide == \"function\") {\n    const o = e.autoHide(t);\n    return e.lastAutoHide = o, o;\n  }\n  return e.autoHide;\n}\nfunction tt() {\n  for (let e = 0; e < d.length; e++)\n    d[e].$_computePosition();\n}\nfunction Nt() {\n  for (let e = 0; e < d.length; e++)\n    d[e].hide();\n}\nlet c = 0, m = 0, y = 0, _ = 0;\ntypeof window < \"u\" && window.addEventListener(\"mousemove\", (e) => {\n  c = y, m = _, y = e.clientX, _ = e.clientY;\n}, $ ? {\n  passive: !0\n} : void 0);\nfunction C(e, t, o, i, s, r, p, a) {\n  const l = ((p - s) * (t - r) - (a - r) * (e - s)) / ((a - r) * (o - e) - (p - s) * (i - t)), u = ((o - e) * (t - r) - (i - t) * (e - s)) / ((a - r) * (o - e) - (p - s) * (i - t));\n  return l >= 0 && l <= 1 && u >= 0 && u <= 1;\n}\nconst ot = {\n  extends: Q()\n}, B = (e, t) => {\n  const o = e.__vccOpts || e;\n  for (const [i, s] of t)\n    o[i] = s;\n  return o;\n};\nfunction it(e, t, o, i, s, r) {\n  return f(), T(\"div\", {\n    ref: \"reference\",\n    class: J([\"v-popper\", {\n      \"v-popper--shown\": e.slotData.isShown\n    }])\n  }, [\n    A(e.$slots, \"default\", ke(Le(e.slotData)))\n  ], 2);\n}\nconst st = /* @__PURE__ */ B(ot, [[\"render\", it]]);\nfunction nt() {\n  var e = window.navigator.userAgent, t = e.indexOf(\"MSIE \");\n  if (t > 0)\n    return parseInt(e.substring(t + 5, e.indexOf(\".\", t)), 10);\n  var o = e.indexOf(\"Trident/\");\n  if (o > 0) {\n    var i = e.indexOf(\"rv:\");\n    return parseInt(e.substring(i + 3, e.indexOf(\".\", i)), 10);\n  }\n  var s = e.indexOf(\"Edge/\");\n  return s > 0 ? parseInt(e.substring(s + 5, e.indexOf(\".\", s)), 10) : -1;\n}\nlet z;\nfunction X() {\n  X.init || (X.init = !0, z = nt() !== -1);\n}\nvar E = {\n  name: \"ResizeObserver\",\n  props: {\n    emitOnMount: {\n      type: Boolean,\n      default: !1\n    },\n    ignoreWidth: {\n      type: Boolean,\n      default: !1\n    },\n    ignoreHeight: {\n      type: Boolean,\n      default: !1\n    }\n  },\n  emits: [\n    \"notify\"\n  ],\n  mounted() {\n    X(), Fe(() => {\n      this._w = this.$el.offsetWidth, this._h = this.$el.offsetHeight, this.emitOnMount && this.emitSize();\n    });\n    const e = document.createElement(\"object\");\n    this._resizeObject = e, e.setAttribute(\"aria-hidden\", \"true\"), e.setAttribute(\"tabindex\", -1), e.onload = this.addResizeHandlers, e.type = \"text/html\", z && this.$el.appendChild(e), e.data = \"about:blank\", z || this.$el.appendChild(e);\n  },\n  beforeUnmount() {\n    this.removeResizeHandlers();\n  },\n  methods: {\n    compareAndNotify() {\n      (!this.ignoreWidth && this._w !== this.$el.offsetWidth || !this.ignoreHeight && this._h !== this.$el.offsetHeight) && (this._w = this.$el.offsetWidth, this._h = this.$el.offsetHeight, this.emitSize());\n    },\n    emitSize() {\n      this.$emit(\"notify\", {\n        width: this._w,\n        height: this._h\n      });\n    },\n    addResizeHandlers() {\n      this._resizeObject.contentDocument.defaultView.addEventListener(\"resize\", this.compareAndNotify), this.compareAndNotify();\n    },\n    removeResizeHandlers() {\n      this._resizeObject && this._resizeObject.onload && (!z && this._resizeObject.contentDocument && this._resizeObject.contentDocument.defaultView.removeEventListener(\"resize\", this.compareAndNotify), this.$el.removeChild(this._resizeObject), this._resizeObject.onload = null, this._resizeObject = null);\n    }\n  }\n};\nconst rt = /* @__PURE__ */ Re(\"data-v-b329ee4c\");\nDe(\"data-v-b329ee4c\");\nconst pt = {\n  class: \"resize-observer\",\n  tabindex: \"-1\"\n};\nIe();\nconst at = /* @__PURE__ */ rt((e, t, o, i, s, r) => (f(), M(\"div\", pt)));\nE.render = at;\nE.__scopeId = \"data-v-b329ee4c\";\nE.__file = \"src/components/ResizeObserver.vue\";\nconst Z = (e = \"theme\") => ({\n  computed: {\n    themeClass() {\n      return Ze(this[e]);\n    }\n  }\n}), dt = O({\n  name: \"VPopperContent\",\n  components: {\n    ResizeObserver: E\n  },\n  mixins: [\n    Z()\n  ],\n  props: {\n    popperId: String,\n    theme: String,\n    shown: Boolean,\n    mounted: Boolean,\n    skipTransition: Boolean,\n    autoHide: Boolean,\n    handleResize: Boolean,\n    classes: Object,\n    result: Object\n  },\n  emits: [\n    \"hide\",\n    \"resize\"\n  ],\n  methods: {\n    toPx(e) {\n      return e != null && !isNaN(e) ? `${e}px` : null;\n    }\n  }\n}), lt = [\"id\", \"aria-hidden\", \"tabindex\", \"data-popper-placement\"], ht = {\n  ref: \"inner\",\n  class: \"v-popper__inner\"\n}, ut = /* @__PURE__ */ w(\"div\", { class: \"v-popper__arrow-outer\" }, null, -1), ft = /* @__PURE__ */ w(\"div\", { class: \"v-popper__arrow-inner\" }, null, -1), ct = [\n  ut,\n  ft\n];\nfunction mt(e, t, o, i, s, r) {\n  const p = P(\"ResizeObserver\");\n  return f(), T(\"div\", {\n    id: e.popperId,\n    ref: \"popover\",\n    class: J([\"v-popper__popper\", [\n      e.themeClass,\n      e.classes.popperClass,\n      {\n        \"v-popper__popper--shown\": e.shown,\n        \"v-popper__popper--hidden\": !e.shown,\n        \"v-popper__popper--show-from\": e.classes.showFrom,\n        \"v-popper__popper--show-to\": e.classes.showTo,\n        \"v-popper__popper--hide-from\": e.classes.hideFrom,\n        \"v-popper__popper--hide-to\": e.classes.hideTo,\n        \"v-popper__popper--skip-transition\": e.skipTransition,\n        \"v-popper__popper--arrow-overflow\": e.result && e.result.arrow.overflow,\n        \"v-popper__popper--no-positioning\": !e.result\n      }\n    ]]),\n    style: W(e.result ? {\n      position: e.result.strategy,\n      transform: `translate3d(${Math.round(e.result.x)}px,${Math.round(e.result.y)}px,0)`\n    } : void 0),\n    \"aria-hidden\": e.shown ? \"false\" : \"true\",\n    tabindex: e.autoHide ? 0 : void 0,\n    \"data-popper-placement\": e.result ? e.result.placement : void 0,\n    onKeyup: t[2] || (t[2] = je((a) => e.autoHide && e.$emit(\"hide\"), [\"esc\"]))\n  }, [\n    w(\"div\", {\n      class: \"v-popper__backdrop\",\n      onClick: t[0] || (t[0] = (a) => e.autoHide && e.$emit(\"hide\"))\n    }),\n    w(\"div\", {\n      class: \"v-popper__wrapper\",\n      style: W(e.result ? {\n        transformOrigin: e.result.transformOrigin\n      } : void 0)\n    }, [\n      w(\"div\", ht, [\n        e.mounted ? (f(), T(Ve, { key: 0 }, [\n          w(\"div\", null, [\n            A(e.$slots, \"default\")\n          ]),\n          e.handleResize ? (f(), M(p, {\n            key: 0,\n            onNotify: t[1] || (t[1] = (a) => e.$emit(\"resize\", a))\n          })) : se(\"\", !0)\n        ], 64)) : se(\"\", !0)\n      ], 512),\n      w(\"div\", {\n        ref: \"arrow\",\n        class: \"v-popper__arrow-container\",\n        style: W(e.result ? {\n          left: e.toPx(e.result.arrow.x),\n          top: e.toPx(e.result.arrow.y)\n        } : void 0)\n      }, ct, 4)\n    ], 4)\n  ], 46, lt);\n}\nconst ee = /* @__PURE__ */ B(dt, [[\"render\", mt]]), te = {\n  methods: {\n    show(...e) {\n      return this.$refs.popper.show(...e);\n    },\n    hide(...e) {\n      return this.$refs.popper.hide(...e);\n    },\n    dispose(...e) {\n      return this.$refs.popper.dispose(...e);\n    },\n    onResize(...e) {\n      return this.$refs.popper.onResize(...e);\n    }\n  }\n};\nlet K = function() {\n};\ntypeof window < \"u\" && (K = window.Element);\nconst gt = O({\n  name: \"VPopperWrapper\",\n  components: {\n    Popper: st,\n    PopperContent: ee\n  },\n  mixins: [\n    te,\n    Z(\"finalTheme\")\n  ],\n  props: {\n    theme: {\n      type: String,\n      default: null\n    },\n    referenceNode: {\n      type: Function,\n      default: null\n    },\n    shown: {\n      type: Boolean,\n      default: !1\n    },\n    showGroup: {\n      type: String,\n      default: null\n    },\n    // eslint-disable-next-line vue/require-prop-types\n    ariaId: {\n      default: null\n    },\n    disabled: {\n      type: Boolean,\n      default: void 0\n    },\n    positioningDisabled: {\n      type: Boolean,\n      default: void 0\n    },\n    placement: {\n      type: String,\n      default: void 0\n    },\n    delay: {\n      type: [String, Number, Object],\n      default: void 0\n    },\n    distance: {\n      type: [Number, String],\n      default: void 0\n    },\n    skidding: {\n      type: [Number, String],\n      default: void 0\n    },\n    triggers: {\n      type: Array,\n      default: void 0\n    },\n    showTriggers: {\n      type: [Array, Function],\n      default: void 0\n    },\n    hideTriggers: {\n      type: [Array, Function],\n      default: void 0\n    },\n    popperTriggers: {\n      type: Array,\n      default: void 0\n    },\n    popperShowTriggers: {\n      type: [Array, Function],\n      default: void 0\n    },\n    popperHideTriggers: {\n      type: [Array, Function],\n      default: void 0\n    },\n    container: {\n      type: [String, Object, K, Boolean],\n      default: void 0\n    },\n    boundary: {\n      type: [String, K],\n      default: void 0\n    },\n    strategy: {\n      type: String,\n      default: void 0\n    },\n    autoHide: {\n      type: [Boolean, Function],\n      default: void 0\n    },\n    handleResize: {\n      type: Boolean,\n      default: void 0\n    },\n    instantMove: {\n      type: Boolean,\n      default: void 0\n    },\n    eagerMount: {\n      type: Boolean,\n      default: void 0\n    },\n    popperClass: {\n      type: [String, Array, Object],\n      default: void 0\n    },\n    computeTransformOrigin: {\n      type: Boolean,\n      default: void 0\n    },\n    /**\n     * @deprecated\n     */\n    autoMinSize: {\n      type: Boolean,\n      default: void 0\n    },\n    autoSize: {\n      type: [Boolean, String],\n      default: void 0\n    },\n    /**\n     * @deprecated\n     */\n    autoMaxSize: {\n      type: Boolean,\n      default: void 0\n    },\n    autoBoundaryMaxSize: {\n      type: Boolean,\n      default: void 0\n    },\n    preventOverflow: {\n      type: Boolean,\n      default: void 0\n    },\n    overflowPadding: {\n      type: [Number, String],\n      default: void 0\n    },\n    arrowPadding: {\n      type: [Number, String],\n      default: void 0\n    },\n    arrowOverflow: {\n      type: Boolean,\n      default: void 0\n    },\n    flip: {\n      type: Boolean,\n      default: void 0\n    },\n    shift: {\n      type: Boolean,\n      default: void 0\n    },\n    shiftCrossAxis: {\n      type: Boolean,\n      default: void 0\n    },\n    noAutoFocus: {\n      type: Boolean,\n      default: void 0\n    },\n    disposeTimeout: {\n      type: Number,\n      default: void 0\n    }\n  },\n  emits: {\n    show: () => !0,\n    hide: () => !0,\n    \"update:shown\": (e) => !0,\n    \"apply-show\": () => !0,\n    \"apply-hide\": () => !0,\n    \"close-group\": () => !0,\n    \"close-directive\": () => !0,\n    \"auto-hide\": () => !0,\n    resize: () => !0\n  },\n  computed: {\n    finalTheme() {\n      return this.theme ?? this.$options.vPopperTheme;\n    }\n  },\n  methods: {\n    getTargetNodes() {\n      return Array.from(this.$el.children).filter((e) => e !== this.$refs.popperContent.$el);\n    }\n  }\n});\nfunction wt(e, t, o, i, s, r) {\n  const p = P(\"PopperContent\"), a = P(\"Popper\");\n  return f(), M(a, $e({ ref: \"popper\" }, e.$props, {\n    theme: e.finalTheme,\n    \"target-nodes\": e.getTargetNodes,\n    \"popper-node\": () => e.$refs.popperContent.$el,\n    class: [\n      e.themeClass\n    ],\n    onShow: t[0] || (t[0] = () => e.$emit(\"show\")),\n    onHide: t[1] || (t[1] = () => e.$emit(\"hide\")),\n    \"onUpdate:shown\": t[2] || (t[2] = (l) => e.$emit(\"update:shown\", l)),\n    onApplyShow: t[3] || (t[3] = () => e.$emit(\"apply-show\")),\n    onApplyHide: t[4] || (t[4] = () => e.$emit(\"apply-hide\")),\n    onCloseGroup: t[5] || (t[5] = () => e.$emit(\"close-group\")),\n    onCloseDirective: t[6] || (t[6] = () => e.$emit(\"close-directive\")),\n    onAutoHide: t[7] || (t[7] = () => e.$emit(\"auto-hide\")),\n    onResize: t[8] || (t[8] = () => e.$emit(\"resize\"))\n  }), {\n    default: N(({\n      popperId: l,\n      isShown: u,\n      shouldMountContent: L,\n      skipTransition: D,\n      autoHide: I,\n      show: F,\n      hide: v,\n      handleResize: R,\n      onResize: j,\n      classes: V,\n      result: Ee\n    }) => [\n      A(e.$slots, \"default\", {\n        shown: u,\n        show: F,\n        hide: v\n      }),\n      ve(p, {\n        ref: \"popperContent\",\n        \"popper-id\": l,\n        theme: e.finalTheme,\n        shown: u,\n        mounted: L,\n        \"skip-transition\": D,\n        \"auto-hide\": I,\n        \"handle-resize\": R,\n        classes: V,\n        result: Ee,\n        onHide: v,\n        onResize: j\n      }, {\n        default: N(() => [\n          A(e.$slots, \"popper\", {\n            shown: u,\n            hide: v\n          })\n        ]),\n        _: 2\n      }, 1032, [\"popper-id\", \"theme\", \"shown\", \"mounted\", \"skip-transition\", \"auto-hide\", \"handle-resize\", \"classes\", \"result\", \"onHide\", \"onResize\"])\n    ]),\n    _: 3\n  }, 16, [\"theme\", \"target-nodes\", \"popper-node\", \"class\"]);\n}\nconst k = /* @__PURE__ */ B(gt, [[\"render\", wt]]), Se = {\n  ...k,\n  name: \"VDropdown\",\n  vPopperTheme: \"dropdown\"\n}, be = {\n  ...k,\n  name: \"VMenu\",\n  vPopperTheme: \"menu\"\n}, Ce = {\n  ...k,\n  name: \"VTooltip\",\n  vPopperTheme: \"tooltip\"\n}, $t = O({\n  name: \"VTooltipDirective\",\n  components: {\n    Popper: Q(),\n    PopperContent: ee\n  },\n  mixins: [\n    te\n  ],\n  inheritAttrs: !1,\n  props: {\n    theme: {\n      type: String,\n      default: \"tooltip\"\n    },\n    html: {\n      type: Boolean,\n      default: (e) => S(e.theme, \"html\")\n    },\n    content: {\n      type: [String, Number, Function],\n      default: null\n    },\n    loadingContent: {\n      type: String,\n      default: (e) => S(e.theme, \"loadingContent\")\n    },\n    targetNodes: {\n      type: Function,\n      required: !0\n    }\n  },\n  data() {\n    return {\n      asyncContent: null\n    };\n  },\n  computed: {\n    isContentAsync() {\n      return typeof this.content == \"function\";\n    },\n    loading() {\n      return this.isContentAsync && this.asyncContent == null;\n    },\n    finalContent() {\n      return this.isContentAsync ? this.loading ? this.loadingContent : this.asyncContent : this.content;\n    }\n  },\n  watch: {\n    content: {\n      handler() {\n        this.fetchContent(!0);\n      },\n      immediate: !0\n    },\n    async finalContent() {\n      await this.$nextTick(), this.$refs.popper.onResize();\n    }\n  },\n  created() {\n    this.$_fetchId = 0;\n  },\n  methods: {\n    fetchContent(e) {\n      if (typeof this.content == \"function\" && this.$_isShown && (e || !this.$_loading && this.asyncContent == null)) {\n        this.asyncContent = null, this.$_loading = !0;\n        const t = ++this.$_fetchId, o = this.content(this);\n        o.then ? o.then((i) => this.onResult(t, i)) : this.onResult(t, o);\n      }\n    },\n    onResult(e, t) {\n      e === this.$_fetchId && (this.$_loading = !1, this.asyncContent = t);\n    },\n    onShow() {\n      this.$_isShown = !0, this.fetchContent();\n    },\n    onHide() {\n      this.$_isShown = !1;\n    }\n  }\n}), vt = [\"innerHTML\"], yt = [\"textContent\"];\nfunction _t(e, t, o, i, s, r) {\n  const p = P(\"PopperContent\"), a = P(\"Popper\");\n  return f(), M(a, $e({ ref: \"popper\" }, e.$attrs, {\n    theme: e.theme,\n    \"target-nodes\": e.targetNodes,\n    \"popper-node\": () => e.$refs.popperContent.$el,\n    onApplyShow: e.onShow,\n    onApplyHide: e.onHide\n  }), {\n    default: N(({\n      popperId: l,\n      isShown: u,\n      shouldMountContent: L,\n      skipTransition: D,\n      autoHide: I,\n      hide: F,\n      handleResize: v,\n      onResize: R,\n      classes: j,\n      result: V\n    }) => [\n      ve(p, {\n        ref: \"popperContent\",\n        class: J({\n          \"v-popper--tooltip-loading\": e.loading\n        }),\n        \"popper-id\": l,\n        theme: e.theme,\n        shown: u,\n        mounted: L,\n        \"skip-transition\": D,\n        \"auto-hide\": I,\n        \"handle-resize\": v,\n        classes: j,\n        result: V,\n        onHide: F,\n        onResize: R\n      }, {\n        default: N(() => [\n          e.html ? (f(), T(\"div\", {\n            key: 0,\n            innerHTML: e.finalContent\n          }, null, 8, vt)) : (f(), T(\"div\", {\n            key: 1,\n            textContent: We(e.finalContent)\n          }, null, 8, yt))\n        ]),\n        _: 2\n      }, 1032, [\"class\", \"popper-id\", \"theme\", \"shown\", \"mounted\", \"skip-transition\", \"auto-hide\", \"handle-resize\", \"classes\", \"result\", \"onHide\", \"onResize\"])\n    ]),\n    _: 1\n  }, 16, [\"theme\", \"target-nodes\", \"popper-node\", \"onApplyShow\", \"onApplyHide\"]);\n}\nconst ze = /* @__PURE__ */ B($t, [[\"render\", _t]]), Ae = \"v-popper--has-tooltip\";\nfunction Tt(e, t) {\n  let o = e.placement;\n  if (!o && t)\n    for (const i of Te)\n      t[i] && (o = i);\n  return o || (o = S(e.theme || \"tooltip\", \"placement\")), o;\n}\nfunction Ne(e, t, o) {\n  let i;\n  const s = typeof t;\n  return s === \"string\" ? i = { content: t } : t && s === \"object\" ? i = t : i = { content: !1 }, i.placement = Tt(i, o), i.targetNodes = () => [e], i.referenceNode = () => e, i;\n}\nlet x, b, Pt = 0;\nfunction St() {\n  if (x)\n    return;\n  b = U([]), x = Ge({\n    name: \"VTooltipDirectiveApp\",\n    setup() {\n      return {\n        directives: b\n      };\n    },\n    render() {\n      return this.directives.map((t) => qe(ze, {\n        ...t.options,\n        shown: t.shown || t.options.shown,\n        key: t.id\n      }));\n    },\n    devtools: {\n      hide: !0\n    }\n  });\n  const e = document.createElement(\"div\");\n  document.body.appendChild(e), x.mount(e);\n}\nfunction bt(e, t, o) {\n  St();\n  const i = U(Ne(e, t, o)), s = U(!1), r = {\n    id: Pt++,\n    options: i,\n    shown: s\n  };\n  return b.value.push(r), e.classList && e.classList.add(Ae), e.$_popper = {\n    options: i,\n    item: r,\n    show() {\n      s.value = !0;\n    },\n    hide() {\n      s.value = !1;\n    }\n  };\n}\nfunction He(e) {\n  if (e.$_popper) {\n    const t = b.value.indexOf(e.$_popper.item);\n    t !== -1 && b.value.splice(t, 1), delete e.$_popper, delete e.$_popperOldShown, delete e.$_popperMountTarget;\n  }\n  e.classList && e.classList.remove(Ae);\n}\nfunction me(e, { value: t, modifiers: o }) {\n  const i = Ne(e, t, o);\n  if (!i.content || S(i.theme || \"tooltip\", \"disabled\"))\n    He(e);\n  else {\n    let s;\n    e.$_popper ? (s = e.$_popper, s.options.value = i) : s = bt(e, t, o), typeof t.shown < \"u\" && t.shown !== e.$_popperOldShown && (e.$_popperOldShown = t.shown, t.shown ? s.show() : s.hide());\n  }\n}\nconst oe = {\n  beforeMount: me,\n  updated: me,\n  beforeUnmount(e) {\n    He(e);\n  }\n};\nfunction ge(e) {\n  e.addEventListener(\"mousedown\", H), e.addEventListener(\"click\", H), e.addEventListener(\"touchstart\", Oe, $ ? {\n    passive: !0\n  } : !1);\n}\nfunction we(e) {\n  e.removeEventListener(\"mousedown\", H), e.removeEventListener(\"click\", H), e.removeEventListener(\"touchstart\", Oe), e.removeEventListener(\"touchend\", Me), e.removeEventListener(\"touchcancel\", Be);\n}\nfunction H(e) {\n  const t = e.currentTarget;\n  e.closePopover = !t.$_vclosepopover_touch, e.closeAllPopover = t.$_closePopoverModifiers && !!t.$_closePopoverModifiers.all;\n}\nfunction Oe(e) {\n  if (e.changedTouches.length === 1) {\n    const t = e.currentTarget;\n    t.$_vclosepopover_touch = !0;\n    const o = e.changedTouches[0];\n    t.$_vclosepopover_touchPoint = o, t.addEventListener(\"touchend\", Me), t.addEventListener(\"touchcancel\", Be);\n  }\n}\nfunction Me(e) {\n  const t = e.currentTarget;\n  if (t.$_vclosepopover_touch = !1, e.changedTouches.length === 1) {\n    const o = e.changedTouches[0], i = t.$_vclosepopover_touchPoint;\n    e.closePopover = Math.abs(o.screenY - i.screenY) < 20 && Math.abs(o.screenX - i.screenX) < 20, e.closeAllPopover = t.$_closePopoverModifiers && !!t.$_closePopoverModifiers.all;\n  }\n}\nfunction Be(e) {\n  const t = e.currentTarget;\n  t.$_vclosepopover_touch = !1;\n}\nconst ie = {\n  beforeMount(e, { value: t, modifiers: o }) {\n    e.$_closePopoverModifiers = o, (typeof t > \"u\" || t) && ge(e);\n  },\n  updated(e, { value: t, oldValue: o, modifiers: i }) {\n    e.$_closePopoverModifiers = i, t !== o && (typeof t > \"u\" || t ? ge(e) : we(e));\n  },\n  beforeUnmount(e) {\n    we(e);\n  }\n}, Ht = h, Ot = oe, Mt = oe, Bt = ie, Et = ie, kt = Se, Lt = be, Dt = Q, It = ee, Ft = te, Rt = k, jt = Z, Vt = Ce, Wt = ze;\nfunction Ct(e, t = {}) {\n  e.$_vTooltipInstalled || (e.$_vTooltipInstalled = !0, ye(h, t), e.directive(\"tooltip\", oe), e.directive(\"close-popper\", ie), e.component(\"VTooltip\", Ce), e.component(\"VDropdown\", Se), e.component(\"VMenu\", be));\n}\nconst Gt = {\n  // eslint-disable-next-line no-undef\n  version: \"5.2.2\",\n  install: Ct,\n  options: h\n};\nexport {\n  kt as Dropdown,\n  ae as HIDE_EVENT_MAP,\n  Lt as Menu,\n  Dt as Popper,\n  It as PopperContent,\n  Ft as PopperMethods,\n  Rt as PopperWrapper,\n  pe as SHOW_EVENT_MAP,\n  jt as ThemeClass,\n  Vt as Tooltip,\n  Wt as TooltipDirective,\n  Bt as VClosePopper,\n  Ot as VTooltip,\n  bt as createTooltip,\n  Gt as default,\n  He as destroyTooltip,\n  Nt as hideAllPoppers,\n  Ct as install,\n  Ht as options,\n  Te as placements,\n  tt as recomputeAllPoppers,\n  Et as vClosePopper,\n  Mt as vTooltip\n};\n","\n      import { defineNuxtPlugin } from '#imports'\n      import { vTooltip, vClosePopper } from 'floating-vue'\n      \n      export default defineNuxtPlugin((nuxtApp) => { \n        nuxtApp.vueApp.directive('tooltip', vTooltip)\n        nuxtApp.vueApp.directive('close-popper', vClosePopper)\n      })\n    ","import type { IconProps } from 'vue3-toastify'\nimport Vue3Toastify, { toast } from 'vue3-toastify'\nimport 'vue3-toastify/dist/index.css'\nimport '../vue3-toastify.css'\n\nexport default defineNuxtPlugin(async (nuxtApp) => {\n  const [errorWarning, check, information, cross] = await Promise.all(\n    ['error-warning', 'check', 'information', 'x'].map(\n      (name) => import(`~/assets/icons/site/${name}.svg?raw`),\n    ),\n  )\n  const closeButton = {\n    svg: cross.default,\n    class:\n      'close-button h-6 w-6 scale-75 text-gray-500 ml-4 mr-2 hover:opacity-60 transition-opacity',\n  }\n  const icons = {\n    error: { svg: errorWarning.default, class: 'text-err' },\n    warning: { svg: errorWarning.default, class: 'text-wrn' },\n    success: { svg: check.default, class: 'text-suc' },\n    info: { svg: information.default, class: 'text-thm' },\n    default: undefined,\n    loading: undefined,\n  }\n\n  nuxtApp.vueApp.use(Vue3Toastify, {\n    transition: 'slide',\n    hideProgressBar: true,\n    dangerouslyHTMLString: true,\n    autoClose: 4000,\n    containerClassName: 'webcc-toast',\n    icon: ({ type }: IconProps) => icons[type] && renderIcon(icons[type]!),\n    closeButton: () => renderIcon(closeButton),\n  })\n\n  return {\n    provide: { toast },\n  }\n})\n\nfunction renderIcon(icon: { svg: string; class: string }) {\n  return h('span', {\n    innerHTML: icon.svg,\n    class: `flex fill-current ${icon.class}`,\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 string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isParameterizedString(wat) {\n  return (\n    typeof wat === 'object' &&\n    wat !== null &&\n    '__sentry_template_string__' in wat &&\n    '__sentry_template_values__' in wat\n  );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n  return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n  return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n  return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n  return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n  return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n  try {\n    return wat instanceof base;\n  } catch (_e) {\n    return false;\n  }\n}\n\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isVueViewModel(wat) {\n  // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n  return !!(typeof wat === 'object' && wat !== null && ((wat ).__isVue || (wat )._isVue));\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { isVueViewModel, isString, isRegExp } from './is.js';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nfunction truncate(str, max = 0) {\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n  let newLine = line;\n  const lineLength = newLine.length;\n  if (lineLength <= 150) {\n    return newLine;\n  }\n  if (colno > lineLength) {\n    // eslint-disable-next-line no-param-reassign\n    colno = lineLength;\n  }\n\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\n\n  let end = Math.min(start + 140, lineLength);\n  if (end > lineLength - 5) {\n    end = lineLength;\n  }\n  if (end === lineLength) {\n    start = Math.max(end - 140, 0);\n  }\n\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < lineLength) {\n    newLine += ' {snip}';\n  }\n\n  return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction safeJoin(input, delimiter) {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line @typescript-eslint/prefer-for-of\n  for (let i = 0; i < input.length; i++) {\n    const value = input[i];\n    try {\n      // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n      // console warnings. This happens when a Vue template is rendered with\n      // an undeclared variable, which we try to stringify, ultimately causing\n      // Vue to issue another warning which repeats indefinitely.\n      // see: https://github.com/getsentry/sentry-javascript/pull/8981\n      if (isVueViewModel(value)) {\n        output.push('[VueViewModel]');\n      } else {\n        output.push(String(value));\n      }\n    } catch (e) {\n      output.push('[value cannot be serialized]');\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nfunction isMatchingPattern(\n  value,\n  pattern,\n  requireExactStringMatch = false,\n) {\n  if (!isString(value)) {\n    return false;\n  }\n\n  if (isRegExp(pattern)) {\n    return pattern.test(value);\n  }\n  if (isString(pattern)) {\n    return requireExactStringMatch ? value === pattern : value.includes(pattern);\n  }\n\n  return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nfunction stringMatchesSomePattern(\n  testString,\n  patterns = [],\n  requireExactStringMatch = false,\n) {\n  return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, truncate };\n//# sourceMappingURL=string.js.map\n","import { isInstanceOf } from './is.js';\nimport { truncate } from './string.js';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nfunction applyAggregateErrorsToEvent(\n  exceptionFromErrorImplementation,\n  parser,\n  maxValueLimit = 250,\n  key,\n  limit,\n  event,\n  hint,\n) {\n  if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n    return;\n  }\n\n  // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n  const originalException =\n    event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n  // We only create exception grouping if there is an exception in the event.\n  if (originalException) {\n    event.exception.values = truncateAggregateExceptions(\n      aggregateExceptionsFromError(\n        exceptionFromErrorImplementation,\n        parser,\n        limit,\n        hint.originalException ,\n        key,\n        event.exception.values,\n        originalException,\n        0,\n      ),\n      maxValueLimit,\n    );\n  }\n}\n\nfunction aggregateExceptionsFromError(\n  exceptionFromErrorImplementation,\n  parser,\n  limit,\n  error,\n  key,\n  prevExceptions,\n  exception,\n  exceptionId,\n) {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n\n  let newExceptions = [...prevExceptions];\n\n  // Recursively call this function in order to walk down a chain of errors\n  if (isInstanceOf(error[key], Error)) {\n    applyExceptionGroupFieldsForParentException(exception, exceptionId);\n    const newException = exceptionFromErrorImplementation(parser, error[key]);\n    const newExceptionId = newExceptions.length;\n    applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n    newExceptions = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      error[key],\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId,\n    );\n  }\n\n  // This will create exception grouping for AggregateErrors\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n  if (Array.isArray(error.errors)) {\n    error.errors.forEach((childError, i) => {\n      if (isInstanceOf(childError, Error)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId,\n        );\n      }\n    });\n  }\n\n  return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception, exceptionId) {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    ...(exception.type === 'AggregateError' && { is_exception_group: true }),\n    exception_id: exceptionId,\n  };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n  exception,\n  source,\n  exceptionId,\n  parentId,\n) {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    type: 'chained',\n    source,\n    exception_id: exceptionId,\n    parent_id: parentId,\n  };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions, maxValueLength) {\n  return exceptions.map(exception => {\n    if (exception.value) {\n      exception.value = truncate(exception.value, maxValueLength);\n    }\n    return exception;\n  });\n}\n\nexport { applyAggregateErrorsToEvent };\n//# sourceMappingURL=aggregate-errors.js.map\n","const SDK_VERSION = '8.26.0';\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","import { SDK_VERSION } from './version.js';\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ = globalThis ;\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 versionedCarrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n  return versionedCarrier[name] || (versionedCarrier[name] = creator());\n}\n\nexport { GLOBAL_OBJ, getGlobalSingleton };\n//# sourceMappingURL=worldwide.js.map\n","import { isString } from './is.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction htmlTreeAsString(\n  elem,\n  options = {},\n) {\n  if (!elem) {\n    return '<unknown>';\n  }\n\n  // try/catch both:\n  // - accessing event.target (see getsentry/raven-js#838, #768)\n  // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n  // - can throw an exception in some circumstances.\n  try {\n    let currentElem = elem ;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = ' > ';\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem, keyAttrs);\n      // bail out if\n      // - nextStr is the 'html' element\n      // - the length of the string that would be created exceeds maxStringLength\n      //   (ignore this limit if we are on the first iteration)\n      if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n        break;\n      }\n\n      out.push(nextStr);\n\n      len += nextStr.length;\n      currentElem = currentElem.parentNode;\n    }\n\n    return out.reverse().join(separator);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n  const elem = el\n\n;\n\n  const out = [];\n\n  if (!elem || !elem.tagName) {\n    return '';\n  }\n\n  // @ts-expect-error WINDOW has HTMLElement\n  if (WINDOW.HTMLElement) {\n    // If using the component name annotation plugin, this value may be available on the DOM node\n    if (elem instanceof HTMLElement && elem.dataset) {\n      if (elem.dataset['sentryComponent']) {\n        return elem.dataset['sentryComponent'];\n      }\n      if (elem.dataset['sentryElement']) {\n        return elem.dataset['sentryElement'];\n      }\n    }\n  }\n\n  out.push(elem.tagName.toLowerCase());\n\n  // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n  const keyAttrPairs =\n    keyAttrs && keyAttrs.length\n      ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n      : null;\n\n  if (keyAttrPairs && keyAttrPairs.length) {\n    keyAttrPairs.forEach(keyAttrPair => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\n    if (elem.id) {\n      out.push(`#${elem.id}`);\n    }\n\n    const className = elem.className;\n    if (className && isString(className)) {\n      const classes = className.split(/\\s+/);\n      for (const c of classes) {\n        out.push(`.${c}`);\n      }\n    }\n  }\n  const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n  for (const k of allowedAttrs) {\n    const attr = elem.getAttribute(k);\n    if (attr) {\n      out.push(`[${k}=\"${attr}\"]`);\n    }\n  }\n\n  return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nfunction getLocationHref() {\n  try {\n    return WINDOW.document.location.href;\n  } catch (oO) {\n    return '';\n  }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement<Element>('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getDomElement(selector) {\n  if (WINDOW.document && WINDOW.document.querySelector) {\n    return WINDOW.document.querySelector(selector) ;\n  }\n  return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` or `data-sentry-element` attribute with `data-sentry-component` taking\n * precendence. This attribute is added at build-time by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nfunction getComponentName(elem) {\n  // @ts-expect-error WINDOW has HTMLElement\n  if (!WINDOW.HTMLElement) {\n    return null;\n  }\n\n  let currentElem = elem ;\n  const MAX_TRAVERSE_HEIGHT = 5;\n  for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n    if (!currentElem) {\n      return null;\n    }\n\n    if (currentElem instanceof HTMLElement) {\n      if (currentElem.dataset['sentryComponent']) {\n        return currentElem.dataset['sentryComponent'];\n      }\n      if (currentElem.dataset['sentryElement']) {\n        return currentElem.dataset['sentryElement'];\n      }\n    }\n\n    currentElem = currentElem.parentNode;\n  }\n\n  return null;\n}\n\nexport { getComponentName, getDomElement, getLocationHref, htmlTreeAsString };\n//# sourceMappingURL=browser.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nconst CONSOLE_LEVELS = [\n  'debug',\n  'info',\n  'warn',\n  'error',\n  'log',\n  'assert',\n  'trace',\n] ;\n\n/** This may be mutated by the console instrumentation. */\nconst originalConsoleMethods\n\n = {};\n\n/** JSDoc */\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n  if (!('console' in GLOBAL_OBJ)) {\n    return callback();\n  }\n\n  const console = GLOBAL_OBJ.console ;\n  const wrappedFuncs = {};\n\n  const wrappedLevels = Object.keys(originalConsoleMethods) ;\n\n  // Restore all wrapped console methods\n  wrappedLevels.forEach(level => {\n    const originalConsoleMethod = originalConsoleMethods[level] ;\n    wrappedFuncs[level] = console[level] ;\n    console[level] = originalConsoleMethod;\n  });\n\n  try {\n    return callback();\n  } finally {\n    // Revert restoration to wrapped state\n    wrappedLevels.forEach(level => {\n      console[level] = wrappedFuncs[level] ;\n    });\n  }\n}\n\nfunction makeLogger() {\n  let enabled = false;\n  const logger = {\n    enable: () => {\n      enabled = true;\n    },\n    disable: () => {\n      enabled = false;\n    },\n    isEnabled: () => enabled,\n  };\n\n  if (DEBUG_BUILD) {\n    CONSOLE_LEVELS.forEach(name => {\n      // 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\nconst logger = makeLogger();\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger, originalConsoleMethods };\n//# sourceMappingURL=logger.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { consoleSandbox, logger } from './logger.js';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol) {\n  return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nfunction dsnToString(dsn, withPassword = false) {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return (\n    `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n    `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n  );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nfunction dsnFromString(str) {\n  const match = DSN_REGEX.exec(str);\n\n  if (!match) {\n    // This should be logged to the console\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.error(`Invalid Sentry Dsn: ${str}`);\n    });\n    return undefined;\n  }\n\n  const [protocol, publicKey, pass = '', host = '', port = '', lastPath = ''] = match.slice(1);\n  let path = '';\n  let projectId = lastPath;\n\n  const split = projectId.split('/');\n  if (split.length > 1) {\n    path = split.slice(0, -1).join('/');\n    projectId = split.pop() ;\n  }\n\n  if (projectId) {\n    const projectMatch = projectId.match(/^\\d+/);\n    if (projectMatch) {\n      projectId = projectMatch[0];\n    }\n  }\n\n  return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol , publicKey });\n}\n\nfunction dsnFromComponents(components) {\n  return {\n    protocol: components.protocol,\n    publicKey: components.publicKey || '',\n    pass: components.pass || '',\n    host: components.host,\n    port: components.port || '',\n    path: components.path || '',\n    projectId: components.projectId,\n  };\n}\n\nfunction validateDsn(dsn) {\n  if (!DEBUG_BUILD) {\n    return true;\n  }\n\n  const { port, projectId, protocol } = dsn;\n\n  const requiredComponents = ['protocol', 'publicKey', 'host', 'projectId'];\n  const hasMissingRequiredComponent = requiredComponents.find(component => {\n    if (!dsn[component]) {\n      logger.error(`Invalid Sentry Dsn: ${component} missing`);\n      return true;\n    }\n    return false;\n  });\n\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n\n  if (!projectId.match(/^\\d+$/)) {\n    logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n\n  if (!isValidProtocol(protocol)) {\n    logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n\n  if (port && isNaN(parseInt(port, 10))) {\n    logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nfunction makeDsn(from) {\n  const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return undefined;\n  }\n  return components;\n}\n\nexport { dsnFromString, dsnToString, makeDsn };\n//# sourceMappingURL=dsn.js.map\n","/** An error emitted by Sentry SDKs and related utilities. */\nclass SentryError extends Error {\n  /** Display name of this error instance. */\n\n   constructor( message, logLevel = 'warn') {\n    super(message);this.message = message;\n    this.name = new.target.prototype.constructor.name;\n    // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n    // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n    // instances of `SentryError` fail `obj instanceof SentryError` checks.\n    Object.setPrototypeOf(this, new.target.prototype);\n    this.logLevel = logLevel;\n  }\n}\n\nexport { SentryError };\n//# sourceMappingURL=error.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { isError, isEvent, isInstanceOf, isElement, isPlainObject, isPrimitive } from './is.js';\nimport { logger } from './logger.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @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    markFunctionWrapped(wrapped, original);\n  }\n\n  source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n  try {\n    Object.defineProperty(obj, name, {\n      // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n      value: value,\n      writable: true,\n      configurable: true,\n    });\n  } catch (o_O) {\n    DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n  }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n  } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available.  See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\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(\n  value,\n)\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  const firstKey = keys[0];\n\n  if (!firstKey) {\n    return '[object has no keys]';\n  }\n\n  if (firstKey.length >= maxLength) {\n    return truncate(firstKey, maxLength);\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const serialized = keys.slice(0, includedKeys).join(', ');\n    if (serialized.length > maxLength) {\n      continue;\n    }\n    if (includedKeys === keys.length) {\n      return serialized;\n    }\n    return truncate(serialized, maxLength);\n  }\n\n  return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nfunction dropUndefinedKeys(inputValue) {\n  // This map keeps track of what already visited nodes map to.\n  // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n  // references as the input object.\n  const memoizationMap = new Map();\n\n  // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n  if (isPojo(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal ;\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\nfunction isPojo(input) {\n  if (!isPlainObject(input)) {\n    return false;\n  }\n\n  try {\n    const name = (Object.getPrototypeOf(input) ).constructor.name;\n    return !name || name === 'Object';\n  } catch (e) {\n    return true;\n  }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\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","const STACKTRACE_FRAME_LIMIT = 50;\nconst UNKNOWN_FUNCTION = '?';\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nfunction createStackParser(...parsers) {\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n  return (stack, skipFirstLines = 0, framesToPop = 0) => {\n    const frames = [];\n    const lines = stack.split('\\n');\n\n    for (let i = skipFirstLines; i < lines.length; i++) {\n      const line = lines[i] ;\n      // Ignore lines over 1kb as they are unlikely to be stack frames.\n      // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n      // input size. Huge strings can result in hangs/Denial of Service:\n      // https://github.com/getsentry/sentry-javascript/issues/2286\n      if (line.length > 1024) {\n        continue;\n      }\n\n      // https://github.com/getsentry/sentry-javascript/issues/5459\n      // Remove webpack (error: *) wrappers\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n      // https://github.com/getsentry/sentry-javascript/issues/7813\n      // Skip Error: lines\n      if (cleanedLine.match(/\\S*Error: /)) {\n        continue;\n      }\n\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine);\n\n        if (frame) {\n          frames.push(frame);\n          break;\n        }\n      }\n\n      if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n        break;\n      }\n    }\n\n    return stripSentryFramesAndReverse(frames.slice(framesToPop));\n  };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nfunction stackParserFromStackParserOptions(stackParser) {\n  if (Array.isArray(stackParser)) {\n    return createStackParser(...stackParser);\n  }\n  return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nfunction stripSentryFramesAndReverse(stack) {\n  if (!stack.length) {\n    return [];\n  }\n\n  const localStack = Array.from(stack);\n\n  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n  if (/sentryWrapped/.test(getLastStackFrame(localStack).function || '')) {\n    localStack.pop();\n  }\n\n  // Reversing in the middle of the procedure allows us to just pop the values off the stack\n  localStack.reverse();\n\n  // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n  if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n    localStack.pop();\n\n    // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n    // is produced within the hub itself, making it:\n    //\n    //   Sentry.captureException()\n    //   getCurrentHub().captureException()\n    //\n    // instead of just the top `Sentry` call itself.\n    // This forces us to possibly strip an additional frame in the exact same was as above.\n    if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n      localStack.pop();\n    }\n  }\n\n  return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n    ...frame,\n    filename: frame.filename || getLastStackFrame(localStack).filename,\n    function: frame.function || UNKNOWN_FUNCTION,\n  }));\n}\n\nfunction getLastStackFrame(arr) {\n  return arr[arr.length - 1] || {};\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn) {\n  try {\n    if (!fn || typeof fn !== 'function') {\n      return defaultFunctionName;\n    }\n    return fn.name || defaultFunctionName;\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    return defaultFunctionName;\n  }\n}\n\n/**\n * Get's stack frames from an event without needing to check for undefined properties.\n */\nfunction getFramesFromEvent(event) {\n  const exception = event.exception;\n\n  if (exception) {\n    const frames = [];\n    try {\n      // @ts-expect-error Object could be undefined\n      exception.values.forEach(value => {\n        // @ts-expect-error Value could be undefined\n        if (value.stacktrace.frames) {\n          // @ts-expect-error Value could be undefined\n          frames.push(...value.stacktrace.frames);\n        }\n      });\n      return frames;\n    } catch (_oO) {\n      return undefined;\n    }\n  }\n  return undefined;\n}\n\nexport { UNKNOWN_FUNCTION, createStackParser, getFramesFromEvent, getFunctionName, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../logger.js';\nimport { getFunctionName } from '../stacktrace.js';\n\n// We keep the handlers globally\nconst handlers = {};\nconst instrumented = {};\n\n/** Add a handler function. */\nfunction addHandler(type, handler) {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] ).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nfunction resetInstrumentationHandlers() {\n  Object.keys(handlers).forEach(key => {\n    handlers[key ] = undefined;\n  });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nfunction maybeInstrument(type, instrumentFn) {\n  if (!instrumented[type]) {\n    instrumentFn();\n    instrumented[type] = true;\n  }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nfunction triggerHandlers(type, data) {\n  const typeHandlers = type && handlers[type];\n  if (!typeHandlers) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\nexport { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers };\n//# sourceMappingURL=handlers.js.map\n","import { CONSOLE_LEVELS, originalConsoleMethods } from '../logger.js';\nimport { fill } from '../object.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addConsoleInstrumentationHandler(handler) {\n  const type = 'console';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole() {\n  if (!('console' in GLOBAL_OBJ)) {\n    return;\n  }\n\n  CONSOLE_LEVELS.forEach(function (level) {\n    if (!(level in GLOBAL_OBJ.console)) {\n      return;\n    }\n\n    fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod) {\n      originalConsoleMethods[level] = originalConsoleMethod;\n\n      return function (...args) {\n        const handlerData = { args, level };\n        triggerHandlers('console', handlerData);\n\n        const log = originalConsoleMethods[level];\n        log && log.apply(GLOBAL_OBJ.console, args);\n      };\n    });\n  });\n}\n\nexport { addConsoleInstrumentationHandler };\n//# sourceMappingURL=console.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { logger } from './logger.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsErrorEvent() {\n  try {\n    new ErrorEvent('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMError() {\n  try {\n    // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n    // 1 argument required, but only 0 present.\n    // @ts-expect-error It really needs 1 argument, not 0.\n    new DOMError('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMException() {\n  try {\n    new DOMException('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsFetch() {\n  if (!('fetch' in WINDOW)) {\n    return false;\n  }\n\n  try {\n    new Headers();\n    new Request('http://www.example.com');\n    new Response();\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * isNative checks if the given function is a native implementation\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isNativeFunction(func) {\n  return func && /^function\\s+\\w+\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nfunction supportsNativeFetch() {\n  if (typeof EdgeRuntime === 'string') {\n    return true;\n  }\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  // Fast path to avoid DOM I/O\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  if (isNativeFunction(WINDOW.fetch)) {\n    return true;\n  }\n\n  // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n  // so create a \"pure\" iframe to see if that has native fetch\n  let result = false;\n  const doc = WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (doc && typeof (doc.createElement ) === 'function') {\n    try {\n      const sandbox = doc.createElement('iframe');\n      sandbox.hidden = true;\n      doc.head.appendChild(sandbox);\n      if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        result = isNativeFunction(sandbox.contentWindow.fetch);\n      }\n      doc.head.removeChild(sandbox);\n    } catch (err) {\n      DEBUG_BUILD &&\n        logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReportingObserver() {\n  return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReferrerPolicy() {\n  // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n  // (see https://caniuse.com/#feat=referrer-policy),\n  // it doesn't. And it throws an exception instead of ignoring this parameter...\n  // REF: https://github.com/getsentry/raven-js/issues/1233\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  try {\n    new Request('_', {\n      referrerPolicy: 'origin' ,\n    });\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nexport { isNativeFunction, supportsDOMError, supportsDOMException, supportsErrorEvent, supportsFetch, supportsNativeFetch, supportsReferrerPolicy, supportsReportingObserver };\n//# sourceMappingURL=supports.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nfunction dateTimestampInSeconds() {\n  return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc() {\n  const { performance } = GLOBAL_OBJ ;\n  if (!performance || !performance.now) {\n    return dateTimestampInSeconds;\n  }\n\n  // Some browser and environments don't have a timeOrigin, so we fallback to\n  // using Date.now() to compute the starting time.\n  const approxStartingTimeOrigin = Date.now() - performance.now();\n  const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n  // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n  // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n  //\n  // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n  // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n  // correct for this.\n  // See: https://github.com/getsentry/sentry-javascript/issues/2590\n  // See: https://github.com/mdn/content/issues/4713\n  // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n  return () => {\n    return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n  };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nconst timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * 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 } = GLOBAL_OBJ ;\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 };\n//# sourceMappingURL=time.js.map\n","import { isError } from '../is.js';\nimport { fill, addNonEnumerableProperty } from '../object.js';\nimport { supportsNativeFetch } from '../supports.js';\nimport { timestampInSeconds } from '../time.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addFetchInstrumentationHandler(\n  handler,\n  skipNativeFetchCheck,\n) {\n  const type = 'fetch';\n  addHandler(type, handler);\n  maybeInstrument(type, () => instrumentFetch(undefined, skipNativeFetchCheck));\n}\n\n/**\n * Add an instrumentation handler for long-lived fetch requests, like consuming server-sent events (SSE) via fetch.\n * The handler will resolve the request body and emit the actual `endTimestamp`, so that the\n * span can be updated accordingly.\n *\n * Only used internally\n * @hidden\n */\nfunction addFetchEndInstrumentationHandler(handler) {\n  const type = 'fetch-body-resolved';\n  addHandler(type, handler);\n  maybeInstrument(type, () => instrumentFetch(streamHandler));\n}\n\nfunction instrumentFetch(onFetchResolved, skipNativeFetchCheck = false) {\n  if (skipNativeFetchCheck && !supportsNativeFetch()) {\n    return;\n  }\n\n  fill(GLOBAL_OBJ, 'fetch', function (originalFetch) {\n    return function (...args) {\n      const { method, url } = parseFetchArgs(args);\n      const handlerData = {\n        args,\n        fetchData: {\n          method,\n          url,\n        },\n        startTimestamp: timestampInSeconds() * 1000,\n      };\n\n      // if there is no callback, fetch is instrumented directly\n      if (!onFetchResolved) {\n        triggerHandlers('fetch', {\n          ...handlerData,\n        });\n      }\n\n      // We capture the stack right here and not in the Promise error callback because Safari (and probably other\n      // browsers too) will wipe the stack trace up to this point, only leaving us with this file which is useless.\n\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n      //       it means the error, that was caused by your fetch call did not\n      //       have a stack trace, so the SDK backfilled the stack trace so\n      //       you can see which fetch call failed.\n      const virtualStackTrace = new Error().stack;\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      return originalFetch.apply(GLOBAL_OBJ, args).then(\n        async (response) => {\n          if (onFetchResolved) {\n            onFetchResolved(response);\n          } else {\n            triggerHandlers('fetch', {\n              ...handlerData,\n              endTimestamp: timestampInSeconds() * 1000,\n              response,\n            });\n          }\n\n          return response;\n        },\n        (error) => {\n          triggerHandlers('fetch', {\n            ...handlerData,\n            endTimestamp: timestampInSeconds() * 1000,\n            error,\n          });\n\n          if (isError(error) && error.stack === undefined) {\n            // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n            //       it means the error, that was caused by your fetch call did not\n            //       have a stack trace, so the SDK backfilled the stack trace so\n            //       you can see which fetch call failed.\n            error.stack = virtualStackTrace;\n            addNonEnumerableProperty(error, 'framesToPop', 1);\n          }\n\n          // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n          //       it means the sentry.javascript SDK caught an error invoking your application code.\n          //       This is expected behavior and NOT indicative of a bug with sentry.javascript.\n          throw error;\n        },\n      );\n    };\n  });\n}\n\nasync function resolveResponse(res, onFinishedResolving) {\n  if (res && res.body && res.body.getReader) {\n    const responseReader = res.body.getReader();\n\n    // eslint-disable-next-line no-inner-declarations\n    async function consumeChunks({ done }) {\n      if (!done) {\n        try {\n          // abort reading if read op takes more than 5s\n          const result = await Promise.race([\n            responseReader.read(),\n            new Promise(res => {\n              setTimeout(() => {\n                res({ done: true });\n              }, 5000);\n            }),\n          ]);\n          await consumeChunks(result);\n        } catch (error) {\n          // handle error if needed\n        }\n      } else {\n        return Promise.resolve();\n      }\n    }\n\n    return responseReader\n      .read()\n      .then(consumeChunks)\n      .then(onFinishedResolving)\n      .catch(() => undefined);\n  }\n}\n\nasync function streamHandler(response) {\n  // clone response for awaiting stream\n  let clonedResponseForResolving;\n  try {\n    clonedResponseForResolving = response.clone();\n  } catch (e) {\n    return;\n  }\n\n  await resolveResponse(clonedResponseForResolving, () => {\n    triggerHandlers('fetch-body-resolved', {\n      endTimestamp: timestampInSeconds() * 1000,\n      response,\n    });\n  });\n}\n\nfunction hasProp(obj, prop) {\n  return !!obj && typeof obj === 'object' && !!(obj )[prop];\n}\n\nfunction getUrlFromResource(resource) {\n  if (typeof resource === 'string') {\n    return resource;\n  }\n\n  if (!resource) {\n    return '';\n  }\n\n  if (hasProp(resource, 'url')) {\n    return resource.url;\n  }\n\n  if (resource.toString) {\n    return resource.toString();\n  }\n\n  return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nfunction parseFetchArgs(fetchArgs) {\n  if (fetchArgs.length === 0) {\n    return { method: 'GET', url: '' };\n  }\n\n  if (fetchArgs.length === 2) {\n    const [url, options] = fetchArgs ;\n\n    return {\n      url: getUrlFromResource(url),\n      method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n    };\n  }\n\n  const arg = fetchArgs[0];\n  return {\n    url: getUrlFromResource(arg ),\n    method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n  };\n}\n\nexport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, parseFetchArgs };\n//# sourceMappingURL=fetch.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnErrorHandler = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalErrorInstrumentationHandler(handler) {\n  const type = 'error';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError() {\n  _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n  GLOBAL_OBJ.onerror = function (\n    msg,\n    url,\n    line,\n    column,\n    error,\n  ) {\n    const handlerData = {\n      column,\n      error,\n      line,\n      msg,\n      url,\n    };\n    triggerHandlers('error', handlerData);\n\n    if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnErrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  };\n\n  GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalErrorInstrumentationHandler };\n//# sourceMappingURL=globalError.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnUnhandledRejectionHandler = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalUnhandledRejectionInstrumentationHandler(\n  handler,\n) {\n  const type = 'unhandledrejection';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection() {\n  _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n  GLOBAL_OBJ.onunhandledrejection = function (e) {\n    const handlerData = e;\n    triggerHandlers('unhandledrejection', handlerData);\n\n    if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n    }\n\n    return true;\n  };\n\n  GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalUnhandledRejectionInstrumentationHandler };\n//# sourceMappingURL=globalUnhandledRejection.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-expect-error \"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/**\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/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 { isNodeEnv } from './node.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * Returns true if we are in the browser.\n */\nfunction isBrowser() {\n  // eslint-disable-next-line no-restricted-globals\n  return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer() {\n  return (\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n    (GLOBAL_OBJ ).process !== undefined && ((GLOBAL_OBJ ).process ).type === 'renderer'\n  );\n}\n\nexport { isBrowser };\n//# sourceMappingURL=isBrowser.js.map\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Helper to decycle json objects\n */\nfunction memoBuilder() {\n  const hasWeakSet = typeof WeakSet === 'function';\n  const inner = hasWeakSet ? new WeakSet() : [];\n  function memoize(obj) {\n    if (hasWeakSet) {\n      if (inner.has(obj)) {\n        return true;\n      }\n      inner.add(obj);\n      return false;\n    }\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let i = 0; i < inner.length; i++) {\n      const value = inner[i];\n      if (value === obj) {\n        return true;\n      }\n    }\n    inner.push(obj);\n    return false;\n  }\n\n  function unmemoize(obj) {\n    if (hasWeakSet) {\n      inner.delete(obj);\n    } else {\n      for (let i = 0; i < inner.length; i++) {\n        if (inner[i] === obj) {\n          inner.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }\n  return [memoize, unmemoize];\n}\n\nexport { memoBuilder };\n//# sourceMappingURL=memo.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  let getRandomByte = () => Math.random() * 16;\n  try {\n    if (crypto && crypto.randomUUID) {\n      return crypto.randomUUID().replace(/-/g, '');\n    }\n    if (crypto && crypto.getRandomValues) {\n      getRandomByte = () => {\n        // crypto.getRandomValues might return undefined instead of the typed array\n        // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n        // However, `typedArray` is still filled in-place.\n        // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n        const typedArray = new Uint8Array(1);\n        crypto.getRandomValues(typedArray);\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        return typedArray[0];\n      };\n    }\n  } catch (_) {\n    // some runtimes can crash invoking crypto\n    // https://github.com/getsentry/sentry-javascript/issues/8935\n  }\n\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n  // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n  return (([1e7] ) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n    // eslint-disable-next-line no-bitwise\n    ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n  );\n}\n\nfunction getFirstException(event) {\n  return event.exception && 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\nfunction _parseInt(input) {\n  return parseInt(input || '', 10);\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n  const match = input.match(SEMVER_REGEXP) || [];\n  const major = _parseInt(match[1]);\n  const minor = _parseInt(match[2]);\n  const patch = _parseInt(match[3]);\n  return {\n    buildmetadata: match[5],\n    major: isNaN(major) ? undefined : major,\n    minor: isNaN(minor) ? undefined : minor,\n    patch: isNaN(patch) ? undefined : patch,\n    prerelease: match[4],\n  };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n  if (frame.lineno === undefined) {\n    return;\n  }\n\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n  frame.pre_context = lines\n    .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n    .map((line) => snipLine(line, 0));\n\n  // We guard here to ensure this is not larger than the existing number of lines\n  const lineIndex = Math.min(maxLines - 1, sourceLine);\n\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  frame.context_line = snipLine(lines[lineIndex], frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n  // 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","import { isVueViewModel, isSyntheticEvent } from './is.js';\nimport { memoBuilder } from './memo.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction normalize(input, depth = 100, maxProperties = +Infinity) {\n  try {\n    // since we're at the outermost level, we don't provide a key\n    return visit('', input, depth, maxProperties);\n  } catch (err) {\n    return { ERROR: `**non-serializable** (${err})` };\n  }\n}\n\n/** JSDoc */\nfunction normalizeToSize(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  object,\n  // Default Node.js REPL depth\n  depth = 3,\n  // 100kB, as 200kB is max payload size, so half sounds reasonable\n  maxSize = 100 * 1024,\n) {\n  const normalized = normalize(object, depth);\n\n  if (jsonSize(normalized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return normalized ;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n  key,\n  value,\n  depth = +Infinity,\n  maxProperties = +Infinity,\n  memo = memoBuilder(),\n) {\n  const [memoize, unmemoize] = memo;\n\n  // Get the simple cases out of the way first\n  if (\n    value == null || // this matches null and undefined -> eqeq not eqeqeq\n    (['number', 'boolean', 'string'].includes(typeof value) && !Number.isNaN(value))\n  ) {\n    return value ;\n  }\n\n  const stringified = stringifyValue(key, value);\n\n  // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n  // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n  if (!stringified.startsWith('[object ')) {\n    return stringified;\n  }\n\n  // From here on, we can assert that `value` is either an object or an array.\n\n  // Do not normalize objects that we know have already been normalized. As a general rule, the\n  // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n  // have already been normalized.\n  if ((value )['__sentry_skip_normalization__']) {\n    return value ;\n  }\n\n  // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n  // We keep a certain amount of depth.\n  // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n  const remainingDepth =\n    typeof (value )['__sentry_override_normalization_depth__'] === 'number'\n      ? ((value )['__sentry_override_normalization_depth__'] )\n      : depth;\n\n  // We're also done if we've reached the max depth\n  if (remainingDepth === 0) {\n    // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n    return stringified.replace('object ', '');\n  }\n\n  // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n  if (memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // If the value has a `toJSON` method, we call it to extract more information\n  const valueWithToJSON = value ;\n  if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n    try {\n      const jsonValue = valueWithToJSON.toJSON();\n      // We need to normalize the return value of `.toJSON()` in case it has circular references\n      return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n    } catch (err) {\n      // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n    }\n  }\n\n  // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n  // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n  // property/entry, and keep track of the number of items we add to it.\n  const normalized = (Array.isArray(value) ? [] : {}) ;\n  let numAdded = 0;\n\n  // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n  // properties are non-enumerable and otherwise would get missed.\n  const visitable = convertToPlainObject(value );\n\n  for (const visitKey in visitable) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n      continue;\n    }\n\n    if (numAdded >= maxProperties) {\n      normalized[visitKey] = '[MaxProperties ~]';\n      break;\n    }\n\n    // Recursively visit all the child nodes\n    const visitValue = visitable[visitKey];\n    normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n    numAdded++;\n  }\n\n  // Once we've visited all the branches, remove the parent from memo storage\n  unmemoize(value);\n\n  // Return accumulated values\n  return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n  key,\n  // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n  // our internal use, it'll do\n  value,\n) {\n  try {\n    if (key === 'domain' && value && typeof value === 'object' && (value )._events) {\n      return '[Domain]';\n    }\n\n    if (key === 'domainEmitter') {\n      return '[DomainEmitter]';\n    }\n\n    // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n    // which won't throw if they are not present.\n\n    if (typeof global !== 'undefined' && value === global) {\n      return '[Global]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window !== 'undefined' && value === window) {\n      return '[Window]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof document !== 'undefined' && value === document) {\n      return '[Document]';\n    }\n\n    if (isVueViewModel(value)) {\n      return '[VueViewModel]';\n    }\n\n    // React's SyntheticEvent thingy\n    if (isSyntheticEvent(value)) {\n      return '[SyntheticEvent]';\n    }\n\n    if (typeof value === 'number' && value !== value) {\n      return '[NaN]';\n    }\n\n    if (typeof value === 'function') {\n      return `[Function: ${getFunctionName(value)}]`;\n    }\n\n    if (typeof value === 'symbol') {\n      return `[${String(value)}]`;\n    }\n\n    // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n    if (typeof value === 'bigint') {\n      return `[BigInt: ${String(value)}]`;\n    }\n\n    // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n    // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n    // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n    // we can make sure that only plain objects come out that way.\n    const objName = getConstructorName(value);\n\n    // Handle HTML Elements\n    if (/^HTML(\\w*)Element$/.test(objName)) {\n      return `[HTMLElement: ${objName}]`;\n    }\n\n    return `[object ${objName}]`;\n  } catch (err) {\n    return `**non-serializable** (${err})`;\n  }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value) {\n  const prototype = Object.getPrototypeOf(value);\n\n  return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n  // eslint-disable-next-line no-bitwise\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value) {\n  return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nfunction normalizeUrlToBase(url, basePath) {\n  const escapedBase = basePath\n    // Backslash to forward\n    .replace(/\\\\/g, '/')\n    // Escape RegExp special characters\n    .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n  let newUrl = url;\n  try {\n    newUrl = decodeURI(url);\n  } catch (_Oo) {\n    // Sometime this breaks\n  }\n  return (\n    newUrl\n      .replace(/\\\\/g, '/')\n      .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n      // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n      .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n  );\n}\n\nexport { normalize, normalizeToSize, normalizeUrlToBase };\n//# sourceMappingURL=normalize.js.map\n","import { isThenable } from './is.js';\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** SyncPromise internal states */\nvar States; (function (States) {\n  /** Pending */\n  const PENDING = 0; States[States[\"PENDING\"] = PENDING] = \"PENDING\";\n  /** Resolved / OK */\n  const RESOLVED = 1; States[States[\"RESOLVED\"] = RESOLVED] = \"RESOLVED\";\n  /** Rejected / Error */\n  const REJECTED = 2; States[States[\"REJECTED\"] = REJECTED] = \"REJECTED\";\n})(States || (States = {}));\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nfunction resolvedSyncPromise(value) {\n  return new SyncPromise(resolve => {\n    resolve(value);\n  });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nfunction rejectedSyncPromise(reason) {\n  return new SyncPromise((_, reject) => {\n    reject(reason);\n  });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise {\n\n   constructor(\n    executor,\n  ) {SyncPromise.prototype.__init.call(this);SyncPromise.prototype.__init2.call(this);SyncPromise.prototype.__init3.call(this);SyncPromise.prototype.__init4.call(this);\n    this._state = States.PENDING;\n    this._handlers = [];\n\n    try {\n      executor(this._resolve, this._reject);\n    } catch (e) {\n      this._reject(e);\n    }\n  }\n\n  /** JSDoc */\n   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    __init() {this._resolve = (value) => {\n    this._setResult(States.RESOLVED, value);\n  };}\n\n  /** JSDoc */\n    __init2() {this._reject = (reason) => {\n    this._setResult(States.REJECTED, reason);\n  };}\n\n  /** JSDoc */\n    __init3() {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    __init4() {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        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 { SentryError } from './error.js';\nimport { rejectedSyncPromise, SyncPromise, resolvedSyncPromise } from './syncpromise.js';\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nfunction makePromiseBuffer(limit) {\n  const buffer = [];\n\n  function isReady() {\n    return limit === undefined || buffer.length < limit;\n  }\n\n  /**\n   * Remove a promise from the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns Removed promise.\n   */\n  function remove(task) {\n    return buffer.splice(buffer.indexOf(task), 1)[0] || Promise.resolve(undefined);\n  }\n\n  /**\n   * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n   *\n   * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n   *        PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n   *        functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n   *        requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n   *        limit check.\n   * @returns The original promise.\n   */\n  function add(taskProducer) {\n    if (!isReady()) {\n      return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n    }\n\n    // start the task and add its promise to the queue\n    const task = taskProducer();\n    if (buffer.indexOf(task) === -1) {\n      buffer.push(task);\n    }\n    void task\n      .then(() => remove(task))\n      // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n      // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n      // have promises, so TS has to polyfill when down-compiling.)\n      .then(null, () =>\n        remove(task).then(null, () => {\n          // We have to add another catch here because `remove()` starts a new promise chain.\n        }),\n      );\n    return task;\n  }\n\n  /**\n   * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n   * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n   * `false` otherwise\n   */\n  function drain(timeout) {\n    return new SyncPromise((resolve, reject) => {\n      let counter = buffer.length;\n\n      if (!counter) {\n        return resolve(true);\n      }\n\n      // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n      const capturedSetTimeout = setTimeout(() => {\n        if (timeout && timeout > 0) {\n          resolve(false);\n        }\n      }, timeout);\n\n      // if all promises resolve in time, cancel the timer and resolve to `true`\n      buffer.forEach(item => {\n        void resolvedSyncPromise(item).then(() => {\n          if (!--counter) {\n            clearTimeout(capturedSetTimeout);\n            resolve(true);\n          }\n        }, reject);\n      });\n    });\n  }\n\n  return {\n    $: buffer,\n    add,\n    drain,\n  };\n}\n\nexport { makePromiseBuffer };\n//# sourceMappingURL=promisebuffer.js.map\n","/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nfunction parseUrl(url) {\n  if (!url) {\n    return {};\n  }\n\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  if (!match) {\n    return {};\n  }\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  const query = match[6] || '';\n  const fragment = match[8] || '';\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    search: query,\n    hash: fragment,\n    relative: match[5] + query + fragment, // everything minus origin\n  };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nfunction stripUrlQueryAndFragment(urlPath) {\n  return (urlPath.split(/[?#]/, 1) )[0];\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n */\nfunction getNumberOfUrlSegments(url) {\n  // split at '/' or at '\\/' to split regex urls correctly\n  return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span name\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nfunction getSanitizedUrlString(url) {\n  const { protocol, host, path } = url;\n\n  const filteredHost =\n    (host &&\n      host\n        // Always filter out authority\n        .replace(/^.*@/, '[filtered]:[filtered]@')\n        // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n        // TODO: Use new URL global if it exists\n        .replace(/(:80)$/, '')\n        .replace(/(:443)$/, '')) ||\n    '';\n\n  return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n\nexport { getNumberOfUrlSegments, getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment };\n//# sourceMappingURL=url.js.map\n","// Note: Ideally the `SeverityLevel` type would be derived from `validSeverityLevels`, but that would mean either\n//\n// a) moving `validSeverityLevels` to `@sentry/types`,\n// b) moving the`SeverityLevel` type here, or\n// c) importing `validSeverityLevels` from here into `@sentry/types`.\n//\n// Option A would make `@sentry/types` a runtime dependency of `@sentry/utils` (not good), and options B and C would\n// create a circular dependency between `@sentry/types` and `@sentry/utils` (also not good). So a TODO accompanying the\n// type, reminding anyone who changes it to change this list also, will have to do.\n\nconst validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nfunction severityLevelFromString(level) {\n  return (level === 'warn' ? 'warning' : validSeverityLevels.includes(level) ? level : 'log') ;\n}\n\nexport { severityLevelFromString, validSeverityLevels };\n//# sourceMappingURL=severity.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { isString } from './is.js';\nimport { logger } from './logger.js';\n\nconst BAGGAGE_HEADER_NAME = 'baggage';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nconst MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nfunction baggageHeaderToDynamicSamplingContext(\n  // Very liberal definition of what any incoming header might look like\n  baggageHeader,\n) {\n  const baggageObject = parseBaggageHeader(baggageHeader);\n\n  if (!baggageObject) {\n    return undefined;\n  }\n\n  // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n  const dynamicSamplingContext = Object.entries(baggageObject).reduce((acc, [key, value]) => {\n    if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n      const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n      acc[nonPrefixedKey] = value;\n    }\n    return acc;\n  }, {});\n\n  // Only return a dynamic sampling context object if there are keys in it.\n  // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n  if (Object.keys(dynamicSamplingContext).length > 0) {\n    return dynamicSamplingContext ;\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nfunction dynamicSamplingContextToSentryBaggageHeader(\n  // this also takes undefined for convenience and bundle size in other places\n  dynamicSamplingContext,\n) {\n  if (!dynamicSamplingContext) {\n    return undefined;\n  }\n\n  // Prefix all DSC keys with \"sentry-\" and put them into a new object\n  const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce(\n    (acc, [dscKey, dscValue]) => {\n      if (dscValue) {\n        acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n      }\n      return acc;\n    },\n    {},\n  );\n\n  return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Take a baggage header and parse it into an object.\n */\nfunction parseBaggageHeader(\n  baggageHeader,\n) {\n  if (!baggageHeader || (!isString(baggageHeader) && !Array.isArray(baggageHeader))) {\n    return undefined;\n  }\n\n  if (Array.isArray(baggageHeader)) {\n    // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n    return baggageHeader.reduce((acc, curr) => {\n      const currBaggageObject = baggageHeaderToObject(curr);\n      Object.entries(currBaggageObject).forEach(([key, value]) => {\n        acc[key] = value;\n      });\n      return acc;\n    }, {});\n  }\n\n  return baggageHeaderToObject(baggageHeader);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader) {\n  return baggageHeader\n    .split(',')\n    .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n    .reduce((acc, [key, value]) => {\n      if (key && value) {\n        acc[key] = value;\n      }\n      return acc;\n    }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object) {\n  if (Object.keys(object).length === 0) {\n    // An empty baggage header is not spec compliant: We return undefined.\n    return undefined;\n  }\n\n  return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n    const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n    const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n    if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n      DEBUG_BUILD &&\n        logger.warn(\n          `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n        );\n      return baggageHeader;\n    } else {\n      return newBaggageHeader;\n    }\n  }, '');\n}\n\nexport { BAGGAGE_HEADER_NAME, MAX_BAGGAGE_STRING_LENGTH, SENTRY_BAGGAGE_KEY_PREFIX, SENTRY_BAGGAGE_KEY_PREFIX_REGEX, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, parseBaggageHeader };\n//# sourceMappingURL=baggage.js.map\n","import { baggageHeaderToDynamicSamplingContext } from './baggage.js';\nimport { uuid4 } from './misc.js';\n\n// eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp is used for readability here\nconst TRACEPARENT_REGEXP = new RegExp(\n  '^[ \\\\t]*' + // whitespace\n    '([0-9a-f]{32})?' + // trace_id\n    '-?([0-9a-f]{16})?' + // span_id\n    '-?([01])?' + // sampled\n    '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nfunction extractTraceparentData(traceparent) {\n  if (!traceparent) {\n    return undefined;\n  }\n\n  const matches = traceparent.match(TRACEPARENT_REGEXP);\n  if (!matches) {\n    return undefined;\n  }\n\n  let parentSampled;\n  if (matches[3] === '1') {\n    parentSampled = true;\n  } else if (matches[3] === '0') {\n    parentSampled = false;\n  }\n\n  return {\n    traceId: matches[1],\n    parentSampled,\n    parentSpanId: matches[2],\n  };\n}\n\n/**\n * Create a propagation context from incoming headers or\n * creates a minimal new one if the headers are undefined.\n */\nfunction propagationContextFromHeaders(\n  sentryTrace,\n  baggage,\n) {\n  const traceparentData = extractTraceparentData(sentryTrace);\n  const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n  const { traceId, parentSpanId, parentSampled } = traceparentData || {};\n\n  if (!traceparentData) {\n    return {\n      traceId: traceId || uuid4(),\n      spanId: uuid4().substring(16),\n    };\n  } else {\n    return {\n      traceId: traceId || uuid4(),\n      parentSpanId: parentSpanId || uuid4().substring(16),\n      spanId: uuid4().substring(16),\n      sampled: parentSampled,\n      dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n    };\n  }\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nfunction generateSentryTraceHeader(\n  traceId = uuid4(),\n  spanId = uuid4().substring(16),\n  sampled,\n) {\n  let sampledString = '';\n  if (sampled !== undefined) {\n    sampledString = sampled ? '-1' : '-0';\n  }\n  return `${traceId}-${spanId}${sampledString}`;\n}\n\nexport { TRACEPARENT_REGEXP, extractTraceparentData, generateSentryTraceHeader, propagationContextFromHeaders };\n//# sourceMappingURL=tracing.js.map\n","import { dsnToString } from './dsn.js';\nimport { normalize } from './normalize.js';\nimport { dropUndefinedKeys } from './object.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction createEnvelope(headers, items = []) {\n  return [headers, items] ;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction addItemToEnvelope(envelope, newItem) {\n  const [headers, items] = envelope;\n  return [headers, [...items, newItem]] ;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nfunction forEachEnvelopeItem(\n  envelope,\n  callback,\n) {\n  const envelopeItems = envelope[1];\n\n  for (const envelopeItem of envelopeItems) {\n    const envelopeItemType = envelopeItem[0].type;\n    const result = callback(envelopeItem, envelopeItemType);\n\n    if (result) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nfunction envelopeContainsItemType(envelope, types) {\n  return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8 array.\n */\nfunction encodeUTF8(input) {\n  return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.encodePolyfill\n    ? GLOBAL_OBJ.__SENTRY__.encodePolyfill(input)\n    : new TextEncoder().encode(input);\n}\n\n/**\n * Decode a UTF8 array to string.\n */\nfunction decodeUTF8(input) {\n  return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.decodePolyfill\n    ? GLOBAL_OBJ.__SENTRY__.decodePolyfill(input)\n    : new TextDecoder().decode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nfunction serializeEnvelope(envelope) {\n  const [envHeaders, items] = envelope;\n\n  // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n  let parts = JSON.stringify(envHeaders);\n\n  function append(next) {\n    if (typeof parts === 'string') {\n      parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts), next];\n    } else {\n      parts.push(typeof next === 'string' ? encodeUTF8(next) : next);\n    }\n  }\n\n  for (const item of items) {\n    const [itemHeaders, payload] = item;\n\n    append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n    if (typeof payload === 'string' || payload instanceof Uint8Array) {\n      append(payload);\n    } else {\n      let stringifiedPayload;\n      try {\n        stringifiedPayload = JSON.stringify(payload);\n      } catch (e) {\n        // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.strinify()` still\n        // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n        // performance impact but in this case a performance hit is better than throwing.\n        stringifiedPayload = JSON.stringify(normalize(payload));\n      }\n      append(stringifiedPayload);\n    }\n  }\n\n  return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers) {\n  const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n  const merged = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const buffer of buffers) {\n    merged.set(buffer, offset);\n    offset += buffer.length;\n  }\n\n  return merged;\n}\n\n/**\n * Parses an envelope\n */\nfunction parseEnvelope(env) {\n  let buffer = typeof env === 'string' ? encodeUTF8(env) : env;\n\n  function readBinary(length) {\n    const bin = buffer.subarray(0, length);\n    // Replace the buffer with the remaining data excluding trailing newline\n    buffer = buffer.subarray(length + 1);\n    return bin;\n  }\n\n  function readJson() {\n    let i = buffer.indexOf(0xa);\n    // If we couldn't find a newline, we must have found the end of the buffer\n    if (i < 0) {\n      i = buffer.length;\n    }\n\n    return JSON.parse(decodeUTF8(readBinary(i))) ;\n  }\n\n  const envelopeHeader = readJson();\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const items = [];\n\n  while (buffer.length) {\n    const itemHeader = readJson();\n    const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n    items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n  }\n\n  return [envelopeHeader, items];\n}\n\n/**\n * Creates envelope item for a single span\n */\nfunction createSpanEnvelopeItem(spanJson) {\n  const spanHeaders = {\n    type: 'span',\n  };\n\n  return [spanHeaders, spanJson];\n}\n\n/**\n * Creates attachment envelope items\n */\nfunction createAttachmentEnvelopeItem(attachment) {\n  const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data) : attachment.data;\n\n  return [\n    dropUndefinedKeys({\n      type: 'attachment',\n      length: buffer.length,\n      filename: attachment.filename,\n      content_type: attachment.contentType,\n      attachment_type: attachment.attachmentType,\n    }),\n    buffer,\n  ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP = {\n  session: 'session',\n  sessions: 'session',\n  attachment: 'attachment',\n  transaction: 'transaction',\n  event: 'error',\n  client_report: 'internal',\n  user_report: 'default',\n  profile: 'profile',\n  profile_chunk: 'profile',\n  replay_event: 'replay',\n  replay_recording: 'replay',\n  check_in: 'monitor',\n  feedback: 'feedback',\n  span: 'span',\n  statsd: 'metric_bucket',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nfunction envelopeItemTypeToDataCategory(type) {\n  return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nfunction getSdkMetadataForEnvelopeHeader(metadataOrEvent) {\n  if (!metadataOrEvent || !metadataOrEvent.sdk) {\n    return;\n  }\n  const { name, version } = metadataOrEvent.sdk;\n  return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nfunction createEventEnvelopeHeaders(\n  event,\n  sdkInfo,\n  tunnel,\n  dsn,\n) {\n  const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;\n  return {\n    event_id: event.event_id ,\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n    ...(dynamicSamplingContext && {\n      trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n    }),\n  };\n}\n\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, createEventEnvelopeHeaders, createSpanEnvelopeItem, envelopeContainsItemType, envelopeItemTypeToDataCategory, forEachEnvelopeItem, getSdkMetadataForEnvelopeHeader, parseEnvelope, serializeEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { createEnvelope } from './envelope.js';\nimport { dateTimestampInSeconds } from './time.js';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nfunction createClientReportEnvelope(\n  discarded_events,\n  dsn,\n  timestamp,\n) {\n  const clientReportItem = [\n    { type: 'client_report' },\n    {\n      timestamp: timestamp || dateTimestampInSeconds(),\n      discarded_events,\n    },\n  ];\n  return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\n\nconst DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nfunction parseRetryAfterHeader(header, now = Date.now()) {\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1000;\n  }\n\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n\n  return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nfunction disabledUntil(limits, dataCategory) {\n  return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nfunction isRateLimited(limits, dataCategory, now = Date.now()) {\n  return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nfunction updateRateLimits(\n  limits,\n  { statusCode, headers },\n  now = Date.now(),\n) {\n  const updatedRateLimits = {\n    ...limits,\n  };\n\n  // \"The name is case-insensitive.\"\n  // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n  const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n  const retryAfterHeader = headers && headers['retry-after'];\n\n  if (rateLimitHeader) {\n    /**\n     * rate limit headers are of the form\n     *     <header>,<header>,..\n     * where each <header> is of the form\n     *     <retry_after>: <categories>: <scope>: <reason_code>: <namespaces>\n     * where\n     *     <retry_after> is a delay in seconds\n     *     <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n     *         <category>;<category>;...\n     *     <scope> is what's being limited (org, project, or key) - ignored by SDK\n     *     <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n     *     <namespaces> Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n     *         Only present if rate limit applies to the metric_bucket data category.\n     */\n    for (const limit of rateLimitHeader.trim().split(',')) {\n      const [retryAfter, categories, , , namespaces] = limit.split(':', 5) ;\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(';')) {\n          if (category === 'metric_bucket') {\n            // namespaces will be present when category === 'metric_bucket'\n            if (!namespaces || namespaces.split(';').includes('custom')) {\n              updatedRateLimits[category] = now + delay;\n            }\n          } else {\n            updatedRateLimits[category] = now + delay;\n          }\n        }\n      }\n    }\n  } else if (retryAfterHeader) {\n    updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n  } else if (statusCode === 429) {\n    updatedRateLimits.all = now + 60 * 1000;\n  }\n\n  return updatedRateLimits;\n}\n\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits };\n//# sourceMappingURL=ratelimit.js.map\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/**\n * Polyfill for the nullish coalescing operator (`??`).\n *\n * Note that the RHS is wrapped in a function so that if it's a computed value, that evaluation won't happen unless the\n * LHS evaluates to a nullish value, to mimic the operator's short-circuiting behavior.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n *\n * @param lhs The value of the expression to the left of the `??`\n * @param rhsFn A function returning the value of the expression to the right of the `??`\n * @returns The LHS value, unless it's `null` or `undefined`, in which case, the RHS value\n */\nfunction _nullishCoalesce(lhs, rhsFn) {\n  // by checking for loose equality to `null`, we catch both `null` and `undefined`\n  return lhs != null ? lhs : rhsFn();\n}\n\n// Sucrase version:\n// function _nullishCoalesce(lhs, rhsFn) {\n//   if (lhs != null) {\n//     return lhs;\n//   } else {\n//     return rhsFn();\n//   }\n// }\n\nexport { _nullishCoalesce };\n//# sourceMappingURL=_nullishCoalesce.js.map\n","/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n * See https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The value of the expression\n */\nfunction _optionalChain(ops) {\n  let lastAccessLHS = undefined;\n  let value = ops[0];\n  let i = 1;\n  while (i < ops.length) {\n    const op = ops[i] ;\n    const fn = ops[i + 1] ;\n    i += 2;\n    // by checking for loose equality to `null`, we catch both `null` and `undefined`\n    if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n      // really we're meaning to return `undefined` as an actual value here, but it saves bytes not to write it\n      return;\n    }\n    if (op === 'access' || op === 'optionalAccess') {\n      lastAccessLHS = value;\n      value = fn(value);\n    } else if (op === 'call' || op === 'optionalCall') {\n      value = fn((...args) => (value ).call(lastAccessLHS, ...args));\n      lastAccessLHS = undefined;\n    }\n  }\n  return value;\n}\n\n// Sucrase version\n// function _optionalChain(ops) {\n//   let lastAccessLHS = undefined;\n//   let value = ops[0];\n//   let i = 1;\n//   while (i < ops.length) {\n//     const op = ops[i];\n//     const fn = ops[i + 1];\n//     i += 2;\n//     if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n//       return undefined;\n//     }\n//     if (op === 'access' || op === 'optionalAccess') {\n//       lastAccessLHS = value;\n//       value = fn(value);\n//     } else if (op === 'call' || op === 'optionalCall') {\n//       value = fn((...args) => value.call(lastAccessLHS, ...args));\n//       lastAccessLHS = undefined;\n//     }\n//   }\n//   return value;\n// }\n\nexport { _optionalChain };\n//# sourceMappingURL=_optionalChain.js.map\n","import { uuid4 } from './misc.js';\n\n/**\n * Returns a new minimal propagation context\n */\nfunction generatePropagationContext() {\n  return {\n    traceId: uuid4(),\n    spanId: uuid4().substring(16),\n  };\n}\n\nexport { generatePropagationContext };\n//# sourceMappingURL=propagationContext.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\n\n// Based on https://github.com/angular/angular.js/pull/13945/files\n// The MIT License\n\n\nconst WINDOW = GLOBAL_OBJ ;\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsHistory() {\n  // NOTE: in Chrome App environment, touching history.pushState, *even inside\n  //       a try/catch block*, will cause Chrome to output an error to console.error\n  // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n  /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const chromeVar = (WINDOW ).chrome;\n  const isChromePackagedApp = chromeVar && chromeVar.app && chromeVar.app.runtime;\n  /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n  const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n  return !isChromePackagedApp && hasHistoryApi;\n}\n\nexport { supportsHistory };\n//# sourceMappingURL=supportsHistory.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { GLOBAL_OBJ, SDK_VERSION } from '@sentry/utils';\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\n */\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n  // This ensures a Sentry carrier exists\n  getSentryCarrier(GLOBAL_OBJ);\n  return GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nfunction getSentryCarrier(carrier) {\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n  // For now: First SDK that sets the .version property wins\n  __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n\n  // Intentionally populating and returning the version of \"this\" SDK instance\n  // rather than what's set in .version so that \"this\" SDK always gets its carrier\n  return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n}\n\nexport { getMainCarrier, getSentryCarrier };\n//# sourceMappingURL=carrier.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.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\n\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    // Good enough uuid validation. — Kamil\n    session.sid = context.sid.length === 32 ? context.sid : uuid4();\n  }\n  if (context.init !== undefined) {\n    session.init = context.init;\n  }\n  if (!session.did && context.did) {\n    session.did = `${context.did}`;\n  }\n  if (typeof context.started === 'number') {\n    session.started = context.started;\n  }\n  if (session.ignoreDuration) {\n    session.duration = undefined;\n  } else if (typeof context.duration === 'number') {\n    session.duration = context.duration;\n  } else {\n    const duration = session.timestamp - session.started;\n    session.duration = duration >= 0 ? duration : 0;\n  }\n  if (context.release) {\n    session.release = context.release;\n  }\n  if (context.environment) {\n    session.environment = context.environment;\n  }\n  if (!session.ipAddress && context.ipAddress) {\n    session.ipAddress = context.ipAddress;\n  }\n  if (!session.userAgent && context.userAgent) {\n    session.userAgent = context.userAgent;\n  }\n  if (typeof context.errors === 'number') {\n    session.errors = context.errors;\n  }\n  if (context.status) {\n    session.status = context.status;\n  }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n *               this function will keep the previously set status, unless it was `'ok'` in which case\n *               it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === 'ok') {\n    context = { status: 'exited' };\n  }\n\n  updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n  return dropUndefinedKeys({\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n    duration: session.duration,\n    abnormal_mechanism: session.abnormal_mechanism,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent,\n    },\n  });\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","import { addNonEnumerableProperty } from '@sentry/utils';\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _setSpanForScope(scope, span) {\n  if (span) {\n    addNonEnumerableProperty(scope , SCOPE_SPAN_FIELD, span);\n  } else {\n    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n    delete (scope )[SCOPE_SPAN_FIELD];\n  }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _getSpanForScope(scope) {\n  return scope[SCOPE_SPAN_FIELD];\n}\n\nexport { _getSpanForScope, _setSpanForScope };\n//# sourceMappingURL=spanOnScope.js.map\n","import { generatePropagationContext, isPlainObject, dateTimestampInSeconds, uuid4, logger } from '@sentry/utils';\nimport { updateSession } from './session.js';\nimport { _setSpanForScope, _getSpanForScope } from './utils/spanOnScope.js';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information.\n */\nclass ScopeClass  {\n  /** Flag if notifying is happening. */\n\n  /** Callback for client to receive scope changes. */\n\n  /** Callback list that will be called during event processing. */\n\n  /** Array of breadcrumbs. */\n\n  /** User */\n\n  /** Tags */\n\n  /** Extra */\n\n  /** Contexts */\n\n  /** Attachments */\n\n  /** Propagation Context for distributed tracing */\n\n  /**\n   * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n   * sent to Sentry\n   */\n\n  /** Fingerprint */\n\n  /** Severity */\n\n  /**\n   * Transaction Name\n   *\n   * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n   * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n   */\n\n  /** Session */\n\n  /** Request Mode Session Status */\n\n  /** The client on this scope */\n\n  /** Contains the last event id of a captured event.  */\n\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n   constructor() {\n    this._notifyingListeners = false;\n    this._scopeListeners = [];\n    this._eventProcessors = [];\n    this._breadcrumbs = [];\n    this._attachments = [];\n    this._user = {};\n    this._tags = {};\n    this._extra = {};\n    this._contexts = {};\n    this._sdkProcessingMetadata = {};\n    this._propagationContext = generatePropagationContext();\n  }\n\n  /**\n   * @inheritDoc\n   */\n   clone() {\n    const newScope = new ScopeClass();\n    newScope._breadcrumbs = [...this._breadcrumbs];\n    newScope._tags = { ...this._tags };\n    newScope._extra = { ...this._extra };\n    newScope._contexts = { ...this._contexts };\n    newScope._user = this._user;\n    newScope._level = this._level;\n    newScope._session = this._session;\n    newScope._transactionName = this._transactionName;\n    newScope._fingerprint = this._fingerprint;\n    newScope._eventProcessors = [...this._eventProcessors];\n    newScope._requestSession = this._requestSession;\n    newScope._attachments = [...this._attachments];\n    newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n    newScope._propagationContext = { ...this._propagationContext };\n    newScope._client = this._client;\n    newScope._lastEventId = this._lastEventId;\n\n    _setSpanForScope(newScope, _getSpanForScope(this));\n\n    return newScope;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setClient(client) {\n    this._client = client;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setLastEventId(lastEventId) {\n    this._lastEventId = lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getClient() {\n    return this._client ;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   lastEventId() {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addScopeListener(callback) {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addEventProcessor(callback) {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setUser(user) {\n    // If null is passed we want to unset everything, but still define keys,\n    // so that later down in the pipeline any existing values are cleared.\n    this._user = user || {\n      email: undefined,\n      id: undefined,\n      ip_address: undefined,\n      username: undefined,\n    };\n\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @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(level) {\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   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    const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n    const [scopeInstance, requestSession] =\n      scopeToMerge instanceof Scope\n        ? [scopeToMerge.getScopeData(), scopeToMerge.getRequestSession()]\n        : isPlainObject(scopeToMerge)\n          ? [captureContext , (captureContext ).requestSession]\n          : [];\n\n    const { tags, extra, user, contexts, level, fingerprint = [], propagationContext } = scopeInstance || {};\n\n    this._tags = { ...this._tags, ...tags };\n    this._extra = { ...this._extra, ...extra };\n    this._contexts = { ...this._contexts, ...contexts };\n\n    if (user && Object.keys(user).length) {\n      this._user = user;\n    }\n\n    if (level) {\n      this._level = level;\n    }\n\n    if (fingerprint.length) {\n      this._fingerprint = fingerprint;\n    }\n\n    if (propagationContext) {\n      this._propagationContext = propagationContext;\n    }\n\n    if (requestSession) {\n      this._requestSession = requestSession;\n    }\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   clear() {\n    // client is not cleared here on purpose!\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._extra = {};\n    this._user = {};\n    this._contexts = {};\n    this._level = undefined;\n    this._transactionName = undefined;\n    this._fingerprint = undefined;\n    this._requestSession = undefined;\n    this._session = undefined;\n    _setSpanForScope(this, undefined);\n    this._attachments = [];\n    this._propagationContext = generatePropagationContext();\n\n    this._notifyScopeListeners();\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\n    const breadcrumbs = this._breadcrumbs;\n    breadcrumbs.push(mergedBreadcrumb);\n    this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   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   clearAttachments() {\n    this._attachments = [];\n    return this;\n  }\n\n  /** @inheritDoc */\n   getScopeData() {\n    return {\n      breadcrumbs: this._breadcrumbs,\n      attachments: this._attachments,\n      contexts: this._contexts,\n      tags: this._tags,\n      extra: this._extra,\n      user: this._user,\n      level: this._level,\n      fingerprint: this._fingerprint || [],\n      eventProcessors: this._eventProcessors,\n      propagationContext: this._propagationContext,\n      sdkProcessingMetadata: this._sdkProcessingMetadata,\n      transactionName: this._transactionName,\n      span: _getSpanForScope(this),\n    };\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setSDKProcessingMetadata(newData) {\n    this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setPropagationContext(context) {\n    this._propagationContext = context;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getPropagationContext() {\n    return this._propagationContext;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureException(exception, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture exception!');\n      return eventId;\n    }\n\n    const syntheticException = new Error('Sentry syntheticException');\n\n    this._client.captureException(\n      exception,\n      {\n        originalException: exception,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureMessage(message, level, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture message!');\n      return eventId;\n    }\n\n    const syntheticException = new Error(message);\n\n    this._client.captureMessage(\n      message,\n      level,\n      {\n        originalException: message,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureEvent(event, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture event!');\n      return eventId;\n    }\n\n    this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n    return eventId;\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n   _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// NOTE: By exporting this here as const & type, instead of doing `export class`,\n// We can get the correct class when importing from `@sentry/core`, but the original type (from `@sentry/types`)\n// This is helpful for interop, e.g. when doing `import type { Scope } from '@sentry/node';` (which re-exports this)\n\n/**\n * Holds additional event information.\n */\nconst Scope = ScopeClass;\n\n/**\n * Holds additional event information.\n */\n\nexport { Scope };\n//# sourceMappingURL=scope.js.map\n","import { getGlobalSingleton } from '@sentry/utils';\nimport { Scope } from './scope.js';\n\n/** Get the default current scope. */\nfunction getDefaultCurrentScope() {\n  return getGlobalSingleton('defaultCurrentScope', () => new Scope());\n}\n\n/** Get the default isolation scope. */\nfunction getDefaultIsolationScope() {\n  return getGlobalSingleton('defaultIsolationScope', () => new Scope());\n}\n\nexport { getDefaultCurrentScope, getDefaultIsolationScope };\n//# sourceMappingURL=defaultScopes.js.map\n","import { isThenable } from '@sentry/utils';\nimport { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes.js';\nimport { Scope } from '../scope.js';\nimport { getMainCarrier, getSentryCarrier } from '../carrier.js';\n\n/**\n * This is an object that holds a stack of scopes.\n */\nclass AsyncContextStack {\n\n   constructor(scope, isolationScope) {\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new Scope();\n    } else {\n      assignedScope = scope;\n    }\n\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new Scope();\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n\n    // scope stack for domains or the process\n    this._stack = [{ scope: assignedScope }];\n    this._isolationScope = assignedIsolationScope;\n  }\n\n  /**\n   * Fork a scope for the stack.\n   */\n   withScope(callback) {\n    const scope = this._pushScope();\n\n    let maybePromiseResult;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      this._popScope();\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      // @ts-expect-error - isThenable returns the wrong type\n      return maybePromiseResult.then(\n        res => {\n          this._popScope();\n          return res;\n        },\n        e => {\n          this._popScope();\n          throw e;\n        },\n      );\n    }\n\n    this._popScope();\n    return maybePromiseResult;\n  }\n\n  /**\n   * Get the client of the stack.\n   */\n   getClient() {\n    return this.getStackTop().client ;\n  }\n\n  /**\n   * Returns the scope of the top stack.\n   */\n   getScope() {\n    return this.getStackTop().scope;\n  }\n\n  /**\n   * Get the isolation scope for the stack.\n   */\n   getIsolationScope() {\n    return this._isolationScope;\n  }\n\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   */\n   getStackTop() {\n    return this._stack[this._stack.length - 1] ;\n  }\n\n  /**\n   * Push a scope to the stack.\n   */\n   _pushScope() {\n    // We want to clone the content of prev scope\n    const scope = this.getScope().clone();\n    this._stack.push({\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * Pop a scope from the stack.\n   */\n   _popScope() {\n    if (this._stack.length <= 1) return false;\n    return !!this._stack.pop();\n  }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack() {\n  const registry = getMainCarrier();\n  const sentry = getSentryCarrier(registry);\n\n  return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope(callback) {\n  return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope(scope, callback) {\n  const stack = getAsyncContextStack() ;\n  return stack.withScope(() => {\n    stack.getStackTop().scope = scope;\n    return callback(scope);\n  });\n}\n\nfunction withIsolationScope(callback) {\n  return getAsyncContextStack().withScope(() => {\n    return callback(getAsyncContextStack().getIsolationScope());\n  });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nfunction getStackAsyncContextStrategy() {\n  return {\n    withIsolationScope,\n    withScope,\n    withSetScope,\n    withSetIsolationScope: (_isolationScope, callback) => {\n      return withIsolationScope(callback);\n    },\n    getCurrentScope: () => getAsyncContextStack().getScope(),\n    getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n  };\n}\n\nexport { AsyncContextStack, getStackAsyncContextStrategy };\n//# sourceMappingURL=stackStrategy.js.map\n","import { getMainCarrier, getSentryCarrier } from '../carrier.js';\nimport { getStackAsyncContextStrategy } from './stackStrategy.js';\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nfunction setAsyncContextStrategy(strategy) {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n  const sentry = getSentryCarrier(registry);\n  sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nfunction getAsyncContextStrategy(carrier) {\n  const sentry = getSentryCarrier(carrier);\n\n  if (sentry.acs) {\n    return sentry.acs;\n  }\n\n  // Otherwise, use the default one (stack)\n  return getStackAsyncContextStrategy();\n}\n\nexport { getAsyncContextStrategy, setAsyncContextStrategy };\n//# sourceMappingURL=index.js.map\n","import { getGlobalSingleton } from '@sentry/utils';\nimport { getAsyncContextStrategy } from './asyncContext/index.js';\nimport { getMainCarrier } from './carrier.js';\nimport { Scope } from './scope.js';\n\n/**\n * Get the currently active scope.\n */\nfunction getCurrentScope() {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current exection context.\n */\nfunction getIsolationScope() {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nfunction getGlobalScope() {\n  return getGlobalSingleton('globalScope', () => new Scope());\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\n\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nfunction withScope(\n  ...rest\n) {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [scope, callback] = rest;\n\n    if (!scope) {\n      return acs.withScope(callback);\n    }\n\n    return acs.withSetScope(scope, callback);\n  }\n\n  return acs.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n */\n\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nfunction withIsolationScope(\n  ...rest\n\n) {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [isolationScope, callback] = rest;\n\n    if (!isolationScope) {\n      return acs.withIsolationScope(callback);\n    }\n\n    return acs.withSetIsolationScope(isolationScope, callback);\n  }\n\n  return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nfunction getClient() {\n  return getCurrentScope().getClient();\n}\n\nexport { getClient, getCurrentScope, getGlobalScope, getIsolationScope, withIsolationScope, withScope };\n//# sourceMappingURL=currentScopes.js.map\n","import { dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * key: bucketKey\n * value: [exportKey, MetricSummary]\n */\n\nconst METRICS_SPAN_FIELD = '_sentryMetrics';\n\n/**\n * Fetches the metric summary if it exists for the passed span\n */\nfunction getMetricSummaryJsonForSpan(span) {\n  const storage = (span )[METRICS_SPAN_FIELD];\n\n  if (!storage) {\n    return undefined;\n  }\n  const output = {};\n\n  for (const [, [exportKey, summary]] of storage) {\n    const arr = output[exportKey] || (output[exportKey] = []);\n    arr.push(dropUndefinedKeys(summary));\n  }\n\n  return output;\n}\n\n/**\n * Updates the metric summary on a span.\n */\nfunction updateMetricSummaryOnSpan(\n  span,\n  metricType,\n  sanitizedName,\n  value,\n  unit,\n  tags,\n  bucketKey,\n) {\n  const existingStorage = (span )[METRICS_SPAN_FIELD];\n  const storage =\n    existingStorage ||\n    ((span )[METRICS_SPAN_FIELD] = new Map());\n\n  const exportKey = `${metricType}:${sanitizedName}@${unit}`;\n  const bucketItem = storage.get(bucketKey);\n\n  if (bucketItem) {\n    const [, summary] = bucketItem;\n    storage.set(bucketKey, [\n      exportKey,\n      {\n        min: Math.min(summary.min, value),\n        max: Math.max(summary.max, value),\n        count: (summary.count += 1),\n        sum: (summary.sum += value),\n        tags: summary.tags,\n      },\n    ]);\n  } else {\n    storage.set(bucketKey, [\n      exportKey,\n      {\n        min: value,\n        max: value,\n        count: 1,\n        sum: value,\n        tags,\n      },\n    ]);\n  }\n}\n\nexport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan };\n//# sourceMappingURL=metric-summary.js.map\n","/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/** The reason why an idle span finished. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/** The unit of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = 'sentry.measurement_unit';\n\n/** The value of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = 'sentry.measurement_value';\n\n/**\n * The id of the profile that this span occured in.\n */\nconst SEMANTIC_ATTRIBUTE_PROFILE_ID = 'sentry.profile_id';\n\nconst SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_HIT = 'cache.hit';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = 'cache.item_size';\n\nexport { SEMANTIC_ATTRIBUTE_CACHE_HIT, SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, SEMANTIC_ATTRIBUTE_CACHE_KEY, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE };\n//# sourceMappingURL=semanticAttributes.js.map\n","const SPAN_STATUS_UNSET = 0;\nconst SPAN_STATUS_OK = 1;\nconst SPAN_STATUS_ERROR = 2;\n\n/**\n * Converts a HTTP status code into a sentry status with a message.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\n// https://develop.sentry.dev/sdk/event-payloads/span/\nfunction getSpanStatusFromHttpCode(httpStatus) {\n  if (httpStatus < 400 && httpStatus >= 100) {\n    return { code: SPAN_STATUS_OK };\n  }\n\n  if (httpStatus >= 400 && httpStatus < 500) {\n    switch (httpStatus) {\n      case 401:\n        return { code: SPAN_STATUS_ERROR, message: 'unauthenticated' };\n      case 403:\n        return { code: SPAN_STATUS_ERROR, message: 'permission_denied' };\n      case 404:\n        return { code: SPAN_STATUS_ERROR, message: 'not_found' };\n      case 409:\n        return { code: SPAN_STATUS_ERROR, message: 'already_exists' };\n      case 413:\n        return { code: SPAN_STATUS_ERROR, message: 'failed_precondition' };\n      case 429:\n        return { code: SPAN_STATUS_ERROR, message: 'resource_exhausted' };\n      case 499:\n        return { code: SPAN_STATUS_ERROR, message: 'cancelled' };\n      default:\n        return { code: SPAN_STATUS_ERROR, message: 'invalid_argument' };\n    }\n  }\n\n  if (httpStatus >= 500 && httpStatus < 600) {\n    switch (httpStatus) {\n      case 501:\n        return { code: SPAN_STATUS_ERROR, message: 'unimplemented' };\n      case 503:\n        return { code: SPAN_STATUS_ERROR, message: 'unavailable' };\n      case 504:\n        return { code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' };\n      default:\n        return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n    }\n  }\n\n  return { code: SPAN_STATUS_ERROR, message: 'unknown_error' };\n}\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nfunction setHttpStatus(span, httpStatus) {\n  span.setAttribute('http.response.status_code', httpStatus);\n\n  const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n  if (spanStatus.message !== 'unknown_error') {\n    span.setStatus(spanStatus);\n  }\n}\n\nexport { SPAN_STATUS_ERROR, SPAN_STATUS_OK, SPAN_STATUS_UNSET, getSpanStatusFromHttpCode, setHttpStatus };\n//# sourceMappingURL=spanstatus.js.map\n","import { dropUndefinedKeys, generateSentryTraceHeader, timestampInSeconds, addNonEnumerableProperty } from '@sentry/utils';\nimport { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getCurrentScope } from '../currentScopes.js';\nimport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan } from '../metrics/metric-summary.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes.js';\nimport { SPAN_STATUS_UNSET, SPAN_STATUS_OK } from '../tracing/spanstatus.js';\nimport { _getSpanForScope } from './spanOnScope.js';\n\n// These are aligned with OpenTelemetry trace flags\nconst TRACE_FLAG_NONE = 0x0;\nconst TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n * By default, this will only include trace_id, span_id & parent_span_id.\n * If `includeAllData` is true, it will also include data, op, status & origin.\n */\nfunction spanToTransactionTraceContext(span) {\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  const { data, op, parent_span_id, status, origin } = spanToJSON(span);\n\n  return dropUndefinedKeys({\n    parent_span_id,\n    span_id,\n    trace_id,\n    data,\n    op,\n    status,\n    origin,\n  });\n}\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in a non-transaction event.\n */\nfunction spanToTraceContext(span) {\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  const { parent_span_id } = spanToJSON(span);\n\n  return dropUndefinedKeys({ parent_span_id, span_id, trace_id });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nfunction spanToTraceHeader(span) {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input into a timestamp in seconds.\n */\nfunction spanTimeInputToSeconds(input) {\n  if (typeof input === 'number') {\n    return ensureTimestampInSeconds(input);\n  }\n\n  if (Array.isArray(input)) {\n    // See {@link HrTime} for the array-based time format\n    return input[0] + input[1] / 1e9;\n  }\n\n  if (input instanceof Date) {\n    return ensureTimestampInSeconds(input.getTime());\n  }\n\n  return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n */\n// Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n// This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n// And `spanToJSON` needs the Span class from `span.ts` to check here.\nfunction spanToJSON(span) {\n  if (spanIsSentrySpan(span)) {\n    return span.getSpanJSON();\n  }\n\n  try {\n    const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n    // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n    if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n      const { attributes, startTime, name, endTime, parentSpanId, status } = span;\n\n      return dropUndefinedKeys({\n        span_id,\n        trace_id,\n        data: attributes,\n        description: name,\n        parent_span_id: parentSpanId,\n        start_timestamp: spanTimeInputToSeconds(startTime),\n        // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n        timestamp: spanTimeInputToSeconds(endTime) || undefined,\n        status: getStatusMessage(status),\n        op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n        origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n        _metrics_summary: getMetricSummaryJsonForSpan(span),\n      });\n    }\n\n    // Finally, at least we have `spanContext()`....\n    return {\n      span_id,\n      trace_id,\n    };\n  } catch (e) {\n    return {};\n  }\n}\n\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span) {\n  const castSpan = span ;\n  return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\n\n/** Exported only for tests. */\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSentrySpan(span) {\n  return typeof (span ).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nfunction spanIsSampled(span) {\n  // We align our trace flags with the ones OpenTelemetry use\n  // So we also check for sampled the same way they do.\n  const { traceFlags } = span.spanContext();\n  return traceFlags === TRACE_FLAG_SAMPLED;\n}\n\n/** Get the status message to use for a JSON representation of a span. */\nfunction getStatusMessage(status) {\n  if (!status || status.code === SPAN_STATUS_UNSET) {\n    return undefined;\n  }\n\n  if (status.code === SPAN_STATUS_OK) {\n    return 'ok';\n  }\n\n  return status.message || 'unknown_error';\n}\n\nconst CHILD_SPANS_FIELD = '_sentryChildSpans';\nconst ROOT_SPAN_FIELD = '_sentryRootSpan';\n\n/**\n * Adds an opaque child span reference to a span.\n */\nfunction addChildSpanToSpan(span, childSpan) {\n  // We store the root span reference on the child span\n  // We need this for `getRootSpan()` to work\n  const rootSpan = span[ROOT_SPAN_FIELD] || span;\n  addNonEnumerableProperty(childSpan , ROOT_SPAN_FIELD, rootSpan);\n\n  // We store a list of child spans on the parent span\n  // We need this for `getSpanDescendants()` to work\n  if (span[CHILD_SPANS_FIELD]) {\n    span[CHILD_SPANS_FIELD].add(childSpan);\n  } else {\n    addNonEnumerableProperty(span, CHILD_SPANS_FIELD, new Set([childSpan]));\n  }\n}\n\n/** This is only used internally by Idle Spans. */\nfunction removeChildSpanFromSpan(span, childSpan) {\n  if (span[CHILD_SPANS_FIELD]) {\n    span[CHILD_SPANS_FIELD].delete(childSpan);\n  }\n}\n\n/**\n * Returns an array of the given span and all of its descendants.\n */\nfunction getSpanDescendants(span) {\n  const resultSet = new Set();\n\n  function addSpanChildren(span) {\n    // This exit condition is required to not infinitely loop in case of a circular dependency.\n    if (resultSet.has(span)) {\n      return;\n      // We want to ignore unsampled spans (e.g. non recording spans)\n    } else if (spanIsSampled(span)) {\n      resultSet.add(span);\n      const childSpans = span[CHILD_SPANS_FIELD] ? Array.from(span[CHILD_SPANS_FIELD]) : [];\n      for (const childSpan of childSpans) {\n        addSpanChildren(childSpan);\n      }\n    }\n  }\n\n  addSpanChildren(span);\n\n  return Array.from(resultSet);\n}\n\n/**\n * Returns the root span of a given span.\n */\nfunction getRootSpan(span) {\n  return span[ROOT_SPAN_FIELD] || span;\n}\n\n/**\n * Returns the currently active span.\n */\nfunction getActiveSpan() {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (acs.getActiveSpan) {\n    return acs.getActiveSpan();\n  }\n\n  return _getSpanForScope(getCurrentScope());\n}\n\n/**\n * Updates the metric summary on the currently active span\n */\nfunction updateMetricSummaryOnActiveSpan(\n  metricType,\n  sanitizedName,\n  value,\n  unit,\n  tags,\n  bucketKey,\n) {\n  const span = getActiveSpan();\n  if (span) {\n    updateMetricSummaryOnSpan(span, metricType, sanitizedName, value, unit, tags, bucketKey);\n  }\n}\n\nexport { TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, addChildSpanToSpan, getActiveSpan, getRootSpan, getSpanDescendants, getStatusMessage, removeChildSpanFromSpan, spanIsSampled, spanTimeInputToSeconds, spanToJSON, spanToTraceContext, spanToTraceHeader, spanToTransactionTraceContext, updateMetricSummaryOnActiveSpan };\n//# sourceMappingURL=spanUtils.js.map\n","import { addGlobalErrorInstrumentationHandler, addGlobalUnhandledRejectionInstrumentationHandler, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\n\nlet errorsInstrumented = false;\n\n/**\n * Ensure that global errors automatically set the active span status.\n */\nfunction registerSpanErrorInstrumentation() {\n  if (errorsInstrumented) {\n    return;\n  }\n\n  errorsInstrumented = true;\n  addGlobalErrorInstrumentationHandler(errorCallback);\n  addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active root span as failed\n */\nfunction errorCallback() {\n  const activeSpan = getActiveSpan();\n  const rootSpan = activeSpan && getRootSpan(activeSpan);\n  if (rootSpan) {\n    const message = 'internal_error';\n    DEBUG_BUILD && logger.log(`[Tracing] Root span: ${message} -> Global error occured`);\n    rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message });\n  }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n\nexport { registerSpanErrorInstrumentation };\n//# sourceMappingURL=errors.js.map\n","import { addNonEnumerableProperty } from '@sentry/utils';\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nfunction setCapturedScopesOnSpan(span, scope, isolationScope) {\n  if (span) {\n    addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, isolationScope);\n    addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n  }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n */\nfunction getCapturedScopesOnSpan(span) {\n  return {\n    scope: (span )[SCOPE_ON_START_SPAN_FIELD],\n    isolationScope: (span )[ISOLATION_SCOPE_ON_START_SPAN_FIELD],\n  };\n}\n\nexport { getCapturedScopesOnSpan, setCapturedScopesOnSpan };\n//# sourceMappingURL=utils.js.map\n","import { getClient } from '../currentScopes.js';\n\n// Treeshakable guard to remove all code related to tracing\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nfunction hasTracingEnabled(\n  maybeOptions,\n) {\n  if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n    return false;\n  }\n\n  const client = getClient();\n  const options = maybeOptions || (client && client.getOptions());\n  // eslint-disable-next-line deprecation/deprecation\n  return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n\nexport { hasTracingEnabled };\n//# sourceMappingURL=hasTracingEnabled.js.map\n","import { uuid4 } from '@sentry/utils';\nimport { TRACE_FLAG_NONE } from '../utils/spanUtils.js';\n\n/**\n * A Sentry Span that is non-recording, meaning it will not be sent to Sentry.\n */\nclass SentryNonRecordingSpan  {\n\n   constructor(spanContext = {}) {\n    this._traceId = spanContext.traceId || uuid4();\n    this._spanId = spanContext.spanId || uuid4().substring(16);\n  }\n\n  /** @inheritdoc */\n   spanContext() {\n    return {\n      spanId: this._spanId,\n      traceId: this._traceId,\n      traceFlags: TRACE_FLAG_NONE,\n    };\n  }\n\n  /** @inheritdoc */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n   end(_timestamp) {}\n\n  /** @inheritdoc */\n   setAttribute(_key, _value) {\n    return this;\n  }\n\n  /** @inheritdoc */\n   setAttributes(_values) {\n    return this;\n  }\n\n  /** @inheritdoc */\n   setStatus(_status) {\n    return this;\n  }\n\n  /** @inheritdoc */\n   updateName(_name) {\n    return this;\n  }\n\n  /** @inheritdoc */\n   isRecording() {\n    return false;\n  }\n\n  /** @inheritdoc */\n   addEvent(\n    _name,\n    _attributesOrStartTime,\n    _startTime,\n  ) {\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but we need it for being comliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n   addLink(_link) {\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but we need it for being comliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n   addLinks(_links) {\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but we need it for being comliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n   recordException(_exception, _time) {\n    // noop\n  }\n}\n\nexport { SentryNonRecordingSpan };\n//# sourceMappingURL=sentryNonRecordingSpan.js.map\n","const DEFAULT_ENVIRONMENT = 'production';\n\nexport { DEFAULT_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { dropUndefinedKeys, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, addNonEnumerableProperty } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getClient } from '../currentScopes.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes.js';\nimport { spanToJSON, getRootSpan, spanIsSampled } from '../utils/spanUtils.js';\n\n/**\n * If you change this value, also update the terser plugin config to\n * avoid minification of the object property!\n */\nconst FROZEN_DSC_FIELD = '_frozenDsc';\n\n/**\n * Freeze the given DSC on the given span.\n */\nfunction freezeDscOnSpan(span, dsc) {\n  const spanWithMaybeDsc = span ;\n  addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nfunction getDynamicSamplingContextFromClient(trace_id, client) {\n  const options = client.getOptions();\n\n  const { publicKey: public_key } = client.getDsn() || {};\n\n  const dsc = dropUndefinedKeys({\n    environment: options.environment || DEFAULT_ENVIRONMENT,\n    release: options.release,\n    public_key,\n    trace_id,\n  }) ;\n\n  client.emit('createDsc', dsc);\n\n  return dsc;\n}\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nfunction getDynamicSamplingContextFromSpan(span) {\n  const client = getClient();\n  if (!client) {\n    return {};\n  }\n\n  const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client);\n\n  const rootSpan = getRootSpan(span);\n\n  // For core implementation, we freeze the DSC onto the span as a non-enumerable property\n  const frozenDsc = (rootSpan )[FROZEN_DSC_FIELD];\n  if (frozenDsc) {\n    return frozenDsc;\n  }\n\n  // For OpenTelemetry, we freeze the DSC on the trace state\n  const traceState = rootSpan.spanContext().traceState;\n  const traceStateDsc = traceState && traceState.get('sentry.dsc');\n\n  // If the span has a DSC, we want it to take precedence\n  const dscOnTraceState = traceStateDsc && baggageHeaderToDynamicSamplingContext(traceStateDsc);\n\n  if (dscOnTraceState) {\n    return dscOnTraceState;\n  }\n\n  // Else, we generate it from the span\n  const jsonSpan = spanToJSON(rootSpan);\n  const attributes = jsonSpan.data || {};\n  const maybeSampleRate = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE];\n\n  if (maybeSampleRate != null) {\n    dsc.sample_rate = `${maybeSampleRate}`;\n  }\n\n  // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n  const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n  // after JSON conversion, txn.name becomes jsonSpan.description\n  const name = jsonSpan.description;\n  if (source !== 'url' && name) {\n    dsc.transaction = name;\n  }\n\n  dsc.sampled = String(spanIsSampled(rootSpan));\n\n  client.emit('createDsc', dsc, rootSpan);\n\n  return dsc;\n}\n\n/**\n * Convert a Span to a baggage header.\n */\nfunction spanToBaggageHeader(span) {\n  const dsc = getDynamicSamplingContextFromSpan(span);\n  return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n\nexport { freezeDscOnSpan, getDynamicSamplingContextFromClient, getDynamicSamplingContextFromSpan, spanToBaggageHeader };\n//# sourceMappingURL=dynamicSamplingContext.js.map\n","import { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { spanToJSON, spanIsSampled, getRootSpan } from '../utils/spanUtils.js';\n\n/**\n * Print a log message for a started span.\n */\nfunction logSpanStart(span) {\n  if (!DEBUG_BUILD) return;\n\n  const { description = '< unknown name >', op = '< unknown op >', parent_span_id: parentSpanId } = spanToJSON(span);\n  const { spanId } = span.spanContext();\n\n  const sampled = spanIsSampled(span);\n  const rootSpan = getRootSpan(span);\n  const isRootSpan = rootSpan === span;\n\n  const header = `[Tracing] Starting ${sampled ? 'sampled' : 'unsampled'} ${isRootSpan ? 'root ' : ''}span`;\n\n  const infoParts = [`op: ${op}`, `name: ${description}`, `ID: ${spanId}`];\n\n  if (parentSpanId) {\n    infoParts.push(`parent ID: ${parentSpanId}`);\n  }\n\n  if (!isRootSpan) {\n    const { op, description } = spanToJSON(rootSpan);\n    infoParts.push(`root ID: ${rootSpan.spanContext().spanId}`);\n    if (op) {\n      infoParts.push(`root op: ${op}`);\n    }\n    if (description) {\n      infoParts.push(`root description: ${description}`);\n    }\n  }\n\n  logger.log(`${header}\n  ${infoParts.join('\\n  ')}`);\n}\n\n/**\n * Print a log message for an ended span.\n */\nfunction logSpanEnd(span) {\n  if (!DEBUG_BUILD) return;\n\n  const { description = '< unknown name >', op = '< unknown op >' } = spanToJSON(span);\n  const { spanId } = span.spanContext();\n  const rootSpan = getRootSpan(span);\n  const isRootSpan = rootSpan === span;\n\n  const msg = `[Tracing] Finishing \"${op}\" ${isRootSpan ? 'root ' : ''}span \"${description}\" with ID ${spanId}`;\n  logger.log(msg);\n}\n\nexport { logSpanEnd, logSpanStart };\n//# sourceMappingURL=logSpans.js.map\n","import { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\n/**\n * Parse a sample rate from a given value.\n * This will either return a boolean or number sample rate, if the sample rate is valid (between 0 and 1).\n * If a string is passed, we try to convert it to a number.\n *\n * Any invalid sample rate will return `undefined`.\n */\nfunction parseSampleRate(sampleRate) {\n  if (typeof sampleRate === 'boolean') {\n    return Number(sampleRate);\n  }\n\n  const rate = typeof sampleRate === 'string' ? parseFloat(sampleRate) : sampleRate;\n  if (typeof rate !== 'number' || isNaN(rate) || rate < 0 || rate > 1) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          sampleRate,\n        )} of type ${JSON.stringify(typeof sampleRate)}.`,\n      );\n    return undefined;\n  }\n\n  return rate;\n}\n\nexport { parseSampleRate };\n//# sourceMappingURL=parseSampleRate.js.map\n","import { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { parseSampleRate } from '../utils/parseSampleRate.js';\n\n/**\n * Makes a sampling decision for the given options.\n *\n * Called every time a root span is created. Only root spans which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n */\nfunction sampleSpan(\n  options,\n  samplingContext,\n) {\n  // nothing to do if tracing is not enabled\n  if (!hasTracingEnabled(options)) {\n    return [false];\n  }\n\n  // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should\n  // work; prefer the hook if so\n  let sampleRate;\n  if (typeof options.tracesSampler === 'function') {\n    sampleRate = options.tracesSampler(samplingContext);\n  } else if (samplingContext.parentSampled !== undefined) {\n    sampleRate = samplingContext.parentSampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n  } else {\n    // When `enableTracing === true`, we use a sample rate of 100%\n    sampleRate = 1;\n  }\n\n  // Since this is coming from the user (or from a function provided by the user), who knows what we might get.\n  // (The only valid values are booleans or numbers between 0 and 1.)\n  const parsedSampleRate = parseSampleRate(sampleRate);\n\n  if (parsedSampleRate === undefined) {\n    DEBUG_BUILD && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n    return [false];\n  }\n\n  // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n  if (!parsedSampleRate) {\n    DEBUG_BUILD &&\n      logger.log(\n        `[Tracing] Discarding transaction because ${\n          typeof options.tracesSampler === 'function'\n            ? 'tracesSampler returned 0 or false'\n            : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n        }`,\n      );\n    return [false, parsedSampleRate];\n  }\n\n  // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n  // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n  const shouldSample = Math.random() < parsedSampleRate;\n\n  // if we're not going to keep it, we're done\n  if (!shouldSample) {\n    DEBUG_BUILD &&\n      logger.log(\n        `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n          sampleRate,\n        )})`,\n      );\n    return [false, parsedSampleRate];\n  }\n\n  return [true, parsedSampleRate];\n}\n\nexport { sampleSpan };\n//# sourceMappingURL=sampling.js.map\n","import { getSdkMetadataForEnvelopeHeader, dsnToString, createEnvelope, createEventEnvelopeHeaders, createSpanEnvelopeItem } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from './tracing/dynamicSamplingContext.js';\nimport { spanToJSON } from './utils/spanUtils.js';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event, sdkInfo) {\n  if (!sdkInfo) {\n    return event;\n  }\n  event.sdk = event.sdk || {};\n  event.sdk.name = event.sdk.name || sdkInfo.name;\n  event.sdk.version = event.sdk.version || sdkInfo.version;\n  event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n  event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n  return event;\n}\n\n/** Creates an envelope from a Session */\nfunction createSessionEnvelope(\n  session,\n  dsn,\n  metadata,\n  tunnel,\n) {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n  const envelopeHeaders = {\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const envelopeItem =\n    'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n  return createEnvelope(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nfunction createEventEnvelope(\n  event,\n  dsn,\n  metadata,\n  tunnel,\n) {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n  /*\n    Note: Due to TS, event.type may be `replay_event`, theoretically.\n    In practice, we never call `createEventEnvelope` with `replay_event` type,\n    and we'd have to adjut a looot of types to make this work properly.\n    We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n    So the safe choice is to really guard against the replay_event type here.\n  */\n  const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n  enhanceEventWithSdkInfo(event, metadata && metadata.sdk);\n\n  const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete event.sdkProcessingMetadata;\n\n  const eventItem = [{ type: eventType }, event];\n  return createEnvelope(envelopeHeaders, [eventItem]);\n}\n\n/**\n * Create envelope from Span item.\n *\n * Takes an optional client and runs spans through `beforeSendSpan` if available.\n */\nfunction createSpanEnvelope(spans, client) {\n  function dscHasRequiredProps(dsc) {\n    return !!dsc.trace_id && !!dsc.public_key;\n  }\n\n  // For the moment we'll obtain the DSC from the first span in the array\n  // This might need to be changed if we permit sending multiple spans from\n  // different segments in one envelope\n  const dsc = getDynamicSamplingContextFromSpan(spans[0]);\n\n  const dsn = client && client.getDsn();\n  const tunnel = client && client.getOptions().tunnel;\n\n  const headers = {\n    sent_at: new Date().toISOString(),\n    ...(dscHasRequiredProps(dsc) && { trace: dsc }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const beforeSendSpan = client && client.getOptions().beforeSendSpan;\n  const convertToSpanJSON = beforeSendSpan\n    ? (span) => beforeSendSpan(spanToJSON(span) )\n    : (span) => spanToJSON(span);\n\n  const items = [];\n  for (const span of spans) {\n    const spanJson = convertToSpanJSON(span);\n    if (spanJson) {\n      items.push(createSpanEnvelopeItem(spanJson));\n    }\n  }\n\n  return createEnvelope(headers, items);\n}\n\nexport { createEventEnvelope, createSessionEnvelope, createSpanEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT } from '../semanticAttributes.js';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils.js';\n\n/**\n * Adds a measurement to the current active transaction.\n */\nfunction setMeasurement(name, value, unit) {\n  const activeSpan = getActiveSpan();\n  const rootSpan = activeSpan && getRootSpan(activeSpan);\n\n  if (rootSpan) {\n    rootSpan.addEvent(name, {\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: value,\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: unit ,\n    });\n  }\n}\n\n/**\n * Convert timed events to measurements.\n */\nfunction timedEventsToMeasurements(events) {\n  if (!events || events.length === 0) {\n    return undefined;\n  }\n\n  const measurements = {};\n  events.forEach(event => {\n    const attributes = event.attributes || {};\n    const unit = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT] ;\n    const value = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE] ;\n\n    if (typeof unit === 'string' && typeof value === 'number') {\n      measurements[event.name] = { value, unit };\n    }\n  });\n\n  return measurements;\n}\n\nexport { setMeasurement, timedEventsToMeasurements };\n//# sourceMappingURL=measurement.js.map\n","import { uuid4, timestampInSeconds, dropUndefinedKeys, logger } from '@sentry/utils';\nimport { getClient, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { createSpanEnvelope } from '../envelope.js';\nimport { getMetricSummaryJsonForSpan } from '../metrics/metric-summary.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes.js';\nimport { TRACE_FLAG_SAMPLED, TRACE_FLAG_NONE, spanTimeInputToSeconds, getStatusMessage, getRootSpan, spanToJSON, getSpanDescendants, spanToTransactionTraceContext } from '../utils/spanUtils.js';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext.js';\nimport { logSpanEnd } from './logSpans.js';\nimport { timedEventsToMeasurements } from './measurement.js';\nimport { getCapturedScopesOnSpan } from './utils.js';\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nclass SentrySpan  {\n\n  /** Epoch timestamp in seconds when the span started. */\n\n  /** Epoch timestamp in seconds when the span ended. */\n\n  /** Internal keeper of the status */\n\n  /** The timed events added to this span. */\n\n  /** if true, treat span as a standalone span (not part of a transaction) */\n\n  /**\n   * You should never call the constructor manually, always use `Sentry.startSpan()`\n   * or other span methods.\n   * @internal\n   * @hideconstructor\n   * @hidden\n   */\n   constructor(spanContext = {}) {\n    this._traceId = spanContext.traceId || uuid4();\n    this._spanId = spanContext.spanId || uuid4().substring(16);\n    this._startTime = spanContext.startTimestamp || timestampInSeconds();\n\n    this._attributes = {};\n    this.setAttributes({\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n      [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n      ...spanContext.attributes,\n    });\n\n    this._name = spanContext.name;\n\n    if (spanContext.parentSpanId) {\n      this._parentSpanId = spanContext.parentSpanId;\n    }\n    // We want to include booleans as well here\n    if ('sampled' in spanContext) {\n      this._sampled = spanContext.sampled;\n    }\n    if (spanContext.endTimestamp) {\n      this._endTime = spanContext.endTimestamp;\n    }\n\n    this._events = [];\n\n    this._isStandaloneSpan = spanContext.isStandalone;\n\n    // If the span is already ended, ensure we finalize the span immediately\n    if (this._endTime) {\n      this._onSpanEnded();\n    }\n  }\n\n  /**\n   * This should generally not be used,\n   * but it is needed for being compliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n   addLink(_link) {\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but it is needed for being compliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n   addLinks(_links) {\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but it is needed for being compliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n   recordException(_exception, _time) {\n    // noop\n  }\n\n  /** @inheritdoc */\n   spanContext() {\n    const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n    return {\n      spanId,\n      traceId,\n      traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n    };\n  }\n\n  /** @inheritdoc */\n   setAttribute(key, value) {\n    if (value === undefined) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._attributes[key];\n    } else {\n      this._attributes[key] = value;\n    }\n\n    return this;\n  }\n\n  /** @inheritdoc */\n   setAttributes(attributes) {\n    Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but we need it for browser tracing where we want to adjust the start time afterwards.\n   * USE THIS WITH CAUTION!\n   *\n   * @hidden\n   * @internal\n   */\n   updateStartTime(timeInput) {\n    this._startTime = spanTimeInputToSeconds(timeInput);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setStatus(value) {\n    this._status = value;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   updateName(name) {\n    this._name = name;\n    return this;\n  }\n\n  /** @inheritdoc */\n   end(endTimestamp) {\n    // If already ended, skip\n    if (this._endTime) {\n      return;\n    }\n\n    this._endTime = spanTimeInputToSeconds(endTimestamp);\n    logSpanEnd(this);\n\n    this._onSpanEnded();\n  }\n\n  /**\n   * Get JSON representation of this span.\n   *\n   * @hidden\n   * @internal This method is purely for internal purposes and should not be used outside\n   * of SDK code. If you need to get a JSON representation of a span,\n   * use `spanToJSON(span)` instead.\n   */\n   getSpanJSON() {\n    return dropUndefinedKeys({\n      data: this._attributes,\n      description: this._name,\n      op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n      parent_span_id: this._parentSpanId,\n      span_id: this._spanId,\n      start_timestamp: this._startTime,\n      status: getStatusMessage(this._status),\n      timestamp: this._endTime,\n      trace_id: this._traceId,\n      origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n      _metrics_summary: getMetricSummaryJsonForSpan(this),\n      profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] ,\n      exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] ,\n      measurements: timedEventsToMeasurements(this._events),\n      is_segment: (this._isStandaloneSpan && getRootSpan(this) === this) || undefined,\n      segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : undefined,\n    });\n  }\n\n  /** @inheritdoc */\n   isRecording() {\n    return !this._endTime && !!this._sampled;\n  }\n\n  /**\n   * @inheritdoc\n   */\n   addEvent(\n    name,\n    attributesOrStartTime,\n    startTime,\n  ) {\n    DEBUG_BUILD && logger.log('[Tracing] Adding an event to span:', name);\n\n    const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n    const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n    const event = {\n      name,\n      time: spanTimeInputToSeconds(time),\n      attributes,\n    };\n\n    this._events.push(event);\n\n    return this;\n  }\n\n  /**\n   * This method should generally not be used,\n   * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n   * USE THIS WITH CAUTION!\n   * @internal\n   * @hidden\n   * @experimental\n   */\n   isStandaloneSpan() {\n    return !!this._isStandaloneSpan;\n  }\n\n  /** Emit `spanEnd` when the span is ended. */\n   _onSpanEnded() {\n    const client = getClient();\n    if (client) {\n      client.emit('spanEnd', this);\n    }\n\n    // A segment span is basically the root span of a local span tree.\n    // So for now, this is either what we previously refer to as the root span,\n    // or a standalone span.\n    const isSegmentSpan = this._isStandaloneSpan || this === getRootSpan(this);\n\n    if (!isSegmentSpan) {\n      return;\n    }\n\n    // if this is a standalone span, we send it immediately\n    if (this._isStandaloneSpan) {\n      if (this._sampled) {\n        sendSpanEnvelope(createSpanEnvelope([this], client));\n      } else {\n        DEBUG_BUILD &&\n          logger.log('[Tracing] Discarding standalone span because its trace was not chosen to be sampled.');\n        if (client) {\n          client.recordDroppedEvent('sample_rate', 'span');\n        }\n      }\n      return;\n    }\n\n    const transactionEvent = this._convertSpanToTransaction();\n    if (transactionEvent) {\n      const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n      scope.captureEvent(transactionEvent);\n    }\n  }\n\n  /**\n   * Finish the transaction & prepare the event to send to Sentry.\n   */\n   _convertSpanToTransaction() {\n    // We can only convert finished spans\n    if (!isFullFinishedSpan(spanToJSON(this))) {\n      return undefined;\n    }\n\n    if (!this._name) {\n      DEBUG_BUILD && logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n      this._name = '<unlabeled transaction>';\n    }\n\n    const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n    const scope = capturedSpanScope || getCurrentScope();\n    const client = scope.getClient() || getClient();\n\n    if (this._sampled !== true) {\n      // At this point if `sampled !== true` we want to discard the transaction.\n      DEBUG_BUILD && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n      if (client) {\n        client.recordDroppedEvent('sample_rate', 'transaction');\n      }\n\n      return undefined;\n    }\n\n    // The transaction span itself as well as any potential standalone spans should be filtered out\n    const finishedSpans = getSpanDescendants(this).filter(span => span !== this && !isStandaloneSpan(span));\n\n    const spans = finishedSpans.map(span => spanToJSON(span)).filter(isFullFinishedSpan);\n\n    const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] ;\n\n    const transaction = {\n      contexts: {\n        trace: spanToTransactionTraceContext(this),\n      },\n      spans:\n        // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n        // we do not use spans anymore after this point\n        spans.length > MAX_SPAN_COUNT\n          ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n          : spans,\n      start_timestamp: this._startTime,\n      timestamp: this._endTime,\n      transaction: this._name,\n      type: 'transaction',\n      sdkProcessingMetadata: {\n        capturedSpanScope,\n        capturedSpanIsolationScope,\n        ...dropUndefinedKeys({\n          dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n        }),\n      },\n      _metrics_summary: getMetricSummaryJsonForSpan(this),\n      ...(source && {\n        transaction_info: {\n          source,\n        },\n      }),\n    };\n\n    const measurements = timedEventsToMeasurements(this._events);\n    const hasMeasurements = measurements && Object.keys(measurements).length;\n\n    if (hasMeasurements) {\n      DEBUG_BUILD &&\n        logger.log(\n          '[Measurements] Adding measurements to transaction event',\n          JSON.stringify(measurements, undefined, 2),\n        );\n      transaction.measurements = measurements;\n    }\n\n    return transaction;\n  }\n}\n\nfunction isSpanTimeInput(value) {\n  return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input) {\n  return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span) {\n  return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope) {\n  const client = getClient();\n  if (!client) {\n    return;\n  }\n\n  const spanItems = envelope[1];\n  if (!spanItems || spanItems.length === 0) {\n    client.recordDroppedEvent('before_send', 'span');\n    return;\n  }\n\n  const transport = client.getTransport();\n  if (transport) {\n    transport.send(envelope).then(null, reason => {\n      DEBUG_BUILD && logger.error('Error while sending span:', reason);\n    });\n  }\n}\n\nexport { SentrySpan };\n//# sourceMappingURL=sentrySpan.js.map\n","import { propagationContextFromHeaders, generatePropagationContext, logger } from '@sentry/utils';\nimport { getMainCarrier } from '../carrier.js';\nimport { withScope, getCurrentScope, getIsolationScope, getClient } from '../currentScopes.js';\nimport { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes.js';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { _setSpanForScope, _getSpanForScope } from '../utils/spanOnScope.js';\nimport { spanToJSON, addChildSpanToSpan, spanIsSampled, spanTimeInputToSeconds, getRootSpan } from '../utils/spanUtils.js';\nimport { getDynamicSamplingContextFromSpan, freezeDscOnSpan } from './dynamicSamplingContext.js';\nimport { logSpanStart } from './logSpans.js';\nimport { sampleSpan } from './sampling.js';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { SentrySpan } from './sentrySpan.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\nimport { setCapturedScopesOnSpan } from './utils.js';\n\nconst SUPPRESS_TRACING_KEY = '__SENTRY_SUPPRESS_TRACING__';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startSpan(options, callback) {\n  const acs = getAcs();\n  if (acs.startSpan) {\n    return acs.startSpan(options, callback);\n  }\n\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan } = options;\n\n  return withScope(options.scope, () => {\n    // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n    const wrapper = getActiveSpanWrapper(customParentSpan);\n\n    return wrapper(() => {\n      const scope = getCurrentScope();\n      const parentSpan = getParentSpan(scope);\n\n      const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n      const activeSpan = shouldSkipSpan\n        ? new SentryNonRecordingSpan()\n        : createChildOrRootSpan({\n            parentSpan,\n            spanArguments,\n            forceTransaction,\n            scope,\n          });\n\n      _setSpanForScope(scope, activeSpan);\n\n      return handleCallbackErrors(\n        () => callback(activeSpan),\n        () => {\n          // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n          const { status } = spanToJSON(activeSpan);\n          if (activeSpan.isRecording() && (!status || status === 'ok')) {\n            activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n          }\n        },\n        () => activeSpan.end(),\n      );\n    });\n  });\n}\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. You'll have to call `span.end()` manually.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startSpanManual(options, callback) {\n  const acs = getAcs();\n  if (acs.startSpanManual) {\n    return acs.startSpanManual(options, callback);\n  }\n\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan } = options;\n\n  return withScope(options.scope, () => {\n    // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n    const wrapper = getActiveSpanWrapper(customParentSpan);\n\n    return wrapper(() => {\n      const scope = getCurrentScope();\n      const parentSpan = getParentSpan(scope);\n\n      const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n      const activeSpan = shouldSkipSpan\n        ? new SentryNonRecordingSpan()\n        : createChildOrRootSpan({\n            parentSpan,\n            spanArguments,\n            forceTransaction,\n            scope,\n          });\n\n      _setSpanForScope(scope, activeSpan);\n\n      function finishAndSetSpan() {\n        activeSpan.end();\n      }\n\n      return handleCallbackErrors(\n        () => callback(activeSpan, finishAndSetSpan),\n        () => {\n          // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n          const { status } = spanToJSON(activeSpan);\n          if (activeSpan.isRecording() && (!status || status === 'ok')) {\n            activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n          }\n        },\n      );\n    });\n  });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getActiveSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * This function will always return a span,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startInactiveSpan(options) {\n  const acs = getAcs();\n  if (acs.startInactiveSpan) {\n    return acs.startInactiveSpan(options);\n  }\n\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan } = options;\n\n  // If `options.scope` is defined, we use this as as a wrapper,\n  // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n  const wrapper = options.scope\n    ? (callback) => withScope(options.scope, callback)\n    : customParentSpan !== undefined\n      ? (callback) => withActiveSpan(customParentSpan, callback)\n      : (callback) => callback();\n\n  return wrapper(() => {\n    const scope = getCurrentScope();\n    const parentSpan = getParentSpan(scope);\n\n    const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n\n    if (shouldSkipSpan) {\n      return new SentryNonRecordingSpan();\n    }\n\n    return createChildOrRootSpan({\n      parentSpan,\n      spanArguments,\n      forceTransaction,\n      scope,\n    });\n  });\n}\n\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers, or in the browser from `<meta name=\"sentry-trace\">`\n * and `<meta name=\"baggage\">` HTML tags.\n *\n * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n * be attached to the incoming trace.\n */\nconst continueTrace = (\n  {\n    sentryTrace,\n    baggage,\n  }\n\n,\n  callback,\n) => {\n  return withScope(scope => {\n    const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n    scope.setPropagationContext(propagationContext);\n    return callback();\n  });\n};\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback. Can be\n * passed `null` to start an entirely new span tree.\n *\n * @param span Spans started in the context of the provided callback will be children of this span. If `null` is passed,\n * spans started within the callback will not be attached to a parent span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nfunction withActiveSpan(span, callback) {\n  const acs = getAcs();\n  if (acs.withActiveSpan) {\n    return acs.withActiveSpan(span, callback);\n  }\n\n  return withScope(scope => {\n    _setSpanForScope(scope, span || undefined);\n    return callback(scope);\n  });\n}\n\n/** Suppress tracing in the given callback, ensuring no spans are generated inside of it. */\nfunction suppressTracing(callback) {\n  const acs = getAcs();\n\n  if (acs.suppressTracing) {\n    return acs.suppressTracing(callback);\n  }\n\n  return withScope(scope => {\n    scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true });\n    return callback();\n  });\n}\n\n/**\n * Starts a new trace for the duration of the provided callback. Spans started within the\n * callback will be part of the new trace instead of a potentially previously started trace.\n *\n * Important: Only use this function if you want to override the default trace lifetime and\n * propagation mechanism of the SDK for the duration and scope of the provided callback.\n * The newly created trace will also be the root of a new distributed trace, for example if\n * you make http requests within the callback.\n * This function might be useful if the operation you want to instrument should not be part\n * of a potentially ongoing trace.\n *\n * Default behavior:\n * - Server-side: A new trace is started for each incoming request.\n * - Browser: A new trace is started for each page our route. Navigating to a new route\n *            or page will automatically create a new trace.\n */\nfunction startNewTrace(callback) {\n  return withScope(scope => {\n    scope.setPropagationContext(generatePropagationContext());\n    DEBUG_BUILD && logger.info(`Starting a new trace with id ${scope.getPropagationContext().traceId}`);\n    return withActiveSpan(null, callback);\n  });\n}\n\nfunction createChildOrRootSpan({\n  parentSpan,\n  spanArguments,\n  forceTransaction,\n  scope,\n}\n\n) {\n  if (!hasTracingEnabled()) {\n    return new SentryNonRecordingSpan();\n  }\n\n  const isolationScope = getIsolationScope();\n\n  let span;\n  if (parentSpan && !forceTransaction) {\n    span = _startChildSpan(parentSpan, scope, spanArguments);\n    addChildSpanToSpan(parentSpan, span);\n  } else if (parentSpan) {\n    // If we forced a transaction but have a parent span, make sure to continue from the parent span, not the scope\n    const dsc = getDynamicSamplingContextFromSpan(parentSpan);\n    const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n    const parentSampled = spanIsSampled(parentSpan);\n\n    span = _startRootSpan(\n      {\n        traceId,\n        parentSpanId,\n        ...spanArguments,\n      },\n      scope,\n      parentSampled,\n    );\n\n    freezeDscOnSpan(span, dsc);\n  } else {\n    const {\n      traceId,\n      dsc,\n      parentSpanId,\n      sampled: parentSampled,\n    } = {\n      ...isolationScope.getPropagationContext(),\n      ...scope.getPropagationContext(),\n    };\n\n    span = _startRootSpan(\n      {\n        traceId,\n        parentSpanId,\n        ...spanArguments,\n      },\n      scope,\n      parentSampled,\n    );\n\n    if (dsc) {\n      freezeDscOnSpan(span, dsc);\n    }\n  }\n\n  logSpanStart(span);\n\n  setCapturedScopesOnSpan(span, scope, isolationScope);\n\n  return span;\n}\n\n/**\n * This converts StartSpanOptions to SentrySpanArguments.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n */\nfunction parseSentrySpanArguments(options) {\n  const exp = options.experimental || {};\n  const initialCtx = {\n    isStandalone: exp.standalone,\n    ...options,\n  };\n\n  if (options.startTime) {\n    const ctx = { ...initialCtx };\n    ctx.startTimestamp = spanTimeInputToSeconds(options.startTime);\n    delete ctx.startTime;\n    return ctx;\n  }\n\n  return initialCtx;\n}\n\nfunction getAcs() {\n  const carrier = getMainCarrier();\n  return getAsyncContextStrategy(carrier);\n}\n\nfunction _startRootSpan(spanArguments, scope, parentSampled) {\n  const client = getClient();\n  const options = (client && client.getOptions()) || {};\n\n  const { name = '', attributes } = spanArguments;\n  const [sampled, sampleRate] = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY]\n    ? [false]\n    : sampleSpan(options, {\n        name,\n        parentSampled,\n        attributes,\n        transactionContext: {\n          name,\n          parentSampled,\n        },\n      });\n\n  const rootSpan = new SentrySpan({\n    ...spanArguments,\n    attributes: {\n      [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n      ...spanArguments.attributes,\n    },\n    sampled,\n  });\n  if (sampleRate !== undefined) {\n    rootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, sampleRate);\n  }\n\n  if (client) {\n    client.emit('spanStart', rootSpan);\n  }\n\n  return rootSpan;\n}\n\n/**\n * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n * This inherits the sampling decision from the parent span.\n */\nfunction _startChildSpan(parentSpan, scope, spanArguments) {\n  const { spanId, traceId } = parentSpan.spanContext();\n  const sampled = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] ? false : spanIsSampled(parentSpan);\n\n  const childSpan = sampled\n    ? new SentrySpan({\n        ...spanArguments,\n        parentSpanId: spanId,\n        traceId,\n        sampled,\n      })\n    : new SentryNonRecordingSpan({ traceId });\n\n  addChildSpanToSpan(parentSpan, childSpan);\n\n  const client = getClient();\n  if (client) {\n    client.emit('spanStart', childSpan);\n    // If it has an endTimestamp, it's already ended\n    if (spanArguments.endTimestamp) {\n      client.emit('spanEnd', childSpan);\n    }\n  }\n\n  return childSpan;\n}\n\nfunction getParentSpan(scope) {\n  const span = _getSpanForScope(scope) ;\n\n  if (!span) {\n    return undefined;\n  }\n\n  const client = getClient();\n  const options = client ? client.getOptions() : {};\n  if (options.parentSpanIsAlwaysRootSpan) {\n    return getRootSpan(span) ;\n  }\n\n  return span;\n}\n\nfunction getActiveSpanWrapper(parentSpan) {\n  return parentSpan !== undefined\n    ? (callback) => {\n        return withActiveSpan(parentSpan, callback);\n      }\n    : (callback) => callback();\n}\n\nexport { continueTrace, startInactiveSpan, startNewTrace, startSpan, startSpanManual, suppressTracing, withActiveSpan };\n//# sourceMappingURL=trace.js.map\n","import { timestampInSeconds, logger } from '@sentry/utils';\nimport { getClient, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON } from '../semanticAttributes.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { _setSpanForScope } from '../utils/spanOnScope.js';\nimport { getActiveSpan, spanTimeInputToSeconds, getSpanDescendants, spanToJSON, removeChildSpanFromSpan } from '../utils/spanUtils.js';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\nimport { startInactiveSpan } from './trace.js';\n\nconst TRACING_DEFAULTS = {\n  idleTimeout: 1000,\n  finalTimeout: 30000,\n  childSpanTimeout: 15000,\n};\n\nconst FINISH_REASON_HEARTBEAT_FAILED = 'heartbeatFailed';\nconst FINISH_REASON_IDLE_TIMEOUT = 'idleTimeout';\nconst FINISH_REASON_FINAL_TIMEOUT = 'finalTimeout';\nconst FINISH_REASON_EXTERNAL_FINISH = 'externalFinish';\n\n/**\n * An idle span is a span that automatically finishes. It does this by tracking child spans as activities.\n * An idle span is always the active span.\n */\nfunction startIdleSpan(startSpanOptions, options = {}) {\n  // Activities store a list of active spans\n  const activities = new Map();\n\n  // We should not use heartbeat if we finished a span\n  let _finished = false;\n\n  // Timer that tracks idleTimeout\n  let _idleTimeoutID;\n\n  // The reason why the span was finished\n  let _finishReason = FINISH_REASON_EXTERNAL_FINISH;\n\n  let _autoFinishAllowed = !options.disableAutoFinish;\n\n  const _cleanupHooks = [];\n\n  const {\n    idleTimeout = TRACING_DEFAULTS.idleTimeout,\n    finalTimeout = TRACING_DEFAULTS.finalTimeout,\n    childSpanTimeout = TRACING_DEFAULTS.childSpanTimeout,\n    beforeSpanEnd,\n  } = options;\n\n  const client = getClient();\n\n  if (!client || !hasTracingEnabled()) {\n    return new SentryNonRecordingSpan();\n  }\n\n  const scope = getCurrentScope();\n  const previousActiveSpan = getActiveSpan();\n  const span = _startIdleSpan(startSpanOptions);\n\n  // We patch span.end to ensure we can run some things before the span is ended\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  span.end = new Proxy(span.end, {\n    apply(target, thisArg, args) {\n      if (beforeSpanEnd) {\n        beforeSpanEnd(span);\n      }\n\n      // Just ensuring that this keeps working, even if we ever have more arguments here\n      const [definedEndTimestamp, ...rest] = args;\n      const timestamp = definedEndTimestamp || timestampInSeconds();\n      const spanEndTimestamp = spanTimeInputToSeconds(timestamp);\n\n      // Ensure we end with the last span timestamp, if possible\n      const spans = getSpanDescendants(span).filter(child => child !== span);\n\n      // If we have no spans, we just end, nothing else to do here\n      if (!spans.length) {\n        onIdleSpanEnded(spanEndTimestamp);\n        return Reflect.apply(target, thisArg, [spanEndTimestamp, ...rest]);\n      }\n\n      const childEndTimestamps = spans\n        .map(span => spanToJSON(span).timestamp)\n        .filter(timestamp => !!timestamp) ;\n      const latestSpanEndTimestamp = childEndTimestamps.length ? Math.max(...childEndTimestamps) : undefined;\n\n      // In reality this should always exist here, but type-wise it may be undefined...\n      const spanStartTimestamp = spanToJSON(span).start_timestamp;\n\n      // The final endTimestamp should:\n      // * Never be before the span start timestamp\n      // * Be the latestSpanEndTimestamp, if there is one, and it is smaller than the passed span end timestamp\n      // * Otherwise be the passed end timestamp\n      // Final timestamp can never be after finalTimeout\n      const endTimestamp = Math.min(\n        spanStartTimestamp ? spanStartTimestamp + finalTimeout / 1000 : Infinity,\n        Math.max(spanStartTimestamp || -Infinity, Math.min(spanEndTimestamp, latestSpanEndTimestamp || Infinity)),\n      );\n\n      onIdleSpanEnded(endTimestamp);\n      return Reflect.apply(target, thisArg, [endTimestamp, ...rest]);\n    },\n  });\n\n  /**\n   * Cancels the existing idle timeout, if there is one.\n   */\n  function _cancelIdleTimeout() {\n    if (_idleTimeoutID) {\n      clearTimeout(_idleTimeoutID);\n      _idleTimeoutID = undefined;\n    }\n  }\n\n  /**\n   * Restarts idle timeout, if there is no running idle timeout it will start one.\n   */\n  function _restartIdleTimeout(endTimestamp) {\n    _cancelIdleTimeout();\n    _idleTimeoutID = setTimeout(() => {\n      if (!_finished && activities.size === 0 && _autoFinishAllowed) {\n        _finishReason = FINISH_REASON_IDLE_TIMEOUT;\n        span.end(endTimestamp);\n      }\n    }, idleTimeout);\n  }\n\n  /**\n   * Restarts child span timeout, if there is none running it will start one.\n   */\n  function _restartChildSpanTimeout(endTimestamp) {\n    _idleTimeoutID = setTimeout(() => {\n      if (!_finished && _autoFinishAllowed) {\n        _finishReason = FINISH_REASON_HEARTBEAT_FAILED;\n        span.end(endTimestamp);\n      }\n    }, childSpanTimeout);\n  }\n\n  /**\n   * Start tracking a specific activity.\n   * @param spanId The span id that represents the activity\n   */\n  function _pushActivity(spanId) {\n    _cancelIdleTimeout();\n    activities.set(spanId, true);\n\n    const endTimestamp = timestampInSeconds();\n    // We need to add the timeout here to have the real endtimestamp of the idle span\n    // Remember timestampInSeconds is in seconds, timeout is in ms\n    _restartChildSpanTimeout(endTimestamp + childSpanTimeout / 1000);\n  }\n\n  /**\n   * Remove an activity from usage\n   * @param spanId The span id that represents the activity\n   */\n  function _popActivity(spanId) {\n    if (activities.has(spanId)) {\n      activities.delete(spanId);\n    }\n\n    if (activities.size === 0) {\n      const endTimestamp = timestampInSeconds();\n      // We need to add the timeout here to have the real endtimestamp of the idle span\n      // Remember timestampInSeconds is in seconds, timeout is in ms\n      _restartIdleTimeout(endTimestamp + idleTimeout / 1000);\n    }\n  }\n\n  function onIdleSpanEnded(endTimestamp) {\n    _finished = true;\n    activities.clear();\n\n    _cleanupHooks.forEach(cleanup => cleanup());\n\n    _setSpanForScope(scope, previousActiveSpan);\n\n    const spanJSON = spanToJSON(span);\n\n    const { start_timestamp: startTimestamp } = spanJSON;\n    // This should never happen, but to make TS happy...\n    if (!startTimestamp) {\n      return;\n    }\n\n    const attributes = spanJSON.data || {};\n    if (!attributes[SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON]) {\n      span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, _finishReason);\n    }\n\n    logger.log(`[Tracing] Idle span \"${spanJSON.op}\" finished`);\n\n    const childSpans = getSpanDescendants(span).filter(child => child !== span);\n\n    let discardedSpans = 0;\n    childSpans.forEach(childSpan => {\n      // We cancel all pending spans with status \"cancelled\" to indicate the idle span was finished early\n      if (childSpan.isRecording()) {\n        childSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'cancelled' });\n        childSpan.end(endTimestamp);\n        DEBUG_BUILD &&\n          logger.log('[Tracing] Cancelling span since span ended early', JSON.stringify(childSpan, undefined, 2));\n      }\n\n      const childSpanJSON = spanToJSON(childSpan);\n      const { timestamp: childEndTimestamp = 0, start_timestamp: childStartTimestamp = 0 } = childSpanJSON;\n\n      const spanStartedBeforeIdleSpanEnd = childStartTimestamp <= endTimestamp;\n\n      // Add a delta with idle timeout so that we prevent false positives\n      const timeoutWithMarginOfError = (finalTimeout + idleTimeout) / 1000;\n      const spanEndedBeforeFinalTimeout = childEndTimestamp - childStartTimestamp <= timeoutWithMarginOfError;\n\n      if (DEBUG_BUILD) {\n        const stringifiedSpan = JSON.stringify(childSpan, undefined, 2);\n        if (!spanStartedBeforeIdleSpanEnd) {\n          logger.log('[Tracing] Discarding span since it happened after idle span was finished', stringifiedSpan);\n        } else if (!spanEndedBeforeFinalTimeout) {\n          logger.log('[Tracing] Discarding span since it finished after idle span final timeout', stringifiedSpan);\n        }\n      }\n\n      if (!spanEndedBeforeFinalTimeout || !spanStartedBeforeIdleSpanEnd) {\n        removeChildSpanFromSpan(span, childSpan);\n        discardedSpans++;\n      }\n    });\n\n    if (discardedSpans > 0) {\n      span.setAttribute('sentry.idle_span_discarded_spans', discardedSpans);\n    }\n  }\n\n  _cleanupHooks.push(\n    client.on('spanStart', startedSpan => {\n      // If we already finished the idle span,\n      // or if this is the idle span itself being started,\n      // or if the started span has already been closed,\n      // we don't care about it for activity\n      if (_finished || startedSpan === span || !!spanToJSON(startedSpan).timestamp) {\n        return;\n      }\n\n      const allSpans = getSpanDescendants(span);\n\n      // If the span that was just started is a child of the idle span, we should track it\n      if (allSpans.includes(startedSpan)) {\n        _pushActivity(startedSpan.spanContext().spanId);\n      }\n    }),\n  );\n\n  _cleanupHooks.push(\n    client.on('spanEnd', endedSpan => {\n      if (_finished) {\n        return;\n      }\n\n      _popActivity(endedSpan.spanContext().spanId);\n    }),\n  );\n\n  _cleanupHooks.push(\n    client.on('idleSpanEnableAutoFinish', spanToAllowAutoFinish => {\n      if (spanToAllowAutoFinish === span) {\n        _autoFinishAllowed = true;\n        _restartIdleTimeout();\n\n        if (activities.size) {\n          _restartChildSpanTimeout();\n        }\n      }\n    }),\n  );\n\n  // We only start the initial idle timeout if we are not delaying the auto finish\n  if (!options.disableAutoFinish) {\n    _restartIdleTimeout();\n  }\n\n  setTimeout(() => {\n    if (!_finished) {\n      span.setStatus({ code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' });\n      _finishReason = FINISH_REASON_FINAL_TIMEOUT;\n      span.end();\n    }\n  }, finalTimeout);\n\n  return span;\n}\n\nfunction _startIdleSpan(options) {\n  const span = startInactiveSpan(options);\n\n  _setSpanForScope(getCurrentScope(), span);\n\n  DEBUG_BUILD && logger.log('[Tracing] Started span is an idle span');\n\n  return span;\n}\n\nexport { TRACING_DEFAULTS, startIdleSpan };\n//# sourceMappingURL=idleSpan.js.map\n","import { SyncPromise, logger, isThenable } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nfunction notifyEventProcessors(\n  processors,\n  event,\n  hint,\n  index = 0,\n) {\n  return new SyncPromise((resolve, reject) => {\n    const processor = processors[index];\n    if (event === null || typeof processor !== 'function') {\n      resolve(event);\n    } else {\n      const result = processor({ ...event }, hint) ;\n\n      DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n      if (isThenable(result)) {\n        void result\n          .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n          .then(null, reject);\n      } else {\n        void notifyEventProcessors(processors, result, hint, index + 1)\n          .then(resolve)\n          .then(null, reject);\n      }\n    }\n  });\n}\n\nexport { notifyEventProcessors };\n//# sourceMappingURL=eventProcessors.js.map\n","import { dropUndefinedKeys, arrayify } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext.js';\nimport { spanToTraceContext, getRootSpan, spanToJSON } from './spanUtils.js';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nfunction applyScopeDataToEvent(event, data) {\n  const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n  // Apply general data\n  applyDataToEvent(event, data);\n\n  // We want to set the trace context for normal events only if there isn't already\n  // a trace context on the event. There is a product feature in place where we link\n  // errors with transaction and it relies on that.\n  if (span) {\n    applySpanToEvent(event, span);\n  }\n\n  applyFingerprintToEvent(event, fingerprint);\n  applyBreadcrumbsToEvent(event, breadcrumbs);\n  applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nfunction mergeScopeData(data, mergeData) {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    sdkProcessingMetadata,\n    breadcrumbs,\n    fingerprint,\n    eventProcessors,\n    attachments,\n    propagationContext,\n    transactionName,\n    span,\n  } = mergeData;\n\n  mergeAndOverwriteScopeData(data, 'extra', extra);\n  mergeAndOverwriteScopeData(data, 'tags', tags);\n  mergeAndOverwriteScopeData(data, 'user', user);\n  mergeAndOverwriteScopeData(data, 'contexts', contexts);\n  mergeAndOverwriteScopeData(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n  if (level) {\n    data.level = level;\n  }\n\n  if (transactionName) {\n    data.transactionName = transactionName;\n  }\n\n  if (span) {\n    data.span = span;\n  }\n\n  if (breadcrumbs.length) {\n    data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n  }\n\n  if (fingerprint.length) {\n    data.fingerprint = [...data.fingerprint, ...fingerprint];\n  }\n\n  if (eventProcessors.length) {\n    data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n  }\n\n  if (attachments.length) {\n    data.attachments = [...data.attachments, ...attachments];\n  }\n\n  data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nfunction mergeAndOverwriteScopeData\n\n(data, prop, mergeVal) {\n  if (mergeVal && Object.keys(mergeVal).length) {\n    // Clone object\n    data[prop] = { ...data[prop] };\n    for (const key in mergeVal) {\n      if (Object.prototype.hasOwnProperty.call(mergeVal, key)) {\n        data[prop][key] = mergeVal[key];\n      }\n    }\n  }\n}\n\nfunction applyDataToEvent(event, data) {\n  const { extra, tags, user, contexts, level, transactionName } = data;\n\n  const cleanedExtra = dropUndefinedKeys(extra);\n  if (cleanedExtra && Object.keys(cleanedExtra).length) {\n    event.extra = { ...cleanedExtra, ...event.extra };\n  }\n\n  const cleanedTags = dropUndefinedKeys(tags);\n  if (cleanedTags && Object.keys(cleanedTags).length) {\n    event.tags = { ...cleanedTags, ...event.tags };\n  }\n\n  const cleanedUser = dropUndefinedKeys(user);\n  if (cleanedUser && Object.keys(cleanedUser).length) {\n    event.user = { ...cleanedUser, ...event.user };\n  }\n\n  const cleanedContexts = dropUndefinedKeys(contexts);\n  if (cleanedContexts && Object.keys(cleanedContexts).length) {\n    event.contexts = { ...cleanedContexts, ...event.contexts };\n  }\n\n  if (level) {\n    event.level = level;\n  }\n\n  // transaction events get their `transaction` from the root span name\n  if (transactionName && event.type !== 'transaction') {\n    event.transaction = transactionName;\n  }\n}\n\nfunction applyBreadcrumbsToEvent(event, breadcrumbs) {\n  const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n  event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event, sdkProcessingMetadata) {\n  event.sdkProcessingMetadata = {\n    ...event.sdkProcessingMetadata,\n    ...sdkProcessingMetadata,\n  };\n}\n\nfunction applySpanToEvent(event, span) {\n  event.contexts = {\n    trace: spanToTraceContext(span),\n    ...event.contexts,\n  };\n\n  event.sdkProcessingMetadata = {\n    dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n    ...event.sdkProcessingMetadata,\n  };\n\n  const rootSpan = getRootSpan(span);\n  const transactionName = spanToJSON(rootSpan).description;\n  if (transactionName && !event.transaction && event.type === 'transaction') {\n    event.transaction = transactionName;\n  }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event, fingerprint) {\n  // Make sure it's an array first and we actually have something in place\n  event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n  // If we have something on the scope, then merge it with event\n  if (fingerprint) {\n    event.fingerprint = event.fingerprint.concat(fingerprint);\n  }\n\n  // If we have no data at all, remove empty array default\n  if (event.fingerprint && !event.fingerprint.length) {\n    delete event.fingerprint;\n  }\n}\n\nexport { applyScopeDataToEvent, mergeAndOverwriteScopeData, mergeScopeData };\n//# sourceMappingURL=applyScopeDataToEvent.js.map\n","import { uuid4, dateTimestampInSeconds, addExceptionMechanism, truncate, GLOBAL_OBJ, normalize } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getGlobalScope } from '../currentScopes.js';\nimport { notifyEventProcessors } from '../eventProcessors.js';\nimport { Scope } from '../scope.js';\nimport { mergeScopeData, applyScopeDataToEvent } from './applyScopeDataToEvent.js';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nfunction prepareEvent(\n  options,\n  event,\n  hint,\n  scope,\n  client,\n  isolationScope,\n) {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = options;\n  const prepared = {\n    ...event,\n    event_id: event.event_id || hint.event_id || uuid4(),\n    timestamp: event.timestamp || dateTimestampInSeconds(),\n  };\n  const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n\n  if (client) {\n    client.emit('applyFrameMetadata', event);\n  }\n\n  // Only put debug IDs onto frames for error events.\n  if (event.type === undefined) {\n    applyDebugIds(prepared, options.stackParser);\n  }\n\n  // If we have scope given to us, use it as the base for further modifications.\n  // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n  const finalScope = getFinalScope(scope, hint.captureContext);\n\n  if (hint.mechanism) {\n    addExceptionMechanism(prepared, hint.mechanism);\n  }\n\n  const clientEventProcessors = client ? client.getEventProcessors() : [];\n\n  // This should be the last thing called, since we want that\n  // {@link Scope.addEventProcessor} gets the finished prepared event.\n  // Merge scope data together\n  const data = getGlobalScope().getScopeData();\n\n  if (isolationScope) {\n    const isolationData = isolationScope.getScopeData();\n    mergeScopeData(data, isolationData);\n  }\n\n  if (finalScope) {\n    const finalScopeData = finalScope.getScopeData();\n    mergeScopeData(data, finalScopeData);\n  }\n\n  const attachments = [...(hint.attachments || []), ...data.attachments];\n  if (attachments.length) {\n    hint.attachments = attachments;\n  }\n\n  applyScopeDataToEvent(prepared, data);\n\n  const eventProcessors = [\n    ...clientEventProcessors,\n    // Run scope event processors _after_ all other processors\n    ...data.eventProcessors,\n  ];\n\n  const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n  return result.then(evt => {\n    if (evt) {\n      // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n      // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n      // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n      // any new data\n      applyDebugMeta(evt);\n    }\n\n    if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\n}\n\n/**\n *  Enhances event using the client configuration.\n *  It takes care of all \"static\" values like environment, release and `dist`,\n *  as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event, options) {\n  const { environment, release, dist, maxValueLength = 250 } = options;\n\n  if (!('environment' in event)) {\n    event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n  }\n\n  if (event.release === undefined && release !== undefined) {\n    event.release = release;\n  }\n\n  if (event.dist === undefined && dist !== undefined) {\n    event.dist = dist;\n  }\n\n  if (event.message) {\n    event.message = truncate(event.message, maxValueLength);\n  }\n\n  const exception = event.exception && event.exception.values && event.exception.values[0];\n  if (exception && exception.value) {\n    exception.value = truncate(exception.value, maxValueLength);\n  }\n\n  const request = event.request;\n  if (request && request.url) {\n    request.url = truncate(request.url, maxValueLength);\n  }\n}\n\nconst debugIdStackParserCache = new WeakMap();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nfunction applyDebugIds(event, stackParser) {\n  const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n  if (!debugIdMap) {\n    return;\n  }\n\n  let debugIdStackFramesCache;\n  const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n  if (cachedDebugIdStackFrameCache) {\n    debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n  } else {\n    debugIdStackFramesCache = new Map();\n    debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n  }\n\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = Object.entries(debugIdMap).reduce(\n    (acc, [debugIdStackTrace, debugIdValue]) => {\n      let parsedStack;\n      const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n      if (cachedParsedStack) {\n        parsedStack = cachedParsedStack;\n      } else {\n        parsedStack = stackParser(debugIdStackTrace);\n        debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n      }\n\n      for (let i = parsedStack.length - 1; i >= 0; i--) {\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        const stackFrame = parsedStack[i];\n        if (stackFrame.filename) {\n          acc[stackFrame.filename] = debugIdValue;\n          break;\n        }\n      }\n      return acc;\n    },\n    {},\n  );\n\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception.values.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace.frames.forEach(frame => {\n        if (frame.filename) {\n          frame.debug_id = filenameDebugIdMap[frame.filename];\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nfunction applyDebugMeta(event) {\n  // Extract debug IDs and filenames from the stack frames on the event.\n  const filenameDebugIdMap = {};\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception.values.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace.frames.forEach(frame => {\n        if (frame.debug_id) {\n          if (frame.abs_path) {\n            filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n          } else if (frame.filename) {\n            filenameDebugIdMap[frame.filename] = frame.debug_id;\n          }\n          delete frame.debug_id;\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n\n  // Fill debug_meta information\n  event.debug_meta = event.debug_meta || {};\n  event.debug_meta.images = event.debug_meta.images || [];\n  const images = event.debug_meta.images;\n  Object.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => {\n    images.push({\n      type: 'sourcemap',\n      code_file: filename,\n      debug_id,\n    });\n  });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event, integrationNames) {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n  }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event, depth, maxBreadth) {\n  if (!event) {\n    return null;\n  }\n\n  const normalized = {\n    ...event,\n    ...(event.breadcrumbs && {\n      breadcrumbs: event.breadcrumbs.map(b => ({\n        ...b,\n        ...(b.data && {\n          data: normalize(b.data, depth, maxBreadth),\n        }),\n      })),\n    }),\n    ...(event.user && {\n      user: normalize(event.user, depth, maxBreadth),\n    }),\n    ...(event.contexts && {\n      contexts: normalize(event.contexts, depth, maxBreadth),\n    }),\n    ...(event.extra && {\n      extra: normalize(event.extra, depth, maxBreadth),\n    }),\n  };\n\n  // event.contexts.trace stores information about a Transaction. Similarly,\n  // event.spans[] stores information about child Spans. Given that a\n  // Transaction is conceptually a Span, normalization should apply to both\n  // Transactions and Spans consistently.\n  // For now the decision is to skip normalization of Transactions and Spans,\n  // so this block overwrites the normalized event to add back the original\n  // Transaction information prior to normalization.\n  if (event.contexts && event.contexts.trace && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n\n    // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n\n  // event.spans[].data may contain circular/dangerous data so we need to normalize it\n  if (event.spans) {\n    normalized.spans = event.spans.map(span => {\n      return {\n        ...span,\n        ...(span.data && {\n          data: normalize(span.data, depth, maxBreadth),\n        }),\n      };\n    });\n  }\n\n  return normalized;\n}\n\nfunction getFinalScope(\n  scope,\n  captureContext,\n) {\n  if (!captureContext) {\n    return scope;\n  }\n\n  const finalScope = scope ? scope.clone() : new Scope();\n  finalScope.update(captureContext);\n  return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nfunction parseEventHintOrCaptureContext(\n  hint,\n) {\n  if (!hint) {\n    return undefined;\n  }\n\n  // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n  if (hintIsScopeOrFunction(hint)) {\n    return { captureContext: hint };\n  }\n\n  if (hintIsScopeContext(hint)) {\n    return {\n      captureContext: hint,\n    };\n  }\n\n  return hint;\n}\n\nfunction hintIsScopeOrFunction(\n  hint,\n) {\n  return hint instanceof Scope || typeof hint === 'function';\n}\n\nconst captureContextKeys = [\n  'user',\n  'level',\n  'extra',\n  'contexts',\n  'tags',\n  'fingerprint',\n  'requestSession',\n  'propagationContext',\n] ;\n\nfunction hintIsScopeContext(hint) {\n  return Object.keys(hint).some(key => captureContextKeys.includes(key ));\n}\n\nexport { applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { logger, uuid4, timestampInSeconds, isThenable, GLOBAL_OBJ } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { getCurrentScope, getIsolationScope, getClient, withIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { makeSession, updateSession, closeSession } from './session.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureException(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  exception,\n  hint,\n) {\n  return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nfunction captureMessage(message, captureContext) {\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n  return getCurrentScope().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nfunction captureEvent(event, hint) {\n  return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setContext(name, context) {\n  getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nfunction setExtras(extras) {\n  getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nfunction setExtra(key, extra) {\n  getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nfunction setTags(tags) {\n  getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nfunction setTag(key, value) {\n  getIsolationScope().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nfunction setUser(user) {\n  getIsolationScope().setUser(user);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nfunction lastEventId() {\n  return getIsolationScope().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction captureCheckIn(checkIn, upsertMonitorConfig) {\n  const scope = getCurrentScope();\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n  } else if (!client.captureCheckIn) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n  } else {\n    return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n  }\n\n  return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction withMonitor(\n  monitorSlug,\n  callback,\n  upsertMonitorConfig,\n) {\n  const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n  const now = timestampInSeconds();\n\n  function finishCheckIn(status) {\n    captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n  }\n\n  return withIsolationScope(() => {\n    let maybePromiseResult;\n    try {\n      maybePromiseResult = callback();\n    } catch (e) {\n      finishCheckIn('error');\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      Promise.resolve(maybePromiseResult).then(\n        () => {\n          finishCheckIn('ok');\n        },\n        () => {\n          finishCheckIn('error');\n        },\n      );\n    } else {\n      finishCheckIn('ok');\n    }\n\n    return maybePromiseResult;\n  });\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function flush(timeout) {\n  const client = getClient();\n  if (client) {\n    return client.flush(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function close(timeout) {\n  const client = getClient();\n  if (client) {\n    return client.close(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nfunction isInitialized() {\n  return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nfunction isEnabled() {\n  const client = getClient();\n  return !!client && client.getOptions().enabled !== false && !!client.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nfunction addEventProcessor(callback) {\n  getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nfunction startSession(context) {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n  // Will fetch userAgent if called from browser sdk\n  const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n  const session = makeSession({\n    release,\n    environment,\n    user: currentScope.getUser() || isolationScope.getUser(),\n    ...(userAgent && { userAgent }),\n    ...context,\n  });\n\n  // End existing session if there's one\n  const currentSession = isolationScope.getSession();\n  if (currentSession && currentSession.status === 'ok') {\n    updateSession(currentSession, { status: 'exited' });\n  }\n\n  endSession();\n\n  // Afterwards we set the new session on the scope\n  isolationScope.setSession(session);\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession(session);\n\n  return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nfunction endSession() {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    closeSession(session);\n  }\n  _sendSessionUpdate();\n\n  // the session is over; take it off of the scope\n  isolationScope.setSession();\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate() {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n  const client = getClient();\n  // TODO (v8): Remove currentScope and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session && client) {\n    client.captureSession(session);\n  }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n *            Defaults to `false`.\n */\nfunction captureSession(end = false) {\n  // both send the update and pull the session from the scope\n  if (end) {\n    endSession();\n    return;\n  }\n\n  // only send the update\n  _sendSessionUpdate();\n}\n\nexport { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor };\n//# sourceMappingURL=exports.js.map\n","import { makeDsn, dsnToString, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn) {\n  const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n  const port = dsn.port ? `:${dsn.port}` : '';\n  return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn) {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn, sdkInfo) {\n  return urlEncode({\n    // We send only the minimum set of required information. See\n    // https://github.com/getsentry/sentry-javascript/issues/2572.\n    sentry_key: dsn.publicKey,\n    sentry_version: SENTRY_API_VERSION,\n    ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n  });\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nfunction getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) {\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nfunction getReportDialogEndpoint(\n  dsnLike,\n  dialogOptions\n\n,\n) {\n  const dsn = makeDsn(dsnLike);\n  if (!dsn) {\n    return '';\n  }\n\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === 'dsn') {\n      continue;\n    }\n\n    if (key === 'onClose') {\n      continue;\n    }\n\n    if (key === 'user') {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] )}`;\n    }\n  }\n\n  return `${endpoint}?${encodedOptions}`;\n}\n\nexport { getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint };\n//# sourceMappingURL=api.js.map\n","import { arrayify, logger } from '@sentry/utils';\nimport { getClient } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\n\nconst installedIntegrations = [];\n\n/** Map of integrations assigned to a client */\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preserve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations) {\n  const integrationsByName = {};\n\n  integrations.forEach(currentInstance => {\n    const { name } = currentInstance;\n\n    const existingInstance = integrationsByName[name];\n\n    // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n    // default instance to overwrite an existing user instance\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n\n    integrationsByName[name] = currentInstance;\n  });\n\n  return Object.values(integrationsByName);\n}\n\n/** Gets integrations to install */\nfunction getIntegrationsToSetup(options) {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n\n  // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n  defaultIntegrations.forEach(integration => {\n    integration.isDefaultInstance = true;\n  });\n\n  let integrations;\n\n  if (Array.isArray(userIntegrations)) {\n    integrations = [...defaultIntegrations, ...userIntegrations];\n  } else if (typeof userIntegrations === 'function') {\n    integrations = arrayify(userIntegrations(defaultIntegrations));\n  } else {\n    integrations = defaultIntegrations;\n  }\n\n  const finalIntegrations = filterDuplicates(integrations);\n\n  // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n  // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n  // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n  // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n  const debugIndex = finalIntegrations.findIndex(integration => integration.name === 'Debug');\n  if (debugIndex > -1) {\n    const [debugInstance] = finalIntegrations.splice(debugIndex, 1) ;\n    finalIntegrations.push(debugInstance);\n  }\n\n  return finalIntegrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nfunction setupIntegrations(client, integrations) {\n  const integrationIndex = {};\n\n  integrations.forEach(integration => {\n    // guard against empty provided integrations\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n\n  return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nfunction afterSetupIntegrations(client, integrations) {\n  for (const integration of integrations) {\n    // guard against empty provided integrations\n    if (integration && integration.afterAllSetup) {\n      integration.afterAllSetup(client);\n    }\n  }\n}\n\n/** Setup a single integration.  */\nfunction setupIntegration(client, integration, integrationIndex) {\n  if (integrationIndex[integration.name]) {\n    DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n    return;\n  }\n  integrationIndex[integration.name] = integration;\n\n  // `setupOnce` is only called the first time\n  if (installedIntegrations.indexOf(integration.name) === -1 && typeof integration.setupOnce === 'function') {\n    integration.setupOnce();\n    installedIntegrations.push(integration.name);\n  }\n\n  // `setup` is run for each client\n  if (integration.setup && typeof integration.setup === 'function') {\n    integration.setup(client);\n  }\n\n  if (typeof integration.preprocessEvent === 'function') {\n    const callback = integration.preprocessEvent.bind(integration) ;\n    client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n  }\n\n  if (typeof integration.processEvent === 'function') {\n    const callback = integration.processEvent.bind(integration) ;\n\n    const processor = Object.assign((event, hint) => callback(event, hint, client), {\n      id: integration.name,\n    });\n\n    client.addEventProcessor(processor);\n  }\n\n  DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current scope's client. */\nfunction addIntegration(integration) {\n  const client = getClient();\n\n  if (!client) {\n    DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n\n  client.addIntegration(integration);\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nfunction defineIntegration(fn) {\n  return fn;\n}\n\nexport { addIntegration, afterSetupIntegrations, defineIntegration, getIntegrationsToSetup, installedIntegrations, setupIntegration, setupIntegrations };\n//# sourceMappingURL=integration.js.map\n","import { makeDsn, logger, uuid4, checkOrSetAlreadyCaught, isParameterizedString, isPrimitive, resolvedSyncPromise, addItemToEnvelope, createAttachmentEnvelopeItem, SyncPromise, dropUndefinedKeys, rejectedSyncPromise, SentryError, createClientReportEnvelope, dsnToString, isThenable, isPlainObject } from '@sentry/utils';\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api.js';\nimport { getIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope.js';\nimport { setupIntegration, afterSetupIntegrations, setupIntegrations } from './integration.js';\nimport { updateSession } from './session.js';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext.js';\nimport { parseSampleRate } from './utils/parseSampleRate.js';\nimport { prepareEvent } from './utils/prepareEvent.js';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(options);\n *   }\n *\n *   // ...\n * }\n */\nclass BaseClient {\n  /** Options passed to the SDK. */\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n\n  /** Array of set up integrations. */\n\n  /** Number of calls being processed */\n\n  /** Holds flushable  */\n\n  // eslint-disable-next-line @typescript-eslint/ban-types\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n   constructor(options) {\n    this._options = options;\n    this._integrations = {};\n    this._numProcessing = 0;\n    this._outcomes = {};\n    this._hooks = {};\n    this._eventProcessors = [];\n\n    if (options.dsn) {\n      this._dsn = makeDsn(options.dsn);\n    } else {\n      DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n    }\n\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(\n        this._dsn,\n        options.tunnel,\n        options._metadata ? options._metadata.sdk : undefined,\n      );\n      this._transport = options.transport({\n        tunnel: this._options.tunnel,\n        recordDroppedEvent: this.recordDroppedEvent.bind(this),\n        ...options.transportOptions,\n        url,\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n   captureException(exception, hint, scope) {\n    const eventId = uuid4();\n\n    // ensure we haven't captured this very object before\n    if (checkOrSetAlreadyCaught(exception)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint,\n    };\n\n    this._process(\n      this.eventFromException(exception, hintWithEventId).then(event =>\n        this._captureEvent(event, hintWithEventId, scope),\n      ),\n    );\n\n    return hintWithEventId.event_id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureMessage(\n    message,\n    level,\n    hint,\n    currentScope,\n  ) {\n    const hintWithEventId = {\n      event_id: uuid4(),\n      ...hint,\n    };\n\n    const eventMessage = isParameterizedString(message) ? message : String(message);\n\n    const promisedEvent = isPrimitive(message)\n      ? this.eventFromMessage(eventMessage, level, hintWithEventId)\n      : this.eventFromException(message, hintWithEventId);\n\n    this._process(promisedEvent.then(event => this._captureEvent(event, hintWithEventId, currentScope)));\n\n    return hintWithEventId.event_id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureEvent(event, hint, currentScope) {\n    const eventId = uuid4();\n\n    // ensure we haven't captured this very object before\n    if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint,\n    };\n\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;\n\n    this._process(this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope));\n\n    return hintWithEventId.event_id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureSession(session) {\n    if (!(typeof session.release === 'string')) {\n      DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n    } else {\n      this.sendSession(session);\n      // After sending, we set init false to indicate it's not the first occurrence\n      updateSession(session, { init: false });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getDsn() {\n    return this._dsn;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getOptions() {\n    return this._options;\n  }\n\n  /**\n   * @see SdkMetadata in @sentry/types\n   *\n   * @return The metadata of the SDK\n   */\n   getSdkMetadata() {\n    return this._options._metadata;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getTransport() {\n    return this._transport;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   flush(timeout) {\n    const transport = this._transport;\n    if (transport) {\n      this.emit('flush');\n      return this._isClientDoneProcessing(timeout).then(clientFinished => {\n        return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n      });\n    } else {\n      return resolvedSyncPromise(true);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   close(timeout) {\n    return this.flush(timeout).then(result => {\n      this.getOptions().enabled = false;\n      this.emit('close');\n      return result;\n    });\n  }\n\n  /** Get all installed event processors. */\n   getEventProcessors() {\n    return this._eventProcessors;\n  }\n\n  /** @inheritDoc */\n   addEventProcessor(eventProcessor) {\n    this._eventProcessors.push(eventProcessor);\n  }\n\n  /** @inheritdoc */\n   init() {\n    if (\n      this._isEnabled() ||\n      // Force integrations to be setup even if no DSN was set when we have\n      // Spotlight enabled. This is particularly important for browser as we\n      // don't support the `spotlight` option there and rely on the users\n      // adding the `spotlightBrowserIntegration()` to their integrations which\n      // wouldn't get initialized with the check below when there's no DSN set.\n      this._options.integrations.some(({ name }) => name.startsWith('Spotlight'))\n    ) {\n      this._setupIntegrations();\n    }\n  }\n\n  /**\n   * Gets an installed integration by its name.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n   */\n   getIntegrationByName(integrationName) {\n    return this._integrations[integrationName] ;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addIntegration(integration) {\n    const isAlreadyInstalled = this._integrations[integration.name];\n\n    // This hook takes care of only installing if not already installed\n    setupIntegration(this, integration, this._integrations);\n    // Here we need to check manually to make sure to not run this multiple times\n    if (!isAlreadyInstalled) {\n      afterSetupIntegrations(this, [integration]);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   sendEvent(event, hint = {}) {\n    this.emit('beforeSendEvent', event, hint);\n\n    let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n    for (const attachment of hint.attachments || []) {\n      env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment));\n    }\n\n    const promise = this.sendEnvelope(env);\n    if (promise) {\n      promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   sendSession(session) {\n    const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(env);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   recordDroppedEvent(reason, category, eventOrCount) {\n    if (this._options.sendClientReports) {\n      // TODO v9: We do not need the `event` passed as third argument anymore, and can possibly remove this overload\n      // If event is passed as third argument, we assume this is a count of 1\n      const count = typeof eventOrCount === 'number' ? eventOrCount : 1;\n\n      // We want to track each category (error, transaction, session, replay_event) separately\n      // but still keep the distinction between different type of outcomes.\n      // We could use nested maps, but it's much easier to read and type this way.\n      // A correct type for map-based implementation if we want to go that route\n      // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n      // With typescript 4.1 we could even use template literal types\n      const key = `${reason}:${category}`;\n      DEBUG_BUILD && logger.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : ''}`);\n      this._outcomes[key] = (this._outcomes[key] || 0) + count;\n    }\n  }\n\n  // Keep on() & emit() signatures in sync with types' client.ts interface\n  /* eslint-disable @typescript-eslint/unified-signatures */\n\n  /** @inheritdoc */\n\n  /** @inheritdoc */\n   on(hook, callback) {\n    const hooks = (this._hooks[hook] = this._hooks[hook] || []);\n\n    // @ts-expect-error We assue the types are correct\n    hooks.push(callback);\n\n    // This function returns a callback execution handler that, when invoked,\n    // deregisters a callback. This is crucial for managing instances where callbacks\n    // need to be unregistered to prevent self-referencing in callback closures,\n    // ensuring proper garbage collection.\n    return () => {\n      // @ts-expect-error We assue the types are correct\n      const cbIndex = hooks.indexOf(callback);\n      if (cbIndex > -1) {\n        hooks.splice(cbIndex, 1);\n      }\n    };\n  }\n\n  /** @inheritdoc */\n\n  /** @inheritdoc */\n   emit(hook, ...rest) {\n    const callbacks = this._hooks[hook];\n    if (callbacks) {\n      callbacks.forEach(callback => callback(...rest));\n    }\n  }\n\n  /**\n   * @inheritdoc\n   */\n   sendEnvelope(envelope) {\n    this.emit('beforeEnvelope', envelope);\n\n    if (this._isEnabled() && this._transport) {\n      return this._transport.send(envelope).then(null, reason => {\n        DEBUG_BUILD && logger.error('Error while sending event:', reason);\n        return reason;\n      });\n    }\n\n    DEBUG_BUILD && logger.error('Transport disabled');\n\n    return resolvedSyncPromise({});\n  }\n\n  /* eslint-enable @typescript-eslint/unified-signatures */\n\n  /** Setup integrations for this client. */\n   _setupIntegrations() {\n    const { integrations } = this._options;\n    this._integrations = setupIntegrations(this, integrations);\n    afterSetupIntegrations(this, integrations);\n  }\n\n  /** Updates existing session based on the provided event */\n   _updateSessionFromEvent(session, event) {\n    let crashed = false;\n    let errored = false;\n    const exceptions = event.exception && event.exception.values;\n\n    if (exceptions) {\n      errored = true;\n\n      for (const ex of exceptions) {\n        const mechanism = ex.mechanism;\n        if (mechanism && mechanism.handled === false) {\n          crashed = true;\n          break;\n        }\n      }\n    }\n\n    // A session is updated and that session update is sent in only one of the two following scenarios:\n    // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n    // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n    const sessionNonTerminal = session.status === 'ok';\n    const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n    if (shouldUpdateAndSend) {\n      updateSession(session, {\n        ...(crashed && { status: 'crashed' }),\n        errors: session.errors || Number(errored || crashed),\n      });\n      this.captureSession(session);\n    }\n  }\n\n  /**\n   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n   * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n   * `false` otherwise\n   */\n   _isClientDoneProcessing(timeout) {\n    return new SyncPromise(resolve => {\n      let ticked = 0;\n      const tick = 1;\n\n      const interval = setInterval(() => {\n        if (this._numProcessing == 0) {\n          clearInterval(interval);\n          resolve(true);\n        } else {\n          ticked += tick;\n          if (timeout && ticked >= timeout) {\n            clearInterval(interval);\n            resolve(false);\n          }\n        }\n      }, tick);\n    });\n  }\n\n  /** Determines whether this SDK is enabled and a transport is present. */\n   _isEnabled() {\n    return this.getOptions().enabled !== false && this._transport !== undefined;\n  }\n\n  /**\n   * Adds common information to events.\n   *\n   * The information includes release and environment from `options`,\n   * breadcrumbs and context (extra, tags and user) from the scope.\n   *\n   * Information that is already present in the event is never overwritten. For\n   * nested objects, such as the context, keys are merged.\n   *\n   * @param event The original event.\n   * @param hint May contain additional information about the original exception.\n   * @param currentScope A scope containing event metadata.\n   * @returns A new event with more information.\n   */\n   _prepareEvent(\n    event,\n    hint,\n    currentScope,\n    isolationScope = getIsolationScope(),\n  ) {\n    const options = this.getOptions();\n    const integrations = Object.keys(this._integrations);\n    if (!hint.integrations && integrations.length > 0) {\n      hint.integrations = integrations;\n    }\n\n    this.emit('preprocessEvent', event, hint);\n\n    if (!event.type) {\n      isolationScope.setLastEventId(event.event_id || hint.event_id);\n    }\n\n    return prepareEvent(options, event, hint, currentScope, this, isolationScope).then(evt => {\n      if (evt === null) {\n        return evt;\n      }\n\n      const propagationContext = {\n        ...isolationScope.getPropagationContext(),\n        ...(currentScope ? currentScope.getPropagationContext() : undefined),\n      };\n\n      const trace = evt.contexts && evt.contexts.trace;\n      if (!trace && propagationContext) {\n        const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext;\n        evt.contexts = {\n          trace: dropUndefinedKeys({\n            trace_id,\n            span_id: spanId,\n            parent_span_id: parentSpanId,\n          }),\n          ...evt.contexts,\n        };\n\n        const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this);\n\n        evt.sdkProcessingMetadata = {\n          dynamicSamplingContext,\n          ...evt.sdkProcessingMetadata,\n        };\n      }\n      return evt;\n    });\n  }\n\n  /**\n   * Processes the event and logs an error in case of rejection\n   * @param event\n   * @param hint\n   * @param scope\n   */\n   _captureEvent(event, hint = {}, scope) {\n    return this._processEvent(event, hint, scope).then(\n      finalEvent => {\n        return finalEvent.event_id;\n      },\n      reason => {\n        if (DEBUG_BUILD) {\n          // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n          // control flow, log just the message (no stack) as a log-level log.\n          const sentryError = reason ;\n          if (sentryError.logLevel === 'log') {\n            logger.log(sentryError.message);\n          } else {\n            logger.warn(sentryError);\n          }\n        }\n        return undefined;\n      },\n    );\n  }\n\n  /**\n   * Processes an event (either error or message) and sends it to Sentry.\n   *\n   * This also adds breadcrumbs and context information to the event. However,\n   * platform specific meta data (such as the User's IP address) must be added\n   * by the SDK implementor.\n   *\n   *\n   * @param event The event to send to Sentry.\n   * @param hint May contain additional information about the original exception.\n   * @param currentScope A scope containing event metadata.\n   * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n   */\n   _processEvent(event, hint, currentScope) {\n    const options = this.getOptions();\n    const { sampleRate } = options;\n\n    const isTransaction = isTransactionEvent(event);\n    const isError = isErrorEvent(event);\n    const eventType = event.type || 'error';\n    const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    // Sampling for transaction happens somewhere else\n    const parsedSampleRate = typeof sampleRate === 'undefined' ? undefined : parseSampleRate(sampleRate);\n    if (isError && typeof parsedSampleRate === 'number' && Math.random() > parsedSampleRate) {\n      this.recordDroppedEvent('sample_rate', 'error', event);\n      return rejectedSyncPromise(\n        new SentryError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n          'log',\n        ),\n      );\n    }\n\n    const dataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n    return this._prepareEvent(event, hint, currentScope, capturedSpanIsolationScope)\n      .then(prepared => {\n        if (prepared === null) {\n          this.recordDroppedEvent('event_processor', dataCategory, event);\n          throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n        }\n\n        const isInternalException = hint.data && (hint.data ).__sentry__ === true;\n        if (isInternalException) {\n          return prepared;\n        }\n\n        const result = processBeforeSend(this, options, prepared, hint);\n        return _validateBeforeSendResult(result, beforeSendLabel);\n      })\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          this.recordDroppedEvent('before_send', dataCategory, event);\n          if (isTransaction) {\n            const spans = event.spans || [];\n            // the transaction itself counts as one span, plus all the child spans that are added\n            const spanCount = 1 + spans.length;\n            this.recordDroppedEvent('before_send', 'span', spanCount);\n          }\n          throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n        }\n\n        const session = currentScope && currentScope.getSession();\n        if (!isTransaction && session) {\n          this._updateSessionFromEvent(session, processedEvent);\n        }\n\n        if (isTransaction) {\n          const spanCountBefore =\n            (processedEvent.sdkProcessingMetadata && processedEvent.sdkProcessingMetadata.spanCountBeforeProcessing) ||\n            0;\n          const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n          const droppedSpanCount = spanCountBefore - spanCountAfter;\n          if (droppedSpanCount > 0) {\n            this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n          }\n        }\n\n        // None of the Sentry built event processor will update transaction name,\n        // so if the transaction name has been changed by an event processor, we know\n        // it has to come from custom event processor added by a user\n        const transactionInfo = processedEvent.transaction_info;\n        if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n          const source = 'custom';\n          processedEvent.transaction_info = {\n            ...transactionInfo,\n            source,\n          };\n        }\n\n        this.sendEvent(processedEvent, hint);\n        return processedEvent;\n      })\n      .then(null, reason => {\n        if (reason instanceof SentryError) {\n          throw reason;\n        }\n\n        this.captureException(reason, {\n          data: {\n            __sentry__: true,\n          },\n          originalException: reason,\n        });\n        throw new SentryError(\n          `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n        );\n      });\n  }\n\n  /**\n   * Occupies the client with processing and event\n   */\n   _process(promise) {\n    this._numProcessing++;\n    void promise.then(\n      value => {\n        this._numProcessing--;\n        return value;\n      },\n      reason => {\n        this._numProcessing--;\n        return reason;\n      },\n    );\n  }\n\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n   _clearOutcomes() {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.entries(outcomes).map(([key, quantity]) => {\n      const [reason, category] = key.split(':') ;\n      return {\n        reason,\n        category,\n        quantity,\n      };\n    });\n  }\n\n  /**\n   * Sends client reports as an envelope.\n   */\n   _flushOutcomes() {\n    DEBUG_BUILD && logger.log('Flushing outcomes...');\n\n    const outcomes = this._clearOutcomes();\n\n    if (outcomes.length === 0) {\n      DEBUG_BUILD && logger.log('No outcomes to send');\n      return;\n    }\n\n    // This is really the only place where we want to check for a DSN and only send outcomes then\n    if (!this._dsn) {\n      DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n    const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(envelope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n  beforeSendResult,\n  beforeSendLabel,\n) {\n  const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n  if (isThenable(beforeSendResult)) {\n    return beforeSendResult.then(\n      event => {\n        if (!isPlainObject(event) && event !== null) {\n          throw new SentryError(invalidValueError);\n        }\n        return event;\n      },\n      e => {\n        throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n      },\n    );\n  } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n    throw new SentryError(invalidValueError);\n  }\n  return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n  client,\n  options,\n  event,\n  hint,\n) {\n  const { beforeSend, beforeSendTransaction, beforeSendSpan } = options;\n\n  if (isErrorEvent(event) && beforeSend) {\n    return beforeSend(event, hint);\n  }\n\n  if (isTransactionEvent(event)) {\n    if (event.spans && beforeSendSpan) {\n      const processedSpans = [];\n      for (const span of event.spans) {\n        const processedSpan = beforeSendSpan(span);\n        if (processedSpan) {\n          processedSpans.push(processedSpan);\n        } else {\n          client.recordDroppedEvent('before_send', 'span');\n        }\n      }\n      event.spans = processedSpans;\n    }\n\n    if (beforeSendTransaction) {\n      if (event.spans) {\n        // We store the # of spans before processing in SDK metadata,\n        // so we can compare it afterwards to determine how many spans were dropped\n        const spanCountBefore = event.spans.length;\n        event.sdkProcessingMetadata = {\n          ...event.sdkProcessingMetadata,\n          spanCountBeforeProcessing: spanCountBefore,\n        };\n      }\n      return beforeSendTransaction(event, hint);\n    }\n  }\n\n  return event;\n}\n\nfunction isErrorEvent(event) {\n  return event.type === undefined;\n}\n\nfunction isTransactionEvent(event) {\n  return event.type === 'transaction';\n}\n\nexport { BaseClient };\n//# sourceMappingURL=baseclient.js.map\n","import { logger, consoleSandbox } from '@sentry/utils';\nimport { getCurrentScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\n\n/** A class object that can instantiate Client objects. */\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nfunction initAndBind(\n  clientClass,\n  options,\n) {\n  if (options.debug === true) {\n    if (DEBUG_BUILD) {\n      logger.enable();\n    } else {\n      // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n      consoleSandbox(() => {\n        // eslint-disable-next-line no-console\n        console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n      });\n    }\n  }\n  const scope = getCurrentScope();\n  scope.update(options.initialScope);\n\n  const client = new clientClass(options);\n  setCurrentClient(client);\n  client.init();\n  return client;\n}\n\n/**\n * Make the given client the current client.\n */\nfunction setCurrentClient(client) {\n  getCurrentScope().setClient(client);\n}\n\nexport { initAndBind, setCurrentClient };\n//# sourceMappingURL=sdk.js.map\n","import { makePromiseBuffer, forEachEnvelopeItem, envelopeItemTypeToDataCategory, isRateLimited, resolvedSyncPromise, createEnvelope, SentryError, logger, serializeEnvelope, updateRateLimits } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\nconst DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nfunction createTransport(\n  options,\n  makeRequest,\n  buffer = makePromiseBuffer(\n    options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n  ),\n) {\n  let rateLimits = {};\n  const flush = (timeout) => buffer.drain(timeout);\n\n  function send(envelope) {\n    const filteredEnvelopeItems = [];\n\n    // Drop rate limited items from envelope\n    forEachEnvelopeItem(envelope, (item, type) => {\n      const dataCategory = envelopeItemTypeToDataCategory(type);\n      if (isRateLimited(rateLimits, dataCategory)) {\n        const event = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent('ratelimit_backoff', dataCategory, event);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n\n    // Skip sending if envelope is empty after filtering out rate limited events\n    if (filteredEnvelopeItems.length === 0) {\n      return resolvedSyncPromise({});\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems );\n\n    // Creates client report for each item in an envelope\n    const recordEnvelopeLoss = (reason) => {\n      forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n        const event = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n      });\n    };\n\n    const requestTask = () =>\n      makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(\n        response => {\n          // We don't want to throw on NOK responses, but we want to at least log them\n          if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n            DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n          }\n\n          rateLimits = updateRateLimits(rateLimits, response);\n          return response;\n        },\n        error => {\n          recordEnvelopeLoss('network_error');\n          throw error;\n        },\n      );\n\n    return buffer.add(requestTask).then(\n      result => result,\n      error => {\n        if (error instanceof SentryError) {\n          DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n          recordEnvelopeLoss('queue_overflow');\n          return resolvedSyncPromise({});\n        } else {\n          throw error;\n        }\n      },\n    );\n  }\n\n  return {\n    send,\n    flush,\n  };\n}\n\nfunction getEventForEnvelopeItem(item, type) {\n  if (type !== 'event' && type !== 'transaction') {\n    return undefined;\n  }\n\n  return Array.isArray(item) ? (item )[1] : undefined;\n}\n\nexport { DEFAULT_TRANSPORT_BUFFER_SIZE, createTransport };\n//# sourceMappingURL=base.js.map\n","/**\n * Checks whether given url points to Sentry server\n *\n * @param url url to verify\n */\nfunction isSentryRequestUrl(url, client) {\n  const dsn = client && client.getDsn();\n  const tunnel = client && client.getOptions().tunnel;\n  return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url, tunnel) {\n  if (!tunnel) {\n    return false;\n  }\n\n  return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url, dsn) {\n  return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str) {\n  return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n\nexport { isSentryRequestUrl };\n//# sourceMappingURL=isSentryRequestUrl.js.map\n","import { SDK_VERSION } from '@sentry/utils';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nfunction applySdkMetadata(options, name, names = [name], source = 'npm') {\n  const metadata = options._metadata || {};\n\n  if (!metadata.sdk) {\n    metadata.sdk = {\n      name: `sentry.javascript.${name}`,\n      packages: names.map(name => ({\n        name: `${source}:@sentry/${name}`,\n        version: SDK_VERSION,\n      })),\n      version: SDK_VERSION,\n    };\n  }\n\n  options._metadata = metadata;\n}\n\nexport { applySdkMetadata };\n//# sourceMappingURL=sdkMetadata.js.map\n","import { dateTimestampInSeconds, consoleSandbox } from '@sentry/utils';\nimport { getClient, getIsolationScope } from './currentScopes.js';\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n */\nfunction addBreadcrumb(breadcrumb, hint) {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n\n  if (!client) return;\n\n  const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions();\n\n  if (maxBreadcrumbs <= 0) return;\n\n  const timestamp = dateTimestampInSeconds();\n  const mergedBreadcrumb = { timestamp, ...breadcrumb };\n  const finalBreadcrumb = beforeBreadcrumb\n    ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) )\n    : mergedBreadcrumb;\n\n  if (finalBreadcrumb === null) return;\n\n  if (client.emit) {\n    client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n  }\n\n  isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n\nexport { addBreadcrumb };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { getOriginalFunction } from '@sentry/utils';\nimport { getClient } from '../currentScopes.js';\nimport { defineIntegration } from '../integration.js';\n\nlet originalFunctionToString;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap();\n\nconst _functionToStringIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      originalFunctionToString = Function.prototype.toString;\n\n      // intrinsics (like Function.prototype) might be immutable in some environments\n      // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n      try {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        Function.prototype.toString = function ( ...args) {\n          const originalFunction = getOriginalFunction(this);\n          const context =\n            SETUP_CLIENTS.has(getClient() ) && originalFunction !== undefined ? originalFunction : this;\n          return originalFunctionToString.apply(context, args);\n        };\n      } catch (e) {\n        // ignore errors here, just don't patch this\n      }\n    },\n    setup(client) {\n      SETUP_CLIENTS.set(client, true);\n    },\n  };\n}) ;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n *   integrations: [\n *     functionToStringIntegration(),\n *   ],\n * });\n * ```\n */\nconst functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\nexport { functionToStringIntegration };\n//# sourceMappingURL=functiontostring.js.map\n","import { logger, getEventDescription, stringMatchesSomePattern } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n  /^Script error\\.?$/,\n  /^Javascript error: Script error\\.? on line 0$/,\n  /^ResizeObserver loop completed with undelivered notifications.$/, // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness.\n  /^Cannot redefine property: googletag$/, // This is thrown when google tag manager is used in combination with an ad blocker\n  \"undefined is not an object (evaluating 'a.L')\", // Random error that happens but not actionable or noticeable to end-users.\n  'can\\'t redefine non-configurable property \"solana\"', // Probably a browser extension or custom browser (Brave) throwing this error\n  \"vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)\", // Error thrown by GTM, seemingly not affecting end-users\n  \"Can't find variable: _AutofillCallbackHandler\", // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/\n];\n\n/** Options for the InboundFilters integration */\n\nconst INTEGRATION_NAME = 'InboundFilters';\nconst _inboundFiltersIntegration = ((options = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event, _hint, client) {\n      const clientOptions = client.getOptions();\n      const mergedOptions = _mergeOptions(options, clientOptions);\n      return _shouldDropEvent(event, mergedOptions) ? null : event;\n    },\n  };\n}) ;\n\nconst inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration);\n\nfunction _mergeOptions(\n  internalOptions = {},\n  clientOptions = {},\n) {\n  return {\n    allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n    denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n    ignoreErrors: [\n      ...(internalOptions.ignoreErrors || []),\n      ...(clientOptions.ignoreErrors || []),\n      ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n    ],\n    ignoreTransactions: [...(internalOptions.ignoreTransactions || []), ...(clientOptions.ignoreTransactions || [])],\n    ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n  };\n}\n\nfunction _shouldDropEvent(event, options) {\n  if (options.ignoreInternal && _isSentryError(event)) {\n    DEBUG_BUILD &&\n      logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n    return true;\n  }\n  if (_isIgnoredError(event, options.ignoreErrors)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isUselessError(event)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to not having an error message, error type or stacktrace.\\nEvent: ${getEventDescription(\n          event,\n        )}`,\n      );\n    return true;\n  }\n  if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isDeniedUrl(event, options.denyUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  if (!_isAllowedUrl(event, options.allowUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  return false;\n}\n\nfunction _isIgnoredError(event, ignoreErrors) {\n  // If event.type, this is not an error\n  if (event.type || !ignoreErrors || !ignoreErrors.length) {\n    return false;\n  }\n\n  return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event, ignoreTransactions) {\n  if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n    return false;\n  }\n\n  const name = event.transaction;\n  return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event, denyUrls) {\n  // TODO: Use Glob instead?\n  if (!denyUrls || !denyUrls.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event, allowUrls) {\n  // TODO: Use Glob instead?\n  if (!allowUrls || !allowUrls.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event) {\n  const possibleMessages = [];\n\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n\n  let lastException;\n  try {\n    // @ts-expect-error Try catching to save bundle size\n    lastException = event.exception.values[event.exception.values.length - 1];\n  } catch (e) {\n    // try catching to save bundle size checking existence of variables\n  }\n\n  if (lastException) {\n    if (lastException.value) {\n      possibleMessages.push(lastException.value);\n      if (lastException.type) {\n        possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n      }\n    }\n  }\n\n  return possibleMessages;\n}\n\nfunction _isSentryError(event) {\n  try {\n    // @ts-expect-error can't be a sentry error if undefined\n    return event.exception.values[0].type === 'SentryError';\n  } catch (e) {\n    // ignore\n  }\n  return false;\n}\n\nfunction _getLastValidUrl(frames = []) {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n\n    if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n      return frame.filename || null;\n    }\n  }\n\n  return null;\n}\n\nfunction _getEventFilterUrl(event) {\n  try {\n    let frames;\n    try {\n      // @ts-expect-error we only care about frames if the whole thing here is defined\n      frames = event.exception.values[0].stacktrace.frames;\n    } catch (e) {\n      // ignore\n    }\n    return frames ? _getLastValidUrl(frames) : null;\n  } catch (oO) {\n    DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n    return null;\n  }\n}\n\nfunction _isUselessError(event) {\n  if (event.type) {\n    // event is not an error\n    return false;\n  }\n\n  // We only want to consider events for dropping that actually have recorded exception values.\n  if (!event.exception || !event.exception.values || event.exception.values.length === 0) {\n    return false;\n  }\n\n  return (\n    // No top-level message\n    !event.message &&\n    // There are no exception values that have a stacktrace, a non-generic-Error type or value\n    !event.exception.values.some(value => value.stacktrace || (value.type && value.type !== 'Error') || value.value)\n  );\n}\n\nexport { inboundFiltersIntegration };\n//# sourceMappingURL=inboundfilters.js.map\n","import { logger, getFramesFromEvent } from '@sentry/utils';\nimport { defineIntegration } from '../integration.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n  let previousEvent;\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(currentEvent) {\n      // We want to ignore any non-error type events, e.g. transactions or replays\n      // These should never be deduped, and also not be compared against as _previousEvent.\n      if (currentEvent.type) {\n        return currentEvent;\n      }\n\n      // Juuust in case something goes wrong\n      try {\n        if (_shouldDropEvent(currentEvent, previousEvent)) {\n          DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n          return null;\n        }\n      } catch (_oO) {} // eslint-disable-line no-empty\n\n      return (previousEvent = currentEvent);\n    },\n  };\n}) ;\n\n/**\n * Deduplication filter.\n */\nconst dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/** only exported for tests. */\nfunction _shouldDropEvent(currentEvent, previousEvent) {\n  if (!previousEvent) {\n    return false;\n  }\n\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _isSameMessageEvent(currentEvent, previousEvent) {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n\n  // If neither event has a message property, they were both exceptions, so bail out\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n    return false;\n  }\n\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent, previousEvent) {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n\n  if (!previousException || !currentException) {\n    return false;\n  }\n\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameStacktrace(currentEvent, previousEvent) {\n  let currentFrames = getFramesFromEvent(currentEvent);\n  let previousFrames = getFramesFromEvent(previousEvent);\n\n  // If neither event has a stacktrace, they are assumed to be the same\n  if (!currentFrames && !previousFrames) {\n    return true;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n    return false;\n  }\n\n  currentFrames = currentFrames ;\n  previousFrames = previousFrames ;\n\n  // If number of frames differ, they are not the same\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n\n  // Otherwise, compare the two\n  for (let i = 0; i < previousFrames.length; i++) {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const frameA = previousFrames[i];\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const frameB = currentFrames[i];\n\n    if (\n      frameA.filename !== frameB.filename ||\n      frameA.lineno !== frameB.lineno ||\n      frameA.colno !== frameB.colno ||\n      frameA.function !== frameB.function\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction _isSameFingerprint(currentEvent, previousEvent) {\n  let currentFingerprint = currentEvent.fingerprint;\n  let previousFingerprint = previousEvent.fingerprint;\n\n  // If neither event has a fingerprint, they are assumed to be the same\n  if (!currentFingerprint && !previousFingerprint) {\n    return true;\n  }\n\n  // If only one event has a fingerprint, but not the other one, they are not the same\n  if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n    return false;\n  }\n\n  currentFingerprint = currentFingerprint ;\n  previousFingerprint = previousFingerprint ;\n\n  // Otherwise, compare the two\n  try {\n    return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n  } catch (_oO) {\n    return false;\n  }\n}\n\nfunction _getExceptionFromEvent(event) {\n  return event.exception && event.exception.values && event.exception.values[0];\n}\n\nexport { _shouldDropEvent, dedupeIntegration };\n//# sourceMappingURL=dedupe.js.map\n","import { parseUrl, generateSentryTraceHeader, dynamicSamplingContextToSentryBaggageHeader, isInstanceOf, BAGGAGE_HEADER_NAME } from '@sentry/utils';\nimport { getCurrentScope, getClient, getIsolationScope } from './currentScopes.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP } from './semanticAttributes.js';\nimport './tracing/errors.js';\nimport './debug-build.js';\nimport { hasTracingEnabled } from './utils/hasTracingEnabled.js';\nimport { getActiveSpan, spanToTraceHeader } from './utils/spanUtils.js';\nimport { SentryNonRecordingSpan } from './tracing/sentryNonRecordingSpan.js';\nimport { setHttpStatus, SPAN_STATUS_ERROR } from './tracing/spanstatus.js';\nimport { startInactiveSpan } from './tracing/trace.js';\nimport { getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext.js';\n\n/**\n * Create and track fetch request spans for usage in combination with `addFetchInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction instrumentFetchRequest(\n  handlerData,\n  shouldCreateSpan,\n  shouldAttachHeaders,\n  spans,\n  spanOrigin = 'auto.http.browser',\n) {\n  if (!handlerData.fetchData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(handlerData.fetchData.url);\n\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = handlerData.fetchData.__span;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span) {\n      endSpan(span, handlerData);\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const scope = getCurrentScope();\n  const client = getClient();\n\n  const { method, url } = handlerData.fetchData;\n\n  const fullUrl = getFullURL(url);\n  const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n  const hasParent = !!getActiveSpan();\n\n  const span =\n    shouldCreateSpanResult && hasParent\n      ? startInactiveSpan({\n          name: `${method} ${url}`,\n          attributes: {\n            url,\n            type: 'fetch',\n            'http.method': method,\n            'http.url': fullUrl,\n            'server.address': host,\n            [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n            [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n          },\n        })\n      : new SentryNonRecordingSpan();\n\n  handlerData.fetchData.__span = span.spanContext().spanId;\n  spans[span.spanContext().spanId] = span;\n\n  if (shouldAttachHeaders(handlerData.fetchData.url) && client) {\n    const request = handlerData.args[0];\n\n    // In case the user hasn't set the second argument of a fetch call we default it to `{}`.\n    handlerData.args[1] = handlerData.args[1] || {};\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const options = handlerData.args[1];\n\n    options.headers = addTracingHeadersToFetchRequest(\n      request,\n      client,\n      scope,\n      options,\n      // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n      // we do not want to use the span as base for the trace headers,\n      // which means that the headers will be generated from the scope and the sampling decision is deferred\n      hasTracingEnabled() && hasParent ? span : undefined,\n    );\n  }\n\n  return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers\n */\nfunction addTracingHeadersToFetchRequest(\n  request, // unknown is actually type Request but we can't export DOM types from this package,\n  client,\n  scope,\n  options\n\n,\n  span,\n) {\n  const isolationScope = getIsolationScope();\n\n  const { traceId, spanId, sampled, dsc } = {\n    ...isolationScope.getPropagationContext(),\n    ...scope.getPropagationContext(),\n  };\n\n  const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n  const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n    dsc || (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client)),\n  );\n\n  const headers =\n    options.headers ||\n    (typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request ).headers : undefined);\n\n  if (!headers) {\n    return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };\n  } else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {\n    const newHeaders = new Headers(headers );\n\n    newHeaders.append('sentry-trace', sentryTraceHeader);\n\n    if (sentryBaggageHeader) {\n      // If the same header is appended multiple times the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n\n    return newHeaders ;\n  } else if (Array.isArray(headers)) {\n    const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];\n\n    if (sentryBaggageHeader) {\n      // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);\n    }\n\n    return newHeaders ;\n  } else {\n    const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n    const newBaggageHeaders = [];\n\n    if (Array.isArray(existingBaggageHeader)) {\n      newBaggageHeaders.push(...existingBaggageHeader);\n    } else if (existingBaggageHeader) {\n      newBaggageHeaders.push(existingBaggageHeader);\n    }\n\n    if (sentryBaggageHeader) {\n      newBaggageHeaders.push(sentryBaggageHeader);\n    }\n\n    return {\n      ...(headers ),\n      'sentry-trace': sentryTraceHeader,\n      baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n    };\n  }\n}\n\nfunction getFullURL(url) {\n  try {\n    const parsed = new URL(url);\n    return parsed.href;\n  } catch (e) {\n    return undefined;\n  }\n}\n\nfunction endSpan(span, handlerData) {\n  if (handlerData.response) {\n    setHttpStatus(span, handlerData.response.status);\n\n    const contentLength =\n      handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n    if (contentLength) {\n      const contentLengthNum = parseInt(contentLength);\n      if (contentLengthNum > 0) {\n        span.setAttribute('http.response_content_length', contentLengthNum);\n      }\n    }\n  } else if (handlerData.error) {\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n  }\n  span.end();\n}\n\nexport { addTracingHeadersToFetchRequest, instrumentFetchRequest };\n//# sourceMappingURL=fetch.js.map\n","import { withScope, captureException } from '@sentry/core';\nimport { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, addExceptionTypeValue, addExceptionMechanism } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nlet ignoreOnError = 0;\n\n/**\n * @hidden\n */\nfunction shouldIgnoreOnError() {\n  return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nfunction ignoreNextOnError() {\n  // onerror should trigger before setTimeout\n  ignoreOnError++;\n  setTimeout(() => {\n    ignoreOnError--;\n  });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nfunction wrap(\n  fn,\n  options\n\n = {},\n  before,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n  // for future readers what this does is wrap a function and then create\n  // a bi-directional wrapping between them.\n  //\n  // example: wrapped = wrap(original);\n  //  original.__sentry_wrapped__ -> wrapped\n  //  wrapped.__sentry_original__ -> original\n\n  if (typeof fn !== 'function') {\n    return fn;\n  }\n\n  try {\n    // if we're dealing with a function that was previously wrapped, return\n    // the original wrapper.\n    const wrapper = fn.__sentry_wrapped__;\n    if (wrapper) {\n      return wrapper;\n    }\n\n    // We don't wanna wrap it twice\n    if (getOriginalFunction(fn)) {\n      return fn;\n    }\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    // Bail on wrapping and return the function as-is (defers to window.onerror).\n    return fn;\n  }\n\n  /* eslint-disable prefer-rest-params */\n  // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n  const sentryWrapped = function () {\n    const args = Array.prototype.slice.call(arguments);\n\n    try {\n      if (before && typeof before === 'function') {\n        before.apply(this, arguments);\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n      const wrappedArguments = args.map((arg) => wrap(arg, options));\n\n      // Attempt to invoke user-land function\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n      //       means the sentry.javascript SDK caught an error invoking your application code. This\n      //       is expected behavior and NOT indicative of a bug with sentry.javascript.\n      return fn.apply(this, wrappedArguments);\n    } catch (ex) {\n      ignoreNextOnError();\n\n      withScope(scope => {\n        scope.addEventProcessor(event => {\n          if (options.mechanism) {\n            addExceptionTypeValue(event, undefined, undefined);\n            addExceptionMechanism(event, options.mechanism);\n          }\n\n          event.extra = {\n            ...event.extra,\n            arguments: args,\n          };\n\n          return event;\n        });\n\n        captureException(ex);\n      });\n\n      throw ex;\n    }\n  };\n  /* eslint-enable prefer-rest-params */\n\n  // Accessing some objects may throw\n  // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n  try {\n    for (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property] = fn[property];\n      }\n    }\n  } catch (_oO) {} // eslint-disable-line no-empty\n\n  // Signal that this function has been wrapped/filled already\n  // for both debugging and to prevent it to being wrapped/filled twice\n  markFunctionWrapped(sentryWrapped, fn);\n\n  addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n  // Restore original function name (not all browsers allow that)\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') ;\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, 'name', {\n        get() {\n          return fn.name;\n        },\n      });\n    }\n    // eslint-disable-next-line no-empty\n  } catch (_oO) {}\n\n  return sentryWrapped;\n}\n\nexport { WINDOW, ignoreNextOnError, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { getClient } from '@sentry/core';\nimport { addExceptionMechanism, resolvedSyncPromise, isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, isParameterizedString, normalizeToSize, extractExceptionKeysForMessage } from '@sentry/utils';\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nfunction exceptionFromError(stackParser, ex) {\n  // Get the frames first since Opera can lose the stack if we touch anything else first\n  const frames = parseStackFrames(stackParser, ex);\n\n  const exception = {\n    type: ex && ex.name,\n    value: extractMessage(ex),\n  };\n\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  if (exception.type === undefined && exception.value === '') {\n    exception.value = 'Unrecoverable error caught';\n  }\n\n  return exception;\n}\n\nfunction eventFromPlainObject(\n  stackParser,\n  exception,\n  syntheticException,\n  isUnhandledRejection,\n) {\n  const client = getClient();\n  const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n  // If we can, we extract an exception from the object properties\n  const errorFromProp = getErrorPropertyFromObject(exception);\n\n  const extra = {\n    __serialized__: normalizeToSize(exception, normalizeDepth),\n  };\n\n  if (errorFromProp) {\n    return {\n      exception: {\n        values: [exceptionFromError(stackParser, errorFromProp)],\n      },\n      extra,\n    };\n  }\n\n  const event = {\n    exception: {\n      values: [\n        {\n          type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n          value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n        } ,\n      ],\n    },\n    extra,\n  } ;\n\n  if (syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      // event.exception.values[0] has been set above\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      event.exception.values[0].stacktrace = { frames };\n    }\n  }\n\n  return event;\n}\n\nfunction eventFromError(stackParser, ex) {\n  return {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)],\n    },\n  };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n  stackParser,\n  ex,\n) {\n  // Access and store the stacktrace property before doing ANYTHING\n  // else to it because Opera is not very good at providing it\n  // reliably in other circumstances.\n  const stacktrace = ex.stacktrace || ex.stack || '';\n\n  const skipLines = getSkipFirstStackStringLines(ex);\n  const framesToPop = getPopFirstTopFrames(ex);\n\n  try {\n    return stackParser(stacktrace, skipLines, framesToPop);\n  } catch (e) {\n    // no-empty\n  }\n\n  return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex) {\n  if (ex && reactMinifiedRegexp.test(ex.message)) {\n    return 1;\n  }\n\n  return 0;\n}\n\n/**\n * If error has `framesToPop` property, it means that the\n * creator tells us the first x frames will be useless\n * and should be discarded. Typically error from wrapper function\n * which don't point to the actual location in the developer's code.\n *\n * Example: https://github.com/zertosh/invariant/blob/master/invariant.js#L46\n */\nfunction getPopFirstTopFrames(ex) {\n  if (typeof ex.framesToPop === 'number') {\n    return ex.framesToPop;\n  }\n\n  return 0;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex) {\n  const message = ex && ex.message;\n  if (!message) {\n    return 'No error message';\n  }\n  if (message.error && typeof message.error.message === 'string') {\n    return message.error.message;\n  }\n  return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nfunction eventFromException(\n  stackParser,\n  exception,\n  hint,\n  attachStacktrace,\n) {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n  addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n  event.level = 'error';\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nfunction eventFromMessage(\n  stackParser,\n  message,\n  level = 'info',\n  hint,\n  attachStacktrace,\n) {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n  event.level = level;\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nfunction eventFromUnknownInput(\n  stackParser,\n  exception,\n  syntheticException,\n  attachStacktrace,\n  isUnhandledRejection,\n) {\n  let event;\n\n  if (isErrorEvent(exception ) && (exception ).error) {\n    // If it is an ErrorEvent with `error` property, extract it to get actual Error\n    const errorEvent = exception ;\n    return eventFromError(stackParser, errorEvent.error );\n  }\n\n  // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n  // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n  // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n  //\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n  // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n  if (isDOMError(exception) || isDOMException(exception )) {\n    const domException = exception ;\n\n    if ('stack' in (exception )) {\n      event = eventFromError(stackParser, exception );\n    } else {\n      const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n      const message = domException.message ? `${name}: ${domException.message}` : name;\n      event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n      addExceptionTypeValue(event, message);\n    }\n    if ('code' in domException) {\n      // eslint-disable-next-line deprecation/deprecation\n      event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n    }\n\n    return event;\n  }\n  if (isError(exception)) {\n    // we have a real Error object, do nothing\n    return eventFromError(stackParser, exception);\n  }\n  if (isPlainObject(exception) || isEvent(exception)) {\n    // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n    // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n    // group on any key/value change.\n    const objectException = exception ;\n    event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n    addExceptionMechanism(event, {\n      synthetic: true,\n    });\n    return event;\n  }\n\n  // If none of previous checks were valid, then it means that it's not:\n  // - an instance of DOMError\n  // - an instance of DOMException\n  // - an instance of Event\n  // - an instance of Error\n  // - a valid ErrorEvent (one with an error property)\n  // - a plain Object\n  //\n  // So bail out and capture it as a simple message:\n  event = eventFromString(stackParser, exception , syntheticException, attachStacktrace);\n  addExceptionTypeValue(event, `${exception}`, undefined);\n  addExceptionMechanism(event, {\n    synthetic: true,\n  });\n\n  return event;\n}\n\nfunction eventFromString(\n  stackParser,\n  message,\n  syntheticException,\n  attachStacktrace,\n) {\n  const event = {};\n\n  if (attachStacktrace && syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [{ value: message, stacktrace: { frames } }],\n      };\n    }\n  }\n\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n  exception,\n  { isUnhandledRejection },\n) {\n  const keys = extractExceptionKeysForMessage(exception);\n  const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n  }\n\n  if (isEvent(exception)) {\n    const className = getObjectClassName(exception);\n    return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n  }\n\n  return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj) {\n  try {\n    const prototype = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : undefined;\n  } catch (e) {\n    // ignore errors here\n  }\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj) {\n  for (const prop in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n      const value = obj[prop];\n      if (value instanceof Error) {\n        return value;\n      }\n    }\n  }\n\n  return undefined;\n}\n\nexport { eventFromException, eventFromMessage, eventFromUnknownInput, exceptionFromError };\n//# sourceMappingURL=eventbuilder.js.map\n","import { dsnToString, createEnvelope } from '@sentry/utils';\n\n/**\n * Creates an envelope from a user feedback.\n */\nfunction createUserFeedbackEnvelope(\n  feedback,\n  {\n    metadata,\n    tunnel,\n    dsn,\n  }\n\n,\n) {\n  const headers = {\n    event_id: feedback.event_id,\n    sent_at: new Date().toISOString(),\n    ...(metadata &&\n      metadata.sdk && {\n        sdk: {\n          name: metadata.sdk.name,\n          version: metadata.sdk.version,\n        },\n      }),\n    ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n  };\n  const item = createUserFeedbackEnvelopeItem(feedback);\n\n  return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback) {\n  const feedbackHeaders = {\n    type: 'user_report',\n  };\n  return [feedbackHeaders, feedback];\n}\n\nexport { createUserFeedbackEnvelope };\n//# sourceMappingURL=userfeedback.js.map\n","import { BaseClient, applySdkMetadata } from '@sentry/core';\nimport { getSDKSource, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\nimport { createUserFeedbackEnvelope } from './userfeedback.js';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/types Options for more information.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nclass BrowserClient extends BaseClient {\n  /**\n   * Creates a new Browser SDK instance.\n   *\n   * @param options Configuration options for this SDK.\n   */\n   constructor(options) {\n    const opts = {\n      // We default this to true, as it is the safer scenario\n      parentSpanIsAlwaysRootSpan: true,\n      ...options,\n    };\n    const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n    applySdkMetadata(opts, 'browser', ['browser'], sdkSource);\n\n    super(opts);\n\n    if (opts.sendClientReports && WINDOW.document) {\n      WINDOW.document.addEventListener('visibilitychange', () => {\n        if (WINDOW.document.visibilityState === 'hidden') {\n          this._flushOutcomes();\n        }\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   eventFromException(exception, hint) {\n    return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   eventFromMessage(\n    message,\n    level = 'info',\n    hint,\n  ) {\n    return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * Sends user feedback to Sentry.\n   *\n   * @deprecated Use `captureFeedback` instead.\n   */\n   captureUserFeedback(feedback) {\n    if (!this._isEnabled()) {\n      DEBUG_BUILD && logger.warn('SDK not enabled, will not capture user feedback.');\n      return;\n    }\n\n    const envelope = createUserFeedbackEnvelope(feedback, {\n      metadata: this.getSdkMetadata(),\n      dsn: this.getDsn(),\n      tunnel: this.getOptions().tunnel,\n    });\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(envelope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   _prepareEvent(event, hint, scope) {\n    event.platform = event.platform || 'javascript';\n    return super._prepareEvent(event, hint, scope);\n  }\n}\n\nexport { BrowserClient };\n//# sourceMappingURL=client.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","const getRating = (value, thresholds) => {\n  if (value > thresholds[1]) {\n    return 'poor';\n  }\n  if (value > thresholds[0]) {\n    return 'needs-improvement';\n  }\n  return 'good';\n};\n\nconst bindReporter = (\n  callback,\n  metric,\n  thresholds,\n  reportAllChanges,\n) => {\n  let prevValue;\n  let delta;\n  return (forceReport) => {\n    if (metric.value >= 0) {\n      if (forceReport || reportAllChanges) {\n        delta = metric.value - (prevValue || 0);\n\n        // Report the metric if there's a non-zero delta or if no previous\n        // value exists (which can happen in the case of the document becoming\n        // hidden when the metric value is 0).\n        // See: https://github.com/GoogleChrome/web-vitals/issues/14\n        if (delta || prevValue === undefined) {\n          prevValue = metric.value;\n          metric.delta = delta;\n          metric.rating = getRating(metric.value, thresholds);\n          callback(metric);\n        }\n      }\n    }\n  };\n};\n\nexport { bindReporter };\n//# sourceMappingURL=bindReporter.js.map\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ\n\n;\n\nexport { WINDOW };\n//# sourceMappingURL=types.js.map\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nconst generateUniqueID = () => {\n  return `v3-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n\nexport { generateUniqueID };\n//# sourceMappingURL=generateUniqueID.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst getNavigationEntry = () => {\n  return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];\n};\n\nexport { getNavigationEntry };\n//# sourceMappingURL=getNavigationEntry.js.map\n","import { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst getActivationStart = () => {\n  const navEntry = getNavigationEntry();\n  return (navEntry && navEntry.activationStart) || 0;\n};\n\nexport { getActivationStart };\n//# sourceMappingURL=getActivationStart.js.map\n","import { WINDOW } from '../../../types.js';\nimport { generateUniqueID } from './generateUniqueID.js';\nimport { getActivationStart } from './getActivationStart.js';\nimport { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst initMetric = (name, value) => {\n  const navEntry = getNavigationEntry();\n  let navigationType = 'navigate';\n\n  if (navEntry) {\n    if ((WINDOW.document && WINDOW.document.prerendering) || getActivationStart() > 0) {\n      navigationType = 'prerender';\n    } else if (WINDOW.document && WINDOW.document.wasDiscarded) {\n      navigationType = 'restore';\n    } else if (navEntry.type) {\n      navigationType = navEntry.type.replace(/_/g, '-') ;\n    }\n  }\n\n  // Use `entries` type specific for the metric.\n  const entries = [];\n\n  return {\n    name,\n    value: typeof value === 'undefined' ? -1 : value,\n    rating: 'good' , // If needed, will be updated when reported. `const` to keep the type from widening to `string`.\n    delta: 0,\n    entries,\n    id: generateUniqueID(),\n    navigationType,\n  };\n};\n\nexport { initMetric };\n//# sourceMappingURL=initMetric.js.map\n","/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nconst observe = (\n  type,\n  callback,\n  opts,\n) => {\n  try {\n    if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n      const po = new PerformanceObserver(list => {\n        // Delay by a microtask to workaround a bug in Safari where the\n        // callback is invoked immediately, rather than in a separate task.\n        // See: https://github.com/GoogleChrome/web-vitals/issues/277\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        Promise.resolve().then(() => {\n          callback(list.getEntries() );\n        });\n      });\n      po.observe(\n        Object.assign(\n          {\n            type,\n            buffered: true,\n          },\n          opts || {},\n        ) ,\n      );\n      return po;\n    }\n  } catch (e) {\n    // Do nothing.\n  }\n  return;\n};\n\nexport { observe };\n//# sourceMappingURL=observe.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst onHidden = (cb) => {\n  const onHiddenOrPageHide = (event) => {\n    if (event.type === 'pagehide' || (WINDOW.document && WINDOW.document.visibilityState === 'hidden')) {\n      cb(event);\n    }\n  };\n\n  if (WINDOW.document) {\n    addEventListener('visibilitychange', onHiddenOrPageHide, true);\n    // Some browsers have buggy implementations of visibilitychange,\n    // so we use pagehide in addition, just to be safe.\n    addEventListener('pagehide', onHiddenOrPageHide, true);\n  }\n};\n\nexport { onHidden };\n//# sourceMappingURL=onHidden.js.map\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst runOnce = (cb) => {\n  let called = false;\n  return (arg) => {\n    if (!called) {\n      cb(arg);\n      called = true;\n    }\n  };\n};\n\nexport { runOnce };\n//# sourceMappingURL=runOnce.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = () => {\n  // If the document is hidden when this code runs, assume it was always\n  // hidden and the page was loaded in the background, with the one exception\n  // that visibility state is always 'hidden' during prerendering, so we have\n  // to ignore that case until prerendering finishes (see: `prerenderingchange`\n  // event logic below).\n  firstHiddenTime = WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n};\n\nconst onVisibilityUpdate = (event) => {\n  // If the document is 'hidden' and no previous hidden timestamp has been\n  // set, update it based on the current event data.\n  if (WINDOW.document.visibilityState === 'hidden' && firstHiddenTime > -1) {\n    // If the event is a 'visibilitychange' event, it means the page was\n    // visible prior to this change, so the event timestamp is the first\n    // hidden time.\n    // However, if the event is not a 'visibilitychange' event, then it must\n    // be a 'prerenderingchange' event, and the fact that the document is\n    // still 'hidden' from the above check means the tab was activated\n    // in a background state and so has always been hidden.\n    firstHiddenTime = event.type === 'visibilitychange' ? event.timeStamp : 0;\n\n    // Remove all listeners now that a `firstHiddenTime` value has been set.\n    removeEventListener('visibilitychange', onVisibilityUpdate, true);\n    removeEventListener('prerenderingchange', onVisibilityUpdate, true);\n  }\n};\n\nconst addChangeListeners = () => {\n  addEventListener('visibilitychange', onVisibilityUpdate, true);\n  // IMPORTANT: when a page is prerendering, its `visibilityState` is\n  // 'hidden', so in order to account for cases where this module checks for\n  // visibility during prerendering, an additional check after prerendering\n  // completes is also required.\n  addEventListener('prerenderingchange', onVisibilityUpdate, true);\n};\n\nconst getVisibilityWatcher = () => {\n  if (WINDOW.document && firstHiddenTime < 0) {\n    // If the document is hidden when this code runs, assume it was hidden\n    // since navigation start. This isn't a perfect heuristic, but it's the\n    // best we can do until an API is available to support querying past\n    // visibilityState.\n    initHiddenTime();\n    addChangeListeners();\n  }\n  return {\n    get firstHiddenTime() {\n      return firstHiddenTime;\n    },\n  };\n};\n\nexport { getVisibilityWatcher };\n//# sourceMappingURL=getVisibilityWatcher.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst whenActivated = (callback) => {\n  if (WINDOW.document && WINDOW.document.prerendering) {\n    addEventListener('prerenderingchange', () => callback(), true);\n  } else {\n    callback();\n  }\n};\n\nexport { whenActivated };\n//# sourceMappingURL=whenActivated.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for FCP. See https://web.dev/articles/fcp#what_is_a_good_fcp_score */\nconst FCPThresholds = [1800, 3000];\n\n/**\n * Calculates the [FCP](https://web.dev/articles/fcp) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `paint` performance entry used to determine the value. The reported\n * value is a `DOMHighResTimeStamp`.\n */\nconst onFCP = (onReport, opts = {}) => {\n  whenActivated(() => {\n    const visibilityWatcher = getVisibilityWatcher();\n    const metric = initMetric('FCP');\n    let report;\n\n    const handleEntries = (entries) => {\n      (entries ).forEach(entry => {\n        if (entry.name === 'first-contentful-paint') {\n          po.disconnect();\n\n          // Only report if the page wasn't hidden prior to the first paint.\n          if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n            // The activationStart reference is used because FCP should be\n            // relative to page activation rather than navigation start if the\n            // page was prerendered. But in cases where `activationStart` occurs\n            // after the FCP, this time should be clamped at 0.\n            metric.value = Math.max(entry.startTime - getActivationStart(), 0);\n            metric.entries.push(entry);\n            report(true);\n          }\n        }\n      });\n    };\n\n    const po = observe('paint', handleEntries);\n\n    if (po) {\n      report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);\n    }\n  });\n};\n\nexport { FCPThresholds, onFCP };\n//# sourceMappingURL=onFCP.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { onFCP } from './onFCP.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for CLS. See https://web.dev/articles/cls#what_is_a_good_cls_score */\nconst CLSThresholds = [0.1, 0.25];\n\n/**\n * Calculates the [CLS](https://web.dev/articles/cls) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/articles/cls#layout_shift_score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onCLS = (onReport, opts = {}) => {\n  // Start monitoring FCP so we can only report CLS if FCP is also reported.\n  // Note: this is done to match the current behavior of CrUX.\n  onFCP(\n    runOnce(() => {\n      const metric = initMetric('CLS', 0);\n      let report;\n\n      let sessionValue = 0;\n      let sessionEntries = [];\n\n      const handleEntries = (entries) => {\n        entries.forEach(entry => {\n          // Only count layout shifts without recent user input.\n          if (!entry.hadRecentInput) {\n            const firstSessionEntry = sessionEntries[0];\n            const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n            // If the entry occurred less than 1 second after the previous entry\n            // and less than 5 seconds after the first entry in the session,\n            // include the entry in the current session. Otherwise, start a new\n            // session.\n            if (\n              sessionValue &&\n              firstSessionEntry &&\n              lastSessionEntry &&\n              entry.startTime - lastSessionEntry.startTime < 1000 &&\n              entry.startTime - firstSessionEntry.startTime < 5000\n            ) {\n              sessionValue += entry.value;\n              sessionEntries.push(entry);\n            } else {\n              sessionValue = entry.value;\n              sessionEntries = [entry];\n            }\n          }\n        });\n\n        // If the current session value is larger than the current CLS value,\n        // update CLS and the entries contributing to it.\n        if (sessionValue > metric.value) {\n          metric.value = sessionValue;\n          metric.entries = sessionEntries;\n          report();\n        }\n      };\n\n      const po = observe('layout-shift', handleEntries);\n      if (po) {\n        report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges);\n\n        onHidden(() => {\n          handleEntries(po.takeRecords() );\n          report(true);\n        });\n\n        // Queue a task to report (if nothing else triggers a report first).\n        // This allows CLS to be reported as soon as FCP fires when\n        // `reportAllChanges` is true.\n        setTimeout(report, 0);\n      }\n    }),\n  );\n};\n\nexport { CLSThresholds, onCLS };\n//# sourceMappingURL=getCLS.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for FID. See https://web.dev/articles/fid#what_is_a_good_fid_score */\nconst FIDThresholds = [100, 300];\n\n/**\n * Calculates the [FID](https://web.dev/articles/fid) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nconst onFID = (onReport, opts = {}) => {\n  whenActivated(() => {\n    const visibilityWatcher = getVisibilityWatcher();\n    const metric = initMetric('FID');\n    // eslint-disable-next-line prefer-const\n    let report;\n\n    const handleEntry = (entry) => {\n      // Only report if the page wasn't hidden prior to the first input.\n      if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n        metric.value = entry.processingStart - entry.startTime;\n        metric.entries.push(entry);\n        report(true);\n      }\n    };\n\n    const handleEntries = (entries) => {\n      (entries ).forEach(handleEntry);\n    };\n\n    const po = observe('first-input', handleEntries);\n    report = bindReporter(onReport, metric, FIDThresholds, opts.reportAllChanges);\n\n    if (po) {\n      onHidden(\n        runOnce(() => {\n          handleEntries(po.takeRecords() );\n          po.disconnect();\n        }),\n      );\n    }\n  });\n};\n\nexport { FIDThresholds, onFID };\n//# sourceMappingURL=getFID.js.map\n","import { observe } from '../observe.js';\n\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\n\nconst updateEstimate = (entries) => {\n  (entries ).forEach(e => {\n    if (e.interactionId) {\n      minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);\n      maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);\n\n      interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;\n    }\n  });\n};\n\nlet po;\n\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nconst getInteractionCount = () => {\n  return po ? interactionCountEstimate : performance.interactionCount || 0;\n};\n\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nconst initInteractionCountPolyfill = () => {\n  if ('interactionCount' in performance || po) return;\n\n  po = observe('event', updateEstimate, {\n    type: 'event',\n    buffered: true,\n    durationThreshold: 0,\n  } );\n};\n\nexport { getInteractionCount, initInteractionCountPolyfill };\n//# sourceMappingURL=interactionCountPolyfill.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { initInteractionCountPolyfill, getInteractionCount } from './lib/polyfills/interactionCountPolyfill.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for INP. See https://web.dev/articles/inp#what_is_a_good_inp_score */\nconst INPThresholds = [200, 500];\n\n// Used to store the interaction count after a bfcache restore, since p98\n// interaction latencies should only consider the current navigation.\nconst prevInteractionCount = 0;\n\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = () => {\n  return getInteractionCount() - prevInteractionCount;\n};\n\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n\n// A list of longest interactions on the page (by latency) sorted so the\n// longest one is first. The list is as most MAX_INTERACTIONS_TO_CONSIDER long.\nconst longestInteractionList = [];\n\n// A mapping of longest interactions by their interaction ID.\n// This is used for faster lookup.\nconst longestInteractionMap = {};\n\n/**\n * Takes a performance entry and adds it to the list of worst interactions\n * if its duration is long enough to make it among the worst. If the\n * entry is part of an existing interaction, it is merged and the latency\n * and entries list is updated as needed.\n */\nconst processEntry = (entry) => {\n  // The least-long of the 10 longest interactions.\n  const minLongestInteraction = longestInteractionList[longestInteractionList.length - 1];\n\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  const existingInteraction = longestInteractionMap[entry.interactionId];\n\n  // Only process the entry if it's possibly one of the ten longest,\n  // or if it's part of an existing interaction.\n  if (\n    existingInteraction ||\n    longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n    (minLongestInteraction && entry.duration > minLongestInteraction.latency)\n  ) {\n    // If the interaction already exists, update it. Otherwise create one.\n    if (existingInteraction) {\n      existingInteraction.entries.push(entry);\n      existingInteraction.latency = Math.max(existingInteraction.latency, entry.duration);\n    } else {\n      const interaction = {\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        id: entry.interactionId,\n        latency: entry.duration,\n        entries: [entry],\n      };\n      longestInteractionMap[interaction.id] = interaction;\n      longestInteractionList.push(interaction);\n    }\n\n    // Sort the entries by latency (descending) and keep only the top ten.\n    longestInteractionList.sort((a, b) => b.latency - a.latency);\n    longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER).forEach(i => {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete longestInteractionMap[i.id];\n    });\n  }\n};\n\n/**\n * Returns the estimated p98 longest interaction based on the stored\n * interaction candidates and the interaction count for the current page.\n */\nconst estimateP98LongestInteraction = () => {\n  const candidateInteractionIndex = Math.min(\n    longestInteractionList.length - 1,\n    Math.floor(getInteractionCountForNavigation() / 50),\n  );\n\n  return longestInteractionList[candidateInteractionIndex];\n};\n\n/**\n * Calculates the [INP](https://web.dev/articles/inp) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed to\n * control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 are\n * reported as 0. Note that this will not affect your 75th percentile INP value\n * unless that value is also less than 40 (well below the recommended\n * [good](https://web.dev/articles/inp#what_is_a_good_inp_score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onINP = (onReport, opts = {}) => {\n  whenActivated(() => {\n    // TODO(philipwalton): remove once the polyfill is no longer needed.\n    initInteractionCountPolyfill();\n\n    const metric = initMetric('INP');\n    // eslint-disable-next-line prefer-const\n    let report;\n\n    const handleEntries = (entries) => {\n      entries.forEach(entry => {\n        if (entry.interactionId) {\n          processEntry(entry);\n        }\n\n        // Entries of type `first-input` don't currently have an `interactionId`,\n        // so to consider them in INP we have to first check that an existing\n        // entry doesn't match the `duration` and `startTime`.\n        // Note that this logic assumes that `event` entries are dispatched\n        // before `first-input` entries. This is true in Chrome (the only browser\n        // that currently supports INP).\n        // TODO(philipwalton): remove once crbug.com/1325826 is fixed.\n        if (entry.entryType === 'first-input') {\n          const noMatchingEntry = !longestInteractionList.some(interaction => {\n            return interaction.entries.some(prevEntry => {\n              return entry.duration === prevEntry.duration && entry.startTime === prevEntry.startTime;\n            });\n          });\n          if (noMatchingEntry) {\n            processEntry(entry);\n          }\n        }\n      });\n\n      const inp = estimateP98LongestInteraction();\n\n      if (inp && inp.latency !== metric.value) {\n        metric.value = inp.latency;\n        metric.entries = inp.entries;\n        report();\n      }\n    };\n\n    const po = observe('event', handleEntries, {\n      // Event Timing entries have their durations rounded to the nearest 8ms,\n      // so a duration of 40ms would be any event that spans 2.5 or more frames\n      // at 60Hz. This threshold is chosen to strike a balance between usefulness\n      // and performance. Running this callback for any interaction that spans\n      // just one or two frames is likely not worth the insight that could be\n      // gained.\n      durationThreshold: opts.durationThreshold != null ? opts.durationThreshold : 40,\n    } );\n\n    report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges);\n\n    if (po) {\n      // If browser supports interactionId (and so supports INP), also\n      // observe entries of type `first-input`. This is useful in cases\n      // where the first interaction is less than the `durationThreshold`.\n      if ('PerformanceEventTiming' in WINDOW && 'interactionId' in PerformanceEventTiming.prototype) {\n        po.observe({ type: 'first-input', buffered: true });\n      }\n\n      onHidden(() => {\n        handleEntries(po.takeRecords() );\n\n        // If the interaction count shows that there were interactions but\n        // none were captured by the PerformanceObserver, report a latency of 0.\n        if (metric.value < 0 && getInteractionCountForNavigation() > 0) {\n          metric.value = 0;\n          metric.entries = [];\n        }\n\n        report(true);\n      });\n    }\n  });\n};\n\nexport { INPThresholds, onINP };\n//# sourceMappingURL=getINP.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for LCP. See https://web.dev/articles/lcp#what_is_a_good_lcp_score */\nconst LCPThresholds = [2500, 4000];\n\nconst reportedMetricIDs = {};\n\n/**\n * Calculates the [LCP](https://web.dev/articles/lcp) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called any time a new `largest-contentful-paint`\n * performance entry is dispatched, or once the final value of the metric has\n * been determined.\n */\nconst onLCP = (onReport, opts = {}) => {\n  whenActivated(() => {\n    const visibilityWatcher = getVisibilityWatcher();\n    const metric = initMetric('LCP');\n    let report;\n\n    const handleEntries = (entries) => {\n      const lastEntry = entries[entries.length - 1] ;\n      if (lastEntry) {\n        // Only report if the page wasn't hidden prior to LCP.\n        if (lastEntry.startTime < visibilityWatcher.firstHiddenTime) {\n          // The startTime attribute returns the value of the renderTime if it is\n          // not 0, and the value of the loadTime otherwise. The activationStart\n          // reference is used because LCP should be relative to page activation\n          // rather than navigation start if the page was prerendered. But in cases\n          // where `activationStart` occurs after the LCP, this time should be\n          // clamped at 0.\n          metric.value = Math.max(lastEntry.startTime - getActivationStart(), 0);\n          metric.entries = [lastEntry];\n          report();\n        }\n      }\n    };\n\n    const po = observe('largest-contentful-paint', handleEntries);\n\n    if (po) {\n      report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n\n      const stopListening = runOnce(() => {\n        if (!reportedMetricIDs[metric.id]) {\n          handleEntries(po.takeRecords() );\n          po.disconnect();\n          reportedMetricIDs[metric.id] = true;\n          report(true);\n        }\n      });\n\n      // Stop listening after input. Note: while scrolling is an input that\n      // stops LCP observation, it's unreliable since it can be programmatically\n      // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n      ['keydown', 'click'].forEach(type => {\n        if (WINDOW.document) {\n          // Wrap in a setTimeout so the callback is run in a separate task\n          // to avoid extending the keyboard/click handler to reduce INP impact\n          // https://github.com/GoogleChrome/web-vitals/issues/383\n          addEventListener(type, () => setTimeout(stopListening, 0), true);\n        }\n      });\n\n      onHidden(stopListening);\n    }\n  });\n};\n\nexport { LCPThresholds, onLCP };\n//# sourceMappingURL=getLCP.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getNavigationEntry } from './lib/getNavigationEntry.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for TTFB. See https://web.dev/articles/ttfb#what_is_a_good_ttfb_score */\nconst TTFBThresholds = [800, 1800];\n\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback) => {\n  if (WINDOW.document && WINDOW.document.prerendering) {\n    whenActivated(() => whenReady(callback));\n  } else if (WINDOW.document && WINDOW.document.readyState !== 'complete') {\n    addEventListener('load', () => whenReady(callback), true);\n  } else {\n    // Queue a task so the callback runs after `loadEventEnd`.\n    setTimeout(callback, 0);\n  }\n};\n\n/**\n * Calculates the [TTFB](https://web.dev/articles/ttfb) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nconst onTTFB = (onReport, opts = {}) => {\n  const metric = initMetric('TTFB');\n  const report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n\n  whenReady(() => {\n    const navEntry = getNavigationEntry();\n\n    if (navEntry) {\n      const responseStart = navEntry.responseStart;\n\n      // In some cases no value is reported by the browser (for\n      // privacy/security reasons), and in other cases (bugs) the value is\n      // negative or is larger than the current page time. Ignore these cases:\n      // https://github.com/GoogleChrome/web-vitals/issues/137\n      // https://github.com/GoogleChrome/web-vitals/issues/162\n      // https://github.com/GoogleChrome/web-vitals/issues/275\n      if (responseStart <= 0 || responseStart > performance.now()) return;\n\n      // The activationStart reference is used because TTFB should be\n      // relative to page activation rather than navigation start if the\n      // page was prerendered. But in cases where `activationStart` occurs\n      // after the first byte is received, this time should be clamped at 0.\n      metric.value = Math.max(responseStart - getActivationStart(), 0);\n\n      metric.entries = [navEntry];\n      report(true);\n    }\n  });\n};\n\nexport { TTFBThresholds, onTTFB };\n//# sourceMappingURL=onTTFB.js.map\n","import { logger, getFunctionName } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { onCLS } from './web-vitals/getCLS.js';\nimport { onFID } from './web-vitals/getFID.js';\nimport { onINP } from './web-vitals/getINP.js';\nimport { onLCP } from './web-vitals/getLCP.js';\nimport { observe } from './web-vitals/lib/observe.js';\nimport { onTTFB } from './web-vitals/onTTFB.js';\n\nconst handlers = {};\nconst instrumented = {};\n\nlet _previousCls;\nlet _previousFid;\nlet _previousLcp;\nlet _previousTtfb;\nlet _previousInp;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nfunction addClsInstrumentationHandler(\n  callback,\n  stopOnCallback = false,\n) {\n  return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nfunction addLcpInstrumentationHandler(\n  callback,\n  stopOnCallback = false,\n) {\n  return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addFidInstrumentationHandler(callback) {\n  return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n */\nfunction addTtfbInstrumentationHandler(callback) {\n  return addMetricObserver('ttfb', callback, instrumentTtfb, _previousTtfb);\n}\n\n/**\n * Add a callback that will be triggered when a INP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addInpInstrumentationHandler(\n  callback,\n) {\n  return addMetricObserver('inp', callback, instrumentInp, _previousInp);\n}\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addPerformanceInstrumentationHandler(\n  type,\n  callback,\n) {\n  addHandler(type, callback);\n\n  if (!instrumented[type]) {\n    instrumentPerformanceObserver(type);\n    instrumented[type] = true;\n  }\n\n  return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type, data) {\n  const typeHandlers = handlers[type];\n\n  if (!typeHandlers || !typeHandlers.length) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\nfunction instrumentCls() {\n  return onCLS(\n    metric => {\n      triggerHandlers('cls', {\n        metric,\n      });\n      _previousCls = metric;\n    },\n    // We want the callback to be called whenever the CLS value updates.\n    // By default, the callback is only called when the tab goes to the background.\n    { reportAllChanges: true },\n  );\n}\n\nfunction instrumentFid() {\n  return onFID(metric => {\n    triggerHandlers('fid', {\n      metric,\n    });\n    _previousFid = metric;\n  });\n}\n\nfunction instrumentLcp() {\n  return onLCP(\n    metric => {\n      triggerHandlers('lcp', {\n        metric,\n      });\n      _previousLcp = metric;\n    },\n    // We want the callback to be called whenever the LCP value updates.\n    // By default, the callback is only called when the tab goes to the background.\n    { reportAllChanges: true },\n  );\n}\n\nfunction instrumentTtfb() {\n  return onTTFB(metric => {\n    triggerHandlers('ttfb', {\n      metric,\n    });\n    _previousTtfb = metric;\n  });\n}\n\nfunction instrumentInp() {\n  return onINP(metric => {\n    triggerHandlers('inp', {\n      metric,\n    });\n    _previousInp = metric;\n  });\n}\n\nfunction addMetricObserver(\n  type,\n  callback,\n  instrumentFn,\n  previousValue,\n  stopOnCallback = false,\n) {\n  addHandler(type, callback);\n\n  let stopListening;\n\n  if (!instrumented[type]) {\n    stopListening = instrumentFn();\n    instrumented[type] = true;\n  }\n\n  if (previousValue) {\n    callback({ metric: previousValue });\n  }\n\n  return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type) {\n  const options = {};\n\n  // Special per-type options we want to use\n  if (type === 'event') {\n    options.durationThreshold = 0;\n  }\n\n  observe(\n    type,\n    entries => {\n      triggerHandlers(type, { entries });\n    },\n    options,\n  );\n}\n\nfunction addHandler(type, handler) {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] ).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n  type,\n  callback,\n  stopListening,\n) {\n  return () => {\n    if (stopListening) {\n      stopListening();\n    }\n\n    const typeHandlers = handlers[type];\n\n    if (!typeHandlers) {\n      return;\n    }\n\n    const index = typeHandlers.indexOf(callback);\n    if (index !== -1) {\n      typeHandlers.splice(index, 1);\n    }\n  };\n}\n\n/**\n * Check if a PerformanceEntry is a PerformanceEventTiming by checking for the `duration` property.\n */\nfunction isPerformanceEventTiming(entry) {\n  return 'duration' in entry;\n}\n\nexport { addClsInstrumentationHandler, addFidInstrumentationHandler, addInpInstrumentationHandler, addLcpInstrumentationHandler, addPerformanceInstrumentationHandler, addTtfbInstrumentationHandler, isPerformanceEventTiming };\n//# sourceMappingURL=instrument.js.map\n","import { spanToJSON, withActiveSpan, startInactiveSpan, getClient, getCurrentScope } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nfunction isMeasurementValue(value) {\n  return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nfunction startAndEndSpan(\n  parentSpan,\n  startTimeInSeconds,\n  endTime,\n  { ...ctx },\n) {\n  const parentStartTime = spanToJSON(parentSpan).start_timestamp;\n  if (parentStartTime && parentStartTime > startTimeInSeconds) {\n    // We can only do this for SentrySpans...\n    if (typeof (parentSpan ).updateStartTime === 'function') {\n      (parentSpan ).updateStartTime(startTimeInSeconds);\n    }\n  }\n\n  // The return value only exists for tests\n  return withActiveSpan(parentSpan, () => {\n    const span = startInactiveSpan({\n      startTime: startTimeInSeconds,\n      ...ctx,\n    });\n\n    if (span) {\n      span.end(endTime);\n    }\n\n    return span;\n  });\n}\n\n/**\n * Starts an inactive, standalone span used to send web vital values to Sentry.\n * DO NOT use this for arbitrary spans, as these spans require special handling\n * during ingestion to extract metrics.\n *\n * This function adds a bunch of attributes and data to the span that's shared\n * by all web vital standalone spans. However, you need to take care of adding\n * the actual web vital value as an event to the span. Also, you need to assign\n * a transaction name and some other values that are specific to the web vital.\n *\n * Ultimately, you also need to take care of ending the span to send it off.\n *\n * @param options\n *\n * @returns an inactive, standalone and NOT YET ended span\n */\nfunction startStandaloneWebVitalSpan(options) {\n  const client = getClient();\n  if (!client) {\n    return;\n  }\n\n  const { name, transaction, attributes: passedAttributes, startTime } = options;\n\n  const { release, environment } = client.getOptions();\n  // We need to get the replay, user, and activeTransaction from the current scope\n  // so that we can associate replay id, profile id, and a user display to the span\n  const replay = client.getIntegrationByName('Replay');\n  const replayId = replay && replay.getReplayId();\n\n  const scope = getCurrentScope();\n\n  const user = scope.getUser();\n  const userDisplay = user !== undefined ? user.email || user.id || user.ip_address : undefined;\n\n  let profileId = undefined;\n  try {\n    // @ts-expect-error skip optional chaining to save bundle size with try catch\n    profileId = scope.getScopeData().contexts.profile.profile_id;\n  } catch (e) {\n    // do nothing\n  }\n\n  const attributes = {\n    release,\n    environment,\n\n    user: userDisplay || undefined,\n    profile_id: profileId || undefined,\n    replay_id: replayId || undefined,\n\n    transaction,\n\n    // Web vital score calculation relies on the user agent to account for different\n    // browsers setting different thresholds for what is considered a good/meh/bad value.\n    // For example: Chrome vs. Chrome Mobile\n    'user_agent.original': WINDOW.navigator && WINDOW.navigator.userAgent,\n\n    ...passedAttributes,\n  };\n\n  return startInactiveSpan({\n    name,\n    attributes,\n    startTime,\n    experimental: {\n      standalone: true,\n    },\n  });\n}\n\n/** Get the browser performance API. */\nfunction getBrowserPerformanceAPI() {\n  // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n  return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time) {\n  return time / 1000;\n}\n\nexport { getBrowserPerformanceAPI, isMeasurementValue, msToSec, startAndEndSpan, startStandaloneWebVitalSpan };\n//# sourceMappingURL=utils.js.map\n","import { _optionalChain } from '@sentry/utils';\nimport { getClient, getActiveSpan, getRootSpan, spanToJSON, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE } from '@sentry/core';\nimport { logger, browserPerformanceTimeOrigin, htmlTreeAsString, dropUndefinedKeys } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { addClsInstrumentationHandler } from './instrument.js';\nimport { msToSec, startStandaloneWebVitalSpan } from './utils.js';\nimport { onHidden } from './web-vitals/lib/onHidden.js';\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value once\n *\n * - the page visibility is hidden\n * - a navigation span is started (to stop CLS measurement for SPA soft navigations)\n *\n * Once either of these events triggers, the CLS value is sent as a standalone span and we stop\n * measuring CLS.\n */\nfunction trackClsAsStandaloneSpan() {\n  let standaloneCLsValue = 0;\n  let standaloneClsEntry;\n  let pageloadSpanId;\n\n  if (!supportsLayoutShift()) {\n    return;\n  }\n\n  let sentSpan = false;\n  function _collectClsOnce() {\n    if (sentSpan) {\n      return;\n    }\n    sentSpan = true;\n    if (pageloadSpanId) {\n      sendStandaloneClsSpan(standaloneCLsValue, standaloneClsEntry, pageloadSpanId);\n    }\n    cleanupClsHandler();\n  }\n\n  const cleanupClsHandler = addClsInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1] ;\n    if (!entry) {\n      return;\n    }\n    standaloneCLsValue = metric.value;\n    standaloneClsEntry = entry;\n  }, true);\n\n  // use pagehide event from web-vitals\n  onHidden(() => {\n    _collectClsOnce();\n  });\n\n  // Since the call chain of this function is synchronous and evaluates before the SDK client is created,\n  // we need to wait with subscribing to a client hook until the client is created. Therefore, we defer\n  // to the next tick after the SDK setup.\n  setTimeout(() => {\n    const client = getClient();\n\n    const unsubscribeStartNavigation = _optionalChain([client, 'optionalAccess', _ => _.on, 'call', _2 => _2('startNavigationSpan', () => {\n      _collectClsOnce();\n      unsubscribeStartNavigation && unsubscribeStartNavigation();\n    })]);\n\n    const activeSpan = getActiveSpan();\n    const rootSpan = activeSpan && getRootSpan(activeSpan);\n    const spanJSON = rootSpan && spanToJSON(rootSpan);\n    if (spanJSON && spanJSON.op === 'pageload') {\n      pageloadSpanId = rootSpan.spanContext().spanId;\n    }\n  }, 0);\n}\n\nfunction sendStandaloneClsSpan(clsValue, entry, pageloadSpanId) {\n  DEBUG_BUILD && logger.log(`Sending CLS span (${clsValue})`);\n\n  const startTime = msToSec(browserPerformanceTimeOrigin ) + (_optionalChain([entry, 'optionalAccess', _3 => _3.startTime]) || 0);\n  const duration = msToSec(_optionalChain([entry, 'optionalAccess', _4 => _4.duration]) || 0);\n  const routeName = getCurrentScope().getScopeData().transactionName;\n\n  const name = entry ? htmlTreeAsString(_optionalChain([entry, 'access', _5 => _5.sources, 'access', _6 => _6[0], 'optionalAccess', _7 => _7.node])) : 'Layout shift';\n\n  const attributes = dropUndefinedKeys({\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.cls',\n    [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.webvital.cls',\n    [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: _optionalChain([entry, 'optionalAccess', _8 => _8.duration]) || 0,\n    // attach the pageload span id to the CLS span so that we can link them in the UI\n    'sentry.pageload.span_id': pageloadSpanId,\n  });\n\n  const span = startStandaloneWebVitalSpan({\n    name,\n    transaction: routeName,\n    attributes,\n    startTime,\n  });\n\n  _optionalChain([span, 'optionalAccess', _9 => _9.addEvent, 'call', _10 => _10('cls', {\n    [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: '',\n    [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: clsValue,\n  })]);\n\n  _optionalChain([span, 'optionalAccess', _11 => _11.end, 'call', _12 => _12(startTime + duration)]);\n}\n\nfunction supportsLayoutShift() {\n  try {\n    return _optionalChain([PerformanceObserver, 'access', _13 => _13.supportedEntryTypes, 'optionalAccess', _14 => _14.includes, 'call', _15 => _15('layout-shift')]);\n  } catch (e) {\n    return false;\n  }\n}\n\nexport { trackClsAsStandaloneSpan };\n//# sourceMappingURL=cls.js.map\n","import { getActiveSpan, startInactiveSpan, spanToJSON, setMeasurement, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport { browserPerformanceTimeOrigin, logger, parseUrl, htmlTreeAsString, getComponentName } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../types.js';\nimport { trackClsAsStandaloneSpan } from './cls.js';\nimport { addPerformanceInstrumentationHandler, addClsInstrumentationHandler, addLcpInstrumentationHandler, addFidInstrumentationHandler, addTtfbInstrumentationHandler } from './instrument.js';\nimport { getBrowserPerformanceAPI, msToSec, startAndEndSpan, isMeasurementValue } from './utils.js';\nimport { getNavigationEntry } from './web-vitals/lib/getNavigationEntry.js';\nimport { getVisibilityWatcher } from './web-vitals/lib/getVisibilityWatcher.js';\n\n/* eslint-disable max-lines */\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\nlet _performanceCursor = 0;\n\nlet _measurements = {};\nlet _lcpEntry;\nlet _clsEntry;\n\n/**\n * Start tracking web vitals.\n * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\n *\n * @returns A function that forces web vitals collection\n */\nfunction startTrackingWebVitals({ recordClsStandaloneSpans }) {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin) {\n    // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n    if (performance.mark) {\n      WINDOW.performance.mark('sentry-tracing-init');\n    }\n    const fidCleanupCallback = _trackFID();\n    const lcpCleanupCallback = _trackLCP();\n    const ttfbCleanupCallback = _trackTtfb();\n    const clsCleanupCallback = recordClsStandaloneSpans ? trackClsAsStandaloneSpan() : _trackCLS();\n\n    return () => {\n      fidCleanupCallback();\n      lcpCleanupCallback();\n      ttfbCleanupCallback();\n      clsCleanupCallback && clsCleanupCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nfunction startTrackingLongTasks() {\n  addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n    if (!getActiveSpan()) {\n      return;\n    }\n    for (const entry of entries) {\n      const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n      const duration = msToSec(entry.duration);\n\n      const span = startInactiveSpan({\n        name: 'Main UI thread blocked',\n        op: 'ui.long-task',\n        startTime,\n        attributes: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n        },\n      });\n      if (span) {\n        span.end(startTime + duration);\n      }\n    }\n  });\n}\n\n/**\n * Start tracking long animation frames.\n */\nfunction startTrackingLongAnimationFrames() {\n  // NOTE: the current web-vitals version (3.5.2) does not support long-animation-frame, so\n  // we directly observe `long-animation-frame` events instead of through the web-vitals\n  // `observe` helper function.\n  const observer = new PerformanceObserver(list => {\n    if (!getActiveSpan()) {\n      return;\n    }\n    for (const entry of list.getEntries() ) {\n      if (!entry.scripts[0]) {\n        continue;\n      }\n\n      const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n      const duration = msToSec(entry.duration);\n\n      const attributes = {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n      };\n\n      const initialScript = entry.scripts[0];\n      const { invoker, invokerType, sourceURL, sourceFunctionName, sourceCharPosition } = initialScript;\n      attributes['browser.script.invoker'] = invoker;\n      attributes['browser.script.invoker_type'] = invokerType;\n      if (sourceURL) {\n        attributes['code.filepath'] = sourceURL;\n      }\n      if (sourceFunctionName) {\n        attributes['code.function'] = sourceFunctionName;\n      }\n      if (sourceCharPosition !== -1) {\n        attributes['browser.script.source_char_position'] = sourceCharPosition;\n      }\n\n      const span = startInactiveSpan({\n        name: 'Main UI thread blocked',\n        op: 'ui.long-animation-frame',\n        startTime,\n        attributes,\n      });\n      if (span) {\n        span.end(startTime + duration);\n      }\n    }\n  });\n\n  observer.observe({ type: 'long-animation-frame', buffered: true });\n}\n\n/**\n * Start tracking interaction events.\n */\nfunction startTrackingInteractions() {\n  addPerformanceInstrumentationHandler('event', ({ entries }) => {\n    if (!getActiveSpan()) {\n      return;\n    }\n    for (const entry of entries) {\n      if (entry.name === 'click') {\n        const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n        const duration = msToSec(entry.duration);\n\n        const spanOptions = {\n          name: htmlTreeAsString(entry.target),\n          op: `ui.interaction.${entry.name}`,\n          startTime: startTime,\n          attributes: {\n            [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n          },\n        };\n\n        const componentName = getComponentName(entry.target);\n        if (componentName) {\n          spanOptions.attributes['ui.component_name'] = componentName;\n        }\n\n        const span = startInactiveSpan(spanOptions);\n        if (span) {\n          span.end(startTime + duration);\n        }\n      }\n    }\n  });\n}\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value and last entry\n * to the `_measurements` object which ultimately is applied to the pageload span's measurements.\n */\nfunction _trackCLS() {\n  return addClsInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1] ;\n    if (!entry) {\n      return;\n    }\n    DEBUG_BUILD && logger.log(`[Measurements] Adding CLS ${metric.value}`);\n    _measurements['cls'] = { value: metric.value, unit: '' };\n    _clsEntry = entry;\n  }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP() {\n  return addLcpInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('[Measurements] Adding LCP');\n    _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n    _lcpEntry = entry ;\n  }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID() {\n  return addFidInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    const timeOrigin = msToSec(browserPerformanceTimeOrigin );\n    const startTime = msToSec(entry.startTime);\n    DEBUG_BUILD && logger.log('[Measurements] Adding FID');\n    _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n    _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n  });\n}\n\nfunction _trackTtfb() {\n  return addTtfbInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('[Measurements] Adding TTFB');\n    _measurements['ttfb'] = { value: metric.value, unit: 'millisecond' };\n  });\n}\n\n/** Add performance related spans to a transaction */\nfunction addPerformanceEntries(span, options) {\n  const performance = getBrowserPerformanceAPI();\n  if (!performance || !WINDOW.performance.getEntries || !browserPerformanceTimeOrigin) {\n    // Gatekeeper if performance API not available\n    return;\n  }\n\n  DEBUG_BUILD && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n  const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n  const performanceEntries = performance.getEntries();\n\n  const { op, start_timestamp: transactionStartTime } = spanToJSON(span);\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  performanceEntries.slice(_performanceCursor).forEach((entry) => {\n    const startTime = msToSec(entry.startTime);\n    const duration = msToSec(\n      // Inexplicably, Chrome sometimes emits a negative duration. We need to work around this.\n      // There is a SO post attempting to explain this, but it leaves one with open questions: https://stackoverflow.com/questions/23191918/peformance-getentries-and-negative-duration-display\n      // The way we clamp the value is probably not accurate, since we have observed this happen for things that may take a while to load, like for example the replay worker.\n      // TODO: Investigate why this happens and how to properly mitigate. For now, this is a workaround to prevent transactions being dropped due to negative duration spans.\n      Math.max(0, entry.duration),\n    );\n\n    if (op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n      return;\n    }\n\n    switch (entry.entryType) {\n      case 'navigation': {\n        _addNavigationSpans(span, entry, timeOrigin);\n        break;\n      }\n      case 'mark':\n      case 'paint':\n      case 'measure': {\n        _addMeasureSpans(span, entry, startTime, duration, timeOrigin);\n\n        // capture web vitals\n        const firstHidden = getVisibilityWatcher();\n        // Only report if the page wasn't hidden prior to the web vital.\n        const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n        if (entry.name === 'first-paint' && shouldRecord) {\n          DEBUG_BUILD && logger.log('[Measurements] Adding FP');\n          _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        if (entry.name === 'first-contentful-paint' && shouldRecord) {\n          DEBUG_BUILD && logger.log('[Measurements] Adding FCP');\n          _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        break;\n      }\n      case 'resource': {\n        _addResourceSpans(span, entry, entry.name , startTime, duration, timeOrigin);\n        break;\n      }\n      // Ignore other entry types.\n    }\n  });\n\n  _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n  _trackNavigator(span);\n\n  // Measurements are only available for pageload transactions\n  if (op === 'pageload') {\n    _addTtfbRequestTimeToMeasurements(_measurements);\n\n    ['fcp', 'fp', 'lcp'].forEach(name => {\n      const measurement = _measurements[name];\n      if (!measurement || !transactionStartTime || timeOrigin >= transactionStartTime) {\n        return;\n      }\n      // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n      // Unfortunately, timeOrigin is not captured within the span span data, so these web vitals will need\n      // to be adjusted to be relative to span.startTimestamp.\n      const oldValue = measurement.value;\n      const measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n      // normalizedValue should be in milliseconds\n      const normalizedValue = Math.abs((measurementTimestamp - transactionStartTime) * 1000);\n      const delta = normalizedValue - oldValue;\n\n      DEBUG_BUILD && logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n      measurement.value = normalizedValue;\n    });\n\n    const fidMark = _measurements['mark.fid'];\n    if (fidMark && _measurements['fid']) {\n      // create span for FID\n      startAndEndSpan(span, fidMark.value, fidMark.value + msToSec(_measurements['fid'].value), {\n        name: 'first input delay',\n        op: 'ui.action',\n        attributes: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n        },\n      });\n\n      // Delete mark.fid as we don't want it to be part of final payload\n      delete _measurements['mark.fid'];\n    }\n\n    // If FCP is not recorded we should not record the cls value\n    // according to the new definition of CLS.\n    // TODO: Check if the first condition is still necessary: `onCLS` already only fires once `onFCP` was called.\n    if (!('fcp' in _measurements) || !options.recordClsOnPageloadSpan) {\n      delete _measurements.cls;\n    }\n\n    Object.entries(_measurements).forEach(([measurementName, measurement]) => {\n      setMeasurement(measurementName, measurement.value, measurement.unit);\n    });\n\n    _tagMetricInfo(span);\n  }\n\n  _lcpEntry = undefined;\n  _clsEntry = undefined;\n  _measurements = {};\n}\n\n/** Create measure related spans */\nfunction _addMeasureSpans(\n  span,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry,\n  startTime,\n  duration,\n  timeOrigin,\n) {\n  const navEntry = getNavigationEntry();\n  const requestTime = msToSec(navEntry ? navEntry.requestStart : 0);\n  // Because performance.measure accepts arbitrary timestamps it can produce\n  // spans that happen before the browser even makes a request for the page.\n  //\n  // An example of this is the automatically generated Next.js-before-hydration\n  // spans created by the Next.js framework.\n  //\n  // To prevent this we will pin the start timestamp to the request start time\n  // This does make duration inaccruate, so if this does happen, we will add\n  // an attribute to the span\n  const measureStartTimestamp = timeOrigin + Math.max(startTime, requestTime);\n  const startTimeStamp = timeOrigin + startTime;\n  const measureEndTimestamp = startTimeStamp + duration;\n\n  const attributes = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n  };\n\n  if (measureStartTimestamp !== startTimeStamp) {\n    attributes['sentry.browser.measure_happened_before_request'] = true;\n    attributes['sentry.browser.measure_start_time'] = measureStartTimestamp;\n  }\n\n  startAndEndSpan(span, measureStartTimestamp, measureEndTimestamp, {\n    name: entry.name ,\n    op: entry.entryType ,\n    attributes,\n  });\n\n  return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addNavigationSpans(span, entry, timeOrigin) {\n  ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n    _addPerformanceNavigationTiming(span, entry, event, timeOrigin);\n  });\n  _addPerformanceNavigationTiming(span, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n  _addPerformanceNavigationTiming(span, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n  _addPerformanceNavigationTiming(span, entry, 'domainLookup', timeOrigin, 'DNS');\n  _addRequest(span, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n  span,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry,\n  event,\n  timeOrigin,\n  name,\n  eventEnd,\n) {\n  const end = eventEnd ? (entry[eventEnd] ) : (entry[`${event}End`] );\n  const start = entry[`${event}Start`] ;\n  if (!start || !end) {\n    return;\n  }\n  startAndEndSpan(span, timeOrigin + msToSec(start), timeOrigin + msToSec(end), {\n    op: 'browser',\n    name: name || event,\n    attributes: {\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n    },\n  });\n}\n\n/** Create request and response related spans */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addRequest(span, entry, timeOrigin) {\n  const requestStartTimestamp = timeOrigin + msToSec(entry.requestStart );\n  const responseEndTimestamp = timeOrigin + msToSec(entry.responseEnd );\n  const responseStartTimestamp = timeOrigin + msToSec(entry.responseStart );\n  if (entry.responseEnd) {\n    // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n    // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n    // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n    // these spans when the responseEnd value is available. The backend (Relay) would drop the entire span if it contained faulty spans.\n    startAndEndSpan(span, requestStartTimestamp, responseEndTimestamp, {\n      op: 'browser',\n      name: 'request',\n      attributes: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n      },\n    });\n\n    startAndEndSpan(span, responseStartTimestamp, responseEndTimestamp, {\n      op: 'browser',\n      name: 'response',\n      attributes: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n      },\n    });\n  }\n}\n\n/** Create resource-related spans */\nfunction _addResourceSpans(\n  span,\n  entry,\n  resourceUrl,\n  startTime,\n  duration,\n  timeOrigin,\n) {\n  // we already instrument based on fetch and xhr, so we don't need to\n  // duplicate spans here.\n  if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n    return;\n  }\n\n  const parsedUrl = parseUrl(resourceUrl);\n\n  const attributes = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n  };\n  setResourceEntrySizeData(attributes, entry, 'transferSize', 'http.response_transfer_size');\n  setResourceEntrySizeData(attributes, entry, 'encodedBodySize', 'http.response_content_length');\n  setResourceEntrySizeData(attributes, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n  if ('renderBlockingStatus' in entry) {\n    attributes['resource.render_blocking_status'] = entry.renderBlockingStatus;\n  }\n  if (parsedUrl.protocol) {\n    attributes['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n  }\n\n  if (parsedUrl.host) {\n    attributes['server.address'] = parsedUrl.host;\n  }\n\n  attributes['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin);\n\n  const startTimestamp = timeOrigin + startTime;\n  const endTimestamp = startTimestamp + duration;\n\n  startAndEndSpan(span, startTimestamp, endTimestamp, {\n    name: resourceUrl.replace(WINDOW.location.origin, ''),\n    op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n    attributes,\n  });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(span) {\n  const navigator = WINDOW.navigator ;\n  if (!navigator) {\n    return;\n  }\n\n  // track network connectivity\n  const connection = navigator.connection;\n  if (connection) {\n    if (connection.effectiveType) {\n      span.setAttribute('effectiveConnectionType', connection.effectiveType);\n    }\n\n    if (connection.type) {\n      span.setAttribute('connectionType', connection.type);\n    }\n\n    if (isMeasurementValue(connection.rtt)) {\n      _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n    }\n  }\n\n  if (isMeasurementValue(navigator.deviceMemory)) {\n    span.setAttribute('deviceMemory', `${navigator.deviceMemory} GB`);\n  }\n\n  if (isMeasurementValue(navigator.hardwareConcurrency)) {\n    span.setAttribute('hardwareConcurrency', String(navigator.hardwareConcurrency));\n  }\n}\n\n/** Add LCP / CLS data to span to allow debugging */\nfunction _tagMetricInfo(span) {\n  if (_lcpEntry) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding LCP Data');\n\n    // Capture Properties of the LCP element that contributes to the LCP.\n\n    if (_lcpEntry.element) {\n      span.setAttribute('lcp.element', htmlTreeAsString(_lcpEntry.element));\n    }\n\n    if (_lcpEntry.id) {\n      span.setAttribute('lcp.id', _lcpEntry.id);\n    }\n\n    if (_lcpEntry.url) {\n      // Trim URL to the first 200 characters.\n      span.setAttribute('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n    }\n\n    span.setAttribute('lcp.size', _lcpEntry.size);\n  }\n\n  // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n  if (_clsEntry && _clsEntry.sources) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding CLS Data');\n    _clsEntry.sources.forEach((source, index) =>\n      span.setAttribute(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n    );\n  }\n}\n\nfunction setResourceEntrySizeData(\n  attributes,\n  entry,\n  key,\n  dataKey,\n) {\n  const entryVal = entry[key];\n  if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n    attributes[dataKey] = entryVal;\n  }\n}\n\n/**\n * Add ttfb request time information to measurements.\n *\n * ttfb information is added via vendored web vitals library.\n */\nfunction _addTtfbRequestTimeToMeasurements(_measurements) {\n  const navEntry = getNavigationEntry();\n  if (!navEntry) {\n    return;\n  }\n\n  const { responseStart, requestStart } = navEntry;\n\n  if (requestStart <= responseStart) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding TTFB Request Time');\n    _measurements['ttfb.requestTime'] = {\n      value: responseStart - requestStart,\n      unit: 'millisecond',\n    };\n  }\n}\n\nexport { _addMeasureSpans, _addResourceSpans, addPerformanceEntries, startTrackingInteractions, startTrackingLongAnimationFrames, startTrackingLongTasks, startTrackingWebVitals };\n//# sourceMappingURL=browserMetrics.js.map\n","import { addHandler, maybeInstrument, triggerHandlers, fill, addNonEnumerableProperty, uuid4 } from '@sentry/utils';\nimport { WINDOW } from '../types.js';\n\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID;\nlet lastCapturedEventType;\nlet lastCapturedEventTargetId;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addClickKeypressInstrumentationHandler(handler) {\n  const type = 'dom';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nfunction instrumentDOM() {\n  if (!WINDOW.document) {\n    return;\n  }\n\n  // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n  // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n  // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n  const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n  const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n  WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n  WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n  // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n  // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n  // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n  // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n  // guaranteed to fire at least once.)\n  ['EventTarget', 'Node'].forEach((target) => {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n    const proto = (WINDOW )[target] && (WINDOW )[target].prototype;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n    if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n      return;\n    }\n\n    fill(proto, 'addEventListener', function (originalAddEventListener) {\n      return function (\n\n        type,\n        listener,\n        options,\n      ) {\n        if (type === 'click' || type == 'keypress') {\n          try {\n            const el = this ;\n            const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n            const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n            if (!handlerForType.handler) {\n              const handler = makeDOMEventHandler(triggerDOMHandler);\n              handlerForType.handler = handler;\n              originalAddEventListener.call(this, type, handler, options);\n            }\n\n            handlerForType.refCount++;\n          } catch (e) {\n            // Accessing dom properties is always fragile.\n            // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n          }\n        }\n\n        return originalAddEventListener.call(this, type, listener, options);\n      };\n    });\n\n    fill(\n      proto,\n      'removeEventListener',\n      function (originalRemoveEventListener) {\n        return function (\n\n          type,\n          listener,\n          options,\n        ) {\n          if (type === 'click' || type == 'keypress') {\n            try {\n              const el = this ;\n              const handlers = el.__sentry_instrumentation_handlers__ || {};\n              const handlerForType = handlers[type];\n\n              if (handlerForType) {\n                handlerForType.refCount--;\n                // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n                if (handlerForType.refCount <= 0) {\n                  originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n                  handlerForType.handler = undefined;\n                  delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n                }\n\n                // If there are no longer any custom handlers of any type on this element, cleanup everything.\n                if (Object.keys(handlers).length === 0) {\n                  delete el.__sentry_instrumentation_handlers__;\n                }\n              }\n            } catch (e) {\n              // Accessing dom properties is always fragile.\n              // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n            }\n          }\n\n          return originalRemoveEventListener.call(this, type, listener, options);\n        };\n      },\n    );\n  });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event) {\n  // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n  if (event.type !== lastCapturedEventType) {\n    return false;\n  }\n\n  try {\n    // If both events have the same type, it's still possible that actions were performed on different targets.\n    // e.g. 2 clicks on different buttons.\n    if (!event.target || (event.target )._sentryId !== lastCapturedEventTargetId) {\n      return false;\n    }\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n  }\n\n  // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n  // to which an event listener was attached), we treat them as the same action, as we want to capture\n  // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n  return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType, target) {\n  // We are only interested in filtering `keypress` events for now.\n  if (eventType !== 'keypress') {\n    return false;\n  }\n\n  if (!target || !target.tagName) {\n    return true;\n  }\n\n  // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n  // e.g.tabbing through elements, hotkeys, etc.\n  if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n  handler,\n  globalListener = false,\n) {\n  return (event) => {\n    // It's possible this handler might trigger multiple times for the same\n    // event (e.g. event propagation through node ancestors).\n    // Ignore if we've already captured that event.\n    if (!event || event['_sentryCaptured']) {\n      return;\n    }\n\n    const target = getEventTarget(event);\n\n    // We always want to skip _some_ events.\n    if (shouldSkipDOMEvent(event.type, target)) {\n      return;\n    }\n\n    // Mark event as \"seen\"\n    addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n    if (target && !target._sentryId) {\n      // Add UUID to event target so we can identify if\n      addNonEnumerableProperty(target, '_sentryId', uuid4());\n    }\n\n    const name = event.type === 'keypress' ? 'input' : event.type;\n\n    // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n    // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n    // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n    if (!isSimilarToLastCapturedEvent(event)) {\n      const handlerData = { event, name, global: globalListener };\n      handler(handlerData);\n      lastCapturedEventType = event.type;\n      lastCapturedEventTargetId = target ? target._sentryId : undefined;\n    }\n\n    // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n    clearTimeout(debounceTimerID);\n    debounceTimerID = WINDOW.setTimeout(() => {\n      lastCapturedEventTargetId = undefined;\n      lastCapturedEventType = undefined;\n    }, DEBOUNCE_DURATION);\n  };\n}\n\nfunction getEventTarget(event) {\n  try {\n    return event.target ;\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n    return null;\n  }\n}\n\nexport { addClickKeypressInstrumentationHandler, instrumentDOM };\n//# sourceMappingURL=dom.js.map\n","import { addHandler, maybeInstrument, supportsHistory, triggerHandlers, fill } from '@sentry/utils';\nimport { WINDOW } from '../types.js';\n\nlet lastHref;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addHistoryInstrumentationHandler(handler) {\n  const type = 'history';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentHistory);\n}\n\nfunction instrumentHistory() {\n  if (!supportsHistory()) {\n    return;\n  }\n\n  const oldOnPopState = WINDOW.onpopstate;\n  WINDOW.onpopstate = function ( ...args) {\n    const to = WINDOW.location.href;\n    // keep track of the current URL state, as we always receive only the updated state\n    const from = lastHref;\n    lastHref = to;\n    const handlerData = { from, to };\n    triggerHandlers('history', handlerData);\n    if (oldOnPopState) {\n      // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n      // https://github.com/getsentry/sentry-javascript/issues/3344\n      // https://github.com/bugsnag/bugsnag-js/issues/469\n      try {\n        return oldOnPopState.apply(this, args);\n      } catch (_oO) {\n        // no-empty\n      }\n    }\n  };\n\n  function historyReplacementFunction(originalHistoryFunction) {\n    return function ( ...args) {\n      const url = args.length > 2 ? args[2] : undefined;\n      if (url) {\n        // coerce to string (this is what pushState does)\n        const from = lastHref;\n        const to = String(url);\n        // keep track of the current URL state, as we always receive only the updated state\n        lastHref = to;\n        const handlerData = { from, to };\n        triggerHandlers('history', handlerData);\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n\n  fill(WINDOW.history, 'pushState', historyReplacementFunction);\n  fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n\nexport { addHistoryInstrumentationHandler };\n//# sourceMappingURL=history.js.map\n","import { isNativeFunction, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './types.js';\n\n/**\n * We generally want to use window.fetch / window.setTimeout.\n * However, in some cases this may be wrapped (e.g. by Zone.js for Angular),\n * so we try to get an unpatched version of this from a sandboxed iframe.\n */\n\nconst cachedImplementations = {};\n\n/**\n * Get the native implementation of a browser function.\n *\n * This can be used to ensure we get an unwrapped version of a function, in cases where a wrapped function can lead to problems.\n *\n * The following methods can be retrieved:\n * - `setTimeout`: This can be wrapped by e.g. Angular, causing change detection to be triggered.\n * - `fetch`: This can be wrapped by e.g. ad-blockers, causing an infinite loop when a request is blocked.\n */\nfunction getNativeImplementation(\n  name,\n) {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n\n  let impl = WINDOW[name] ;\n\n  // Fast path to avoid DOM I/O\n  if (isNativeFunction(impl)) {\n    return (cachedImplementations[name] = impl.bind(WINDOW) );\n  }\n\n  const document = WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (document && typeof document.createElement === 'function') {\n    try {\n      const sandbox = document.createElement('iframe');\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow[name]) {\n        impl = contentWindow[name] ;\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n      // Could not create sandbox iframe, just use window.xxx\n      DEBUG_BUILD && logger.warn(`Could not create sandbox iframe for ${name} check, bailing to window.${name}: `, e);\n    }\n  }\n\n  // Sanity check: This _should_ not happen, but if it does, we just skip caching...\n  // This can happen e.g. in tests where fetch may not be available in the env, or similar.\n  if (!impl) {\n    return impl;\n  }\n\n  return (cachedImplementations[name] = impl.bind(WINDOW) );\n}\n\n/** Clear a cached implementation. */\nfunction clearCachedImplementation(name) {\n  cachedImplementations[name] = undefined;\n}\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n *   const p = f.apply(this, arguments);\n *\n *   p.then(function() {\n *     console.log('hi.');\n *   });\n *\n *   return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome:  Failed to fetch\n * Edge:    Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari:  resource blocked by content blocker\n */\nfunction fetch(...rest) {\n  return getNativeImplementation('fetch')(...rest);\n}\n\n/**\n * Get an unwrapped `setTimeout` method.\n * This ensures that even if e.g. Angular wraps `setTimeout`, we get the native implementation,\n * avoiding triggering change detection.\n */\nfunction setTimeout(...rest) {\n  return getNativeImplementation('setTimeout')(...rest);\n}\n\nexport { clearCachedImplementation, fetch, getNativeImplementation, setTimeout };\n//# sourceMappingURL=getNativeImplementation.js.map\n","import { addHandler, maybeInstrument, fill, timestampInSeconds, isString, triggerHandlers } from '@sentry/utils';\nimport { WINDOW } from '../types.js';\n\nconst SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addXhrInstrumentationHandler(handler) {\n  const type = 'xhr';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nfunction instrumentXHR() {\n  if (!(WINDOW ).XMLHttpRequest) {\n    return;\n  }\n\n  const xhrproto = XMLHttpRequest.prototype;\n\n  fill(xhrproto, 'open', function (originalOpen) {\n    return function ( ...args) {\n      const startTimestamp = timestampInSeconds() * 1000;\n\n      // open() should always be called with two or more arguments\n      // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n      const method = isString(args[0]) ? args[0].toUpperCase() : undefined;\n      const url = parseUrl(args[1]);\n\n      if (!method || !url) {\n        return originalOpen.apply(this, args);\n      }\n\n      this[SENTRY_XHR_DATA_KEY] = {\n        method,\n        url,\n        request_headers: {},\n      };\n\n      // if Sentry key appears in URL, don't capture it as a request\n      if (method === 'POST' && url.match(/sentry_key/)) {\n        this.__sentry_own_request__ = true;\n      }\n\n      const onreadystatechangeHandler = () => {\n        // For whatever reason, this is not the same instance here as from the outer method\n        const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n        if (!xhrInfo) {\n          return;\n        }\n\n        if (this.readyState === 4) {\n          try {\n            // touching statusCode in some platforms throws\n            // an exception\n            xhrInfo.status_code = this.status;\n          } catch (e) {\n            /* do nothing */\n          }\n\n          const handlerData = {\n            endTimestamp: timestampInSeconds() * 1000,\n            startTimestamp,\n            xhr: this,\n          };\n          triggerHandlers('xhr', handlerData);\n        }\n      };\n\n      if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') {\n        fill(this, 'onreadystatechange', function (original) {\n          return function ( ...readyStateArgs) {\n            onreadystatechangeHandler();\n            return original.apply(this, readyStateArgs);\n          };\n        });\n      } else {\n        this.addEventListener('readystatechange', onreadystatechangeHandler);\n      }\n\n      // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n      // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n      // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n      fill(this, 'setRequestHeader', function (original) {\n        return function ( ...setRequestHeaderArgs) {\n          const [header, value] = setRequestHeaderArgs;\n\n          const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n          if (xhrInfo && isString(header) && isString(value)) {\n            xhrInfo.request_headers[header.toLowerCase()] = value;\n          }\n\n          return original.apply(this, setRequestHeaderArgs);\n        };\n      });\n\n      return originalOpen.apply(this, args);\n    };\n  });\n\n  fill(xhrproto, 'send', function (originalSend) {\n    return function ( ...args) {\n      const sentryXhrData = this[SENTRY_XHR_DATA_KEY];\n\n      if (!sentryXhrData) {\n        return originalSend.apply(this, args);\n      }\n\n      if (args[0] !== undefined) {\n        sentryXhrData.body = args[0];\n      }\n\n      const handlerData = {\n        startTimestamp: timestampInSeconds() * 1000,\n        xhr: this,\n      };\n      triggerHandlers('xhr', handlerData);\n\n      return originalSend.apply(this, args);\n    };\n  });\n}\n\nfunction parseUrl(url) {\n  if (isString(url)) {\n    return url;\n  }\n\n  try {\n    // url can be a string or URL\n    // but since URL is not available in IE11, we do not check for it,\n    // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n    // If that fails, we just return undefined\n    return (url ).toString();\n  } catch (e2) {} // eslint-disable-line no-empty\n\n  return undefined;\n}\n\nexport { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler, instrumentXHR };\n//# sourceMappingURL=xhr.js.map\n","import { _optionalChain } from '@sentry/utils';\nimport { getActiveSpan, getRootSpan, spanToJSON, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE } from '@sentry/core';\nimport { browserPerformanceTimeOrigin, htmlTreeAsString, dropUndefinedKeys } from '@sentry/utils';\nimport { addInpInstrumentationHandler, addPerformanceInstrumentationHandler, isPerformanceEventTiming } from './instrument.js';\nimport { getBrowserPerformanceAPI, msToSec, startStandaloneWebVitalSpan } from './utils.js';\n\nconst LAST_INTERACTIONS = [];\nconst INTERACTIONS_SPAN_MAP = new Map();\n\n/**\n * Start tracking INP webvital events.\n */\nfunction startTrackingINP() {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin) {\n    const inpCallback = _trackINP();\n\n    return () => {\n      inpCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\nconst INP_ENTRY_MAP = {\n  click: 'click',\n  pointerdown: 'click',\n  pointerup: 'click',\n  mousedown: 'click',\n  mouseup: 'click',\n  touchstart: 'click',\n  touchend: 'click',\n  mouseover: 'hover',\n  mouseout: 'hover',\n  mouseenter: 'hover',\n  mouseleave: 'hover',\n  pointerover: 'hover',\n  pointerout: 'hover',\n  pointerenter: 'hover',\n  pointerleave: 'hover',\n  dragstart: 'drag',\n  dragend: 'drag',\n  drag: 'drag',\n  dragenter: 'drag',\n  dragleave: 'drag',\n  dragover: 'drag',\n  drop: 'drag',\n  keydown: 'press',\n  keyup: 'press',\n  keypress: 'press',\n  input: 'press',\n};\n\n/** Starts tracking the Interaction to Next Paint on the current page. */\nfunction _trackINP() {\n  return addInpInstrumentationHandler(({ metric }) => {\n    if (metric.value == undefined) {\n      return;\n    }\n\n    const entry = metric.entries.find(entry => entry.duration === metric.value && INP_ENTRY_MAP[entry.name]);\n\n    if (!entry) {\n      return;\n    }\n\n    const { interactionId } = entry;\n    const interactionType = INP_ENTRY_MAP[entry.name];\n\n    /** Build the INP span, create an envelope from the span, and then send the envelope */\n    const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n    const duration = msToSec(metric.value);\n    const activeSpan = getActiveSpan();\n    const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;\n\n    // We first try to lookup the span from our INTERACTIONS_SPAN_MAP,\n    // where we cache the route per interactionId\n    const cachedSpan = interactionId != null ? INTERACTIONS_SPAN_MAP.get(interactionId) : undefined;\n\n    const spanToUse = cachedSpan || rootSpan;\n\n    // Else, we try to use the active span.\n    // Finally, we fall back to look at the transactionName on the scope\n    const routeName = spanToUse ? spanToJSON(spanToUse).description : getCurrentScope().getScopeData().transactionName;\n\n    const name = htmlTreeAsString(entry.target);\n    const attributes = dropUndefinedKeys({\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.inp',\n      [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `ui.interaction.${interactionType}`,\n      [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: entry.duration,\n    });\n\n    const span = startStandaloneWebVitalSpan({\n      name,\n      transaction: routeName,\n      attributes,\n      startTime,\n    });\n\n    _optionalChain([span, 'optionalAccess', _ => _.addEvent, 'call', _2 => _2('inp', {\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: 'millisecond',\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: metric.value,\n    })]);\n\n    _optionalChain([span, 'optionalAccess', _3 => _3.end, 'call', _4 => _4(startTime + duration)]);\n  });\n}\n\n/**\n * Register a listener to cache route information for INP interactions.\n * TODO(v9): `latestRoute` no longer needs to be passed in and will be removed in v9.\n */\nfunction registerInpInteractionListener(_latestRoute) {\n  const handleEntries = ({ entries }) => {\n    const activeSpan = getActiveSpan();\n    const activeRootSpan = activeSpan && getRootSpan(activeSpan);\n\n    entries.forEach(entry => {\n      if (!isPerformanceEventTiming(entry) || !activeRootSpan) {\n        return;\n      }\n\n      const interactionId = entry.interactionId;\n      if (interactionId == null) {\n        return;\n      }\n\n      // If the interaction was already recorded before, nothing more to do\n      if (INTERACTIONS_SPAN_MAP.has(interactionId)) {\n        return;\n      }\n\n      // We keep max. 10 interactions in the list, then remove the oldest one & clean up\n      if (LAST_INTERACTIONS.length > 10) {\n        const last = LAST_INTERACTIONS.shift() ;\n        INTERACTIONS_SPAN_MAP.delete(last);\n      }\n\n      // We add the interaction to the list of recorded interactions\n      // and store the span for this interaction\n      LAST_INTERACTIONS.push(interactionId);\n      INTERACTIONS_SPAN_MAP.set(interactionId, activeRootSpan);\n    });\n  };\n\n  addPerformanceInstrumentationHandler('event', handleEntries);\n  addPerformanceInstrumentationHandler('first-input', handleEntries);\n}\n\nexport { registerInpInteractionListener, startTrackingINP };\n//# sourceMappingURL=inp.js.map\n","import { getNativeImplementation, clearCachedImplementation } from '@sentry-internal/browser-utils';\nimport { createTransport } from '@sentry/core';\nimport { rejectedSyncPromise } from '@sentry/utils';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nfunction makeFetchTransport(\n  options,\n  nativeFetch = getNativeImplementation('fetch'),\n) {\n  let pendingBodySize = 0;\n  let pendingCount = 0;\n\n  function makeRequest(request) {\n    const requestSize = request.body.length;\n    pendingBodySize += requestSize;\n    pendingCount++;\n\n    const requestOptions = {\n      body: request.body,\n      method: 'POST',\n      referrerPolicy: 'origin',\n      headers: options.headers,\n      // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n      // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n      // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n      // frequently sending events right before the user is switching pages (eg. whenfinishing navigation transactions).\n      // Gotchas:\n      // - `keepalive` isn't supported by Firefox\n      // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n      //   If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n      //   We will therefore only activate the flag when we're below that limit.\n      // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n      // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n      keepalive: pendingBodySize <= 60000 && pendingCount < 15,\n      ...options.fetchOptions,\n    };\n\n    if (!nativeFetch) {\n      clearCachedImplementation('fetch');\n      return rejectedSyncPromise('No fetch implementation available');\n    }\n\n    try {\n      return nativeFetch(options.url, requestOptions).then(response => {\n        pendingBodySize -= requestSize;\n        pendingCount--;\n        return {\n          statusCode: response.status,\n          headers: {\n            'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n            'retry-after': response.headers.get('Retry-After'),\n          },\n        };\n      });\n    } catch (e) {\n      clearCachedImplementation('fetch');\n      pendingBodySize -= requestSize;\n      pendingCount--;\n      return rejectedSyncPromise(e);\n    }\n  }\n\n  return createTransport(options, makeRequest);\n}\n\nexport { makeFetchTransport };\n//# sourceMappingURL=fetch.js.map\n","import { createStackParser, UNKNOWN_FUNCTION } from '@sentry/utils';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename, func, lineno, colno) {\n  const frame = {\n    filename,\n    function: func === '<anonymous>' ? UNKNOWN_FUNCTION : func,\n    in_app: true, // All browser frames are considered in_app\n  };\n\n  if (lineno !== undefined) {\n    frame.lineno = lineno;\n  }\n\n  if (colno !== undefined) {\n    frame.colno = colno;\n  }\n\n  return frame;\n}\n\n// This regex matches frames that have no function name (ie. are at the top level of a module).\n// For example \"at http://localhost:5000//script.js:1:126\"\n// Frames _with_ function names usually look as follows: \"at commitLayoutEffects (react-dom.development.js:23426:1)\"\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\n\n// This regex matches all the frames that have a function name.\nconst chromeRegex =\n  /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn = line => {\n  // If the stack line has no function name, we need to parse it differently\n  const noFnParts = chromeRegexNoFnName.exec(line) ;\n\n  if (noFnParts) {\n    const [, filename, line, col] = noFnParts;\n    return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);\n  }\n\n  const parts = chromeRegex.exec(line) ;\n\n  if (parts) {\n    const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n    if (isEval) {\n      const subMatch = chromeEvalRegex.exec(parts[2]) ;\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line/column number\n        parts[2] = subMatch[1]; // url\n        parts[3] = subMatch[2]; // line\n        parts[4] = subMatch[3]; // column\n      }\n    }\n\n    // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n    // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n    const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n    return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n  }\n\n  return;\n};\n\nconst chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n  /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko = line => {\n  const parts = geckoREgex.exec(line) ;\n\n  if (parts) {\n    const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n    if (isEval) {\n      const subMatch = geckoEvalRegex.exec(parts[3]) ;\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line number\n        parts[1] = parts[1] || 'eval';\n        parts[3] = subMatch[1];\n        parts[4] = subMatch[2];\n        parts[5] = ''; // no column when eval\n      }\n    }\n\n    let filename = parts[3];\n    let func = parts[1] || UNKNOWN_FUNCTION;\n    [func, filename] = extractSafariExtensionDetails(func, filename);\n\n    return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n  }\n\n  return;\n};\n\nconst geckoStackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs = line => {\n  const parts = winjsRegex.exec(line) ;\n\n  return parts\n    ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n    : undefined;\n};\n\nconst winjsStackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10 = line => {\n  const parts = opera10Regex.exec(line) ;\n  return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nconst opera10StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n  / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11 = line => {\n  const parts = opera11Regex.exec(line) ;\n  return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nconst opera11StackLineParser = [OPERA11_PRIORITY, opera11];\n\nconst defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\n\nconst defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n *   at function@url:row:col\n *   at function@url:row:col\n *   at function@url:row:col\n *\n * it produces something like:\n *\n *   function@url:row:col\n *   function@url:row:col\n *   function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func, filename) => {\n  const isSafariExtension = func.indexOf('safari-extension') !== -1;\n  const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n  return isSafariExtension || isSafariWebExtension\n    ? [\n        func.indexOf('@') !== -1 ? (func.split('@')[0] ) : UNKNOWN_FUNCTION,\n        isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n      ]\n    : [func, filename];\n};\n\nexport { chromeStackLineParser, defaultStackLineParsers, defaultStackParser, geckoStackLineParser, opera10StackLineParser, opera11StackLineParser, winjsStackLineParser };\n//# sourceMappingURL=stack-parsers.js.map\n","import { addClickKeypressInstrumentationHandler, addXhrInstrumentationHandler, addHistoryInstrumentationHandler, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { defineIntegration, getClient, addBreadcrumb } from '@sentry/core';\nimport { addConsoleInstrumentationHandler, addFetchInstrumentationHandler, getEventDescription, logger, htmlTreeAsString, getComponentName, severityLevelFromString, safeJoin, parseUrl } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options = {}) => {\n  const _options = {\n    console: true,\n    dom: true,\n    fetch: true,\n    history: true,\n    sentry: true,\n    xhr: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      if (_options.console) {\n        addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n      }\n      if (_options.dom) {\n        addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n      }\n      if (_options.xhr) {\n        addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n      }\n      if (_options.fetch) {\n        addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n      }\n      if (_options.history) {\n        addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n      }\n      if (_options.sentry) {\n        client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n      }\n    },\n  };\n}) ;\n\nconst breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client) {\n  return function addSentryBreadcrumb(event) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    addBreadcrumb(\n      {\n        category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n        event_id: event.event_id,\n        level: event.level,\n        message: getEventDescription(event),\n      },\n      {\n        event,\n      },\n    );\n  };\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n  client,\n  dom,\n) {\n  return function _innerDomBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let target;\n    let componentName;\n    let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n    let maxStringLength =\n      typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n    if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n      DEBUG_BUILD &&\n        logger.warn(\n          `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n        );\n      maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n    }\n\n    if (typeof keyAttrs === 'string') {\n      keyAttrs = [keyAttrs];\n    }\n\n    // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n    try {\n      const event = handlerData.event ;\n      const element = _isEvent(event) ? event.target : event;\n\n      target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n      componentName = getComponentName(element);\n    } catch (e) {\n      target = '<unknown>';\n    }\n\n    if (target.length === 0) {\n      return;\n    }\n\n    const breadcrumb = {\n      category: `ui.${handlerData.name}`,\n      message: target,\n    };\n\n    if (componentName) {\n      breadcrumb.data = { 'ui.component_name': componentName };\n    }\n\n    addBreadcrumb(breadcrumb, {\n      event: handlerData.event,\n      name: handlerData.name,\n      global: handlerData.global,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client) {\n  return function _consoleBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const breadcrumb = {\n      category: 'console',\n      data: {\n        arguments: handlerData.args,\n        logger: 'console',\n      },\n      level: severityLevelFromString(handlerData.level),\n      message: safeJoin(handlerData.args, ' '),\n    };\n\n    if (handlerData.level === 'assert') {\n      if (handlerData.args[0] === false) {\n        breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n        breadcrumb.data.arguments = handlerData.args.slice(1);\n      } else {\n        // Don't capture a breadcrumb for passed assertions\n        return;\n      }\n    }\n\n    addBreadcrumb(breadcrumb, {\n      input: handlerData.args,\n      level: handlerData.level,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client) {\n  return function _xhrBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n    // We only capture complete, non-sentry requests\n    if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n      return;\n    }\n\n    const { method, url, status_code, body } = sentryXhrData;\n\n    const data = {\n      method,\n      url,\n      status_code,\n    };\n\n    const hint = {\n      xhr: handlerData.xhr,\n      input: body,\n      startTimestamp,\n      endTimestamp,\n    };\n\n    addBreadcrumb(\n      {\n        category: 'xhr',\n        data,\n        type: 'http',\n      },\n      hint,\n    );\n  };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client) {\n  return function _fetchBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    // We only capture complete fetch requests\n    if (!endTimestamp) {\n      return;\n    }\n\n    if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n      // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n      return;\n    }\n\n    if (handlerData.error) {\n      const data = handlerData.fetchData;\n      const hint = {\n        data: handlerData.error,\n        input: handlerData.args,\n        startTimestamp,\n        endTimestamp,\n      };\n\n      addBreadcrumb(\n        {\n          category: 'fetch',\n          data,\n          level: 'error',\n          type: 'http',\n        },\n        hint,\n      );\n    } else {\n      const response = handlerData.response ;\n      const data = {\n        ...handlerData.fetchData,\n        status_code: response && response.status,\n      };\n      const hint = {\n        input: handlerData.args,\n        response,\n        startTimestamp,\n        endTimestamp,\n      };\n      addBreadcrumb(\n        {\n          category: 'fetch',\n          data,\n          type: 'http',\n        },\n        hint,\n      );\n    }\n  };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client) {\n  return function _historyBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let from = handlerData.from;\n    let to = handlerData.to;\n    const parsedLoc = parseUrl(WINDOW.location.href);\n    let parsedFrom = from ? parseUrl(from) : undefined;\n    const parsedTo = parseUrl(to);\n\n    // Initial pushState doesn't provide `from` information\n    if (!parsedFrom || !parsedFrom.path) {\n      parsedFrom = parsedLoc;\n    }\n\n    // Use only the path component of the URL if the URL matches the current\n    // document (almost all the time when using pushState)\n    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n      to = parsedTo.relative;\n    }\n    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n      from = parsedFrom.relative;\n    }\n\n    addBreadcrumb({\n      category: 'navigation',\n      data: {\n        from,\n        to,\n      },\n    });\n  };\n}\n\nfunction _isEvent(event) {\n  return !!event && !!(event ).target;\n}\n\nexport { breadcrumbsIntegration };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { defineIntegration } from '@sentry/core';\nimport { fill, getFunctionName, getOriginalFunction } from '@sentry/utils';\nimport { WINDOW, wrap } from '../helpers.js';\n\nconst DEFAULT_EVENT_TARGET = [\n  'EventTarget',\n  'Window',\n  'Node',\n  'ApplicationCache',\n  'AudioTrackList',\n  'BroadcastChannel',\n  'ChannelMergerNode',\n  'CryptoOperation',\n  'EventSource',\n  'FileReader',\n  'HTMLUnknownElement',\n  'IDBDatabase',\n  'IDBRequest',\n  'IDBTransaction',\n  'KeyOperation',\n  'MediaController',\n  'MessagePort',\n  'ModalWindow',\n  'Notification',\n  'SVGElementInstance',\n  'Screen',\n  'SharedWorker',\n  'TextTrack',\n  'TextTrackCue',\n  'TextTrackList',\n  'WebSocket',\n  'WebSocketWorker',\n  'Worker',\n  'XMLHttpRequest',\n  'XMLHttpRequestEventTarget',\n  'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'BrowserApiErrors';\n\nconst _browserApiErrorsIntegration = ((options = {}) => {\n  const _options = {\n    XMLHttpRequest: true,\n    eventTarget: true,\n    requestAnimationFrame: true,\n    setInterval: true,\n    setTimeout: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO: This currently only works for the first client this is setup\n    // We may want to adjust this to check for client etc.\n    setupOnce() {\n      if (_options.setTimeout) {\n        fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n      }\n\n      if (_options.setInterval) {\n        fill(WINDOW, 'setInterval', _wrapTimeFunction);\n      }\n\n      if (_options.requestAnimationFrame) {\n        fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n      }\n\n      if (_options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n        fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n      }\n\n      const eventTargetOption = _options.eventTarget;\n      if (eventTargetOption) {\n        const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n        eventTarget.forEach(_wrapEventTarget);\n      }\n    },\n  };\n}) ;\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n */\nconst browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\nfunction _wrapTimeFunction(original) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function ( ...args) {\n    const originalCallback = args[0];\n    args[0] = wrap(originalCallback, {\n      mechanism: {\n        data: { function: getFunctionName(original) },\n        handled: false,\n        type: 'instrument',\n      },\n    });\n    return original.apply(this, args);\n  };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function ( callback) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return original.apply(this, [\n      wrap(callback, {\n        mechanism: {\n          data: {\n            function: 'requestAnimationFrame',\n            handler: getFunctionName(original),\n          },\n          handled: false,\n          type: 'instrument',\n        },\n      }),\n    ]);\n  };\n}\n\nfunction _wrapXHR(originalSend) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function ( ...args) {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const xhr = this;\n    const xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n    xmlHttpRequestProps.forEach(prop => {\n      if (prop in xhr && typeof xhr[prop] === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        fill(xhr, prop, function (original) {\n          const wrapOptions = {\n            mechanism: {\n              data: {\n                function: prop,\n                handler: getFunctionName(original),\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          };\n\n          // If Instrument integration has been called before BrowserApiErrors, get the name of original function\n          const originalFunction = getOriginalFunction(original);\n          if (originalFunction) {\n            wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n          }\n\n          // Otherwise wrap directly\n          return wrap(original, wrapOptions);\n        });\n      }\n    });\n\n    return originalSend.apply(this, args);\n  };\n}\n\nfunction _wrapEventTarget(target) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const globalObject = WINDOW ;\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  const proto = globalObject[target] && globalObject[target].prototype;\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n  if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n    return;\n  }\n\n  fill(proto, 'addEventListener', function (original,)\n\n {\n    return function (\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n      eventName,\n      fn,\n      options,\n    ) {\n      try {\n        if (typeof fn.handleEvent === 'function') {\n          // ESlint disable explanation:\n          //  First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n          //  introduce a bug here, because bind returns a new function that doesn't have our\n          //  flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n          //  Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n          // eslint-disable-next-line @typescript-eslint/unbound-method\n          fn.handleEvent = wrap(fn.handleEvent, {\n            mechanism: {\n              data: {\n                function: 'handleEvent',\n                handler: getFunctionName(fn),\n                target,\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          });\n        }\n      } catch (err) {\n        // can sometimes get 'Permission denied to access property \"handle Event'\n      }\n\n      return original.apply(this, [\n        eventName,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        wrap(fn , {\n          mechanism: {\n            data: {\n              function: 'addEventListener',\n              handler: getFunctionName(fn),\n              target,\n            },\n            handled: false,\n            type: 'instrument',\n          },\n        }),\n        options,\n      ]);\n    };\n  });\n\n  fill(\n    proto,\n    'removeEventListener',\n    function (\n      originalRemoveEventListener,\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ) {\n      return function (\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n        eventName,\n        fn,\n        options,\n      ) {\n        /**\n         * There are 2 possible scenarios here:\n         *\n         * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n         * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n         * as a pass-through, and call original `removeEventListener` with it.\n         *\n         * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n         * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n         * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n         * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n         * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n         *\n         * When someone adds a handler prior to initialization, and then do it again, but after,\n         * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n         * to get rid of the initial handler and it'd stick there forever.\n         */\n        const wrappedEventHandler = fn ;\n        try {\n          const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n          if (originalEventHandler) {\n            originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n          }\n        } catch (e) {\n          // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n        }\n        return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n      };\n    },\n  );\n}\n\nexport { browserApiErrorsIntegration };\n//# sourceMappingURL=browserapierrors.js.map\n","import { defineIntegration, getClient, captureEvent } from '@sentry/core';\nimport { addGlobalErrorInstrumentationHandler, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, isString, getLocationHref, UNKNOWN_FUNCTION, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { eventFromUnknownInput } from '../eventbuilder.js';\nimport { shouldIgnoreOnError } from '../helpers.js';\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options = {}) => {\n  const _options = {\n    onerror: true,\n    onunhandledrejection: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      Error.stackTraceLimit = 50;\n    },\n    setup(client) {\n      if (_options.onerror) {\n        _installGlobalOnErrorHandler(client);\n        globalHandlerLog('onerror');\n      }\n      if (_options.onunhandledrejection) {\n        _installGlobalOnUnhandledRejectionHandler(client);\n        globalHandlerLog('onunhandledrejection');\n      }\n    },\n  };\n}) ;\n\nconst globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\nfunction _installGlobalOnErrorHandler(client) {\n  addGlobalErrorInstrumentationHandler(data => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const { msg, url, line, column, error } = data;\n\n    const event = _enhanceEventWithInitialFrame(\n      eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n      url,\n      line,\n      column,\n    );\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onerror',\n      },\n    });\n  });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client) {\n  addGlobalUnhandledRejectionInstrumentationHandler(e => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const error = _getUnhandledRejectionError(e );\n\n    const event = isPrimitive(error)\n      ? _eventFromRejectionWithPrimitive(error)\n      : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onunhandledrejection',\n      },\n    });\n  });\n}\n\nfunction _getUnhandledRejectionError(error) {\n  if (isPrimitive(error)) {\n    return error;\n  }\n\n  // dig the object of the rejection out of known event types\n  try {\n\n    // PromiseRejectionEvents store the object of the rejection under 'reason'\n    // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n    if ('reason' in (error )) {\n      return (error ).reason;\n    }\n\n    // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n    // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n    // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n    // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n    // https://github.com/getsentry/sentry-javascript/issues/2380\n    if ('detail' in (error ) && 'reason' in (error ).detail) {\n      return (error ).detail.reason;\n    }\n  } catch (e2) {} // eslint-disable-line no-empty\n\n  return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason) {\n  return {\n    exception: {\n      values: [\n        {\n          type: 'UnhandledRejection',\n          // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n          value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n        },\n      ],\n    },\n  };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _enhanceEventWithInitialFrame(event, url, line, column) {\n  // event.exception\n  const e = (event.exception = event.exception || {});\n  // event.exception.values\n  const ev = (e.values = e.values || []);\n  // event.exception.values[0]\n  const ev0 = (ev[0] = ev[0] || {});\n  // event.exception.values[0].stacktrace\n  const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n  // event.exception.values[0].stacktrace.frames\n  const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n  const colno = isNaN(parseInt(column, 10)) ? undefined : column;\n  const lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n  const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n  // event.exception.values[0].stacktrace.frames\n  if (ev0sf.length === 0) {\n    ev0sf.push({\n      colno,\n      filename,\n      function: UNKNOWN_FUNCTION,\n      in_app: true,\n      lineno,\n    });\n  }\n\n  return event;\n}\n\nfunction globalHandlerLog(type) {\n  DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions() {\n  const client = getClient();\n  const options = (client && client.getOptions()) || {\n    stackParser: () => [],\n    attachStacktrace: false,\n  };\n  return options;\n}\n\nexport { globalHandlersIntegration };\n//# sourceMappingURL=globalhandlers.js.map\n","import { defineIntegration } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * Collects information about HTTP request headers and\n * attaches them to the event.\n */\nconst httpContextIntegration = defineIntegration(() => {\n  return {\n    name: 'HttpContext',\n    preprocessEvent(event) {\n      // if none of the information we want exists, don't bother\n      if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n        return;\n      }\n\n      // grab as much info as exists and add it to the event\n      const url = (event.request && event.request.url) || (WINDOW.location && WINDOW.location.href);\n      const { referrer } = WINDOW.document || {};\n      const { userAgent } = WINDOW.navigator || {};\n\n      const headers = {\n        ...(event.request && event.request.headers),\n        ...(referrer && { Referer: referrer }),\n        ...(userAgent && { 'User-Agent': userAgent }),\n      };\n      const request = { ...event.request, ...(url && { url }), headers };\n\n      event.request = request;\n    },\n  };\n});\n\nexport { httpContextIntegration };\n//# sourceMappingURL=httpcontext.js.map\n","import { defineIntegration } from '@sentry/core';\nimport { applyAggregateErrorsToEvent } from '@sentry/utils';\nimport { exceptionFromError } from '../eventbuilder.js';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n\n  return {\n    name: INTEGRATION_NAME,\n    preprocessEvent(event, hint, client) {\n      const options = client.getOptions();\n\n      applyAggregateErrorsToEvent(\n        // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n        exceptionFromError,\n        options.stackParser,\n        options.maxValueLength,\n        key,\n        limit,\n        event,\n        hint,\n      );\n    },\n  };\n}) ;\n\n/**\n * Aggregrate linked errors in an event.\n */\nconst linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\nexport { linkedErrorsIntegration };\n//# sourceMappingURL=linkederrors.js.map\n","import { inboundFiltersIntegration, functionToStringIntegration, dedupeIntegration, getIntegrationsToSetup, initAndBind, getCurrentScope, lastEventId, getReportDialogEndpoint, startSession, captureSession, getClient } from '@sentry/core';\nimport { consoleSandbox, supportsFetch, logger, stackParserFromStackParserOptions } from '@sentry/utils';\nimport { addHistoryInstrumentationHandler } from '@sentry-internal/browser-utils';\nimport { BrowserClient } from './client.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './helpers.js';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs.js';\nimport { browserApiErrorsIntegration } from './integrations/browserapierrors.js';\nimport { globalHandlersIntegration } from './integrations/globalhandlers.js';\nimport { httpContextIntegration } from './integrations/httpcontext.js';\nimport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nimport { defaultStackParser } from './stack-parsers.js';\nimport { makeFetchTransport } from './transports/fetch.js';\n\n/** Get the default integrations for the browser SDK. */\nfunction getDefaultIntegrations(_options) {\n  /**\n   * Note: Please make sure this stays in sync with Angular SDK, which re-exports\n   * `getDefaultIntegrations` but with an adjusted set of integrations.\n   */\n  return [\n    inboundFiltersIntegration(),\n    functionToStringIntegration(),\n    browserApiErrorsIntegration(),\n    breadcrumbsIntegration(),\n    globalHandlersIntegration(),\n    linkedErrorsIntegration(),\n    dedupeIntegration(),\n    httpContextIntegration(),\n  ];\n}\n\nfunction applyDefaultOptions(optionsArg = {}) {\n  const defaultOptions = {\n    defaultIntegrations: getDefaultIntegrations(),\n    release:\n      typeof __SENTRY_RELEASE__ === 'string' // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n        ? __SENTRY_RELEASE__\n        : WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id // This supports the variable that sentry-webpack-plugin injects\n          ? WINDOW.SENTRY_RELEASE.id\n          : undefined,\n    autoSessionTracking: true,\n    sendClientReports: true,\n  };\n\n  // TODO: Instead of dropping just `defaultIntegrations`, we should simply\n  // call `dropUndefinedKeys` on the entire `optionsArg`.\n  // However, for this to work we need to adjust the `hasTracingEnabled()` logic\n  // first as it differentiates between `undefined` and the key not being in the object.\n  if (optionsArg.defaultIntegrations == null) {\n    delete optionsArg.defaultIntegrations;\n  }\n\n  return { ...defaultOptions, ...optionsArg };\n}\n\nfunction shouldShowBrowserExtensionError() {\n  const windowWithMaybeExtension =\n    typeof WINDOW.window !== 'undefined' && (WINDOW );\n  if (!windowWithMaybeExtension) {\n    // No need to show the error if we're not in a browser window environment (e.g. service workers)\n    return false;\n  }\n\n  const extensionKey = windowWithMaybeExtension.chrome ? 'chrome' : 'browser';\n  const extensionObject = windowWithMaybeExtension[extensionKey];\n\n  const runtimeId = extensionObject && extensionObject.runtime && extensionObject.runtime.id;\n  const href = (WINDOW.location && WINDOW.location.href) || '';\n\n  const extensionProtocols = ['chrome-extension:', 'moz-extension:', 'ms-browser-extension:', 'safari-web-extension:'];\n\n  // Running the SDK in a dedicated extension page and calling Sentry.init is fine; no risk of data leakage\n  const isDedicatedExtensionPage =\n    !!runtimeId && WINDOW === WINDOW.top && extensionProtocols.some(protocol => href.startsWith(`${protocol}//`));\n\n  // Running the SDK in NW.js, which appears like a browser extension but isn't, is also fine\n  // see: https://github.com/getsentry/sentry-javascript/issues/12668\n  const isNWjs = typeof windowWithMaybeExtension.nw !== 'undefined';\n\n  return !!runtimeId && !isDedicatedExtensionPage && !isNWjs;\n}\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n *   dsn: '__DSN__',\n *   // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n *   message: 'My Breadcrumb',\n *   // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n *   message: 'Manual',\n *   stacktrace: [\n *     // ...\n *   ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nfunction init(browserOptions = {}) {\n  const options = applyDefaultOptions(browserOptions);\n\n  if (shouldShowBrowserExtensionError()) {\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.error(\n        '[Sentry] You cannot run Sentry this way in a browser extension, check: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/',\n      );\n    });\n    return;\n  }\n\n  if (DEBUG_BUILD) {\n    if (!supportsFetch()) {\n      logger.warn(\n        'No Fetch API detected. The Sentry SDK requires a Fetch API compatible environment to send events. Please add a Fetch API polyfill.',\n      );\n    }\n  }\n  const clientOptions = {\n    ...options,\n    stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n    integrations: getIntegrationsToSetup(options),\n    transport: options.transport || makeFetchTransport,\n  };\n\n  const client = initAndBind(BrowserClient, clientOptions);\n\n  if (options.autoSessionTracking) {\n    startSessionTracking();\n  }\n\n  return client;\n}\n\n/**\n * All properties the report dialog supports\n */\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nfunction showReportDialog(options = {}) {\n  // doesn't work without a document (React Native)\n  if (!WINDOW.document) {\n    DEBUG_BUILD && logger.error('Global document not defined in showReportDialog call');\n    return;\n  }\n\n  const scope = getCurrentScope();\n  const client = scope.getClient();\n  const dsn = client && client.getDsn();\n\n  if (!dsn) {\n    DEBUG_BUILD && logger.error('DSN not configured for showReportDialog call');\n    return;\n  }\n\n  if (scope) {\n    options.user = {\n      ...scope.getUser(),\n      ...options.user,\n    };\n  }\n\n  if (!options.eventId) {\n    const eventId = lastEventId();\n    if (eventId) {\n      options.eventId = eventId;\n    }\n  }\n\n  const script = WINDOW.document.createElement('script');\n  script.async = true;\n  script.crossOrigin = 'anonymous';\n  script.src = getReportDialogEndpoint(dsn, options);\n\n  if (options.onLoad) {\n    script.onload = options.onLoad;\n  }\n\n  const { onClose } = options;\n  if (onClose) {\n    const reportDialogClosedMessageHandler = (event) => {\n      if (event.data === '__sentry_reportdialog_closed__') {\n        try {\n          onClose();\n        } finally {\n          WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n        }\n      }\n    };\n    WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n  }\n\n  const injectionPoint = WINDOW.document.head || WINDOW.document.body;\n  if (injectionPoint) {\n    injectionPoint.appendChild(script);\n  } else {\n    DEBUG_BUILD && logger.error('Not injecting report dialog. No injection point found in HTML');\n  }\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction forceLoad() {\n  // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction onLoad(callback) {\n  callback();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking() {\n  if (typeof WINDOW.document === 'undefined') {\n    DEBUG_BUILD && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n    return;\n  }\n\n  // The session duration for browser sessions does not track a meaningful\n  // concept that can be used as a metric.\n  // Automatically captured sessions are akin to page views, and thus we\n  // discard their duration.\n  startSession({ ignoreDuration: true });\n  captureSession();\n\n  // We want to create a session for every navigation as well\n  addHistoryInstrumentationHandler(({ from, to }) => {\n    // Don't create an additional session for the initial route or if the location did not change\n    if (from !== undefined && from !== to) {\n      startSession({ ignoreDuration: true });\n      captureSession();\n    }\n  });\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n *\n * @deprecated Use `captureFeedback` instead.\n */\nfunction captureUserFeedback(feedback) {\n  const client = getClient();\n  if (client) {\n    // eslint-disable-next-line deprecation/deprecation\n    client.captureUserFeedback(feedback);\n  }\n}\n\nexport { captureUserFeedback, forceLoad, getDefaultIntegrations, init, onLoad, showReportDialog };\n//# sourceMappingURL=sdk.js.map\n","import { _nullishCoalesce, _optionalChain } from '@sentry/utils';\nimport { captureException, addBreadcrumb, getClient, isSentryRequestUrl, addEventProcessor, prepareEvent, getIsolationScope, getCurrentScope, setContext, getActiveSpan, getRootSpan, spanToJSON, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, parseSampleRate } from '@sentry/core';\nimport { GLOBAL_OBJ, logger as logger$1, normalize, fill, htmlTreeAsString, browserPerformanceTimeOrigin, uuid4, getLocationHref, dropUndefinedKeys, stringMatchesSomePattern, createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader, resolvedSyncPromise, updateRateLimits, isRateLimited, isBrowser, consoleSandbox } from '@sentry/utils';\nimport { setTimeout as setTimeout$3, addPerformanceInstrumentationHandler, addLcpInstrumentationHandler, addClsInstrumentationHandler, addFidInstrumentationHandler, addInpInstrumentationHandler, SENTRY_XHR_DATA_KEY, addClickKeypressInstrumentationHandler, addHistoryInstrumentationHandler } from '@sentry-internal/browser-utils';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and replay packages should `@sentry/browser` import\n// from `@sentry/replay` in the future\nconst WINDOW = GLOBAL_OBJ ;\n\nconst REPLAY_SESSION_KEY = 'sentryReplaySession';\nconst REPLAY_EVENT_NAME = 'replay_event';\nconst UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nconst SESSION_IDLE_PAUSE_DURATION = 300000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nconst SESSION_IDLE_EXPIRE_DURATION = 900000; // 15 minutes in ms\n\n/** Default flush delays */\nconst DEFAULT_FLUSH_MIN_DELAY = 5000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nconst DEFAULT_FLUSH_MAX_DELAY = 5500;\n\n/* How long to wait for error checkouts */\nconst BUFFER_CHECKOUT_TIME = 60000;\n\nconst RETRY_BASE_INTERVAL = 5000;\nconst RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nconst NETWORK_BODY_MAX_SIZE = 150000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nconst CONSOLE_ARG_MAX_SIZE = 5000;\n\n/* Min. time to wait before we consider something a slow click. */\nconst SLOW_CLICK_THRESHOLD = 3000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nconst SLOW_CLICK_SCROLL_TIMEOUT = 300;\n\n/** When encountering a total segment size exceeding this size, stop the replay (as we cannot properly ingest it). */\nconst REPLAY_MAX_EVENT_BUFFER_SIZE = 20000000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nconst MIN_REPLAY_DURATION = 4999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nconst MIN_REPLAY_DURATION_LIMIT = 15000;\n\n/** The max. length of a replay. */\nconst MAX_REPLAY_DURATION = 3600000; // 60 minutes in ms;\n\nfunction _nullishCoalesce$1(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }function _optionalChain$5(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var NodeType$1;\n(function (NodeType) {\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType$1 || (NodeType$1 = {}));\n\nfunction isElement$1(n) {\n    return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n    const host = _optionalChain$5([n, 'optionalAccess', _ => _.host]);\n    return Boolean(_optionalChain$5([host, 'optionalAccess', _2 => _2.shadowRoot]) === n);\n}\nfunction isNativeShadowDom(shadowRoot) {\n    return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n    if (cssText.includes(' background-clip: text;') &&\n        !cssText.includes(' -webkit-background-clip: text;')) {\n        cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\n    }\n    return cssText;\n}\nfunction escapeImportStatement(rule) {\n    const { cssText } = rule;\n    if (cssText.split('\"').length < 3)\n        return cssText;\n    const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\n    if (rule.layerName === '') {\n        statement.push(`layer`);\n    }\n    else if (rule.layerName) {\n        statement.push(`layer(${rule.layerName})`);\n    }\n    if (rule.supportsText) {\n        statement.push(`supports(${rule.supportsText})`);\n    }\n    if (rule.media.length) {\n        statement.push(rule.media.mediaText);\n    }\n    return statement.join(' ') + ';';\n}\nfunction stringifyStylesheet(s) {\n    try {\n        const rules = s.rules || s.cssRules;\n        return rules\n            ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\n            : null;\n    }\n    catch (error) {\n        return null;\n    }\n}\nfunction stringifyRule(rule) {\n    let importStringified;\n    if (isCSSImportRule(rule)) {\n        try {\n            importStringified =\n                stringifyStylesheet(rule.styleSheet) ||\n                    escapeImportStatement(rule);\n        }\n        catch (error) {\n        }\n    }\n    else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n        return fixSafariColons(rule.cssText);\n    }\n    return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n    const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n    return cssStringified.replace(regex, '$1\\\\$2');\n}\nfunction isCSSImportRule(rule) {\n    return 'styleSheet' in rule;\n}\nfunction isCSSStyleRule(rule) {\n    return 'selectorText' in rule;\n}\nclass Mirror {\n    constructor() {\n        this.idNodeMap = new Map();\n        this.nodeMetaMap = new WeakMap();\n    }\n    getId(n) {\n        if (!n)\n            return -1;\n        const id = _optionalChain$5([this, 'access', _3 => _3.getMeta, 'call', _4 => _4(n), 'optionalAccess', _5 => _5.id]);\n        return _nullishCoalesce$1(id, () => ( -1));\n    }\n    getNode(id) {\n        return this.idNodeMap.get(id) || null;\n    }\n    getIds() {\n        return Array.from(this.idNodeMap.keys());\n    }\n    getMeta(n) {\n        return this.nodeMetaMap.get(n) || null;\n    }\n    removeNodeFromMap(n) {\n        const id = this.getId(n);\n        this.idNodeMap.delete(id);\n        if (n.childNodes) {\n            n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\n        }\n    }\n    has(id) {\n        return this.idNodeMap.has(id);\n    }\n    hasNode(node) {\n        return this.nodeMetaMap.has(node);\n    }\n    add(n, meta) {\n        const id = meta.id;\n        this.idNodeMap.set(id, n);\n        this.nodeMetaMap.set(n, meta);\n    }\n    replace(id, n) {\n        const oldNode = this.getNode(id);\n        if (oldNode) {\n            const meta = this.nodeMetaMap.get(oldNode);\n            if (meta)\n                this.nodeMetaMap.set(n, meta);\n        }\n        this.idNodeMap.set(id, n);\n    }\n    reset() {\n        this.idNodeMap = new Map();\n        this.nodeMetaMap = new WeakMap();\n    }\n}\nfunction createMirror() {\n    return new Mirror();\n}\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\n    if (tagName === 'OPTION') {\n        tagName = 'SELECT';\n    }\n    return Boolean(maskInputOptions[tagName.toLowerCase()] ||\n        (type && maskInputOptions[type]) ||\n        type === 'password' ||\n        (tagName === 'INPUT' && !type && maskInputOptions['text']));\n}\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\n    let text = value || '';\n    if (!isMasked) {\n        return text;\n    }\n    if (maskInputFn) {\n        text = maskInputFn(text, element);\n    }\n    return '*'.repeat(text.length);\n}\nfunction toLowerCase(str) {\n    return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n    return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\nfunction is2DCanvasBlank(canvas) {\n    const ctx = canvas.getContext('2d');\n    if (!ctx)\n        return true;\n    const chunkSize = 50;\n    for (let x = 0; x < canvas.width; x += chunkSize) {\n        for (let y = 0; y < canvas.height; y += chunkSize) {\n            const getImageData = ctx.getImageData;\n            const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\n                ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\n                : getImageData;\n            const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\n            if (pixelBuffer.some((pixel) => pixel !== 0))\n                return false;\n        }\n    }\n    return true;\n}\nfunction getInputType(element) {\n    const type = element.type;\n    return element.hasAttribute('data-rr-is-password')\n        ? 'password'\n        : type\n            ?\n                toLowerCase(type)\n            : null;\n}\nfunction getInputValue(el, tagName, type) {\n    if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\n        return el.getAttribute('value') || '';\n    }\n    return el.value;\n}\nfunction extractFileExtension(path, baseURL) {\n    let url;\n    try {\n        url = new URL(path, _nullishCoalesce$1(baseURL, () => ( window.location.href)));\n    }\n    catch (err) {\n        return null;\n    }\n    const regex = /\\.([0-9a-z]+)(?:$)/i;\n    const match = url.pathname.match(regex);\n    return _nullishCoalesce$1(_optionalChain$5([match, 'optionalAccess', _6 => _6[1]]), () => ( null));\n}\nconst cachedImplementations$1 = {};\nfunction getImplementation$1(name) {\n    const cached = cachedImplementations$1[name];\n    if (cached) {\n        return cached;\n    }\n    const document = window.document;\n    let impl = window[name];\n    if (document && typeof document.createElement === 'function') {\n        try {\n            const sandbox = document.createElement('iframe');\n            sandbox.hidden = true;\n            document.head.appendChild(sandbox);\n            const contentWindow = sandbox.contentWindow;\n            if (contentWindow && contentWindow[name]) {\n                impl =\n                    contentWindow[name];\n            }\n            document.head.removeChild(sandbox);\n        }\n        catch (e) {\n        }\n    }\n    return (cachedImplementations$1[name] = impl.bind(window));\n}\nfunction setTimeout$2(...rest) {\n    return getImplementation$1('setTimeout')(...rest);\n}\nfunction clearTimeout$2(...rest) {\n    return getImplementation$1('clearTimeout')(...rest);\n}\n\nlet _id = 1;\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\nconst IGNORED_NODE = -2;\nfunction genId() {\n    return _id++;\n}\nfunction getValidTagName(element) {\n    if (element instanceof HTMLFormElement) {\n        return 'form';\n    }\n    const processedTagName = toLowerCase(element.tagName);\n    if (tagNameRegex.test(processedTagName)) {\n        return 'div';\n    }\n    return processedTagName;\n}\nfunction extractOrigin(url) {\n    let origin = '';\n    if (url.indexOf('//') > -1) {\n        origin = url.split('/').slice(0, 3).join('/');\n    }\n    else {\n        origin = url.split('/')[0];\n    }\n    origin = origin.split('?')[0];\n    return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n    return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\n        const filePath = path1 || path2 || path3;\n        const maybeQuote = quote1 || quote2 || '';\n        if (!filePath) {\n            return origin;\n        }\n        if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\n        }\n        if (DATA_URI.test(filePath)) {\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\n        }\n        if (filePath[0] === '/') {\n            return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n        }\n        const stack = href.split('/');\n        const parts = filePath.split('/');\n        stack.pop();\n        for (const part of parts) {\n            if (part === '.') {\n                continue;\n            }\n            else if (part === '..') {\n                stack.pop();\n            }\n            else {\n                stack.push(part);\n            }\n        }\n        return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\n    });\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n    if (attributeValue.trim() === '') {\n        return attributeValue;\n    }\n    let pos = 0;\n    function collectCharacters(regEx) {\n        let chars;\n        const match = regEx.exec(attributeValue.substring(pos));\n        if (match) {\n            chars = match[0];\n            pos += chars.length;\n            return chars;\n        }\n        return '';\n    }\n    const output = [];\n    while (true) {\n        collectCharacters(SRCSET_COMMAS_OR_SPACES);\n        if (pos >= attributeValue.length) {\n            break;\n        }\n        let url = collectCharacters(SRCSET_NOT_SPACES);\n        if (url.slice(-1) === ',') {\n            url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n            output.push(url);\n        }\n        else {\n            let descriptorsStr = '';\n            url = absoluteToDoc(doc, url);\n            let inParens = false;\n            while (true) {\n                const c = attributeValue.charAt(pos);\n                if (c === '') {\n                    output.push((url + descriptorsStr).trim());\n                    break;\n                }\n                else if (!inParens) {\n                    if (c === ',') {\n                        pos += 1;\n                        output.push((url + descriptorsStr).trim());\n                        break;\n                    }\n                    else if (c === '(') {\n                        inParens = true;\n                    }\n                }\n                else {\n                    if (c === ')') {\n                        inParens = false;\n                    }\n                }\n                descriptorsStr += c;\n                pos += 1;\n            }\n        }\n    }\n    return output.join(', ');\n}\nfunction absoluteToDoc(doc, attributeValue) {\n    if (!attributeValue || attributeValue.trim() === '') {\n        return attributeValue;\n    }\n    const a = doc.createElement('a');\n    a.href = attributeValue;\n    return a.href;\n}\nfunction isSVGElement(el) {\n    return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\n}\nfunction getHref() {\n    const a = document.createElement('a');\n    a.href = '';\n    return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\n    if (!value) {\n        return value;\n    }\n    if (name === 'src' ||\n        (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\n        return absoluteToDoc(doc, value);\n    }\n    else if (name === 'xlink:href' && value[0] !== '#') {\n        return absoluteToDoc(doc, value);\n    }\n    else if (name === 'background' &&\n        (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\n        return absoluteToDoc(doc, value);\n    }\n    else if (name === 'srcset') {\n        return getAbsoluteSrcsetString(doc, value);\n    }\n    else if (name === 'style') {\n        return absoluteToStylesheet(value, getHref());\n    }\n    else if (tagName === 'object' && name === 'data') {\n        return absoluteToDoc(doc, value);\n    }\n    if (typeof maskAttributeFn === 'function') {\n        return maskAttributeFn(name, value, element);\n    }\n    return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n    return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n    try {\n        if (unblockSelector && element.matches(unblockSelector)) {\n            return false;\n        }\n        if (typeof blockClass === 'string') {\n            if (element.classList.contains(blockClass)) {\n                return true;\n            }\n        }\n        else {\n            for (let eIndex = element.classList.length; eIndex--;) {\n                const className = element.classList[eIndex];\n                if (blockClass.test(className)) {\n                    return true;\n                }\n            }\n        }\n        if (blockSelector) {\n            return element.matches(blockSelector);\n        }\n    }\n    catch (e) {\n    }\n    return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n    for (let eIndex = el.classList.length; eIndex--;) {\n        const className = el.classList[eIndex];\n        if (regex.test(className)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n    if (!node)\n        return -1;\n    if (node.nodeType !== node.ELEMENT_NODE)\n        return -1;\n    if (distance > limit)\n        return -1;\n    if (matchPredicate(node))\n        return distance;\n    return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n    return (node) => {\n        const el = node;\n        if (el === null)\n            return false;\n        try {\n            if (className) {\n                if (typeof className === 'string') {\n                    if (el.matches(`.${className}`))\n                        return true;\n                }\n                else if (elementClassMatchesRegex(el, className)) {\n                    return true;\n                }\n            }\n            if (selector && el.matches(selector))\n                return true;\n            return false;\n        }\n        catch (e2) {\n            return false;\n        }\n    };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n    try {\n        const el = node.nodeType === node.ELEMENT_NODE\n            ? node\n            : node.parentElement;\n        if (el === null)\n            return false;\n        if (el.tagName === 'INPUT') {\n            const autocomplete = el.getAttribute('autocomplete');\n            const disallowedAutocompleteValues = [\n                'current-password',\n                'new-password',\n                'cc-number',\n                'cc-exp',\n                'cc-exp-month',\n                'cc-exp-year',\n                'cc-csc',\n            ];\n            if (disallowedAutocompleteValues.includes(autocomplete)) {\n                return true;\n            }\n        }\n        let maskDistance = -1;\n        let unmaskDistance = -1;\n        if (maskAllText) {\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\n            if (unmaskDistance < 0) {\n                return true;\n            }\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\n        }\n        else {\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\n            if (maskDistance < 0) {\n                return false;\n            }\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\n        }\n        return maskDistance >= 0\n            ? unmaskDistance >= 0\n                ? maskDistance <= unmaskDistance\n                : true\n            : unmaskDistance >= 0\n                ? false\n                : !!maskAllText;\n    }\n    catch (e) {\n    }\n    return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n    const win = iframeEl.contentWindow;\n    if (!win) {\n        return;\n    }\n    let fired = false;\n    let readyState;\n    try {\n        readyState = win.document.readyState;\n    }\n    catch (error) {\n        return;\n    }\n    if (readyState !== 'complete') {\n        const timer = setTimeout$2(() => {\n            if (!fired) {\n                listener();\n                fired = true;\n            }\n        }, iframeLoadTimeout);\n        iframeEl.addEventListener('load', () => {\n            clearTimeout$2(timer);\n            fired = true;\n            listener();\n        });\n        return;\n    }\n    const blankUrl = 'about:blank';\n    if (win.location.href !== blankUrl ||\n        iframeEl.src === blankUrl ||\n        iframeEl.src === '') {\n        setTimeout$2(listener, 0);\n        return iframeEl.addEventListener('load', listener);\n    }\n    iframeEl.addEventListener('load', listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n    let fired = false;\n    let styleSheetLoaded;\n    try {\n        styleSheetLoaded = link.sheet;\n    }\n    catch (error) {\n        return;\n    }\n    if (styleSheetLoaded)\n        return;\n    const timer = setTimeout$2(() => {\n        if (!fired) {\n            listener();\n            fired = true;\n        }\n    }, styleSheetLoadTimeout);\n    link.addEventListener('load', () => {\n        clearTimeout$2(timer);\n        fired = true;\n        listener();\n    });\n}\nfunction serializeNode(n, options) {\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\n    const rootId = getRootId(doc, mirror);\n    switch (n.nodeType) {\n        case n.DOCUMENT_NODE:\n            if (n.compatMode !== 'CSS1Compat') {\n                return {\n                    type: NodeType$1.Document,\n                    childNodes: [],\n                    compatMode: n.compatMode,\n                };\n            }\n            else {\n                return {\n                    type: NodeType$1.Document,\n                    childNodes: [],\n                };\n            }\n        case n.DOCUMENT_TYPE_NODE:\n            return {\n                type: NodeType$1.DocumentType,\n                name: n.name,\n                publicId: n.publicId,\n                systemId: n.systemId,\n                rootId,\n            };\n        case n.ELEMENT_NODE:\n            return serializeElementNode(n, {\n                doc,\n                blockClass,\n                blockSelector,\n                unblockSelector,\n                inlineStylesheet,\n                maskAttributeFn,\n                maskInputOptions,\n                maskInputFn,\n                dataURLOptions,\n                inlineImages,\n                recordCanvas,\n                keepIframeSrcFn,\n                newlyAddedElement,\n                rootId,\n                maskAllText,\n                maskTextClass,\n                unmaskTextClass,\n                maskTextSelector,\n                unmaskTextSelector,\n            });\n        case n.TEXT_NODE:\n            return serializeTextNode(n, {\n                maskAllText,\n                maskTextClass,\n                unmaskTextClass,\n                maskTextSelector,\n                unmaskTextSelector,\n                maskTextFn,\n                maskInputOptions,\n                maskInputFn,\n                rootId,\n            });\n        case n.CDATA_SECTION_NODE:\n            return {\n                type: NodeType$1.CDATA,\n                textContent: '',\n                rootId,\n            };\n        case n.COMMENT_NODE:\n            return {\n                type: NodeType$1.Comment,\n                textContent: n.textContent || '',\n                rootId,\n            };\n        default:\n            return false;\n    }\n}\nfunction getRootId(doc, mirror) {\n    if (!mirror.hasNode(doc))\n        return undefined;\n    const docId = mirror.getId(doc);\n    return docId === 1 ? undefined : docId;\n}\nfunction serializeTextNode(n, options) {\n    const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\n    const parentTagName = n.parentNode && n.parentNode.tagName;\n    let textContent = n.textContent;\n    const isStyle = parentTagName === 'STYLE' ? true : undefined;\n    const isScript = parentTagName === 'SCRIPT' ? true : undefined;\n    const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\n    if (isStyle && textContent) {\n        try {\n            if (n.nextSibling || n.previousSibling) {\n            }\n            else if (_optionalChain$5([n, 'access', _7 => _7.parentNode, 'access', _8 => _8.sheet, 'optionalAccess', _9 => _9.cssRules])) {\n                textContent = stringifyStylesheet(n.parentNode.sheet);\n            }\n        }\n        catch (err) {\n            console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\n        }\n        textContent = absoluteToStylesheet(textContent, getHref());\n    }\n    if (isScript) {\n        textContent = 'SCRIPT_PLACEHOLDER';\n    }\n    const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\n    if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n        textContent = maskTextFn\n            ? maskTextFn(textContent, n.parentElement)\n            : textContent.replace(/[\\S]/g, '*');\n    }\n    if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n        textContent = maskInputFn\n            ? maskInputFn(textContent, n.parentNode)\n            : textContent.replace(/[\\S]/g, '*');\n    }\n    if (parentTagName === 'OPTION' && textContent) {\n        const isInputMasked = shouldMaskInput({\n            type: null,\n            tagName: parentTagName,\n            maskInputOptions,\n        });\n        textContent = maskInputValue({\n            isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\n            element: n,\n            value: textContent,\n            maskInputFn,\n        });\n    }\n    return {\n        type: NodeType$1.Text,\n        textContent: textContent || '',\n        isStyle,\n        rootId,\n    };\n}\nfunction serializeElementNode(n, options) {\n    const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\n    const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\n    const tagName = getValidTagName(n);\n    let attributes = {};\n    const len = n.attributes.length;\n    for (let i = 0; i < len; i++) {\n        const attr = n.attributes[i];\n        if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\n            attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\n        }\n    }\n    if (tagName === 'link' && inlineStylesheet) {\n        const stylesheet = Array.from(doc.styleSheets).find((s) => {\n            return s.href === n.href;\n        });\n        let cssText = null;\n        if (stylesheet) {\n            cssText = stringifyStylesheet(stylesheet);\n        }\n        if (cssText) {\n            delete attributes.rel;\n            delete attributes.href;\n            attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n        }\n    }\n    if (tagName === 'style' &&\n        n.sheet &&\n        !(n.innerText || n.textContent || '').trim().length) {\n        const cssText = stringifyStylesheet(n.sheet);\n        if (cssText) {\n            attributes._cssText = absoluteToStylesheet(cssText, getHref());\n        }\n    }\n    if (tagName === 'input' ||\n        tagName === 'textarea' ||\n        tagName === 'select' ||\n        tagName === 'option') {\n        const el = n;\n        const type = getInputType(el);\n        const value = getInputValue(el, toUpperCase(tagName), type);\n        const checked = el.checked;\n        if (type !== 'submit' && type !== 'button' && value) {\n            const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\n                type,\n                tagName: toUpperCase(tagName),\n                maskInputOptions,\n            }));\n            attributes.value = maskInputValue({\n                isMasked: forceMask,\n                element: el,\n                value,\n                maskInputFn,\n            });\n        }\n        if (checked) {\n            attributes.checked = checked;\n        }\n    }\n    if (tagName === 'option') {\n        if (n.selected && !maskInputOptions['select']) {\n            attributes.selected = true;\n        }\n        else {\n            delete attributes.selected;\n        }\n    }\n    if (tagName === 'canvas' && recordCanvas) {\n        if (n.__context === '2d') {\n            if (!is2DCanvasBlank(n)) {\n                attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n            }\n        }\n        else if (!('__context' in n)) {\n            const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n            const blankCanvas = document.createElement('canvas');\n            blankCanvas.width = n.width;\n            blankCanvas.height = n.height;\n            const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n            if (canvasDataURL !== blankCanvasDataURL) {\n                attributes.rr_dataURL = canvasDataURL;\n            }\n        }\n    }\n    if (tagName === 'img' && inlineImages) {\n        if (!canvasService) {\n            canvasService = doc.createElement('canvas');\n            canvasCtx = canvasService.getContext('2d');\n        }\n        const image = n;\n        const oldValue = image.crossOrigin;\n        image.crossOrigin = 'anonymous';\n        const recordInlineImage = () => {\n            image.removeEventListener('load', recordInlineImage);\n            try {\n                canvasService.width = image.naturalWidth;\n                canvasService.height = image.naturalHeight;\n                canvasCtx.drawImage(image, 0, 0);\n                attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n            }\n            catch (err) {\n                console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\n            }\n            oldValue\n                ? (attributes.crossOrigin = oldValue)\n                : image.removeAttribute('crossorigin');\n        };\n        if (image.complete && image.naturalWidth !== 0)\n            recordInlineImage();\n        else\n            image.addEventListener('load', recordInlineImage);\n    }\n    if (tagName === 'audio' || tagName === 'video') {\n        attributes.rr_mediaState = n.paused\n            ? 'paused'\n            : 'played';\n        attributes.rr_mediaCurrentTime = n.currentTime;\n    }\n    if (!newlyAddedElement) {\n        if (n.scrollLeft) {\n            attributes.rr_scrollLeft = n.scrollLeft;\n        }\n        if (n.scrollTop) {\n            attributes.rr_scrollTop = n.scrollTop;\n        }\n    }\n    if (needBlock) {\n        const { width, height } = n.getBoundingClientRect();\n        attributes = {\n            class: attributes.class,\n            rr_width: `${width}px`,\n            rr_height: `${height}px`,\n        };\n    }\n    if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\n        if (!needBlock && !n.contentDocument) {\n            attributes.rr_src = attributes.src;\n        }\n        delete attributes.src;\n    }\n    let isCustomElement;\n    try {\n        if (customElements.get(tagName))\n            isCustomElement = true;\n    }\n    catch (e) {\n    }\n    return {\n        type: NodeType$1.Element,\n        tagName,\n        attributes,\n        childNodes: [],\n        isSVG: isSVGElement(n) || undefined,\n        needBlock,\n        rootId,\n        isCustom: isCustomElement,\n    };\n}\nfunction lowerIfExists(maybeAttr) {\n    if (maybeAttr === undefined || maybeAttr === null) {\n        return '';\n    }\n    else {\n        return maybeAttr.toLowerCase();\n    }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n    if (slimDOMOptions.comment && sn.type === NodeType$1.Comment) {\n        return true;\n    }\n    else if (sn.type === NodeType$1.Element) {\n        if (slimDOMOptions.script &&\n            (sn.tagName === 'script' ||\n                (sn.tagName === 'link' &&\n                    (sn.attributes.rel === 'preload' ||\n                        sn.attributes.rel === 'modulepreload') &&\n                    sn.attributes.as === 'script') ||\n                (sn.tagName === 'link' &&\n                    sn.attributes.rel === 'prefetch' &&\n                    typeof sn.attributes.href === 'string' &&\n                    extractFileExtension(sn.attributes.href) === 'js'))) {\n            return true;\n        }\n        else if (slimDOMOptions.headFavicon &&\n            ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\n                (sn.tagName === 'meta' &&\n                    (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\n                        lowerIfExists(sn.attributes.name) === 'application-name' ||\n                        lowerIfExists(sn.attributes.rel) === 'icon' ||\n                        lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\n                        lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\n            return true;\n        }\n        else if (sn.tagName === 'meta') {\n            if (slimDOMOptions.headMetaDescKeywords &&\n                lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaSocial &&\n                (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\n                    lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\n                    lowerIfExists(sn.attributes.name) === 'pinterest')) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaRobots &&\n                (lowerIfExists(sn.attributes.name) === 'robots' ||\n                    lowerIfExists(sn.attributes.name) === 'googlebot' ||\n                    lowerIfExists(sn.attributes.name) === 'bingbot')) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaHttpEquiv &&\n                sn.attributes['http-equiv'] !== undefined) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaAuthorship &&\n                (lowerIfExists(sn.attributes.name) === 'author' ||\n                    lowerIfExists(sn.attributes.name) === 'generator' ||\n                    lowerIfExists(sn.attributes.name) === 'framework' ||\n                    lowerIfExists(sn.attributes.name) === 'publisher' ||\n                    lowerIfExists(sn.attributes.name) === 'progid' ||\n                    lowerIfExists(sn.attributes.property).match(/^article:/) ||\n                    lowerIfExists(sn.attributes.property).match(/^product:/))) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaVerification &&\n                (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\n                    lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\n                    lowerIfExists(sn.attributes.name) === 'csrf-token' ||\n                    lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\n                    lowerIfExists(sn.attributes.name) === 'verify-v1' ||\n                    lowerIfExists(sn.attributes.name) === 'verification' ||\n                    lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nfunction serializeNodeWithId(n, options) {\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\n    let { preserveWhiteSpace = true } = options;\n    const _serializedNode = serializeNode(n, {\n        doc,\n        mirror,\n        blockClass,\n        blockSelector,\n        maskAllText,\n        unblockSelector,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector,\n        inlineStylesheet,\n        maskInputOptions,\n        maskAttributeFn,\n        maskTextFn,\n        maskInputFn,\n        dataURLOptions,\n        inlineImages,\n        recordCanvas,\n        keepIframeSrcFn,\n        newlyAddedElement,\n    });\n    if (!_serializedNode) {\n        console.warn(n, 'not serialized');\n        return null;\n    }\n    let id;\n    if (mirror.hasNode(n)) {\n        id = mirror.getId(n);\n    }\n    else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\n        (!preserveWhiteSpace &&\n            _serializedNode.type === NodeType$1.Text &&\n            !_serializedNode.isStyle &&\n            !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\n        id = IGNORED_NODE;\n    }\n    else {\n        id = genId();\n    }\n    const serializedNode = Object.assign(_serializedNode, { id });\n    mirror.add(n, serializedNode);\n    if (id === IGNORED_NODE) {\n        return null;\n    }\n    if (onSerialize) {\n        onSerialize(n);\n    }\n    let recordChild = !skipChild;\n    if (serializedNode.type === NodeType$1.Element) {\n        recordChild = recordChild && !serializedNode.needBlock;\n        delete serializedNode.needBlock;\n        const shadowRoot = n.shadowRoot;\n        if (shadowRoot && isNativeShadowDom(shadowRoot))\n            serializedNode.isShadowHost = true;\n    }\n    if ((serializedNode.type === NodeType$1.Document ||\n        serializedNode.type === NodeType$1.Element) &&\n        recordChild) {\n        if (slimDOMOptions.headWhitespace &&\n            serializedNode.type === NodeType$1.Element &&\n            serializedNode.tagName === 'head') {\n            preserveWhiteSpace = false;\n        }\n        const bypassOptions = {\n            doc,\n            mirror,\n            blockClass,\n            blockSelector,\n            maskAllText,\n            unblockSelector,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn,\n        };\n        for (const childN of Array.from(n.childNodes)) {\n            const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n            if (serializedChildNode) {\n                serializedNode.childNodes.push(serializedChildNode);\n            }\n        }\n        if (isElement$1(n) && n.shadowRoot) {\n            for (const childN of Array.from(n.shadowRoot.childNodes)) {\n                const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n                if (serializedChildNode) {\n                    isNativeShadowDom(n.shadowRoot) &&\n                        (serializedChildNode.isShadow = true);\n                    serializedNode.childNodes.push(serializedChildNode);\n                }\n            }\n        }\n    }\n    if (n.parentNode &&\n        isShadowRoot(n.parentNode) &&\n        isNativeShadowDom(n.parentNode)) {\n        serializedNode.isShadow = true;\n    }\n    if (serializedNode.type === NodeType$1.Element &&\n        serializedNode.tagName === 'iframe') {\n        onceIframeLoaded(n, () => {\n            const iframeDoc = n.contentDocument;\n            if (iframeDoc && onIframeLoad) {\n                const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n                    doc: iframeDoc,\n                    mirror,\n                    blockClass,\n                    blockSelector,\n                    unblockSelector,\n                    maskAllText,\n                    maskTextClass,\n                    unmaskTextClass,\n                    maskTextSelector,\n                    unmaskTextSelector,\n                    skipChild: false,\n                    inlineStylesheet,\n                    maskInputOptions,\n                    maskAttributeFn,\n                    maskTextFn,\n                    maskInputFn,\n                    slimDOMOptions,\n                    dataURLOptions,\n                    inlineImages,\n                    recordCanvas,\n                    preserveWhiteSpace,\n                    onSerialize,\n                    onIframeLoad,\n                    iframeLoadTimeout,\n                    onStylesheetLoad,\n                    stylesheetLoadTimeout,\n                    keepIframeSrcFn,\n                });\n                if (serializedIframeNode) {\n                    onIframeLoad(n, serializedIframeNode);\n                }\n            }\n        }, iframeLoadTimeout);\n    }\n    if (serializedNode.type === NodeType$1.Element &&\n        serializedNode.tagName === 'link' &&\n        typeof serializedNode.attributes.rel === 'string' &&\n        (serializedNode.attributes.rel === 'stylesheet' ||\n            (serializedNode.attributes.rel === 'preload' &&\n                typeof serializedNode.attributes.href === 'string' &&\n                extractFileExtension(serializedNode.attributes.href) === 'css'))) {\n        onceStylesheetLoaded(n, () => {\n            if (onStylesheetLoad) {\n                const serializedLinkNode = serializeNodeWithId(n, {\n                    doc,\n                    mirror,\n                    blockClass,\n                    blockSelector,\n                    unblockSelector,\n                    maskAllText,\n                    maskTextClass,\n                    unmaskTextClass,\n                    maskTextSelector,\n                    unmaskTextSelector,\n                    skipChild: false,\n                    inlineStylesheet,\n                    maskInputOptions,\n                    maskAttributeFn,\n                    maskTextFn,\n                    maskInputFn,\n                    slimDOMOptions,\n                    dataURLOptions,\n                    inlineImages,\n                    recordCanvas,\n                    preserveWhiteSpace,\n                    onSerialize,\n                    onIframeLoad,\n                    iframeLoadTimeout,\n                    onStylesheetLoad,\n                    stylesheetLoadTimeout,\n                    keepIframeSrcFn,\n                });\n                if (serializedLinkNode) {\n                    onStylesheetLoad(n, serializedLinkNode);\n                }\n            }\n        }, stylesheetLoadTimeout);\n    }\n    return serializedNode;\n}\nfunction snapshot(n, options) {\n    const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\n    const maskInputOptions = maskAllInputs === true\n        ? {\n            color: true,\n            date: true,\n            'datetime-local': true,\n            email: true,\n            month: true,\n            number: true,\n            range: true,\n            search: true,\n            tel: true,\n            text: true,\n            time: true,\n            url: true,\n            week: true,\n            textarea: true,\n            select: true,\n        }\n        : maskAllInputs === false\n            ? {}\n            : maskAllInputs;\n    const slimDOMOptions = slimDOM === true || slimDOM === 'all'\n        ?\n            {\n                script: true,\n                comment: true,\n                headFavicon: true,\n                headWhitespace: true,\n                headMetaDescKeywords: slimDOM === 'all',\n                headMetaSocial: true,\n                headMetaRobots: true,\n                headMetaHttpEquiv: true,\n                headMetaAuthorship: true,\n                headMetaVerification: true,\n            }\n        : slimDOM === false\n            ? {}\n            : slimDOM;\n    return serializeNodeWithId(n, {\n        doc: n,\n        mirror,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        maskAllText,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector,\n        skipChild: false,\n        inlineStylesheet,\n        maskInputOptions,\n        maskAttributeFn,\n        maskTextFn,\n        maskInputFn,\n        slimDOMOptions,\n        dataURLOptions,\n        inlineImages,\n        recordCanvas,\n        preserveWhiteSpace,\n        onSerialize,\n        onIframeLoad,\n        iframeLoadTimeout,\n        onStylesheetLoad,\n        stylesheetLoadTimeout,\n        keepIframeSrcFn,\n        newlyAddedElement: false,\n    });\n}\n\nfunction _optionalChain$4(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction on(type, fn, target = document) {\n    const options = { capture: true, passive: true };\n    target.addEventListener(type, fn, options);\n    return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\n    '\\r\\n' +\n    'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\n    '\\r\\n' +\n    'or you can use record.mirror to access the mirror instance during recording.';\nlet _mirror = {\n    map: {},\n    getId() {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n        return -1;\n    },\n    getNode() {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n        return null;\n    },\n    removeNodeFromMap() {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    },\n    has() {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n        return false;\n    },\n    reset() {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    },\n};\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\n    _mirror = new Proxy(_mirror, {\n        get(target, prop, receiver) {\n            if (prop === 'map') {\n                console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n            }\n            return Reflect.get(target, prop, receiver);\n        },\n    });\n}\nfunction throttle$1(func, wait, options = {}) {\n    let timeout = null;\n    let previous = 0;\n    return function (...args) {\n        const now = Date.now();\n        if (!previous && options.leading === false) {\n            previous = now;\n        }\n        const remaining = wait - (now - previous);\n        const context = this;\n        if (remaining <= 0 || remaining > wait) {\n            if (timeout) {\n                clearTimeout$1(timeout);\n                timeout = null;\n            }\n            previous = now;\n            func.apply(context, args);\n        }\n        else if (!timeout && options.trailing !== false) {\n            timeout = setTimeout$1(() => {\n                previous = options.leading === false ? 0 : Date.now();\n                timeout = null;\n                func.apply(context, args);\n            }, remaining);\n        }\n    };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n    const original = win.Object.getOwnPropertyDescriptor(target, key);\n    win.Object.defineProperty(target, key, isRevoked\n        ? d\n        : {\n            set(value) {\n                setTimeout$1(() => {\n                    d.set.call(this, value);\n                }, 0);\n                if (original && original.set) {\n                    original.set.call(this, value);\n                }\n            },\n        });\n    return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n    try {\n        if (!(name in source)) {\n            return () => {\n            };\n        }\n        const original = source[name];\n        const wrapped = replacement(original);\n        if (typeof wrapped === 'function') {\n            wrapped.prototype = wrapped.prototype || {};\n            Object.defineProperties(wrapped, {\n                __rrweb_original__: {\n                    enumerable: false,\n                    value: original,\n                },\n            });\n        }\n        source[name] = wrapped;\n        return () => {\n            source[name] = original;\n        };\n    }\n    catch (e2) {\n        return () => {\n        };\n    }\n}\nlet nowTimestamp = Date.now;\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\n    nowTimestamp = () => new Date().getTime();\n}\nfunction getWindowScroll(win) {\n    const doc = win.document;\n    return {\n        left: doc.scrollingElement\n            ? doc.scrollingElement.scrollLeft\n            : win.pageXOffset !== undefined\n                ? win.pageXOffset\n                : _optionalChain$4([doc, 'optionalAccess', _ => _.documentElement, 'access', _2 => _2.scrollLeft]) ||\n                    _optionalChain$4([doc, 'optionalAccess', _3 => _3.body, 'optionalAccess', _4 => _4.parentElement, 'optionalAccess', _5 => _5.scrollLeft]) ||\n                    _optionalChain$4([doc, 'optionalAccess', _6 => _6.body, 'optionalAccess', _7 => _7.scrollLeft]) ||\n                    0,\n        top: doc.scrollingElement\n            ? doc.scrollingElement.scrollTop\n            : win.pageYOffset !== undefined\n                ? win.pageYOffset\n                : _optionalChain$4([doc, 'optionalAccess', _8 => _8.documentElement, 'access', _9 => _9.scrollTop]) ||\n                    _optionalChain$4([doc, 'optionalAccess', _10 => _10.body, 'optionalAccess', _11 => _11.parentElement, 'optionalAccess', _12 => _12.scrollTop]) ||\n                    _optionalChain$4([doc, 'optionalAccess', _13 => _13.body, 'optionalAccess', _14 => _14.scrollTop]) ||\n                    0,\n    };\n}\nfunction getWindowHeight() {\n    return (window.innerHeight ||\n        (document.documentElement && document.documentElement.clientHeight) ||\n        (document.body && document.body.clientHeight));\n}\nfunction getWindowWidth() {\n    return (window.innerWidth ||\n        (document.documentElement && document.documentElement.clientWidth) ||\n        (document.body && document.body.clientWidth));\n}\nfunction closestElementOfNode(node) {\n    if (!node) {\n        return null;\n    }\n    const el = node.nodeType === node.ELEMENT_NODE\n        ? node\n        : node.parentElement;\n    return el;\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n    if (!node) {\n        return false;\n    }\n    const el = closestElementOfNode(node);\n    if (!el) {\n        return false;\n    }\n    const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n    if (!checkAncestors) {\n        const isUnblocked = unblockSelector && el.matches(unblockSelector);\n        return blockedPredicate(el) && !isUnblocked;\n    }\n    const blockDistance = distanceToMatch(el, blockedPredicate);\n    let unblockDistance = -1;\n    if (blockDistance < 0) {\n        return false;\n    }\n    if (unblockSelector) {\n        unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\n    }\n    if (blockDistance > -1 && unblockDistance < 0) {\n        return true;\n    }\n    return blockDistance < unblockDistance;\n}\nfunction isSerialized(n, mirror) {\n    return mirror.getId(n) !== -1;\n}\nfunction isIgnored(n, mirror) {\n    return mirror.getId(n) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror) {\n    if (isShadowRoot(target)) {\n        return false;\n    }\n    const id = mirror.getId(target);\n    if (!mirror.has(id)) {\n        return true;\n    }\n    if (target.parentNode &&\n        target.parentNode.nodeType === target.DOCUMENT_NODE) {\n        return false;\n    }\n    if (!target.parentNode) {\n        return true;\n    }\n    return isAncestorRemoved(target.parentNode, mirror);\n}\nfunction legacy_isTouchEvent(event) {\n    return Boolean(event.changedTouches);\n}\nfunction polyfill(win = window) {\n    if ('NodeList' in win && !win.NodeList.prototype.forEach) {\n        win.NodeList.prototype.forEach = Array.prototype\n            .forEach;\n    }\n    if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\n        win.DOMTokenList.prototype.forEach = Array.prototype\n            .forEach;\n    }\n    if (!Node.prototype.contains) {\n        Node.prototype.contains = (...args) => {\n            let node = args[0];\n            if (!(0 in args)) {\n                throw new TypeError('1 argument is required');\n            }\n            do {\n                if (this === node) {\n                    return true;\n                }\n            } while ((node = node && node.parentNode));\n            return false;\n        };\n    }\n}\nfunction isSerializedIframe(n, mirror) {\n    return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\n}\nfunction isSerializedStylesheet(n, mirror) {\n    return Boolean(n.nodeName === 'LINK' &&\n        n.nodeType === n.ELEMENT_NODE &&\n        n.getAttribute &&\n        n.getAttribute('rel') === 'stylesheet' &&\n        mirror.getMeta(n));\n}\nfunction hasShadowRoot(n) {\n    return Boolean(_optionalChain$4([n, 'optionalAccess', _18 => _18.shadowRoot]));\n}\nclass StyleSheetMirror {\n    constructor() {\n        this.id = 1;\n        this.styleIDMap = new WeakMap();\n        this.idStyleMap = new Map();\n    }\n    getId(stylesheet) {\n        return _nullishCoalesce(this.styleIDMap.get(stylesheet), () => ( -1));\n    }\n    has(stylesheet) {\n        return this.styleIDMap.has(stylesheet);\n    }\n    add(stylesheet, id) {\n        if (this.has(stylesheet))\n            return this.getId(stylesheet);\n        let newId;\n        if (id === undefined) {\n            newId = this.id++;\n        }\n        else\n            newId = id;\n        this.styleIDMap.set(stylesheet, newId);\n        this.idStyleMap.set(newId, stylesheet);\n        return newId;\n    }\n    getStyle(id) {\n        return this.idStyleMap.get(id) || null;\n    }\n    reset() {\n        this.styleIDMap = new WeakMap();\n        this.idStyleMap = new Map();\n        this.id = 1;\n    }\n    generateId() {\n        return this.id++;\n    }\n}\nfunction getShadowHost(n) {\n    let shadowHost = null;\n    if (_optionalChain$4([n, 'access', _19 => _19.getRootNode, 'optionalCall', _20 => _20(), 'optionalAccess', _21 => _21.nodeType]) === Node.DOCUMENT_FRAGMENT_NODE &&\n        n.getRootNode().host)\n        shadowHost = n.getRootNode().host;\n    return shadowHost;\n}\nfunction getRootShadowHost(n) {\n    let rootShadowHost = n;\n    let shadowHost;\n    while ((shadowHost = getShadowHost(rootShadowHost)))\n        rootShadowHost = shadowHost;\n    return rootShadowHost;\n}\nfunction shadowHostInDom(n) {\n    const doc = n.ownerDocument;\n    if (!doc)\n        return false;\n    const shadowHost = getRootShadowHost(n);\n    return doc.contains(shadowHost);\n}\nfunction inDom(n) {\n    const doc = n.ownerDocument;\n    if (!doc)\n        return false;\n    return doc.contains(n) || shadowHostInDom(n);\n}\nconst cachedImplementations = {};\nfunction getImplementation(name) {\n    const cached = cachedImplementations[name];\n    if (cached) {\n        return cached;\n    }\n    const document = window.document;\n    let impl = window[name];\n    if (document && typeof document.createElement === 'function') {\n        try {\n            const sandbox = document.createElement('iframe');\n            sandbox.hidden = true;\n            document.head.appendChild(sandbox);\n            const contentWindow = sandbox.contentWindow;\n            if (contentWindow && contentWindow[name]) {\n                impl =\n                    contentWindow[name];\n            }\n            document.head.removeChild(sandbox);\n        }\n        catch (e) {\n        }\n    }\n    return (cachedImplementations[name] = impl.bind(window));\n}\nfunction onRequestAnimationFrame(...rest) {\n    return getImplementation('requestAnimationFrame')(...rest);\n}\nfunction setTimeout$1(...rest) {\n    return getImplementation('setTimeout')(...rest);\n}\nfunction clearTimeout$1(...rest) {\n    return getImplementation('clearTimeout')(...rest);\n}\n\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\n\nfunction _optionalChain$3(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction isNodeInLinkedList(n) {\n    return '__ln' in n;\n}\nclass DoubleLinkedList {\n    constructor() {\n        this.length = 0;\n        this.head = null;\n        this.tail = null;\n    }\n    get(position) {\n        if (position >= this.length) {\n            throw new Error('Position outside of list range');\n        }\n        let current = this.head;\n        for (let index = 0; index < position; index++) {\n            current = _optionalChain$3([current, 'optionalAccess', _ => _.next]) || null;\n        }\n        return current;\n    }\n    addNode(n) {\n        const node = {\n            value: n,\n            previous: null,\n            next: null,\n        };\n        n.__ln = node;\n        if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\n            const current = n.previousSibling.__ln.next;\n            node.next = current;\n            node.previous = n.previousSibling.__ln;\n            n.previousSibling.__ln.next = node;\n            if (current) {\n                current.previous = node;\n            }\n        }\n        else if (n.nextSibling &&\n            isNodeInLinkedList(n.nextSibling) &&\n            n.nextSibling.__ln.previous) {\n            const current = n.nextSibling.__ln.previous;\n            node.previous = current;\n            node.next = n.nextSibling.__ln;\n            n.nextSibling.__ln.previous = node;\n            if (current) {\n                current.next = node;\n            }\n        }\n        else {\n            if (this.head) {\n                this.head.previous = node;\n            }\n            node.next = this.head;\n            this.head = node;\n        }\n        if (node.next === null) {\n            this.tail = node;\n        }\n        this.length++;\n    }\n    removeNode(n) {\n        const current = n.__ln;\n        if (!this.head) {\n            return;\n        }\n        if (!current.previous) {\n            this.head = current.next;\n            if (this.head) {\n                this.head.previous = null;\n            }\n            else {\n                this.tail = null;\n            }\n        }\n        else {\n            current.previous.next = current.next;\n            if (current.next) {\n                current.next.previous = current.previous;\n            }\n            else {\n                this.tail = current.previous;\n            }\n        }\n        if (n.__ln) {\n            delete n.__ln;\n        }\n        this.length--;\n    }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n    constructor() {\n        this.frozen = false;\n        this.locked = false;\n        this.texts = [];\n        this.attributes = [];\n        this.attributeMap = new WeakMap();\n        this.removes = [];\n        this.mapRemoves = [];\n        this.movedMap = {};\n        this.addedSet = new Set();\n        this.movedSet = new Set();\n        this.droppedSet = new Set();\n        this.processMutations = (mutations) => {\n            mutations.forEach(this.processMutation);\n            this.emit();\n        };\n        this.emit = () => {\n            if (this.frozen || this.locked) {\n                return;\n            }\n            const adds = [];\n            const addedIds = new Set();\n            const addList = new DoubleLinkedList();\n            const getNextId = (n) => {\n                let ns = n;\n                let nextId = IGNORED_NODE;\n                while (nextId === IGNORED_NODE) {\n                    ns = ns && ns.nextSibling;\n                    nextId = ns && this.mirror.getId(ns);\n                }\n                return nextId;\n            };\n            const pushAdd = (n) => {\n                if (!n.parentNode || !inDom(n)) {\n                    return;\n                }\n                const parentId = isShadowRoot(n.parentNode)\n                    ? this.mirror.getId(getShadowHost(n))\n                    : this.mirror.getId(n.parentNode);\n                const nextId = getNextId(n);\n                if (parentId === -1 || nextId === -1) {\n                    return addList.addNode(n);\n                }\n                const sn = serializeNodeWithId(n, {\n                    doc: this.doc,\n                    mirror: this.mirror,\n                    blockClass: this.blockClass,\n                    blockSelector: this.blockSelector,\n                    maskAllText: this.maskAllText,\n                    unblockSelector: this.unblockSelector,\n                    maskTextClass: this.maskTextClass,\n                    unmaskTextClass: this.unmaskTextClass,\n                    maskTextSelector: this.maskTextSelector,\n                    unmaskTextSelector: this.unmaskTextSelector,\n                    skipChild: true,\n                    newlyAddedElement: true,\n                    inlineStylesheet: this.inlineStylesheet,\n                    maskInputOptions: this.maskInputOptions,\n                    maskAttributeFn: this.maskAttributeFn,\n                    maskTextFn: this.maskTextFn,\n                    maskInputFn: this.maskInputFn,\n                    slimDOMOptions: this.slimDOMOptions,\n                    dataURLOptions: this.dataURLOptions,\n                    recordCanvas: this.recordCanvas,\n                    inlineImages: this.inlineImages,\n                    onSerialize: (currentN) => {\n                        if (isSerializedIframe(currentN, this.mirror)) {\n                            this.iframeManager.addIframe(currentN);\n                        }\n                        if (isSerializedStylesheet(currentN, this.mirror)) {\n                            this.stylesheetManager.trackLinkElement(currentN);\n                        }\n                        if (hasShadowRoot(n)) {\n                            this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\n                        }\n                    },\n                    onIframeLoad: (iframe, childSn) => {\n                        this.iframeManager.attachIframe(iframe, childSn);\n                        if (iframe.contentWindow) {\n                            this.canvasManager.addWindow(iframe.contentWindow);\n                        }\n                        this.shadowDomManager.observeAttachShadow(iframe);\n                    },\n                    onStylesheetLoad: (link, childSn) => {\n                        this.stylesheetManager.attachLinkElement(link, childSn);\n                    },\n                });\n                if (sn) {\n                    adds.push({\n                        parentId,\n                        nextId,\n                        node: sn,\n                    });\n                    addedIds.add(sn.id);\n                }\n            };\n            while (this.mapRemoves.length) {\n                this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n            }\n            for (const n of this.movedSet) {\n                if (isParentRemoved(this.removes, n, this.mirror) &&\n                    !this.movedSet.has(n.parentNode)) {\n                    continue;\n                }\n                pushAdd(n);\n            }\n            for (const n of this.addedSet) {\n                if (!isAncestorInSet(this.droppedSet, n) &&\n                    !isParentRemoved(this.removes, n, this.mirror)) {\n                    pushAdd(n);\n                }\n                else if (isAncestorInSet(this.movedSet, n)) {\n                    pushAdd(n);\n                }\n                else {\n                    this.droppedSet.add(n);\n                }\n            }\n            let candidate = null;\n            while (addList.length) {\n                let node = null;\n                if (candidate) {\n                    const parentId = this.mirror.getId(candidate.value.parentNode);\n                    const nextId = getNextId(candidate.value);\n                    if (parentId !== -1 && nextId !== -1) {\n                        node = candidate;\n                    }\n                }\n                if (!node) {\n                    let tailNode = addList.tail;\n                    while (tailNode) {\n                        const _node = tailNode;\n                        tailNode = tailNode.previous;\n                        if (_node) {\n                            const parentId = this.mirror.getId(_node.value.parentNode);\n                            const nextId = getNextId(_node.value);\n                            if (nextId === -1)\n                                continue;\n                            else if (parentId !== -1) {\n                                node = _node;\n                                break;\n                            }\n                            else {\n                                const unhandledNode = _node.value;\n                                if (unhandledNode.parentNode &&\n                                    unhandledNode.parentNode.nodeType ===\n                                        Node.DOCUMENT_FRAGMENT_NODE) {\n                                    const shadowHost = unhandledNode.parentNode\n                                        .host;\n                                    const parentId = this.mirror.getId(shadowHost);\n                                    if (parentId !== -1) {\n                                        node = _node;\n                                        break;\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                if (!node) {\n                    while (addList.head) {\n                        addList.removeNode(addList.head.value);\n                    }\n                    break;\n                }\n                candidate = node.previous;\n                addList.removeNode(node.value);\n                pushAdd(node.value);\n            }\n            const payload = {\n                texts: this.texts\n                    .map((text) => ({\n                    id: this.mirror.getId(text.node),\n                    value: text.value,\n                }))\n                    .filter((text) => !addedIds.has(text.id))\n                    .filter((text) => this.mirror.has(text.id)),\n                attributes: this.attributes\n                    .map((attribute) => {\n                    const { attributes } = attribute;\n                    if (typeof attributes.style === 'string') {\n                        const diffAsStr = JSON.stringify(attribute.styleDiff);\n                        const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n                        if (diffAsStr.length < attributes.style.length) {\n                            if ((diffAsStr + unchangedAsStr).split('var(').length ===\n                                attributes.style.split('var(').length) {\n                                attributes.style = attribute.styleDiff;\n                            }\n                        }\n                    }\n                    return {\n                        id: this.mirror.getId(attribute.node),\n                        attributes: attributes,\n                    };\n                })\n                    .filter((attribute) => !addedIds.has(attribute.id))\n                    .filter((attribute) => this.mirror.has(attribute.id)),\n                removes: this.removes,\n                adds,\n            };\n            if (!payload.texts.length &&\n                !payload.attributes.length &&\n                !payload.removes.length &&\n                !payload.adds.length) {\n                return;\n            }\n            this.texts = [];\n            this.attributes = [];\n            this.attributeMap = new WeakMap();\n            this.removes = [];\n            this.addedSet = new Set();\n            this.movedSet = new Set();\n            this.droppedSet = new Set();\n            this.movedMap = {};\n            this.mutationCb(payload);\n        };\n        this.processMutation = (m) => {\n            if (isIgnored(m.target, this.mirror)) {\n                return;\n            }\n            switch (m.type) {\n                case 'characterData': {\n                    const value = m.target.textContent;\n                    if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\n                        value !== m.oldValue) {\n                        this.texts.push({\n                            value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\n                                ? this.maskTextFn\n                                    ? this.maskTextFn(value, closestElementOfNode(m.target))\n                                    : value.replace(/[\\S]/g, '*')\n                                : value,\n                            node: m.target,\n                        });\n                    }\n                    break;\n                }\n                case 'attributes': {\n                    const target = m.target;\n                    let attributeName = m.attributeName;\n                    let value = m.target.getAttribute(attributeName);\n                    if (attributeName === 'value') {\n                        const type = getInputType(target);\n                        const tagName = target.tagName;\n                        value = getInputValue(target, tagName, type);\n                        const isInputMasked = shouldMaskInput({\n                            maskInputOptions: this.maskInputOptions,\n                            tagName,\n                            type,\n                        });\n                        const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\n                        value = maskInputValue({\n                            isMasked: forceMask,\n                            element: target,\n                            value,\n                            maskInputFn: this.maskInputFn,\n                        });\n                    }\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n                        value === m.oldValue) {\n                        return;\n                    }\n                    let item = this.attributeMap.get(m.target);\n                    if (target.tagName === 'IFRAME' &&\n                        attributeName === 'src' &&\n                        !this.keepIframeSrcFn(value)) {\n                        if (!target.contentDocument) {\n                            attributeName = 'rr_src';\n                        }\n                        else {\n                            return;\n                        }\n                    }\n                    if (!item) {\n                        item = {\n                            node: m.target,\n                            attributes: {},\n                            styleDiff: {},\n                            _unchangedStyles: {},\n                        };\n                        this.attributes.push(item);\n                        this.attributeMap.set(m.target, item);\n                    }\n                    if (attributeName === 'type' &&\n                        target.tagName === 'INPUT' &&\n                        (m.oldValue || '').toLowerCase() === 'password') {\n                        target.setAttribute('data-rr-is-password', 'true');\n                    }\n                    if (!ignoreAttribute(target.tagName, attributeName)) {\n                        item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\n                        if (attributeName === 'style') {\n                            if (!this.unattachedDoc) {\n                                try {\n                                    this.unattachedDoc =\n                                        document.implementation.createHTMLDocument();\n                                }\n                                catch (e) {\n                                    this.unattachedDoc = this.doc;\n                                }\n                            }\n                            const old = this.unattachedDoc.createElement('span');\n                            if (m.oldValue) {\n                                old.setAttribute('style', m.oldValue);\n                            }\n                            for (const pname of Array.from(target.style)) {\n                                const newValue = target.style.getPropertyValue(pname);\n                                const newPriority = target.style.getPropertyPriority(pname);\n                                if (newValue !== old.style.getPropertyValue(pname) ||\n                                    newPriority !== old.style.getPropertyPriority(pname)) {\n                                    if (newPriority === '') {\n                                        item.styleDiff[pname] = newValue;\n                                    }\n                                    else {\n                                        item.styleDiff[pname] = [newValue, newPriority];\n                                    }\n                                }\n                                else {\n                                    item._unchangedStyles[pname] = [newValue, newPriority];\n                                }\n                            }\n                            for (const pname of Array.from(old.style)) {\n                                if (target.style.getPropertyValue(pname) === '') {\n                                    item.styleDiff[pname] = false;\n                                }\n                            }\n                        }\n                    }\n                    break;\n                }\n                case 'childList': {\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\n                        return;\n                    }\n                    m.addedNodes.forEach((n) => this.genAdds(n, m.target));\n                    m.removedNodes.forEach((n) => {\n                        const nodeId = this.mirror.getId(n);\n                        const parentId = isShadowRoot(m.target)\n                            ? this.mirror.getId(m.target.host)\n                            : this.mirror.getId(m.target);\n                        if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n                            isIgnored(n, this.mirror) ||\n                            !isSerialized(n, this.mirror)) {\n                            return;\n                        }\n                        if (this.addedSet.has(n)) {\n                            deepDelete(this.addedSet, n);\n                            this.droppedSet.add(n);\n                        }\n                        else if (this.addedSet.has(m.target) && nodeId === -1) ;\n                        else if (isAncestorRemoved(m.target, this.mirror)) ;\n                        else if (this.movedSet.has(n) &&\n                            this.movedMap[moveKey(nodeId, parentId)]) {\n                            deepDelete(this.movedSet, n);\n                        }\n                        else {\n                            this.removes.push({\n                                parentId,\n                                id: nodeId,\n                                isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\n                                    ? true\n                                    : undefined,\n                            });\n                        }\n                        this.mapRemoves.push(n);\n                    });\n                    break;\n                }\n            }\n        };\n        this.genAdds = (n, target) => {\n            if (this.processedNodeManager.inOtherBuffer(n, this))\n                return;\n            if (this.addedSet.has(n) || this.movedSet.has(n))\n                return;\n            if (this.mirror.hasNode(n)) {\n                if (isIgnored(n, this.mirror)) {\n                    return;\n                }\n                this.movedSet.add(n);\n                let targetId = null;\n                if (target && this.mirror.hasNode(target)) {\n                    targetId = this.mirror.getId(target);\n                }\n                if (targetId && targetId !== -1) {\n                    this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\n                }\n            }\n            else {\n                this.addedSet.add(n);\n                this.droppedSet.delete(n);\n            }\n            if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\n                n.childNodes.forEach((childN) => this.genAdds(childN));\n                if (hasShadowRoot(n)) {\n                    n.shadowRoot.childNodes.forEach((childN) => {\n                        this.processedNodeManager.add(childN, this);\n                        this.genAdds(childN, n);\n                    });\n                }\n            }\n        };\n    }\n    init(options) {\n        [\n            'mutationCb',\n            'blockClass',\n            'blockSelector',\n            'unblockSelector',\n            'maskAllText',\n            'maskTextClass',\n            'unmaskTextClass',\n            'maskTextSelector',\n            'unmaskTextSelector',\n            'inlineStylesheet',\n            'maskInputOptions',\n            'maskAttributeFn',\n            'maskTextFn',\n            'maskInputFn',\n            'keepIframeSrcFn',\n            'recordCanvas',\n            'inlineImages',\n            'slimDOMOptions',\n            'dataURLOptions',\n            'doc',\n            'mirror',\n            'iframeManager',\n            'stylesheetManager',\n            'shadowDomManager',\n            'canvasManager',\n            'processedNodeManager',\n        ].forEach((key) => {\n            this[key] = options[key];\n        });\n    }\n    freeze() {\n        this.frozen = true;\n        this.canvasManager.freeze();\n    }\n    unfreeze() {\n        this.frozen = false;\n        this.canvasManager.unfreeze();\n        this.emit();\n    }\n    isFrozen() {\n        return this.frozen;\n    }\n    lock() {\n        this.locked = true;\n        this.canvasManager.lock();\n    }\n    unlock() {\n        this.locked = false;\n        this.canvasManager.unlock();\n        this.emit();\n    }\n    reset() {\n        this.shadowDomManager.reset();\n        this.canvasManager.reset();\n    }\n}\nfunction deepDelete(addsSet, n) {\n    addsSet.delete(n);\n    n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n, mirror) {\n    if (removes.length === 0)\n        return false;\n    return _isParentRemoved(removes, n, mirror);\n}\nfunction _isParentRemoved(removes, n, mirror) {\n    const { parentNode } = n;\n    if (!parentNode) {\n        return false;\n    }\n    const parentId = mirror.getId(parentNode);\n    if (removes.some((r) => r.id === parentId)) {\n        return true;\n    }\n    return _isParentRemoved(removes, parentNode, mirror);\n}\nfunction isAncestorInSet(set, n) {\n    if (set.size === 0)\n        return false;\n    return _isAncestorInSet(set, n);\n}\nfunction _isAncestorInSet(set, n) {\n    const { parentNode } = n;\n    if (!parentNode) {\n        return false;\n    }\n    if (set.has(parentNode)) {\n        return true;\n    }\n    return _isAncestorInSet(set, parentNode);\n}\n\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n    errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n    errorHandler = undefined;\n}\nconst callbackWrapper = (cb) => {\n    if (!errorHandler) {\n        return cb;\n    }\n    const rrwebWrapped = ((...rest) => {\n        try {\n            return cb(...rest);\n        }\n        catch (error) {\n            if (errorHandler && errorHandler(error) === true) {\n                return () => {\n                };\n            }\n            throw error;\n        }\n    });\n    return rrwebWrapped;\n};\n\nfunction _optionalChain$2(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n    try {\n        if ('composedPath' in event) {\n            const path = event.composedPath();\n            if (path.length) {\n                return path[0];\n            }\n        }\n        else if ('path' in event && event.path.length) {\n            return event.path[0];\n        }\n    }\n    catch (e2) {\n    }\n    return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n    const mutationBuffer = new MutationBuffer();\n    mutationBuffers.push(mutationBuffer);\n    mutationBuffer.init(options);\n    let mutationObserverCtor = window.MutationObserver ||\n        window.__rrMutationObserver;\n    const angularZoneSymbol = _optionalChain$2([window, 'optionalAccess', _ => _.Zone, 'optionalAccess', _2 => _2.__symbol__, 'optionalCall', _3 => _3('MutationObserver')]);\n    if (angularZoneSymbol &&\n        window[angularZoneSymbol]) {\n        mutationObserverCtor = window[angularZoneSymbol];\n    }\n    const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\n        if (options.onMutation && options.onMutation(mutations) === false) {\n            return;\n        }\n        mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\n    }));\n    observer.observe(rootEl, {\n        attributes: true,\n        attributeOldValue: true,\n        characterData: true,\n        characterDataOldValue: true,\n        childList: true,\n        subtree: true,\n    });\n    return observer;\n}\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\n    if (sampling.mousemove === false) {\n        return () => {\n        };\n    }\n    const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\n    const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\n        ? sampling.mousemoveCallback\n        : 500;\n    let positions = [];\n    let timeBaseline;\n    const wrappedCb = throttle$1(callbackWrapper((source) => {\n        const totalOffset = Date.now() - timeBaseline;\n        mousemoveCb(positions.map((p) => {\n            p.timeOffset -= totalOffset;\n            return p;\n        }), source);\n        positions = [];\n        timeBaseline = null;\n    }), callbackThreshold);\n    const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        const { clientX, clientY } = legacy_isTouchEvent(evt)\n            ? evt.changedTouches[0]\n            : evt;\n        if (!timeBaseline) {\n            timeBaseline = nowTimestamp();\n        }\n        positions.push({\n            x: clientX,\n            y: clientY,\n            id: mirror.getId(target),\n            timeOffset: nowTimestamp() - timeBaseline,\n        });\n        wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\n            ? IncrementalSource.Drag\n            : evt instanceof MouseEvent\n                ? IncrementalSource.MouseMove\n                : IncrementalSource.TouchMove);\n    }), threshold, {\n        trailing: false,\n    }));\n    const handlers = [\n        on('mousemove', updatePosition, doc),\n        on('touchmove', updatePosition, doc),\n        on('drag', updatePosition, doc),\n    ];\n    return callbackWrapper(() => {\n        handlers.forEach((h) => h());\n    });\n}\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n    if (sampling.mouseInteraction === false) {\n        return () => {\n        };\n    }\n    const disableMap = sampling.mouseInteraction === true ||\n        sampling.mouseInteraction === undefined\n        ? {}\n        : sampling.mouseInteraction;\n    const handlers = [];\n    let currentPointerType = null;\n    const getHandler = (eventKey) => {\n        return (event) => {\n            const target = getEventTarget(event);\n            if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n                return;\n            }\n            let pointerType = null;\n            let thisEventKey = eventKey;\n            if ('pointerType' in event) {\n                switch (event.pointerType) {\n                    case 'mouse':\n                        pointerType = PointerTypes.Mouse;\n                        break;\n                    case 'touch':\n                        pointerType = PointerTypes.Touch;\n                        break;\n                    case 'pen':\n                        pointerType = PointerTypes.Pen;\n                        break;\n                }\n                if (pointerType === PointerTypes.Touch) {\n                    if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n                        thisEventKey = 'TouchStart';\n                    }\n                    else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n                        thisEventKey = 'TouchEnd';\n                    }\n                }\n                else if (pointerType === PointerTypes.Pen) ;\n            }\n            else if (legacy_isTouchEvent(event)) {\n                pointerType = PointerTypes.Touch;\n            }\n            if (pointerType !== null) {\n                currentPointerType = pointerType;\n                if ((thisEventKey.startsWith('Touch') &&\n                    pointerType === PointerTypes.Touch) ||\n                    (thisEventKey.startsWith('Mouse') &&\n                        pointerType === PointerTypes.Mouse)) {\n                    pointerType = null;\n                }\n            }\n            else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n                pointerType = currentPointerType;\n                currentPointerType = null;\n            }\n            const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n            if (!e) {\n                return;\n            }\n            const id = mirror.getId(target);\n            const { clientX, clientY } = e;\n            callbackWrapper(mouseInteractionCb)({\n                type: MouseInteractions[thisEventKey],\n                id,\n                x: clientX,\n                y: clientY,\n                ...(pointerType !== null && { pointerType }),\n            });\n        };\n    };\n    Object.keys(MouseInteractions)\n        .filter((key) => Number.isNaN(Number(key)) &&\n        !key.endsWith('_Departed') &&\n        disableMap[key] !== false)\n        .forEach((eventKey) => {\n        let eventName = toLowerCase(eventKey);\n        const handler = getHandler(eventKey);\n        if (window.PointerEvent) {\n            switch (MouseInteractions[eventKey]) {\n                case MouseInteractions.MouseDown:\n                case MouseInteractions.MouseUp:\n                    eventName = eventName.replace('mouse', 'pointer');\n                    break;\n                case MouseInteractions.TouchStart:\n                case MouseInteractions.TouchEnd:\n                    return;\n            }\n        }\n        handlers.push(on(eventName, handler, doc));\n    });\n    return callbackWrapper(() => {\n        handlers.forEach((h) => h());\n    });\n}\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n    const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        if (!target ||\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n            return;\n        }\n        const id = mirror.getId(target);\n        if (target === doc && doc.defaultView) {\n            const scrollLeftTop = getWindowScroll(doc.defaultView);\n            scrollCb({\n                id,\n                x: scrollLeftTop.left,\n                y: scrollLeftTop.top,\n            });\n        }\n        else {\n            scrollCb({\n                id,\n                x: target.scrollLeft,\n                y: target.scrollTop,\n            });\n        }\n    }), sampling.scroll || 100));\n    return on('scroll', updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n    let lastH = -1;\n    let lastW = -1;\n    const updateDimension = callbackWrapper(throttle$1(callbackWrapper(() => {\n        const height = getWindowHeight();\n        const width = getWindowWidth();\n        if (lastH !== height || lastW !== width) {\n            viewportResizeCb({\n                width: Number(width),\n                height: Number(height),\n            });\n            lastH = height;\n            lastW = width;\n        }\n    }), 200));\n    return on('resize', updateDimension, win);\n}\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\nconst lastInputValueMap = new WeakMap();\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\n    function eventHandler(event) {\n        let target = getEventTarget(event);\n        const userTriggered = event.isTrusted;\n        const tagName = target && toUpperCase(target.tagName);\n        if (tagName === 'OPTION')\n            target = target.parentElement;\n        if (!target ||\n            !tagName ||\n            INPUT_TAGS.indexOf(tagName) < 0 ||\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n            return;\n        }\n        const el = target;\n        if (el.classList.contains(ignoreClass) ||\n            (ignoreSelector && el.matches(ignoreSelector))) {\n            return;\n        }\n        const type = getInputType(target);\n        let text = getInputValue(el, tagName, type);\n        let isChecked = false;\n        const isInputMasked = shouldMaskInput({\n            maskInputOptions,\n            tagName,\n            type,\n        });\n        const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\n        if (type === 'radio' || type === 'checkbox') {\n            isChecked = target.checked;\n        }\n        text = maskInputValue({\n            isMasked: forceMask,\n            element: target,\n            value: text,\n            maskInputFn,\n        });\n        cbWithDedup(target, userTriggeredOnInput\n            ? { text, isChecked, userTriggered }\n            : { text, isChecked });\n        const name = target.name;\n        if (type === 'radio' && name && isChecked) {\n            doc\n                .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\n                .forEach((el) => {\n                if (el !== target) {\n                    const text = maskInputValue({\n                        isMasked: forceMask,\n                        element: el,\n                        value: getInputValue(el, tagName, type),\n                        maskInputFn,\n                    });\n                    cbWithDedup(el, userTriggeredOnInput\n                        ? { text, isChecked: !isChecked, userTriggered: false }\n                        : { text, isChecked: !isChecked });\n                }\n            });\n        }\n    }\n    function cbWithDedup(target, v) {\n        const lastInputValue = lastInputValueMap.get(target);\n        if (!lastInputValue ||\n            lastInputValue.text !== v.text ||\n            lastInputValue.isChecked !== v.isChecked) {\n            lastInputValueMap.set(target, v);\n            const id = mirror.getId(target);\n            callbackWrapper(inputCb)({\n                ...v,\n                id,\n            });\n        }\n    }\n    const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\n    const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\n    const currentWindow = doc.defaultView;\n    if (!currentWindow) {\n        return () => {\n            handlers.forEach((h) => h());\n        };\n    }\n    const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\n    const hookProperties = [\n        [currentWindow.HTMLInputElement.prototype, 'value'],\n        [currentWindow.HTMLInputElement.prototype, 'checked'],\n        [currentWindow.HTMLSelectElement.prototype, 'value'],\n        [currentWindow.HTMLTextAreaElement.prototype, 'value'],\n        [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\n        [currentWindow.HTMLOptionElement.prototype, 'selected'],\n    ];\n    if (propertyDescriptor && propertyDescriptor.set) {\n        handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\n            set() {\n                callbackWrapper(eventHandler)({\n                    target: this,\n                    isTrusted: false,\n                });\n            },\n        }, false, currentWindow)));\n    }\n    return callbackWrapper(() => {\n        handlers.forEach((h) => h());\n    });\n}\nfunction getNestedCSSRulePositions(rule) {\n    const positions = [];\n    function recurse(childRule, pos) {\n        if ((hasNestedCSSRule('CSSGroupingRule') &&\n            childRule.parentRule instanceof CSSGroupingRule) ||\n            (hasNestedCSSRule('CSSMediaRule') &&\n                childRule.parentRule instanceof CSSMediaRule) ||\n            (hasNestedCSSRule('CSSSupportsRule') &&\n                childRule.parentRule instanceof CSSSupportsRule) ||\n            (hasNestedCSSRule('CSSConditionRule') &&\n                childRule.parentRule instanceof CSSConditionRule)) {\n            const rules = Array.from(childRule.parentRule.cssRules);\n            const index = rules.indexOf(childRule);\n            pos.unshift(index);\n        }\n        else if (childRule.parentStyleSheet) {\n            const rules = Array.from(childRule.parentStyleSheet.cssRules);\n            const index = rules.indexOf(childRule);\n            pos.unshift(index);\n        }\n        return pos;\n    }\n    return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\n    let id, styleId;\n    if (!sheet)\n        return {};\n    if (sheet.ownerNode)\n        id = mirror.getId(sheet.ownerNode);\n    else\n        styleId = styleMirror.getId(sheet);\n    return {\n        styleId,\n        id,\n    };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\n    if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n        return () => {\n        };\n    }\n    const insertRule = win.CSSStyleSheet.prototype.insertRule;\n    win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\n            const [rule, index] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                styleSheetRuleCb({\n                    id,\n                    styleId,\n                    adds: [{ rule, index }],\n                });\n            }\n            return target.apply(thisArg, argumentsList);\n        }),\n    });\n    const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n    win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\n            const [index] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                styleSheetRuleCb({\n                    id,\n                    styleId,\n                    removes: [{ index }],\n                });\n            }\n            return target.apply(thisArg, argumentsList);\n        }),\n    });\n    let replace;\n    if (win.CSSStyleSheet.prototype.replace) {\n        replace = win.CSSStyleSheet.prototype.replace;\n        win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\n                const [text] = argumentsList;\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                    styleSheetRuleCb({\n                        id,\n                        styleId,\n                        replace: text,\n                    });\n                }\n                return target.apply(thisArg, argumentsList);\n            }),\n        });\n    }\n    let replaceSync;\n    if (win.CSSStyleSheet.prototype.replaceSync) {\n        replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n        win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\n                const [text] = argumentsList;\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                    styleSheetRuleCb({\n                        id,\n                        styleId,\n                        replaceSync: text,\n                    });\n                }\n                return target.apply(thisArg, argumentsList);\n            }),\n        });\n    }\n    const supportedNestedCSSRuleTypes = {};\n    if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\n        supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n    }\n    else {\n        if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\n            supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n        }\n        if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\n            supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n        }\n        if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\n            supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n        }\n    }\n    const unmodifiedFunctions = {};\n    Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n        unmodifiedFunctions[typeKey] = {\n            insertRule: type.prototype.insertRule,\n            deleteRule: type.prototype.deleteRule,\n        };\n        type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\n                const [rule, index] = argumentsList;\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                    styleSheetRuleCb({\n                        id,\n                        styleId,\n                        adds: [\n                            {\n                                rule,\n                                index: [\n                                    ...getNestedCSSRulePositions(thisArg),\n                                    index || 0,\n                                ],\n                            },\n                        ],\n                    });\n                }\n                return target.apply(thisArg, argumentsList);\n            }),\n        });\n        type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\n                const [index] = argumentsList;\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                    styleSheetRuleCb({\n                        id,\n                        styleId,\n                        removes: [\n                            { index: [...getNestedCSSRulePositions(thisArg), index] },\n                        ],\n                    });\n                }\n                return target.apply(thisArg, argumentsList);\n            }),\n        });\n    });\n    return callbackWrapper(() => {\n        win.CSSStyleSheet.prototype.insertRule = insertRule;\n        win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n        replace && (win.CSSStyleSheet.prototype.replace = replace);\n        replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n        Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n            type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n            type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n        });\n    });\n}\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\n    let hostId = null;\n    if (host.nodeName === '#document')\n        hostId = mirror.getId(host);\n    else\n        hostId = mirror.getId(host.host);\n    const patchTarget = host.nodeName === '#document'\n        ? _optionalChain$2([host, 'access', _4 => _4.defaultView, 'optionalAccess', _5 => _5.Document])\n        : _optionalChain$2([host, 'access', _6 => _6.ownerDocument, 'optionalAccess', _7 => _7.defaultView, 'optionalAccess', _8 => _8.ShadowRoot]);\n    const originalPropertyDescriptor = _optionalChain$2([patchTarget, 'optionalAccess', _9 => _9.prototype])\n        ? Object.getOwnPropertyDescriptor(_optionalChain$2([patchTarget, 'optionalAccess', _10 => _10.prototype]), 'adoptedStyleSheets')\n        : undefined;\n    if (hostId === null ||\n        hostId === -1 ||\n        !patchTarget ||\n        !originalPropertyDescriptor)\n        return () => {\n        };\n    Object.defineProperty(host, 'adoptedStyleSheets', {\n        configurable: originalPropertyDescriptor.configurable,\n        enumerable: originalPropertyDescriptor.enumerable,\n        get() {\n            return _optionalChain$2([originalPropertyDescriptor, 'access', _11 => _11.get, 'optionalAccess', _12 => _12.call, 'call', _13 => _13(this)]);\n        },\n        set(sheets) {\n            const result = _optionalChain$2([originalPropertyDescriptor, 'access', _14 => _14.set, 'optionalAccess', _15 => _15.call, 'call', _16 => _16(this, sheets)]);\n            if (hostId !== null && hostId !== -1) {\n                try {\n                    stylesheetManager.adoptStyleSheets(sheets, hostId);\n                }\n                catch (e) {\n                }\n            }\n            return result;\n        },\n    });\n    return callbackWrapper(() => {\n        Object.defineProperty(host, 'adoptedStyleSheets', {\n            configurable: originalPropertyDescriptor.configurable,\n            enumerable: originalPropertyDescriptor.enumerable,\n            get: originalPropertyDescriptor.get,\n            set: originalPropertyDescriptor.set,\n        });\n    });\n}\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\n    const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n    win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\n            const [property, value, priority] = argumentsList;\n            if (ignoreCSSAttributes.has(property)) {\n                return setProperty.apply(thisArg, [property, value, priority]);\n            }\n            const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _17 => _17.parentRule, 'optionalAccess', _18 => _18.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                styleDeclarationCb({\n                    id,\n                    styleId,\n                    set: {\n                        property,\n                        value,\n                        priority,\n                    },\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\n                });\n            }\n            return target.apply(thisArg, argumentsList);\n        }),\n    });\n    const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n    win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\n            const [property] = argumentsList;\n            if (ignoreCSSAttributes.has(property)) {\n                return removeProperty.apply(thisArg, [property]);\n            }\n            const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _19 => _19.parentRule, 'optionalAccess', _20 => _20.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                styleDeclarationCb({\n                    id,\n                    styleId,\n                    remove: {\n                        property,\n                    },\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\n                });\n            }\n            return target.apply(thisArg, argumentsList);\n        }),\n    });\n    return callbackWrapper(() => {\n        win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n        win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n    });\n}\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\n    const handler = callbackWrapper((type) => throttle$1(callbackWrapper((event) => {\n        const target = getEventTarget(event);\n        if (!target ||\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n            return;\n        }\n        const { currentTime, volume, muted, playbackRate } = target;\n        mediaInteractionCb({\n            type,\n            id: mirror.getId(target),\n            currentTime,\n            volume,\n            muted,\n            playbackRate,\n        });\n    }), sampling.media || 500));\n    const handlers = [\n        on('play', handler(0), doc),\n        on('pause', handler(1), doc),\n        on('seeked', handler(2), doc),\n        on('volumechange', handler(3), doc),\n        on('ratechange', handler(4), doc),\n    ];\n    return callbackWrapper(() => {\n        handlers.forEach((h) => h());\n    });\n}\nfunction initFontObserver({ fontCb, doc }) {\n    const win = doc.defaultView;\n    if (!win) {\n        return () => {\n        };\n    }\n    const handlers = [];\n    const fontMap = new WeakMap();\n    const originalFontFace = win.FontFace;\n    win.FontFace = function FontFace(family, source, descriptors) {\n        const fontFace = new originalFontFace(family, source, descriptors);\n        fontMap.set(fontFace, {\n            family,\n            buffer: typeof source !== 'string',\n            descriptors,\n            fontSource: typeof source === 'string'\n                ? source\n                : JSON.stringify(Array.from(new Uint8Array(source))),\n        });\n        return fontFace;\n    };\n    const restoreHandler = patch(doc.fonts, 'add', function (original) {\n        return function (fontFace) {\n            setTimeout$1(callbackWrapper(() => {\n                const p = fontMap.get(fontFace);\n                if (p) {\n                    fontCb(p);\n                    fontMap.delete(fontFace);\n                }\n            }), 0);\n            return original.apply(this, [fontFace]);\n        };\n    });\n    handlers.push(() => {\n        win.FontFace = originalFontFace;\n    });\n    handlers.push(restoreHandler);\n    return callbackWrapper(() => {\n        handlers.forEach((h) => h());\n    });\n}\nfunction initSelectionObserver(param) {\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\n    let collapsed = true;\n    const updateSelection = callbackWrapper(() => {\n        const selection = doc.getSelection();\n        if (!selection || (collapsed && _optionalChain$2([selection, 'optionalAccess', _21 => _21.isCollapsed])))\n            return;\n        collapsed = selection.isCollapsed || false;\n        const ranges = [];\n        const count = selection.rangeCount || 0;\n        for (let i = 0; i < count; i++) {\n            const range = selection.getRangeAt(i);\n            const { startContainer, startOffset, endContainer, endOffset } = range;\n            const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\n                isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\n            if (blocked)\n                continue;\n            ranges.push({\n                start: mirror.getId(startContainer),\n                startOffset,\n                end: mirror.getId(endContainer),\n                endOffset,\n            });\n        }\n        selectionCb({ ranges });\n    });\n    updateSelection();\n    return on('selectionchange', updateSelection);\n}\nfunction initCustomElementObserver({ doc, customElementCb, }) {\n    const win = doc.defaultView;\n    if (!win || !win.customElements)\n        return () => { };\n    const restoreHandler = patch(win.customElements, 'define', function (original) {\n        return function (name, constructor, options) {\n            try {\n                customElementCb({\n                    define: {\n                        name,\n                    },\n                });\n            }\n            catch (e) {\n            }\n            return original.apply(this, [name, constructor, options]);\n        };\n    });\n    return restoreHandler;\n}\nfunction initObservers(o, _hooks = {}) {\n    const currentWindow = o.doc.defaultView;\n    if (!currentWindow) {\n        return () => {\n        };\n    }\n    let mutationObserver;\n    if (o.recordDOM) {\n        mutationObserver = initMutationObserver(o, o.doc);\n    }\n    const mousemoveHandler = initMoveObserver(o);\n    const mouseInteractionHandler = initMouseInteractionObserver(o);\n    const scrollHandler = initScrollObserver(o);\n    const viewportResizeHandler = initViewportResizeObserver(o, {\n        win: currentWindow,\n    });\n    const inputHandler = initInputObserver(o);\n    const mediaInteractionHandler = initMediaInteractionObserver(o);\n    let styleSheetObserver = () => { };\n    let adoptedStyleSheetObserver = () => { };\n    let styleDeclarationObserver = () => { };\n    let fontObserver = () => { };\n    if (o.recordDOM) {\n        styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\n        adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\n        styleDeclarationObserver = initStyleDeclarationObserver(o, {\n            win: currentWindow,\n        });\n        if (o.collectFonts) {\n            fontObserver = initFontObserver(o);\n        }\n    }\n    const selectionObserver = initSelectionObserver(o);\n    const customElementObserver = initCustomElementObserver(o);\n    const pluginHandlers = [];\n    for (const plugin of o.plugins) {\n        pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\n    }\n    return callbackWrapper(() => {\n        mutationBuffers.forEach((b) => b.reset());\n        _optionalChain$2([mutationObserver, 'optionalAccess', _22 => _22.disconnect, 'call', _23 => _23()]);\n        mousemoveHandler();\n        mouseInteractionHandler();\n        scrollHandler();\n        viewportResizeHandler();\n        inputHandler();\n        mediaInteractionHandler();\n        styleSheetObserver();\n        adoptedStyleSheetObserver();\n        styleDeclarationObserver();\n        fontObserver();\n        selectionObserver();\n        customElementObserver();\n        pluginHandlers.forEach((h) => h());\n    });\n}\nfunction hasNestedCSSRule(prop) {\n    return typeof window[prop] !== 'undefined';\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n    return Boolean(typeof window[prop] !== 'undefined' &&\n        window[prop].prototype &&\n        'insertRule' in window[prop].prototype &&\n        'deleteRule' in window[prop].prototype);\n}\n\nclass CrossOriginIframeMirror {\n    constructor(generateIdFn) {\n        this.generateIdFn = generateIdFn;\n        this.iframeIdToRemoteIdMap = new WeakMap();\n        this.iframeRemoteIdToIdMap = new WeakMap();\n    }\n    getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n        const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n        const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n        let id = idToRemoteIdMap.get(remoteId);\n        if (!id) {\n            id = this.generateIdFn();\n            idToRemoteIdMap.set(remoteId, id);\n            remoteIdToIdMap.set(id, remoteId);\n        }\n        return id;\n    }\n    getIds(iframe, remoteId) {\n        const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n        return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\n    }\n    getRemoteId(iframe, id, map) {\n        const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n        if (typeof id !== 'number')\n            return id;\n        const remoteId = remoteIdToIdMap.get(id);\n        if (!remoteId)\n            return -1;\n        return remoteId;\n    }\n    getRemoteIds(iframe, ids) {\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n        return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n    }\n    reset(iframe) {\n        if (!iframe) {\n            this.iframeIdToRemoteIdMap = new WeakMap();\n            this.iframeRemoteIdToIdMap = new WeakMap();\n            return;\n        }\n        this.iframeIdToRemoteIdMap.delete(iframe);\n        this.iframeRemoteIdToIdMap.delete(iframe);\n    }\n    getIdToRemoteIdMap(iframe) {\n        let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n        if (!idToRemoteIdMap) {\n            idToRemoteIdMap = new Map();\n            this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n        }\n        return idToRemoteIdMap;\n    }\n    getRemoteIdToIdMap(iframe) {\n        let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n        if (!remoteIdToIdMap) {\n            remoteIdToIdMap = new Map();\n            this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n        }\n        return remoteIdToIdMap;\n    }\n}\n\nfunction _optionalChain$1(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nclass IframeManagerNoop {\n    constructor() {\n        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n        this.crossOriginIframeRootIdMap = new WeakMap();\n    }\n    addIframe() {\n    }\n    addLoadListener() {\n    }\n    attachIframe() {\n    }\n}\nclass IframeManager {\n    constructor(options) {\n        this.iframes = new WeakMap();\n        this.crossOriginIframeMap = new WeakMap();\n        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n        this.crossOriginIframeRootIdMap = new WeakMap();\n        this.mutationCb = options.mutationCb;\n        this.wrappedEmit = options.wrappedEmit;\n        this.stylesheetManager = options.stylesheetManager;\n        this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n        this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\n        this.mirror = options.mirror;\n        if (this.recordCrossOriginIframes) {\n            window.addEventListener('message', this.handleMessage.bind(this));\n        }\n    }\n    addIframe(iframeEl) {\n        this.iframes.set(iframeEl, true);\n        if (iframeEl.contentWindow)\n            this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n    }\n    addLoadListener(cb) {\n        this.loadListener = cb;\n    }\n    attachIframe(iframeEl, childSn) {\n        this.mutationCb({\n            adds: [\n                {\n                    parentId: this.mirror.getId(iframeEl),\n                    nextId: null,\n                    node: childSn,\n                },\n            ],\n            removes: [],\n            texts: [],\n            attributes: [],\n            isAttachIframe: true,\n        });\n        _optionalChain$1([this, 'access', _ => _.loadListener, 'optionalCall', _2 => _2(iframeEl)]);\n        if (iframeEl.contentDocument &&\n            iframeEl.contentDocument.adoptedStyleSheets &&\n            iframeEl.contentDocument.adoptedStyleSheets.length > 0)\n            this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\n    }\n    handleMessage(message) {\n        const crossOriginMessageEvent = message;\n        if (crossOriginMessageEvent.data.type !== 'rrweb' ||\n            crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n            return;\n        const iframeSourceWindow = message.source;\n        if (!iframeSourceWindow)\n            return;\n        const iframeEl = this.crossOriginIframeMap.get(message.source);\n        if (!iframeEl)\n            return;\n        const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\n        if (transformedEvent)\n            this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\n    }\n    transformCrossOriginEvent(iframeEl, e) {\n        switch (e.type) {\n            case EventType.FullSnapshot: {\n                this.crossOriginIframeMirror.reset(iframeEl);\n                this.crossOriginIframeStyleMirror.reset(iframeEl);\n                this.replaceIdOnNode(e.data.node, iframeEl);\n                const rootId = e.data.node.id;\n                this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n                this.patchRootIdOnNode(e.data.node, rootId);\n                return {\n                    timestamp: e.timestamp,\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.Mutation,\n                        adds: [\n                            {\n                                parentId: this.mirror.getId(iframeEl),\n                                nextId: null,\n                                node: e.data.node,\n                            },\n                        ],\n                        removes: [],\n                        texts: [],\n                        attributes: [],\n                        isAttachIframe: true,\n                    },\n                };\n            }\n            case EventType.Meta:\n            case EventType.Load:\n            case EventType.DomContentLoaded: {\n                return false;\n            }\n            case EventType.Plugin: {\n                return e;\n            }\n            case EventType.Custom: {\n                this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\n                return e;\n            }\n            case EventType.IncrementalSnapshot: {\n                switch (e.data.source) {\n                    case IncrementalSource.Mutation: {\n                        e.data.adds.forEach((n) => {\n                            this.replaceIds(n, iframeEl, [\n                                'parentId',\n                                'nextId',\n                                'previousId',\n                            ]);\n                            this.replaceIdOnNode(n.node, iframeEl);\n                            const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n                            rootId && this.patchRootIdOnNode(n.node, rootId);\n                        });\n                        e.data.removes.forEach((n) => {\n                            this.replaceIds(n, iframeEl, ['parentId', 'id']);\n                        });\n                        e.data.attributes.forEach((n) => {\n                            this.replaceIds(n, iframeEl, ['id']);\n                        });\n                        e.data.texts.forEach((n) => {\n                            this.replaceIds(n, iframeEl, ['id']);\n                        });\n                        return e;\n                    }\n                    case IncrementalSource.Drag:\n                    case IncrementalSource.TouchMove:\n                    case IncrementalSource.MouseMove: {\n                        e.data.positions.forEach((p) => {\n                            this.replaceIds(p, iframeEl, ['id']);\n                        });\n                        return e;\n                    }\n                    case IncrementalSource.ViewportResize: {\n                        return false;\n                    }\n                    case IncrementalSource.MediaInteraction:\n                    case IncrementalSource.MouseInteraction:\n                    case IncrementalSource.Scroll:\n                    case IncrementalSource.CanvasMutation:\n                    case IncrementalSource.Input: {\n                        this.replaceIds(e.data, iframeEl, ['id']);\n                        return e;\n                    }\n                    case IncrementalSource.StyleSheetRule:\n                    case IncrementalSource.StyleDeclaration: {\n                        this.replaceIds(e.data, iframeEl, ['id']);\n                        this.replaceStyleIds(e.data, iframeEl, ['styleId']);\n                        return e;\n                    }\n                    case IncrementalSource.Font: {\n                        return e;\n                    }\n                    case IncrementalSource.Selection: {\n                        e.data.ranges.forEach((range) => {\n                            this.replaceIds(range, iframeEl, ['start', 'end']);\n                        });\n                        return e;\n                    }\n                    case IncrementalSource.AdoptedStyleSheet: {\n                        this.replaceIds(e.data, iframeEl, ['id']);\n                        this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\n                        _optionalChain$1([e, 'access', _3 => _3.data, 'access', _4 => _4.styles, 'optionalAccess', _5 => _5.forEach, 'call', _6 => _6((style) => {\n                            this.replaceStyleIds(style, iframeEl, ['styleId']);\n                        })]);\n                        return e;\n                    }\n                }\n            }\n        }\n        return false;\n    }\n    replace(iframeMirror, obj, iframeEl, keys) {\n        for (const key of keys) {\n            if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\n                continue;\n            if (Array.isArray(obj[key])) {\n                obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\n            }\n            else {\n                obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n            }\n        }\n        return obj;\n    }\n    replaceIds(obj, iframeEl, keys) {\n        return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n    }\n    replaceStyleIds(obj, iframeEl, keys) {\n        return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n    }\n    replaceIdOnNode(node, iframeEl) {\n        this.replaceIds(node, iframeEl, ['id', 'rootId']);\n        if ('childNodes' in node) {\n            node.childNodes.forEach((child) => {\n                this.replaceIdOnNode(child, iframeEl);\n            });\n        }\n    }\n    patchRootIdOnNode(node, rootId) {\n        if (node.type !== NodeType$1.Document && !node.rootId)\n            node.rootId = rootId;\n        if ('childNodes' in node) {\n            node.childNodes.forEach((child) => {\n                this.patchRootIdOnNode(child, rootId);\n            });\n        }\n    }\n}\n\nclass ShadowDomManagerNoop {\n    init() {\n    }\n    addShadowRoot() {\n    }\n    observeAttachShadow() {\n    }\n    reset() {\n    }\n}\nclass ShadowDomManager {\n    constructor(options) {\n        this.shadowDoms = new WeakSet();\n        this.restoreHandlers = [];\n        this.mutationCb = options.mutationCb;\n        this.scrollCb = options.scrollCb;\n        this.bypassOptions = options.bypassOptions;\n        this.mirror = options.mirror;\n        this.init();\n    }\n    init() {\n        this.reset();\n        this.patchAttachShadow(Element, document);\n    }\n    addShadowRoot(shadowRoot, doc) {\n        if (!isNativeShadowDom(shadowRoot))\n            return;\n        if (this.shadowDoms.has(shadowRoot))\n            return;\n        this.shadowDoms.add(shadowRoot);\n        this.bypassOptions.canvasManager.addShadowRoot(shadowRoot);\n        const observer = initMutationObserver({\n            ...this.bypassOptions,\n            doc,\n            mutationCb: this.mutationCb,\n            mirror: this.mirror,\n            shadowDomManager: this,\n        }, shadowRoot);\n        this.restoreHandlers.push(() => observer.disconnect());\n        this.restoreHandlers.push(initScrollObserver({\n            ...this.bypassOptions,\n            scrollCb: this.scrollCb,\n            doc: shadowRoot,\n            mirror: this.mirror,\n        }));\n        setTimeout$1(() => {\n            if (shadowRoot.adoptedStyleSheets &&\n                shadowRoot.adoptedStyleSheets.length > 0)\n                this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\n            this.restoreHandlers.push(initAdoptedStyleSheetObserver({\n                mirror: this.mirror,\n                stylesheetManager: this.bypassOptions.stylesheetManager,\n            }, shadowRoot));\n        }, 0);\n    }\n    observeAttachShadow(iframeElement) {\n        if (!iframeElement.contentWindow || !iframeElement.contentDocument)\n            return;\n        this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\n    }\n    patchAttachShadow(element, doc) {\n        const manager = this;\n        this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\n            return function (option) {\n                const shadowRoot = original.call(this, option);\n                if (this.shadowRoot && inDom(this))\n                    manager.addShadowRoot(this.shadowRoot, doc);\n                return shadowRoot;\n            };\n        }));\n    }\n    reset() {\n        this.restoreHandlers.forEach((handler) => {\n            try {\n                handler();\n            }\n            catch (e) {\n            }\n        });\n        this.restoreHandlers = [];\n        this.shadowDoms = new WeakSet();\n        this.bypassOptions.canvasManager.resetShadowRoots();\n    }\n}\n\nclass CanvasManagerNoop {\n    reset() {\n    }\n    freeze() {\n    }\n    unfreeze() {\n    }\n    lock() {\n    }\n    unlock() {\n    }\n    snapshot() {\n    }\n    addWindow() {\n    }\n    addShadowRoot() {\n    }\n    resetShadowRoots() {\n    }\n}\n\nclass StylesheetManager {\n    constructor(options) {\n        this.trackedLinkElements = new WeakSet();\n        this.styleMirror = new StyleSheetMirror();\n        this.mutationCb = options.mutationCb;\n        this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n    }\n    attachLinkElement(linkEl, childSn) {\n        if ('_cssText' in childSn.attributes)\n            this.mutationCb({\n                adds: [],\n                removes: [],\n                texts: [],\n                attributes: [\n                    {\n                        id: childSn.id,\n                        attributes: childSn\n                            .attributes,\n                    },\n                ],\n            });\n        this.trackLinkElement(linkEl);\n    }\n    trackLinkElement(linkEl) {\n        if (this.trackedLinkElements.has(linkEl))\n            return;\n        this.trackedLinkElements.add(linkEl);\n        this.trackStylesheetInLinkElement(linkEl);\n    }\n    adoptStyleSheets(sheets, hostId) {\n        if (sheets.length === 0)\n            return;\n        const adoptedStyleSheetData = {\n            id: hostId,\n            styleIds: [],\n        };\n        const styles = [];\n        for (const sheet of sheets) {\n            let styleId;\n            if (!this.styleMirror.has(sheet)) {\n                styleId = this.styleMirror.add(sheet);\n                styles.push({\n                    styleId,\n                    rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\n                        rule: stringifyRule(r),\n                        index,\n                    })),\n                });\n            }\n            else\n                styleId = this.styleMirror.getId(sheet);\n            adoptedStyleSheetData.styleIds.push(styleId);\n        }\n        if (styles.length > 0)\n            adoptedStyleSheetData.styles = styles;\n        this.adoptedStyleSheetCb(adoptedStyleSheetData);\n    }\n    reset() {\n        this.styleMirror.reset();\n        this.trackedLinkElements = new WeakSet();\n    }\n    trackStylesheetInLinkElement(linkEl) {\n    }\n}\n\nclass ProcessedNodeManager {\n    constructor() {\n        this.nodeMap = new WeakMap();\n        this.loop = true;\n        this.periodicallyClear();\n    }\n    periodicallyClear() {\n        onRequestAnimationFrame(() => {\n            this.clear();\n            if (this.loop)\n                this.periodicallyClear();\n        });\n    }\n    inOtherBuffer(node, thisBuffer) {\n        const buffers = this.nodeMap.get(node);\n        return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\n    }\n    add(node, buffer) {\n        this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\n    }\n    clear() {\n        this.nodeMap = new WeakMap();\n    }\n    destroy() {\n        this.loop = false;\n    }\n}\n\nlet wrappedEmit;\nlet _takeFullSnapshot;\ntry {\n    if (Array.from([1], (x) => x * 2)[0] !== 2) {\n        const cleanFrame = document.createElement('iframe');\n        document.body.appendChild(cleanFrame);\n        Array.from = _optionalChain([cleanFrame, 'access', _ => _.contentWindow, 'optionalAccess', _2 => _2.Array, 'access', _3 => _3.from]) || Array.from;\n        document.body.removeChild(cleanFrame);\n    }\n}\ncatch (err) {\n    console.debug('Unable to override Array.from', err);\n}\nconst mirror = createMirror();\nfunction record(options = {}) {\n    const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, unblockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, maxCanvasSize = null, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordDOM = true, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\n        ? options.recordAfter\n        : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, getCanvasManager, } = options;\n    registerErrorHandler(errorHandler);\n    const inEmittingFrame = recordCrossOriginIframes\n        ? window.parent === window\n        : true;\n    let passEmitsToParent = false;\n    if (!inEmittingFrame) {\n        try {\n            if (window.parent.document) {\n                passEmitsToParent = false;\n            }\n        }\n        catch (e) {\n            passEmitsToParent = true;\n        }\n    }\n    if (inEmittingFrame && !emit) {\n        throw new Error('emit function is required');\n    }\n    if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\n        sampling.mousemove = mousemoveWait;\n    }\n    mirror.reset();\n    const maskInputOptions = maskAllInputs === true\n        ? {\n            color: true,\n            date: true,\n            'datetime-local': true,\n            email: true,\n            month: true,\n            number: true,\n            range: true,\n            search: true,\n            tel: true,\n            text: true,\n            time: true,\n            url: true,\n            week: true,\n            textarea: true,\n            select: true,\n            radio: true,\n            checkbox: true,\n        }\n        : _maskInputOptions !== undefined\n            ? _maskInputOptions\n            : {};\n    const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\n        ? {\n            script: true,\n            comment: true,\n            headFavicon: true,\n            headWhitespace: true,\n            headMetaSocial: true,\n            headMetaRobots: true,\n            headMetaHttpEquiv: true,\n            headMetaVerification: true,\n            headMetaAuthorship: _slimDOMOptions === 'all',\n            headMetaDescKeywords: _slimDOMOptions === 'all',\n        }\n        : _slimDOMOptions\n            ? _slimDOMOptions\n            : {};\n    polyfill();\n    let lastFullSnapshotEvent;\n    let incrementalSnapshotCount = 0;\n    const eventProcessor = (e) => {\n        for (const plugin of plugins || []) {\n            if (plugin.eventProcessor) {\n                e = plugin.eventProcessor(e);\n            }\n        }\n        if (packFn &&\n            !passEmitsToParent) {\n            e = packFn(e);\n        }\n        return e;\n    };\n    wrappedEmit = (r, isCheckout) => {\n        const e = r;\n        e.timestamp = nowTimestamp();\n        if (_optionalChain([mutationBuffers, 'access', _4 => _4[0], 'optionalAccess', _5 => _5.isFrozen, 'call', _6 => _6()]) &&\n            e.type !== EventType.FullSnapshot &&\n            !(e.type === EventType.IncrementalSnapshot &&\n                e.data.source === IncrementalSource.Mutation)) {\n            mutationBuffers.forEach((buf) => buf.unfreeze());\n        }\n        if (inEmittingFrame) {\n            _optionalChain([emit, 'optionalCall', _7 => _7(eventProcessor(e), isCheckout)]);\n        }\n        else if (passEmitsToParent) {\n            const message = {\n                type: 'rrweb',\n                event: eventProcessor(e),\n                origin: window.location.origin,\n                isCheckout,\n            };\n            window.parent.postMessage(message, '*');\n        }\n        if (e.type === EventType.FullSnapshot) {\n            lastFullSnapshotEvent = e;\n            incrementalSnapshotCount = 0;\n        }\n        else if (e.type === EventType.IncrementalSnapshot) {\n            if (e.data.source === IncrementalSource.Mutation &&\n                e.data.isAttachIframe) {\n                return;\n            }\n            incrementalSnapshotCount++;\n            const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n            const exceedTime = checkoutEveryNms &&\n                lastFullSnapshotEvent &&\n                e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n            if (exceedCount || exceedTime) {\n                takeFullSnapshot(true);\n            }\n        }\n    };\n    const wrappedMutationEmit = (m) => {\n        wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n                source: IncrementalSource.Mutation,\n                ...m,\n            },\n        });\n    };\n    const wrappedScrollEmit = (p) => wrappedEmit({\n        type: EventType.IncrementalSnapshot,\n        data: {\n            source: IncrementalSource.Scroll,\n            ...p,\n        },\n    });\n    const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n        type: EventType.IncrementalSnapshot,\n        data: {\n            source: IncrementalSource.CanvasMutation,\n            ...p,\n        },\n    });\n    const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit({\n        type: EventType.IncrementalSnapshot,\n        data: {\n            source: IncrementalSource.AdoptedStyleSheet,\n            ...a,\n        },\n    });\n    const stylesheetManager = new StylesheetManager({\n        mutationCb: wrappedMutationEmit,\n        adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\n    });\n    const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\n        ? new IframeManagerNoop()\n        : new IframeManager({\n            mirror,\n            mutationCb: wrappedMutationEmit,\n            stylesheetManager: stylesheetManager,\n            recordCrossOriginIframes,\n            wrappedEmit,\n        });\n    for (const plugin of plugins || []) {\n        if (plugin.getMirror)\n            plugin.getMirror({\n                nodeMirror: mirror,\n                crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n                crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\n            });\n    }\n    const processedNodeManager = new ProcessedNodeManager();\n    const canvasManager = _getCanvasManager(getCanvasManager, {\n        mirror,\n        win: window,\n        mutationCb: (p) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n                source: IncrementalSource.CanvasMutation,\n                ...p,\n            },\n        }),\n        recordCanvas,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        maxCanvasSize,\n        sampling: sampling['canvas'],\n        dataURLOptions,\n        errorHandler,\n    });\n    const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\n        __RRWEB_EXCLUDE_SHADOW_DOM__\n        ? new ShadowDomManagerNoop()\n        : new ShadowDomManager({\n            mutationCb: wrappedMutationEmit,\n            scrollCb: wrappedScrollEmit,\n            bypassOptions: {\n                onMutation,\n                blockClass,\n                blockSelector,\n                unblockSelector,\n                maskAllText,\n                maskTextClass,\n                unmaskTextClass,\n                maskTextSelector,\n                unmaskTextSelector,\n                inlineStylesheet,\n                maskInputOptions,\n                dataURLOptions,\n                maskAttributeFn,\n                maskTextFn,\n                maskInputFn,\n                recordCanvas,\n                inlineImages,\n                sampling,\n                slimDOMOptions,\n                iframeManager,\n                stylesheetManager,\n                canvasManager,\n                keepIframeSrcFn,\n                processedNodeManager,\n            },\n            mirror,\n        });\n    const takeFullSnapshot = (isCheckout = false) => {\n        if (!recordDOM) {\n            return;\n        }\n        wrappedEmit({\n            type: EventType.Meta,\n            data: {\n                href: window.location.href,\n                width: getWindowWidth(),\n                height: getWindowHeight(),\n            },\n        }, isCheckout);\n        stylesheetManager.reset();\n        shadowDomManager.init();\n        mutationBuffers.forEach((buf) => buf.lock());\n        const node = snapshot(document, {\n            mirror,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            inlineStylesheet,\n            maskAllInputs: maskInputOptions,\n            maskAttributeFn,\n            maskInputFn,\n            maskTextFn,\n            slimDOM: slimDOMOptions,\n            dataURLOptions,\n            recordCanvas,\n            inlineImages,\n            onSerialize: (n) => {\n                if (isSerializedIframe(n, mirror)) {\n                    iframeManager.addIframe(n);\n                }\n                if (isSerializedStylesheet(n, mirror)) {\n                    stylesheetManager.trackLinkElement(n);\n                }\n                if (hasShadowRoot(n)) {\n                    shadowDomManager.addShadowRoot(n.shadowRoot, document);\n                }\n            },\n            onIframeLoad: (iframe, childSn) => {\n                iframeManager.attachIframe(iframe, childSn);\n                if (iframe.contentWindow) {\n                    canvasManager.addWindow(iframe.contentWindow);\n                }\n                shadowDomManager.observeAttachShadow(iframe);\n            },\n            onStylesheetLoad: (linkEl, childSn) => {\n                stylesheetManager.attachLinkElement(linkEl, childSn);\n            },\n            keepIframeSrcFn,\n        });\n        if (!node) {\n            return console.warn('Failed to snapshot the document');\n        }\n        wrappedEmit({\n            type: EventType.FullSnapshot,\n            data: {\n                node,\n                initialOffset: getWindowScroll(window),\n            },\n        });\n        mutationBuffers.forEach((buf) => buf.unlock());\n        if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n            stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\n    };\n    _takeFullSnapshot = takeFullSnapshot;\n    try {\n        const handlers = [];\n        const observe = (doc) => {\n            return callbackWrapper(initObservers)({\n                onMutation,\n                mutationCb: wrappedMutationEmit,\n                mousemoveCb: (positions, source) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source,\n                        positions,\n                    },\n                }),\n                mouseInteractionCb: (d) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.MouseInteraction,\n                        ...d,\n                    },\n                }),\n                scrollCb: wrappedScrollEmit,\n                viewportResizeCb: (d) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.ViewportResize,\n                        ...d,\n                    },\n                }),\n                inputCb: (v) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.Input,\n                        ...v,\n                    },\n                }),\n                mediaInteractionCb: (p) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.MediaInteraction,\n                        ...p,\n                    },\n                }),\n                styleSheetRuleCb: (r) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.StyleSheetRule,\n                        ...r,\n                    },\n                }),\n                styleDeclarationCb: (r) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.StyleDeclaration,\n                        ...r,\n                    },\n                }),\n                canvasMutationCb: wrappedCanvasMutationEmit,\n                fontCb: (p) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.Font,\n                        ...p,\n                    },\n                }),\n                selectionCb: (p) => {\n                    wrappedEmit({\n                        type: EventType.IncrementalSnapshot,\n                        data: {\n                            source: IncrementalSource.Selection,\n                            ...p,\n                        },\n                    });\n                },\n                customElementCb: (c) => {\n                    wrappedEmit({\n                        type: EventType.IncrementalSnapshot,\n                        data: {\n                            source: IncrementalSource.CustomElement,\n                            ...c,\n                        },\n                    });\n                },\n                blockClass,\n                ignoreClass,\n                ignoreSelector,\n                maskAllText,\n                maskTextClass,\n                unmaskTextClass,\n                maskTextSelector,\n                unmaskTextSelector,\n                maskInputOptions,\n                inlineStylesheet,\n                sampling,\n                recordDOM,\n                recordCanvas,\n                inlineImages,\n                userTriggeredOnInput,\n                collectFonts,\n                doc,\n                maskAttributeFn,\n                maskInputFn,\n                maskTextFn,\n                keepIframeSrcFn,\n                blockSelector,\n                unblockSelector,\n                slimDOMOptions,\n                dataURLOptions,\n                mirror,\n                iframeManager,\n                stylesheetManager,\n                shadowDomManager,\n                processedNodeManager,\n                canvasManager,\n                ignoreCSSAttributes,\n                plugins: _optionalChain([plugins\n, 'optionalAccess', _8 => _8.filter, 'call', _9 => _9((p) => p.observer)\n, 'optionalAccess', _10 => _10.map, 'call', _11 => _11((p) => ({\n                    observer: p.observer,\n                    options: p.options,\n                    callback: (payload) => wrappedEmit({\n                        type: EventType.Plugin,\n                        data: {\n                            plugin: p.name,\n                            payload,\n                        },\n                    }),\n                }))]) || [],\n            }, {});\n        };\n        iframeManager.addLoadListener((iframeEl) => {\n            try {\n                handlers.push(observe(iframeEl.contentDocument));\n            }\n            catch (error) {\n                console.warn(error);\n            }\n        });\n        const init = () => {\n            takeFullSnapshot();\n            handlers.push(observe(document));\n        };\n        if (document.readyState === 'interactive' ||\n            document.readyState === 'complete') {\n            init();\n        }\n        else {\n            handlers.push(on('DOMContentLoaded', () => {\n                wrappedEmit({\n                    type: EventType.DomContentLoaded,\n                    data: {},\n                });\n                if (recordAfter === 'DOMContentLoaded')\n                    init();\n            }));\n            handlers.push(on('load', () => {\n                wrappedEmit({\n                    type: EventType.Load,\n                    data: {},\n                });\n                if (recordAfter === 'load')\n                    init();\n            }, window));\n        }\n        return () => {\n            handlers.forEach((h) => h());\n            processedNodeManager.destroy();\n            _takeFullSnapshot = undefined;\n            unregisterErrorHandler();\n        };\n    }\n    catch (error) {\n        console.warn(error);\n    }\n}\nfunction takeFullSnapshot(isCheckout) {\n    if (!_takeFullSnapshot) {\n        throw new Error('please take full snapshot after start recording');\n    }\n    _takeFullSnapshot(isCheckout);\n}\nrecord.mirror = mirror;\nrecord.takeFullSnapshot = takeFullSnapshot;\nfunction _getCanvasManager(getCanvasManagerFn, options) {\n    try {\n        return getCanvasManagerFn\n            ? getCanvasManagerFn(options)\n            : new CanvasManagerNoop();\n    }\n    catch (e2) {\n        console.warn('Unable to initialize CanvasManager');\n        return new CanvasManagerNoop();\n    }\n}\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nconst CONSOLE_LEVELS = ['info', 'warn', 'error', 'log'] ;\nconst PREFIX = '[Replay] ';\n\nfunction _addBreadcrumb(message, level = 'info') {\n  addBreadcrumb(\n    {\n      category: 'console',\n      data: {\n        logger: 'replay',\n      },\n      level,\n      message: `${PREFIX}${message}`,\n    },\n    { level },\n  );\n}\n\nfunction makeReplayLogger() {\n  let _capture = false;\n  let _trace = false;\n\n  const _logger = {\n    exception: () => undefined,\n    infoTick: () => undefined,\n    setConfig: (opts) => {\n      _capture = opts.captureExceptions;\n      _trace = opts.traceInternals;\n    },\n  };\n\n  if (DEBUG_BUILD) {\n    CONSOLE_LEVELS.forEach(name => {\n      _logger[name] = (...args) => {\n        logger$1[name](PREFIX, ...args);\n        if (_trace) {\n          _addBreadcrumb(args[0]);\n        }\n      };\n    });\n\n    _logger.exception = (error, ...message) => {\n      if (_logger.error) {\n        _logger.error(...message);\n      }\n\n      logger$1.error(PREFIX, error);\n\n      if (_capture) {\n        captureException(error);\n      } else if (_trace) {\n        // No need for a breadcrumb is `_capture` is enabled since it should be\n        // captured as an exception\n        _addBreadcrumb(error);\n      }\n    };\n\n    _logger.infoTick = (...args) => {\n      logger$1.info(PREFIX, ...args);\n      if (_trace) {\n        // Wait a tick here to avoid race conditions for some initial logs\n        // which may be added before replay is initialized\n        setTimeout(() => _addBreadcrumb(args[0]), 0);\n      }\n    };\n  } else {\n    CONSOLE_LEVELS.forEach(name => {\n      _logger[name] = () => undefined;\n    });\n  }\n\n  return _logger ;\n}\n\nconst logger = makeReplayLogger();\n\nconst ReplayEventTypeIncrementalSnapshot = 3;\nconst ReplayEventTypeCustom = 5;\n\n/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nfunction timestampToMs(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nfunction timestampToS(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Add a breadcrumb event to replay.\n */\nfunction addBreadcrumbEvent(replay, breadcrumb) {\n  if (breadcrumb.category === 'sentry.transaction') {\n    return;\n  }\n\n  if (['ui.click', 'ui.input'].includes(breadcrumb.category )) {\n    replay.triggerUserActivity();\n  } else {\n    replay.checkAndHandleExpiredSession();\n  }\n\n  replay.addUpdate(() => {\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.throttledAddEvent({\n      type: EventType.Custom,\n      // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n      // but maybe we should just keep them as milliseconds\n      timestamp: (breadcrumb.timestamp || 0) * 1000,\n      data: {\n        tag: 'breadcrumb',\n        // normalize to max. 10 depth and 1_000 properties per object\n        payload: normalize(breadcrumb, 10, 1000),\n      },\n    });\n\n    // Do not flush after console log messages\n    return breadcrumb.category === 'console';\n  });\n}\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nfunction getClosestInteractive(element) {\n  const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n  return closestInteractive || element;\n}\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in <button><img></button>,\n * The target will be the image, not the button, which we don't want here\n */\nfunction getClickTargetNode(event) {\n  const target = getTargetNode(event);\n\n  if (!target || !(target instanceof Element)) {\n    return target;\n  }\n\n  return getClosestInteractive(target);\n}\n\n/** Get the event target node. */\nfunction getTargetNode(event) {\n  if (isEventWithTarget(event)) {\n    return event.target ;\n  }\n\n  return event;\n}\n\nfunction isEventWithTarget(event) {\n  return typeof event === 'object' && !!event && 'target' in event;\n}\n\nlet handlers;\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nfunction onWindowOpen(cb) {\n  // Ensure to only register this once\n  if (!handlers) {\n    handlers = [];\n    monkeyPatchWindowOpen();\n  }\n\n  handlers.push(cb);\n\n  return () => {\n    const pos = handlers ? handlers.indexOf(cb) : -1;\n    if (pos > -1) {\n      (handlers ).splice(pos, 1);\n    }\n  };\n}\n\nfunction monkeyPatchWindowOpen() {\n  fill(WINDOW, 'open', function (originalWindowOpen) {\n    return function (...args) {\n      if (handlers) {\n        try {\n          handlers.forEach(handler => handler());\n        } catch (e) {\n          // ignore errors in here\n        }\n      }\n\n      return originalWindowOpen.apply(WINDOW, args);\n    };\n  });\n}\n\n/** Handle a click. */\nfunction handleClick(clickDetector, clickBreadcrumb, node) {\n  clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nclass ClickDetector  {\n  // protected for testing\n\n   constructor(\n    replay,\n    slowClickConfig,\n    // Just for easier testing\n    _addBreadcrumbEvent = addBreadcrumbEvent,\n  ) {\n    this._lastMutation = 0;\n    this._lastScroll = 0;\n    this._clicks = [];\n\n    // We want everything in s, but options are in ms\n    this._timeout = slowClickConfig.timeout / 1000;\n    this._threshold = slowClickConfig.threshold / 1000;\n    this._scollTimeout = slowClickConfig.scrollTimeout / 1000;\n    this._replay = replay;\n    this._ignoreSelector = slowClickConfig.ignoreSelector;\n    this._addBreadcrumbEvent = _addBreadcrumbEvent;\n  }\n\n  /** Register click detection handlers on mutation or scroll. */\n   addListeners() {\n    const cleanupWindowOpen = onWindowOpen(() => {\n      // Treat window.open as mutation\n      this._lastMutation = nowInSeconds();\n    });\n\n    this._teardown = () => {\n      cleanupWindowOpen();\n\n      this._clicks = [];\n      this._lastMutation = 0;\n      this._lastScroll = 0;\n    };\n  }\n\n  /** Clean up listeners. */\n   removeListeners() {\n    if (this._teardown) {\n      this._teardown();\n    }\n\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n  }\n\n  /** @inheritDoc */\n   handleClick(breadcrumb, node) {\n    if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n      return;\n    }\n\n    const newClick = {\n      timestamp: timestampToS(breadcrumb.timestamp),\n      clickBreadcrumb: breadcrumb,\n      // Set this to 0 so we know it originates from the click breadcrumb\n      clickCount: 0,\n      node,\n    };\n\n    // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n    if (\n      this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n    ) {\n      return;\n    }\n\n    this._clicks.push(newClick);\n\n    // If this is the first new click, set a timeout to check for multi clicks\n    if (this._clicks.length === 1) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** @inheritDoc */\n   registerMutation(timestamp = Date.now()) {\n    this._lastMutation = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n   registerScroll(timestamp = Date.now()) {\n    this._lastScroll = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n   registerClick(element) {\n    const node = getClosestInteractive(element);\n    this._handleMultiClick(node );\n  }\n\n  /** Count multiple clicks on elements. */\n   _handleMultiClick(node) {\n    this._getClicks(node).forEach(click => {\n      click.clickCount++;\n    });\n  }\n\n  /** Get all pending clicks for a given node. */\n   _getClicks(node) {\n    return this._clicks.filter(click => click.node === node);\n  }\n\n  /** Check the clicks that happened. */\n   _checkClicks() {\n    const timedOutClicks = [];\n\n    const now = nowInSeconds();\n\n    this._clicks.forEach(click => {\n      if (!click.mutationAfter && this._lastMutation) {\n        click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n      }\n      if (!click.scrollAfter && this._lastScroll) {\n        click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n      }\n\n      // All of these are in seconds!\n      if (click.timestamp + this._timeout <= now) {\n        timedOutClicks.push(click);\n      }\n    });\n\n    // Remove \"old\" clicks\n    for (const click of timedOutClicks) {\n      const pos = this._clicks.indexOf(click);\n\n      if (pos > -1) {\n        this._generateBreadcrumbs(click);\n        this._clicks.splice(pos, 1);\n      }\n    }\n\n    // Trigger new check, unless no clicks left\n    if (this._clicks.length) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** Generate matching breadcrumb(s) for the click. */\n   _generateBreadcrumbs(click) {\n    const replay = this._replay;\n    const hadScroll = click.scrollAfter && click.scrollAfter <= this._scollTimeout;\n    const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n    const isSlowClick = !hadScroll && !hadMutation;\n    const { clickCount, clickBreadcrumb } = click;\n\n    // Slow click\n    if (isSlowClick) {\n      // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n      // If not, it means we just timed out without scroll & mutation\n      const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n      const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n      const breadcrumb = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.slowClickDetected',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          timeAfterClickMs,\n          endReason,\n          // If clickCount === 0, it means multiClick was not correctly captured here\n          // - we still want to send 1 in this case\n          clickCount: clickCount || 1,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n      return;\n    }\n\n    // Multi click\n    if (clickCount > 1) {\n      const breadcrumb = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.multiClick',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          clickCount,\n          metric: true,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n    }\n  }\n\n  /** Schedule to check current clicks. */\n   _scheduleCheckClicks() {\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n\n    this._checkClickTimeout = setTimeout$3(() => this._checkClicks(), 1000);\n  }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nfunction ignoreElement(node, ignoreSelector) {\n  if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n    return true;\n  }\n\n  // If <input> tag, we only want to consider input[type='submit'] & input[type='button']\n  if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n    return true;\n  }\n\n  // If <a> tag, detect special variants that may not lead to an action\n  // If target !== _self, we may open the link somewhere else, which would lead to no action\n  // Also, when downloading a file, we may not leave the page, but still not trigger an action\n  if (\n    node.tagName === 'A' &&\n    (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n  ) {\n    return true;\n  }\n\n  if (ignoreSelector && node.matches(ignoreSelector)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb) {\n  return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds() {\n  return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nfunction updateClickDetectorForRecordingEvent(clickDetector, event) {\n  try {\n    // note: We only consider incremental snapshots here\n    // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n    // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n    // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n    // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n    // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n    // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n    if (!isIncrementalEvent(event)) {\n      return;\n    }\n\n    const { source } = event.data;\n    if (source === IncrementalSource.Mutation) {\n      clickDetector.registerMutation(event.timestamp);\n    }\n\n    if (source === IncrementalSource.Scroll) {\n      clickDetector.registerScroll(event.timestamp);\n    }\n\n    if (isIncrementalMouseInteraction(event)) {\n      const { type, id } = event.data;\n      const node = record.mirror.getNode(id);\n\n      if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n        clickDetector.registerClick(node);\n      }\n    }\n  } catch (e) {\n    // ignore errors here, e.g. if accessing something that does not exist\n  }\n}\n\nfunction isIncrementalEvent(event) {\n  return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n  event,\n) {\n  return event.data.source === IncrementalSource.MouseInteraction;\n}\n\n/**\n * Create a breadcrumb for a replay.\n */\nfunction createBreadcrumb(\n  breadcrumb,\n) {\n  return {\n    timestamp: Date.now() / 1000,\n    type: 'default',\n    ...breadcrumb,\n  };\n}\n\nvar NodeType;\n(function (NodeType) {\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType || (NodeType = {}));\n\n// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n  'id',\n  'class',\n  'aria-label',\n  'role',\n  'name',\n  'alt',\n  'title',\n  'data-test-id',\n  'data-testid',\n  'disabled',\n  'aria-disabled',\n  'data-sentry-component',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nfunction getAttributesToRecord(attributes) {\n  const obj = {};\n  if (!attributes['data-sentry-component'] && attributes['data-sentry-element']) {\n    attributes['data-sentry-component'] = attributes['data-sentry-element'];\n  }\n  for (const key in attributes) {\n    if (ATTRIBUTES_TO_RECORD.has(key)) {\n      let normalizedKey = key;\n\n      if (key === 'data-testid' || key === 'data-test-id') {\n        normalizedKey = 'testId';\n      }\n\n      obj[normalizedKey] = attributes[key];\n    }\n  }\n\n  return obj;\n}\n\nconst handleDomListener = (\n  replay,\n) => {\n  return (handlerData) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleDom(handlerData);\n\n    if (!result) {\n      return;\n    }\n\n    const isClick = handlerData.name === 'click';\n    const event = isClick ? (handlerData.event ) : undefined;\n    // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n    if (\n      isClick &&\n      replay.clickDetector &&\n      event &&\n      event.target &&\n      !event.altKey &&\n      !event.metaKey &&\n      !event.ctrlKey &&\n      !event.shiftKey\n    ) {\n      handleClick(\n        replay.clickDetector,\n        result ,\n        getClickTargetNode(handlerData.event ) ,\n      );\n    }\n\n    addBreadcrumbEvent(replay, result);\n  };\n};\n\n/** Get the base DOM breadcrumb. */\nfunction getBaseDomBreadcrumb(target, message) {\n  const nodeId = record.mirror.getId(target);\n  const node = nodeId && record.mirror.getNode(nodeId);\n  const meta = node && record.mirror.getMeta(node);\n  const element = meta && isElement(meta) ? meta : null;\n\n  return {\n    message,\n    data: element\n      ? {\n          nodeId,\n          node: {\n            id: nodeId,\n            tagName: element.tagName,\n            textContent: Array.from(element.childNodes)\n              .map((node) => node.type === NodeType.Text && node.textContent)\n              .filter(Boolean) // filter out empty values\n              .map(text => (text ).trim())\n              .join(''),\n            attributes: getAttributesToRecord(element.attributes),\n          },\n        }\n      : {},\n  };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nfunction handleDom(handlerData) {\n  const { target, message } = getDomTarget(handlerData);\n\n  return createBreadcrumb({\n    category: `ui.${handlerData.name}`,\n    ...getBaseDomBreadcrumb(target, message),\n  });\n}\n\nfunction getDomTarget(handlerData) {\n  const isClick = handlerData.name === 'click';\n\n  let message;\n  let target = null;\n\n  // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n  try {\n    target = isClick ? getClickTargetNode(handlerData.event ) : getTargetNode(handlerData.event );\n    message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n  } catch (e) {\n    message = '<unknown>';\n  }\n\n  return { target, message };\n}\n\nfunction isElement(node) {\n  return node.type === NodeType.Element;\n}\n\n/** Handle keyboard events & create breadcrumbs. */\nfunction handleKeyboardEvent(replay, event) {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  // Update user activity, but do not restart recording as it can create\n  // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n  // session with a single \"keydown\" breadcrumb is created)\n  replay.updateUserActivity();\n\n  const breadcrumb = getKeyboardBreadcrumb(event);\n\n  if (!breadcrumb) {\n    return;\n  }\n\n  addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nfunction getKeyboardBreadcrumb(event) {\n  const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n  // never capture for input fields\n  if (!target || isInputElement(target ) || !key) {\n    return null;\n  }\n\n  // Note: We do not consider shift here, as that means \"uppercase\"\n  const hasModifierKey = metaKey || ctrlKey || altKey;\n  const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n  // Do not capture breadcrumb if only a word key is pressed\n  // This could leak e.g. user input\n  if (!hasModifierKey && isCharacterKey) {\n    return null;\n  }\n\n  const message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n  const baseBreadcrumb = getBaseDomBreadcrumb(target , message);\n\n  return createBreadcrumb({\n    category: 'ui.keyDown',\n    message,\n    data: {\n      ...baseBreadcrumb.data,\n      metaKey,\n      shiftKey,\n      ctrlKey,\n      altKey,\n      key,\n    },\n  });\n}\n\nfunction isInputElement(target) {\n  return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES\n\n = {\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  resource: createResourceEntry,\n  paint: createPaintEntry,\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  navigation: createNavigationEntry,\n};\n\n/**\n * Handler creater for web vitals\n */\nfunction webVitalHandler(\n  getter,\n  replay,\n) {\n  return ({ metric }) => void replay.replayPerformanceEntries.push(getter(metric));\n}\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nfunction createPerformanceEntries(\n  entries,\n) {\n  return entries.map(createPerformanceEntry).filter(Boolean) ;\n}\n\nfunction createPerformanceEntry(entry) {\n  const entryType = ENTRY_TYPES[entry.entryType];\n  if (!entryType) {\n    return null;\n  }\n\n  return entryType(entry);\n}\n\nfunction getAbsoluteTime(time) {\n  // browserPerformanceTimeOrigin can be undefined if `performance` or\n  // `performance.now` doesn't exist, but this is already checked by this integration\n  return ((browserPerformanceTimeOrigin || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry) {\n  const { duration, entryType, name, startTime } = entry;\n\n  const start = getAbsoluteTime(startTime);\n  return {\n    type: entryType,\n    name,\n    start,\n    end: start + duration,\n    data: undefined,\n  };\n}\n\nfunction createNavigationEntry(entry) {\n  const {\n    entryType,\n    name,\n    decodedBodySize,\n    duration,\n    domComplete,\n    encodedBodySize,\n    domContentLoadedEventStart,\n    domContentLoadedEventEnd,\n    domInteractive,\n    loadEventStart,\n    loadEventEnd,\n    redirectCount,\n    startTime,\n    transferSize,\n    type,\n  } = entry;\n\n  // Ignore entries with no duration, they do not seem to be useful and cause dupes\n  if (duration === 0) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${type}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(domComplete),\n    name,\n    data: {\n      size: transferSize,\n      decodedBodySize,\n      encodedBodySize,\n      duration,\n      domInteractive,\n      domContentLoadedEventStart,\n      domContentLoadedEventEnd,\n      loadEventStart,\n      loadEventEnd,\n      domComplete,\n      redirectCount,\n    },\n  };\n}\n\nfunction createResourceEntry(\n  entry,\n) {\n  const {\n    entryType,\n    initiatorType,\n    name,\n    responseEnd,\n    startTime,\n    decodedBodySize,\n    encodedBodySize,\n    responseStatus,\n    transferSize,\n  } = entry;\n\n  // Core SDK handles these\n  if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${initiatorType}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(responseEnd),\n    name,\n    data: {\n      size: transferSize,\n      statusCode: responseStatus,\n      decodedBodySize,\n      encodedBodySize,\n    },\n  };\n}\n\n/**\n * Add a LCP event to the replay based on a LCP metric.\n */\nfunction getLargestContentfulPaint(metric) {\n  const lastEntry = metric.entries[metric.entries.length - 1] ;\n  const node = lastEntry && lastEntry.element ? [lastEntry.element] : undefined;\n  return getWebVital(metric, 'largest-contentful-paint', node);\n}\n\n/**\n * Add a CLS event to the replay based on a CLS metric.\n */\nfunction getCumulativeLayoutShift(metric) {\n  const lastEntry = metric.entries[metric.entries.length - 1]\n\n;\n  const nodes = [];\n  if (lastEntry && lastEntry.sources) {\n    for (const source of lastEntry.sources) {\n      if (source.node) {\n        nodes.push(source.node);\n      }\n    }\n  }\n  return getWebVital(metric, 'cumulative-layout-shift', nodes);\n}\n\n/**\n * Add a FID event to the replay based on a FID metric.\n */\nfunction getFirstInputDelay(metric) {\n  const lastEntry = metric.entries[metric.entries.length - 1] ;\n  const node = lastEntry && lastEntry.target ? [lastEntry.target] : undefined;\n  return getWebVital(metric, 'first-input-delay', node);\n}\n\n/**\n * Add an INP event to the replay based on an INP metric.\n */\nfunction getInteractionToNextPaint(metric) {\n  const lastEntry = metric.entries[metric.entries.length - 1] ;\n  const node = lastEntry && lastEntry.target ? [lastEntry.target] : undefined;\n  return getWebVital(metric, 'interaction-to-next-paint', node);\n}\n\n/**\n * Add an web vital event to the replay based on the web vital metric.\n */\nfunction getWebVital(metric, name, nodes) {\n  const value = metric.value;\n  const rating = metric.rating;\n\n  const end = getAbsoluteTime(value);\n\n  const data = {\n    type: 'web-vital',\n    name,\n    start: end,\n    end,\n    data: {\n      value,\n      size: value,\n      rating,\n      nodeIds: nodes ? nodes.map(node => record.mirror.getId(node)) : undefined,\n    },\n  };\n\n  return data;\n}\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nfunction setupPerformanceObserver(replay) {\n  function addPerformanceEntry(entry) {\n    // It is possible for entries to come up multiple times\n    if (!replay.performanceEntries.includes(entry)) {\n      replay.performanceEntries.push(entry);\n    }\n  }\n\n  function onEntries({ entries }) {\n    entries.forEach(addPerformanceEntry);\n  }\n\n  const clearCallbacks = [];\n\n  (['navigation', 'paint', 'resource'] ).forEach(type => {\n    clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n  });\n\n  clearCallbacks.push(\n    addLcpInstrumentationHandler(webVitalHandler(getLargestContentfulPaint, replay)),\n    addClsInstrumentationHandler(webVitalHandler(getCumulativeLayoutShift, replay)),\n    addFidInstrumentationHandler(webVitalHandler(getFirstInputDelay, replay)),\n    addInpInstrumentationHandler(webVitalHandler(getInteractionToNextPaint, replay)),\n  );\n\n  // A callback to cleanup all handlers\n  return () => {\n    clearCallbacks.forEach(clearCallback => clearCallback());\n  };\n}\n\nconst r = `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=function(t,e){for(var i=new n(31),a=0;a<31;++a)i[a]=e+=1<<t[a-1];var s=new r(i[30]);for(a=1;a<30;++a)for(var o=i[a];o<i[a+1];++o)s[o]=o-i[a]<<5|a;return{b:i,r:s}},o=s(e,2),f=o.b,h=o.r;f[28]=258,h[258]=28;for(var l=s(i,0).r,u=new n(32768),c=0;c<32768;++c){var v=(43690&c)>>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,a=0,s=new n(r);a<i;++a)t[a]&&++s[t[a]-1];var o,f=new n(r);for(a=1;a<r;++a)f[a]=f[a-1]+s[a-1]<<1;if(e){o=new n(1<<r);var h=15-r;for(a=0;a<i;++a)if(t[a])for(var l=a<<4|t[a],c=r-t[a],v=f[t[a]-1]++<<c,d=v|(1<<c)-1;v<=d;++v)o[u[v]>>h]=l}else for(o=new n(i),a=0;a<i;++a)t[a]&&(o[a]=u[f[t[a]-1]++]>>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==r||r<0)&&(r=0),(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},A=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},_=function(r,e){for(var i=[],a=0;a<r.length;++a)r[a]&&i.push({s:a,f:r[a]});var s=i.length,o=i.slice();if(!s)return{t:F,l:0};if(1==s){var f=new t(i[0].s+1);return f[i[0].s]=1,{t:f,l:1}}i.sort((function(t,n){return t.f-n.f})),i.push({s:-1,f:25001});var h=i[0],l=i[1],u=0,c=1,v=2;for(i[0]={s:-1,f:h.f+l.f,l:h,r:l};c!=s-1;)h=i[i[u].f<i[v].f?u++:v++],l=i[u!=c&&i[u].f<i[v].f?u++:v++],i[c++]={s:-1,f:h.f+l.f,l:h,r:l};var d=o[0].s;for(a=1;a<s;++a)o[a].s>d&&(d=o[a].s);var g=new n(d+1),w=x(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<<y;for(o.sort((function(t,n){return g[n.s]-g[t.s]||t.f-n.f}));a<s;++a){var b=o[a].s;if(!(g[b]>e))break;p+=m-(1<<w-g[b]),g[b]=e}for(p>>=y;p>0;){var M=o[a].s;g[M]<e?p-=1<<e-g[M]++-1:++a}for(;a>=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},x=function(t,n,r){return-1==t.s?Math.max(x(t.l,n,r+1),x(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e<n.length;++e)r+=t[e]*n[e];return r},k=function(t,n,r){var e=r.length,i=m(n+2);t[i]=255&e,t[i+1]=e>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a<e;++a)t[i+a+4]=r[a];return 8*(i+4+e)},C=function(t,r,s,o,f,h,l,u,c,v,m){z(r,m++,s),++f[256];for(var b=_(f,15),M=b.t,E=b.l,x=_(h,15),C=x.t,U=x.l,F=D(M),I=F.c,S=F.n,L=D(C),O=L.c,j=L.n,q=new n(19),B=0;B<I.length;++B)++q[31&I[B]];for(B=0;B<O.length;++B)++q[31&O[B]];for(var G=_(q,7),H=G.t,J=G.l,K=19;K>4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,C)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X<W)),m+=2,X<W){N=d(M,E,0),P=M,Q=d(C,U,0),R=C;var Y=d(H,J,0);z(r,m,S-257),z(r,m+5,j-1),z(r,m+10,K-4),m+=14;for(B=0;B<K;++B)z(r,m+3*B,H[a[B]]);m+=3*K;for(var Z=[I,O],$=0;$<2;++$){var tt=Z[$];for(B=0;B<tt.length;++B){var nt=31&tt[B];z(r,m,Y[nt]),m+=H[nt],nt>15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B<u;++B){var rt=o[B];if(rt>255){A(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;A(r,m,Q[et]),m+=R[et],et>3&&(A(r,m,rt>>5&8191),m+=i[et])}else A(r,m,N[rt]),m+=P[rt]}return A(r,m,N[256]),m+P[256]},U=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e<n.length;++e)r=I[255&r^n[e]]^r>>>8;t=r},d:function(){return~t}}},L=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s<o;++s)i+=e+=r[s];e=(65535&e)+15*(e>>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},O=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=U[s-1],M=y>>13,E=8191&y,z=(1<<o)-1,A=c.p||new n(32768),_=c.h||new n(z+1),x=Math.ceil(o/3),D=2*x,T=function(t){return(a[t]^a[t+1]<<x^a[t+2]<<D)&z},F=new r(25e3),I=new n(288),S=new n(32),L=0,O=0,j=c.i||0,q=0,B=c.w||0,G=0;j+2<v;++j){var H=T(j),J=32767&j,K=_[H];if(A[J]=K,_[H]=J,B<=j){var N=v-j;if((L>7e3||q>24576)&&(N>423||!w)){p=C(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$<Z&&a[j+$]==a[j+$-W];++$);if($>Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;P<tt;++P){var rt=j-W+P&32767,et=rt-A[rt]&32767;et>nt&&(nt=et,K=rt)}}}W+=(J=K)-(K=A[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j<v;++j)F[q++]=a[j],++I[a[j]];p=C(a,g,w,F,I,S,O,q,G,j-G,p),w||(c.r=7&p|g[p/8|0]<<3,p-=7,c.h=_,c.p=A,c.i=j,c.w=B)}else{for(j=c.w||0;j<v+w;j+=65535){var st=j+65535;st>=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},j=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},q=function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&j(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}},B=function(t){return 10+(t.filename?t.filename.length+1:0)},G=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(O(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();var H=function(){function t(t,n){this.c=L(),this.v=1,G.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),G.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=O(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=L();i.p(n.dictionary),j(t,2,i.d())}}(r,this.o),this.v=0),n&&j(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),J=\"undefined\"!=typeof TextEncoder&&new TextEncoder,K=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{K.decode(F,{stream:!0})}catch(t){}var N=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(P(t),this.d=n||!1)},t}();function P(n,r){if(r){for(var e=new t(n.length),i=0;i<n.length;++i)e[i]=n.charCodeAt(i);return e}if(J)return J.encode(n);var a=n.length,s=new t(n.length+(n.length>>1)),o=0,f=function(t){s[o++]=t};for(i=0;i<a;++i){if(o+5>s.length){var h=new t(o+8+(a-i<<1));h.set(s),s=h}var l=n.charCodeAt(i);l<128||r?f(l):l<2048?(f(192|l>>6),f(128|63&l)):l>55295&&l<57344?(f(240|(l=65536+(1047552&l)|1023&n.charCodeAt(++i))>>18),f(128|l>>12&63),f(128|l>>6&63),f(128|63&l)):(f(224|l>>12),f(128|l>>6&63),f(128|63&l))}return b(s,0,o)}function Q(t){return function(t,n){n||(n={});var r=S(),e=t.length;r.p(t);var i=O(t,n,B(n),8),a=i.length;return q(i,n),j(i,a-8,r.d()),j(i,a-4,e),i}(P(t))}const R=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(const r of t)n+=r.length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n<i;n++){const i=t[n];r.set(i,e),e+=i.length}return r}(this._deflatedData);return this._init(),t}_init(){this._hasEvents=!1,this._deflatedData=[],this.deflate=new H,this.deflate.ondata=(t,n)=>{this._deflatedData.push(t)},this.stream=new N(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},V={clear:()=>{R.clear()},addEvent:t=>R.addEvent(t),finish:()=>R.finish(),compress:t=>Q(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in V&&\"function\"==typeof V[n])try{const t=V[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n\nfunction e(){const e=new Blob([r]);return URL.createObjectURL(e)}\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nclass EventBufferSizeExceededError extends Error {\n   constructor() {\n    super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n  }\n}\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nclass EventBufferArray  {\n  /** All the events that are buffered to be sent. */\n\n  /** @inheritdoc */\n\n   constructor() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n   get hasEvents() {\n    return this.events.length > 0;\n  }\n\n  /** @inheritdoc */\n   get type() {\n    return 'sync';\n  }\n\n  /** @inheritdoc */\n   destroy() {\n    this.events = [];\n  }\n\n  /** @inheritdoc */\n   async addEvent(event) {\n    const eventSize = JSON.stringify(event).length;\n    this._totalSize += eventSize;\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      throw new EventBufferSizeExceededError();\n    }\n\n    this.events.push(event);\n  }\n\n  /** @inheritdoc */\n   finish() {\n    return new Promise(resolve => {\n      // Make a copy of the events array reference and immediately clear the\n      // events member so that we do not lose new events while uploading\n      // attachment.\n      const eventsRet = this.events;\n      this.clear();\n      resolve(JSON.stringify(eventsRet));\n    });\n  }\n\n  /** @inheritdoc */\n   clear() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n   getEarliestTimestamp() {\n    const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n    if (!timestamp) {\n      return null;\n    }\n\n    return timestampToMs(timestamp);\n  }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass WorkerHandler {\n\n   constructor(worker) {\n    this._worker = worker;\n    this._id = 0;\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occured.\n   */\n   ensureReady() {\n    // Ensure we only check once\n    if (this._ensureReadyPromise) {\n      return this._ensureReadyPromise;\n    }\n\n    this._ensureReadyPromise = new Promise((resolve, reject) => {\n      this._worker.addEventListener(\n        'message',\n        ({ data }) => {\n          if ((data ).success) {\n            resolve();\n          } else {\n            reject();\n          }\n        },\n        { once: true },\n      );\n\n      this._worker.addEventListener(\n        'error',\n        error => {\n          reject(error);\n        },\n        { once: true },\n      );\n    });\n\n    return this._ensureReadyPromise;\n  }\n\n  /**\n   * Destroy the worker.\n   */\n   destroy() {\n    DEBUG_BUILD && logger.info('Destroying compression worker');\n    this._worker.terminate();\n  }\n\n  /**\n   * Post message to worker and wait for response before resolving promise.\n   */\n   postMessage(method, arg) {\n    const id = this._getAndIncrementId();\n\n    return new Promise((resolve, reject) => {\n      const listener = ({ data }) => {\n        const response = data ;\n        if (response.method !== method) {\n          return;\n        }\n\n        // There can be multiple listeners for a single method, the id ensures\n        // that the response matches the caller.\n        if (response.id !== id) {\n          return;\n        }\n\n        // At this point, we'll always want to remove listener regardless of result status\n        this._worker.removeEventListener('message', listener);\n\n        if (!response.success) {\n          // TODO: Do some error handling, not sure what\n          DEBUG_BUILD && logger.error('Error in compression worker: ', response.response);\n\n          reject(new Error('Error in compression worker'));\n          return;\n        }\n\n        resolve(response.response );\n      };\n\n      // Note: we can't use `once` option because it's possible it needs to\n      // listen to multiple messages\n      this._worker.addEventListener('message', listener);\n      this._worker.postMessage({ id, method, arg });\n    });\n  }\n\n  /** Get the current ID and increment it for the next call. */\n   _getAndIncrementId() {\n    return this._id++;\n  }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass EventBufferCompressionWorker  {\n  /** @inheritdoc */\n\n   constructor(worker) {\n    this._worker = new WorkerHandler(worker);\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n   get hasEvents() {\n    return !!this._earliestTimestamp;\n  }\n\n  /** @inheritdoc */\n   get type() {\n    return 'worker';\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occured.\n   */\n   ensureReady() {\n    return this._worker.ensureReady();\n  }\n\n  /**\n   * Destroy the event buffer.\n   */\n   destroy() {\n    this._worker.destroy();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfuly received and processed by worker.\n   */\n   addEvent(event) {\n    const timestamp = timestampToMs(event.timestamp);\n    if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n      this._earliestTimestamp = timestamp;\n    }\n\n    const data = JSON.stringify(event);\n    this._totalSize += data.length;\n\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      return Promise.reject(new EventBufferSizeExceededError());\n    }\n\n    return this._sendEventToWorker(data);\n  }\n\n  /**\n   * Finish the event buffer and return the compressed data.\n   */\n   finish() {\n    return this._finishRequest();\n  }\n\n  /** @inheritdoc */\n   clear() {\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n\n    // We do not wait on this, as we assume the order of messages is consistent for the worker\n    this._worker.postMessage('clear').then(null, e => {\n      DEBUG_BUILD && logger.exception(e, 'Sending \"clear\" message to worker failed', e);\n    });\n  }\n\n  /** @inheritdoc */\n   getEarliestTimestamp() {\n    return this._earliestTimestamp;\n  }\n\n  /**\n   * Send the event to the worker.\n   */\n   _sendEventToWorker(data) {\n    return this._worker.postMessage('addEvent', data);\n  }\n\n  /**\n   * Finish the request and return the compressed data from the worker.\n   */\n   async _finishRequest() {\n    const response = await this._worker.postMessage('finish');\n\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n\n    return response;\n  }\n}\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nclass EventBufferProxy  {\n\n   constructor(worker) {\n    this._fallback = new EventBufferArray();\n    this._compression = new EventBufferCompressionWorker(worker);\n    this._used = this._fallback;\n\n    this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n  }\n\n  /** @inheritdoc */\n   get type() {\n    return this._used.type;\n  }\n\n  /** @inheritDoc */\n   get hasEvents() {\n    return this._used.hasEvents;\n  }\n\n  /** @inheritdoc */\n   get hasCheckout() {\n    return this._used.hasCheckout;\n  }\n  /** @inheritdoc */\n   set hasCheckout(value) {\n    this._used.hasCheckout = value;\n  }\n\n  /** @inheritDoc */\n   destroy() {\n    this._fallback.destroy();\n    this._compression.destroy();\n  }\n\n  /** @inheritdoc */\n   clear() {\n    return this._used.clear();\n  }\n\n  /** @inheritdoc */\n   getEarliestTimestamp() {\n    return this._used.getEarliestTimestamp();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfully added.\n   */\n   addEvent(event) {\n    return this._used.addEvent(event);\n  }\n\n  /** @inheritDoc */\n   async finish() {\n    // Ensure the worker is loaded, so the sent event is compressed\n    await this.ensureWorkerIsLoaded();\n\n    return this._used.finish();\n  }\n\n  /** Ensure the worker has loaded. */\n   ensureWorkerIsLoaded() {\n    return this._ensureWorkerIsLoadedPromise;\n  }\n\n  /** Actually check if the worker has been loaded. */\n   async _ensureWorkerIsLoaded() {\n    try {\n      await this._compression.ensureReady();\n    } catch (error) {\n      // If the worker fails to load, we fall back to the simple buffer.\n      // Nothing more to do from our side here\n      DEBUG_BUILD && logger.exception(error, 'Failed to load the compression worker, falling back to simple buffer');\n      return;\n    }\n\n    // Now we need to switch over the array buffer to the compression worker\n    await this._switchToCompressionWorker();\n  }\n\n  /** Switch the used buffer to the compression worker. */\n   async _switchToCompressionWorker() {\n    const { events, hasCheckout } = this._fallback;\n\n    const addEventPromises = [];\n    for (const event of events) {\n      addEventPromises.push(this._compression.addEvent(event));\n    }\n\n    this._compression.hasCheckout = hasCheckout;\n\n    // We switch over to the new buffer immediately - any further events will be added\n    // after the previously buffered ones\n    this._used = this._compression;\n\n    // Wait for original events to be re-added before resolving\n    try {\n      await Promise.all(addEventPromises);\n    } catch (error) {\n      DEBUG_BUILD && logger.exception(error, 'Failed to add events when switching buffers.');\n    }\n  }\n}\n\n/**\n * Create an event buffer for replays.\n */\nfunction createEventBuffer({\n  useCompression,\n  workerUrl: customWorkerUrl,\n}) {\n  if (\n    useCompression &&\n    // eslint-disable-next-line no-restricted-globals\n    window.Worker\n  ) {\n    const worker = _loadWorker(customWorkerUrl);\n\n    if (worker) {\n      return worker;\n    }\n  }\n\n  DEBUG_BUILD && logger.info('Using simple buffer');\n  return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl) {\n  try {\n    const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n    if (!workerUrl) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.info(`Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n    const worker = new Worker(workerUrl);\n    return new EventBufferProxy(worker);\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to create compression worker');\n    // Fall back to use simple event buffer array\n  }\n}\n\nfunction _getWorkerUrl() {\n  if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n    return e();\n  }\n\n  return '';\n}\n\n/** If sessionStorage is available. */\nfunction hasSessionStorage() {\n  try {\n    // This can throw, e.g. when being accessed in a sandboxed iframe\n    return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nfunction clearSession(replay) {\n  deleteSession();\n  replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession() {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n  } catch (e) {\n    // Ignore potential SecurityError exceptions\n  }\n}\n\n/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nfunction isSampled(sampleRate) {\n  if (sampleRate === undefined) {\n    return false;\n  }\n\n  // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n  return Math.random() < sampleRate;\n}\n\n/**\n * Get a session with defaults & applied sampling.\n */\nfunction makeSession(session) {\n  const now = Date.now();\n  const id = session.id || uuid4();\n  // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n  const started = session.started || now;\n  const lastActivity = session.lastActivity || now;\n  const segmentId = session.segmentId || 0;\n  const sampled = session.sampled;\n  const previousSessionId = session.previousSessionId;\n\n  return {\n    id,\n    started,\n    lastActivity,\n    segmentId,\n    sampled,\n    previousSessionId,\n  };\n}\n\n/**\n * Save a session to session storage.\n */\nfunction saveSession(session) {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n  } catch (e) {\n    // Ignore potential SecurityError exceptions\n  }\n}\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nfunction getSessionSampleType(sessionSampleRate, allowBuffering) {\n  return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nfunction createSession(\n  { sessionSampleRate, allowBuffering, stickySession = false },\n  { previousSessionId } = {},\n) {\n  const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n  const session = makeSession({\n    sampled,\n    previousSessionId,\n  });\n\n  if (stickySession) {\n    saveSession(session);\n  }\n\n  return session;\n}\n\n/**\n * Fetches a session from storage\n */\nfunction fetchSession() {\n  if (!hasSessionStorage()) {\n    return null;\n  }\n\n  try {\n    // This can throw if cookies are disabled\n    const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n    if (!sessionStringFromStorage) {\n      return null;\n    }\n\n    const sessionObj = JSON.parse(sessionStringFromStorage) ;\n\n    DEBUG_BUILD && logger.infoTick('Loading existing session');\n\n    return makeSession(sessionObj);\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nfunction isExpired(\n  initialTime,\n  expiry,\n  targetTime = +new Date(),\n) {\n  // Always expired if < 0\n  if (initialTime === null || expiry === undefined || expiry < 0) {\n    return true;\n  }\n\n  // Never expires if == 0\n  if (expiry === 0) {\n    return false;\n  }\n\n  return initialTime + expiry <= targetTime;\n}\n\n/**\n * Checks to see if session is expired\n */\nfunction isSessionExpired(\n  session,\n  {\n    maxReplayDuration,\n    sessionIdleExpire,\n    targetTime = Date.now(),\n  },\n) {\n  return (\n    // First, check that maximum session length has not been exceeded\n    isExpired(session.started, maxReplayDuration, targetTime) ||\n    // check that the idle timeout has not been exceeded (i.e. user has\n    // performed an action within the last `sessionIdleExpire` ms)\n    isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n  );\n}\n\n/** If the session should be refreshed or not. */\nfunction shouldRefreshSession(\n  session,\n  { sessionIdleExpire, maxReplayDuration },\n) {\n  // If not expired, all good, just keep the session\n  if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n    return false;\n  }\n\n  // If we are buffering & haven't ever flushed yet, always continue\n  if (session.sampled === 'buffer' && session.segmentId === 0) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nfunction loadOrCreateSession(\n  {\n    sessionIdleExpire,\n    maxReplayDuration,\n    previousSessionId,\n  }\n\n,\n  sessionOptions,\n) {\n  const existingSession = sessionOptions.stickySession && fetchSession();\n\n  // No session exists yet, just create a new one\n  if (!existingSession) {\n    DEBUG_BUILD && logger.infoTick('Creating new session');\n    return createSession(sessionOptions, { previousSessionId });\n  }\n\n  if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n    return existingSession;\n  }\n\n  DEBUG_BUILD && logger.infoTick('Session in sessionStorage is expired, creating new one...');\n  return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n\nfunction isCustomEvent(event) {\n  return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEventSync(replay, event, isCheckout) {\n  if (!shouldAddEvent(replay, event)) {\n    return false;\n  }\n\n  // This should never reject\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  _addEvent(replay, event, isCheckout);\n\n  return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEvent(\n  replay,\n  event,\n  isCheckout,\n) {\n  if (!shouldAddEvent(replay, event)) {\n    return Promise.resolve(null);\n  }\n\n  return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n  replay,\n  event,\n  isCheckout,\n) {\n  if (!replay.eventBuffer) {\n    return null;\n  }\n\n  try {\n    if (isCheckout && replay.recordingMode === 'buffer') {\n      replay.eventBuffer.clear();\n    }\n\n    if (isCheckout) {\n      replay.eventBuffer.hasCheckout = true;\n    }\n\n    const replayOptions = replay.getOptions();\n\n    const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n    if (!eventAfterPossibleCallback) {\n      return;\n    }\n\n    return await replay.eventBuffer.addEvent(eventAfterPossibleCallback);\n  } catch (error) {\n    const reason = error && error instanceof EventBufferSizeExceededError ? 'addEventSizeExceeded' : 'addEvent';\n    replay.handleException(error);\n\n    await replay.stop({ reason });\n\n    const client = getClient();\n\n    if (client) {\n      client.recordDroppedEvent('internal_sdk_error', 'replay');\n    }\n  }\n}\n\n/** Exported only for tests. */\nfunction shouldAddEvent(replay, event) {\n  if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n    return false;\n  }\n\n  const timestampInMs = timestampToMs(event.timestamp);\n\n  // Throw out events that happen more than 5 minutes ago. This can happen if\n  // page has been left open and idle for a long period of time and user\n  // comes back to trigger a new session. The performance entries rely on\n  // `performance.timeOrigin`, which is when the page first opened.\n  if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n    return false;\n  }\n\n  // Throw out events that are +60min from the initial timestamp\n  if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n    DEBUG_BUILD &&\n      logger.infoTick(`Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`);\n    return false;\n  }\n\n  return true;\n}\n\nfunction maybeApplyCallback(\n  event,\n  callback,\n) {\n  try {\n    if (typeof callback === 'function' && isCustomEvent(event)) {\n      return callback(event);\n    }\n  } catch (error) {\n    DEBUG_BUILD &&\n      logger.exception(error, 'An error occured in the `beforeAddRecordingEvent` callback, skipping the event...');\n    return null;\n  }\n\n  return event;\n}\n\n/** If the event is an error event */\nfunction isErrorEvent(event) {\n  return !event.type;\n}\n\n/** If the event is a transaction event */\nfunction isTransactionEvent(event) {\n  return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nfunction isReplayEvent(event) {\n  return event.type === 'replay_event';\n}\n\n/** If the event is a feedback event */\nfunction isFeedbackEvent(event) {\n  return event.type === 'feedback';\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleAfterSendEvent(replay) {\n  return (event, sendResponse) => {\n    if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n      return;\n    }\n\n    const statusCode = sendResponse && sendResponse.statusCode;\n\n    // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n    // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n    // If we do use the base transport, we skip if we encountered an non-OK status code\n    if (!statusCode || statusCode < 200 || statusCode >= 300) {\n      return;\n    }\n\n    if (isTransactionEvent(event)) {\n      handleTransactionEvent(replay, event);\n      return;\n    }\n\n    handleErrorEvent(replay, event);\n  };\n}\n\nfunction handleTransactionEvent(replay, event) {\n  const replayContext = replay.getContext();\n\n  // Collect traceIds in _context regardless of `recordingMode`\n  // In error mode, _context gets cleared on every checkout\n  // We limit to max. 100 transactions linked\n  if (event.contexts && event.contexts.trace && event.contexts.trace.trace_id && replayContext.traceIds.size < 100) {\n    replayContext.traceIds.add(event.contexts.trace.trace_id );\n  }\n}\n\nfunction handleErrorEvent(replay, event) {\n  const replayContext = replay.getContext();\n\n  // Add error to list of errorIds of replay. This is ok to do even if not\n  // sampled because context will get reset at next checkout.\n  // XXX: There is also a race condition where it's possible to capture an\n  // error to Sentry before Replay SDK has loaded, but response returns after\n  // it was loaded, and this gets called.\n  // We limit to max. 100 errors linked\n  if (event.event_id && replayContext.errorIds.size < 100) {\n    replayContext.errorIds.add(event.event_id);\n  }\n\n  // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n  // Need to be very careful that this does not cause an infinite loop\n  if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n    return;\n  }\n\n  const { beforeErrorSampling } = replay.getOptions();\n  if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n    return;\n  }\n\n  setTimeout$3(() => {\n    // Capture current event buffer as new replay\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.sendBufferedReplayOrFlush();\n  });\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleBeforeSendEvent(replay) {\n  return (event) => {\n    if (!replay.isEnabled() || !isErrorEvent(event)) {\n      return;\n    }\n\n    handleHydrationError(replay, event);\n  };\n}\n\nfunction handleHydrationError(replay, event) {\n  const exceptionValue =\n    event.exception && event.exception.values && event.exception.values[0] && event.exception.values[0].value;\n  if (typeof exceptionValue !== 'string') {\n    return;\n  }\n\n  if (\n    // Only matches errors in production builds of react-dom\n    // Example https://reactjs.org/docs/error-decoder.html?invariant=423\n    // With newer React versions, the messages changed to a different website https://react.dev/errors/418\n    exceptionValue.match(\n      /(reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=|react\\.dev\\/errors\\/)(418|419|422|423|425)/,\n    ) ||\n    // Development builds of react-dom\n    // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.\n    // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.\n    exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)\n  ) {\n    const breadcrumb = createBreadcrumb({\n      category: 'replay.hydrate-error',\n      data: {\n        url: getLocationHref(),\n      },\n    });\n    addBreadcrumbEvent(replay, breadcrumb);\n  }\n}\n\n/**\n * Handle breadcrumbs that Sentry captures, and make sure to capture relevant breadcrumbs to Replay as well.\n */\nfunction handleBreadcrumbs(replay) {\n  const client = getClient();\n\n  if (!client) {\n    return;\n  }\n\n  client.on('beforeAddBreadcrumb', breadcrumb => beforeAddBreadcrumb(replay, breadcrumb));\n}\n\nfunction beforeAddBreadcrumb(replay, breadcrumb) {\n  if (!replay.isEnabled() || !isBreadcrumbWithCategory(breadcrumb)) {\n    return;\n  }\n\n  const result = normalizeBreadcrumb(breadcrumb);\n  if (result) {\n    addBreadcrumbEvent(replay, result);\n  }\n}\n\n/** Exported only for tests. */\nfunction normalizeBreadcrumb(breadcrumb) {\n  if (\n    !isBreadcrumbWithCategory(breadcrumb) ||\n    [\n      // fetch & xhr are handled separately,in handleNetworkBreadcrumbs\n      'fetch',\n      'xhr',\n      // These two are breadcrumbs for emitted sentry events, we don't care about them\n      'sentry.event',\n      'sentry.transaction',\n    ].includes(breadcrumb.category) ||\n    // We capture UI breadcrumbs separately\n    breadcrumb.category.startsWith('ui.')\n  ) {\n    return null;\n  }\n\n  if (breadcrumb.category === 'console') {\n    return normalizeConsoleBreadcrumb(breadcrumb);\n  }\n\n  return createBreadcrumb(breadcrumb);\n}\n\n/** exported for tests only */\nfunction normalizeConsoleBreadcrumb(\n  breadcrumb,\n) {\n  const args = breadcrumb.data && breadcrumb.data.arguments;\n\n  if (!Array.isArray(args) || args.length === 0) {\n    return createBreadcrumb(breadcrumb);\n  }\n\n  let isTruncated = false;\n\n  // Avoid giant args captures\n  const normalizedArgs = args.map(arg => {\n    if (!arg) {\n      return arg;\n    }\n    if (typeof arg === 'string') {\n      if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n        isTruncated = true;\n        return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n      }\n\n      return arg;\n    }\n    if (typeof arg === 'object') {\n      try {\n        const normalizedArg = normalize(arg, 7);\n        const stringified = JSON.stringify(normalizedArg);\n        if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n          isTruncated = true;\n          // We use the pretty printed JSON string here as a base\n          return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n        }\n        return normalizedArg;\n      } catch (e) {\n        // fall back to default\n      }\n    }\n\n    return arg;\n  });\n\n  return createBreadcrumb({\n    ...breadcrumb,\n    data: {\n      ...breadcrumb.data,\n      arguments: normalizedArgs,\n      ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n    },\n  });\n}\n\nfunction isBreadcrumbWithCategory(breadcrumb) {\n  return !!breadcrumb.category;\n}\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nfunction isRrwebError(event, hint) {\n  if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) {\n    return false;\n  }\n\n  // @ts-expect-error this may be set by rrweb when it finds errors\n  if (hint.originalException && hint.originalException.__rrweb__) {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Add a feedback breadcrumb event to replay.\n */\nfunction addFeedbackBreadcrumb(replay, event) {\n  replay.triggerUserActivity();\n  replay.addUpdate(() => {\n    if (!event.timestamp) {\n      // Ignore events that don't have timestamps (this shouldn't happen, more of a typing issue)\n      // Return true here so that we don't flush\n      return true;\n    }\n\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: event.timestamp * 1000,\n      data: {\n        tag: 'breadcrumb',\n        payload: {\n          timestamp: event.timestamp,\n          type: 'default',\n          category: 'sentry.feedback',\n          data: {\n            feedbackId: event.event_id,\n          },\n        },\n      },\n    } );\n\n    return false;\n  });\n}\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `hanldleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nfunction shouldSampleForBufferEvent(replay, event) {\n  if (replay.recordingMode !== 'buffer') {\n    return false;\n  }\n\n  // ignore this error because otherwise we could loop indefinitely with\n  // trying to capture replay and failing\n  if (event.message === UNABLE_TO_SEND_REPLAY) {\n    return false;\n  }\n\n  // Require the event to be an error event & to have an exception\n  if (!event.exception || event.type) {\n    return false;\n  }\n\n  return isSampled(replay.getOptions().errorSampleRate);\n}\n\n/**\n * Returns a listener to be added to `addEventProcessor(listener)`.\n */\nfunction handleGlobalEventListener(replay) {\n  return Object.assign(\n    (event, hint) => {\n      // Do nothing if replay has been disabled\n      if (!replay.isEnabled()) {\n        return event;\n      }\n\n      if (isReplayEvent(event)) {\n        // Replays have separate set of breadcrumbs, do not include breadcrumbs\n        // from core SDK\n        delete event.breadcrumbs;\n        return event;\n      }\n\n      // We only want to handle errors, transactions, and feedbacks, nothing else\n      if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) {\n        return event;\n      }\n\n      // Ensure we do not add replay_id if the session is expired\n      const isSessionActive = replay.checkAndHandleExpiredSession();\n      if (!isSessionActive) {\n        return event;\n      }\n\n      if (isFeedbackEvent(event)) {\n        // This should never reject\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        replay.flush();\n        event.contexts.feedback.replay_id = replay.getSessionId();\n        // Add a replay breadcrumb for this piece of feedback\n        addFeedbackBreadcrumb(replay, event);\n        return event;\n      }\n\n      // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n      // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n      if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n        DEBUG_BUILD && logger.log('Ignoring error from rrweb internals', event);\n        return null;\n      }\n\n      // When in buffer mode, we decide to sample here.\n      // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n      // And convert the buffer session to a full session\n      const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n      // Tag errors if it has been sampled in buffer mode, or if it is session mode\n      // Only tag transactions if in session mode\n      const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n      if (shouldTagReplayId) {\n        event.tags = { ...event.tags, replayId: replay.getSessionId() };\n      }\n\n      return event;\n    },\n    { id: 'Replay' },\n  );\n}\n\n/**\n * Create a \"span\" for each performance entry.\n */\nfunction createPerformanceSpans(\n  replay,\n  entries,\n) {\n  return entries.map(({ type, start, end, name, data }) => {\n    const response = replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: start,\n      data: {\n        tag: 'performanceSpan',\n        payload: {\n          op: type,\n          description: name,\n          startTimestamp: start,\n          endTimestamp: end,\n          data,\n        },\n      },\n    });\n\n    // If response is a string, it means its either THROTTLED or SKIPPED\n    return typeof response === 'string' ? Promise.resolve(null) : response;\n  });\n}\n\nfunction handleHistory(handlerData) {\n  const { from, to } = handlerData;\n\n  const now = Date.now() / 1000;\n\n  return {\n    type: 'navigation.push',\n    start: now,\n    end: now,\n    name: to,\n    data: {\n      previous: from,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addHistoryInstrumentationHandler(listener)`.\n */\nfunction handleHistorySpanListener(replay) {\n  return (handlerData) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleHistory(handlerData);\n\n    if (result === null) {\n      return;\n    }\n\n    // Need to collect visited URLs\n    replay.getContext().urls.push(result.name);\n    replay.triggerUserActivity();\n\n    replay.addUpdate(() => {\n      createPerformanceSpans(replay, [result]);\n      // Returning false to flush\n      return false;\n    });\n  };\n}\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nfunction shouldFilterRequest(replay, url) {\n  // If we enabled the `traceInternals` experiment, we want to trace everything\n  if (DEBUG_BUILD && replay.getOptions()._experiments.traceInternals) {\n    return false;\n  }\n\n  return isSentryRequestUrl(url, getClient());\n}\n\n/** Add a performance entry breadcrumb */\nfunction addNetworkBreadcrumb(\n  replay,\n  result,\n) {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  if (result === null) {\n    return;\n  }\n\n  if (shouldFilterRequest(replay, result.name)) {\n    return;\n  }\n\n  replay.addUpdate(() => {\n    createPerformanceSpans(replay, [result]);\n    // Returning true will cause `addUpdate` to not flush\n    // We do not want network requests to cause a flush. This will prevent\n    // recurring/polling requests from keeping the replay session alive.\n    return true;\n  });\n}\n\n/** Get the size of a body. */\nfunction getBodySize(body) {\n  if (!body) {\n    return undefined;\n  }\n\n  const textEncoder = new TextEncoder();\n\n  try {\n    if (typeof body === 'string') {\n      return textEncoder.encode(body).length;\n    }\n\n    if (body instanceof URLSearchParams) {\n      return textEncoder.encode(body.toString()).length;\n    }\n\n    if (body instanceof FormData) {\n      const formDataStr = _serializeFormData(body);\n      return textEncoder.encode(formDataStr).length;\n    }\n\n    if (body instanceof Blob) {\n      return body.size;\n    }\n\n    if (body instanceof ArrayBuffer) {\n      return body.byteLength;\n    }\n\n    // Currently unhandled types: ArrayBufferView, ReadableStream\n  } catch (e) {\n    // just return undefined\n  }\n\n  return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined.  */\nfunction parseContentLengthHeader(header) {\n  if (!header) {\n    return undefined;\n  }\n\n  const size = parseInt(header, 10);\n  return isNaN(size) ? undefined : size;\n}\n\n/** Get the string representation of a body. */\nfunction getBodyString(body) {\n  try {\n    if (typeof body === 'string') {\n      return [body];\n    }\n\n    if (body instanceof URLSearchParams) {\n      return [body.toString()];\n    }\n\n    if (body instanceof FormData) {\n      return [_serializeFormData(body)];\n    }\n\n    if (!body) {\n      return [undefined];\n    }\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to serialize body', body);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  DEBUG_BUILD && logger.info('Skipping network body because of body type', body);\n\n  return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\n/** Merge a warning into an existing network request/response. */\nfunction mergeWarning(\n  info,\n  warning,\n) {\n  if (!info) {\n    return {\n      headers: {},\n      size: undefined,\n      _meta: {\n        warnings: [warning],\n      },\n    };\n  }\n\n  const newMeta = { ...info._meta };\n  const existingWarnings = newMeta.warnings || [];\n  newMeta.warnings = [...existingWarnings, warning];\n\n  info._meta = newMeta;\n  return info;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nfunction makeNetworkReplayBreadcrumb(\n  type,\n  data,\n) {\n  if (!data) {\n    return null;\n  }\n\n  const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n  const result = {\n    type,\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    name: url,\n    data: dropUndefinedKeys({\n      method,\n      statusCode,\n      request,\n      response,\n    }),\n  };\n\n  return result;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nfunction buildSkippedNetworkRequestOrResponse(bodySize) {\n  return {\n    headers: {},\n    size: bodySize,\n    _meta: {\n      warnings: ['URL_SKIPPED'],\n    },\n  };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nfunction buildNetworkRequestOrResponse(\n  headers,\n  bodySize,\n  body,\n) {\n  if (!bodySize && Object.keys(headers).length === 0) {\n    return undefined;\n  }\n\n  if (!bodySize) {\n    return {\n      headers,\n    };\n  }\n\n  if (!body) {\n    return {\n      headers,\n      size: bodySize,\n    };\n  }\n\n  const info = {\n    headers,\n    size: bodySize,\n  };\n\n  const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n  info.body = normalizedBody;\n  if (warnings && warnings.length > 0) {\n    info._meta = {\n      warnings,\n    };\n  }\n\n  return info;\n}\n\n/** Filter a set of headers */\nfunction getAllowedHeaders(headers, allowedHeaders) {\n  return Object.entries(headers).reduce((filteredHeaders, [key, value]) => {\n    const normalizedKey = key.toLowerCase();\n    // Avoid putting empty strings into the headers\n    if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n      filteredHeaders[normalizedKey] = value;\n    }\n    return filteredHeaders;\n  }, {});\n}\n\nfunction _serializeFormData(formData) {\n  // This is a bit simplified, but gives us a decent estimate\n  // This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'\n  // @ts-expect-error passing FormData to URLSearchParams actually works\n  return new URLSearchParams(formData).toString();\n}\n\nfunction normalizeNetworkBody(body)\n\n {\n  if (!body || typeof body !== 'string') {\n    return {\n      body,\n    };\n  }\n\n  const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n  const isProbablyJson = _strIsProbablyJson(body);\n\n  if (exceedsSizeLimit) {\n    const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n\n    if (isProbablyJson) {\n      return {\n        body: truncatedBody,\n        warnings: ['MAYBE_JSON_TRUNCATED'],\n      };\n    }\n\n    return {\n      body: `${truncatedBody}…`,\n      warnings: ['TEXT_TRUNCATED'],\n    };\n  }\n\n  if (isProbablyJson) {\n    try {\n      const jsonBody = JSON.parse(body);\n      return {\n        body: jsonBody,\n      };\n    } catch (e2) {\n      // fall back to just send the body as string\n    }\n  }\n\n  return {\n    body,\n  };\n}\n\nfunction _strIsProbablyJson(str) {\n  const first = str[0];\n  const last = str[str.length - 1];\n\n  // Simple check: If this does not start & end with {} or [], it's not JSON\n  return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nfunction urlMatches(url, urls) {\n  const fullUrl = getFullUrl(url);\n\n  return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nfunction getFullUrl(url, baseURI = WINDOW.document.baseURI) {\n  // Short circuit for common cases:\n  if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n    return url;\n  }\n  const fixedUrl = new URL(url, baseURI);\n\n  // If these do not match, we are not dealing with a relative URL, so just return it\n  if (fixedUrl.origin !== new URL(baseURI).origin) {\n    return url;\n  }\n\n  const fullUrl = fixedUrl.href;\n\n  // Remove trailing slashes, if they don't match the original URL\n  if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n    return fullUrl.slice(0, -1);\n  }\n\n  return fullUrl;\n}\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureFetchBreadcrumbToReplay(\n  breadcrumb,\n  hint,\n  options\n\n,\n) {\n  try {\n    const data = await _prepareFetchData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to capture fetch breadcrumb');\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichFetchBreadcrumb(\n  breadcrumb,\n  hint,\n) {\n  const { input, response } = hint;\n\n  const body = input ? _getFetchRequestArgBody(input) : undefined;\n  const reqSize = getBodySize(body);\n\n  const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nasync function _prepareFetchData(\n  breadcrumb,\n  hint,\n  options,\n) {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  const captureDetails =\n    urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n  const request = captureDetails\n    ? _getRequestInfo(options, hint.input, requestBodySize)\n    : buildSkippedNetworkRequestOrResponse(requestBodySize);\n  const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request,\n    response,\n  };\n}\n\nfunction _getRequestInfo(\n  { networkCaptureBodies, networkRequestHeaders },\n  input,\n  requestBodySize,\n) {\n  const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};\n\n  if (!networkCaptureBodies) {\n    return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n  }\n\n  // We only want to transmit string or string-like bodies\n  const requestBody = _getFetchRequestArgBody(input);\n  const [bodyStr, warning] = getBodyString(requestBody);\n  const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n\n  if (warning) {\n    return mergeWarning(data, warning);\n  }\n\n  return data;\n}\n\n/** Exported only for tests. */\nasync function _getResponseInfo(\n  captureDetails,\n  {\n    networkCaptureBodies,\n    networkResponseHeaders,\n  },\n  response,\n  responseBodySize,\n) {\n  if (!captureDetails && responseBodySize !== undefined) {\n    return buildSkippedNetworkRequestOrResponse(responseBodySize);\n  }\n\n  const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};\n\n  if (!response || (!networkCaptureBodies && responseBodySize !== undefined)) {\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n\n  const [bodyText, warning] = await _parseFetchResponseBody(response);\n  const result = getResponseData(bodyText, {\n    networkCaptureBodies,\n\n    responseBodySize,\n    captureDetails,\n    headers,\n  });\n\n  if (warning) {\n    return mergeWarning(result, warning);\n  }\n\n  return result;\n}\n\nfunction getResponseData(\n  bodyText,\n  {\n    networkCaptureBodies,\n    responseBodySize,\n    captureDetails,\n    headers,\n  }\n\n,\n) {\n  try {\n    const size =\n      bodyText && bodyText.length && responseBodySize === undefined ? getBodySize(bodyText) : responseBodySize;\n\n    if (!captureDetails) {\n      return buildSkippedNetworkRequestOrResponse(size);\n    }\n\n    if (networkCaptureBodies) {\n      return buildNetworkRequestOrResponse(headers, size, bodyText);\n    }\n\n    return buildNetworkRequestOrResponse(headers, size, undefined);\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to serialize response body');\n    // fallback\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n}\n\nasync function _parseFetchResponseBody(response) {\n  const res = _tryCloneResponse(response);\n\n  if (!res) {\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  try {\n    const text = await _tryGetResponseText(res);\n    return [text];\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to get text body from response');\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n}\n\nfunction _getFetchRequestArgBody(fetchArgs = []) {\n  // We only support getting the body from the fetch options\n  if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n    return undefined;\n  }\n\n  return (fetchArgs[1] ).body;\n}\n\nfunction getAllHeaders(headers, allowedHeaders) {\n  const allHeaders = {};\n\n  allowedHeaders.forEach(header => {\n    if (headers.get(header)) {\n      allHeaders[header] = headers.get(header) ;\n    }\n  });\n\n  return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs, allowedHeaders) {\n  if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n    return getHeadersFromOptions(fetchArgs[0] , allowedHeaders);\n  }\n\n  if (fetchArgs.length === 2) {\n    return getHeadersFromOptions(fetchArgs[1] , allowedHeaders);\n  }\n\n  return {};\n}\n\nfunction getHeadersFromOptions(\n  input,\n  allowedHeaders,\n) {\n  if (!input) {\n    return {};\n  }\n\n  const headers = input.headers;\n\n  if (!headers) {\n    return {};\n  }\n\n  if (headers instanceof Headers) {\n    return getAllHeaders(headers, allowedHeaders);\n  }\n\n  // We do not support this, as it is not really documented (anymore?)\n  if (Array.isArray(headers)) {\n    return {};\n  }\n\n  return getAllowedHeaders(headers, allowedHeaders);\n}\n\nfunction _tryCloneResponse(response) {\n  try {\n    // We have to clone this, as the body can only be read once\n    return response.clone();\n  } catch (error) {\n    // this can throw if the response was already consumed before\n    DEBUG_BUILD && logger.exception(error, 'Failed to clone response body');\n  }\n}\n\n/**\n * Get the response body of a fetch request, or timeout after 500ms.\n * Fetch can return a streaming body, that may not resolve (or not for a long time).\n * If that happens, we rather abort after a short time than keep waiting for this.\n */\nfunction _tryGetResponseText(response) {\n  return new Promise((resolve, reject) => {\n    const timeout = setTimeout$3(() => reject(new Error('Timeout while trying to read response body')), 500);\n\n    _getResponseText(response)\n      .then(\n        txt => resolve(txt),\n        reason => reject(reason),\n      )\n      .finally(() => clearTimeout(timeout));\n  });\n}\n\nasync function _getResponseText(response) {\n  // Force this to be a promise, just to be safe\n  // eslint-disable-next-line no-return-await\n  return await response.text();\n}\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureXhrBreadcrumbToReplay(\n  breadcrumb,\n  hint,\n  options,\n) {\n  try {\n    const data = _prepareXhrData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to capture xhr breadcrumb');\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichXhrBreadcrumb(\n  breadcrumb,\n  hint,\n) {\n  const { xhr, input } = hint;\n\n  if (!xhr) {\n    return;\n  }\n\n  const reqSize = getBodySize(input);\n  const resSize = xhr.getResponseHeader('content-length')\n    ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n    : _getBodySize(xhr.response, xhr.responseType);\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nfunction _prepareXhrData(\n  breadcrumb,\n  hint,\n  options,\n) {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  if (!url) {\n    return null;\n  }\n\n  if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n    const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n    const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n    return {\n      startTimestamp,\n      endTimestamp,\n      url,\n      method,\n      statusCode,\n      request,\n      response,\n    };\n  }\n\n  const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n  const networkRequestHeaders = xhrInfo\n    ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n    : {};\n  const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n  const [requestBody, requestWarning] = options.networkCaptureBodies ? getBodyString(input) : [undefined];\n  const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [undefined];\n\n  const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);\n  const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request: requestWarning ? mergeWarning(request, requestWarning) : request,\n    response: responseWarning ? mergeWarning(response, responseWarning) : response,\n  };\n}\n\nfunction getResponseHeaders(xhr) {\n  const headers = xhr.getAllResponseHeaders();\n\n  if (!headers) {\n    return {};\n  }\n\n  return headers.split('\\r\\n').reduce((acc, line) => {\n    const [key, value] = line.split(': ') ;\n    if (value) {\n      acc[key.toLowerCase()] = value;\n    }\n    return acc;\n  }, {});\n}\n\nfunction _getXhrResponseBody(xhr) {\n  // We collect errors that happen, but only log them if we can't get any response body\n  const errors = [];\n\n  try {\n    return [xhr.responseText];\n  } catch (e) {\n    errors.push(e);\n  }\n\n  // Try to manually parse the response body, if responseText fails\n  try {\n    return _parseXhrResponse(xhr.response, xhr.responseType);\n  } catch (e) {\n    errors.push(e);\n  }\n\n  DEBUG_BUILD && logger.warn('Failed to get xhr response body', ...errors);\n\n  return [undefined];\n}\n\n/**\n * Get the string representation of the XHR response.\n * Based on MDN, these are the possible types of the response:\n * string\n * ArrayBuffer\n * Blob\n * Document\n * POJO\n *\n * Exported only for tests.\n */\nfunction _parseXhrResponse(\n  body,\n  responseType,\n) {\n  try {\n    if (typeof body === 'string') {\n      return [body];\n    }\n\n    if (body instanceof Document) {\n      return [body.body.outerHTML];\n    }\n\n    if (responseType === 'json' && body && typeof body === 'object') {\n      return [JSON.stringify(body)];\n    }\n\n    if (!body) {\n      return [undefined];\n    }\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to serialize body', body);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  DEBUG_BUILD && logger.info('Skipping network body because of body type', body);\n\n  return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\nfunction _getBodySize(\n  body,\n  responseType,\n) {\n  try {\n    const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n    return getBodySize(bodyStr);\n  } catch (e2) {\n    return undefined;\n  }\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n *   (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nfunction handleNetworkBreadcrumbs(replay) {\n  const client = getClient();\n\n  try {\n    const {\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    } = replay.getOptions();\n\n    const options = {\n      replay,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    };\n\n    if (client) {\n      client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n    }\n  } catch (e2) {\n    // Do nothing\n  }\n}\n\n/** just exported for tests */\nfunction beforeAddNetworkBreadcrumb(\n  options,\n  breadcrumb,\n  hint,\n) {\n  if (!breadcrumb.data) {\n    return;\n  }\n\n  try {\n    if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichXhrBreadcrumb(breadcrumb, hint);\n\n      // This call should not reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n\n    if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichFetchBreadcrumb(breadcrumb, hint);\n\n      // This call should not reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n  } catch (e) {\n    DEBUG_BUILD && logger.exception(e, 'Error when enriching network breadcrumb');\n  }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb) {\n  return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb) {\n  return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint) {\n  return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint) {\n  return hint && hint.response;\n}\n\n/**\n * Add global listeners that cannot be removed.\n */\nfunction addGlobalListeners(replay) {\n  // Listeners from core SDK //\n  const client = getClient();\n\n  addClickKeypressInstrumentationHandler(handleDomListener(replay));\n  addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n  handleBreadcrumbs(replay);\n  handleNetworkBreadcrumbs(replay);\n\n  // Tag all (non replay) events that get sent to Sentry with the current\n  // replay ID so that we can reference them later in the UI\n  const eventProcessor = handleGlobalEventListener(replay);\n  addEventProcessor(eventProcessor);\n\n  // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n  if (client) {\n    client.on('beforeSendEvent', handleBeforeSendEvent(replay));\n    client.on('afterSendEvent', handleAfterSendEvent(replay));\n    client.on('createDsc', (dsc) => {\n      const replayId = replay.getSessionId();\n      // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n      if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n        // Ensure to check that the session is still active - it could have expired in the meanwhile\n        const isSessionActive = replay.checkAndHandleExpiredSession();\n        if (isSessionActive) {\n          dsc.replay_id = replayId;\n        }\n      }\n    });\n\n    client.on('spanStart', span => {\n      replay.lastActiveSpan = span;\n    });\n\n    // We may be missing the initial spanStart due to timing issues,\n    // so we capture it on finish again.\n    client.on('spanEnd', span => {\n      replay.lastActiveSpan = span;\n    });\n\n    // We want to flush replay\n    client.on('beforeSendFeedback', (feedbackEvent, options) => {\n      const replayId = replay.getSessionId();\n      if (options && options.includeReplay && replay.isEnabled() && replayId) {\n        // This should never reject\n        if (feedbackEvent.contexts && feedbackEvent.contexts.feedback) {\n          feedbackEvent.contexts.feedback.replay_id = replayId;\n        }\n      }\n    });\n  }\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nasync function addMemoryEntry(replay) {\n  // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n  try {\n    return Promise.all(\n      createPerformanceSpans(replay, [\n        // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n        createMemoryEntry(WINDOW.performance.memory),\n      ]),\n    );\n  } catch (error) {\n    // Do nothing\n    return [];\n  }\n}\n\nfunction createMemoryEntry(memoryEntry) {\n  const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n  // we don't want to use `getAbsoluteTime` because it adds the event time to the\n  // time origin, so we get the current timestamp instead\n  const time = Date.now() / 1000;\n  return {\n    type: 'memory',\n    name: 'memory',\n    start: time,\n    end: time,\n    data: {\n      memory: {\n        jsHeapSizeLimit,\n        totalJSHeapSize,\n        usedJSHeapSize,\n      },\n    },\n  };\n}\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n *          debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n *          was already invoked in the meantime, return @param func's return value.\n *          The debounced function has two additional properties:\n *          - `flush`: Invokes the debounced function immediately and returns its return value\n *          - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nfunction debounce(func, wait, options) {\n  let callbackReturnValue;\n\n  let timerId;\n  let maxTimerId;\n\n  const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n  function invokeFunc() {\n    cancelTimers();\n    callbackReturnValue = func();\n    return callbackReturnValue;\n  }\n\n  function cancelTimers() {\n    timerId !== undefined && clearTimeout(timerId);\n    maxTimerId !== undefined && clearTimeout(maxTimerId);\n    timerId = maxTimerId = undefined;\n  }\n\n  function flush() {\n    if (timerId !== undefined || maxTimerId !== undefined) {\n      return invokeFunc();\n    }\n    return callbackReturnValue;\n  }\n\n  function debounced() {\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeout$3(invokeFunc, wait);\n\n    if (maxWait && maxTimerId === undefined) {\n      maxTimerId = setTimeout$3(invokeFunc, maxWait);\n    }\n\n    return callbackReturnValue;\n  }\n\n  debounced.cancel = cancelTimers;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nfunction getHandleRecordingEmit(replay) {\n  let hadFirstEvent = false;\n\n  return (event, _isCheckout) => {\n    // If this is false, it means session is expired, create and a new session and wait for checkout\n    if (!replay.checkAndHandleExpiredSession()) {\n      DEBUG_BUILD && logger.warn('Received replay event after session expired.');\n\n      return;\n    }\n\n    // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n    // We also want to treat the first event as a checkout, so we handle this specifically here\n    const isCheckout = _isCheckout || !hadFirstEvent;\n    hadFirstEvent = true;\n\n    if (replay.clickDetector) {\n      updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n    }\n\n    // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n    replay.addUpdate(() => {\n      // The session is always started immediately on pageload/init, but for\n      // error-only replays, it should reflect the most recent checkout\n      // when an error occurs. Clear any state that happens before this current\n      // checkout. This needs to happen before `addEvent()` which updates state\n      // dependent on this reset.\n      if (replay.recordingMode === 'buffer' && isCheckout) {\n        replay.setInitialState();\n      }\n\n      // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n      // Skip all further steps\n      if (!addEventSync(replay, event, isCheckout)) {\n        // Return true to skip scheduling a debounced flush\n        return true;\n      }\n\n      // Different behavior for full snapshots (type=2), ignore other event types\n      // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n      if (!isCheckout) {\n        return false;\n      }\n\n      // Additionally, create a meta event that will capture certain SDK settings.\n      // In order to handle buffer mode, this needs to either be done when we\n      // receive checkout events or at flush time.\n      //\n      // `isCheckout` is always true, but want to be explicit that it should\n      // only be added for checkouts\n      addSettingsEvent(replay, isCheckout);\n\n      // If there is a previousSessionId after a full snapshot occurs, then\n      // the replay session was started due to session expiration. The new session\n      // is started before triggering a new checkout and contains the id\n      // of the previous session. Do not immediately flush in this case\n      // to avoid capturing only the checkout and instead the replay will\n      // be captured if they perform any follow-up actions.\n      if (replay.session && replay.session.previousSessionId) {\n        return true;\n      }\n\n      // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n      // this should usually be the timestamp of the checkout event, but to be safe...\n      if (replay.recordingMode === 'buffer' && replay.session && replay.eventBuffer) {\n        const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n        if (earliestEvent) {\n          DEBUG_BUILD &&\n            logger.info(`Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`);\n\n          replay.session.started = earliestEvent;\n\n          if (replay.getOptions().stickySession) {\n            saveSession(replay.session);\n          }\n        }\n      }\n\n      if (replay.recordingMode === 'session') {\n        // If the full snapshot is due to an initial load, we will not have\n        // a previous session ID. In this case, we want to buffer events\n        // for a set amount of time before flushing. This can help avoid\n        // capturing replays of users that immediately close the window.\n\n        // This should never reject\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        void replay.flush();\n      }\n\n      return true;\n    });\n  };\n}\n\n/**\n * Exported for tests\n */\nfunction createOptionsEvent(replay) {\n  const options = replay.getOptions();\n  return {\n    type: EventType.Custom,\n    timestamp: Date.now(),\n    data: {\n      tag: 'options',\n      payload: {\n        shouldRecordCanvas: replay.isRecordingCanvas(),\n        sessionSampleRate: options.sessionSampleRate,\n        errorSampleRate: options.errorSampleRate,\n        useCompressionOption: options.useCompression,\n        blockAllMedia: options.blockAllMedia,\n        maskAllText: options.maskAllText,\n        maskAllInputs: options.maskAllInputs,\n        useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n        networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n        networkCaptureBodies: options.networkCaptureBodies,\n        networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n        networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n      },\n    },\n  };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay, isCheckout) {\n  // Only need to add this event when sending the first segment\n  if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n    return;\n  }\n\n  addEventSync(replay, createOptionsEvent(replay), false);\n}\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nfunction createReplayEnvelope(\n  replayEvent,\n  recordingData,\n  dsn,\n  tunnel,\n) {\n  return createEnvelope(\n    createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n    [\n      [{ type: 'replay_event' }, replayEvent],\n      [\n        {\n          type: 'replay_recording',\n          // If string then we need to encode to UTF8, otherwise will have\n          // wrong size. TextEncoder has similar browser support to\n          // MutationObserver, although it does not accept IE11.\n          length:\n            typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n        },\n        recordingData,\n      ],\n    ],\n  );\n}\n\n/**\n * Prepare the recording data ready to be sent.\n */\nfunction prepareRecordingData({\n  recordingData,\n  headers,\n}\n\n) {\n  let payloadWithSequence;\n\n  // XXX: newline is needed to separate sequence id from events\n  const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n  if (typeof recordingData === 'string') {\n    payloadWithSequence = `${replayHeaders}${recordingData}`;\n  } else {\n    const enc = new TextEncoder();\n    // XXX: newline is needed to separate sequence id from events\n    const sequence = enc.encode(replayHeaders);\n    // Merge the two Uint8Arrays\n    payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n    payloadWithSequence.set(sequence);\n    payloadWithSequence.set(recordingData, sequence.length);\n  }\n\n  return payloadWithSequence;\n}\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nasync function prepareReplayEvent({\n  client,\n  scope,\n  replayId: event_id,\n  event,\n}\n\n) {\n  const integrations =\n    typeof client._integrations === 'object' && client._integrations !== null && !Array.isArray(client._integrations)\n      ? Object.keys(client._integrations)\n      : undefined;\n\n  const eventHint = { event_id, integrations };\n\n  client.emit('preprocessEvent', event, eventHint);\n\n  const preparedEvent = (await prepareEvent(\n    client.getOptions(),\n    event,\n    eventHint,\n    scope,\n    client,\n    getIsolationScope(),\n  )) ;\n\n  // If e.g. a global event processor returned null\n  if (!preparedEvent) {\n    return null;\n  }\n\n  // This normally happens in browser client \"_prepareEvent\"\n  // but since we do not use this private method from the client, but rather the plain import\n  // we need to do this manually.\n  preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n  // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n  const metadata = client.getSdkMetadata();\n  const { name, version } = (metadata && metadata.sdk) || {};\n\n  preparedEvent.sdk = {\n    ...preparedEvent.sdk,\n    name: name || 'sentry.javascript.unknown',\n    version: version || '0.0.0',\n  };\n\n  return preparedEvent;\n}\n\n/**\n * Send replay attachment using `fetch()`\n */\nasync function sendReplayRequest({\n  recordingData,\n  replayId,\n  segmentId: segment_id,\n  eventContext,\n  timestamp,\n  session,\n}) {\n  const preparedRecordingData = prepareRecordingData({\n    recordingData,\n    headers: {\n      segment_id,\n    },\n  });\n\n  const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n  const client = getClient();\n  const scope = getCurrentScope();\n  const transport = client && client.getTransport();\n  const dsn = client && client.getDsn();\n\n  if (!client || !transport || !dsn || !session.sampled) {\n    return resolvedSyncPromise({});\n  }\n\n  const baseEvent = {\n    type: REPLAY_EVENT_NAME,\n    replay_start_timestamp: initialTimestamp / 1000,\n    timestamp: timestamp / 1000,\n    error_ids: errorIds,\n    trace_ids: traceIds,\n    urls,\n    replay_id: replayId,\n    segment_id,\n    replay_type: session.sampled,\n  };\n\n  const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n  if (!replayEvent) {\n    // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n    client.recordDroppedEvent('event_processor', 'replay', baseEvent);\n    DEBUG_BUILD && logger.info('An event processor returned `null`, will not send event.');\n    return resolvedSyncPromise({});\n  }\n\n  /*\n  For reference, the fully built event looks something like this:\n  {\n      \"type\": \"replay_event\",\n      \"timestamp\": 1670837008.634,\n      \"error_ids\": [\n          \"errorId\"\n      ],\n      \"trace_ids\": [\n          \"traceId\"\n      ],\n      \"urls\": [\n          \"https://example.com\"\n      ],\n      \"replay_id\": \"eventId\",\n      \"segment_id\": 3,\n      \"replay_type\": \"error\",\n      \"platform\": \"javascript\",\n      \"event_id\": \"eventId\",\n      \"environment\": \"production\",\n      \"sdk\": {\n          \"integrations\": [\n              \"BrowserTracing\",\n              \"Replay\"\n          ],\n          \"name\": \"sentry.javascript.browser\",\n          \"version\": \"7.25.0\"\n      },\n      \"sdkProcessingMetadata\": {},\n      \"contexts\": {\n      },\n  }\n  */\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete replayEvent.sdkProcessingMetadata;\n\n  const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n  let response;\n\n  try {\n    response = await transport.send(envelope);\n  } catch (err) {\n    const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n    try {\n      // In case browsers don't allow this property to be writable\n      // @ts-expect-error This needs lib es2022 and newer\n      error.cause = err;\n    } catch (e) {\n      // nothing to do\n    }\n    throw error;\n  }\n\n  // If the status code is invalid, we want to immediately stop & not retry\n  if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n    throw new TransportStatusCodeError(response.statusCode);\n  }\n\n  const rateLimits = updateRateLimits({}, response);\n  if (isRateLimited(rateLimits, 'replay')) {\n    throw new RateLimitError(rateLimits);\n  }\n\n  return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nclass TransportStatusCodeError extends Error {\n   constructor(statusCode) {\n    super(`Transport returned status code ${statusCode}`);\n  }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nclass RateLimitError extends Error {\n\n   constructor(rateLimits) {\n    super('Rate limit hit');\n    this.rateLimits = rateLimits;\n  }\n}\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nasync function sendReplay(\n  replayData,\n  retryConfig = {\n    count: 0,\n    interval: RETRY_BASE_INTERVAL,\n  },\n) {\n  const { recordingData, options } = replayData;\n\n  // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n  if (!recordingData.length) {\n    return;\n  }\n\n  try {\n    await sendReplayRequest(replayData);\n    return true;\n  } catch (err) {\n    if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n      throw err;\n    }\n\n    // Capture error for every failed replay\n    setContext('Replays', {\n      _retryCount: retryConfig.count,\n    });\n\n    if (DEBUG_BUILD && options._experiments && options._experiments.captureExceptions) {\n      captureException(err);\n    }\n\n    // If an error happened here, it's likely that uploading the attachment\n    // failed, we'll can retry with the same events payload\n    if (retryConfig.count >= RETRY_MAX_COUNT) {\n      const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n      try {\n        // In case browsers don't allow this property to be writable\n        // @ts-expect-error This needs lib es2022 and newer\n        error.cause = err;\n      } catch (e) {\n        // nothing to do\n      }\n\n      throw error;\n    }\n\n    // will retry in intervals of 5, 10, 30\n    retryConfig.interval *= ++retryConfig.count;\n\n    return new Promise((resolve, reject) => {\n      setTimeout$3(async () => {\n        try {\n          await sendReplay(replayData, retryConfig);\n          resolve(true);\n        } catch (err) {\n          reject(err);\n        }\n      }, retryConfig.interval);\n    });\n  }\n}\n\nconst THROTTLED = '__THROTTLED';\nconst SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction throttle(\n  fn,\n  maxCount,\n  durationSeconds,\n) {\n  const counter = new Map();\n\n  const _cleanup = (now) => {\n    const threshold = now - durationSeconds;\n    counter.forEach((_value, key) => {\n      if (key < threshold) {\n        counter.delete(key);\n      }\n    });\n  };\n\n  const _getTotalCount = () => {\n    return [...counter.values()].reduce((a, b) => a + b, 0);\n  };\n\n  let isThrottled = false;\n\n  return (...rest) => {\n    // Date in second-precision, which we use as basis for the throttling\n    const now = Math.floor(Date.now() / 1000);\n\n    // First, make sure to delete any old entries\n    _cleanup(now);\n\n    // If already over limit, do nothing\n    if (_getTotalCount() >= maxCount) {\n      const wasThrottled = isThrottled;\n      isThrottled = true;\n      return wasThrottled ? SKIPPED : THROTTLED;\n    }\n\n    isThrottled = false;\n    const count = counter.get(now) || 0;\n    counter.set(now, count + 1);\n\n    return fn(...rest);\n  };\n}\n\n/* eslint-disable max-lines */ // TODO: We might want to split this file up\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nclass ReplayContainer  {\n\n  /**\n   * Recording can happen in one of three modes:\n   *   - session: Record the whole session, sending it continuously\n   *   - buffer: Always keep the last 60s of recording, requires:\n   *     - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n   *     - or calling `flush()` to send the replay\n   */\n\n  /**\n   * The current or last active span.\n   * This is only available when performance is enabled.\n   */\n\n  /**\n   * These are here so we can overwrite them in tests etc.\n   * @hidden\n   */\n\n  /** The replay has to be manually started, because no sample rate (neither session or error) was provided. */\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n\n  /**\n   * Timestamp of the last user activity. This lives across sessions.\n   */\n\n  /**\n   * Is the integration currently active?\n   */\n\n  /**\n   * Paused is a state where:\n   * - DOM Recording is not listening at all\n   * - Nothing will be added to event buffer (e.g. core SDK events)\n   */\n\n  /**\n   * Have we attached listeners to the core SDK?\n   * Note we have to track this as there is no way to remove instrumentation handlers.\n   */\n\n  /**\n   * Function to stop recording\n   */\n\n  /**\n   * Internal use for canvas recording options\n   */\n\n   constructor({\n    options,\n    recordingOptions,\n  }\n\n) {ReplayContainer.prototype.__init.call(this);ReplayContainer.prototype.__init2.call(this);ReplayContainer.prototype.__init3.call(this);ReplayContainer.prototype.__init4.call(this);ReplayContainer.prototype.__init5.call(this);ReplayContainer.prototype.__init6.call(this);\n    this.eventBuffer = null;\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n    this.recordingMode = 'session';\n    this.timeouts = {\n      sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n      sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n    } ;\n    this._lastActivity = Date.now();\n    this._isEnabled = false;\n    this._isPaused = false;\n    this._requiresManualStart = false;\n    this._hasInitializedCoreListeners = false;\n    this._context = {\n      errorIds: new Set(),\n      traceIds: new Set(),\n      urls: [],\n      initialTimestamp: Date.now(),\n      initialUrl: '',\n    };\n\n    this._recordingOptions = recordingOptions;\n    this._options = options;\n\n    this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n      maxWait: this._options.flushMaxDelay,\n    });\n\n    this._throttledAddEvent = throttle(\n      (event, isCheckout) => addEvent(this, event, isCheckout),\n      // Max 300 events...\n      300,\n      // ... per 5s\n      5,\n    );\n\n    const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n    const slowClickConfig = slowClickTimeout\n      ? {\n          threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n          timeout: slowClickTimeout,\n          scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n          ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n        }\n      : undefined;\n\n    if (slowClickConfig) {\n      this.clickDetector = new ClickDetector(this, slowClickConfig);\n    }\n\n    // Configure replay logger w/ experimental options\n    if (DEBUG_BUILD) {\n      const experiments = options._experiments;\n      logger.setConfig({\n        captureExceptions: !!experiments.captureExceptions,\n        traceInternals: !!experiments.traceInternals,\n      });\n    }\n  }\n\n  /** Get the event context. */\n   getContext() {\n    return this._context;\n  }\n\n  /** If recording is currently enabled. */\n   isEnabled() {\n    return this._isEnabled;\n  }\n\n  /** If recording is currently paused. */\n   isPaused() {\n    return this._isPaused;\n  }\n\n  /**\n   * Determine if canvas recording is enabled\n   */\n   isRecordingCanvas() {\n    return Boolean(this._canvas);\n  }\n\n  /** Get the replay integration options. */\n   getOptions() {\n    return this._options;\n  }\n\n  /** A wrapper to conditionally capture exceptions. */\n   handleException(error) {\n    DEBUG_BUILD && logger.exception(error);\n  }\n\n  /**\n   * Initializes the plugin based on sampling configuration. Should not be\n   * called outside of constructor.\n   */\n   initializeSampling(previousSessionId) {\n    const { errorSampleRate, sessionSampleRate } = this._options;\n\n    // If neither sample rate is > 0, then do nothing - user will need to call one of\n    // `start()` or `startBuffering` themselves.\n    const requiresManualStart = errorSampleRate <= 0 && sessionSampleRate <= 0;\n\n    this._requiresManualStart = requiresManualStart;\n\n    if (requiresManualStart) {\n      return;\n    }\n\n    // Otherwise if there is _any_ sample rate set, try to load an existing\n    // session, or create a new one.\n    this._initializeSessionForSampling(previousSessionId);\n\n    if (!this.session) {\n      // This should not happen, something wrong has occurred\n      DEBUG_BUILD && logger.exception(new Error('Unable to initialize and create session'));\n      return;\n    }\n\n    if (this.session.sampled === false) {\n      // This should only occur if `errorSampleRate` is 0 and was unsampled for\n      // session-based replay. In this case there is nothing to do.\n      return;\n    }\n\n    // If segmentId > 0, it means we've previously already captured this session\n    // In this case, we still want to continue in `session` recording mode\n    this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n    DEBUG_BUILD && logger.infoTick(`Starting replay in ${this.recordingMode} mode`);\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will log a message if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * _performanceObserver, Recording, Sentry SDK, etc)\n   */\n   start() {\n    if (this._isEnabled && this.recordingMode === 'session') {\n      DEBUG_BUILD && logger.info('Recording is already in progress');\n      return;\n    }\n\n    if (this._isEnabled && this.recordingMode === 'buffer') {\n      DEBUG_BUILD && logger.info('Buffering is in progress, call `flush()` to save the replay');\n      return;\n    }\n\n    DEBUG_BUILD && logger.infoTick('Starting replay in session mode');\n\n    // Required as user activity is initially set in\n    // constructor, so if `start()` is called after\n    // session idle expiration, a replay will not be\n    // created due to an idle timeout.\n    this._updateUserActivity();\n\n    const session = loadOrCreateSession(\n      {\n        maxReplayDuration: this._options.maxReplayDuration,\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n      },\n      {\n        stickySession: this._options.stickySession,\n        // This is intentional: create a new session-based replay when calling `start()`\n        sessionSampleRate: 1,\n        allowBuffering: false,\n      },\n    );\n\n    this.session = session;\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, an error occurs.\n   */\n   startBuffering() {\n    if (this._isEnabled) {\n      DEBUG_BUILD && logger.info('Buffering is in progress, call `flush()` to save the replay');\n      return;\n    }\n\n    DEBUG_BUILD && logger.infoTick('Starting replay in buffer mode');\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: 0,\n        allowBuffering: true,\n      },\n    );\n\n    this.session = session;\n\n    this.recordingMode = 'buffer';\n    this._initializeRecording();\n  }\n\n  /**\n   * Start recording.\n   *\n   * Note that this will cause a new DOM checkout\n   */\n   startRecording() {\n    try {\n      const canvasOptions = this._canvas;\n\n      this._stopRecording = record({\n        ...this._recordingOptions,\n        // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n        // Without this, it would record forever, until an error happens, which we don't want\n        // instead, we'll always keep the last 60 seconds of replay before an error happened\n        ...(this.recordingMode === 'buffer' && { checkoutEveryNms: BUFFER_CHECKOUT_TIME }),\n        emit: getHandleRecordingEmit(this),\n        onMutation: this._onMutationHandler,\n        ...(canvasOptions\n          ? {\n              recordCanvas: canvasOptions.recordCanvas,\n              getCanvasManager: canvasOptions.getCanvasManager,\n              sampling: canvasOptions.sampling,\n              dataURLOptions: canvasOptions.dataURLOptions,\n            }\n          : {}),\n      });\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n\n  /**\n   * Stops the recording, if it was running.\n   *\n   * Returns true if it was previously stopped, or is now stopped,\n   * otherwise false.\n   */\n   stopRecording() {\n    try {\n      if (this._stopRecording) {\n        this._stopRecording();\n        this._stopRecording = undefined;\n      }\n\n      return true;\n    } catch (err) {\n      this.handleException(err);\n      return false;\n    }\n  }\n\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n   async stop({ forceFlush = false, reason } = {}) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n    // enter into an infinite loop when `stop()` is called while flushing.\n    this._isEnabled = false;\n\n    try {\n      DEBUG_BUILD && logger.info(`Stopping Replay${reason ? ` triggered by ${reason}` : ''}`);\n\n      this._removeListeners();\n      this.stopRecording();\n\n      this._debouncedFlush.cancel();\n      // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n      // `_isEnabled` state of the plugin since it was disabled above.\n      if (forceFlush) {\n        await this._flush({ force: true });\n      }\n\n      // After flush, destroy event buffer\n      this.eventBuffer && this.eventBuffer.destroy();\n      this.eventBuffer = null;\n\n      // Clear session from session storage, note this means if a new session\n      // is started after, it will not have `previousSessionId`\n      clearSession(this);\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n\n  /**\n   * Pause some replay functionality. See comments for `_isPaused`.\n   * This differs from stop as this only stops DOM recording, it is\n   * not as thorough of a shutdown as `stop()`.\n   */\n   pause() {\n    if (this._isPaused) {\n      return;\n    }\n\n    this._isPaused = true;\n    this.stopRecording();\n\n    DEBUG_BUILD && logger.info('Pausing replay');\n  }\n\n  /**\n   * Resumes recording, see notes for `pause().\n   *\n   * Note that calling `startRecording()` here will cause a\n   * new DOM checkout.`\n   */\n   resume() {\n    if (!this._isPaused || !this._checkSession()) {\n      return;\n    }\n\n    this._isPaused = false;\n    this.startRecording();\n\n    DEBUG_BUILD && logger.info('Resuming replay');\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n   async sendBufferedReplayOrFlush({ continueRecording = true } = {}) {\n    if (this.recordingMode === 'session') {\n      return this.flushImmediate();\n    }\n\n    const activityTime = Date.now();\n\n    DEBUG_BUILD && logger.info('Converting buffer to session');\n\n    // Allow flush to complete before resuming as a session recording, otherwise\n    // the checkout from `startRecording` may be included in the payload.\n    // Prefer to keep the error replay as a separate (and smaller) segment\n    // than the session replay.\n    await this.flushImmediate();\n\n    const hasStoppedRecording = this.stopRecording();\n\n    if (!continueRecording || !hasStoppedRecording) {\n      return;\n    }\n\n    // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n    if ((this.recordingMode ) === 'session') {\n      return;\n    }\n\n    // Re-start recording in session-mode\n    this.recordingMode = 'session';\n\n    // Once this session ends, we do not want to refresh it\n    if (this.session) {\n      this._updateUserActivity(activityTime);\n      this._updateSessionActivity(activityTime);\n      this._maybeSaveSession();\n    }\n\n    this.startRecording();\n  }\n\n  /**\n   * We want to batch uploads of replay events. Save events only if\n   * `<flushMinDelay>` milliseconds have elapsed since the last event\n   * *OR* if `<flushMaxDelay>` milliseconds have elapsed.\n   *\n   * Accepts a callback to perform side-effects and returns true to stop batch\n   * processing and hand back control to caller.\n   */\n   addUpdate(cb) {\n    // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n    const cbResult = cb();\n\n    // If this option is turned on then we will only want to call `flush`\n    // explicitly\n    if (this.recordingMode === 'buffer') {\n      return;\n    }\n\n    // If callback is true, we do not want to continue with flushing -- the\n    // caller will need to handle it.\n    if (cbResult === true) {\n      return;\n    }\n\n    // addUpdate is called quite frequently - use _debouncedFlush so that it\n    // respects the flush delays and does not flush immediately\n    this._debouncedFlush();\n  }\n\n  /**\n   * Updates the user activity timestamp and resumes recording. This should be\n   * called in an event handler for a user action that we consider as the user\n   * being \"active\" (e.g. a mouse click).\n   */\n   triggerUserActivity() {\n    this._updateUserActivity();\n\n    // This case means that recording was once stopped due to inactivity.\n    // Ensure that recording is resumed.\n    if (!this._stopRecording) {\n      // Create a new session, otherwise when the user action is flushed, it\n      // will get rejected due to an expired session.\n      if (!this._checkSession()) {\n        return;\n      }\n\n      // Note: This will cause a new DOM checkout\n      this.resume();\n      return;\n    }\n\n    // Otherwise... recording was never suspended, continue as normalish\n    this.checkAndHandleExpiredSession();\n\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Updates the user activity timestamp *without* resuming\n   * recording. Some user events (e.g. keydown) can be create\n   * low-value replays that only contain the keypress as a\n   * breadcrumb. Instead this would require other events to\n   * create a new replay after a session has expired.\n   */\n   updateUserActivity() {\n    this._updateUserActivity();\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Only flush if `this.recordingMode === 'session'`\n   */\n   conditionalFlush() {\n    if (this.recordingMode === 'buffer') {\n      return Promise.resolve();\n    }\n\n    return this.flushImmediate();\n  }\n\n  /**\n   * Flush using debounce flush\n   */\n   flush() {\n    return this._debouncedFlush() ;\n  }\n\n  /**\n   * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n   * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n   * cases of mulitple flushes happening closely together.\n   */\n   flushImmediate() {\n    this._debouncedFlush();\n    // `.flush` is provided by the debounced function, analogously to lodash.debounce\n    return this._debouncedFlush.flush() ;\n  }\n\n  /**\n   * Cancels queued up flushes.\n   */\n   cancelFlush() {\n    this._debouncedFlush.cancel();\n  }\n\n  /** Get the current sesion (=replay) ID */\n   getSessionId() {\n    return this.session && this.session.id;\n  }\n\n  /**\n   * Checks if recording should be stopped due to user inactivity. Otherwise\n   * check if session is expired and create a new session if so. Triggers a new\n   * full snapshot on new session.\n   *\n   * Returns true if session is not expired, false otherwise.\n   * @hidden\n   */\n   checkAndHandleExpiredSession() {\n    // Prevent starting a new session if the last user activity is older than\n    // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n    // session+recording. This creates noisy replays that do not have much\n    // content in them.\n    if (\n      this._lastActivity &&\n      isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n      this.session &&\n      this.session.sampled === 'session'\n    ) {\n      // Pause recording only for session-based replays. Otherwise, resuming\n      // will create a new replay and will conflict with users who only choose\n      // to record error-based replays only. (e.g. the resumed replay will not\n      // contain a reference to an error)\n      this.pause();\n      return;\n    }\n\n    // --- There is recent user activity --- //\n    // This will create a new session if expired, based on expiry length\n    if (!this._checkSession()) {\n      // Check session handles the refreshing itself\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Capture some initial state that can change throughout the lifespan of the\n   * replay. This is required because otherwise they would be captured at the\n   * first flush.\n   */\n   setInitialState() {\n    const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n    const url = `${WINDOW.location.origin}${urlPath}`;\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    // Reset _context as well\n    this._clearContext();\n\n    this._context.initialUrl = url;\n    this._context.initialTimestamp = Date.now();\n    this._context.urls.push(url);\n  }\n\n  /**\n   * Add a breadcrumb event, that may be throttled.\n   * If it was throttled, we add a custom breadcrumb to indicate that.\n   */\n   throttledAddEvent(\n    event,\n    isCheckout,\n  ) {\n    const res = this._throttledAddEvent(event, isCheckout);\n\n    // If this is THROTTLED, it means we have throttled the event for the first time\n    // In this case, we want to add a breadcrumb indicating that something was skipped\n    if (res === THROTTLED) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.throttled',\n      });\n\n      this.addUpdate(() => {\n        // Return `false` if the event _was_ added, as that means we schedule a flush\n        return !addEventSync(this, {\n          type: ReplayEventTypeCustom,\n          timestamp: breadcrumb.timestamp || 0,\n          data: {\n            tag: 'breadcrumb',\n            payload: breadcrumb,\n            metric: true,\n          },\n        });\n      });\n    }\n\n    return res;\n  }\n\n  /**\n   * This will get the parametrized route name of the current page.\n   * This is only available if performance is enabled, and if an instrumented router is used.\n   */\n   getCurrentRoute() {\n    const lastActiveSpan = this.lastActiveSpan || getActiveSpan();\n    const lastRootSpan = lastActiveSpan && getRootSpan(lastActiveSpan);\n\n    const attributes = (lastRootSpan && spanToJSON(lastRootSpan).data) || {};\n    const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n    if (!lastRootSpan || !source || !['route', 'custom'].includes(source)) {\n      return undefined;\n    }\n\n    return spanToJSON(lastRootSpan).description;\n  }\n\n  /**\n   * Initialize and start all listeners to varying events (DOM,\n   * Performance Observer, Recording, Sentry SDK, etc)\n   */\n   _initializeRecording() {\n    this.setInitialState();\n\n    // this method is generally called on page load or manually - in both cases\n    // we should treat it as an activity\n    this._updateSessionActivity();\n\n    this.eventBuffer = createEventBuffer({\n      useCompression: this._options.useCompression,\n      workerUrl: this._options.workerUrl,\n    });\n\n    this._removeListeners();\n    this._addListeners();\n\n    // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n    this._isEnabled = true;\n    this._isPaused = false;\n\n    this.startRecording();\n  }\n\n  /**\n   * Loads (or refreshes) the current session.\n   */\n   _initializeSessionForSampling(previousSessionId) {\n    // Whenever there is _any_ error sample rate, we always allow buffering\n    // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n    const allowBuffering = this._options.errorSampleRate > 0;\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        previousSessionId,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: this._options.sessionSampleRate,\n        allowBuffering,\n      },\n    );\n\n    this.session = session;\n  }\n\n  /**\n   * Checks and potentially refreshes the current session.\n   * Returns false if session is not recorded.\n   */\n   _checkSession() {\n    // If there is no session yet, we do not want to refresh anything\n    // This should generally not happen, but to be safe....\n    if (!this.session) {\n      return false;\n    }\n\n    const currentSession = this.session;\n\n    if (\n      shouldRefreshSession(currentSession, {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n      })\n    ) {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this._refreshSession(currentSession);\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Refresh a session with a new one.\n   * This stops the current session (without forcing a flush, as that would never work since we are expired),\n   * and then does a new sampling based on the refreshed session.\n   */\n   async _refreshSession(session) {\n    if (!this._isEnabled) {\n      return;\n    }\n    await this.stop({ reason: 'refresh session' });\n    this.initializeSampling(session.id);\n  }\n\n  /**\n   * Adds listeners to record events for the replay\n   */\n   _addListeners() {\n    try {\n      WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n      WINDOW.addEventListener('blur', this._handleWindowBlur);\n      WINDOW.addEventListener('focus', this._handleWindowFocus);\n      WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.addListeners();\n      }\n\n      // There is no way to remove these listeners, so ensure they are only added once\n      if (!this._hasInitializedCoreListeners) {\n        addGlobalListeners(this);\n\n        this._hasInitializedCoreListeners = true;\n      }\n    } catch (err) {\n      this.handleException(err);\n    }\n\n    this._performanceCleanupCallback = setupPerformanceObserver(this);\n  }\n\n  /**\n   * Cleans up listeners that were created in `_addListeners`\n   */\n   _removeListeners() {\n    try {\n      WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n      WINDOW.removeEventListener('blur', this._handleWindowBlur);\n      WINDOW.removeEventListener('focus', this._handleWindowFocus);\n      WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.removeListeners();\n      }\n\n      if (this._performanceCleanupCallback) {\n        this._performanceCleanupCallback();\n      }\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n\n  /**\n   * Handle when visibility of the page content changes. Opening a new tab will\n   * cause the state to change to hidden because of content of current page will\n   * be hidden. Likewise, moving a different window to cover the contents of the\n   * page will also trigger a change to a hidden state.\n   */\n   __init() {this._handleVisibilityChange = () => {\n    if (WINDOW.document.visibilityState === 'visible') {\n      this._doChangeToForegroundTasks();\n    } else {\n      this._doChangeToBackgroundTasks();\n    }\n  };}\n\n  /**\n   * Handle when page is blurred\n   */\n   __init2() {this._handleWindowBlur = () => {\n    const breadcrumb = createBreadcrumb({\n      category: 'ui.blur',\n    });\n\n    // Do not count blur as a user action -- it's part of the process of them\n    // leaving the page\n    this._doChangeToBackgroundTasks(breadcrumb);\n  };}\n\n  /**\n   * Handle when page is focused\n   */\n   __init3() {this._handleWindowFocus = () => {\n    const breadcrumb = createBreadcrumb({\n      category: 'ui.focus',\n    });\n\n    // Do not count focus as a user action -- instead wait until they focus and\n    // interactive with page\n    this._doChangeToForegroundTasks(breadcrumb);\n  };}\n\n  /** Ensure page remains active when a key is pressed. */\n   __init4() {this._handleKeyboardEvent = (event) => {\n    handleKeyboardEvent(this, event);\n  };}\n\n  /**\n   * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n   */\n   _doChangeToBackgroundTasks(breadcrumb) {\n    if (!this.session) {\n      return;\n    }\n\n    const expired = isSessionExpired(this.session, {\n      maxReplayDuration: this._options.maxReplayDuration,\n      sessionIdleExpire: this.timeouts.sessionIdleExpire,\n    });\n\n    if (expired) {\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Send replay when the page/tab becomes hidden. There is no reason to send\n    // replay if it becomes visible, since no actions we care about were done\n    // while it was hidden\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    void this.conditionalFlush();\n  }\n\n  /**\n   * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n   */\n   _doChangeToForegroundTasks(breadcrumb) {\n    if (!this.session) {\n      return;\n    }\n\n    const isSessionActive = this.checkAndHandleExpiredSession();\n\n    if (!isSessionActive) {\n      // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n      // ms, we will re-use the existing session, otherwise create a new\n      // session\n      DEBUG_BUILD && logger.info('Document has become active, but session has expired');\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n  }\n\n  /**\n   * Update user activity (across session lifespans)\n   */\n   _updateUserActivity(_lastActivity = Date.now()) {\n    this._lastActivity = _lastActivity;\n  }\n\n  /**\n   * Updates the session's last activity timestamp\n   */\n   _updateSessionActivity(_lastActivity = Date.now()) {\n    if (this.session) {\n      this.session.lastActivity = _lastActivity;\n      this._maybeSaveSession();\n    }\n  }\n\n  /**\n   * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n   */\n   _createCustomBreadcrumb(breadcrumb) {\n    this.addUpdate(() => {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.throttledAddEvent({\n        type: EventType.Custom,\n        timestamp: breadcrumb.timestamp || 0,\n        data: {\n          tag: 'breadcrumb',\n          payload: breadcrumb,\n        },\n      });\n    });\n  }\n\n  /**\n   * Observed performance events are added to `this.performanceEntries`. These\n   * are included in the replay event before it is finished and sent to Sentry.\n   */\n   _addPerformanceEntries() {\n    const performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    return Promise.all(createPerformanceSpans(this, performanceEntries));\n  }\n\n  /**\n   * Clear _context\n   */\n   _clearContext() {\n    // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n    this._context.errorIds.clear();\n    this._context.traceIds.clear();\n    this._context.urls = [];\n  }\n\n  /** Update the initial timestamp based on the buffer content. */\n   _updateInitialTimestampFromEventBuffer() {\n    const { session, eventBuffer } = this;\n    // If replay was started manually (=no sample rate was given),\n    // We do not want to back-port the initial timestamp\n    if (!session || !eventBuffer || this._requiresManualStart) {\n      return;\n    }\n\n    // we only ever update this on the initial segment\n    if (session.segmentId) {\n      return;\n    }\n\n    const earliestEvent = eventBuffer.getEarliestTimestamp();\n    if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n      this._context.initialTimestamp = earliestEvent;\n    }\n  }\n\n  /**\n   * Return and clear _context\n   */\n   _popEventContext() {\n    const _context = {\n      initialTimestamp: this._context.initialTimestamp,\n      initialUrl: this._context.initialUrl,\n      errorIds: Array.from(this._context.errorIds),\n      traceIds: Array.from(this._context.traceIds),\n      urls: this._context.urls,\n    };\n\n    this._clearContext();\n\n    return _context;\n  }\n\n  /**\n   * Flushes replay event buffer to Sentry.\n   *\n   * Performance events are only added right before flushing - this is\n   * due to the buffered performance observer events.\n   *\n   * Should never be called directly, only by `flush`\n   */\n   async _runFlush() {\n    const replayId = this.getSessionId();\n\n    if (!this.session || !this.eventBuffer || !replayId) {\n      DEBUG_BUILD && logger.error('No session or eventBuffer found to flush.');\n      return;\n    }\n\n    await this._addPerformanceEntries();\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer || !this.eventBuffer.hasEvents) {\n      return;\n    }\n\n    // Only attach memory event if eventBuffer is not empty\n    await addMemoryEntry(this);\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer) {\n      return;\n    }\n\n    // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n    if (replayId !== this.getSessionId()) {\n      return;\n    }\n\n    try {\n      // This uses the data from the eventBuffer, so we need to call this before `finish()\n      this._updateInitialTimestampFromEventBuffer();\n\n      const timestamp = Date.now();\n\n      // Check total duration again, to avoid sending outdated stuff\n      // We leave 30s wiggle room to accomodate late flushing etc.\n      // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n      if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30000) {\n        throw new Error('Session is too long, not sending replay');\n      }\n\n      const eventContext = this._popEventContext();\n      // Always increment segmentId regardless of outcome of sending replay\n      const segmentId = this.session.segmentId++;\n      this._maybeSaveSession();\n\n      // Note this empties the event buffer regardless of outcome of sending replay\n      const recordingData = await this.eventBuffer.finish();\n\n      await sendReplay({\n        replayId,\n        recordingData,\n        segmentId,\n        eventContext,\n        session: this.session,\n        options: this.getOptions(),\n        timestamp,\n      });\n    } catch (err) {\n      this.handleException(err);\n\n      // This means we retried 3 times and all of them failed,\n      // or we ran into a problem we don't want to retry, like rate limiting.\n      // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.stop({ reason: 'sendReplay' });\n\n      const client = getClient();\n\n      if (client) {\n        client.recordDroppedEvent('send_error', 'replay');\n      }\n    }\n  }\n\n  /**\n   * Flush recording data to Sentry. Creates a lock so that only a single flush\n   * can be active at a time. Do not call this directly.\n   */\n   __init5() {this._flush = async ({\n    force = false,\n  }\n\n = {}) => {\n    if (!this._isEnabled && !force) {\n      // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n      return;\n    }\n\n    if (!this.checkAndHandleExpiredSession()) {\n      DEBUG_BUILD && logger.error('Attempting to finish replay event after session expired.');\n      return;\n    }\n\n    if (!this.session) {\n      // should never happen, as we would have bailed out before\n      return;\n    }\n\n    const start = this.session.started;\n    const now = Date.now();\n    const duration = now - start;\n\n    // A flush is about to happen, cancel any queued flushes\n    this._debouncedFlush.cancel();\n\n    // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n    // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n    const tooShort = duration < this._options.minReplayDuration;\n    const tooLong = duration > this._options.maxReplayDuration + 5000;\n    if (tooShort || tooLong) {\n      DEBUG_BUILD &&\n        logger.info(\n          `Session duration (${Math.floor(duration / 1000)}s) is too ${\n            tooShort ? 'short' : 'long'\n          }, not sending replay.`,\n        );\n\n      if (tooShort) {\n        this._debouncedFlush();\n      }\n      return;\n    }\n\n    const eventBuffer = this.eventBuffer;\n    if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n      DEBUG_BUILD && logger.info('Flushing initial segment without checkout.');\n      // TODO FN: Evaluate if we want to stop here, or remove this again?\n    }\n\n    // this._flushLock acts as a lock so that future calls to `_flush()`\n    // will be blocked until this promise resolves\n    if (!this._flushLock) {\n      this._flushLock = this._runFlush();\n      await this._flushLock;\n      this._flushLock = undefined;\n      return;\n    }\n\n    // Wait for previous flush to finish, then call the debounced `_flush()`.\n    // It's possible there are other flush requests queued and waiting for it\n    // to resolve. We want to reduce all outstanding requests (as well as any\n    // new flush requests that occur within a second of the locked flush\n    // completing) into a single flush.\n\n    try {\n      await this._flushLock;\n    } catch (err) {\n      DEBUG_BUILD && logger.error(err);\n    } finally {\n      this._debouncedFlush();\n    }\n  };}\n\n  /** Save the session, if it is sticky */\n   _maybeSaveSession() {\n    if (this.session && this._options.stickySession) {\n      saveSession(this.session);\n    }\n  }\n\n  /** Handler for rrweb.record.onMutation */\n   __init6() {this._onMutationHandler = (mutations) => {\n    const count = mutations.length;\n\n    const mutationLimit = this._options.mutationLimit;\n    const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n    const overMutationLimit = mutationLimit && count > mutationLimit;\n\n    // Create a breadcrumb if a lot of mutations happen at the same time\n    // We can show this in the UI as an information with potential performance improvements\n    if (count > mutationBreadcrumbLimit || overMutationLimit) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.mutations',\n        data: {\n          count,\n          limit: overMutationLimit,\n        },\n      });\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Stop replay if over the mutation limit\n    if (overMutationLimit) {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n      return false;\n    }\n\n    // `true` means we use the regular mutation handling by rrweb\n    return true;\n  };}\n}\n\nfunction getOption(selectors, defaultSelectors) {\n  return [\n    ...selectors,\n    // sentry defaults\n    ...defaultSelectors,\n  ].join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nfunction getPrivacyOptions({ mask, unmask, block, unblock, ignore }) {\n  const defaultBlockedElements = ['base[href=\"/\"]'];\n\n  const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]']);\n  const unmaskSelector = getOption(unmask, []);\n\n  const options = {\n    // We are making the decision to make text and input selectors the same\n    maskTextSelector: maskSelector,\n    unmaskTextSelector: unmaskSelector,\n\n    blockSelector: getOption(block, ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements]),\n    unblockSelector: getOption(unblock, []),\n    ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]']),\n  };\n\n  return options;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nfunction maskAttribute({\n  el,\n  key,\n  maskAttributes,\n  maskAllText,\n  privacyOptions,\n  value,\n}) {\n  // We only mask attributes if `maskAllText` is true\n  if (!maskAllText) {\n    return value;\n  }\n\n  // unmaskTextSelector takes precendence\n  if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n    return value;\n  }\n\n  if (\n    maskAttributes.includes(key) ||\n    // Need to mask `value` attribute for `<input>` if it's a button-like\n    // type\n    (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n  ) {\n    return value.replace(/[\\S]/g, '*');\n  }\n\n  return value;\n}\n\nconst MEDIA_SELECTORS =\n  'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\n\nconst DEFAULT_NETWORK_HEADERS = ['content-length', 'content-type', 'accept'];\n\nlet _initialized = false;\n\n/**\n * Sentry integration for [Session Replay](https://sentry.io/for/session-replay/).\n *\n * See the [Replay documentation](https://docs.sentry.io/platforms/javascript/guides/session-replay/) for more information.\n *\n * @example\n *\n * ```\n * Sentry.init({\n *   dsn: '__DSN__',\n *   integrations: [Sentry.replayIntegration()],\n * });\n * ```\n */\nconst replayIntegration = ((options) => {\n  return new Replay(options);\n}) ;\n\n/**\n * Replay integration\n *\n * TODO: Rewrite this to be functional integration\n * Exported for tests.\n */\nclass Replay  {\n  /**\n   * @inheritDoc\n   */\n   static __initStatic() {this.id = 'Replay';}\n\n  /**\n   * @inheritDoc\n   */\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n\n  /**\n   * Initial options passed to the replay integration, merged with default values.\n   * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they\n   * can only be finally set when setupOnce() is called.\n   *\n   * @private\n   */\n\n   constructor({\n    flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n    flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n    minReplayDuration = MIN_REPLAY_DURATION,\n    maxReplayDuration = MAX_REPLAY_DURATION,\n    stickySession = true,\n    useCompression = true,\n    workerUrl,\n    _experiments = {},\n    maskAllText = true,\n    maskAllInputs = true,\n    blockAllMedia = true,\n\n    mutationBreadcrumbLimit = 750,\n    mutationLimit = 10000,\n\n    slowClickTimeout = 7000,\n    slowClickIgnoreSelectors = [],\n\n    networkDetailAllowUrls = [],\n    networkDetailDenyUrls = [],\n    networkCaptureBodies = true,\n    networkRequestHeaders = [],\n    networkResponseHeaders = [],\n\n    mask = [],\n    maskAttributes = ['title', 'placeholder'],\n    unmask = [],\n    block = [],\n    unblock = [],\n    ignore = [],\n    maskFn,\n\n    beforeAddRecordingEvent,\n    beforeErrorSampling,\n  } = {}) {\n    this.name = Replay.id;\n\n    const privacyOptions = getPrivacyOptions({\n      mask,\n      unmask,\n      block,\n      unblock,\n      ignore,\n    });\n\n    this._recordingOptions = {\n      maskAllInputs,\n      maskAllText,\n      maskInputOptions: { password: true },\n      maskTextFn: maskFn,\n      maskInputFn: maskFn,\n      maskAttributeFn: (key, value, el) =>\n        maskAttribute({\n          maskAttributes,\n          maskAllText,\n          privacyOptions,\n          key,\n          value,\n          el,\n        }),\n\n      ...privacyOptions,\n\n      // Our defaults\n      slimDOMOptions: 'all',\n      inlineStylesheet: true,\n      // Disable inline images as it will increase segment/replay size\n      inlineImages: false,\n      // collect fonts, but be aware that `sentry.io` needs to be an allowed\n      // origin for playback\n      collectFonts: true,\n      errorHandler: (err) => {\n        try {\n          err.__rrweb__ = true;\n        } catch (error) {\n          // ignore errors here\n          // this can happen if the error is frozen or does not allow mutation for other reasons\n        }\n      },\n    };\n\n    this._initialOptions = {\n      flushMinDelay,\n      flushMaxDelay,\n      minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n      maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n      stickySession,\n      useCompression,\n      workerUrl,\n      blockAllMedia,\n      maskAllInputs,\n      maskAllText,\n      mutationBreadcrumbLimit,\n      mutationLimit,\n      slowClickTimeout,\n      slowClickIgnoreSelectors,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n      networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n      beforeAddRecordingEvent,\n      beforeErrorSampling,\n\n      _experiments,\n    };\n\n    if (this._initialOptions.blockAllMedia) {\n      // `blockAllMedia` is a more user friendly option to configure blocking\n      // embedded media elements\n      this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n        ? MEDIA_SELECTORS\n        : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n    }\n\n    if (this._isInitialized && isBrowser()) {\n      throw new Error('Multiple Sentry Session Replay instances are not supported');\n    }\n\n    this._isInitialized = true;\n  }\n\n  /** If replay has already been initialized */\n   get _isInitialized() {\n    return _initialized;\n  }\n\n  /** Update _isInitialized */\n   set _isInitialized(value) {\n    _initialized = value;\n  }\n\n  /**\n   * Setup and initialize replay container\n   */\n   afterAllSetup(client) {\n    if (!isBrowser() || this._replay) {\n      return;\n    }\n\n    this._setup(client);\n    this._initialize(client);\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will log a message if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * PerformanceObserver, Recording, Sentry SDK, etc)\n   */\n   start() {\n    if (!this._replay) {\n      return;\n    }\n    this._replay.start();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, until an error occurs.\n   */\n   startBuffering() {\n    if (!this._replay) {\n      return;\n    }\n\n    this._replay.startBuffering();\n  }\n\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n   stop() {\n    if (!this._replay) {\n      return Promise.resolve();\n    }\n\n    return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * If replay is not enabled, a new session replay is started.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n   flush(options) {\n    if (!this._replay) {\n      return Promise.resolve();\n    }\n\n    // assuming a session should be recorded in this case\n    if (!this._replay.isEnabled()) {\n      this._replay.start();\n      return Promise.resolve();\n    }\n\n    return this._replay.sendBufferedReplayOrFlush(options);\n  }\n\n  /**\n   * Get the current session ID.\n   */\n   getReplayId() {\n    if (!this._replay || !this._replay.isEnabled()) {\n      return;\n    }\n\n    return this._replay.getSessionId();\n  }\n\n  /**\n   * Initializes replay.\n   */\n   _initialize(client) {\n    if (!this._replay) {\n      return;\n    }\n\n    this._maybeLoadFromReplayCanvasIntegration(client);\n    this._replay.initializeSampling();\n  }\n\n  /** Setup the integration. */\n   _setup(client) {\n    // Client is not available in constructor, so we need to wait until setupOnce\n    const finalOptions = loadReplayOptionsFromClient(this._initialOptions, client);\n\n    this._replay = new ReplayContainer({\n      options: finalOptions,\n      recordingOptions: this._recordingOptions,\n    });\n  }\n\n  /** Get canvas options from ReplayCanvas integration, if it is also added. */\n   _maybeLoadFromReplayCanvasIntegration(client) {\n    // To save bundle size, we skip checking for stuff here\n    // and instead just try-catch everything - as generally this should all be defined\n    /* eslint-disable @typescript-eslint/no-non-null-assertion */\n    try {\n      const canvasIntegration = client.getIntegrationByName('ReplayCanvas')\n\n;\n      if (!canvasIntegration) {\n        return;\n      }\n\n      this._replay['_canvas'] = canvasIntegration.getOptions();\n    } catch (e) {\n      // ignore errors here\n    }\n    /* eslint-enable @typescript-eslint/no-non-null-assertion */\n  }\n}Replay.__initStatic();\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions, client) {\n  const opt = client.getOptions() ;\n\n  const finalOptions = {\n    sessionSampleRate: 0,\n    errorSampleRate: 0,\n    ...dropUndefinedKeys(initialOptions),\n  };\n\n  const replaysSessionSampleRate = parseSampleRate(opt.replaysSessionSampleRate);\n  const replaysOnErrorSampleRate = parseSampleRate(opt.replaysOnErrorSampleRate);\n\n  if (replaysSessionSampleRate == null && replaysOnErrorSampleRate == null) {\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n      );\n    });\n  }\n\n  if (replaysSessionSampleRate != null) {\n    finalOptions.sessionSampleRate = replaysSessionSampleRate;\n  }\n\n  if (replaysOnErrorSampleRate != null) {\n    finalOptions.errorSampleRate = replaysOnErrorSampleRate;\n  }\n\n  return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers) {\n  return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n\n/**\n * This is a small utility to get a type-safe instance of the Replay integration.\n */\nfunction getReplay() {\n  const client = getClient();\n  return client && client.getIntegrationByName('Replay');\n}\n\nexport { getReplay, replayIntegration };\n//# sourceMappingURL=index.js.map\n","import { addXhrInstrumentationHandler, addPerformanceInstrumentationHandler, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { instrumentFetchRequest, spanToJSON, hasTracingEnabled, setHttpStatus, getActiveSpan, startInactiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SentryNonRecordingSpan, getClient, getCurrentScope, getIsolationScope, spanToTraceHeader, getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromClient } from '@sentry/core';\nimport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, parseUrl, browserPerformanceTimeOrigin, generateSentryTraceHeader, dynamicSamplingContextToSentryBaggageHeader, BAGGAGE_HEADER_NAME, stringMatchesSomePattern } from '@sentry/utils';\nimport { WINDOW } from '../helpers.js';\n\n/** Options for Request Instrumentation */\n\nconst responseToSpanId = new WeakMap();\nconst spanIdToEndTimestamp = new Map();\n\nconst defaultRequestInstrumentationOptions = {\n  traceFetch: true,\n  traceXHR: true,\n  enableHTTPTimings: true,\n};\n\n/** Registers span creators for xhr and fetch requests  */\nfunction instrumentOutgoingRequests(client, _options) {\n  const { traceFetch, traceXHR, shouldCreateSpanForRequest, enableHTTPTimings, tracePropagationTargets } = {\n    traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n    traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n    ..._options,\n  };\n\n  const shouldCreateSpan =\n    typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_) => true;\n\n  const shouldAttachHeadersWithTargets = (url) => shouldAttachHeaders(url, tracePropagationTargets);\n\n  const spans = {};\n\n  if (traceFetch) {\n    // Keeping track of http requests, whose body payloads resolved later than the intial resolved request\n    // e.g. streaming using server sent events (SSE)\n    client.addEventProcessor(event => {\n      if (event.type === 'transaction' && event.spans) {\n        event.spans.forEach(span => {\n          if (span.op === 'http.client') {\n            const updatedTimestamp = spanIdToEndTimestamp.get(span.span_id);\n            if (updatedTimestamp) {\n              span.timestamp = updatedTimestamp / 1000;\n              spanIdToEndTimestamp.delete(span.span_id);\n            }\n          }\n        });\n      }\n      return event;\n    });\n\n    addFetchEndInstrumentationHandler(handlerData => {\n      if (handlerData.response) {\n        const span = responseToSpanId.get(handlerData.response);\n        if (span && handlerData.endTimestamp) {\n          spanIdToEndTimestamp.set(span, handlerData.endTimestamp);\n        }\n      }\n    });\n\n    addFetchInstrumentationHandler(handlerData => {\n      const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n\n      if (handlerData.response && handlerData.fetchData.__span) {\n        responseToSpanId.set(handlerData.response, handlerData.fetchData.__span);\n      }\n\n      // We cannot use `window.location` in the generic fetch instrumentation,\n      // but we need it for reliable `server.address` attribute.\n      // so we extend this in here\n      if (createdSpan) {\n        const fullUrl = getFullURL(handlerData.fetchData.url);\n        const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n        createdSpan.setAttributes({\n          'http.url': fullUrl,\n          'server.address': host,\n        });\n      }\n\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n\n  if (traceXHR) {\n    addXhrInstrumentationHandler(handlerData => {\n      const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n}\n\nfunction isPerformanceResourceTiming(entry) {\n  return (\n    entry.entryType === 'resource' &&\n    'initiatorType' in entry &&\n    typeof (entry ).nextHopProtocol === 'string' &&\n    (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n  );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span) {\n  const { url } = spanToJSON(span).data || {};\n\n  if (!url || typeof url !== 'string') {\n    return;\n  }\n\n  const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n    entries.forEach(entry => {\n      if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n        const spanData = resourceTimingEntryToSpanData(entry);\n        spanData.forEach(data => span.setAttribute(...data));\n        // In the next tick, clean this handler up\n        // We have to wait here because otherwise this cleans itself up before it is fully done\n        setTimeout(cleanup);\n      }\n    });\n  });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nfunction extractNetworkProtocol(nextHopProtocol) {\n  let name = 'unknown';\n  let version = 'unknown';\n  let _name = '';\n  for (const char of nextHopProtocol) {\n    // http/1.1 etc.\n    if (char === '/') {\n      [name, version] = nextHopProtocol.split('/') ;\n      break;\n    }\n    // h2, h3 etc.\n    if (!isNaN(Number(char))) {\n      name = _name === 'h' ? 'http' : _name;\n      version = nextHopProtocol.split(_name)[1] ;\n      break;\n    }\n    _name += char;\n  }\n  if (_name === nextHopProtocol) {\n    // webrtc, ftp, etc.\n    name = _name;\n  }\n  return { name, version };\n}\n\nfunction getAbsoluteTime(time = 0) {\n  return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming) {\n  const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n  const timingSpanData = [];\n\n  timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n  if (!browserPerformanceTimeOrigin) {\n    return timingSpanData;\n  }\n  return [\n    ...timingSpanData,\n    ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n    ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n    ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n    ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n    ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n    ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n    ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n    ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n    ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n    ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n  ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * We only export this function for testing purposes.\n */\nfunction shouldAttachHeaders(\n  targetUrl,\n  tracePropagationTargets,\n) {\n  // window.location.href not being defined is an edge case in the browser but we need to handle it.\n  // Potentially dangerous situations where it may not be defined: Browser Extensions, Web Workers, patching of the location obj\n  const href = WINDOW.location && WINDOW.location.href;\n\n  if (!href) {\n    // If there is no window.location.origin, we default to only attaching tracing headers to relative requests, i.e. ones that start with `/`\n    // BIG DISCLAIMER: Users can call URLs with a double slash (fetch(\"//example.com/api\")), this is a shorthand for \"send to the same protocol\",\n    // so we need a to exclude those requests, because they might be cross origin.\n    const isRelativeSameOriginRequest = !!targetUrl.match(/^\\/(?!\\/)/);\n    if (!tracePropagationTargets) {\n      return isRelativeSameOriginRequest;\n    } else {\n      return stringMatchesSomePattern(targetUrl, tracePropagationTargets);\n    }\n  } else {\n    let resolvedUrl;\n    let currentOrigin;\n\n    // URL parsing may fail, we default to not attaching trace headers in that case.\n    try {\n      resolvedUrl = new URL(targetUrl, href);\n      currentOrigin = new URL(href).origin;\n    } catch (e) {\n      return false;\n    }\n\n    const isSameOriginRequest = resolvedUrl.origin === currentOrigin;\n    if (!tracePropagationTargets) {\n      return isSameOriginRequest;\n    } else {\n      return (\n        stringMatchesSomePattern(resolvedUrl.toString(), tracePropagationTargets) ||\n        (isSameOriginRequest && stringMatchesSomePattern(resolvedUrl.pathname, tracePropagationTargets))\n      );\n    }\n  }\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction xhrCallback(\n  handlerData,\n  shouldCreateSpan,\n  shouldAttachHeaders,\n  spans,\n) {\n  const xhr = handlerData.xhr;\n  const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n  if (!xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(sentryXhrData.url);\n\n  // check first if the request has finished and is tracked by an existing span which should now end\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = xhr.__sentry_xhr_span_id__;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span && sentryXhrData.status_code !== undefined) {\n      setHttpStatus(span, sentryXhrData.status_code);\n      span.end();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const fullUrl = getFullURL(sentryXhrData.url);\n  const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n  const hasParent = !!getActiveSpan();\n\n  const span =\n    shouldCreateSpanResult && hasParent\n      ? startInactiveSpan({\n          name: `${sentryXhrData.method} ${sentryXhrData.url}`,\n          attributes: {\n            type: 'xhr',\n            'http.method': sentryXhrData.method,\n            'http.url': fullUrl,\n            url: sentryXhrData.url,\n            'server.address': host,\n            [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',\n            [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n          },\n        })\n      : new SentryNonRecordingSpan();\n\n  xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n  spans[xhr.__sentry_xhr_span_id__] = span;\n\n  const client = getClient();\n\n  if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url) && client) {\n    addTracingHeadersToXhrRequest(\n      xhr,\n      client,\n      // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n      // we do not want to use the span as base for the trace headers,\n      // which means that the headers will be generated from the scope and the sampling decision is deferred\n      hasTracingEnabled() && hasParent ? span : undefined,\n    );\n  }\n\n  return span;\n}\n\nfunction addTracingHeadersToXhrRequest(xhr, client, span) {\n  const scope = getCurrentScope();\n  const isolationScope = getIsolationScope();\n  const { traceId, spanId, sampled, dsc } = {\n    ...isolationScope.getPropagationContext(),\n    ...scope.getPropagationContext(),\n  };\n\n  const sentryTraceHeader =\n    span && hasTracingEnabled() ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n  const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n    dsc || (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client)),\n  );\n\n  setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n}\n\nfunction setHeaderOnXhr(\n  xhr,\n  sentryTraceHeader,\n  sentryBaggageHeader,\n) {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    xhr.setRequestHeader('sentry-trace', sentryTraceHeader);\n    if (sentryBaggageHeader) {\n      // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n      // We can therefore simply set a baggage header without checking what was there before\n      // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      xhr.setRequestHeader(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n  } catch (_) {\n    // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n  }\n}\n\nfunction getFullURL(url) {\n  try {\n    // By adding a base URL to new URL(), this will also work for relative urls\n    // If `url` is a full URL, the base URL is ignored anyhow\n    const parsed = new URL(url, WINDOW.location.origin);\n    return parsed.href;\n  } catch (e2) {\n    return undefined;\n  }\n}\n\nexport { defaultRequestInstrumentationOptions, extractNetworkProtocol, instrumentOutgoingRequests, shouldAttachHeaders, xhrCallback };\n//# sourceMappingURL=request.js.map\n","import { getActiveSpan, getRootSpan, spanToJSON, SPAN_STATUS_ERROR } from '@sentry/core';\nimport { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nfunction registerBackgroundTabDetection() {\n  if (WINDOW && WINDOW.document) {\n    WINDOW.document.addEventListener('visibilitychange', () => {\n      const activeSpan = getActiveSpan();\n      if (!activeSpan) {\n        return;\n      }\n\n      const rootSpan = getRootSpan(activeSpan);\n\n      if (WINDOW.document.hidden && rootSpan) {\n        const cancelledStatus = 'cancelled';\n\n        const { op, status } = spanToJSON(rootSpan);\n\n        if (DEBUG_BUILD) {\n          logger.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`);\n        }\n\n        // We should not set status if it is already set, this prevent important statuses like\n        // error or data loss from being overwritten on transaction.\n        if (!status) {\n          rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: cancelledStatus });\n        }\n\n        rootSpan.setAttribute('sentry.cancellation_reason', 'document.hidden');\n        rootSpan.end();\n      }\n    });\n  } else {\n    DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n  }\n}\n\nexport { registerBackgroundTabDetection };\n//# sourceMappingURL=backgroundtab.js.map\n","import { startTrackingWebVitals, startTrackingINP, startTrackingLongAnimationFrames, startTrackingLongTasks, startTrackingInteractions, addHistoryInstrumentationHandler, registerInpInteractionListener, addPerformanceEntries } from '@sentry-internal/browser-utils';\nimport { TRACING_DEFAULTS, registerSpanErrorInstrumentation, getClient, spanToJSON, getCurrentScope, getRootSpan, spanIsSampled, getDynamicSamplingContextFromSpan, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getActiveSpan, getIsolationScope, startIdleSpan, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON } from '@sentry/core';\nimport { GLOBAL_OBJ, logger, propagationContextFromHeaders, browserPerformanceTimeOrigin, generatePropagationContext, getDomElement } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\nimport { registerBackgroundTabDetection } from './backgroundtab.js';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request.js';\n\n/* eslint-disable max-lines */\n\nconst BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS = {\n  ...TRACING_DEFAULTS,\n  instrumentNavigation: true,\n  instrumentPageLoad: true,\n  markBackgroundSpan: true,\n  enableLongTask: true,\n  enableLongAnimationFrame: true,\n  enableInp: true,\n  _experiments: {},\n  ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library.\n *\n * We explicitly export the proper type here, as this has to be extended in some cases.\n */\nconst browserTracingIntegration = ((_options = {}) => {\n  registerSpanErrorInstrumentation();\n\n  const {\n    enableInp,\n    enableLongTask,\n    enableLongAnimationFrame,\n    _experiments: { enableInteractions, enableStandaloneClsSpans },\n    beforeStartSpan,\n    idleTimeout,\n    finalTimeout,\n    childSpanTimeout,\n    markBackgroundSpan,\n    traceFetch,\n    traceXHR,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n    instrumentPageLoad,\n    instrumentNavigation,\n  } = {\n    ...DEFAULT_BROWSER_TRACING_OPTIONS,\n    ..._options,\n  };\n\n  const _collectWebVitals = startTrackingWebVitals({ recordClsStandaloneSpans: enableStandaloneClsSpans || false });\n\n  if (enableInp) {\n    startTrackingINP();\n  }\n\n  if (\n    enableLongAnimationFrame &&\n    GLOBAL_OBJ.PerformanceObserver &&\n    PerformanceObserver.supportedEntryTypes.includes('long-animation-frame')\n  ) {\n    startTrackingLongAnimationFrames();\n  } else if (enableLongTask) {\n    startTrackingLongTasks();\n  }\n\n  if (enableInteractions) {\n    startTrackingInteractions();\n  }\n\n  const latestRoute = {\n    name: undefined,\n    source: undefined,\n  };\n\n  /** Create routing idle transaction. */\n  function _createRouteSpan(client, startSpanOptions) {\n    const isPageloadTransaction = startSpanOptions.op === 'pageload';\n\n    const finalStartSpanOptions = beforeStartSpan\n      ? beforeStartSpan(startSpanOptions)\n      : startSpanOptions;\n\n    const attributes = finalStartSpanOptions.attributes || {};\n\n    // If `finalStartSpanOptions.name` is different than `startSpanOptions.name`\n    // it is because `beforeStartSpan` set a custom name. Therefore we set the source to 'custom'.\n    if (startSpanOptions.name !== finalStartSpanOptions.name) {\n      attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'custom';\n      finalStartSpanOptions.attributes = attributes;\n    }\n\n    latestRoute.name = finalStartSpanOptions.name;\n    latestRoute.source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n    const idleSpan = startIdleSpan(finalStartSpanOptions, {\n      idleTimeout,\n      finalTimeout,\n      childSpanTimeout,\n      // should wait for finish signal if it's a pageload transaction\n      disableAutoFinish: isPageloadTransaction,\n      beforeSpanEnd: span => {\n        _collectWebVitals();\n        addPerformanceEntries(span, { recordClsOnPageloadSpan: !enableStandaloneClsSpans });\n      },\n    });\n\n    function emitFinish() {\n      if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n        client.emit('idleSpanEnableAutoFinish', idleSpan);\n      }\n    }\n\n    if (isPageloadTransaction && WINDOW.document) {\n      WINDOW.document.addEventListener('readystatechange', () => {\n        emitFinish();\n      });\n\n      emitFinish();\n    }\n\n    return idleSpan;\n  }\n\n  return {\n    name: BROWSER_TRACING_INTEGRATION_ID,\n    afterAllSetup(client) {\n      let activeSpan;\n      let startingUrl = WINDOW.location && WINDOW.location.href;\n\n      client.on('startNavigationSpan', startSpanOptions => {\n        if (getClient() !== client) {\n          return;\n        }\n\n        if (activeSpan && !spanToJSON(activeSpan).timestamp) {\n          DEBUG_BUILD && logger.log(`[Tracing] Finishing current root span with op: ${spanToJSON(activeSpan).op}`);\n          // If there's an open transaction on the scope, we need to finish it before creating an new one.\n          activeSpan.end();\n        }\n\n        activeSpan = _createRouteSpan(client, {\n          op: 'navigation',\n          ...startSpanOptions,\n        });\n      });\n\n      client.on('startPageLoadSpan', (startSpanOptions, traceOptions = {}) => {\n        if (getClient() !== client) {\n          return;\n        }\n\n        if (activeSpan && !spanToJSON(activeSpan).timestamp) {\n          DEBUG_BUILD && logger.log(`[Tracing] Finishing current root span with op: ${spanToJSON(activeSpan).op}`);\n          // If there's an open transaction on the scope, we need to finish it before creating an new one.\n          activeSpan.end();\n        }\n\n        const sentryTrace = traceOptions.sentryTrace || getMetaContent('sentry-trace');\n        const baggage = traceOptions.baggage || getMetaContent('baggage');\n\n        const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n        getCurrentScope().setPropagationContext(propagationContext);\n\n        activeSpan = _createRouteSpan(client, {\n          op: 'pageload',\n          ...startSpanOptions,\n        });\n      });\n\n      // A trace should to stay the consistent over the entire time span of one route.\n      // Therefore, when the initial pageload or navigation root span ends, we update the\n      // scope's propagation context to keep span-specific attributes like the `sampled` decision and\n      // the dynamic sampling context valid, even after the root span has ended.\n      // This ensures that the trace data is consistent for the entire duration of the route.\n      client.on('spanEnd', span => {\n        const op = spanToJSON(span).op;\n        if (span !== getRootSpan(span) || (op !== 'navigation' && op !== 'pageload')) {\n          return;\n        }\n\n        const scope = getCurrentScope();\n        const oldPropagationContext = scope.getPropagationContext();\n\n        scope.setPropagationContext({\n          ...oldPropagationContext,\n          sampled: oldPropagationContext.sampled !== undefined ? oldPropagationContext.sampled : spanIsSampled(span),\n          dsc: oldPropagationContext.dsc || getDynamicSamplingContextFromSpan(span),\n        });\n      });\n\n      if (WINDOW.location) {\n        if (instrumentPageLoad) {\n          startBrowserTracingPageLoadSpan(client, {\n            name: WINDOW.location.pathname,\n            // pageload should always start at timeOrigin (and needs to be in s, not ms)\n            startTime: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n            attributes: {\n              [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n              [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser',\n            },\n          });\n        }\n\n        if (instrumentNavigation) {\n          addHistoryInstrumentationHandler(({ to, from }) => {\n            /**\n             * This early return is there to account for some cases where a navigation transaction starts right after\n             * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n             * create an uneccessary navigation transaction.\n             *\n             * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n             * only be caused in certain development environments where the usage of a hot module reloader is causing\n             * errors.\n             */\n            if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n              startingUrl = undefined;\n              return;\n            }\n\n            if (from !== to) {\n              startingUrl = undefined;\n              startBrowserTracingNavigationSpan(client, {\n                name: WINDOW.location.pathname,\n                attributes: {\n                  [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n                  [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser',\n                },\n              });\n            }\n          });\n        }\n      }\n\n      if (markBackgroundSpan) {\n        registerBackgroundTabDetection();\n      }\n\n      if (enableInteractions) {\n        registerInteractionListener(idleTimeout, finalTimeout, childSpanTimeout, latestRoute);\n      }\n\n      if (enableInp) {\n        registerInpInteractionListener();\n      }\n\n      instrumentOutgoingRequests(client, {\n        traceFetch,\n        traceXHR,\n        tracePropagationTargets: client.getOptions().tracePropagationTargets,\n        shouldCreateSpanForRequest,\n        enableHTTPTimings,\n      });\n    },\n  };\n}) ;\n\n/**\n * Manually start a page load span.\n * This will only do something if a browser tracing integration integration has been setup.\n *\n * If you provide a custom `traceOptions` object, it will be used to continue the trace\n * instead of the default behavior, which is to look it up on the <meta> tags.\n */\nfunction startBrowserTracingPageLoadSpan(\n  client,\n  spanOptions,\n  traceOptions,\n) {\n  client.emit('startPageLoadSpan', spanOptions, traceOptions);\n\n  getCurrentScope().setTransactionName(spanOptions.name);\n\n  const span = getActiveSpan();\n  const op = span && spanToJSON(span).op;\n  return op === 'pageload' ? span : undefined;\n}\n\n/**\n * Manually start a navigation span.\n * This will only do something if a browser tracing integration has been setup.\n */\nfunction startBrowserTracingNavigationSpan(client, spanOptions) {\n  getIsolationScope().setPropagationContext(generatePropagationContext());\n  getCurrentScope().setPropagationContext(generatePropagationContext());\n\n  client.emit('startNavigationSpan', spanOptions);\n\n  getCurrentScope().setTransactionName(spanOptions.name);\n\n  const span = getActiveSpan();\n  const op = span && spanToJSON(span).op;\n  return op === 'navigation' ? span : undefined;\n}\n\n/** Returns the value of a meta tag */\nfunction getMetaContent(metaName) {\n  // Can't specify generic to `getDomElement` because tracing can be used\n  // in a variety of environments, have to disable `no-unsafe-member-access`\n  // as a result.\n  const metaTag = getDomElement(`meta[name=${metaName}]`);\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n\n/** Start listener for interaction transactions */\nfunction registerInteractionListener(\n  idleTimeout,\n  finalTimeout,\n  childSpanTimeout,\n  latestRoute,\n) {\n  let inflightInteractionSpan;\n  const registerInteractionTransaction = () => {\n    const op = 'ui.action.click';\n\n    const activeSpan = getActiveSpan();\n    const rootSpan = activeSpan && getRootSpan(activeSpan);\n    if (rootSpan) {\n      const currentRootSpanOp = spanToJSON(rootSpan).op;\n      if (['navigation', 'pageload'].includes(currentRootSpanOp )) {\n        DEBUG_BUILD &&\n          logger.warn(`[Tracing] Did not create ${op} span because a pageload or navigation span is in progress.`);\n        return undefined;\n      }\n    }\n\n    if (inflightInteractionSpan) {\n      inflightInteractionSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, 'interactionInterrupted');\n      inflightInteractionSpan.end();\n      inflightInteractionSpan = undefined;\n    }\n\n    if (!latestRoute.name) {\n      DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n      return undefined;\n    }\n\n    inflightInteractionSpan = startIdleSpan(\n      {\n        name: latestRoute.name,\n        op,\n        attributes: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: latestRoute.source || 'url',\n        },\n      },\n      {\n        idleTimeout,\n        finalTimeout,\n        childSpanTimeout,\n      },\n    );\n  };\n\n  if (WINDOW.document) {\n    addEventListener('click', registerInteractionTransaction, { once: false, capture: true });\n  }\n}\n\nexport { BROWSER_TRACING_INTEGRATION_ID, browserTracingIntegration, getMetaContent, startBrowserTracingNavigationSpan, startBrowserTracingPageLoadSpan };\n//# sourceMappingURL=browserTracingIntegration.js.map\n","const DEFAULT_HOOKS = ['activate', 'mount', 'update'];\n\nexport { DEFAULT_HOOKS };\n//# sourceMappingURL=constants.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","// Vendored from https://github.com/vuejs/vue/blob/612fb89547711cacb030a3893a0065b785802860/src/core/util/debug.js\n// with types only changes.\n\n// The MIT License (MIT)\n\n// Copyright (c) 2013-present, Yuxi (Evan) You\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\nconst classifyRE = /(?:^|[-_])(\\w)/g;\nconst classify = (str) => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');\n\nconst ROOT_COMPONENT_NAME = '<Root>';\nconst ANONYMOUS_COMPONENT_NAME = '<Anonymous>';\n\nconst repeat = (str, n) => {\n  return str.repeat(n);\n};\n\nconst formatComponentName = (vm, includeFile) => {\n  if (!vm) {\n    return ANONYMOUS_COMPONENT_NAME;\n  }\n\n  if (vm.$root === vm) {\n    return ROOT_COMPONENT_NAME;\n  }\n\n  // https://github.com/getsentry/sentry-javascript/issues/5204 $options can be undefined\n  if (!vm.$options) {\n    return ANONYMOUS_COMPONENT_NAME;\n  }\n\n  const options = vm.$options;\n\n  let name = options.name || options._componentTag;\n  const file = options.__file;\n  if (!name && file) {\n    const match = file.match(/([^/\\\\]+)\\.vue$/);\n    if (match) {\n      name = match[1];\n    }\n  }\n\n  return (\n    (name ? `<${classify(name)}>` : ANONYMOUS_COMPONENT_NAME) + (file && includeFile !== false ? ` at ${file}` : '')\n  );\n};\n\nconst generateComponentTrace = (vm) => {\n  if (vm && (vm._isVue || vm.__isVue) && vm.$parent) {\n    const tree = [];\n    let currentRecursiveSequence = 0;\n    while (vm) {\n      if (tree.length > 0) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const last = tree[tree.length - 1] ;\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (last.constructor === vm.constructor) {\n          currentRecursiveSequence++;\n          vm = vm.$parent; // eslint-disable-line no-param-reassign\n          continue;\n        } else if (currentRecursiveSequence > 0) {\n          tree[tree.length - 1] = [last, currentRecursiveSequence];\n          currentRecursiveSequence = 0;\n        }\n      }\n      tree.push(vm);\n      vm = vm.$parent; // eslint-disable-line no-param-reassign\n    }\n\n    const formattedTree = tree\n      .map(\n        (vm, i) =>\n          `${\n            (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) +\n            (Array.isArray(vm)\n              ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`\n              : formatComponentName(vm))\n          }`,\n      )\n      .join('\\n');\n\n    return `\\n\\nfound in\\n\\n${formattedTree}`;\n  }\n\n  return `\\n\\n(found in ${formatComponentName(vm)})`;\n};\n\nexport { formatComponentName, generateComponentTrace };\n//# sourceMappingURL=components.js.map\n","import { captureException } from '@sentry/core';\nimport { consoleSandbox } from '@sentry/utils';\nimport { formatComponentName, generateComponentTrace } from './vendor/components.js';\n\nconst attachErrorHandler = (app, options) => {\n  const { errorHandler, warnHandler, silent } = app.config;\n\n  app.config.errorHandler = (error, vm, lifecycleHook) => {\n    const componentName = formatComponentName(vm, false);\n    const trace = vm ? generateComponentTrace(vm) : '';\n    const metadata = {\n      componentName,\n      lifecycleHook,\n      trace,\n    };\n\n    if (options.attachProps && vm) {\n      // Vue2 - $options.propsData\n      // Vue3 - $props\n      if (vm.$options && vm.$options.propsData) {\n        metadata.propsData = vm.$options.propsData;\n      } else if (vm.$props) {\n        metadata.propsData = vm.$props;\n      }\n    }\n\n    // Capture exception in the next event loop, to make sure that all breadcrumbs are recorded in time.\n    setTimeout(() => {\n      captureException(error, {\n        captureContext: { contexts: { vue: metadata } },\n        mechanism: { handled: false },\n      });\n    });\n\n    if (typeof errorHandler === 'function') {\n      (errorHandler ).call(app, error, vm, lifecycleHook);\n    }\n\n    if (options.logErrors) {\n      const hasConsole = typeof console !== 'undefined';\n      const message = `Error in ${lifecycleHook}: \"${error && error.toString()}\"`;\n\n      if (warnHandler) {\n        (warnHandler ).call(null, message, vm, trace);\n      } else if (hasConsole && !silent) {\n        consoleSandbox(() => {\n          // eslint-disable-next-line no-console\n          console.error(`[Vue warn]: ${message}${trace}`);\n        });\n      }\n    }\n  };\n};\n\nexport { attachErrorHandler };\n//# sourceMappingURL=errorhandler.js.map\n","import { getActiveSpan, startInactiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/browser';\nimport { logger, timestampInSeconds } from '@sentry/utils';\nimport { DEFAULT_HOOKS } from './constants.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { formatComponentName } from './vendor/components.js';\n\nconst VUE_OP = 'ui.vue';\n\n// Mappings from operation to corresponding lifecycle hook.\nconst HOOKS = {\n  activate: ['activated', 'deactivated'],\n  create: ['beforeCreate', 'created'],\n  // Vue 3\n  unmount: ['beforeUnmount', 'unmounted'],\n  // Vue 2\n  destroy: ['beforeDestroy', 'destroyed'],\n  mount: ['beforeMount', 'mounted'],\n  update: ['beforeUpdate', 'updated'],\n};\n\n/** Finish top-level span and activity with a debounce configured using `timeout` option */\nfunction finishRootSpan(vm, timestamp, timeout) {\n  if (vm.$_sentryRootSpanTimer) {\n    clearTimeout(vm.$_sentryRootSpanTimer);\n  }\n\n  vm.$_sentryRootSpanTimer = setTimeout(() => {\n    if (vm.$root && vm.$root.$_sentryRootSpan) {\n      vm.$root.$_sentryRootSpan.end(timestamp);\n      vm.$root.$_sentryRootSpan = undefined;\n    }\n  }, timeout);\n}\n\nconst createTracingMixins = (options) => {\n  const hooks = (options.hooks || [])\n    .concat(DEFAULT_HOOKS)\n    // Removing potential duplicates\n    .filter((value, index, self) => self.indexOf(value) === index);\n\n  const mixins = {};\n\n  for (const operation of hooks) {\n    // Retrieve corresponding hooks from Vue lifecycle.\n    // eg. mount => ['beforeMount', 'mounted']\n    const internalHooks = HOOKS[operation];\n    if (!internalHooks) {\n      DEBUG_BUILD && logger.warn(`Unknown hook: ${operation}`);\n      continue;\n    }\n\n    for (const internalHook of internalHooks) {\n      mixins[internalHook] = function () {\n        const isRoot = this.$root === this;\n\n        if (isRoot) {\n          const activeSpan = getActiveSpan();\n          if (activeSpan) {\n            this.$_sentryRootSpan =\n              this.$_sentryRootSpan ||\n              startInactiveSpan({\n                name: 'Application Render',\n                op: `${VUE_OP}.render`,\n                attributes: {\n                  [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.vue',\n                },\n              });\n          }\n        }\n\n        // Skip components that we don't want to track to minimize the noise and give a more granular control to the user\n        const name = formatComponentName(this, false);\n        const shouldTrack = Array.isArray(options.trackComponents)\n          ? options.trackComponents.indexOf(name) > -1\n          : options.trackComponents;\n\n        // We always want to track root component\n        if (!isRoot && !shouldTrack) {\n          return;\n        }\n\n        this.$_sentrySpans = this.$_sentrySpans || {};\n\n        // Start a new span if current hook is a 'before' hook.\n        // Otherwise, retrieve the current span and finish it.\n        if (internalHook == internalHooks[0]) {\n          const activeSpan = (this.$root && this.$root.$_sentryRootSpan) || getActiveSpan();\n          if (activeSpan) {\n            // Cancel old span for this hook operation in case it didn't get cleaned up. We're not actually sure if it\n            // will ever be the case that cleanup hooks re not called, but we had users report that spans didn't get\n            // finished so we finish the span before starting a new one, just to be sure.\n            const oldSpan = this.$_sentrySpans[operation];\n            if (oldSpan) {\n              oldSpan.end();\n            }\n\n            this.$_sentrySpans[operation] = startInactiveSpan({\n              name: `Vue <${name}>`,\n              op: `${VUE_OP}.${operation}`,\n              attributes: {\n                [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.vue',\n              },\n            });\n          }\n        } else {\n          // The span should already be added via the first handler call (in the 'before' hook)\n          const span = this.$_sentrySpans[operation];\n          // The before hook did not start the tracking span, so the span was not added.\n          // This is probably because it happened before there is an active transaction\n          if (!span) return;\n          span.end();\n\n          finishRootSpan(this, timestampInSeconds(), options.timeout);\n        }\n      };\n    }\n  }\n\n  return mixins;\n};\n\nexport { createTracingMixins };\n//# sourceMappingURL=tracing.js.map\n","import { defineIntegration, hasTracingEnabled } from '@sentry/core';\nimport { GLOBAL_OBJ, consoleSandbox, arrayify } from '@sentry/utils';\nimport { DEFAULT_HOOKS } from './constants.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { attachErrorHandler } from './errorhandler.js';\nimport { createTracingMixins } from './tracing.js';\n\nconst globalWithVue = GLOBAL_OBJ ;\n\nconst DEFAULT_CONFIG = {\n  Vue: globalWithVue.Vue,\n  attachProps: true,\n  logErrors: true,\n  hooks: DEFAULT_HOOKS,\n  timeout: 2000,\n  trackComponents: false,\n};\n\nconst INTEGRATION_NAME = 'Vue';\n\nconst _vueIntegration = ((integrationOptions = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      _setupIntegration(client, integrationOptions);\n    },\n  };\n}) ;\n\nconst vueIntegration = defineIntegration(_vueIntegration);\n\nfunction _setupIntegration(client, integrationOptions) {\n  const options = { ...DEFAULT_CONFIG, ...client.getOptions(), ...integrationOptions };\n  if (!options.Vue && !options.app) {\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `[@sentry/vue]: Misconfigured SDK. Vue specific errors will not be captured.\nUpdate your \\`Sentry.init\\` call with an appropriate config option:\n\\`app\\` (Application Instance - Vue 3) or \\`Vue\\` (Vue Constructor - Vue 2).`,\n      );\n    });\n    return;\n  }\n\n  if (options.app) {\n    const apps = arrayify(options.app);\n    apps.forEach(app => vueInit(app, options));\n  } else if (options.Vue) {\n    vueInit(options.Vue, options);\n  }\n}\n\nconst vueInit = (app, options) => {\n  if (DEBUG_BUILD) {\n    // Check app is not mounted yet - should be mounted _after_ init()!\n    // This is _somewhat_ private, but in the case that this doesn't exist we simply ignore it\n    // See: https://github.com/vuejs/core/blob/eb2a83283caa9de0a45881d860a3cbd9d0bdd279/packages/runtime-core/src/component.ts#L394\n    const appWithInstance = app\n\n;\n\n    const isMounted = appWithInstance._instance && appWithInstance._instance.isMounted;\n    if (isMounted === true) {\n      consoleSandbox(() => {\n        // eslint-disable-next-line no-console\n        console.warn(\n          '[@sentry/vue]: Misconfigured SDK. Vue app is already mounted. Make sure to call `app.mount()` after `Sentry.init()`.',\n        );\n      });\n    }\n  }\n\n  attachErrorHandler(app, options);\n\n  if (hasTracingEnabled(options)) {\n    app.mixin(\n      createTracingMixins({\n        ...options,\n        ...options.tracingOptions,\n      }),\n    );\n  }\n};\n\nexport { vueIntegration };\n//# sourceMappingURL=integration.js.map\n","import { SDK_VERSION, getDefaultIntegrations, init as init$1 } from '@sentry/browser';\nimport { vueIntegration } from './integration.js';\n\n/**\n * Inits the Vue SDK\n */\nfunction init(\n  config = {},\n) {\n  const options = {\n    _metadata: {\n      sdk: {\n        name: 'sentry.javascript.vue',\n        packages: [\n          {\n            name: 'npm:@sentry/vue',\n            version: SDK_VERSION,\n          },\n        ],\n        version: SDK_VERSION,\n      },\n    },\n    defaultIntegrations: [...getDefaultIntegrations(config), vueIntegration()],\n    ...config,\n  };\n\n  return init$1(options);\n}\n\nexport { init };\n//# sourceMappingURL=sdk.js.map\n","import { captureException } from '@sentry/browser';\nimport { getCurrentScope, spanToJSON, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getActiveSpan, getRootSpan } from '@sentry/core';\n\n// The following type is an intersection of the Route type from VueRouter v2, v3, and v4.\n// This is not great, but kinda necessary to make it work with all versions at the same time.\n\n/**\n * Instrument the Vue router to create navigation spans.\n */\nfunction instrumentVueRouter(\n  router,\n  options\n\n,\n  startNavigationSpanFn,\n) {\n  let isFirstPageLoad = true;\n\n  router.onError(error => captureException(error, { mechanism: { handled: false } }));\n\n  router.beforeEach((to, from, next) => {\n    // According to docs we could use `from === VueRouter.START_LOCATION` but I couldn't get it working for Vue 2\n    // https://router.vuejs.org/api/#router-start-location\n    // https://next.router.vuejs.org/api/#start-location\n    // Additionally, Nuxt does not provide the possibility to check for `from.matched.length === 0` (this is never 0).\n    // Therefore, a flag was added to track the page-load: isFirstPageLoad\n\n    // from.name:\n    // - Vue 2: null\n    // - Vue 3: undefined\n    // - Nuxt: undefined\n    // hence only '==' instead of '===', because `undefined == null` evaluates to `true`\n    const isPageLoadNavigation =\n      (from.name == null && from.matched.length === 0) || (from.name === undefined && isFirstPageLoad);\n\n    if (isFirstPageLoad) {\n      isFirstPageLoad = false;\n    }\n\n    const attributes = {\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.vue',\n    };\n\n    for (const key of Object.keys(to.params)) {\n      attributes[`params.${key}`] = to.params[key];\n    }\n    for (const key of Object.keys(to.query)) {\n      const value = to.query[key];\n      if (value) {\n        attributes[`query.${key}`] = value;\n      }\n    }\n\n    // Determine a name for the routing transaction and where that name came from\n    let spanName = to.path;\n    let transactionSource = 'url';\n    if (to.name && options.routeLabel !== 'path') {\n      spanName = to.name.toString();\n      transactionSource = 'custom';\n    } else if (to.matched.length > 0) {\n      const lastIndex = to.matched.length - 1;\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      spanName = to.matched[lastIndex].path;\n      transactionSource = 'route';\n    }\n\n    getCurrentScope().setTransactionName(spanName);\n\n    if (options.instrumentPageLoad && isPageLoadNavigation) {\n      const activeRootSpan = getActiveRootSpan();\n      if (activeRootSpan) {\n        const existingAttributes = spanToJSON(activeRootSpan).data || {};\n        if (existingAttributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] !== 'custom') {\n          activeRootSpan.updateName(spanName);\n          activeRootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, transactionSource);\n        }\n        // Set router attributes on the existing pageload transaction\n        // This will override the origin, and add params & query attributes\n        activeRootSpan.setAttributes({\n          ...attributes,\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.vue',\n        });\n      }\n    }\n\n    if (options.instrumentNavigation && !isPageLoadNavigation) {\n      attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = transactionSource;\n      attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] = 'auto.navigation.vue';\n      startNavigationSpanFn({\n        name: spanName,\n        op: 'navigation',\n        attributes,\n      });\n    }\n\n    // Vue Router 4 no longer exposes the `next` function, so we need to\n    // check if it's available before calling it.\n    // `next` needs to be called in Vue Router 3 so that the hook is resolved.\n    if (next) {\n      next();\n    }\n  });\n}\n\nfunction getActiveRootSpan() {\n  const span = getActiveSpan();\n  const rootSpan = span && getRootSpan(span);\n\n  if (!rootSpan) {\n    return undefined;\n  }\n\n  const op = spanToJSON(rootSpan).op;\n\n  // Only use this root span if it is a pageload or navigation span\n  return op === 'navigation' || op === 'pageload' ? rootSpan : undefined;\n}\n\nexport { instrumentVueRouter };\n//# sourceMappingURL=router.js.map\n","import { browserTracingIntegration as browserTracingIntegration$1, startBrowserTracingNavigationSpan } from '@sentry/browser';\nimport { instrumentVueRouter } from './router.js';\n\n// The following type is an intersection of the Route type from VueRouter v2, v3, and v4.\n// This is not great, but kinda necessary to make it work with all versions at the same time.\n\n/**\n * A custom browser tracing integrations for Vue.\n */\nfunction browserTracingIntegration(options = {}) {\n  // If router is not passed, we just use the normal implementation\n  if (!options.router) {\n    return browserTracingIntegration$1(options);\n  }\n\n  const integration = browserTracingIntegration$1({\n    ...options,\n    instrumentNavigation: false,\n  });\n\n  const { router, instrumentNavigation = true, instrumentPageLoad = true, routeLabel = 'name' } = options;\n\n  return {\n    ...integration,\n    afterAllSetup(client) {\n      integration.afterAllSetup(client);\n\n      const startNavigationSpan = (options) => {\n        startBrowserTracingNavigationSpan(client, options);\n      };\n\n      instrumentVueRouter(router, { routeLabel, instrumentNavigation, instrumentPageLoad }, startNavigationSpan);\n    },\n  };\n}\n\nexport { browserTracingIntegration };\n//# sourceMappingURL=browserTracingIntegration.js.map\n","import type * as Sentry from '@sentry/vue'\n\n/**\n * Most of the client errors are not important to track in Sentry\n * It could be helpful only in rare cases, so it is better to ignore most of them\n */\nexport const SENTRY_ERROR_CODES_TO_IGNORE = new Set([\n  401, // Unauthorized\n  403, // Forbidden\n  404, // Not found\n  422, // Unprocessable Content\n])\n\n/**\n * Sentry callback to skip sending certain types of errors to Sentry\n * @param event\n * @param hint\n * @returns\n */\nexport function beforeSend(event: Sentry.ErrorEvent, hint: Sentry.EventHint) {\n  const error = hint && hint.originalException\n  if (error && (error as any).response) {\n    const { response } = error as any\n    const statusCode = response.status\n    if (SENTRY_ERROR_CODES_TO_IGNORE.has(statusCode)) {\n      // Discard event\n      return null\n    }\n  }\n  return event\n}\n","import * as Sentry from '@sentry/vue'\nimport { beforeSend } from '~/utils/errors'\n\nexport default defineNuxtPlugin((nuxtApp) => {\n  const { enabled, dsn, environment, tracesSampleRate } =\n    useRuntimeConfig().public.sentry\n\n  if (!enabled) return\n  if (!dsn)\n    return console.warn(\n      'Sentry DSN not set, skipping Sentry initialization from client',\n    )\n\n  console.log('Sentry DSN set, initializing Sentry from client')\n\n  Sentry.init({\n    beforeSend,\n    dsn,\n    environment,\n    app: nuxtApp.vueApp,\n    integrations: [\n      Sentry.browserTracingIntegration({ router: useRouter() }),\n      Sentry.replayIntegration(),\n    ],\n    tracesSampleRate: tryParseFloat(tracesSampleRate) ?? 0.1,\n    replaysSessionSampleRate: 0, // no need to store all session replay, only on errors\n    replaysOnErrorSampleRate: 0.3,\n    denyUrls: [\n      /google/i,\n      /bugherd\\.com/i,\n      /sentry\\.io/i,\n      /extensions\\//i,\n      /^chrome:\\/\\//i,\n      /^chrome-extension:\\/\\//i,\n    ],\n    ignoreErrors: [\n      'ResizeObserver loop limit exceeded',\n      'ResizeObserver loop completed with undelivered notifications.',\n    ],\n  })\n})\n","import type { DirectiveBinding } from 'vue'\nimport type { Handlers } from '~/resources/tracking'\n\nexport default defineNuxtPlugin((nuxtApp) => {\n  nuxtApp.vueApp.directive('track', {\n    mounted(el, binding) {\n      const [group] = binding.arg?.split(':', 2) || []\n      if (group === 'impression') {\n        setupTrackingImpressionObserver(el, binding, useTracking().handlers!)\n      }\n    },\n  })\n  nuxtApp.vueApp.directive('impression', {\n    mounted(el, binding) {\n      // console.log(' *** setting up impression observer ***', binding)\n\n      let threshold = Object.keys(binding.modifiers)\n        .map((modifier) => parseInt(modifier))\n        .filter((modifier) => typeof modifier === 'number')\n        .map((modifier) => modifier / 100)\n      if (!threshold.length) threshold = [0.5]\n\n      let handler = ''\n      if (binding.arg) {\n        handler =\n          binding.arg.split(':').length === 1\n            ? `impression:${binding.arg}`\n            : binding.arg\n      }\n      // if (typeof binding.value === 'string') {\n      //   handler = binding.value\n      // } else\n      // if (typeof binding.value === 'function') {\n      //   cbfunc = binding.value\n      // } else {\n      // const arg =\n      // }\n      // else if (Array.isArray(binding.value)) {\n      //   if (binding.value.length >= 1 && typeof binding.value[0] === 'string' && !handler) {\n      //     handler = binding.value.shift()\n      //   }\n      //   arg = binding.value\n      // } else if (typeof binding.value === 'object') {\n      // arg = binding.value.params\n      // }\n\n      setupImpressionObserver(\n        el,\n        threshold,\n        useTracking().handlers!,\n        handler,\n        binding.value,\n      )\n    },\n  })\n})\n\nfunction setupTrackingImpressionObserver(\n  el: Element,\n  binding: DirectiveBinding,\n  handlers: Handlers,\n) {\n  if (!window.IntersectionObserver) {\n    return\n  }\n  const thresholds = Object.keys(binding.modifiers)\n    .map((modifier) => parseInt(modifier))\n    .filter((modifier) => typeof modifier === 'number')\n    .map((modifier) => modifier / 100)\n  const options = { threshold: thresholds.length ? thresholds : [0.5] }\n\n  const callback = (\n    entries: IntersectionObserverEntry[],\n    observer: IntersectionObserver,\n  ) => {\n    entries.forEach((entry) => {\n      if (entry.isIntersecting) {\n        if (options.threshold.length === 1) {\n          // Wenn mehrere thresholds definiert sind, dürfen wir nicht nach einem Event abbrechen.\n          // Wenn nur einer definiert ist brechen wir ab, da hier nachfolgende Events keinen Mehrwert liefern.\n          observer.disconnect()\n        }\n\n        const bindings = Array.isArray(binding.value)\n          ? binding.value\n          : [binding.value]\n        bindings.forEach((eventBinding) =>\n          callHandler(handlers, eventBinding, entry),\n        )\n      }\n    })\n  }\n\n  const observer = new IntersectionObserver(callback, options)\n\n  observer.observe(el)\n}\n\nfunction callHandler(\n  handlers: Handlers,\n  binding: string | { event: string; args?: unknown[]; params: unknown },\n  entry: IntersectionObserverEntry,\n) {\n  const { event, args, params } =\n    typeof binding === 'string' ? { event: binding } : binding\n  const [category, name] = event.split(':')\n  if (!handlers) {\n    console.error(\n      `Tracking handlers are not available when trying to access '${category}' category`,\n    )\n    return\n  }\n  const handlerCategory = handlers[category as keyof typeof handlers]\n  const handler = handlerCategory[\n    name as keyof typeof handlerCategory\n  ] as Function\n  handler?.call(null, ...(args ?? []), { params, entry })\n}\n\nfunction setupImpressionObserver(\n  el: Element,\n  threshold: number[],\n  handlers: Handlers,\n  handler: string,\n  arg: any,\n) {\n  // console.log(' *** setting up impression observer ***', handler, threshold, arg)\n  if (!window.IntersectionObserver) {\n    return\n  }\n  const options = { threshold }\n\n  const callback = (\n    entries: IntersectionObserverEntry[],\n    observer: IntersectionObserver,\n  ) => {\n    entries.forEach((entry) => {\n      if (entry.isIntersecting) {\n        if (options.threshold.length === 1) {\n          // Wenn mehrere thresholds definiert sind, dürfen wir nicht nach einem Event abbrechen.\n          // Wenn nur einer definiert ist brechen wir ab, da hier nachfolgende Events keinen Mehrwert liefern.\n          observer.disconnect()\n        }\n        if (typeof arg === 'function') {\n          arg({\n            ratio: entry.intersectionRatio,\n            threshold: observer.thresholds,\n          })\n        }\n        if (handler) {\n          const [category, name] = handler.split(':')\n          const handlerCategory = handlers[category as keyof typeof handlers]\n          // TODO: Was ist mit arg?\n          ;(handlerCategory[name as keyof typeof handlerCategory] as Function)({\n            data: arg,\n            entry,\n            thresholds: observer.thresholds,\n          })\n        }\n      }\n    })\n  }\n\n  const observer = new IntersectionObserver(callback, options)\n\n  observer.observe(el)\n}\n","import revive_payload_client_4sVQNw7RlN from \"/myapp/node_modules/nuxt/dist/app/plugins/revive-payload.client.js\";\nimport unhead_KgADcZ0jPj from \"/myapp/node_modules/nuxt/dist/head/runtime/plugins/unhead.js\";\nimport router_CaKIoANnI2 from \"/myapp/node_modules/nuxt/dist/app/plugins/router.js\";\nimport params_plugin_dpdsDh23tL from \"/myapp/modules/params/params.plugin.ts\";\nimport runtime_screen_plugin_533699b7_Tw2FoQhacS from \"/myapp/.nuxt/runtime.screen.plugin.533699b7.ts\";\nimport i18n_VfGcjrvSkj from \"/myapp/plugins/i18n.ts\";\nimport stores_BlraoXqTo0 from \"/myapp/plugins/stores.ts\";\nimport vue_query_wrmMkNpEpe from \"/myapp/plugins/vue-query.ts\";\nimport payload_client_yVLowv6hDl from \"/myapp/node_modules/nuxt/dist/app/plugins/payload.client.js\";\nimport navigation_repaint_client_bs2bWDGRIE from \"/myapp/node_modules/nuxt/dist/app/plugins/navigation-repaint.client.js\";\nimport check_outdated_build_client_8vK7RkfGxZ from \"/myapp/node_modules/nuxt/dist/app/plugins/check-outdated-build.client.js\";\nimport chunk_reload_client_UciE0i6zes from \"/myapp/node_modules/nuxt/dist/app/plugins/chunk-reload.client.js\";\nimport plugin_vue3_YdLad5Mpq3 from \"/myapp/node_modules/@pinia/nuxt/dist/runtime/plugin.vue3.js\";\nimport components_plugin_KR1HBZs4kY from \"/myapp/.nuxt/components.plugin.mjs\";\nimport plugin_client_RZVNejKJBe from \"/myapp/node_modules/@samk-dev/nuxt-vcalendar/dist/runtime/plugin.client.js\";\nimport unleash_plugin_client_FsacaZbo7x from \"/myapp/modules/unleash/runtime/unleash.plugin.client.ts\";\nimport plugin_client_Fdvg3o8568 from \"/myapp/node_modules/@nuxtjs/web-vitals/dist/runtime/plugin.client.mjs\";\nimport floating_vue_EIcJ7xiw0h from \"/myapp/.nuxt/floating-vue.mjs\";\nimport vue3_toastify_plugin_client_rOZcJZoOUW from \"/myapp/modules/toaster/runtime/vue3-toastify.plugin.client.ts\";\nimport colors_SVBUrxEU7r from \"/myapp/plugins/colors.ts\";\nimport sentry_client_shVUlIjFLk from \"/myapp/plugins/sentry.client.ts\";\nimport tracking_RJtqiU4YuV from \"/myapp/plugins/tracking.ts\";\nexport default [\n  revive_payload_client_4sVQNw7RlN,\n  unhead_KgADcZ0jPj,\n  router_CaKIoANnI2,\n  params_plugin_dpdsDh23tL,\n  runtime_screen_plugin_533699b7_Tw2FoQhacS,\n  i18n_VfGcjrvSkj,\n  stores_BlraoXqTo0,\n  vue_query_wrmMkNpEpe,\n  payload_client_yVLowv6hDl,\n  navigation_repaint_client_bs2bWDGRIE,\n  check_outdated_build_client_8vK7RkfGxZ,\n  chunk_reload_client_UciE0i6zes,\n  plugin_vue3_YdLad5Mpq3,\n  components_plugin_KR1HBZs4kY,\n  plugin_client_RZVNejKJBe,\n  unleash_plugin_client_FsacaZbo7x,\n  plugin_client_Fdvg3o8568,\n  floating_vue_EIcJ7xiw0h,\n  vue3_toastify_plugin_client_rOZcJZoOUW,\n  colors_SVBUrxEU7r,\n  sentry_client_shVUlIjFLk,\n  tracking_RJtqiU4YuV\n]","<template>\n  <div\n    :key=\"componentKey\"\n    :class=\"[{ 'border-txt-weak': onFocus }, sizeclasses, classes]\"\n    class=\"relative w-full cursor-text rounded border border-txt-weaker bg-bgr px-3 transition-all duration-200\"\n    @click=\"input?.focus()\"\n  >\n    <input\n      v-bind=\"$attrs\"\n      :id=\"id\"\n      ref=\"input\"\n      :placeholder=\"placeholder\"\n      :name=\"name\"\n      :type=\"type\"\n      :value=\"modelValue\"\n      class=\"h-full w-full border-none p-0 text-base leading-5 outline-none ring-0 focus:outline-none focus:ring-0\"\n      :class=\"{\n        valid: valid === true,\n        invalid: valid === false,\n        'mt-2': size !== 'sm',\n        'pl-6': size === 'sm' && icon && !label,\n      }\"\n      @input=\"\n        $emit('update:modelValue', ($event.target as HTMLInputElement).value)\n      \"\n      @change=\"\n        $emit('update:modelValue', ($event.target as HTMLInputElement).value)\n      \"\n      @focus=\"delayedResize(true)\"\n      @blur=\"delayedResize(false)\"\n    />\n\n    <WebccIcon\n      v-if=\"!label && icon && size === 'sm'\"\n      :name=\"icon\"\n      class=\"pointer-events-none absolute left-2 top-0 h-full w-4 text-txt opacity-60\"\n      aria-hidden=\"true\"\n    />\n\n    <label\n      v-if=\"label\"\n      class=\"absolute left-0 top-1/2 w-full -translate-y-1/2 cursor-text overflow-hidden text-ellipsis whitespace-nowrap px-3 text-left text-sm font-medium text-txt-weak transition-all duration-300\"\n      :for=\"id\"\n      :class=\"{\n        'top-2 translate-y-0 text-xs': onFocus || hasValue || placeholder,\n      }\"\n    >\n      <WebccIcon\n        v-if=\"icon\"\n        :name=\"icon\"\n        class=\"pointer-events-none absolute h-full w-4 text-txt opacity-60\"\n        aria-hidden=\"true\"\n      />\n      <span\n        ref=\"labelText\"\n        v-tooltip=\"{\n          content: $t(label as TranslationKey),\n          triggers: [],\n          shown: showTooltip && labelHover,\n        }\"\n        :class=\"{ 'pl-6': icon }\"\n        @mouseover=\"labelHover = true\"\n        @mouseleave=\"labelHover = false\"\n      >\n        <span>{{ $t(label as TranslationKey) }}</span>\n        <sup v-if=\"required\">*</sup>\n      </span>\n    </label>\n    <transition name=\"slide\">\n      <WebccIcon\n        v-if=\"valid === true\"\n        name=\"site/tick\"\n        class=\"absolute right-5 top-1/2 h-4 w-4 -translate-y-1/2 text-suc\"\n        :filled=\"false\"\n      />\n    </transition>\n    <transition name=\"slide\">\n      <WebccIcon\n        v-if=\"valid === false\"\n        name=\"site/cross\"\n        class=\"absolute right-5 top-1/2 h-4 w-4 -translate-y-1/2 text-err\"\n        :filled=\"false\"\n      />\n    </transition>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\ntype Type =\n  | 'text'\n  | 'password'\n  | 'date'\n  | 'email'\n  | 'number'\n  | 'url'\n  | 'tel'\n  | 'search'\n  | 'color'\n\ninterface Props {\n  required?: boolean | string\n  name: string\n  label?: string\n  placeholder?: string\n  icon?: string\n  modelValue?: string | number\n  size?: 'md' | 'sm'\n  type?: Type\n  valid?: boolean | undefined\n  classes?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  required: false,\n  label: '',\n  placeholder: '',\n  icon: '',\n  size: 'md',\n  type: 'text',\n  valid: undefined,\n  modelValue: '',\n  classes: '',\n})\n\ndefineEmits<{ (e: 'update:modelValue', value: string): void }>()\n\nconst componentKey = ref(props.name)\nconst onFocus = ref(false)\nconst id = useId()\nconst labelWidth = ref('')\nconst inputWidth = ref('')\nconst labelHover = ref(false)\n\nconst input: Ref<HTMLInputElement | null> = ref(null)\nconst labelText: Ref<HTMLSpanElement | null> = ref(null)\n\nconst hasValue = computed(() => {\n  return !!props.modelValue\n})\n\nconst sizeclasses = computed(() => {\n  switch (props.size) {\n    case 'md':\n      return props.label === '' ? 'h-11 text-base py-4' : 'h-14 text-base py-4'\n    case 'sm':\n      return 'h-10'\n    default:\n      return ''\n  }\n})\n\nconst showTooltip = computed(() => {\n  return labelWidth.value > inputWidth.value\n})\n\nonMounted(() => {\n  handleResize()\n  window.addEventListener('resize', handleResize)\n  componentKey.value += props.modelValue.toString() // force rerender to compute label classes, etc.\n})\n\nonBeforeUnmount(() => {\n  window.removeEventListener('resize', handleResize)\n})\n\nfunction handleResize() {\n  if (labelText.value && input) {\n    labelWidth.value = labelText.value!.offsetWidth.toString()\n    inputWidth.value = input.value!.offsetWidth.toString()\n  }\n}\n\nfunction delayedResize(focus: boolean) {\n  onFocus.value = focus\n  setTimeout(handleResize, 310)\n}\n</script>\n\n<style scoped>\n.slide-enter-active {\n  animation: slide 0.3s ease-out;\n}\n.slide-leave-active {\n  animation: slide 0.3s ease-out reverse;\n}\n@keyframes slide {\n  0% {\n    opacity: 0;\n    transform: translate(50%, -50%) scale(0.8);\n  }\n  100% {\n    opacity: 1;\n    transform: translate(0, -50%) scale(1);\n  }\n}\n</style>\n","<template>\n  <span\n    v-if=\"props.type === 'circle'\"\n    class=\"circle rounded-full ease-linear\"\n    :class=\"{\n      'border-white border-t-cta': props.cta,\n      'border-white border-t-thm': !props.cta,\n      'h-32 w-32 border-8': props.size === 'md',\n      'h-6 w-6 border-4': props.size === 'sm',\n    }\"\n  />\n  <div v-else-if=\"props.type === 'blocks'\" class=\"bg-bgr-100 opacity-100\">\n    <div class=\"flex h-full flex-col items-center justify-center\">\n      <div\n        class=\"blocks relative inline-block h-16 w-16 origin-bottom-left justify-center overflow-hidden border border-thm\"\n      >\n        <div class=\"absolute left-0 top-8 h-1/2 w-1/2 bg-thm\" />\n        <div class=\"block-2 absolute left-8 top-8 h-1/2 w-1/2 bg-thm\" />\n        <div class=\"block-3 absolute left-0 top-0 h-1/2 w-1/2 bg-thm\" />\n        <div class=\"block-4 absolute left-8 top-0 h-1/2 w-1/2 bg-thm\" />\n      </div>\n      <div\n        v-if=\"props.message\"\n        class=\"mt-4 border-y border-thm bg-bgr-100 p-4 text-base text-thm\"\n      >\n        {{ props.message }}\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n  cta?: boolean\n  type?: string\n  message?: string\n  size?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  cta: false,\n  type: 'circle',\n  message: '',\n  size: 'md',\n})\n</script>\n\n<style scoped>\n.circle {\n  -webkit-animation: spinner 1.5s linear infinite;\n  animation: spinner 1.5s linear infinite;\n}\n\n.blocks {\n  animation: shrink-rectangles 4s linear infinite;\n}\n.block-2 {\n  animation: rectangle-2 2s linear infinite;\n}\n.block-3 {\n  animation: rectangle-3 2s linear infinite;\n}\n.block-4 {\n  animation: rectangle-4 2s linear infinite;\n}\n\n@-webkit-keyframes spinner {\n  0% {\n    -webkit-transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n  }\n}\n\n@keyframes spinner {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@keyframes shrink-rectangles {\n  0%,\n  90% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(0.5);\n  }\n}\n@keyframes rectangle-2 {\n  0% {\n    transform: translateY(-50px);\n  }\n  25%,\n  100% {\n    transform: translate(0);\n  }\n}\n@keyframes rectangle-3 {\n  0% {\n    transform: translateY(-50px);\n  }\n  50%,\n  100% {\n    transform: translate(0);\n  }\n}\n@keyframes rectangle-4 {\n  0% {\n    transform: translateY(-50px);\n  }\n  75%,\n  100% {\n    transform: translate(0);\n  }\n}\n</style>\n","<template>\n  <button\n    class=\"rounded focus:outline-none focus:ring-2 focus:ring-offset-2\"\n    :class=\"classes\"\n    :disabled=\"disabled || loading\"\n  >\n    <div\n      class=\"flex items-center justify-center\"\n      :class=\"loading ? 'opacity-0' : 'opacity-100'\"\n    >\n      <WebccIcon\n        v-if=\"icon\"\n        :class=\"iconClasses\"\n        :name=\"icon\"\n        :filled=\"iconFilled\"\n      />\n      <slot>\n        <span v-if=\"tr\">{{ $t(tr) }}</span>\n        <span v-else>{{ label }}</span>\n      </slot>\n    </div>\n    <div\n      v-if=\"loading\"\n      class=\"absolute inset-0 flex items-center justify-center\"\n    >\n      <WebccLoader :cta=\"variant === 'cta'\" type=\"circle\" size=\"sm\" />\n    </div>\n  </button>\n</template>\n\n<script setup lang=\"ts\">\ntype Variant = 'theme' | 'cta' | 'white' | 'grey' | ''\n\nconst VARIANT_BASED_CLASSES: Record<\n  Variant,\n  { outline: string; framed: string; default: string }\n> = {\n  theme: {\n    outline:\n      'bg-bgr text-thm border border-thm transition hover:bg-thm hover:text-thm-contrast focus:bg-thm focus:text-thm-contrast focus:ring-thm',\n    framed:\n      'bg-thm text-thm-contrast border border-thm-contrast transition hover:bg-thm-hover focus:bg-thm-hover focus:ring-thm-hover',\n    default:\n      'bg-thm text-thm-contrast hover:bg-thm-hover transition focus:bg-thm-hover disabled:grayscale-50 focus:ring-thm-hover',\n  },\n  cta: {\n    outline:\n      'bg-bgr text-cta border border-cta hover:bg-cta transition hover:text-cta-contrast focus:bg-cta focus:text-cta-contrast focus:ring-cta',\n    framed:\n      'bg-cta text-cta-contrast border border-cta-contrast transition hover:bg-cta-hover focus:bg-cta-hover focus:ring-cta-hover',\n    default:\n      'bg-cta text-cta-contrast hover:bg-cta-hover transition focus:bg-cta-hover focus:ring-cta-hover',\n  },\n  white: {\n    outline:\n      'bg-bgr text-txt border border-bgr-300 transition hover:bg-bgr-100 hover:text-txt-stronger hover:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger focus:border-bgr-700 focus:ring-bgr-100',\n    framed:\n      'bg-bgr text-txt border border-txt hover:bg-bgr-100 transition hover:text-txt-stronger hover:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger focus:border-bgr-700 focus:ring-bgr-100',\n    default:\n      'bg-bgr text-txt hover:bg-bgr-100  transition focus:bg-bgr-100 focus:text-txt-stronger focus:ring-bgr-100',\n  },\n  grey: {\n    outline:\n      'bg-bgr-200 text-txt border border-bgr-300 transition hover:bg-bgr-100 hover:text-txt-stronger hover:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger focus:border-bgr-700 focus:ring-bgr-100',\n    framed:\n      'text-txt transition focus:text-txt-stronger focus:ring-bgr-100 border border-bgr-300 bg-bgr-100 hover:border-bgr-400 hover:bg-bgr-300 focus:bg-bgr-300',\n    default:\n      'bg-bgr-200 text-txt transition hover:bg-bgr-400 focus:bg-bgr-400 focus:text-txt-weak focus:ring-bgr-100 border border-bgr-500 disabled:border-transparent disabled:bg-bgr-100 disabled:hover:bg-bgr-100',\n  },\n  '': {\n    outline:\n      'bg-bgr-200 text-txt border border-bgr-300 transition hover:bg-bgr-100 hover:text-txt-stronger hover:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger focus:border-bgr-700 focus:ring-bgr-100',\n    framed:\n      'bg-bgr-200 text-txt border border-txt transition hover:bg-bgr-100 hover:text-txt-stronger hover:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger focus:border-bgr-700 focus:ring-bgr-100',\n    default:\n      'bg-bgr-200 text-txt transition hover:bg-bgr-100  focus:bg-bgr-100 focus:text-txt-stronger focus:ring-bgr-100',\n  },\n}\n\nconst SIZE_BASED_CLASSES = {\n  sm: {\n    size: 'py-1 px-2 md:px-3 md:py-1.5 text-sm',\n    icon: '-ml-1 h-4 w-4 mr-1',\n  },\n  md: {\n    size: 'px-3 md:px-4 py-1.5 text-sm md:text-base',\n    icon: '-ml-1.5 h-5 w-5 mr-2',\n  },\n  lg: { size: 'px-4 py-2 text-lg', icon: '-ml-1.5 h-6 w-6 mr-2' },\n}\n\ninterface Props {\n  label?: string\n  variant?: Variant\n  size?: Size\n  icon?: string\n  iconFilled?: boolean\n  disabled?: boolean\n  loading?: boolean\n  tr?: TranslationKey\n  outline?: boolean\n  framed?: boolean\n  round?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  label: '',\n  variant: '',\n  size: 'md',\n  icon: undefined,\n  iconFilled: false,\n  tr: undefined,\n})\n\nconst noText = computed(\n  () => props.icon && !props.label && !Object.keys(useSlots()).length,\n)\n\nconst iconClasses = computed(() =>\n  noText.value ? 'h-5 w-5' : SIZE_BASED_CLASSES[props.size].icon,\n)\n\nconst classes = computed(() => {\n  const fontClasses = ['cta', 'theme'].includes(props.variant)\n    ? // To improve website accessibility, all cta and theme buttons should always have font weight 700.\n      // see https://jira.migros.net/browse/IHGWEBCC-1553?focusedId=67593897&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-67593897\n      'font-bold'\n    : props.size !== 'sm'\n      ? 'font-light'\n      : ''\n  const {\n    outline,\n    framed,\n    default: _default,\n  } = VARIANT_BASED_CLASSES[props.variant]\n\n  return [\n    'disabled:cursor-not-allowed disabled:shadow-none disabled:opacity-70',\n    noText.value\n      ? 'px-2 py-2'\n      : [SIZE_BASED_CLASSES[props.size].size, fontClasses],\n    props.outline ? outline : props.framed ? framed : _default,\n    props.icon || props.loading ? 'flex items-center' : '',\n    props.loading ? 'opacity-70 relative' : '',\n    props.round ? 'rounded-full' : '',\n    props.disabled ? 'disabled' : '',\n  ].flat()\n})\n</script>\n","<template>\n  <form\n    v-if=\"\n      confData.siteSettings?.includes('newsletter') && confData.signupEnabled\n    \"\n    v-track:impression=\"{ event: `homepage:newsletterBannerImpression` }\"\n    :action=\"newsletterAction\"\n    method=\"POST\"\n    class=\"bg-thm\"\n  >\n    <div\n      class=\"container-fluid-lg flex h-auto max-w-[95vw] flex-col items-center justify-start gap-x-16 py-8 lg:flex-row\"\n    >\n      <div class=\"max-w-3xl lg:max-w-[50%]\">\n        <div\n          class=\"flex h-full w-fit flex-col items-center justify-start gap-4\"\n        >\n          <div class=\"flex w-full flex-row items-center\">\n            <WebccIcon\n              name=\"site/mail-open\"\n              class=\"h-8 w-8 shrink-0 text-txt-contrast md:h-10 md:w-10\"\n            />\n            <div\n              class=\"flex h-auto flex-auto flex-row justify-start bg-thm pl-2 text-start text-2xl font-medium text-txt-contrast sm:mx-2\"\n            >\n              {{ $t(`${trPrefix}title`) }}\n            </div>\n          </div>\n          <span class=\"mb-6 text-xl text-txt-contrast\">{{\n            $t(`${trPrefix}text`)\n          }}</span>\n        </div>\n      </div>\n      <div\n        class=\"flex w-full max-w-3xl flex-col items-center justify-end gap-4 md:flex-row md:gap-0\"\n      >\n        <WebccInput\n          v-model=\"emailaddress\"\n          :label=\"`${trPrefix}emailPlaceholder`\"\n          name=\"email\"\n          type=\"email\"\n          class=\"md:rounded-r-none\"\n        />\n        <WebccButton\n          variant=\"cta\"\n          size=\"lg\"\n          class=\"h-14 w-full md:w-64 md:rounded-l-none\"\n          @click=\"subscribeTracking\"\n        >\n          <span>{{ $t(`${trPrefix}cta`) }}</span>\n        </WebccButton>\n      </div>\n    </div>\n  </form>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.site.FooterNewsletterSignup.'\n\nconst emailaddress = ref('')\nconst { buildNewsletterUrl } = useURLs()\nconst confData = useConfdata()\n\nconst subscribeTracking = () => {\n  useTracking().handlers?.homepage.newsletterBannerSubscribe()\n}\n\nconst newsletterAction = computed(() => {\n  return buildNewsletterUrl()\n})\n</script>\n","export default function useScreen() {\n  return useNuxtApp().$screen\n}\n","<template>\n  <main>\n    <!-- The blue bar - displayed only in non-iframe mode -->\n    <div\n      v-if=\"!iframe\"\n      class=\"absolute -z-1 mt-[34rem] hidden h-[448px] w-full bg-thm-light lg:block\"\n    ></div>\n\n    <Blocks :blocks=\"blocks\" class=\"mb-20 flex flex-col gap-12\" />\n\n    <StartNewsletterSignup v-if=\"!iframe\" />\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst newlyRendered = ref(true)\n\nconst iframe = computed(() => useParams().iframe)\nconst menuToggle = computed(() => useToggler().toggles('menu'))\nconst blocks = computed(() => useConfdata().body ?? [])\n\nonMounted(async () => {\n  await nextTick(() => {\n    // Site gets newly rendered -> so call the navigateToAnchor function\n    newlyRendered.value = true\n    navigateToAnchor()\n  })\n})\n\nwatch(menuToggle, (newValue) => {\n  if (!newValue) {\n    // Check if the site was newly rendered\n    if (!newlyRendered.value) {\n      // Scroll to anchor\n      navigateToAnchor()\n    }\n  }\n})\n\nconst md = useScreen().breakpoints.smaller('md')\n\nfunction navigateToAnchor() {\n  nextTick(() => {\n    // Check if the device is a mobile device via the window width\n    if (\n      md.value ||\n      useUseragent().useragent?.browser.name?.includes('Safari')\n    ) {\n      // Because of the animation in the mobile menu we need to check the route and wait for the animation to finish\n      if (useRoute().hash) {\n        // Get hash without the hash\n        const hashSplit = useRoute().hash.split('#')\n        const hashRef = hashSplit[1]\n\n        // Scroll to section with id\n        const element = document.getElementById(hashRef)\n        if (element) {\n          element.scrollIntoView()\n        } else {\n          console.log('Element not found')\n        }\n\n        newlyRendered.value = false\n      }\n    }\n  })\n}\n</script>\n","<template>\n  <div\n    class=\"relative w-full cursor-pointer\"\n    role=\"button\"\n    @click=\"$emit('click')\"\n  >\n    <div\n      class=\"flex items-center h-12 w-full pl-12 pr-4 gap-4 rounded border border-bgr-300 text-sm font-semibold truncate placeholder:font-normal placeholder:text-txt-weak transition hover:bg-bgr-100 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover focus:border-thm-hover\"\n    ></div>\n\n    <div\n      class=\"absolute top-0 right-0 rounded-full h-8 w-8 border border-bgr-300 bg-bgr-200 mr-4 mt-2 flex items-center justify-center\"\n    >\n      <WebccIcon name=\"site/edit\" class=\"w-6 h-6\" />\n    </div>\n\n    <div class=\"absolute top-0 left-0 ml-4 my-1 flex flex-col gap-0.5\">\n      <p class=\"text-sm\">\n        {{ suggestion?.label || $t(`${trPrefix}placeholders.where`) }}\n      </p>\n\n      <p class=\"flex gap-2 items-center\">\n        <WebccIcon name=\"site/calendar\" class=\"w-4 h-4\" />\n\n        <span class=\"text-xs\">\n          {{ tripText || $t(`${trPrefix}placeholders.when`) }}\n        </span>\n        <span class=\"h-4 w-[1px] bg-bgr-900\"></span>\n\n        <WebccIcon name=\"site/pax\" class=\"w-4 h-4\" />\n\n        <span class=\"text-xs\">\n          {{ $t(`${trPrefix}pax_s`, pax) }}\n        </span>\n      </p>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { SearchApiSuggestion } from '~/api/search-api.types'\n\nconst trPrefix = 'www.components.elements.SearchBox.'\n\nconst props = defineProps<{\n  suggestion?: SearchApiSuggestion\n  pax?: number\n  period?: DatePeriod\n}>()\n\ndefineEmits<{ (e: 'click'): void }>()\n\nconst tripText = useDatesTripText(props.period)\n</script>\n","function memo(getDeps, fn, opts) {\n  let deps = opts.initialDeps ?? [];\n  let result;\n  return () => {\n    var _a, _b, _c, _d;\n    let depTime;\n    if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();\n    const newDeps = getDeps();\n    const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n    if (!depsChanged) {\n      return result;\n    }\n    deps = newDeps;\n    let resultTime;\n    if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();\n    result = fn(...newDeps);\n    if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {\n      const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n      const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n      const resultFpsPercentage = resultEndTime / 16;\n      const pad = (str, num) => {\n        str = String(str);\n        while (str.length < num) {\n          str = \" \" + str;\n        }\n        return str;\n      };\n      console.info(\n        `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n        `\n            font-size: .6rem;\n            font-weight: bold;\n            color: hsl(${Math.max(\n          0,\n          Math.min(120 - 120 * resultFpsPercentage, 120)\n        )}deg 100% 31%);`,\n        opts == null ? void 0 : opts.key\n      );\n    }\n    (_d = opts == null ? void 0 : opts.onChange) == null ? void 0 : _d.call(opts, result);\n    return result;\n  };\n}\nfunction notUndefined(value, msg) {\n  if (value === void 0) {\n    throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n  } else {\n    return value;\n  }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1;\nconst debounce = (targetWindow, fn, ms) => {\n  let timeoutId;\n  return function(...args) {\n    targetWindow.clearTimeout(timeoutId);\n    timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n  };\n};\nexport {\n  approxEqual,\n  debounce,\n  memo,\n  notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { debounce, memo, notUndefined, approxEqual } from \"./utils.js\";\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n  const start = Math.max(range.startIndex - range.overscan, 0);\n  const end = Math.min(range.endIndex + range.overscan, range.count - 1);\n  const arr = [];\n  for (let i = start; i <= end; i++) {\n    arr.push(i);\n  }\n  return arr;\n};\nconst observeElementRect = (instance, cb) => {\n  const element = instance.scrollElement;\n  if (!element) {\n    return;\n  }\n  const targetWindow = instance.targetWindow;\n  if (!targetWindow) {\n    return;\n  }\n  const handler = (rect) => {\n    const { width, height } = rect;\n    cb({ width: Math.round(width), height: Math.round(height) });\n  };\n  handler(element.getBoundingClientRect());\n  if (!targetWindow.ResizeObserver) {\n    return () => {\n    };\n  }\n  const observer = new targetWindow.ResizeObserver((entries) => {\n    const entry = entries[0];\n    if (entry == null ? void 0 : entry.borderBoxSize) {\n      const box = entry.borderBoxSize[0];\n      if (box) {\n        handler({ width: box.inlineSize, height: box.blockSize });\n        return;\n      }\n    }\n    handler(element.getBoundingClientRect());\n  });\n  observer.observe(element, { box: \"border-box\" });\n  return () => {\n    observer.unobserve(element);\n  };\n};\nconst addEventListenerOptions = {\n  passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n  const element = instance.scrollElement;\n  if (!element) {\n    return;\n  }\n  const handler = () => {\n    cb({ width: element.innerWidth, height: element.innerHeight });\n  };\n  handler();\n  element.addEventListener(\"resize\", handler, addEventListenerOptions);\n  return () => {\n    element.removeEventListener(\"resize\", handler);\n  };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeElementOffset = (instance, cb) => {\n  const element = instance.scrollElement;\n  if (!element) {\n    return;\n  }\n  const targetWindow = instance.targetWindow;\n  if (!targetWindow) {\n    return;\n  }\n  let offset = 0;\n  const fallback = supportsScrollend ? () => void 0 : debounce(\n    targetWindow,\n    () => {\n      cb(offset, false);\n    },\n    instance.options.isScrollingResetDelay\n  );\n  const createHandler = (isScrolling) => () => {\n    const { horizontal, isRtl } = instance.options;\n    offset = horizontal ? element[\"scrollLeft\"] * (isRtl && -1 || 1) : element[\"scrollTop\"];\n    fallback();\n    cb(offset, isScrolling);\n  };\n  const handler = createHandler(true);\n  const endHandler = createHandler(false);\n  endHandler();\n  element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n  element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n  return () => {\n    element.removeEventListener(\"scroll\", handler);\n    element.removeEventListener(\"scrollend\", endHandler);\n  };\n};\nconst observeWindowOffset = (instance, cb) => {\n  const element = instance.scrollElement;\n  if (!element) {\n    return;\n  }\n  const targetWindow = instance.targetWindow;\n  if (!targetWindow) {\n    return;\n  }\n  let offset = 0;\n  const fallback = supportsScrollend ? () => void 0 : debounce(\n    targetWindow,\n    () => {\n      cb(offset, false);\n    },\n    instance.options.isScrollingResetDelay\n  );\n  const createHandler = (isScrolling) => () => {\n    offset = element[instance.options.horizontal ? \"scrollX\" : \"scrollY\"];\n    fallback();\n    cb(offset, isScrolling);\n  };\n  const handler = createHandler(true);\n  const endHandler = createHandler(false);\n  endHandler();\n  element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n  element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n  return () => {\n    element.removeEventListener(\"scroll\", handler);\n    element.removeEventListener(\"scrollend\", endHandler);\n  };\n};\nconst measureElement = (element, entry, instance) => {\n  if (entry == null ? void 0 : entry.borderBoxSize) {\n    const box = entry.borderBoxSize[0];\n    if (box) {\n      const size = Math.round(\n        box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n      );\n      return size;\n    }\n  }\n  return Math.round(\n    element.getBoundingClientRect()[instance.options.horizontal ? \"width\" : \"height\"]\n  );\n};\nconst windowScroll = (offset, {\n  adjustments = 0,\n  behavior\n}, instance) => {\n  var _a, _b;\n  const toOffset = offset + adjustments;\n  (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n    [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n    behavior\n  });\n};\nconst elementScroll = (offset, {\n  adjustments = 0,\n  behavior\n}, instance) => {\n  var _a, _b;\n  const toOffset = offset + adjustments;\n  (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n    [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n    behavior\n  });\n};\nclass Virtualizer {\n  constructor(opts) {\n    this.unsubs = [];\n    this.scrollElement = null;\n    this.targetWindow = null;\n    this.isScrolling = false;\n    this.scrollToIndexTimeoutId = null;\n    this.measurementsCache = [];\n    this.itemSizeCache = /* @__PURE__ */ new Map();\n    this.pendingMeasuredCacheIndexes = [];\n    this.scrollRect = null;\n    this.scrollOffset = null;\n    this.scrollDirection = null;\n    this.scrollAdjustments = 0;\n    this.elementsCache = /* @__PURE__ */ new Map();\n    this.observer = /* @__PURE__ */ (() => {\n      let _ro = null;\n      const get = () => {\n        if (_ro) {\n          return _ro;\n        }\n        if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n          return null;\n        }\n        return _ro = new this.targetWindow.ResizeObserver((entries) => {\n          entries.forEach((entry) => {\n            this._measureElement(entry.target, entry);\n          });\n        });\n      };\n      return {\n        disconnect: () => {\n          var _a;\n          (_a = get()) == null ? void 0 : _a.disconnect();\n          _ro = null;\n        },\n        observe: (target) => {\n          var _a;\n          return (_a = get()) == null ? void 0 : _a.observe(target, { box: \"border-box\" });\n        },\n        unobserve: (target) => {\n          var _a;\n          return (_a = get()) == null ? void 0 : _a.unobserve(target);\n        }\n      };\n    })();\n    this.range = null;\n    this.setOptions = (opts2) => {\n      Object.entries(opts2).forEach(([key, value]) => {\n        if (typeof value === \"undefined\") delete opts2[key];\n      });\n      this.options = {\n        debug: false,\n        initialOffset: 0,\n        overscan: 1,\n        paddingStart: 0,\n        paddingEnd: 0,\n        scrollPaddingStart: 0,\n        scrollPaddingEnd: 0,\n        horizontal: false,\n        getItemKey: defaultKeyExtractor,\n        rangeExtractor: defaultRangeExtractor,\n        onChange: () => {\n        },\n        measureElement,\n        initialRect: { width: 0, height: 0 },\n        scrollMargin: 0,\n        gap: 0,\n        indexAttribute: \"data-index\",\n        initialMeasurementsCache: [],\n        lanes: 1,\n        isScrollingResetDelay: 150,\n        enabled: true,\n        isRtl: false,\n        ...opts2\n      };\n    };\n    this.notify = (sync) => {\n      var _a, _b;\n      (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n    };\n    this.maybeNotify = memo(\n      () => {\n        this.calculateRange();\n        return [\n          this.isScrolling,\n          this.range ? this.range.startIndex : null,\n          this.range ? this.range.endIndex : null\n        ];\n      },\n      (isScrolling) => {\n        this.notify(isScrolling);\n      },\n      {\n        key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n        debug: () => this.options.debug,\n        initialDeps: [\n          this.isScrolling,\n          this.range ? this.range.startIndex : null,\n          this.range ? this.range.endIndex : null\n        ]\n      }\n    );\n    this.cleanup = () => {\n      this.unsubs.filter(Boolean).forEach((d) => d());\n      this.unsubs = [];\n      this.observer.disconnect();\n      this.scrollElement = null;\n      this.targetWindow = null;\n    };\n    this._didMount = () => {\n      return () => {\n        this.cleanup();\n      };\n    };\n    this._willUpdate = () => {\n      var _a;\n      const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n      if (this.scrollElement !== scrollElement) {\n        this.cleanup();\n        if (!scrollElement) {\n          this.maybeNotify();\n          return;\n        }\n        this.scrollElement = scrollElement;\n        if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n          this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n        } else {\n          this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n        }\n        this.elementsCache.forEach((cached) => {\n          this.observer.observe(cached);\n        });\n        this._scrollToOffset(this.getScrollOffset(), {\n          adjustments: void 0,\n          behavior: void 0\n        });\n        this.unsubs.push(\n          this.options.observeElementRect(this, (rect) => {\n            this.scrollRect = rect;\n            this.maybeNotify();\n          })\n        );\n        this.unsubs.push(\n          this.options.observeElementOffset(this, (offset, isScrolling) => {\n            this.scrollAdjustments = 0;\n            this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? \"forward\" : \"backward\" : null;\n            this.scrollOffset = offset;\n            this.isScrolling = isScrolling;\n            this.maybeNotify();\n          })\n        );\n      }\n    };\n    this.getSize = () => {\n      if (!this.options.enabled) {\n        this.scrollRect = null;\n        return 0;\n      }\n      this.scrollRect = this.scrollRect ?? this.options.initialRect;\n      return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n    };\n    this.getScrollOffset = () => {\n      if (!this.options.enabled) {\n        this.scrollOffset = null;\n        return 0;\n      }\n      this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n      return this.scrollOffset;\n    };\n    this.getFurthestMeasurement = (measurements, index) => {\n      const furthestMeasurementsFound = /* @__PURE__ */ new Map();\n      const furthestMeasurements = /* @__PURE__ */ new Map();\n      for (let m = index - 1; m >= 0; m--) {\n        const measurement = measurements[m];\n        if (furthestMeasurementsFound.has(measurement.lane)) {\n          continue;\n        }\n        const previousFurthestMeasurement = furthestMeasurements.get(\n          measurement.lane\n        );\n        if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n          furthestMeasurements.set(measurement.lane, measurement);\n        } else if (measurement.end < previousFurthestMeasurement.end) {\n          furthestMeasurementsFound.set(measurement.lane, true);\n        }\n        if (furthestMeasurementsFound.size === this.options.lanes) {\n          break;\n        }\n      }\n      return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n        if (a.end === b.end) {\n          return a.index - b.index;\n        }\n        return a.end - b.end;\n      })[0] : void 0;\n    };\n    this.getMeasurementOptions = memo(\n      () => [\n        this.options.count,\n        this.options.paddingStart,\n        this.options.scrollMargin,\n        this.options.getItemKey,\n        this.options.enabled\n      ],\n      (count, paddingStart, scrollMargin, getItemKey, enabled) => {\n        this.pendingMeasuredCacheIndexes = [];\n        return {\n          count,\n          paddingStart,\n          scrollMargin,\n          getItemKey,\n          enabled\n        };\n      },\n      {\n        key: false\n      }\n    );\n    this.getMeasurements = memo(\n      () => [this.getMeasurementOptions(), this.itemSizeCache],\n      ({ count, paddingStart, scrollMargin, getItemKey, enabled }, itemSizeCache) => {\n        if (!enabled) {\n          this.measurementsCache = [];\n          this.itemSizeCache.clear();\n          return [];\n        }\n        if (this.measurementsCache.length === 0) {\n          this.measurementsCache = this.options.initialMeasurementsCache;\n          this.measurementsCache.forEach((item) => {\n            this.itemSizeCache.set(item.key, item.size);\n          });\n        }\n        const min = this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n        this.pendingMeasuredCacheIndexes = [];\n        const measurements = this.measurementsCache.slice(0, min);\n        for (let i = min; i < count; i++) {\n          const key = getItemKey(i);\n          const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);\n          const start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;\n          const measuredSize = itemSizeCache.get(key);\n          const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n          const end = start + size;\n          const lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;\n          measurements[i] = {\n            index: i,\n            start,\n            size,\n            end,\n            key,\n            lane\n          };\n        }\n        this.measurementsCache = measurements;\n        return measurements;\n      },\n      {\n        key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n        debug: () => this.options.debug\n      }\n    );\n    this.calculateRange = memo(\n      () => [this.getMeasurements(), this.getSize(), this.getScrollOffset()],\n      (measurements, outerSize, scrollOffset) => {\n        return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({\n          measurements,\n          outerSize,\n          scrollOffset\n        }) : null;\n      },\n      {\n        key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n        debug: () => this.options.debug\n      }\n    );\n    this.getIndexes = memo(\n      () => [\n        this.options.rangeExtractor,\n        this.calculateRange(),\n        this.options.overscan,\n        this.options.count\n      ],\n      (rangeExtractor, range, overscan, count) => {\n        return range === null ? [] : rangeExtractor({\n          startIndex: range.startIndex,\n          endIndex: range.endIndex,\n          overscan,\n          count\n        });\n      },\n      {\n        key: process.env.NODE_ENV !== \"production\" && \"getIndexes\",\n        debug: () => this.options.debug\n      }\n    );\n    this.indexFromElement = (node) => {\n      const attributeName = this.options.indexAttribute;\n      const indexStr = node.getAttribute(attributeName);\n      if (!indexStr) {\n        console.warn(\n          `Missing attribute name '${attributeName}={index}' on measured element.`\n        );\n        return -1;\n      }\n      return parseInt(indexStr, 10);\n    };\n    this._measureElement = (node, entry) => {\n      const index = this.indexFromElement(node);\n      const item = this.measurementsCache[index];\n      if (!item) {\n        return;\n      }\n      const key = item.key;\n      const prevNode = this.elementsCache.get(key);\n      if (prevNode !== node) {\n        if (prevNode) {\n          this.observer.unobserve(prevNode);\n        }\n        this.observer.observe(node);\n        this.elementsCache.set(key, node);\n      }\n      if (node.isConnected) {\n        this.resizeItem(index, this.options.measureElement(node, entry, this));\n      }\n    };\n    this.resizeItem = (index, size) => {\n      const item = this.measurementsCache[index];\n      if (!item) {\n        return;\n      }\n      const itemSize = this.itemSizeCache.get(item.key) ?? item.size;\n      const delta = size - itemSize;\n      if (delta !== 0) {\n        if (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments) {\n          if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n            console.info(\"correction\", delta);\n          }\n          this._scrollToOffset(this.getScrollOffset(), {\n            adjustments: this.scrollAdjustments += delta,\n            behavior: void 0\n          });\n        }\n        this.pendingMeasuredCacheIndexes.push(item.index);\n        this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));\n        this.notify(false);\n      }\n    };\n    this.measureElement = (node) => {\n      if (!node) {\n        this.elementsCache.forEach((cached, key) => {\n          if (!cached.isConnected) {\n            this.observer.unobserve(cached);\n            this.elementsCache.delete(key);\n          }\n        });\n        return;\n      }\n      this._measureElement(node, void 0);\n    };\n    this.getVirtualItems = memo(\n      () => [this.getIndexes(), this.getMeasurements()],\n      (indexes, measurements) => {\n        const virtualItems = [];\n        for (let k = 0, len = indexes.length; k < len; k++) {\n          const i = indexes[k];\n          const measurement = measurements[i];\n          virtualItems.push(measurement);\n        }\n        return virtualItems;\n      },\n      {\n        key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n        debug: () => this.options.debug\n      }\n    );\n    this.getVirtualItemForOffset = (offset) => {\n      const measurements = this.getMeasurements();\n      if (measurements.length === 0) {\n        return void 0;\n      }\n      return notUndefined(\n        measurements[findNearestBinarySearch(\n          0,\n          measurements.length - 1,\n          (index) => notUndefined(measurements[index]).start,\n          offset\n        )]\n      );\n    };\n    this.getOffsetForAlignment = (toOffset, align) => {\n      const size = this.getSize();\n      const scrollOffset = this.getScrollOffset();\n      if (align === \"auto\") {\n        if (toOffset <= scrollOffset) {\n          align = \"start\";\n        } else if (toOffset >= scrollOffset + size) {\n          align = \"end\";\n        } else {\n          align = \"start\";\n        }\n      }\n      if (align === \"start\") {\n        toOffset = toOffset;\n      } else if (align === \"end\") {\n        toOffset = toOffset - size;\n      } else if (align === \"center\") {\n        toOffset = toOffset - size / 2;\n      }\n      const scrollSizeProp = this.options.horizontal ? \"scrollWidth\" : \"scrollHeight\";\n      const scrollSize = this.scrollElement ? \"document\" in this.scrollElement ? this.scrollElement.document.documentElement[scrollSizeProp] : this.scrollElement[scrollSizeProp] : 0;\n      const maxOffset = scrollSize - size;\n      return Math.max(Math.min(maxOffset, toOffset), 0);\n    };\n    this.getOffsetForIndex = (index, align = \"auto\") => {\n      index = Math.max(0, Math.min(index, this.options.count - 1));\n      const item = this.measurementsCache[index];\n      if (!item) {\n        return void 0;\n      }\n      const size = this.getSize();\n      const scrollOffset = this.getScrollOffset();\n      if (align === \"auto\") {\n        if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n          align = \"end\";\n        } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n          align = \"start\";\n        } else {\n          return [scrollOffset, align];\n        }\n      }\n      const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n      return [this.getOffsetForAlignment(toOffset, align), align];\n    };\n    this.isDynamicMode = () => this.elementsCache.size > 0;\n    this.cancelScrollToIndex = () => {\n      if (this.scrollToIndexTimeoutId !== null && this.targetWindow) {\n        this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId);\n        this.scrollToIndexTimeoutId = null;\n      }\n    };\n    this.scrollToOffset = (toOffset, { align = \"start\", behavior } = {}) => {\n      this.cancelScrollToIndex();\n      if (behavior === \"smooth\" && this.isDynamicMode()) {\n        console.warn(\n          \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n        );\n      }\n      this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n        adjustments: void 0,\n        behavior\n      });\n    };\n    this.scrollToIndex = (index, { align: initialAlign = \"auto\", behavior } = {}) => {\n      index = Math.max(0, Math.min(index, this.options.count - 1));\n      this.cancelScrollToIndex();\n      if (behavior === \"smooth\" && this.isDynamicMode()) {\n        console.warn(\n          \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n        );\n      }\n      const offsetAndAlign = this.getOffsetForIndex(index, initialAlign);\n      if (!offsetAndAlign) return;\n      const [offset, align] = offsetAndAlign;\n      this._scrollToOffset(offset, { adjustments: void 0, behavior });\n      if (behavior !== \"smooth\" && this.isDynamicMode() && this.targetWindow) {\n        this.scrollToIndexTimeoutId = this.targetWindow.setTimeout(() => {\n          this.scrollToIndexTimeoutId = null;\n          const elementInDOM = this.elementsCache.has(\n            this.options.getItemKey(index)\n          );\n          if (elementInDOM) {\n            const [latestOffset] = notUndefined(\n              this.getOffsetForIndex(index, align)\n            );\n            if (!approxEqual(latestOffset, this.getScrollOffset())) {\n              this.scrollToIndex(index, { align, behavior });\n            }\n          } else {\n            this.scrollToIndex(index, { align, behavior });\n          }\n        });\n      }\n    };\n    this.scrollBy = (delta, { behavior } = {}) => {\n      this.cancelScrollToIndex();\n      if (behavior === \"smooth\" && this.isDynamicMode()) {\n        console.warn(\n          \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n        );\n      }\n      this._scrollToOffset(this.getScrollOffset() + delta, {\n        adjustments: void 0,\n        behavior\n      });\n    };\n    this.getTotalSize = () => {\n      var _a;\n      const measurements = this.getMeasurements();\n      let end;\n      if (measurements.length === 0) {\n        end = this.options.paddingStart;\n      } else {\n        end = this.options.lanes === 1 ? ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0 : Math.max(\n          ...measurements.slice(-this.options.lanes).map((m) => m.end)\n        );\n      }\n      return Math.max(\n        end - this.options.scrollMargin + this.options.paddingEnd,\n        0\n      );\n    };\n    this._scrollToOffset = (offset, {\n      adjustments,\n      behavior\n    }) => {\n      this.options.scrollToFn(offset, { behavior, adjustments }, this);\n    };\n    this.measure = () => {\n      this.itemSizeCache = /* @__PURE__ */ new Map();\n      this.notify(false);\n    };\n    this.setOptions(opts);\n  }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n  while (low <= high) {\n    const middle = (low + high) / 2 | 0;\n    const currentValue = getCurrentValue(middle);\n    if (currentValue < value) {\n      low = middle + 1;\n    } else if (currentValue > value) {\n      high = middle - 1;\n    } else {\n      return middle;\n    }\n  }\n  if (low > 0) {\n    return low - 1;\n  } else {\n    return 0;\n  }\n};\nfunction calculateRange({\n  measurements,\n  outerSize,\n  scrollOffset\n}) {\n  const count = measurements.length - 1;\n  const getOffset = (index) => measurements[index].start;\n  const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset);\n  let endIndex = startIndex;\n  while (endIndex < count && measurements[endIndex].end < scrollOffset + outerSize) {\n    endIndex++;\n  }\n  return { startIndex, endIndex };\n}\nexport {\n  Virtualizer,\n  approxEqual,\n  debounce,\n  defaultKeyExtractor,\n  defaultRangeExtractor,\n  elementScroll,\n  measureElement,\n  memo,\n  notUndefined,\n  observeElementOffset,\n  observeElementRect,\n  observeWindowOffset,\n  observeWindowRect,\n  windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import { observeElementRect, observeElementOffset, elementScroll, observeWindowRect, observeWindowOffset, windowScroll, Virtualizer } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nimport { computed, unref, shallowRef, watch, triggerRef, onScopeDispose } from \"vue\";\nfunction useVirtualizerBase(options) {\n  const virtualizer = new Virtualizer(unref(options));\n  const state = shallowRef(virtualizer);\n  const cleanup = virtualizer._didMount();\n  watch(\n    () => unref(options).getScrollElement(),\n    (el) => {\n      if (el) {\n        virtualizer._willUpdate();\n      }\n    },\n    {\n      immediate: true\n    }\n  );\n  watch(\n    () => unref(options),\n    (options2) => {\n      virtualizer.setOptions({\n        ...options2,\n        onChange: (instance, sync) => {\n          var _a;\n          triggerRef(state);\n          (_a = options2.onChange) == null ? void 0 : _a.call(options2, instance, sync);\n        }\n      });\n      virtualizer._willUpdate();\n      triggerRef(state);\n    },\n    {\n      immediate: true\n    }\n  );\n  onScopeDispose(cleanup);\n  return state;\n}\nfunction useVirtualizer(options) {\n  return useVirtualizerBase(\n    computed(() => ({\n      observeElementRect,\n      observeElementOffset,\n      scrollToFn: elementScroll,\n      ...unref(options)\n    }))\n  );\n}\nfunction useWindowVirtualizer(options) {\n  return useVirtualizerBase(\n    computed(() => ({\n      getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n      observeElementRect: observeWindowRect,\n      observeElementOffset: observeWindowOffset,\n      scrollToFn: windowScroll,\n      initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n      ...unref(options)\n    }))\n  );\n}\nexport {\n  useVirtualizer,\n  useWindowVirtualizer\n};\n//# sourceMappingURL=index.js.map\n","import{computed as p,ref as s}from\"vue\";function d(u,e,r){let i=s(r==null?void 0:r.value),f=p(()=>u.value!==void 0);return[p(()=>f.value?u.value:i.value),function(t){return f.value||(i.value=t),e==null?void 0:e(t)}]}export{d as useControllable};\n","function t(e){typeof queueMicrotask==\"function\"?queueMicrotask(e):Promise.resolve().then(e).catch(o=>setTimeout(()=>{throw o}))}export{t as microTask};\n","import{microTask as n}from'./micro-task.js';function o(){let a=[],s={addEventListener(e,t,r,i){return e.addEventListener(t,r,i),s.add(()=>e.removeEventListener(t,r,i))},requestAnimationFrame(...e){let t=requestAnimationFrame(...e);s.add(()=>cancelAnimationFrame(t))},nextFrame(...e){s.requestAnimationFrame(()=>{s.requestAnimationFrame(...e)})},setTimeout(...e){let t=setTimeout(...e);s.add(()=>clearTimeout(t))},microTask(...e){let t={current:!0};return n(()=>{t.current&&e[0]()}),s.add(()=>{t.current=!1})},style(e,t,r){let i=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:r}),this.add(()=>{Object.assign(e.style,{[t]:i})})},group(e){let t=o();return e(t),this.add(()=>t.dispose())},add(e){return a.push(e),()=>{let t=a.indexOf(e);if(t>=0)for(let r of a.splice(t,1))r()}},dispose(){for(let e of a.splice(0))e()}};return s}export{o as disposables};\n","import{onUnmounted as s}from\"vue\";import{disposables as e}from'../utils/disposables.js';function i(){let o=e();return s(()=>o.dispose()),o}export{i as useDisposables};\n","import{useDisposables as r}from'./use-disposables.js';function t(){let e=r();return o=>{e.dispose(),e.nextFrame(o)}}export{t as useFrameDebounce};\n","var r;import*as e from\"vue\";let n=Symbol(\"headlessui.useid\"),o=0;const i=(r=e.useId)!=null?r:function(){return e.inject(n,()=>`${++o}`)()};function s(t){e.provide(n,t)}export{s as provideUseId,i as useId};\n","function o(e){var l;if(e==null||e.value==null)return null;let n=(l=e.value.$el)!=null?l:e.value;return n instanceof Node?n:null}export{o as dom};\n","function u(r,n,...a){if(r in n){let e=n[r];return typeof e==\"function\"?e(...a):e}let t=new Error(`Tried to handle \"${r}\" but there is no handler defined. Only defined handlers are: ${Object.keys(n).map(e=>`\"${e}\"`).join(\", \")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,u),t}export{u as match};\n","var i=Object.defineProperty;var d=(t,e,r)=>e in t?i(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var n=(t,e,r)=>(d(t,typeof e!=\"symbol\"?e+\"\":e,r),r);class s{constructor(){n(this,\"current\",this.detect());n(this,\"currentId\",0)}set(e){this.current!==e&&(this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current===\"server\"}get isClient(){return this.current===\"client\"}detect(){return typeof window==\"undefined\"||typeof document==\"undefined\"?\"server\":\"client\"}}let c=new s;export{c as env};\n","import{dom as o}from'./dom.js';import{env as t}from'./env.js';function i(r){if(t.isServer)return null;if(r instanceof Node)return r.ownerDocument;if(r!=null&&r.hasOwnProperty(\"value\")){let n=o(r);if(n)return n.ownerDocument}return document}export{i as getOwnerDocument};\n","import{nextTick as b}from\"vue\";import{match as M}from'./match.js';import{getOwnerDocument as f}from'./owner.js';let c=[\"[contentEditable=true]\",\"[tabindex]\",\"a[href]\",\"area[href]\",\"button:not([disabled])\",\"iframe\",\"input:not([disabled])\",\"select:not([disabled])\",\"textarea:not([disabled])\"].map(e=>`${e}:not([tabindex='-1'])`).join(\",\");var N=(n=>(n[n.First=1]=\"First\",n[n.Previous=2]=\"Previous\",n[n.Next=4]=\"Next\",n[n.Last=8]=\"Last\",n[n.WrapAround=16]=\"WrapAround\",n[n.NoScroll=32]=\"NoScroll\",n))(N||{}),T=(o=>(o[o.Error=0]=\"Error\",o[o.Overflow=1]=\"Overflow\",o[o.Success=2]=\"Success\",o[o.Underflow=3]=\"Underflow\",o))(T||{}),F=(t=>(t[t.Previous=-1]=\"Previous\",t[t.Next=1]=\"Next\",t))(F||{});function E(e=document.body){return e==null?[]:Array.from(e.querySelectorAll(c)).sort((r,t)=>Math.sign((r.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}var h=(t=>(t[t.Strict=0]=\"Strict\",t[t.Loose=1]=\"Loose\",t))(h||{});function w(e,r=0){var t;return e===((t=f(e))==null?void 0:t.body)?!1:M(r,{[0](){return e.matches(c)},[1](){let l=e;for(;l!==null;){if(l.matches(c))return!0;l=l.parentElement}return!1}})}function _(e){let r=f(e);b(()=>{r&&!w(r.activeElement,0)&&S(e)})}var y=(t=>(t[t.Keyboard=0]=\"Keyboard\",t[t.Mouse=1]=\"Mouse\",t))(y||{});typeof window!=\"undefined\"&&typeof document!=\"undefined\"&&(document.addEventListener(\"keydown\",e=>{e.metaKey||e.altKey||e.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible=\"\")},!0),document.addEventListener(\"click\",e=>{e.detail===1?delete document.documentElement.dataset.headlessuiFocusVisible:e.detail===0&&(document.documentElement.dataset.headlessuiFocusVisible=\"\")},!0));function S(e){e==null||e.focus({preventScroll:!0})}let H=[\"textarea\",\"input\"].join(\",\");function I(e){var r,t;return(t=(r=e==null?void 0:e.matches)==null?void 0:r.call(e,H))!=null?t:!1}function O(e,r=t=>t){return e.slice().sort((t,l)=>{let o=r(t),i=r(l);if(o===null||i===null)return 0;let n=o.compareDocumentPosition(i);return n&Node.DOCUMENT_POSITION_FOLLOWING?-1:n&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function v(e,r){return P(E(),r,{relativeTo:e})}function P(e,r,{sorted:t=!0,relativeTo:l=null,skipElements:o=[]}={}){var m;let i=(m=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:e==null?void 0:e.ownerDocument)!=null?m:document,n=Array.isArray(e)?t?O(e):e:E(e);o.length>0&&n.length>1&&(n=n.filter(s=>!o.includes(s))),l=l!=null?l:i.activeElement;let x=(()=>{if(r&5)return 1;if(r&10)return-1;throw new Error(\"Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last\")})(),p=(()=>{if(r&1)return 0;if(r&2)return Math.max(0,n.indexOf(l))-1;if(r&4)return Math.max(0,n.indexOf(l))+1;if(r&8)return n.length-1;throw new Error(\"Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last\")})(),L=r&32?{preventScroll:!0}:{},a=0,d=n.length,u;do{if(a>=d||a+d<=0)return 0;let s=p+a;if(r&16)s=(s+d)%d;else{if(s<0)return 3;if(s>=d)return 1}u=n[s],u==null||u.focus(L),a+=x}while(u!==i.activeElement);return r&6&&I(u)&&u.select(),2}export{N as Focus,T as FocusResult,h as FocusableMode,S as focusElement,v as focusFrom,P as focusIn,E as getFocusableElements,w as isFocusableElement,_ as restoreFocusIfNecessary,O as sortByDomNode};\n","function t(){return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0}function i(){return/Android/gi.test(window.navigator.userAgent)}function n(){return t()||i()}export{i as isAndroid,t as isIOS,n as isMobile};\n","import{watchEffect as r}from\"vue\";import{env as m}from'../utils/env.js';function u(e,t,n){m.isServer||r(o=>{document.addEventListener(e,t,n),o(()=>document.removeEventListener(e,t,n))})}export{u as useDocumentEvent};\n","import{watchEffect as i}from\"vue\";import{env as r}from'../utils/env.js';function w(e,n,t){r.isServer||i(o=>{window.addEventListener(e,n,t),o(()=>window.removeEventListener(e,n,t))})}export{w as useWindowEvent};\n","import{computed as s,ref as E}from\"vue\";import{dom as p}from'../utils/dom.js';import{FocusableMode as d,isFocusableElement as C}from'../utils/focus-management.js';import{isMobile as T}from'../utils/platform.js';import{useDocumentEvent as i}from'./use-document-event.js';import{useWindowEvent as M}from'./use-window-event.js';function w(f,m,l=s(()=>!0)){function a(e,r){if(!l.value||e.defaultPrevented)return;let t=r(e);if(t===null||!t.getRootNode().contains(t))return;let c=function o(n){return typeof n==\"function\"?o(n()):Array.isArray(n)||n instanceof Set?n:[n]}(f);for(let o of c){if(o===null)continue;let n=o instanceof HTMLElement?o:p(o);if(n!=null&&n.contains(t)||e.composed&&e.composedPath().includes(n))return}return!C(t,d.Loose)&&t.tabIndex!==-1&&e.preventDefault(),m(e,t)}let u=E(null);i(\"pointerdown\",e=>{var r,t;l.value&&(u.value=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),i(\"mousedown\",e=>{var r,t;l.value&&(u.value=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),i(\"click\",e=>{T()||u.value&&(a(e,()=>u.value),u.value=null)},!0),i(\"touchend\",e=>a(e,()=>e.target instanceof HTMLElement?e.target:null),!0),M(\"blur\",e=>a(e,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}export{w as useOutsideClick};\n","import{onMounted as i,ref as f,watchEffect as l}from\"vue\";import{dom as o}from'../utils/dom.js';function r(t,e){if(t)return t;let n=e!=null?e:\"button\";if(typeof n==\"string\"&&n.toLowerCase()===\"button\")return\"button\"}function s(t,e){let n=f(r(t.value.type,t.value.as));return i(()=>{n.value=r(t.value.type,t.value.as)}),l(()=>{var u;n.value||o(e)&&o(e)instanceof HTMLButtonElement&&!((u=o(e))!=null&&u.hasAttribute(\"type\"))&&(n.value=\"button\")}),n}export{s as useResolveButtonType};\n","import{ref as o}from\"vue\";function r(e){return[e.screenX,e.screenY]}function u(){let e=o([-1,-1]);return{wasMoved(n){let t=r(n);return e.value[0]===t[0]&&e.value[1]===t[1]?!1:(e.value=t,!0)},update(n){e.value=r(n)}}}export{u as useTrackedPointer};\n","import{watchEffect as p}from\"vue\";import{getOwnerDocument as u}from'../utils/owner.js';function i({container:e,accept:t,walk:d,enabled:o}){p(()=>{let r=e.value;if(!r||o!==void 0&&!o.value)return;let l=u(e);if(!l)return;let c=Object.assign(f=>t(f),{acceptNode:t}),n=l.createTreeWalker(r,NodeFilter.SHOW_ELEMENT,c,!1);for(;n.nextNode();)d(n.currentNode)})}export{i as useTreeWalker};\n","import{cloneVNode as O,Fragment as x,h as k}from\"vue\";import{match as w}from'./match.js';var N=(o=>(o[o.None=0]=\"None\",o[o.RenderStrategy=1]=\"RenderStrategy\",o[o.Static=2]=\"Static\",o))(N||{}),S=(e=>(e[e.Unmount=0]=\"Unmount\",e[e.Hidden=1]=\"Hidden\",e))(S||{});function A({visible:r=!0,features:t=0,ourProps:e,theirProps:o,...i}){var a;let n=j(o,e),l=Object.assign(i,{props:n});if(r||t&2&&n.static)return y(l);if(t&1){let d=(a=n.unmount)==null||a?0:1;return w(d,{[0](){return null},[1](){return y({...i,props:{...n,hidden:!0,style:{display:\"none\"}}})}})}return y(l)}function y({props:r,attrs:t,slots:e,slot:o,name:i}){var m,h;let{as:n,...l}=T(r,[\"unmount\",\"static\"]),a=(m=e.default)==null?void 0:m.call(e,o),d={};if(o){let u=!1,c=[];for(let[p,f]of Object.entries(o))typeof f==\"boolean\"&&(u=!0),f===!0&&c.push(p);u&&(d[\"data-headlessui-state\"]=c.join(\" \"))}if(n===\"template\"){if(a=b(a!=null?a:[]),Object.keys(l).length>0||Object.keys(t).length>0){let[u,...c]=a!=null?a:[];if(!v(u)||c.length>0)throw new Error(['Passing props on \"template\"!',\"\",`The current component <${i} /> is rendering a \"template\".`,\"However we need to passthrough the following props:\",Object.keys(l).concat(Object.keys(t)).map(s=>s.trim()).filter((s,g,R)=>R.indexOf(s)===g).sort((s,g)=>s.localeCompare(g)).map(s=>`  - ${s}`).join(`\n`),\"\",\"You can apply a few solutions:\",['Add an `as=\"...\"` prop, to ensure that we render an actual element instead of a \"template\".',\"Render a single element as the child so that we can forward the props onto that element.\"].map(s=>`  - ${s}`).join(`\n`)].join(`\n`));let p=j((h=u.props)!=null?h:{},l,d),f=O(u,p,!0);for(let s in p)s.startsWith(\"on\")&&(f.props||(f.props={}),f.props[s]=p[s]);return f}return Array.isArray(a)&&a.length===1?a[0]:a}return k(n,Object.assign({},l,d),{default:()=>a})}function b(r){return r.flatMap(t=>t.type===x?b(t.children):[t])}function j(...r){var o;if(r.length===0)return{};if(r.length===1)return r[0];let t={},e={};for(let i of r)for(let n in i)n.startsWith(\"on\")&&typeof i[n]==\"function\"?((o=e[n])!=null||(e[n]=[]),e[n].push(i[n])):t[n]=i[n];if(t.disabled||t[\"aria-disabled\"])return Object.assign(t,Object.fromEntries(Object.keys(e).map(i=>[i,void 0])));for(let i in e)Object.assign(t,{[i](n,...l){let a=e[i];for(let d of a){if(n instanceof Event&&n.defaultPrevented)return;d(n,...l)}}});return t}function E(r){let t=Object.assign({},r);for(let e in t)t[e]===void 0&&delete t[e];return t}function T(r,t=[]){let e=Object.assign({},r);for(let o of t)o in e&&delete e[o];return e}function v(r){return r==null?!1:typeof r.type==\"string\"||typeof r.type==\"object\"||typeof r.type==\"function\"}export{N as Features,S as RenderStrategy,E as compact,T as omit,A as render};\n","import{defineComponent as a}from\"vue\";import{render as p}from'../utils/render.js';var u=(e=>(e[e.None=1]=\"None\",e[e.Focusable=2]=\"Focusable\",e[e.Hidden=4]=\"Hidden\",e))(u||{});let f=a({name:\"Hidden\",props:{as:{type:[Object,String],default:\"div\"},features:{type:Number,default:1}},setup(t,{slots:n,attrs:i}){return()=>{var r;let{features:e,...d}=t,o={\"aria-hidden\":(e&2)===2?!0:(r=d[\"aria-hidden\"])!=null?r:void 0,hidden:(e&4)===4?!0:void 0,style:{position:\"fixed\",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:\"hidden\",clip:\"rect(0, 0, 0, 0)\",whiteSpace:\"nowrap\",borderWidth:\"0\",...(e&4)===4&&(e&2)!==2&&{display:\"none\"}}};return p({ourProps:o,theirProps:d,slot:{},attrs:i,slots:n,name:\"Hidden\"})}}});export{u as Features,f as Hidden};\n","import{inject as p,provide as r}from\"vue\";let n=Symbol(\"Context\");var i=(e=>(e[e.Open=1]=\"Open\",e[e.Closed=2]=\"Closed\",e[e.Closing=4]=\"Closing\",e[e.Opening=8]=\"Opening\",e))(i||{});function s(){return l()!==null}function l(){return p(n,null)}function t(o){r(n,o)}export{i as State,s as hasOpenClosed,l as useOpenClosed,t as useOpenClosedProvider};\n","var o=(r=>(r.Space=\" \",r.Enter=\"Enter\",r.Escape=\"Escape\",r.Backspace=\"Backspace\",r.Delete=\"Delete\",r.ArrowLeft=\"ArrowLeft\",r.ArrowUp=\"ArrowUp\",r.ArrowRight=\"ArrowRight\",r.ArrowDown=\"ArrowDown\",r.Home=\"Home\",r.End=\"End\",r.PageUp=\"PageUp\",r.PageDown=\"PageDown\",r.Tab=\"Tab\",r))(o||{});export{o as Keys};\n","var g=(f=>(f[f.Left=0]=\"Left\",f[f.Right=2]=\"Right\",f))(g||{});export{g as MouseButton};\n","function t(n){function e(){document.readyState!==\"loading\"&&(n(),document.removeEventListener(\"DOMContentLoaded\",e))}typeof window!=\"undefined\"&&typeof document!=\"undefined\"&&(document.addEventListener(\"DOMContentLoaded\",e),e())}export{t as onDocumentReady};\n","import{onDocumentReady as d}from'./document-ready.js';let t=[];d(()=>{function e(n){n.target instanceof HTMLElement&&n.target!==document.body&&t[0]!==n.target&&(t.unshift(n.target),t=t.filter(r=>r!=null&&r.isConnected),t.splice(10))}window.addEventListener(\"click\",e,{capture:!0}),window.addEventListener(\"mousedown\",e,{capture:!0}),window.addEventListener(\"focus\",e,{capture:!0}),document.body.addEventListener(\"click\",e,{capture:!0}),document.body.addEventListener(\"mousedown\",e,{capture:!0}),document.body.addEventListener(\"focus\",e,{capture:!0})});export{t as history};\n","function u(l){throw new Error(\"Unexpected object: \"+l)}var c=(i=>(i[i.First=0]=\"First\",i[i.Previous=1]=\"Previous\",i[i.Next=2]=\"Next\",i[i.Last=3]=\"Last\",i[i.Specific=4]=\"Specific\",i[i.Nothing=5]=\"Nothing\",i))(c||{});function f(l,n){let t=n.resolveItems();if(t.length<=0)return null;let r=n.resolveActiveIndex(),s=r!=null?r:-1;switch(l.focus){case 0:{for(let e=0;e<t.length;++e)if(!n.resolveDisabled(t[e],e,t))return e;return r}case 1:{s===-1&&(s=t.length);for(let e=s-1;e>=0;--e)if(!n.resolveDisabled(t[e],e,t))return e;return r}case 2:{for(let e=s+1;e<t.length;++e)if(!n.resolveDisabled(t[e],e,t))return e;return r}case 3:{for(let e=t.length-1;e>=0;--e)if(!n.resolveDisabled(t[e],e,t))return e;return r}case 4:{for(let e=0;e<t.length;++e)if(n.resolveId(t[e],e,t)===l.id)return e;return r}case 5:return null;default:u(l)}}export{c as Focus,f as calculateActiveIndex};\n","function e(i={},s=null,t=[]){for(let[r,n]of Object.entries(i))o(t,f(s,r),n);return t}function f(i,s){return i?i+\"[\"+s+\"]\":s}function o(i,s,t){if(Array.isArray(t))for(let[r,n]of t.entries())o(i,f(s,r.toString()),n);else t instanceof Date?i.push([s,t.toISOString()]):typeof t==\"boolean\"?i.push([s,t?\"1\":\"0\"]):typeof t==\"string\"?i.push([s,t]):typeof t==\"number\"?i.push([s,`${t}`]):t==null?i.push([s,\"\"]):e(t,s,i)}function p(i){var t,r;let s=(t=i==null?void 0:i.form)!=null?t:i.closest(\"form\");if(s){for(let n of s.elements)if(n!==i&&(n.tagName===\"INPUT\"&&n.type===\"submit\"||n.tagName===\"BUTTON\"&&n.type===\"submit\"||n.nodeName===\"INPUT\"&&n.type===\"image\")){n.click();return}(r=s.requestSubmit)==null||r.call(s)}}export{p as attemptSubmit,e as objectToFormEntries};\n","import{useVirtualizer as re}from\"@tanstack/vue-virtual\";import{cloneVNode as de,computed as m,defineComponent as H,Fragment as se,h as z,inject as ee,nextTick as N,onMounted as X,onUnmounted as fe,provide as te,reactive as ve,ref as k,toRaw as L,watch as J,watchEffect as Y}from\"vue\";import{useControllable as pe}from'../../hooks/use-controllable.js';import{useFrameDebounce as be}from'../../hooks/use-frame-debounce.js';import{useId as W}from'../../hooks/use-id.js';import{useOutsideClick as ce}from'../../hooks/use-outside-click.js';import{useResolveButtonType as me}from'../../hooks/use-resolve-button-type.js';import{useTrackedPointer as xe}from'../../hooks/use-tracked-pointer.js';import{useTreeWalker as ge}from'../../hooks/use-tree-walker.js';import{Features as Se,Hidden as Oe}from'../../internal/hidden.js';import{State as G,useOpenClosed as Ce,useOpenClosedProvider as Re}from'../../internal/open-closed.js';import{Keys as F}from'../../keyboard.js';import{MouseButton as ye}from'../../mouse.js';import{history as oe}from'../../utils/active-element-history.js';import{calculateActiveIndex as le,Focus as P}from'../../utils/calculate-active-index.js';import{disposables as ae}from'../../utils/disposables.js';import{dom as x}from'../../utils/dom.js';import{sortByDomNode as Te}from'../../utils/focus-management.js';import{objectToFormEntries as Ie}from'../../utils/form.js';import{match as _}from'../../utils/match.js';import{getOwnerDocument as he}from'../../utils/owner.js';import{isMobile as we}from'../../utils/platform.js';import{compact as Pe,Features as Q,omit as Z,render as U}from'../../utils/render.js';function De(a,h){return a===h}var Ee=(r=>(r[r.Open=0]=\"Open\",r[r.Closed=1]=\"Closed\",r))(Ee||{}),Ve=(r=>(r[r.Single=0]=\"Single\",r[r.Multi=1]=\"Multi\",r))(Ve||{}),ke=(y=>(y[y.Pointer=0]=\"Pointer\",y[y.Focus=1]=\"Focus\",y[y.Other=2]=\"Other\",y))(ke||{});let ne=Symbol(\"ComboboxContext\");function K(a){let h=ee(ne,null);if(h===null){let r=new Error(`<${a} /> is missing a parent <Combobox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,K),r}return h}let ie=Symbol(\"VirtualContext\"),Ae=H({name:\"VirtualProvider\",setup(a,{slots:h}){let r=K(\"VirtualProvider\"),y=m(()=>{let c=x(r.optionsRef);if(!c)return{start:0,end:0};let f=window.getComputedStyle(c);return{start:parseFloat(f.paddingBlockStart||f.paddingTop),end:parseFloat(f.paddingBlockEnd||f.paddingBottom)}}),o=re(m(()=>({scrollPaddingStart:y.value.start,scrollPaddingEnd:y.value.end,count:r.virtual.value.options.length,estimateSize(){return 40},getScrollElement(){return x(r.optionsRef)},overscan:12}))),u=m(()=>{var c;return(c=r.virtual.value)==null?void 0:c.options}),e=k(0);return J([u],()=>{e.value+=1}),te(ie,r.virtual.value?o:null),()=>[z(\"div\",{style:{position:\"relative\",width:\"100%\",height:`${o.value.getTotalSize()}px`},ref:c=>{if(c){if(typeof process!=\"undefined\"&&process.env.JEST_WORKER_ID!==void 0||r.activationTrigger.value===0)return;r.activeOptionIndex.value!==null&&r.virtual.value.options.length>r.activeOptionIndex.value&&o.value.scrollToIndex(r.activeOptionIndex.value)}}},o.value.getVirtualItems().map(c=>de(h.default({option:r.virtual.value.options[c.index],open:r.comboboxState.value===0})[0],{key:`${e.value}-${c.index}`,\"data-index\":c.index,\"aria-setsize\":r.virtual.value.options.length,\"aria-posinset\":c.index+1,style:{position:\"absolute\",top:0,left:0,transform:`translateY(${c.start}px)`,overflowAnchor:\"none\"}})))]}}),lt=H({name:\"Combobox\",emits:{\"update:modelValue\":a=>!0},props:{as:{type:[Object,String],default:\"template\"},disabled:{type:[Boolean],default:!1},by:{type:[String,Function],nullable:!0,default:null},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{type:[Object,String,Number,Boolean],default:void 0},form:{type:String,optional:!0},name:{type:String,optional:!0},nullable:{type:Boolean,default:!1},multiple:{type:[Boolean],default:!1},immediate:{type:[Boolean],default:!1},virtual:{type:Object,default:null}},inheritAttrs:!1,setup(a,{slots:h,attrs:r,emit:y}){let o=k(1),u=k(null),e=k(null),c=k(null),f=k(null),S=k({static:!1,hold:!1}),v=k([]),d=k(null),D=k(2),E=k(!1);function w(t=n=>n){let n=d.value!==null?v.value[d.value]:null,s=t(v.value.slice()),b=s.length>0&&s[0].dataRef.order.value!==null?s.sort((C,A)=>C.dataRef.order.value-A.dataRef.order.value):Te(s,C=>x(C.dataRef.domRef)),O=n?b.indexOf(n):null;return O===-1&&(O=null),{options:b,activeOptionIndex:O}}let M=m(()=>a.multiple?1:0),$=m(()=>a.nullable),[B,p]=pe(m(()=>a.modelValue),t=>y(\"update:modelValue\",t),m(()=>a.defaultValue)),R=m(()=>B.value===void 0?_(M.value,{[1]:[],[0]:void 0}):B.value),V=null,i=null;function I(t){return _(M.value,{[0](){return p==null?void 0:p(t)},[1]:()=>{let n=L(l.value.value).slice(),s=L(t),b=n.findIndex(O=>l.compare(s,L(O)));return b===-1?n.push(s):n.splice(b,1),p==null?void 0:p(n)}})}let T=m(()=>{});J([T],([t],[n])=>{if(l.virtual.value&&t&&n&&d.value!==null){let s=t.indexOf(n[d.value]);s!==-1?d.value=s:d.value=null}});let l={comboboxState:o,value:R,mode:M,compare(t,n){if(typeof a.by==\"string\"){let s=a.by;return(t==null?void 0:t[s])===(n==null?void 0:n[s])}return a.by===null?De(t,n):a.by(t,n)},calculateIndex(t){return l.virtual.value?a.by===null?l.virtual.value.options.indexOf(t):l.virtual.value.options.findIndex(n=>l.compare(n,t)):v.value.findIndex(n=>l.compare(n.dataRef.value,t))},defaultValue:m(()=>a.defaultValue),nullable:$,immediate:m(()=>!1),virtual:m(()=>null),inputRef:e,labelRef:u,buttonRef:c,optionsRef:f,disabled:m(()=>a.disabled),options:v,change(t){p(t)},activeOptionIndex:m(()=>{if(E.value&&d.value===null&&(l.virtual.value?l.virtual.value.options.length>0:v.value.length>0)){if(l.virtual.value){let n=l.virtual.value.options.findIndex(s=>{var b;return!((b=l.virtual.value)!=null&&b.disabled(s))});if(n!==-1)return n}let t=v.value.findIndex(n=>!n.dataRef.disabled);if(t!==-1)return t}return d.value}),activationTrigger:D,optionsPropsRef:S,closeCombobox(){E.value=!1,!a.disabled&&o.value!==1&&(o.value=1,d.value=null)},openCombobox(){if(E.value=!0,!a.disabled&&o.value!==0){if(l.value.value){let t=l.calculateIndex(l.value.value);t!==-1&&(d.value=t)}o.value=0}},setActivationTrigger(t){D.value=t},goToOption(t,n,s){E.value=!1,V!==null&&cancelAnimationFrame(V),V=requestAnimationFrame(()=>{if(a.disabled||f.value&&!S.value.static&&o.value===1)return;if(l.virtual.value){d.value=t===P.Specific?n:le({focus:t},{resolveItems:()=>l.virtual.value.options,resolveActiveIndex:()=>{var C,A;return(A=(C=l.activeOptionIndex.value)!=null?C:l.virtual.value.options.findIndex(j=>{var q;return!((q=l.virtual.value)!=null&&q.disabled(j))}))!=null?A:null},resolveDisabled:C=>l.virtual.value.disabled(C),resolveId(){throw new Error(\"Function not implemented.\")}}),D.value=s!=null?s:2;return}let b=w();if(b.activeOptionIndex===null){let C=b.options.findIndex(A=>!A.dataRef.disabled);C!==-1&&(b.activeOptionIndex=C)}let O=t===P.Specific?n:le({focus:t},{resolveItems:()=>b.options,resolveActiveIndex:()=>b.activeOptionIndex,resolveId:C=>C.id,resolveDisabled:C=>C.dataRef.disabled});d.value=O,D.value=s!=null?s:2,v.value=b.options})},selectOption(t){let n=v.value.find(b=>b.id===t);if(!n)return;let{dataRef:s}=n;I(s.value)},selectActiveOption(){if(l.activeOptionIndex.value!==null){if(l.virtual.value)I(l.virtual.value.options[l.activeOptionIndex.value]);else{let{dataRef:t}=v.value[l.activeOptionIndex.value];I(t.value)}l.goToOption(P.Specific,l.activeOptionIndex.value)}},registerOption(t,n){let s=ve({id:t,dataRef:n});if(l.virtual.value){v.value.push(s);return}i&&cancelAnimationFrame(i);let b=w(O=>(O.push(s),O));d.value===null&&l.isSelected(n.value.value)&&(b.activeOptionIndex=b.options.indexOf(s)),v.value=b.options,d.value=b.activeOptionIndex,D.value=2,b.options.some(O=>!x(O.dataRef.domRef))&&(i=requestAnimationFrame(()=>{let O=w();v.value=O.options,d.value=O.activeOptionIndex}))},unregisterOption(t,n){if(V!==null&&cancelAnimationFrame(V),n&&(E.value=!0),l.virtual.value){v.value=v.value.filter(b=>b.id!==t);return}let s=w(b=>{let O=b.findIndex(C=>C.id===t);return O!==-1&&b.splice(O,1),b});v.value=s.options,d.value=s.activeOptionIndex,D.value=2},isSelected(t){return _(M.value,{[0]:()=>l.compare(L(l.value.value),L(t)),[1]:()=>L(l.value.value).some(n=>l.compare(L(n),L(t)))})},isActive(t){return d.value===l.calculateIndex(t)}};ce([e,c,f],()=>l.closeCombobox(),m(()=>o.value===0)),te(ne,l),Re(m(()=>_(o.value,{[0]:G.Open,[1]:G.Closed})));let g=m(()=>{var t;return(t=x(e))==null?void 0:t.closest(\"form\")});return X(()=>{J([g],()=>{if(!g.value||a.defaultValue===void 0)return;function t(){l.change(a.defaultValue)}return g.value.addEventListener(\"reset\",t),()=>{var n;(n=g.value)==null||n.removeEventListener(\"reset\",t)}},{immediate:!0})}),()=>{var C,A,j;let{name:t,disabled:n,form:s,...b}=a,O={open:o.value===0,disabled:n,activeIndex:l.activeOptionIndex.value,activeOption:l.activeOptionIndex.value===null?null:l.virtual.value?l.virtual.value.options[(C=l.activeOptionIndex.value)!=null?C:0]:(j=(A=l.options.value[l.activeOptionIndex.value])==null?void 0:A.dataRef.value)!=null?j:null,value:R.value};return z(se,[...t!=null&&R.value!=null?Ie({[t]:R.value}).map(([q,ue])=>z(Oe,Pe({features:Se.Hidden,key:q,as:\"input\",type:\"hidden\",hidden:!0,readOnly:!0,form:s,disabled:n,name:q,value:ue}))):[],U({theirProps:{...r,...Z(b,[\"by\",\"defaultValue\",\"immediate\",\"modelValue\",\"multiple\",\"nullable\",\"onUpdate:modelValue\",\"virtual\"])},ourProps:{},slot:O,slots:h,attrs:r,name:\"Combobox\"})])}}}),at=H({name:\"ComboboxLabel\",props:{as:{type:[Object,String],default:\"label\"},id:{type:String,default:null}},setup(a,{attrs:h,slots:r}){var e;let y=(e=a.id)!=null?e:`headlessui-combobox-label-${W()}`,o=K(\"ComboboxLabel\");function u(){var c;(c=x(o.inputRef))==null||c.focus({preventScroll:!0})}return()=>{let c={open:o.comboboxState.value===0,disabled:o.disabled.value},{...f}=a,S={id:y,ref:o.labelRef,onClick:u};return U({ourProps:S,theirProps:f,slot:c,attrs:h,slots:r,name:\"ComboboxLabel\"})}}}),nt=H({name:\"ComboboxButton\",props:{as:{type:[Object,String],default:\"button\"},id:{type:String,default:null}},setup(a,{attrs:h,slots:r,expose:y}){var S;let o=(S=a.id)!=null?S:`headlessui-combobox-button-${W()}`,u=K(\"ComboboxButton\");y({el:u.buttonRef,$el:u.buttonRef});function e(v){u.disabled.value||(u.comboboxState.value===0?u.closeCombobox():(v.preventDefault(),u.openCombobox()),N(()=>{var d;return(d=x(u.inputRef))==null?void 0:d.focus({preventScroll:!0})}))}function c(v){switch(v.key){case F.ArrowDown:v.preventDefault(),v.stopPropagation(),u.comboboxState.value===1&&u.openCombobox(),N(()=>{var d;return(d=u.inputRef.value)==null?void 0:d.focus({preventScroll:!0})});return;case F.ArrowUp:v.preventDefault(),v.stopPropagation(),u.comboboxState.value===1&&(u.openCombobox(),N(()=>{u.value.value||u.goToOption(P.Last)})),N(()=>{var d;return(d=u.inputRef.value)==null?void 0:d.focus({preventScroll:!0})});return;case F.Escape:if(u.comboboxState.value!==0)return;v.preventDefault(),u.optionsRef.value&&!u.optionsPropsRef.value.static&&v.stopPropagation(),u.closeCombobox(),N(()=>{var d;return(d=u.inputRef.value)==null?void 0:d.focus({preventScroll:!0})});return}}let f=me(m(()=>({as:a.as,type:h.type})),u.buttonRef);return()=>{var E,w;let v={open:u.comboboxState.value===0,disabled:u.disabled.value,value:u.value.value},{...d}=a,D={ref:u.buttonRef,id:o,type:f.value,tabindex:\"-1\",\"aria-haspopup\":\"listbox\",\"aria-controls\":(E=x(u.optionsRef))==null?void 0:E.id,\"aria-expanded\":u.comboboxState.value===0,\"aria-labelledby\":u.labelRef.value?[(w=x(u.labelRef))==null?void 0:w.id,o].join(\" \"):void 0,disabled:u.disabled.value===!0?!0:void 0,onKeydown:c,onClick:e};return U({ourProps:D,theirProps:d,slot:v,attrs:h,slots:r,name:\"ComboboxButton\"})}}}),it=H({name:\"ComboboxInput\",props:{as:{type:[Object,String],default:\"input\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},displayValue:{type:Function},defaultValue:{type:String,default:void 0},id:{type:String,default:null}},emits:{change:a=>!0},setup(a,{emit:h,attrs:r,slots:y,expose:o}){var V;let u=(V=a.id)!=null?V:`headlessui-combobox-input-${W()}`,e=K(\"ComboboxInput\"),c=m(()=>he(x(e.inputRef))),f={value:!1};o({el:e.inputRef,$el:e.inputRef});function S(){e.change(null);let i=x(e.optionsRef);i&&(i.scrollTop=0),e.goToOption(P.Nothing)}let v=m(()=>{var I;let i=e.value.value;return x(e.inputRef)?typeof a.displayValue!=\"undefined\"&&i!==void 0?(I=a.displayValue(i))!=null?I:\"\":typeof i==\"string\"?i:\"\":\"\"});X(()=>{J([v,e.comboboxState,c],([i,I],[T,l])=>{if(f.value)return;let g=x(e.inputRef);g&&((l===0&&I===1||i!==T)&&(g.value=i),requestAnimationFrame(()=>{var s;if(f.value||!g||((s=c.value)==null?void 0:s.activeElement)!==g)return;let{selectionStart:t,selectionEnd:n}=g;Math.abs((n!=null?n:0)-(t!=null?t:0))===0&&t===0&&g.setSelectionRange(g.value.length,g.value.length)}))},{immediate:!0}),J([e.comboboxState],([i],[I])=>{if(i===0&&I===1){if(f.value)return;let T=x(e.inputRef);if(!T)return;let l=T.value,{selectionStart:g,selectionEnd:t,selectionDirection:n}=T;T.value=\"\",T.value=l,n!==null?T.setSelectionRange(g,t,n):T.setSelectionRange(g,t)}})});let d=k(!1);function D(){d.value=!0}function E(){ae().nextFrame(()=>{d.value=!1})}let w=be();function M(i){switch(f.value=!0,w(()=>{f.value=!1}),i.key){case F.Enter:if(f.value=!1,e.comboboxState.value!==0||d.value)return;if(i.preventDefault(),i.stopPropagation(),e.activeOptionIndex.value===null){e.closeCombobox();return}e.selectActiveOption(),e.mode.value===0&&e.closeCombobox();break;case F.ArrowDown:return f.value=!1,i.preventDefault(),i.stopPropagation(),_(e.comboboxState.value,{[0]:()=>e.goToOption(P.Next),[1]:()=>e.openCombobox()});case F.ArrowUp:return f.value=!1,i.preventDefault(),i.stopPropagation(),_(e.comboboxState.value,{[0]:()=>e.goToOption(P.Previous),[1]:()=>{e.openCombobox(),N(()=>{e.value.value||e.goToOption(P.Last)})}});case F.Home:if(i.shiftKey)break;return f.value=!1,i.preventDefault(),i.stopPropagation(),e.goToOption(P.First);case F.PageUp:return f.value=!1,i.preventDefault(),i.stopPropagation(),e.goToOption(P.First);case F.End:if(i.shiftKey)break;return f.value=!1,i.preventDefault(),i.stopPropagation(),e.goToOption(P.Last);case F.PageDown:return f.value=!1,i.preventDefault(),i.stopPropagation(),e.goToOption(P.Last);case F.Escape:if(f.value=!1,e.comboboxState.value!==0)return;i.preventDefault(),e.optionsRef.value&&!e.optionsPropsRef.value.static&&i.stopPropagation(),e.nullable.value&&e.mode.value===0&&e.value.value===null&&S(),e.closeCombobox();break;case F.Tab:if(f.value=!1,e.comboboxState.value!==0)return;e.mode.value===0&&e.activationTrigger.value!==1&&e.selectActiveOption(),e.closeCombobox();break}}function $(i){h(\"change\",i),e.nullable.value&&e.mode.value===0&&i.target.value===\"\"&&S(),e.openCombobox()}function B(i){var T,l,g;let I=(T=i.relatedTarget)!=null?T:oe.find(t=>t!==i.currentTarget);if(f.value=!1,!((l=x(e.optionsRef))!=null&&l.contains(I))&&!((g=x(e.buttonRef))!=null&&g.contains(I))&&e.comboboxState.value===0)return i.preventDefault(),e.mode.value===0&&(e.nullable.value&&e.value.value===null?S():e.activationTrigger.value!==1&&e.selectActiveOption()),e.closeCombobox()}function p(i){var T,l,g;let I=(T=i.relatedTarget)!=null?T:oe.find(t=>t!==i.currentTarget);(l=x(e.buttonRef))!=null&&l.contains(I)||(g=x(e.optionsRef))!=null&&g.contains(I)||e.disabled.value||e.immediate.value&&e.comboboxState.value!==0&&(e.openCombobox(),ae().nextFrame(()=>{e.setActivationTrigger(1)}))}let R=m(()=>{var i,I,T,l;return(l=(T=(I=a.defaultValue)!=null?I:e.defaultValue.value!==void 0?(i=a.displayValue)==null?void 0:i.call(a,e.defaultValue.value):null)!=null?T:e.defaultValue.value)!=null?l:\"\"});return()=>{var t,n,s,b,O,C,A;let i={open:e.comboboxState.value===0},{displayValue:I,onChange:T,...l}=a,g={\"aria-controls\":(t=e.optionsRef.value)==null?void 0:t.id,\"aria-expanded\":e.comboboxState.value===0,\"aria-activedescendant\":e.activeOptionIndex.value===null?void 0:e.virtual.value?(n=e.options.value.find(j=>!e.virtual.value.disabled(j.dataRef.value)&&e.compare(j.dataRef.value,e.virtual.value.options[e.activeOptionIndex.value])))==null?void 0:n.id:(s=e.options.value[e.activeOptionIndex.value])==null?void 0:s.id,\"aria-labelledby\":(C=(b=x(e.labelRef))==null?void 0:b.id)!=null?C:(O=x(e.buttonRef))==null?void 0:O.id,\"aria-autocomplete\":\"list\",id:u,onCompositionstart:D,onCompositionend:E,onKeydown:M,onInput:$,onFocus:p,onBlur:B,role:\"combobox\",type:(A=r.type)!=null?A:\"text\",tabIndex:0,ref:e.inputRef,defaultValue:R.value,disabled:e.disabled.value===!0?!0:void 0};return U({ourProps:g,theirProps:l,slot:i,attrs:r,slots:y,features:Q.RenderStrategy|Q.Static,name:\"ComboboxInput\"})}}}),ut=H({name:\"ComboboxOptions\",props:{as:{type:[Object,String],default:\"ul\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},hold:{type:[Boolean],default:!1}},setup(a,{attrs:h,slots:r,expose:y}){let o=K(\"ComboboxOptions\"),u=`headlessui-combobox-options-${W()}`;y({el:o.optionsRef,$el:o.optionsRef}),Y(()=>{o.optionsPropsRef.value.static=a.static}),Y(()=>{o.optionsPropsRef.value.hold=a.hold});let e=Ce(),c=m(()=>e!==null?(e.value&G.Open)===G.Open:o.comboboxState.value===0);ge({container:m(()=>x(o.optionsRef)),enabled:m(()=>o.comboboxState.value===0),accept(S){return S.getAttribute(\"role\")===\"option\"?NodeFilter.FILTER_REJECT:S.hasAttribute(\"role\")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(S){S.setAttribute(\"role\",\"none\")}});function f(S){S.preventDefault()}return()=>{var D,E,w;let S={open:o.comboboxState.value===0},v={\"aria-labelledby\":(w=(D=x(o.labelRef))==null?void 0:D.id)!=null?w:(E=x(o.buttonRef))==null?void 0:E.id,id:u,ref:o.optionsRef,role:\"listbox\",\"aria-multiselectable\":o.mode.value===1?!0:void 0,onMousedown:f},d=Z(a,[\"hold\"]);return U({ourProps:v,theirProps:d,slot:S,attrs:h,slots:o.virtual.value&&o.comboboxState.value===0?{...r,default:()=>[z(Ae,{},r.default)]}:r,features:Q.RenderStrategy|Q.Static,visible:c.value,name:\"ComboboxOptions\"})}}}),rt=H({name:\"ComboboxOption\",props:{as:{type:[Object,String],default:\"li\"},value:{type:[Object,String,Number,Boolean]},disabled:{type:Boolean,default:!1},order:{type:[Number],default:null}},setup(a,{slots:h,attrs:r,expose:y}){let o=K(\"ComboboxOption\"),u=`headlessui-combobox-option-${W()}`,e=k(null),c=m(()=>a.disabled);y({el:e,$el:e});let f=m(()=>{var p;return o.virtual.value?o.activeOptionIndex.value===o.calculateIndex(a.value):o.activeOptionIndex.value===null?!1:((p=o.options.value[o.activeOptionIndex.value])==null?void 0:p.id)===u}),S=m(()=>o.isSelected(a.value)),v=ee(ie,null),d=m(()=>({disabled:a.disabled,value:a.value,domRef:e,order:m(()=>a.order)}));X(()=>o.registerOption(u,d)),fe(()=>o.unregisterOption(u,f.value)),Y(()=>{let p=x(e);p&&(v==null||v.value.measureElement(p))}),Y(()=>{o.comboboxState.value===0&&f.value&&(o.virtual.value||o.activationTrigger.value!==0&&N(()=>{var p,R;return(R=(p=x(e))==null?void 0:p.scrollIntoView)==null?void 0:R.call(p,{block:\"nearest\"})}))});function D(p){p.preventDefault(),p.button===ye.Left&&(c.value||(o.selectOption(u),we()||requestAnimationFrame(()=>{var R;return(R=x(o.inputRef))==null?void 0:R.focus({preventScroll:!0})}),o.mode.value===0&&o.closeCombobox()))}function E(){var R;if(a.disabled||(R=o.virtual.value)!=null&&R.disabled(a.value))return o.goToOption(P.Nothing);let p=o.calculateIndex(a.value);o.goToOption(P.Specific,p)}let w=xe();function M(p){w.update(p)}function $(p){var V;if(!w.wasMoved(p)||a.disabled||(V=o.virtual.value)!=null&&V.disabled(a.value)||f.value)return;let R=o.calculateIndex(a.value);o.goToOption(P.Specific,R,0)}function B(p){var R;w.wasMoved(p)&&(a.disabled||(R=o.virtual.value)!=null&&R.disabled(a.value)||f.value&&(o.optionsPropsRef.value.hold||o.goToOption(P.Nothing)))}return()=>{let{disabled:p}=a,R={active:f.value,selected:S.value,disabled:p},V={id:u,ref:e,role:\"option\",tabIndex:p===!0?void 0:-1,\"aria-disabled\":p===!0?!0:void 0,\"aria-selected\":S.value,disabled:void 0,onMousedown:D,onFocus:E,onPointerenter:M,onMouseenter:M,onPointermove:$,onMousemove:$,onPointerleave:B,onMouseleave:B},i=Z(a,[\"order\",\"value\"]);return U({ourProps:V,theirProps:i,slot:R,attrs:r,slots:h,name:\"ComboboxOption\"})}}});export{lt as Combobox,nt as ComboboxButton,it as ComboboxInput,at as ComboboxLabel,rt as ComboboxOption,ut as ComboboxOptions};\n","<template>\n  <HeadlessCombobox v-model=\"model\" as=\"div\" :nullable=\"true\" class=\"relative\">\n    <HeadlessComboboxInput\n      ref=\"input\"\n      class=\"flex items-center h-12 w-full pl-[3.25rem] pr-4 gap-4 rounded border border-bgr-300 text-sm font-semibold truncate placeholder:font-semibold placeholder:text-txt-weak transition hover:bg-bgr-100 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover focus:border-thm-hover\"\n      :display-value=\"(option) => (option as Option)?.label\"\n      :placeholder=\"$t(`${trPrefix}placeholders.where`)\"\n      @focus=\"handleFocus\"\n      @change=\"handleInput\"\n    />\n\n    <div class=\"absolute top-0 bottom-0 ml-4 flex items-center\">\n      <WebccIcon name=\"site/search\" class=\"h-5 w-5\" />\n    </div>\n\n    <div\n      v-if=\"model\"\n      class=\"absolute right-4 top-[0.9rem] cursor-pointer opacity-20 hover:opacity-60\"\n      @click.stop=\"handleClear\"\n    >\n      <WebccIcon name=\"site/x\" class=\"h-5 w-5 fill-current text-txt\" />\n    </div>\n\n    <HeadlessComboboxOptions\n      v-if=\"options && options.length\"\n      class=\"absolute z-10 mt-2 py-1 w-full rounded-lg border border-bgr-300 shadow-lg origin-top-left bg-bgr focus:outline-none\"\n      :static=\"!query && focused\"\n    >\n      <HeadlessComboboxOption\n        v-for=\"(option, index) in options\"\n        :key=\"`${index}-${option.code}`\"\n        v-slot=\"{ selected, active }\"\n        :value=\"option\"\n        as=\"template\"\n      >\n        <div\n          class=\"flex flex-row p-2 gap-2 text-xs cursor-pointer even:bg-bgr-100\"\n          :class=\"{ '!bg-bgr-300': active || selected }\"\n        >\n          <WebccIcon\n            :name=\"`flags/${option.country.toLowerCase()}`\"\n            class=\"h-4 w-4 shrink-0\"\n            filled\n          />\n          <span class=\"grow\" :title=\"option.code\">{{ option.label }}</span>\n          <span class=\"grow-0 shrink-0\">\n            {{ $t(`${trPrefix}${option.type}`) }}\n          </span>\n        </div>\n      </HeadlessComboboxOption>\n    </HeadlessComboboxOptions>\n  </HeadlessCombobox>\n</template>\n\n<script setup lang=\"ts\">\nimport type { SearchApiSuggestion } from '~/api/search-api.types'\nimport type { ComboboxInput } from '@headlessui/vue'\nimport type { MaybeElementRef } from '@vueuse/core'\n\ntype Option = SearchApiSuggestion\n\nconst trPrefix = 'www.components.elements.SearchBox.'\n\nconst model = defineModel<Option | undefined>()\n\nconst confData = useConfdata()\nconst settings = useSettings()\n\nconst input = shallowRef<InstanceType<typeof ComboboxInput>>()\nconst { focused } = useFocus(input as MaybeElementRef)\n\nconst query = ref<string>(model.value?.label ?? '')\n\nconst { data, refetch } = useSearchApiSuggestionsQuery(() => ({\n  query: query.value,\n}))\n\nconst defaultOptions = computed(() => {\n  const topDestinations = confData.body?.find(\n    (block: Block) => block.component === 'StartTopDestinations',\n  )?.content as TopDestinationsBlockContent | undefined\n  const { countries, regions, allCountries } = topDestinations ?? {}\n\n  return [countries, regions]\n    .flatMap((teasers) => teasers?.slice(0, 3) ?? [])\n    .map((teaser) => mapTeaserToSuggestion(teaser, allCountries ?? []))\n    .filter((suggestion) => !!suggestion)\n})\n\nconst options = computed<Option[]>(() => {\n  if (!query.value) return defaultOptions.value\n  if (query.value.length < settings.autosuggestThreshold) return []\n\n  return data.value ?? []\n})\n\nfunction handleFocus() {\n  if (!query.value || options.value.length) return\n\n  refetch()\n}\n\nconst handleInput = useDebounceFn(handleQueryChange, SEARCH_DEBOUNCE_TIME)\n\nfunction handleQueryChange({ target }: Event) {\n  query.value = (target as HTMLInputElement).value\n}\n\nfunction handleClear() {\n  query.value = ''\n  model.value = undefined\n\n  nextTick(() => {\n    input.value!.$el.value = ''\n    input.value!.$el.focus()\n  })\n}\n</script>\n","import{watchEffect as i}from\"vue\";import{env as a}from'../utils/env.js';function E(n,e,o,r){a.isServer||i(t=>{n=n!=null?n:window,n.addEventListener(e,o,r),t(()=>n.removeEventListener(e,o,r))})}export{E as useEventListener};\n","import{ref as a}from\"vue\";import{useWindowEvent as t}from'./use-window-event.js';var d=(r=>(r[r.Forwards=0]=\"Forwards\",r[r.Backwards=1]=\"Backwards\",r))(d||{});function n(){let o=a(0);return t(\"keydown\",e=>{e.key===\"Tab\"&&(o.value=e.shiftKey?1:0)}),o}export{d as Direction,n as useTabDirection};\n","import{computed as L,defineComponent as I,Fragment as j,h as R,onMounted as M,onUnmounted as h,ref as E,watch as g,watchEffect as K}from\"vue\";import{useEventListener as U}from'../../hooks/use-event-listener.js';import{Direction as y,useTabDirection as _}from'../../hooks/use-tab-direction.js';import{Features as k,Hidden as D}from'../../internal/hidden.js';import{history as C}from'../../utils/active-element-history.js';import{dom as c}from'../../utils/dom.js';import{Focus as v,focusElement as p,focusIn as b,FocusResult as q}from'../../utils/focus-management.js';import{match as P}from'../../utils/match.js';import{microTask as S}from'../../utils/micro-task.js';import{getOwnerDocument as x}from'../../utils/owner.js';import{render as G}from'../../utils/render.js';function B(t){if(!t)return new Set;if(typeof t==\"function\")return new Set(t());let n=new Set;for(let r of t.value){let l=c(r);l instanceof HTMLElement&&n.add(l)}return n}var A=(e=>(e[e.None=1]=\"None\",e[e.InitialFocus=2]=\"InitialFocus\",e[e.TabLock=4]=\"TabLock\",e[e.FocusLock=8]=\"FocusLock\",e[e.RestoreFocus=16]=\"RestoreFocus\",e[e.All=30]=\"All\",e))(A||{});let ue=Object.assign(I({name:\"FocusTrap\",props:{as:{type:[Object,String],default:\"div\"},initialFocus:{type:Object,default:null},features:{type:Number,default:30},containers:{type:[Object,Function],default:E(new Set)}},inheritAttrs:!1,setup(t,{attrs:n,slots:r,expose:l}){let o=E(null);l({el:o,$el:o});let i=L(()=>x(o)),e=E(!1);M(()=>e.value=!0),h(()=>e.value=!1),$({ownerDocument:i},L(()=>e.value&&Boolean(t.features&16)));let m=z({ownerDocument:i,container:o,initialFocus:L(()=>t.initialFocus)},L(()=>e.value&&Boolean(t.features&2)));J({ownerDocument:i,container:o,containers:t.containers,previousActiveElement:m},L(()=>e.value&&Boolean(t.features&8)));let f=_();function a(u){let T=c(o);if(!T)return;(w=>w())(()=>{P(f.value,{[y.Forwards]:()=>{b(T,v.First,{skipElements:[u.relatedTarget]})},[y.Backwards]:()=>{b(T,v.Last,{skipElements:[u.relatedTarget]})}})})}let s=E(!1);function F(u){u.key===\"Tab\"&&(s.value=!0,requestAnimationFrame(()=>{s.value=!1}))}function H(u){if(!e.value)return;let T=B(t.containers);c(o)instanceof HTMLElement&&T.add(c(o));let d=u.relatedTarget;d instanceof HTMLElement&&d.dataset.headlessuiFocusGuard!==\"true\"&&(N(T,d)||(s.value?b(c(o),P(f.value,{[y.Forwards]:()=>v.Next,[y.Backwards]:()=>v.Previous})|v.WrapAround,{relativeTo:u.target}):u.target instanceof HTMLElement&&p(u.target)))}return()=>{let u={},T={ref:o,onKeydown:F,onFocusout:H},{features:d,initialFocus:w,containers:Q,...O}=t;return R(j,[Boolean(d&4)&&R(D,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:a,features:k.Focusable}),G({ourProps:T,theirProps:{...n,...O},slot:u,attrs:n,slots:r,name:\"FocusTrap\"}),Boolean(d&4)&&R(D,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:a,features:k.Focusable})])}}}),{features:A});function W(t){let n=E(C.slice());return g([t],([r],[l])=>{l===!0&&r===!1?S(()=>{n.value.splice(0)}):l===!1&&r===!0&&(n.value=C.slice())},{flush:\"post\"}),()=>{var r;return(r=n.value.find(l=>l!=null&&l.isConnected))!=null?r:null}}function $({ownerDocument:t},n){let r=W(n);M(()=>{K(()=>{var l,o;n.value||((l=t.value)==null?void 0:l.activeElement)===((o=t.value)==null?void 0:o.body)&&p(r())},{flush:\"post\"})}),h(()=>{n.value&&p(r())})}function z({ownerDocument:t,container:n,initialFocus:r},l){let o=E(null),i=E(!1);return M(()=>i.value=!0),h(()=>i.value=!1),M(()=>{g([n,r,l],(e,m)=>{if(e.every((a,s)=>(m==null?void 0:m[s])===a)||!l.value)return;let f=c(n);f&&S(()=>{var F,H;if(!i.value)return;let a=c(r),s=(F=t.value)==null?void 0:F.activeElement;if(a){if(a===s){o.value=s;return}}else if(f.contains(s)){o.value=s;return}a?p(a):b(f,v.First|v.NoScroll)===q.Error&&console.warn(\"There are no focusable elements inside the <FocusTrap />\"),o.value=(H=t.value)==null?void 0:H.activeElement})},{immediate:!0,flush:\"post\"})}),o}function J({ownerDocument:t,container:n,containers:r,previousActiveElement:l},o){var i;U((i=t.value)==null?void 0:i.defaultView,\"focus\",e=>{if(!o.value)return;let m=B(r);c(n)instanceof HTMLElement&&m.add(c(n));let f=l.value;if(!f)return;let a=e.target;a&&a instanceof HTMLElement?N(m,a)?(l.value=a,p(a)):(e.preventDefault(),e.stopPropagation(),p(f)):p(l.value)},!0)}function N(t,n){for(let r of t)if(r.contains(n))return!0;return!1}export{ue as FocusTrap};\n","import{onUnmounted as o,shallowRef as n}from\"vue\";function m(t){let e=n(t.getSnapshot());return o(t.subscribe(()=>{e.value=t.getSnapshot()})),e}export{m as useStore};\n","function a(o,r){let t=o(),n=new Set;return{getSnapshot(){return t},subscribe(e){return n.add(e),()=>n.delete(e)},dispatch(e,...s){let i=r[e].call(t,...s);i&&(t=i,n.forEach(c=>c()))}}}export{a as createStore};\n","function c(){let o;return{before({doc:e}){var l;let n=e.documentElement;o=((l=e.defaultView)!=null?l:window).innerWidth-n.clientWidth},after({doc:e,d:n}){let t=e.documentElement,l=t.clientWidth-t.offsetWidth,r=o-l;n.style(t,\"paddingRight\",`${r}px`)}}}export{c as adjustScrollbarPadding};\n","import{disposables as m}from'../../utils/disposables.js';import{isIOS as u}from'../../utils/platform.js';function w(){return u()?{before({doc:r,d:n,meta:c}){function a(o){return c.containers.flatMap(l=>l()).some(l=>l.contains(o))}n.microTask(()=>{var s;if(window.getComputedStyle(r.documentElement).scrollBehavior!==\"auto\"){let t=m();t.style(r.documentElement,\"scrollBehavior\",\"auto\"),n.add(()=>n.microTask(()=>t.dispose()))}let o=(s=window.scrollY)!=null?s:window.pageYOffset,l=null;n.addEventListener(r,\"click\",t=>{if(t.target instanceof HTMLElement)try{let e=t.target.closest(\"a\");if(!e)return;let{hash:f}=new URL(e.href),i=r.querySelector(f);i&&!a(i)&&(l=i)}catch{}},!0),n.addEventListener(r,\"touchstart\",t=>{if(t.target instanceof HTMLElement)if(a(t.target)){let e=t.target;for(;e.parentElement&&a(e.parentElement);)e=e.parentElement;n.style(e,\"overscrollBehavior\",\"contain\")}else n.style(t.target,\"touchAction\",\"none\")}),n.addEventListener(r,\"touchmove\",t=>{if(t.target instanceof HTMLElement){if(t.target.tagName===\"INPUT\")return;if(a(t.target)){let e=t.target;for(;e.parentElement&&e.dataset.headlessuiPortal!==\"\"&&!(e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth);)e=e.parentElement;e.dataset.headlessuiPortal===\"\"&&t.preventDefault()}else t.preventDefault()}},{passive:!1}),n.add(()=>{var e;let t=(e=window.scrollY)!=null?e:window.pageYOffset;o!==t&&window.scrollTo(0,o),l&&l.isConnected&&(l.scrollIntoView({block:\"nearest\"}),l=null)})})}}:{}}export{w as handleIOSLocking};\n","function l(){return{before({doc:e,d:o}){o.style(e.documentElement,\"overflow\",\"hidden\")}}}export{l as preventScroll};\n","import{disposables as s}from'../../utils/disposables.js';import{createStore as i}from'../../utils/store.js';import{adjustScrollbarPadding as l}from'./adjust-scrollbar-padding.js';import{handleIOSLocking as d}from'./handle-ios-locking.js';import{preventScroll as p}from'./prevent-scroll.js';function m(e){let n={};for(let t of e)Object.assign(n,t(n));return n}let a=i(()=>new Map,{PUSH(e,n){var o;let t=(o=this.get(e))!=null?o:{doc:e,count:0,d:s(),meta:new Set};return t.count++,t.meta.add(n),this.set(e,t),this},POP(e,n){let t=this.get(e);return t&&(t.count--,t.meta.delete(n)),this},SCROLL_PREVENT({doc:e,d:n,meta:t}){let o={doc:e,d:n,meta:m(t)},c=[d(),l(),p()];c.forEach(({before:r})=>r==null?void 0:r(o)),c.forEach(({after:r})=>r==null?void 0:r(o))},SCROLL_ALLOW({d:e}){e.dispose()},TEARDOWN({doc:e}){this.delete(e)}});a.subscribe(()=>{let e=a.getSnapshot(),n=new Map;for(let[t]of e)n.set(t,t.documentElement.style.overflow);for(let t of e.values()){let o=n.get(t.doc)===\"hidden\",c=t.count!==0;(c&&!o||!c&&o)&&a.dispatch(t.count>0?\"SCROLL_PREVENT\":\"SCROLL_ALLOW\",t),t.count===0&&a.dispatch(\"TEARDOWN\",t)}});export{a as overflows};\n","import{computed as p,watch as s}from\"vue\";import{useStore as v}from'../../hooks/use-store.js';import{overflows as u}from'./overflow-store.js';function d(t,a,n){let i=v(u),l=p(()=>{let e=t.value?i.value.get(t.value):void 0;return e?e.count>0:!1});return s([t,a],([e,m],[r],o)=>{if(!e||!m)return;u.dispatch(\"PUSH\",e,n);let f=!1;o(()=>{f||(u.dispatch(\"POP\",r!=null?r:e,n),f=!0)})},{immediate:!0}),l}export{d as useDocumentOverflowLockedEffect};\n","import{ref as m,watchEffect as s}from\"vue\";import{dom as h}from'../utils/dom.js';let i=new Map,t=new Map;function E(d,f=m(!0)){s(o=>{var a;if(!f.value)return;let e=h(d);if(!e)return;o(function(){var u;if(!e)return;let r=(u=t.get(e))!=null?u:1;if(r===1?t.delete(e):t.set(e,r-1),r!==1)return;let n=i.get(e);n&&(n[\"aria-hidden\"]===null?e.removeAttribute(\"aria-hidden\"):e.setAttribute(\"aria-hidden\",n[\"aria-hidden\"]),e.inert=n.inert,i.delete(e))});let l=(a=t.get(e))!=null?a:0;t.set(e,l+1),l===0&&(i.set(e,{\"aria-hidden\":e.getAttribute(\"aria-hidden\"),inert:e.inert}),e.setAttribute(\"aria-hidden\",\"true\"),e.inert=!0)})}export{E as useInert};\n","import{h as m,ref as s}from\"vue\";import{Features as d,Hidden as c}from'../internal/hidden.js';import{dom as T}from'../utils/dom.js';import{getOwnerDocument as E}from'../utils/owner.js';function N({defaultContainers:o=[],portals:i,mainTreeNodeRef:H}={}){let t=s(null),r=E(t);function u(){var l,f,a;let n=[];for(let e of o)e!==null&&(e instanceof HTMLElement?n.push(e):\"value\"in e&&e.value instanceof HTMLElement&&n.push(e.value));if(i!=null&&i.value)for(let e of i.value)n.push(e);for(let e of(l=r==null?void 0:r.querySelectorAll(\"html > *, body > *\"))!=null?l:[])e!==document.body&&e!==document.head&&e instanceof HTMLElement&&e.id!==\"headlessui-portal-root\"&&(e.contains(T(t))||e.contains((a=(f=T(t))==null?void 0:f.getRootNode())==null?void 0:a.host)||n.some(M=>e.contains(M))||n.push(e));return n}return{resolveContainers:u,contains(n){return u().some(l=>l.contains(n))},mainTreeNodeRef:t,MainTreeNode(){return H!=null?null:m(c,{features:d.Hidden,ref:t})}}}function v(){let o=s(null);return{mainTreeNodeRef:o,MainTreeNode(){return m(c,{features:d.Hidden,ref:o})}}}export{v as useMainTreeNode,N as useRootContainers};\n","import{defineComponent as l,inject as a,provide as c}from\"vue\";import{render as p}from'../utils/render.js';let e=Symbol(\"ForcePortalRootContext\");function s(){return a(e,!1)}let u=l({name:\"ForcePortalRoot\",props:{as:{type:[Object,String],default:\"template\"},force:{type:Boolean,default:!1}},setup(o,{slots:t,attrs:r}){return c(e,o.force),()=>{let{force:f,...n}=o;return p({theirProps:n,ourProps:{},slot:{},slots:t,attrs:r,name:\"ForcePortalRoot\"})}}});export{u as ForcePortalRoot,s as usePortalRoot};\n","import{inject as f,onMounted as m,onUnmounted as l,provide as c,watch as p}from\"vue\";let u=Symbol(\"StackContext\");var s=(e=>(e[e.Add=0]=\"Add\",e[e.Remove=1]=\"Remove\",e))(s||{});function y(){return f(u,()=>{})}function R({type:o,enabled:r,element:e,onUpdate:i}){let a=y();function t(...n){i==null||i(...n),a(...n)}m(()=>{p(r,(n,d)=>{n?t(0,o,e):d===!0&&t(1,o,e)},{immediate:!0,flush:\"sync\"})}),l(()=>{r.value&&t(1,o,e)}),c(u,t)}export{s as StackMessage,y as useStackContext,R as useStackProvider};\n","import{computed as x,defineComponent as y,inject as R,onMounted as v,onUnmounted as D,provide as j,ref as p,unref as C}from\"vue\";import{useId as h}from'../../hooks/use-id.js';import{render as b}from'../../utils/render.js';let u=Symbol(\"DescriptionContext\");function w(){let t=R(u,null);if(t===null)throw new Error(\"Missing parent\");return t}function k({slot:t=p({}),name:o=\"Description\",props:s={}}={}){let e=p([]);function r(n){return e.value.push(n),()=>{let i=e.value.indexOf(n);i!==-1&&e.value.splice(i,1)}}return j(u,{register:r,slot:t,name:o,props:s}),x(()=>e.value.length>0?e.value.join(\" \"):void 0)}let K=y({name:\"Description\",props:{as:{type:[Object,String],default:\"p\"},id:{type:String,default:null}},setup(t,{attrs:o,slots:s}){var n;let e=(n=t.id)!=null?n:`headlessui-description-${h()}`,r=w();return v(()=>D(r.register(e))),()=>{let{name:i=\"Description\",slot:l=p({}),props:d={}}=r,{...c}=t,f={...Object.entries(d).reduce((a,[g,m])=>Object.assign(a,{[g]:C(m)}),{}),id:e};return b({ourProps:f,theirProps:c,slot:l.value,attrs:o,slots:s,name:i})}}});export{K as Description,k as useDescriptions};\n","import{computed as w,defineComponent as m,getCurrentInstance as j,h as I,inject as s,onMounted as R,onUnmounted as y,provide as E,reactive as G,ref as p,Teleport as O,watch as D,watchEffect as K}from\"vue\";import{usePortalRoot as S}from'../../internal/portal-force-root.js';import{dom as B}from'../../utils/dom.js';import{getOwnerDocument as C}from'../../utils/owner.js';import{render as h}from'../../utils/render.js';function x(e){let t=C(e);if(!t){if(e===null)return null;throw new Error(`[Headless UI]: Cannot find ownerDocument for contextElement: ${e}`)}let l=t.getElementById(\"headlessui-portal-root\");if(l)return l;let r=t.createElement(\"div\");return r.setAttribute(\"id\",\"headlessui-portal-root\"),t.body.appendChild(r)}const f=new WeakMap;function U(e){var t;return(t=f.get(e))!=null?t:0}function M(e,t){let l=t(U(e));return l<=0?f.delete(e):f.set(e,l),l}let $=m({name:\"Portal\",props:{as:{type:[Object,String],default:\"div\"}},setup(e,{slots:t,attrs:l}){let r=p(null),i=w(()=>C(r)),o=S(),u=s(H,null),n=p(o===!0||u==null?x(r.value):u.resolveTarget());n.value&&M(n.value,a=>a+1);let c=p(!1);R(()=>{c.value=!0}),K(()=>{o||u!=null&&(n.value=u.resolveTarget())});let v=s(d,null),g=!1,b=j();return D(r,()=>{if(g||!v)return;let a=B(r);a&&(y(v.register(a),b),g=!0)}),y(()=>{var P,T;let a=(P=i.value)==null?void 0:P.getElementById(\"headlessui-portal-root\");!a||n.value!==a||M(n.value,L=>L-1)||n.value.children.length>0||(T=n.value.parentElement)==null||T.removeChild(n.value)}),()=>{if(!c.value||n.value===null)return null;let a={ref:r,\"data-headlessui-portal\":\"\"};return I(O,{to:n.value},h({ourProps:a,theirProps:e,slot:{},attrs:l,slots:t,name:\"Portal\"}))}}}),d=Symbol(\"PortalParentContext\");function q(){let e=s(d,null),t=p([]);function l(o){return t.value.push(o),e&&e.register(o),()=>r(o)}function r(o){let u=t.value.indexOf(o);u!==-1&&t.value.splice(u,1),e&&e.unregister(o)}let i={register:l,unregister:r,portals:t};return[t,m({name:\"PortalWrapper\",setup(o,{slots:u}){return E(d,i),()=>{var n;return(n=u.default)==null?void 0:n.call(u)}}})]}let H=Symbol(\"PortalGroupContext\"),z=m({name:\"PortalGroup\",props:{as:{type:[Object,String],default:\"template\"},target:{type:Object,default:null}},setup(e,{attrs:t,slots:l}){let r=G({resolveTarget(){return e.target}});return E(H,r),()=>{let{target:i,...o}=e;return h({theirProps:o,ourProps:{},slot:{},attrs:t,slots:l,name:\"PortalGroup\"})}}});export{$ as Portal,z as PortalGroup,q as useNestedPortals};\n","import{computed as o,defineComponent as O,h as v,inject as Y,nextTick as se,onMounted as $,onUnmounted as pe,provide as de,ref as y,watchEffect as fe}from\"vue\";import{FocusTrap as P}from'../../components/focus-trap/focus-trap.js';import{useDocumentOverflowLockedEffect as ge}from'../../hooks/document-overflow/use-document-overflow.js';import{useEventListener as ce}from'../../hooks/use-event-listener.js';import{useId as b}from'../../hooks/use-id.js';import{useInert as _}from'../../hooks/use-inert.js';import{useOutsideClick as ve}from'../../hooks/use-outside-click.js';import{useRootContainers as me}from'../../hooks/use-root-containers.js';import{State as I,useOpenClosed as De}from'../../internal/open-closed.js';import{ForcePortalRoot as F}from'../../internal/portal-force-root.js';import{StackMessage as z,useStackProvider as ye}from'../../internal/stack-context.js';import{Keys as Se}from'../../keyboard.js';import{dom as j}from'../../utils/dom.js';import{match as G}from'../../utils/match.js';import{getOwnerDocument as he}from'../../utils/owner.js';import{Features as V,render as C}from'../../utils/render.js';import{Description as Oe,useDescriptions as Pe}from'../description/description.js';import{Portal as J,PortalGroup as be,useNestedPortals as Ce}from'../portal/portal.js';var Te=(l=>(l[l.Open=0]=\"Open\",l[l.Closed=1]=\"Closed\",l))(Te||{});let H=Symbol(\"DialogContext\");function T(t){let i=Y(H,null);if(i===null){let l=new Error(`<${t} /> is missing a parent <Dialog /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(l,T),l}return i}let A=\"DC8F892D-2EBD-447C-A4C8-A03058436FF4\",Ye=O({name:\"Dialog\",inheritAttrs:!1,props:{as:{type:[Object,String],default:\"div\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},open:{type:[Boolean,String],default:A},initialFocus:{type:Object,default:null},id:{type:String,default:null},role:{type:String,default:\"dialog\"}},emits:{close:t=>!0},setup(t,{emit:i,attrs:l,slots:p,expose:s}){var q,W;let n=(q=t.id)!=null?q:`headlessui-dialog-${b()}`,u=y(!1);$(()=>{u.value=!0});let r=!1,g=o(()=>t.role===\"dialog\"||t.role===\"alertdialog\"?t.role:(r||(r=!0,console.warn(`Invalid role [${g}] passed to <Dialog />. Only \\`dialog\\` and and \\`alertdialog\\` are supported. Using \\`dialog\\` instead.`)),\"dialog\")),D=y(0),S=De(),R=o(()=>t.open===A&&S!==null?(S.value&I.Open)===I.Open:t.open),m=y(null),E=o(()=>he(m));if(s({el:m,$el:m}),!(t.open!==A||S!==null))throw new Error(\"You forgot to provide an `open` prop to the `Dialog`.\");if(typeof R.value!=\"boolean\")throw new Error(`You provided an \\`open\\` prop to the \\`Dialog\\`, but the value is not a boolean. Received: ${R.value===A?void 0:t.open}`);let c=o(()=>u.value&&R.value?0:1),k=o(()=>c.value===0),w=o(()=>D.value>1),N=Y(H,null)!==null,[Q,X]=Ce(),{resolveContainers:B,mainTreeNodeRef:K,MainTreeNode:Z}=me({portals:Q,defaultContainers:[o(()=>{var e;return(e=h.panelRef.value)!=null?e:m.value})]}),ee=o(()=>w.value?\"parent\":\"leaf\"),U=o(()=>S!==null?(S.value&I.Closing)===I.Closing:!1),te=o(()=>N||U.value?!1:k.value),le=o(()=>{var e,a,d;return(d=Array.from((a=(e=E.value)==null?void 0:e.querySelectorAll(\"body > *\"))!=null?a:[]).find(f=>f.id===\"headlessui-portal-root\"?!1:f.contains(j(K))&&f instanceof HTMLElement))!=null?d:null});_(le,te);let ae=o(()=>w.value?!0:k.value),oe=o(()=>{var e,a,d;return(d=Array.from((a=(e=E.value)==null?void 0:e.querySelectorAll(\"[data-headlessui-portal]\"))!=null?a:[]).find(f=>f.contains(j(K))&&f instanceof HTMLElement))!=null?d:null});_(oe,ae),ye({type:\"Dialog\",enabled:o(()=>c.value===0),element:m,onUpdate:(e,a)=>{if(a===\"Dialog\")return G(e,{[z.Add]:()=>D.value+=1,[z.Remove]:()=>D.value-=1})}});let re=Pe({name:\"DialogDescription\",slot:o(()=>({open:R.value}))}),M=y(null),h={titleId:M,panelRef:y(null),dialogState:c,setTitleId(e){M.value!==e&&(M.value=e)},close(){i(\"close\",!1)}};de(H,h);let ne=o(()=>!(!k.value||w.value));ve(B,(e,a)=>{e.preventDefault(),h.close(),se(()=>a==null?void 0:a.focus())},ne);let ie=o(()=>!(w.value||c.value!==0));ce((W=E.value)==null?void 0:W.defaultView,\"keydown\",e=>{ie.value&&(e.defaultPrevented||e.key===Se.Escape&&(e.preventDefault(),e.stopPropagation(),h.close()))});let ue=o(()=>!(U.value||c.value!==0||N));return ge(E,ue,e=>{var a;return{containers:[...(a=e.containers)!=null?a:[],B]}}),fe(e=>{if(c.value!==0)return;let a=j(m);if(!a)return;let d=new ResizeObserver(f=>{for(let L of f){let x=L.target.getBoundingClientRect();x.x===0&&x.y===0&&x.width===0&&x.height===0&&h.close()}});d.observe(a),e(()=>d.disconnect())}),()=>{let{open:e,initialFocus:a,...d}=t,f={...l,ref:m,id:n,role:g.value,\"aria-modal\":c.value===0?!0:void 0,\"aria-labelledby\":M.value,\"aria-describedby\":re.value},L={open:c.value===0};return v(F,{force:!0},()=>[v(J,()=>v(be,{target:m.value},()=>v(F,{force:!1},()=>v(P,{initialFocus:a,containers:B,features:k.value?G(ee.value,{parent:P.features.RestoreFocus,leaf:P.features.All&~P.features.FocusLock}):P.features.None},()=>v(X,{},()=>C({ourProps:f,theirProps:{...d,...l},slot:L,attrs:l,slots:p,visible:c.value===0,features:V.RenderStrategy|V.Static,name:\"Dialog\"})))))),v(Z)])}}}),_e=O({name:\"DialogOverlay\",props:{as:{type:[Object,String],default:\"div\"},id:{type:String,default:null}},setup(t,{attrs:i,slots:l}){var u;let p=(u=t.id)!=null?u:`headlessui-dialog-overlay-${b()}`,s=T(\"DialogOverlay\");function n(r){r.target===r.currentTarget&&(r.preventDefault(),r.stopPropagation(),s.close())}return()=>{let{...r}=t;return C({ourProps:{id:p,\"aria-hidden\":!0,onClick:n},theirProps:r,slot:{open:s.dialogState.value===0},attrs:i,slots:l,name:\"DialogOverlay\"})}}}),ze=O({name:\"DialogBackdrop\",props:{as:{type:[Object,String],default:\"div\"},id:{type:String,default:null}},inheritAttrs:!1,setup(t,{attrs:i,slots:l,expose:p}){var r;let s=(r=t.id)!=null?r:`headlessui-dialog-backdrop-${b()}`,n=T(\"DialogBackdrop\"),u=y(null);return p({el:u,$el:u}),$(()=>{if(n.panelRef.value===null)throw new Error(\"A <DialogBackdrop /> component is being used, but a <DialogPanel /> component is missing.\")}),()=>{let{...g}=t,D={id:s,ref:u,\"aria-hidden\":!0};return v(F,{force:!0},()=>v(J,()=>C({ourProps:D,theirProps:{...i,...g},slot:{open:n.dialogState.value===0},attrs:i,slots:l,name:\"DialogBackdrop\"})))}}}),Ge=O({name:\"DialogPanel\",props:{as:{type:[Object,String],default:\"div\"},id:{type:String,default:null}},setup(t,{attrs:i,slots:l,expose:p}){var r;let s=(r=t.id)!=null?r:`headlessui-dialog-panel-${b()}`,n=T(\"DialogPanel\");p({el:n.panelRef,$el:n.panelRef});function u(g){g.stopPropagation()}return()=>{let{...g}=t,D={id:s,ref:n.panelRef,onClick:u};return C({ourProps:D,theirProps:g,slot:{open:n.dialogState.value===0},attrs:i,slots:l,name:\"DialogPanel\"})}}}),Ve=O({name:\"DialogTitle\",props:{as:{type:[Object,String],default:\"h2\"},id:{type:String,default:null}},setup(t,{attrs:i,slots:l}){var n;let p=(n=t.id)!=null?n:`headlessui-dialog-title-${b()}`,s=T(\"DialogTitle\");return $(()=>{s.setTitleId(p),pe(()=>s.setTitleId(null))}),()=>{let{...u}=t;return C({ourProps:{id:p},theirProps:u,slot:{open:s.dialogState.value===0},attrs:i,slots:l,name:\"DialogTitle\"})}}}),Je=Oe;export{Ye as Dialog,ze as DialogBackdrop,Je as DialogDescription,_e as DialogOverlay,Ge as DialogPanel,Ve as DialogTitle};\n","<template>\n  <div class=\"relative inline-block\" :class=\"screen.isSmall && 'w-full'\">\n    <slot name=\"button\" :toggle=\"toggle\"></slot>\n\n    <div\n      v-if=\"isOpen && !screen.isSmall\"\n      ref=\"popover\"\n      class=\"absolute z-[2] mt-2 h-auto bg-white rounded-lg shadow-lg border border-gray-200\"\n    >\n      <slot :close=\"close\"></slot>\n    </div>\n  </div>\n\n  <HeadlessDialog\n    v-if=\"screen.isSmall\"\n    as=\"div\"\n    :open=\"isOpen\"\n    class=\"relative z-10\"\n  >\n    <div class=\"fixed inset-0 overflow-y-auto\">\n      <div class=\"flex min-h-full items-center justify-center p-4 text-center\">\n        <HeadlessDialogPanel\n          class=\"z-[2] bg-bgr fixed top-0 left-0 w-full h-full\"\n        >\n          <slot :close=\"close\"></slot>\n        </HeadlessDialogPanel>\n      </div>\n    </div>\n  </HeadlessDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { onClickOutside } from '@vueuse/core'\n\nconst screen = useScreen()\n\nconst isOpen = ref(false)\nconst popover = ref<HTMLElement | null>(null)\n\ndefineSlots<{\n  'default'(props: { close(): void }): unknown\n  'button'(props: { toggle(): void }): unknown\n}>()\n\nfunction toggle() {\n  isOpen.value = !isOpen.value\n}\n\nfunction close() {\n  isOpen.value = false\n}\n\nonClickOutside(popover, () => {\n  if (isOpen.value) {\n    close()\n  }\n})\n</script>\n\n<style></style>\n","import { defineComponent, ref, h, watch, computed, reactive, shallowRef, nextTick, getCurrentInstance, onMounted, isVue2, watchEffect, toRefs } from 'vue-demi';\nimport { onClickOutside as onClickOutside$1, useActiveElement, useBattery, useBrowserLocation, useClipboard, useDark, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDocumentVisibility, useStorage as useStorage$1, isClient as isClient$1, useDraggable, useElementBounding, useElementSize as useElementSize$1, useElementVisibility as useElementVisibility$1, useEyeDropper, useFullscreen, useGeolocation, useIdle, useMouse, useMouseInElement, useMousePressed, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, usePointer, usePointerLock, usePreferredColorScheme, usePreferredContrast, usePreferredDark as usePreferredDark$1, usePreferredLanguages, usePreferredReducedMotion, useTimeAgo, useTimestamp, useVirtualList, useWindowFocus, useWindowSize } from '@vueuse/core';\nimport { toValue, isClient, noop, isObject, tryOnScopeDispose, isIOS, directiveHooks, pausableWatch, tryOnMounted, toRef, useToggle, notNullish, promiseTimeout, until, useDebounceFn, useThrottleFn } from '@vueuse/shared';\n\nconst OnClickOutside = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"OnClickOutside\",\n  props: [\"as\", \"options\"],\n  emits: [\"trigger\"],\n  setup(props, { slots, emit }) {\n    const target = ref();\n    onClickOutside$1(target, (e) => {\n      emit(\"trigger\", e);\n    }, props.options);\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default());\n    };\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;\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      const optionsClone = isObject(options2) ? { ...options2 } : options2;\n      cleanups.push(\n        ...events.flatMap((event) => {\n          return listeners.map((listener) => register(el, event, listener, optionsClone));\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 noop;\n  if (isIOS && !_iOSWorkaround) {\n    _iOSWorkaround = true;\n    Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n    window.document.documentElement.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      shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n    }, { passive: true }),\n    detectIframe && useEventListener(window, \"blur\", (event) => {\n      setTimeout(() => {\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      }, 0);\n    })\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nconst vOnClickOutside = {\n  [directiveHooks.mounted](el, binding) {\n    const capture = !binding.modifiers.bubble;\n    if (typeof binding.value === \"function\") {\n      el.__onClickOutside_stop = onClickOutside(el, binding.value, { capture });\n    } else {\n      const [handler, options] = binding.value;\n      el.__onClickOutside_stop = onClickOutside(el, handler, Object.assign({ capture }, options));\n    }\n  },\n  [directiveHooks.unmounted](el) {\n    el.__onClickOutside_stop();\n  }\n};\n\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}\n\nconst vOnKeyStroke = {\n  [directiveHooks.mounted](el, binding) {\n    var _a, _b;\n    const keys = (_b = (_a = binding.arg) == null ? void 0 : _a.split(\",\")) != null ? _b : true;\n    if (typeof binding.value === \"function\") {\n      onKeyStroke(keys, binding.value, {\n        target: el\n      });\n    } else {\n      const [handler, options] = binding.value;\n      onKeyStroke(keys, handler, {\n        target: el,\n        ...options\n      });\n    }\n  }\n};\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n  var _a, _b;\n  const elementRef = computed(() => unrefElement(target));\n  let timeout;\n  let posStart;\n  let startTimestamp;\n  let hasLongPressed = false;\n  function clear() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = void 0;\n    }\n    posStart = void 0;\n    startTimestamp = void 0;\n    hasLongPressed = false;\n  }\n  function onRelease(ev) {\n    var _a2, _b2, _c;\n    const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n    clear();\n    if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n      return;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\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    const dx = ev.x - _posStart.x;\n    const dy = ev.y - _posStart.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\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    posStart = {\n      x: ev.x,\n      y: ev.y\n    };\n    startTimestamp = ev.timeStamp;\n    timeout = setTimeout(\n      () => {\n        hasLongPressed = true;\n        handler(ev);\n      },\n      (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n    );\n  }\n  function onMove(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    if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n      return;\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    const dx = ev.x - posStart.x;\n    const dy = ev.y - posStart.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n      clear();\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  const cleanup = [\n    useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n    useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n    useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n  ];\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nconst OnLongPress = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"OnLongPress\",\n  props: [\"as\", \"options\"],\n  emits: [\"trigger\"],\n  setup(props, { slots, emit }) {\n    const target = ref();\n    onLongPress(\n      target,\n      (e) => {\n        emit(\"trigger\", e);\n      },\n      props.options\n    );\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default());\n    };\n  }\n});\n\nconst vOnLongPress = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\")\n      onLongPress(el, binding.value, { modifiers: binding.modifiers });\n    else\n      onLongPress(el, ...binding.value);\n  }\n};\n\nconst UseActiveElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseActiveElement\",\n  setup(props, { slots }) {\n    const data = reactive({\n      element: useActiveElement()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseBattery = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseBattery\",\n  setup(props, { slots }) {\n    const data = reactive(useBattery(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseBrowserLocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseBrowserLocation\",\n  setup(props, { slots }) {\n    const data = reactive(useBrowserLocation());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseClipboard = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseClipboard\",\n  props: [\n    \"source\",\n    \"read\",\n    \"navigator\",\n    \"copiedDuring\",\n    \"legacy\"\n  ],\n  setup(props, { slots }) {\n    const data = reactive(useClipboard(props));\n    return () => {\n      var _a;\n      return (_a = slots.default) == null ? void 0 : _a.call(slots, data);\n    };\n  }\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}\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\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    initOnMounted\n  } = options;\n  const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : 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    tryOnMounted(() => {\n      useEventListener(window, \"storage\", update);\n      useEventListener(window, customStorageEventName, updateFromCustomEvent);\n      if (initOnMounted)\n        update();\n    });\n  }\n  if (!initOnMounted)\n    update();\n  function dispatchWriteEvent(oldValue, newValue) {\n    if (window) {\n      window.dispatchEvent(new CustomEvent(customStorageEventName, {\n        detail: {\n          key,\n          oldValue,\n          newValue,\n          storageArea: storage\n        }\n      }));\n    }\n  }\n  function write(v) {\n    try {\n      const oldValue = storage.getItem(key);\n      if (v == null) {\n        dispatchWriteEvent(oldValue, null);\n        storage.removeItem(key);\n      } else {\n        const serialized = serializer.write(v);\n        if (oldValue !== serialized) {\n          storage.setItem(key, serialized);\n          dispatchWriteEvent(oldValue, serialized);\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 { ...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 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      if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\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  function updateFromCustomEvent(event) {\n    update(event.detail);\n  }\n  return data;\n}\n\nfunction useMounted() {\n  const isMounted = ref(false);\n  const instance = getCurrentInstance();\n  if (instance) {\n    onMounted(() => {\n      isMounted.value = true;\n    }, isVue2 ? void 0 : instance);\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 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 handler = (event) => {\n    matches.value = event.matches;\n  };\n  const cleanup = () => {\n    if (!mediaQuery)\n      return;\n    if (\"removeEventListener\" in mediaQuery)\n      mediaQuery.removeEventListener(\"change\", handler);\n    else\n      mediaQuery.removeListener(handler);\n  };\n  const stopWatch = watchEffect(() => {\n    if (!isSupported.value)\n      return;\n    cleanup();\n    mediaQuery = window.matchMedia(toValue(query));\n    if (\"addEventListener\" in mediaQuery)\n      mediaQuery.addEventListener(\"change\", handler);\n    else\n      mediaQuery.addListener(handler);\n    matches.value = mediaQuery.matches;\n  });\n  tryOnScopeDispose(() => {\n    stopWatch();\n    cleanup();\n    mediaQuery = void 0;\n  });\n  return matches;\n}\n\nfunction usePreferredDark(options) {\n  return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\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 = {\n    auto: \"\",\n    light: \"light\",\n    dark: \"dark\",\n    ...options.modes || {}\n  };\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(() => store.value === \"auto\" ? system.value : store.value);\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        const styleString = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n        style.appendChild(document.createTextNode(styleString));\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\nconst UseColorMode = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseColorMode\",\n  props: [\"selector\", \"attribute\", \"modes\", \"onChanged\", \"storageKey\", \"storage\", \"emitAuto\"],\n  setup(props, { slots }) {\n    const mode = useColorMode(props);\n    const data = reactive({\n      mode,\n      system: mode.system,\n      store: mode.store\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDark\",\n  props: [\"selector\", \"attribute\", \"valueDark\", \"valueLight\", \"onChanged\", \"storageKey\", \"storage\"],\n  setup(props, { slots }) {\n    const isDark = useDark(props);\n    const data = reactive({\n      isDark,\n      toggleDark: useToggle(isDark)\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDeviceMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDeviceMotion\",\n  setup(props, { slots }) {\n    const data = reactive(useDeviceMotion());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDeviceOrientation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDeviceOrientation\",\n  setup(props, { slots }) {\n    const data = reactive(useDeviceOrientation());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDevicePixelRatio = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDevicePixelRatio\",\n  setup(props, { slots }) {\n    const data = reactive({\n      pixelRatio: useDevicePixelRatio()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDevicesList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDevicesList\",\n  props: [\"onUpdated\", \"requestPermissions\", \"constraints\"],\n  setup(props, { slots }) {\n    const data = reactive(useDevicesList(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDocumentVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDocumentVisibility\",\n  setup(props, { slots }) {\n    const data = reactive({\n      visibility: useDocumentVisibility()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDraggable = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDraggable\",\n  props: [\n    \"storageKey\",\n    \"storageType\",\n    \"initialValue\",\n    \"exact\",\n    \"preventDefault\",\n    \"stopPropagation\",\n    \"pointerTypes\",\n    \"as\",\n    \"handle\",\n    \"axis\",\n    \"onStart\",\n    \"onMove\",\n    \"onEnd\",\n    \"disabled\"\n  ],\n  setup(props, { slots }) {\n    const target = ref();\n    const handle = computed(() => {\n      var _a;\n      return (_a = props.handle) != null ? _a : target.value;\n    });\n    const disabled = computed(() => !!props.disabled);\n    const storageValue = props.storageKey && useStorage$1(\n      props.storageKey,\n      toValue(props.initialValue) || { x: 0, y: 0 },\n      isClient$1 ? props.storageType === \"session\" ? sessionStorage : localStorage : void 0\n    );\n    const initialValue = storageValue || props.initialValue || { x: 0, y: 0 };\n    const onEnd = (position, event) => {\n      var _a;\n      (_a = props.onEnd) == null ? void 0 : _a.call(props, position, event);\n      if (!storageValue)\n        return;\n      storageValue.value.x = position.x;\n      storageValue.value.y = position.y;\n    };\n    const data = reactive(useDraggable(target, {\n      ...props,\n      handle,\n      initialValue,\n      onEnd,\n      disabled\n    }));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target, style: `touch-action:none;${data.style}` }, slots.default(data));\n    };\n  }\n});\n\nconst UseElementBounding = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseElementBounding\",\n  props: [\"box\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useElementBounding(target));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\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\nconst vElementHover = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\") {\n      const isHovered = useElementHover(el);\n      watch(isHovered, (v) => binding.value(v));\n    }\n  }\n};\n\nconst UseElementSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseElementSize\",\n  props: [\"width\", \"height\", \"box\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useElementSize$1(target, { width: props.width, height: props.height }, { box: props.box }));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nfunction useResizeObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...observerOptions } = options;\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(() => Array.isArray(target) ? target.map((el) => unrefElement(el)) : [unrefElement(target)]);\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\" }\n  );\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\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  const { stop: stop1 } = 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 rect = $elem.getBoundingClientRect();\n          width.value = rect.width;\n          height.value = rect.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  tryOnMounted(() => {\n    const ele = unrefElement(target);\n    if (ele) {\n      width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n      height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n    }\n  });\n  const stop2 = watch(\n    () => unrefElement(target),\n    (ele) => {\n      width.value = ele ? initialSize.width : 0;\n      height.value = ele ? initialSize.height : 0;\n    }\n  );\n  function stop() {\n    stop1();\n    stop2();\n  }\n  return {\n    width,\n    height,\n    stop\n  };\n}\n\nconst vElementSize = {\n  [directiveHooks.mounted](el, binding) {\n    var _a;\n    const handler = typeof binding.value === \"function\" ? binding.value : (_a = binding.value) == null ? void 0 : _a[0];\n    const options = typeof binding.value === \"function\" ? [] : binding.value.slice(1);\n    const { width, height } = useElementSize(el, ...options);\n    watch([width, height], ([width2, height2]) => handler({ width: width2, height: height2 }));\n  }\n};\n\nconst UseElementVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseElementVisibility\",\n  props: [\"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive({\n      isVisible: useElementVisibility$1(target)\n    });\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\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, options = {}) {\n  const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n  const elementIsVisible = ref(false);\n  useIntersectionObserver(\n    element,\n    (intersectionObserverEntries) => {\n      let isIntersecting = elementIsVisible.value;\n      let latestTime = 0;\n      for (const entry of intersectionObserverEntries) {\n        if (entry.time >= latestTime) {\n          latestTime = entry.time;\n          isIntersecting = entry.isIntersecting;\n        }\n      }\n      elementIsVisible.value = isIntersecting;\n    },\n    {\n      root: scrollTarget,\n      window,\n      threshold\n    }\n  );\n  return elementIsVisible;\n}\n\nconst vElementVisibility = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\") {\n      const handler = binding.value;\n      const isVisible = useElementVisibility(el);\n      watch(isVisible, (v) => handler(v), { immediate: true });\n    } else {\n      const [handler, options] = binding.value;\n      const isVisible = useElementVisibility(el, options);\n      watch(isVisible, (v) => handler(v), { immediate: true });\n    }\n  }\n};\n\nconst UseEyeDropper = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseEyeDropper\",\n  props: {\n    sRGBHex: String\n  },\n  setup(props, { slots }) {\n    const data = reactive(useEyeDropper());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseFullscreen = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseFullscreen\",\n  props: [\"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useFullscreen(target));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UseGeolocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseGeolocation\",\n  props: [\"enableHighAccuracy\", \"maximumAge\", \"timeout\", \"navigator\"],\n  setup(props, { slots }) {\n    const data = reactive(useGeolocation(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseIdle = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseIdle\",\n  props: [\"timeout\", \"events\", \"listenForVisibilityChange\", \"initialState\"],\n  setup(props, { slots }) {\n    const data = reactive(useIdle(props.timeout, props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\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 {\n    ...shell,\n    then(onFulfilled, onRejected) {\n      return waitUntilIsLoaded().then(onFulfilled, onRejected);\n    }\n  };\n}\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, referrerPolicy } = 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    if (referrerPolicy)\n      img.referrerPolicy = referrerPolicy;\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    {\n      resetOnExecute: true,\n      ...asyncStateOptions\n    }\n  );\n  watch(\n    () => toValue(options),\n    () => state.execute(asyncStateOptions.delay),\n    { deep: true }\n  );\n  return state;\n}\n\nconst UseImage = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseImage\",\n  props: [\n    \"src\",\n    \"srcset\",\n    \"sizes\",\n    \"as\",\n    \"alt\",\n    \"class\",\n    \"loading\",\n    \"crossorigin\",\n    \"referrerPolicy\"\n  ],\n  setup(props, { slots }) {\n    const data = reactive(useImage(props));\n    return () => {\n      if (data.isLoading && slots.loading)\n        return slots.loading(data);\n      else if (data.error && slots.error)\n        return slots.error(data.error);\n      if (slots.default)\n        return slots.default(data);\n      return h(props.as || \"img\", props);\n    };\n  }\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    window = defaultWindow,\n    onError = (e) => {\n      console.error(e);\n    }\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, _d;\n    if (!window)\n      return;\n    const _element = toValue(element);\n    if (!_element)\n      return;\n    (_c = _element instanceof Document ? window.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    const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n    if (x != null)\n      internalX.value = scrollContainer.scrollLeft;\n    if (y != null)\n      internalY.value = scrollContainer.scrollTop;\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    var _a;\n    if (!window)\n      return;\n    const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(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) <= (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 === window.document && !scrollTop)\n      scrollTop = window.document.body.scrollTop;\n    directions.top = scrollTop < internalY.value;\n    directions.bottom = scrollTop > internalY.value;\n    const top = Math.abs(scrollTop) <= (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    var _a;\n    if (!window)\n      return;\n    const eventTarget = (_a = e.target.documentElement) != null ? _a : 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  tryOnMounted(() => {\n    try {\n      const _element = toValue(element);\n      if (!_element)\n        return;\n      setArrivedState(_element);\n    } catch (e) {\n      onError(e);\n    }\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 (window && _element)\n        setArrivedState(_element);\n    }\n  };\n}\n\nfunction resolveElement(el) {\n  if (typeof Window !== \"undefined\" && el instanceof Window)\n    return el.document.documentElement;\n  if (typeof Document !== \"undefined\" && el instanceof Document)\n    return el.documentElement;\n  return el;\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n  var _a;\n  const {\n    direction = \"bottom\",\n    interval = 100,\n    canLoadMore = () => true\n  } = options;\n  const state = reactive(useScroll(\n    element,\n    {\n      ...options,\n      offset: {\n        [direction]: (_a = options.distance) != null ? _a : 0,\n        ...options.offset\n      }\n    }\n  ));\n  const promise = ref();\n  const isLoading = computed(() => !!promise.value);\n  const observedElement = computed(() => {\n    return resolveElement(toValue(element));\n  });\n  const isElementVisible = useElementVisibility(observedElement);\n  function checkAndLoad() {\n    state.measure();\n    if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n      return;\n    const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n    const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= 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], isElementVisible.value],\n    checkAndLoad,\n    { immediate: true }\n  );\n  return {\n    isLoading\n  };\n}\n\nconst vInfiniteScroll = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\")\n      useInfiniteScroll(el, binding.value);\n    else\n      useInfiniteScroll(el, ...binding.value);\n  }\n};\n\nconst vIntersectionObserver = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\")\n      useIntersectionObserver(el, binding.value);\n    else\n      useIntersectionObserver(el, ...binding.value);\n  }\n};\n\nconst UseMouse = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseMouse\",\n  props: [\"touch\", \"resetOnTouchEnds\", \"initialValue\"],\n  setup(props, { slots }) {\n    const data = reactive(useMouse(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseMouseInElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseMouseElement\",\n  props: [\"handleOutside\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useMouseInElement(target, props));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UseMousePressed = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseMousePressed\",\n  props: [\"touch\", \"initialValue\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useMousePressed({ ...props, target }));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UseNetwork = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseNetwork\",\n  setup(props, { slots }) {\n    const data = reactive(useNetwork());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseNow = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseNow\",\n  props: [\"interval\"],\n  setup(props, { slots }) {\n    const data = reactive(useNow({ ...props, controls: true }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseObjectUrl = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseObjectUrl\",\n  props: [\n    \"object\"\n  ],\n  setup(props, { slots }) {\n    const object = toRef(props, \"object\");\n    const url = useObjectUrl(object);\n    return () => {\n      if (slots.default && url.value)\n        return slots.default(url);\n    };\n  }\n});\n\nconst UseOffsetPagination = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseOffsetPagination\",\n  props: [\n    \"total\",\n    \"page\",\n    \"pageSize\",\n    \"onPageChange\",\n    \"onPageSizeChange\",\n    \"onPageCountChange\"\n  ],\n  emits: [\n    \"page-change\",\n    \"page-size-change\",\n    \"page-count-change\"\n  ],\n  setup(props, { slots, emit }) {\n    const data = reactive(useOffsetPagination({\n      ...props,\n      onPageChange(...args) {\n        var _a;\n        (_a = props.onPageChange) == null ? void 0 : _a.call(props, ...args);\n        emit(\"page-change\", ...args);\n      },\n      onPageSizeChange(...args) {\n        var _a;\n        (_a = props.onPageSizeChange) == null ? void 0 : _a.call(props, ...args);\n        emit(\"page-size-change\", ...args);\n      },\n      onPageCountChange(...args) {\n        var _a;\n        (_a = props.onPageCountChange) == null ? void 0 : _a.call(props, ...args);\n        emit(\"page-count-change\", ...args);\n      }\n    }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseOnline = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseOnline\",\n  setup(props, { slots }) {\n    const data = reactive({\n      isOnline: useOnline()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePageLeave = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePageLeave\",\n  setup(props, { slots }) {\n    const data = reactive({\n      isLeft: usePageLeave()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePointer = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePointer\",\n  props: [\n    \"pointerTypes\",\n    \"initialValue\",\n    \"target\"\n  ],\n  setup(props, { slots }) {\n    const el = ref(null);\n    const data = reactive(usePointer({\n      ...props,\n      target: props.target === \"self\" ? el : defaultWindow\n    }));\n    return () => {\n      if (slots.default)\n        return slots.default(data, { ref: el });\n    };\n  }\n});\n\nconst UsePointerLock = /* #__PURE__ */ defineComponent({\n  name: \"UsePointerLock\",\n  props: [\"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(usePointerLock(target));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UsePreferredColorScheme = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredColorScheme\",\n  setup(props, { slots }) {\n    const data = reactive({\n      colorScheme: usePreferredColorScheme()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredContrast = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredContrast\",\n  setup(props, { slots }) {\n    const data = reactive({\n      contrast: usePreferredContrast()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredDark\",\n  setup(props, { slots }) {\n    const data = reactive({\n      prefersDark: usePreferredDark$1()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredLanguages = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredLanguages\",\n  setup(props, { slots }) {\n    const data = reactive({\n      languages: usePreferredLanguages()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredReducedMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredReducedMotion\",\n  setup(props, { slots }) {\n    const data = reactive({\n      motion: usePreferredReducedMotion()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nfunction useMutationObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...mutationOptions } = options;\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 targets = computed(() => {\n    const value = toValue(target);\n    const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n    return new Set(items);\n  });\n  const stopWatch = watch(\n    () => targets.value,\n    (targets2) => {\n      cleanup();\n      if (isSupported.value && targets2.size) {\n        observer = new MutationObserver(callback);\n        targets2.forEach((el) => observer.observe(el, mutationOptions));\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const takeRecords = () => {\n    return observer == null ? void 0 : observer.takeRecords();\n  };\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop,\n    takeRecords\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      attributeFilter: [\"style\", \"class\"],\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\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\nconst UseScreenSafeArea = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseScreenSafeArea\",\n  props: {\n    top: Boolean,\n    right: Boolean,\n    bottom: Boolean,\n    left: Boolean\n  },\n  setup(props, { slots }) {\n    const {\n      top,\n      right,\n      bottom,\n      left\n    } = useScreenSafeArea();\n    return () => {\n      if (slots.default) {\n        return h(\"div\", {\n          style: {\n            paddingTop: props.top ? top.value : \"\",\n            paddingRight: props.right ? right.value : \"\",\n            paddingBottom: props.bottom ? bottom.value : \"\",\n            paddingLeft: props.left ? left.value : \"\",\n            boxSizing: \"border-box\",\n            maxHeight: \"100vh\",\n            maxWidth: \"100vw\",\n            overflow: \"auto\"\n          }\n        }, slots.default());\n      }\n    };\n  }\n});\n\nconst vScroll = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\") {\n      const handler = binding.value;\n      const state = useScroll(el, {\n        onScroll() {\n          handler(state);\n        },\n        onStop() {\n          handler(state);\n        }\n      });\n    } else {\n      const [handler, options] = binding.value;\n      const state = useScroll(el, {\n        ...options,\n        onScroll(e) {\n          var _a;\n          (_a = options.onScroll) == null ? void 0 : _a.call(options, e);\n          handler(state);\n        },\n        onStop(e) {\n          var _a;\n          (_a = options.onStop) == null ? void 0 : _a.call(options, e);\n          handler(state);\n        }\n      });\n    }\n  }\n};\n\nfunction checkOverflowScroll(ele) {\n  const style = window.getComputedStyle(ele);\n  if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\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}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n  const isLocked = ref(initialState);\n  let stopTouchMoveListener = null;\n  let initialOverflow = \"\";\n  watch(toRef(element), (el) => {\n    const target = resolveElement(toValue(el));\n    if (target) {\n      const ele = target;\n      if (!elInitialOverflow.get(ele))\n        elInitialOverflow.set(ele, ele.style.overflow);\n      if (ele.style.overflow !== \"hidden\")\n        initialOverflow = ele.style.overflow;\n      if (ele.style.overflow === \"hidden\")\n        return isLocked.value = true;\n      if (isLocked.value)\n        return ele.style.overflow = \"hidden\";\n    }\n  }, {\n    immediate: true\n  });\n  const lock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || isLocked.value)\n      return;\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(\n        el,\n        \"touchmove\",\n        (e) => {\n          preventDefault(e);\n        },\n        { passive: false }\n      );\n    }\n    el.style.overflow = \"hidden\";\n    isLocked.value = true;\n  };\n  const unlock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || !isLocked.value)\n      return;\n    isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n    el.style.overflow = initialOverflow;\n    elInitialOverflow.delete(el);\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 unlock();\n    }\n  });\n}\n\nfunction onScrollLock() {\n  let isMounted = false;\n  const state = ref(false);\n  return (el, binding) => {\n    state.value = binding.value;\n    if (isMounted)\n      return;\n    isMounted = true;\n    const isLocked = useScrollLock(el, binding.value);\n    watch(state, (v) => isLocked.value = v);\n  };\n}\nconst vScrollLock = onScrollLock();\n\nconst UseTimeAgo = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseTimeAgo\",\n  props: [\"time\", \"updateInterval\", \"max\", \"fullDateFormatter\", \"messages\", \"showSecond\"],\n  setup(props, { slots }) {\n    const data = reactive(useTimeAgo(() => props.time, { ...props, controls: true }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseTimestamp = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseTimestamp\",\n  props: [\"immediate\", \"interval\", \"offset\"],\n  setup(props, { slots }) {\n    const data = reactive(useTimestamp({ ...props, controls: true }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseVirtualList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseVirtualList\",\n  props: [\n    \"list\",\n    \"options\",\n    \"height\"\n  ],\n  setup(props, { slots, expose }) {\n    const { list: listRef } = toRefs(props);\n    const { list, containerProps, wrapperProps, scrollTo } = useVirtualList(listRef, props.options);\n    expose({ scrollTo });\n    if (containerProps.style && typeof containerProps.style === \"object\" && !Array.isArray(containerProps.style))\n      containerProps.style.height = props.height || \"300px\";\n    return () => h(\"div\", { ...containerProps }, [\n      h(\"div\", { ...wrapperProps.value }, list.value.map((item) => h(\"div\", { style: { overflow: \"hidden\", height: item.height } }, slots.default ? slots.default(item) : \"Please set content!\")))\n    ]);\n  }\n});\n\nconst UseWindowFocus = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseWindowFocus\",\n  setup(props, { slots }) {\n    const data = reactive({\n      focused: useWindowFocus()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseWindowSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseWindowSize\",\n  props: [\"initialWidth\", \"initialHeight\"],\n  setup(props, { slots }) {\n    const data = reactive(useWindowSize(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nexport { OnClickOutside, OnLongPress, UseActiveElement, UseBattery, UseBrowserLocation, UseClipboard, UseColorMode, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseImage, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseObjectUrl, UseOffsetPagination, UseOnline, UsePageLeave, UsePointer, UsePointerLock, UsePreferredColorScheme, UsePreferredContrast, UsePreferredDark, UsePreferredLanguages, UsePreferredReducedMotion, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseWindowFocus, UseWindowSize, vOnClickOutside as VOnClickOutside, vOnLongPress as VOnLongPress, vElementHover, vElementSize, vElementVisibility, vInfiniteScroll, vIntersectionObserver, vOnClickOutside, vOnKeyStroke, vOnLongPress, vScroll, vScrollLock };\n","<template>\n  <div\n    v-on-click-outside=\"reset\"\n    class=\"flex flex-col outline-none\"\n    :class=\"displayCentered ? 'items-center' : ''\"\n    tabindex=\"-1\"\n    @mouseleave=\"hoveredDayLabel = ''\"\n  >\n    <v-date-picker\n      ref=\"calendar\"\n      :key=\"currentRangeKey\"\n      v-model.range=\"range\"\n      :initial-page=\"initialPage\"\n      :initial-page-position=\"initialPagePosition\"\n      :class=\"\n        useAB().isActive('dpTooltip') && showTooltip && vacancies\n          ? ''\n          : '[&_.vc-day-popover-container]:!hidden'\n      \"\n      :rows=\"1\"\n      :columns=\"$screen.isExtraSmall ? 1 : 2\"\n      :step=\"1\"\n      transition=\"slide-h\"\n      :min-page=\"yearStart\"\n      :max-page=\"yearEnd\"\n      :min-date=\"minDate\"\n      :max-date=\"maxDate\"\n      :attributes=\"vcAttributes\"\n      :locale=\"locale\"\n      @dayclick=\"onDayClick\"\n      @daymouseenter=\"onDayHover\"\n      @daymouseleave=\"hoveredDayLabel = ''\"\n      @dayfocusin=\"onFocusDate\"\n      @keydown.space.capture=\"cancelDayPress\"\n      @keydown.enter=\"onDayPress\"\n      @update:pages=\"handlePageUpdate\"\n    >\n      <template #day-popover=\"{ day }\">\n        <div\n          v-if=\"\n            useAB().isActive('dpTooltip') &&\n            vacancies &&\n            showTooltip &&\n            day.attributes[0].customData\n          \"\n        >\n          {{ day.attributes[0].customData.label }}\n        </div>\n      </template>\n    </v-date-picker>\n    <div\n      v-if=\"!useAB().isActive('dpTooltip') && vacancies?.dateFrom\"\n      :class=\"hoveredDayLabel ? 'visible' : 'invisible'\"\n      class=\"bg-thm text-txt-contrast mx-1 min-w-full py-2 px-4 font-semibold\"\n    >\n      {{ hoveredDayLabel }} &nbsp;\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { AttributeConfig } from 'v-calendar/dist/types/src/utils/attribute.d.ts'\nimport type {\n  CalendarDay,\n  Page,\n} from 'v-calendar/dist/types/src/utils/page.d.ts'\nimport { vOnClickOutside } from '@vueuse/components'\n\nconst trPrefix = 'www.components.views.details.Calendar.'\n\nconst { t } = useI18n()\n\nconst calendar: Ref<any | null> = ref(null)\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: DateRange\n    vacancies?: Trips\n    minLength?: number\n    maxLength?: number\n    locale?: string\n    columns?: number\n    displayCentered?: boolean\n    flow?: (\n      | 'month'\n      | 'year'\n      | 'calendar'\n      | 'time'\n      | 'minutes'\n      | 'hours'\n      | 'seconds'\n    )[]\n  }>(),\n  {\n    modelValue: () => ({}),\n    vacancies: () =>\n      ({ dateTo: null, dateFrom: null, days: [] }) as unknown as Trips,\n    locale: () => 'en',\n    minLength: () => 0,\n    maxLength: () => 28,\n    columns: () => 0,\n    displayCentered: () => true,\n    flow: () => ['year', 'month', 'calendar'],\n  },\n)\n\nconst emit = defineEmits<{\n  'update:modelValue': [DateRange]\n  selectStart: [Date?]\n}>()\n\nconst firstPossibleArrival = daysAdd(new Date(), 1)\nconst selectedDay = ref(null as unknown as VacancyDay)\nconst selected = ref(null as unknown as CalendarDay)\nconst hoveredDay = ref(null as unknown as Date)\nconst hoveredDayLabel = ref('')\nconst focusedDate = ref(null as unknown as CalendarDay)\nconst min = ref(null as unknown as Date)\nconst max = ref(null as unknown as Date)\nconst showTooltip = ref(true)\n\nconst initialPage = props.modelValue.start\n  ? new Date(props.modelValue.start)\n  : new Date()\nlet initialPagePosition = 1\nlet rightColumnMonth = 1\nlet lastMonthClicked = 0\nconst fromPage = ref(toDate(initialPage))\nconst toPage = ref(toDate(monthsAdd(fromPage.value, 1)))\nconst lastPage = ref('')\n\nconst currentYear = new Date().getFullYear()\nconst yearStart = new Date(currentYear, 0, 1)\nconst yearEnd = new Date(currentYear, 11, 31)\n\nconst range = ref(isDateRangeValid(props.modelValue) ? props.modelValue : null)\n\nwatch(\n  () => props.modelValue,\n  (newValue) => (range.value = isDateRangeValid(newValue) ? newValue : null),\n)\n\n/**\n * Define min date limit\n */\nconst minDate = computed({\n  get() {\n    return (\n      tryParseDate(props.vacancies?.dateFrom) ??\n      min.value ??\n      firstPossibleArrival\n    )\n  },\n  set(minDate) {\n    min.value = minDate\n  },\n})\n\n/**\n * Define max date limit\n */\nconst maxDate = computed({\n  get() {\n    return tryParseDate(props.vacancies?.dateTo) ?? max.value ?? undefined\n  },\n  set(maxDate) {\n    max.value = maxDate\n  },\n})\n\n/**\n * Unique key for current range, an update re-renders calendar\n */\nconst currentRangeKey = computed(() => {\n  return JSON.stringify(range?.value)\n})\n\n/**\n * Compile list of day attributes based on whether day selected or not\n * When selected - departure and range days attributes provided, otherwise - all of them\n */\nconst vcAttributes = computed(() => {\n  if (!selectedDay.value) return attributesNotSelected.value\n  return [...attributeDeparture.value, ...attributesRange.value]\n})\n\n/**\n * Define day attributes, for case when no day selected\n */\nconst attributesNotSelected = computed(() => {\n  if (selectedDay.value) return []\n\n  const days = props.vacancies.days || []\n\n  const rangeDates = range.value ? getDateRangeEachDay(range.value) : []\n  const startDay = rangeDates.length\n    ? days.find(({ date }) => datesEqual(date, rangeDates[0]))\n    : undefined\n\n  const attributes: AttributeConfig[] = days\n    .filter(\n      ({ date }) =>\n        diff(date, fromPage.value) >= 0 && diff(date, toPage.value) <= 0,\n    )\n    .map((day) => {\n      let label = t(`${trPrefix}notAvailable`)\n      let classes =\n        '!h-14 !w-14 !border-0 !cursor-default !bg-transparent ns-not-available'\n      let contentClasses = 'opacity-30 !cursor-default !line-through'\n      if (day.isTripStart && day.isTripEnd) {\n        label = t(`${trPrefix}arrivalDeparture_s`, day.minStay)\n        classes =\n          '!h-14 !w-14 !border-0 !cursor-pointer !bg-suc ns-arrival-departure'\n        contentClasses = '!hover:border !hover:border-thm'\n      } else if (day.isTripStart) {\n        label = t(`${trPrefix}arrival_s`, day.minStay)\n        classes = '!h-14 !w-14 !border-0 !cursor-pointer !bg-suc ns-arrival'\n        contentClasses = '!hover:border !hover:border-thm'\n      } else if (day.isTripInner) {\n        label = t(`${trPrefix}noArrival`)\n        classes =\n          '!h-14 !w-14 !border-0 !cursor-default !bg-suc-reduced ns-no-arrival'\n        contentClasses = '!cursor-default !opacity-30 !pointer-events-none'\n      } else if (day.isTripEnd) {\n        label = t(`${trPrefix}departureOnly`)\n        classes =\n          '!h-14 !w-14 !border-0 !cursor-default !bg-suc-reduced ns-departure-only'\n        contentClasses = '!cursor-default !opacity-30 !pointer-events-none'\n      }\n      day.label = label\n\n      const dateWithOffset = toLocaldate(day.date) // was add time zone offset. @todo: clarify\n\n      if (\n        dateBefore(dateWithOffset, new Date()) ||\n        sameDay(dateWithOffset, new Date())\n      ) {\n        classes += ' !is-disabled'\n      }\n\n      return {\n        popover: {\n          visibility: useAB().isActive('dpTooltip') ? 'hover' : 'click',\n          isInteractive: false,\n          hideIndicator: true,\n          label,\n        },\n        key: dateWithOffset.toISOString(),\n        dates: [dateWithOffset],\n        customData: day,\n        dot: getDotValueForOverallAttributes(day, startDay, rangeDates),\n        highlight: {\n          contentClass: contentClasses,\n          class: classes,\n        },\n      }\n    })\n\n  if (props.modelValue.start && props.modelValue.end) {\n    const start = parse(props.modelValue.start)\n    const end = parse(props.modelValue.end)\n    attributes.push({\n      key: 'range',\n      highlight: {\n        start: { fillMode: 'outline' },\n        base: { fillMode: 'light' },\n        end: { fillMode: 'outline' },\n      },\n      dates: [{ start, end }],\n    })\n  }\n\n  return attributes\n})\n\n/**\n * Define day attributes where range is already selected\n */\nconst attributesRange = computed(() => {\n  if (!props.vacancies) {\n    const attributes = [] as AttributeConfig[]\n    if (!selectedDay.value) {\n      if (props.modelValue.start && props.modelValue.end) {\n        const start = parse(props.modelValue.start)\n        const end = parse(props.modelValue.end)\n        attributes.push({\n          key: 'range',\n          highlight: {\n            start: { fillMode: 'outline' },\n            base: { fillMode: 'light' },\n            end: { fillMode: 'outline' },\n          },\n          dates: [{ start: `${start}`, end: `${end}` }],\n        })\n      }\n    } else {\n      const parsedDate = parse(selectedDay.value.date)\n      attributes.push({\n        key: 'selection',\n        highlight: {\n          startEnd: { fillMode: 'outline' },\n          base: { fillMode: 'light' },\n        },\n        popover: {\n          visibility: 'click',\n          hideIndicator: true,\n          isInteractive: false,\n        },\n        dates: hoveredDay.value\n          ? [{ start: parsedDate, end: hoveredDay.value }]\n          : [`${parsedDate}`],\n      })\n    }\n    return attributes\n  }\n  if (!selectedDay.value) {\n    return []\n  }\n\n  const attributes = []\n  const parsedDate = parse(selectedDay.value.date)\n\n  attributes.push({\n    key: 'selection',\n    highlight: {\n      startEnd: { fillMode: 'outline' },\n      base: { fillMode: 'light' },\n    },\n    popover: {\n      visibility: useAB().isActive('dpTooltip') ? 'hover' : 'click',\n      hideIndicator: true,\n      isInteractive: false,\n    },\n    dates: hoveredDay.value\n      ? [{ start: `${parsedDate}`, end: hoveredDay.value }]\n      : [`${parsedDate}`],\n  })\n\n  return attributes as AttributeConfig[]\n})\n\nconst getDotValueForOverallAttributes = (\n  day: VacancyDay,\n  startDay: VacancyDay | undefined,\n  rangeDates: Date[],\n): string | undefined => {\n  const isSpecial = day.specials?.length\n  const isInPast = inPast(day.date)\n  const isInRange = rangeDates.some((date) => datesEqual(day.date, date))\n  const isRangeEndsWithSpecial = !!startDay?.specials?.includes(\n    rangeDates.length - 1,\n  )\n  return (isInRange && isRangeEndsWithSpecial) ||\n    (!isInRange && isSpecial && !isInPast)\n    ? 'red'\n    : undefined\n}\n\n/**\n * Define day attributes for departure dates (when arrival day already selected)\n */\nconst attributeDeparture = computed(() => {\n  if (!selectedDay.value) return []\n\n  const attributes = (props.vacancies.days || [])\n    .filter(\n      ({ date }) =>\n        diff(date, fromPage.value) >= 0 && diff(date, toPage.value) <= 0,\n    )\n    .map((day) => {\n      const dateDiff = diff(day.date, selectedDay.value.date)\n      let label = t(`${trPrefix}departureAvailable`)\n      let classes = '!h-14 !w-14 !border-0 !cursor-pointer !bg-suc'\n      let contentClasses = 'departure-available'\n      switch (true) {\n        // Same day as arrival\n        case dateDiff === 0:\n          label = t(`${trPrefix}selectedArrival_s`, selectedDay.value.minStay)\n          classes = '!h-14 !w-14 !border-0 !cursor-default !bg-transparent'\n          contentClasses = '!cursor-default !opacity-30 selected-arrival'\n          break\n        // Day is in the past\n        case parse(day.date).toISOString() < new Date().toISOString():\n          label = t(`${trPrefix}dateInPast`)\n          classes = '!h-14 !w-14 !border-0 !cursor-default !bg-transparent'\n          contentClasses =\n            '!pointer-events-none !is-unavailable !opacity-30 !line-through date-in-past'\n          break\n        // Day is before arrival date\n        case parse(day.date).toISOString() <\n          parse(selectedDay.value.date).toISOString():\n          label = t(`${trPrefix}arrivalBeforeDeparture`)\n          classes = '!h-14 !w-14 !border-0 !cursor-default !bg-transparent'\n          contentClasses =\n            '!cursor-default !opacity-30 !line-through arrival-before-departure'\n          break\n        // Day is before allowed minimal stay limit\n        case selectedDay.value.minStay > dateDiff:\n          label = t(\n            `${trPrefix}noDepartureMinStay_s`,\n            selectedDay.value.minStay,\n          )\n          classes = '!h-14 !w-14 !border-0 !cursor-default !bg-transparent'\n          contentClasses =\n            '!cursor-default !opacity-30 !line-through no-departure-minstay'\n          break\n        // Day is ahead of allowed maximal stay limit\n        case selectedDay.value.maxStay < dateDiff:\n          label = t(\n            `${trPrefix}noDepartureMaxStay_s`,\n            selectedDay.value.maxStay,\n          )\n          classes = '!h-14 !w-14 !border-0 !cursor-default !bg-transparent'\n          contentClasses = `!cursor-default !opacity-30 !line-through no-departure-maxstay-${day.date}-${dateDiff}`\n          break\n        // Day isn't marked as possible departure date\n        case !day.isTripEnd:\n          label = t(`${trPrefix}noDeparture`)\n          classes = '!h-14 !w-14 !border-0 !cursor-default !bg-transparent'\n          contentClasses = '!cursor-default !opacity-30 no-departure-date'\n          break\n        // Stay duration isn't within allowed ones?\n        case selectedDay.value.durations?.indexOf(dateDiff) === -1:\n          label = t(`${trPrefix}noDeparture`)\n          classes = '!h-14 !w-14 !border-0 !cursor-default !bg-transparent'\n          contentClasses = '!cursor-default !opacity-30 no-matching-duration'\n          break\n      }\n      day.label = label\n\n      const dateWithOffset = toLocaldate(day.date) // $dates.addTimezoneOffset(day.date)\n      if (\n        dateBefore(dateWithOffset, new Date()) ||\n        sameDay(dateWithOffset, new Date())\n      ) {\n        classes += ' is-disabled'\n      }\n\n      return {\n        popover: {\n          visibility: useAB().isActive('dpTooltip') ? 'hover' : 'click',\n          isInteractive: false,\n          hideIndicator: true,\n          label,\n        },\n        key: dateWithOffset.toISOString(),\n        dates: [dateWithOffset],\n        customData: day,\n        dot: selectedDay.value.specials?.includes(dateDiff) ? 'red' : undefined,\n        highlight: {\n          contentClass: contentClasses,\n          class: classes,\n        },\n      }\n    })\n\n  return attributes as AttributeConfig[]\n})\n\nonMounted(() => {\n  if (\n    props.modelValue.start &&\n    dateBefore(props.modelValue.start, maxDate.value) &&\n    dateAfter(props.modelValue.start, minDate.value)\n  ) {\n    calendar.value?.move(props.modelValue.start)\n  }\n})\n\n/**\n * Resets day selection and min-max range limitation\n */\nfunction reset(): void {\n  selectedDay.value = null as unknown as VacancyDay\n  maxDate.value = null as unknown as Date\n  minDate.value = firstPossibleArrival\n}\n\n/**\n * Event handler for page (month) change to set boundaries for day coloring\n *\n * @param pages Page[]\n */\nfunction handlePageUpdate(pages: Page[]) {\n  rightColumnMonth = pages.length === 2 ? pages[1].month : pages[0].month\n\n  fromPage.value = toDate(new Date(pages[0].year, pages[0].month - 1, 1))\n\n  if (pages.length === 2) {\n    if (lastPage.value === pages[1].id) return\n    toPage.value = toDate(new Date(pages[1].year, pages[1].month, 0))\n    lastPage.value = pages[1].id\n  } else {\n    toPage.value = toDate(new Date(pages[0].year, pages[0].month, 0))\n    lastPage.value = pages[0].id\n  }\n}\n\n/**\n * Handle day highlight with keyboard\n * @param vcDay CalendarDay\n */\nfunction onFocusDate(vcDay: CalendarDay) {\n  focusedDate.value = vcDay\n  onDayHover(vcDay)\n}\n\n/**\n * Handle keypress on exact day\n * @param event PointerEvent\n */\nfunction onDayPress(event: PointerEvent) {\n  onDayClick(focusedDate.value, event)\n}\n\nfunction cancelDayPress(e: Event) {\n  e.preventDefault()\n  e.stopImmediatePropagation()\n}\n\n/**\n * Handle mouse hover on exact day\n * @param vcDay CalendarDay\n */\nfunction onDayHover(vcDay: CalendarDay) {\n  showTooltip.value = true\n  if (!props.vacancies && vcDay) {\n    hoveredDay.value = vcDay.date\n  }\n\n  if (!vcDay || !isSelectable(vcDay)) {\n    return\n  }\n\n  hoveredDay.value = vcDay.date\n  hoveredDayLabel.value = getCustomData(vcDay)?.label || ''\n}\n\n/**\n * Handle user click on exact day\n * @param vcDay CalendarDay\n * @param event PointerEvent\n */\nfunction onDayClick(vcDay: CalendarDay, event?: PointerEvent): void {\n  initialPagePosition =\n    vcDay.month === rightColumnMonth &&\n    vcDay.month === lastMonthClicked &&\n    !useScreen().isExtraSmall\n      ? 2\n      : 1\n  lastMonthClicked = vcDay.month\n  hoveredDayLabel.value = ''\n  showTooltip.value = false\n  if (!props.vacancies.days.length) {\n    if (selectedDay.value) {\n      if (dateBefore(vcDay.id, selectedDay.value.date)) {\n        range.value = {\n          start: tryParseDate(vcDay.id) as unknown as Date,\n          end: tryParseDate(selectedDay.value.date) as unknown as Date,\n        }\n      } else {\n        range.value = {\n          start: tryParseDate(selectedDay.value.date) as unknown as Date,\n          end: tryParseDate(vcDay.id) as unknown as Date,\n        }\n      }\n      emit('update:modelValue', range.value)\n\n      selectedDay.value = null as unknown as VacancyDay\n      determineBoundaries(vcDay)\n      ;(\n        document.querySelector(\n          '.vc-highlight-content-outline',\n        ) as HTMLInputElement\n      )?.focus()\n      return\n    }\n    selectedDay.value = { date: vcDay.id } as VacancyDay\n    determineBoundaries(vcDay)\n    emit('selectStart', tryParseDate(selectedDay.value.date))\n    return\n  }\n\n  if (!isSelectable(vcDay)) {\n    // prüfe, ob ein valider Tag geklickt wurde\n    event?.stopPropagation()\n    event?.preventDefault()\n    if (selectedDay.value?.date === vcDay.id) {\n      selectedDay.value = null as unknown as VacancyDay\n    }\n    return\n  }\n\n  if (selectedDay.value) {\n    if (selectedDay.value.date !== vcDay.id) {\n      range.value = { start: parse(selected.value.id), end: parse(vcDay.id) }\n      emit('update:modelValue', range.value)\n    }\n    selectedDay.value = null as unknown as VacancyDay\n  } else {\n    selected.value = vcDay\n    selectedDay.value = getCustomData(vcDay)\n  }\n}\n\n/**\n * Checks whether calendar day allows interaction\n * @param vcDay CalendarDay\n */\nfunction isSelectable(vcDay: CalendarDay): boolean {\n  const day = getCustomData(vcDay)\n  if (!day) {\n    return false\n  }\n  if (selectedDay.value) {\n    const dateDiff = diff(day.date, selectedDay.value.date)\n    return (\n      day.isTripEnd &&\n      selectedDay.value.minStay <= dateDiff &&\n      selectedDay.value.durations?.includes(dateDiff)\n    )\n  }\n  return day.isTripStart\n}\n\n/**\n * Try to find customData among day attributes\n * @param vcDay CalendarDay\n */\nfunction getCustomData(\n  vcDay: CalendarDay & { attributes?: AttributeConfig[] },\n): AttributeConfig['customData'] | undefined {\n  return vcDay?.attributes?.find((attr) => attr.customData)?.customData\n}\n\nfunction determineBoundaries(date: CalendarDay): void {\n  if (maxDate.value) {\n    maxDate.value = null as unknown as Date\n    minDate.value = firstPossibleArrival\n  } else {\n    maxDate.value = daysAdd(date.id, props.maxLength)\n    minDate.value = props.minLength\n      ? daysAdd(date.id, props.minLength)\n      : daysSubWithLimit(date.id, props.maxLength, firstPossibleArrival)\n  }\n}\n</script>\n\n<style lang=\"postcss\" scoped>\n:deep(.vc-container) {\n  /* // v-calendar root element */\n  @apply !border-0;\n}\n\n:deep(.vc-grid-container),\n:deep(.vc-weeks) {\n  /* monats-panel */\n  @apply !gap-px;\n}\n\n:deep(.is-disabled) {\n  @apply pointer-events-none !cursor-default line-through;\n}\n\n:deep(.vc-day) {\n  @apply !z-[0];\n  border: 1px transparent solid !important;\n}\n\n:deep(.vc-highlight) {\n  pointer-events: none;\n}\n\n/* // Hack für Specials: biege dots um */\n:deep(.vc-day-box-center-bottom) {\n  @apply !items-start !justify-end;\n}\n\n:deep(.vc-dot:before) {\n  @apply bg-hlt-hover text-hlt-contrast absolute -right-px -top-px flex h-4 w-4 items-center justify-center rounded-[50%] p-1 text-xs content-['%'];\n}\n\n:deep(.is-disabled),\n:deep(.vc-disabled) {\n  pointer-events: none;\n}\n\n:deep(.\\!line-through),\n:deep([class^='no-departure']),\n:deep([class*=' no-departure']) {\n  pointer-events: none;\n}\n\n:deep(.vc-day-popover-header) {\n  @apply hidden;\n}\n\n:deep(.vc-highlight-bg-solid.bg-suc),\n:deep(.vc-highlight-bg-light.bg-suc) {\n  @apply !bg-suc;\n  pointer-events: initial;\n}\n\n:deep(.vc-highlight-bg-solid.bg-transparent),\n:deep(.vc-highlight-bg-light.bg-transparent) {\n  @apply !bg-transparent;\n}\n\n:deep(.vc-highlight-bg-solid),\n:deep(.vc-highlight-content-solid) {\n  @apply !text-txt-strong;\n}\n\n:deep(.vc-monthly .is-not-in-month *) {\n  @apply !opacity-0;\n}\n\n:deep(.vc-popover-content) {\n  @apply !hidden;\n}\n\n:deep(.vc-day-box-center-center) {\n  border: 1px solid white;\n}\n\n:deep([data-popper-placement='bottom'] > div) {\n  display: block !important;\n}\n</style>\n","<template>\n  <div\n    class=\"flex flex-wrap justify-between items-center gap-4\"\n    :class=\"{ 'w-full': screen.isExtraSmall }\"\n  >\n    <div\n      v-for=\"value in [1, 2, 3]\"\n      :key=\"value\"\n      class=\"flex-1 flex\"\n      :class=\"classes[value - 1]\"\n    >\n      <WebccButton\n        :variant=\"fuzziness === value ? 'grey' : 'white'\"\n        outline\n        class=\"btn-responsive text-center\"\n        @click=\"fuzziness = value\"\n      >\n        &plusmn; {{ $t(`${trPrefix}night_s`, {}, value) }}\n      </WebccButton>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst classes = ['justify-start', 'justify-center', 'justify-end']\nconst trPrefix = 'www.components.elements.FlexibleDates.'\nconst screen = useScreen()\nconst fuzziness = defineModel<number | undefined>({ required: true })\n</script>\n\n<style scoped>\n.btn-responsive {\n  width: 100%;\n  max-width: 100%;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n</style>\n","<template>\n  <div\n    ref=\"dateRangeCalendar\"\n    class=\"z-1 flex justify-center top-0\"\n    :class=\"'fixed h-dvh md:absolute md:h-auto'\"\n  >\n    <div\n      v-on-click-outside.bubble=\"onClickOutside\"\n      class=\"flex flex-col w-full bg-bgr md:rounded-lg md:border md:border-bgr-300 md:shadow-lg\"\n    >\n      <header\n        class=\"relative flex flex-row items-center justify-center space-x-4 border-b border-bgr-300 p-4\"\n      >\n        <div\n          class=\"cursor-pointer border-b duration-100 hover:text-thm-hover\"\n          :class=\"\n            tab === 'default'\n              ? 'border-thm text-thm'\n              : 'border-transparent text-txt-weak'\n          \"\n          @click.stop=\"tab = 'default'\"\n        >\n          <span>{{ $t(`${trPrefixSearchDates}calendar`) }}</span>\n        </div>\n        <div\n          class=\"cursor-pointer border-b duration-100 hover:text-thm-hover\"\n          :class=\"\n            tab === 'flexible'\n              ? 'border-thm text-thm'\n              : 'border-transparent text-txt-weak'\n          \"\n          @click.stop=\"tab = 'flexible'\"\n        >\n          <span>{{ $t(`${trPrefixSearchDates}flexible`) }}</span>\n        </div>\n        <div\n          class=\"absolute right-5 top-5\"\n          role=\"button\"\n          aria-label=\"Close date picker\"\n          tabindex=\"0\"\n          @click=\"close\"\n        >\n          <WebccIcon name=\"site/x\" class=\"h-6 w-6 text-txt-weak\" />\n        </div>\n      </header>\n\n      <main class=\"mt-2 mb-[.625rem] py-4 grow overflow-y-auto\">\n        <div v-if=\"tab === 'flexible'\">\n          <h2 class=\"mb-2 text-center text-xl font-medium\">\n            {{ $t(`${trPrefixFlexibleDates}h_duration`) }}\n          </h2>\n          <div v-if=\"duration\" class=\"mb-2 text-center text-thm\">\n            {{ durationText }}\n          </div>\n\n          <div\n            class=\"mx-auto mb-4 grid w-fit max-w-[95%] grid-cols-1 items-center justify-items-center gap-4 sm:mb-6 sm:grid-cols-3 sm:gap-6 md:flex md:justify-center\"\n          >\n            <WebccButton\n              v-for=\"durationIt in presetDurations\"\n              :key=\"durationIt\"\n              class=\"h-11 w-36 rounded-lg\"\n              variant=\"grey\"\n              framed\n              :class=\"\n                duration === durationIt ? 'border-bgr-500 bg-bgr-400' : ''\n              \"\n              @click=\"selectDuration(durationIt)\"\n            >\n              <span class=\"font-medium\">{{\n                getDatesDurationText($t, durationIt)\n              }}</span>\n            </WebccButton>\n            <select\n              :value=\"\n                !duration || presetDurations.includes(duration) ? 0 : duration\n              \"\n              class=\"h-11 w-36 rounded-lg border border-bgr-300 bg-bgr-100 pr-8 font-medium hover:border-bgr-400 hover:bg-bgr-300 focus:bg-bgr-300 focus:outline-none focus:ring-2 focus:ring-thm focus:ring-offset-2\"\n              @input=\"\n                selectDuration(+($event.target as HTMLInputElement).value)\n              \"\n            >\n              <option disabled hidden class=\"padding-x-4\" selected value=\"0\">\n                {{ $t(`${trPrefixFlexibleDates}custom`) }}\n              </option>\n              <option\n                v-for=\"i in DURATION_MAX\"\n                :key=\"i\"\n                class=\"padding-x-4 text-txt\"\n                :value=\"i\"\n              >\n                {{ $t(`${trPrefixFlexibleDates}night_s`, {}, i) }}\n              </option>\n            </select>\n          </div>\n\n          <h2 class=\"mb-2 text-center text-xl font-medium\">\n            {{ $t(`${trPrefixFlexibleDates}h_range`) }}\n          </h2>\n\n          <div class=\"mb-2 text-center text-thm\">\n            {{ $t(`${trPrefixFlexibleDates}tip_range`) }}\n          </div>\n        </div>\n\n        <div class=\"flex flex-row justify-center\">\n          <WebccDateRangepicker\n            :key=\"tab\"\n            v-model=\"range\"\n            :locale=\"$i18n.locale\"\n            :min-length=\"duration ?? DURATION_MIN\"\n            :max-length=\"tab === 'flexible' ? DURATION_MAX_FLEX : DURATION_MAX\"\n            @select-start=\"onStartDateSelect\"\n          />\n        </div>\n        <div\n          v-if=\"screen.isExtraSmall && tab === 'default'\"\n          class=\"px-4 w-full box-border text-center\"\n        >\n          <WebccDateRangePlusMinusDays v-model=\"fuzziness\" class=\"mb-4\" />\n          <span class=\"font-semibold\">{{ tripText }}</span>\n        </div>\n      </main>\n\n      <footer\n        class=\"w-screen pb-4 md:relative md:bottom-auto md:w-auto bg-white\"\n      >\n        <div\n          class=\"flex flex-row items-center justify-between border-t border-bgr-300 p-4\"\n        >\n          <WebccButton\n            variant=\"white\"\n            class=\"underline\"\n            :disabled=\"!valid\"\n            @click=\"reset\"\n          >\n            {{ $t(`${trPrefixSearchDates}reset`) }}\n          </WebccButton>\n          <WebccDateRangePlusMinusDays\n            v-if=\"!screen.isExtraSmall && tab === 'default'\"\n            v-model=\"fuzziness\"\n          />\n          <WebccButton variant=\"theme\" :disabled=\"!valid\" @click=\"apply\">\n            {{ $t(`${trPrefixSearchDates}apply`) }}\n          </WebccButton>\n        </div>\n      </footer>\n    </div>\n  </div>\n</template>\n<script setup lang=\"ts\">\nimport { vOnClickOutside } from '@vueuse/components'\nimport { addDays } from 'date-fns'\nimport type { DatePeriod } from '~/utils/dates'\n\nconst trPrefixSearchDates = 'www.components.elements.SearchDates.'\nconst trPrefixFlexibleDates = 'www.components.elements.FlexibleDates.'\n\ndefineExpose({ focusOnFirstDate, reset })\n\nexport type CalendarTab = 'default' | 'flexible'\nexport type CalendarEventState = (DatePeriod | object) & {\n  tab: CalendarTab\n}\n\nconst model = defineModel<DatePeriod | undefined>({\n  required: true,\n})\n\nconst emit = defineEmits<{\n  close: []\n  tabChange: [tab: CalendarTab, state: CalendarEventState]\n  startDateSelect: [startDate: Date | undefined, state: CalendarEventState]\n  dateRangeChange: [range: DateRange, state: CalendarEventState]\n  reset: [state: CalendarEventState]\n  apply: [model: DatePeriod | undefined]\n}>()\n\nconst { t } = useI18n()\nconst screen = useScreen()\nconst tracking = useTracking()\nconst presetDurations = computed(() => [7, 14])\n\nconst dateRangeCalendar = ref<HTMLDivElement>()\n\nconst tab = ref<CalendarTab>(\n  isFlexDatePeriod(model.value) ? 'flexible' : 'default',\n)\n\nconst range = ref<{ start: Date | undefined; end: Date | undefined }>({\n  start: model.value?.startDate,\n  end: model.value?.endDate,\n})\n\nconst duration = ref<number | undefined>(\n  isFlexDatePeriod(model.value) ? model.value.duration : undefined,\n)\n\nwatch(tab, (tabValue) => {\n  if (tabValue !== 'flexible' && duration.value) return\n  if (!isDateRangeValid(range.value)) return\n\n  duration.value = calculateDuration(range.value.start, range.value.end)\n})\n\nconst fuzziness = ref<number | undefined>(\n  isFuzzyDatePeriod(model.value) ? model.value.fuzziness : undefined,\n)\n\nconst datePeriod = computed<DatePeriod | undefined>(() => {\n  const { start: startDate, end: endDate } = range.value\n  if (!startDate || !endDate) return undefined\n  if (tab.value === 'flexible') {\n    return removeFalsy({\n      startDate,\n      endDate,\n      duration: duration.value,\n    })\n  }\n  return removeFalsy({\n    startDate,\n    endDate,\n    fuzziness: fuzziness.value,\n  })\n})\n\nconst tripText = useDatesTripText(datePeriod)\n\nwatch(duration, function adjustEndDateOnDurationChange(newDuration) {\n  const { start, end } = range.value\n  if (!newDuration || !start || !end) return\n  const calculatedDuration = calculateDuration(start, end)\n  if (newDuration > calculatedDuration) {\n    range.value = { start, end: addDays(start, newDuration) }\n  }\n})\n\nconst valid = computed(\n  () =>\n    isDateRangeValid(range.value) || (!range.value.start && !range.value.end),\n)\n\nconst durationText = computed(() => getDatesDurationText(t, duration.value))\n\nonMounted(async () => {\n  await nextTick()\n  dateRangeCalendar.value?.setAttribute('tabindex', '-1')\n})\n\nfunction close() {\n  emit('close')\n}\n\nfunction focusOnFirstDate() {\n  dateRangeCalendar.value\n    ?.querySelector(\n      `.id-${toDate(range.value.start ?? new Date())} .vc-day-content` as 'div',\n    )\n    ?.focus({ preventScroll: true })\n}\n\nfunction selectDuration(newDuration: number) {\n  tracking.handlers?.search.datesDurationSelectFlex(newDuration)\n  tracking.handlers?.homepage.datesDurationSelect(newDuration)\n  duration.value = newDuration\n}\n\nfunction reset() {\n  range.value = { start: undefined, end: undefined }\n  duration.value = undefined\n  emit('reset', getCalendarEventState())\n}\n\nfunction apply() {\n  if (!valid.value) {\n    return\n  }\n  const newValue = isValidDatePeriod(datePeriod.value)\n    ? datePeriod.value\n    : undefined\n\n  emit('apply', newValue)\n  model.value = newValue\n  close()\n}\n\nfunction onClickOutside() {\n  if (screen.isSmall) return\n\n  close()\n}\n\nwatch(range, function onRangeChange(current) {\n  emit('dateRangeChange', current, getCalendarEventState())\n})\n\nwatch(tab, function onTabChange(val) {\n  emit('tabChange', val, getCalendarEventState())\n  window.sessionStorage.setItem('flexible-search', val ? 'true' : 'false')\n})\n\nfunction onStartDateSelect(value?: Date) {\n  emit('startDateSelect', value, getCalendarEventState())\n}\n\nfunction getCalendarEventState(): CalendarEventState {\n  return { ...(datePeriod.value || {}), tab: tab.value }\n}\n</script>\n","<template>\n  <RedesignWebccPopupDialog v-bind=\"$attrs\">\n    <template #button=\"{ toggle }\">\n      <div\n        class=\"flex items-center h-12 w-full md:w-72 px-4 gap-4 bg-bgr rounded border border-bgr-300 cursor-pointer transition hover:bg-bgr-100 placeholder:font-semibold focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover focus:border-thm-hover\"\n        role=\"text\"\n        tabindex=\"0\"\n        @click.stop=\"toggle\"\n      >\n        <WebccIcon name=\"site/calendar\" class=\"h-5 w-5 shrink-0\" />\n\n        <div class=\"grow truncate text-sm font-semibold\">\n          <span v-if=\"tripText\">\n            {{ tripText }}\n          </span>\n          <span v-else class=\"text-txt-weak\">\n            {{ $t(`${trPrefix}placeholders.when`) }}\n          </span>\n        </div>\n\n        <WebccIcon\n          v-if=\"model\"\n          name=\"site/x\"\n          class=\"h-5 w-5 shrink-0 fill-current text-txt cursor-pointer opacity-20 hover:opacity-60\"\n          @click.stop=\"handleClear\"\n        />\n        <WebccIcon v-else name=\"site/arrow-down\" class=\"h-4 w-4 shrink-0\" />\n      </div>\n    </template>\n\n    <template #default=\"{ close }\">\n      <RedesignDateRangeSearchCalendar\n        v-model=\"model\"\n        class=\"z-5 absolute top-0 left-0 w-full md:w-[40rem] md:left-0\"\n        @close=\"close\"\n        @start-date-select=\"onStartDateSelect\"\n        @date-range-change=\"onDateRangeRange\"\n        @tab-change=\"onDatePickerTabChange\"\n        @reset=\"onReset\"\n        @apply=\"onApply\"\n      />\n    </template>\n  </RedesignWebccPopupDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport RedesignDateRangeSearchCalendar, {\n  type CalendarEventState,\n} from '~/components/pages/search/redesign/RedesignDateRangeSearchCalendar.vue'\nimport type { DatePeriod } from '~/utils/dates'\n\nconst trPrefix = 'www.components.elements.SearchBox.'\n\nconst model = defineModel<DatePeriod | undefined>({ required: true })\n\nconst tracking = useTracking()\n\nconst tripText = useDatesTripText(model)\n\nfunction onStartDateSelect(\n  value: Date | undefined,\n  eventState: CalendarEventState,\n) {\n  if (!value) return\n  tracking.handlers?.search.datesArrivalSelect(\n    value,\n    eventState.tab === 'flexible',\n  )\n  tracking.handlers?.homepage.datesArrivalSelect(value)\n}\n\nfunction onDateRangeRange(range: DateRange, eventState: CalendarEventState) {\n  if (!range.start || !range.end) return\n\n  const duration =\n    'duration' in eventState && eventState.duration\n      ? eventState.duration\n      : calculateDuration(range.start, range.end)\n\n  tracking.handlers?.search.datesDurationSelect(\n    duration,\n    eventState.tab === 'flexible',\n  )\n  tracking.handlers?.homepage.datesDurationSelect(duration)\n}\n\nfunction onDatePickerTabChange(tab: CalendarEventState['tab']) {\n  tracking.handlers?.search.datesModeSwitch(tab === 'flexible')\n}\n\nfunction onReset(state: CalendarEventState) {\n  tracking.handlers?.search.datesClear(state.tab === 'flexible')\n}\n\nfunction onApply(period: DatePeriod | undefined) {\n  tracking.handlers?.search.datesApply(isFlexDatePeriod(period))\n}\n\nfunction handleClear() {\n  model.value = undefined\n}\n</script>\n","import{computed as O,defineComponent as j,Fragment as W,h as T,inject as q,onMounted as ee,onUnmounted as te,provide as z,ref as R,shallowRef as ie,watchEffect as J}from\"vue\";import{useNestedPortals as se}from'../../components/portal/portal.js';import{useEventListener as pe}from'../../hooks/use-event-listener.js';import{useId as H}from'../../hooks/use-id.js';import{useOutsideClick as fe}from'../../hooks/use-outside-click.js';import{useResolveButtonType as ve}from'../../hooks/use-resolve-button-type.js';import{useMainTreeNode as ce,useRootContainers as de}from'../../hooks/use-root-containers.js';import{Direction as M,useTabDirection as oe}from'../../hooks/use-tab-direction.js';import{Features as Q,Hidden as X}from'../../internal/hidden.js';import{State as N,useOpenClosed as ne,useOpenClosedProvider as Pe}from'../../internal/open-closed.js';import{Keys as k}from'../../keyboard.js';import{dom as n}from'../../utils/dom.js';import{Focus as D,FocusableMode as me,focusIn as B,FocusResult as Y,getFocusableElements as Z,isFocusableElement as be}from'../../utils/focus-management.js';import{match as K}from'../../utils/match.js';import'../../utils/micro-task.js';import{getOwnerDocument as V}from'../../utils/owner.js';import{Features as _,render as A}from'../../utils/render.js';var Se=(s=>(s[s.Open=0]=\"Open\",s[s.Closed=1]=\"Closed\",s))(Se||{});let re=Symbol(\"PopoverContext\");function U(d){let P=q(re,null);if(P===null){let s=new Error(`<${d} /> is missing a parent <${ye.name} /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(s,U),s}return P}let le=Symbol(\"PopoverGroupContext\");function ae(){return q(le,null)}let ue=Symbol(\"PopoverPanelContext\");function ge(){return q(ue,null)}let ye=j({name:\"Popover\",inheritAttrs:!1,props:{as:{type:[Object,String],default:\"div\"}},setup(d,{slots:P,attrs:s,expose:h}){var u;let f=R(null);h({el:f,$el:f});let t=R(1),o=R(null),y=R(null),v=R(null),m=R(null),b=O(()=>V(f)),E=O(()=>{var L,$;if(!n(o)||!n(m))return!1;for(let x of document.querySelectorAll(\"body > *\"))if(Number(x==null?void 0:x.contains(n(o)))^Number(x==null?void 0:x.contains(n(m))))return!0;let e=Z(),r=e.indexOf(n(o)),l=(r+e.length-1)%e.length,g=(r+1)%e.length,G=e[l],C=e[g];return!((L=n(m))!=null&&L.contains(G))&&!(($=n(m))!=null&&$.contains(C))}),a={popoverState:t,buttonId:R(null),panelId:R(null),panel:m,button:o,isPortalled:E,beforePanelSentinel:y,afterPanelSentinel:v,togglePopover(){t.value=K(t.value,{[0]:1,[1]:0})},closePopover(){t.value!==1&&(t.value=1)},close(e){a.closePopover();let r=(()=>e?e instanceof HTMLElement?e:e.value instanceof HTMLElement?n(e):n(a.button):n(a.button))();r==null||r.focus()}};z(re,a),Pe(O(()=>K(t.value,{[0]:N.Open,[1]:N.Closed})));let S={buttonId:a.buttonId,panelId:a.panelId,close(){a.closePopover()}},c=ae(),I=c==null?void 0:c.registerPopover,[F,w]=se(),i=de({mainTreeNodeRef:c==null?void 0:c.mainTreeNodeRef,portals:F,defaultContainers:[o,m]});function p(){var e,r,l,g;return(g=c==null?void 0:c.isFocusWithinPopoverGroup())!=null?g:((e=b.value)==null?void 0:e.activeElement)&&(((r=n(o))==null?void 0:r.contains(b.value.activeElement))||((l=n(m))==null?void 0:l.contains(b.value.activeElement)))}return J(()=>I==null?void 0:I(S)),pe((u=b.value)==null?void 0:u.defaultView,\"focus\",e=>{var r,l;e.target!==window&&e.target instanceof HTMLElement&&t.value===0&&(p()||o&&m&&(i.contains(e.target)||(r=n(a.beforePanelSentinel))!=null&&r.contains(e.target)||(l=n(a.afterPanelSentinel))!=null&&l.contains(e.target)||a.closePopover()))},!0),fe(i.resolveContainers,(e,r)=>{var l;a.closePopover(),be(r,me.Loose)||(e.preventDefault(),(l=n(o))==null||l.focus())},O(()=>t.value===0)),()=>{let e={open:t.value===0,close:a.close};return T(W,[T(w,{},()=>A({theirProps:{...d,...s},ourProps:{ref:f},slot:e,slots:P,attrs:s,name:\"Popover\"})),T(i.MainTreeNode)])}}}),Ge=j({name:\"PopoverButton\",props:{as:{type:[Object,String],default:\"button\"},disabled:{type:[Boolean],default:!1},id:{type:String,default:null}},inheritAttrs:!1,setup(d,{attrs:P,slots:s,expose:h}){var u;let f=(u=d.id)!=null?u:`headlessui-popover-button-${H()}`,t=U(\"PopoverButton\"),o=O(()=>V(t.button));h({el:t.button,$el:t.button}),ee(()=>{t.buttonId.value=f}),te(()=>{t.buttonId.value=null});let y=ae(),v=y==null?void 0:y.closeOthers,m=ge(),b=O(()=>m===null?!1:m.value===t.panelId.value),E=R(null),a=`headlessui-focus-sentinel-${H()}`;b.value||J(()=>{t.button.value=n(E)});let S=ve(O(()=>({as:d.as,type:P.type})),E);function c(e){var r,l,g,G,C;if(b.value){if(t.popoverState.value===1)return;switch(e.key){case k.Space:case k.Enter:e.preventDefault(),(l=(r=e.target).click)==null||l.call(r),t.closePopover(),(g=n(t.button))==null||g.focus();break}}else switch(e.key){case k.Space:case k.Enter:e.preventDefault(),e.stopPropagation(),t.popoverState.value===1&&(v==null||v(t.buttonId.value)),t.togglePopover();break;case k.Escape:if(t.popoverState.value!==0)return v==null?void 0:v(t.buttonId.value);if(!n(t.button)||(G=o.value)!=null&&G.activeElement&&!((C=n(t.button))!=null&&C.contains(o.value.activeElement)))return;e.preventDefault(),e.stopPropagation(),t.closePopover();break}}function I(e){b.value||e.key===k.Space&&e.preventDefault()}function F(e){var r,l;d.disabled||(b.value?(t.closePopover(),(r=n(t.button))==null||r.focus()):(e.preventDefault(),e.stopPropagation(),t.popoverState.value===1&&(v==null||v(t.buttonId.value)),t.togglePopover(),(l=n(t.button))==null||l.focus()))}function w(e){e.preventDefault(),e.stopPropagation()}let i=oe();function p(){let e=n(t.panel);if(!e)return;function r(){K(i.value,{[M.Forwards]:()=>B(e,D.First),[M.Backwards]:()=>B(e,D.Last)})===Y.Error&&B(Z().filter(g=>g.dataset.headlessuiFocusGuard!==\"true\"),K(i.value,{[M.Forwards]:D.Next,[M.Backwards]:D.Previous}),{relativeTo:n(t.button)})}r()}return()=>{let e=t.popoverState.value===0,r={open:e},{...l}=d,g=b.value?{ref:E,type:S.value,onKeydown:c,onClick:F}:{ref:E,id:f,type:S.value,\"aria-expanded\":t.popoverState.value===0,\"aria-controls\":n(t.panel)?t.panelId.value:void 0,disabled:d.disabled?!0:void 0,onKeydown:c,onKeyup:I,onClick:F,onMousedown:w};return T(W,[A({ourProps:g,theirProps:{...P,...l},slot:r,attrs:P,slots:s,name:\"PopoverButton\"}),e&&!b.value&&t.isPortalled.value&&T(X,{id:a,features:Q.Focusable,\"data-headlessui-focus-guard\":!0,as:\"button\",type:\"button\",onFocus:p})])}}}),$e=j({name:\"PopoverOverlay\",props:{as:{type:[Object,String],default:\"div\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0}},setup(d,{attrs:P,slots:s}){let h=U(\"PopoverOverlay\"),f=`headlessui-popover-overlay-${H()}`,t=ne(),o=O(()=>t!==null?(t.value&N.Open)===N.Open:h.popoverState.value===0);function y(){h.closePopover()}return()=>{let v={open:h.popoverState.value===0};return A({ourProps:{id:f,\"aria-hidden\":!0,onClick:y},theirProps:d,slot:v,attrs:P,slots:s,features:_.RenderStrategy|_.Static,visible:o.value,name:\"PopoverOverlay\"})}}}),je=j({name:\"PopoverPanel\",props:{as:{type:[Object,String],default:\"div\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},focus:{type:Boolean,default:!1},id:{type:String,default:null}},inheritAttrs:!1,setup(d,{attrs:P,slots:s,expose:h}){var w;let f=(w=d.id)!=null?w:`headlessui-popover-panel-${H()}`,{focus:t}=d,o=U(\"PopoverPanel\"),y=O(()=>V(o.panel)),v=`headlessui-focus-sentinel-before-${H()}`,m=`headlessui-focus-sentinel-after-${H()}`;h({el:o.panel,$el:o.panel}),ee(()=>{o.panelId.value=f}),te(()=>{o.panelId.value=null}),z(ue,o.panelId),J(()=>{var p,u;if(!t||o.popoverState.value!==0||!o.panel)return;let i=(p=y.value)==null?void 0:p.activeElement;(u=n(o.panel))!=null&&u.contains(i)||B(n(o.panel),D.First)});let b=ne(),E=O(()=>b!==null?(b.value&N.Open)===N.Open:o.popoverState.value===0);function a(i){var p,u;switch(i.key){case k.Escape:if(o.popoverState.value!==0||!n(o.panel)||y.value&&!((p=n(o.panel))!=null&&p.contains(y.value.activeElement)))return;i.preventDefault(),i.stopPropagation(),o.closePopover(),(u=n(o.button))==null||u.focus();break}}function S(i){var u,e,r,l,g;let p=i.relatedTarget;p&&n(o.panel)&&((u=n(o.panel))!=null&&u.contains(p)||(o.closePopover(),((r=(e=n(o.beforePanelSentinel))==null?void 0:e.contains)!=null&&r.call(e,p)||(g=(l=n(o.afterPanelSentinel))==null?void 0:l.contains)!=null&&g.call(l,p))&&p.focus({preventScroll:!0})))}let c=oe();function I(){let i=n(o.panel);if(!i)return;function p(){K(c.value,{[M.Forwards]:()=>{var e;B(i,D.First)===Y.Error&&((e=n(o.afterPanelSentinel))==null||e.focus())},[M.Backwards]:()=>{var u;(u=n(o.button))==null||u.focus({preventScroll:!0})}})}p()}function F(){let i=n(o.panel);if(!i)return;function p(){K(c.value,{[M.Forwards]:()=>{let u=n(o.button),e=n(o.panel);if(!u)return;let r=Z(),l=r.indexOf(u),g=r.slice(0,l+1),C=[...r.slice(l+1),...g];for(let L of C.slice())if(L.dataset.headlessuiFocusGuard===\"true\"||e!=null&&e.contains(L)){let $=C.indexOf(L);$!==-1&&C.splice($,1)}B(C,D.First,{sorted:!1})},[M.Backwards]:()=>{var e;B(i,D.Previous)===Y.Error&&((e=n(o.button))==null||e.focus())}})}p()}return()=>{let i={open:o.popoverState.value===0,close:o.close},{focus:p,...u}=d,e={ref:o.panel,id:f,onKeydown:a,onFocusout:t&&o.popoverState.value===0?S:void 0,tabIndex:-1};return A({ourProps:e,theirProps:{...P,...u},attrs:P,slot:i,slots:{...s,default:(...r)=>{var l;return[T(W,[E.value&&o.isPortalled.value&&T(X,{id:v,ref:o.beforePanelSentinel,features:Q.Focusable,\"data-headlessui-focus-guard\":!0,as:\"button\",type:\"button\",onFocus:I}),(l=s.default)==null?void 0:l.call(s,...r),E.value&&o.isPortalled.value&&T(X,{id:m,ref:o.afterPanelSentinel,features:Q.Focusable,\"data-headlessui-focus-guard\":!0,as:\"button\",type:\"button\",onFocus:F})])]}},features:_.RenderStrategy|_.Static,visible:E.value,name:\"PopoverPanel\"})}}}),Ae=j({name:\"PopoverGroup\",inheritAttrs:!1,props:{as:{type:[Object,String],default:\"div\"}},setup(d,{attrs:P,slots:s,expose:h}){let f=R(null),t=ie([]),o=O(()=>V(f)),y=ce();h({el:f,$el:f});function v(a){let S=t.value.indexOf(a);S!==-1&&t.value.splice(S,1)}function m(a){return t.value.push(a),()=>{v(a)}}function b(){var c;let a=o.value;if(!a)return!1;let S=a.activeElement;return(c=n(f))!=null&&c.contains(S)?!0:t.value.some(I=>{var F,w;return((F=a.getElementById(I.buttonId.value))==null?void 0:F.contains(S))||((w=a.getElementById(I.panelId.value))==null?void 0:w.contains(S))})}function E(a){for(let S of t.value)S.buttonId.value!==a&&S.close()}return z(le,{registerPopover:m,unregisterPopover:v,isFocusWithinPopoverGroup:b,closeOthers:E,mainTreeNodeRef:y.mainTreeNodeRef}),()=>T(W,[A({ourProps:{ref:f},theirProps:{...d,...P},slot:{},attrs:P,slots:s,name:\"PopoverGroup\"}),T(y.MainTreeNode)])}});export{ye as Popover,Ge as PopoverButton,Ae as PopoverGroup,$e as PopoverOverlay,je as PopoverPanel};\n","<template>\n  <input\n    type=\"number\"\n    class=\"h-11 min-w-[3rem] rounded-md border-brd text-base font-medium transition hover:bg-bgr-100 focus:text-txt-stronger focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover active:bg-bgr-50 [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-bgr-50\"\n    autocomplete=\"off\"\n    :value=\"Number.isFinite(model) ? model : props.defaultValue\"\n    :min\n    :max\n    :step\n    :disabled=\"disabled || loading\"\n    @input=\"handleInput\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { clamp } from 'lodash-es'\n\nconst props = withDefaults(\n  defineProps<{\n    step?: number\n    min?: number\n    max?: number\n    defaultValue?: number\n    debounce?: number\n    disabled?: boolean\n    loading?: boolean\n  }>(),\n  {\n    step: 1,\n    min: Number.MIN_SAFE_INTEGER,\n    max: Number.MAX_SAFE_INTEGER,\n    defaultValue: 0,\n    debounce: 0,\n    disabled: false,\n  },\n)\n\nconst model = defineModel<number>({ required: true })\n\nconst handleInput = useDebounceFn(handleInputChange, props.debounce)\n\nfunction handleInputChange(event: Event) {\n  const target = event.target as HTMLInputElement\n  const value = clamp(\n    tryParseInt(target.value) ?? props.defaultValue,\n    props.min,\n    props.max,\n  )\n  model.value = value\n  target.value = value.toString()\n}\n</script>\n","<template>\n  <div class=\"mb-4 last:mb-0 flex\" :class=\"`flex-${direction}`\">\n    <label v-if=\"$slots.default\" :for=\"`${name}-stepper-input`\" class=\"mb-4\">\n      <slot></slot>\n    </label>\n\n    <div class=\"relative flex items-center gap-4 max-w-[10.5rem]\">\n      <button\n        class=\"rounded-full p-2.5 bg-bgr-100 text-lg transition hover:bg-bgr-300 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover disabled:cursor-not-allowed disabled:bg-bgr-50\"\n        :disabled=\"disabled || !decreasable\"\n        @click=\"handleButtons(-1)\"\n      >\n        <WebccIcon\n          class=\"h-6 w-6 text-txt-weak\"\n          :class=\"{ 'opacity-20': disabled || !decreasable }\"\n          name=\"searchpage/minus-clear\"\n        />\n      </button>\n\n      <RedesignWebccNumberInput\n        v-model=\"model\"\n        class=\"text-center text-sm\"\n        :disabled\n        :min\n        :max\n      />\n\n      <button\n        class=\"rounded-full p-2.5 bg-bgr-100 text-lg transition hover:bg-bgr-300 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover disabled:cursor-not-allowed disabled:bg-bgr-50\"\n        :disabled=\"disabled || !incresable\"\n        @click=\"handleButtons(1)\"\n      >\n        <WebccIcon\n          class=\"h-6 w-6 text-txt-weak\"\n          :class=\"{ 'opacity-20': disabled || !incresable }\"\n          name=\"searchpage/plus-clear\"\n        />\n      </button>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n  defineProps<{\n    name: string\n    direction?: 'row' | 'col'\n    min?: number\n    max?: number\n    disabled?: boolean\n  }>(),\n  {\n    direction: 'col',\n    min: Number.MIN_SAFE_INTEGER,\n    max: Number.MAX_SAFE_INTEGER,\n    disabled: false,\n  },\n)\n\nconst model = defineModel<number>({ required: true, default: 0 })\n\nconst decreasable = computed(() => model.value > props.min)\nconst incresable = computed(() => model.value < props.max)\n\nfunction handleButtons(value: -1 | 1) {\n  model.value += value\n}\n</script>\n","<template>\n  <HeadlessPopover class=\"relative\">\n    <HeadlessPopoverButton\n      class=\"flex items-center w-full px-4 gap-4 h-12 bg-bgr rounded border border-bgr-300 font-semibold cursor-pointer placeholder:text-txt-weak focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover focus:border-thm-hover\"\n    >\n      <WebccIcon name=\"site/pax\" class=\"pointer-events-none h-5 w-5\" />\n      <span class=\"grow truncate text-left text-sm\">\n        {{\n          $t(`${trPrefix}SearchBox.pax_s`, model.pax) +\n          ', ' +\n          $t(`${trPrefix}SearchBox.pet_s`, model.pets)\n        }}\n      </span>\n\n      <WebccIcon\n        v-if=\"hasSelectedValues\"\n        name=\"site/x\"\n        class=\"h-5 w-5 shrink-0 fill-current text-txt cursor-pointer opacity-20 hover:opacity-60\"\n        @click.stop=\"handleClear\"\n      />\n      <WebccIcon v-else name=\"site/arrow-down\" class=\"h-4 w-4 shrink-0\" />\n    </HeadlessPopoverButton>\n\n    <HeadlessPopoverPanel\n      v-slot=\"{ close }\"\n      tabindex=\"-1\"\n      class=\"z-[2] bg-bgr w-[400px]\"\n      :class=\"\n        screen.isSmall\n          ? 'fixed top-0 left-0 right-0 bottom-0 w-full h-full'\n          : 'absolute top-14 rounded border border-bgr-300 shadow-md'\n      \"\n    >\n      <div\n        v-if=\"screen.isSmall\"\n        class=\"flex justify-center p-5 border-b border-bgr-300\"\n      >\n        <span> {{ $t(`${trPrefix}SearchBox.pax_s`) }}</span>\n\n        <WebccIcon\n          name=\"site/x\"\n          class=\"absolute right-5 icon cursor-pointer h-6 w-6\"\n          @click=\"apply(close)\"\n        />\n      </div>\n\n      <div class=\"flex justify-between items-center p-5\">\n        <span> {{ $t(`${trPrefix}SearchBox.placeholders.pax`) }}</span>\n\n        <RedesignWebccStepper\n          v-model=\"guests.pax\"\n          :min=\"FILTERS_PAX_MIN\"\n          :max=\"FILTERS_PAX_MAX\"\n        />\n      </div>\n\n      <div class=\"flex justify-between items-center p-5 pt-2\">\n        <span> {{ $t(`${trPrefix}SearchBox.pet_s`) }}</span>\n\n        <RedesignWebccStepper\n          v-model=\"guests.pets\"\n          :min=\"FILTERS_PETS_MIN\"\n          :max=\"FILTERS_PETS_MAX\"\n        />\n      </div>\n\n      <div\n        class=\"border-t border-bgr-300 p-4\"\n        :class=\"\n          screen.isSmall ? 'absolute bottom-0 w-full' : 'flex justify-end '\n        \"\n      >\n        <WebccButton\n          variant=\"theme\"\n          :class=\"screen.isSmall && 'w-full'\"\n          @click=\"apply(close)\"\n        >\n          {{ $t(`${trPrefix}SearchDates.apply`) }}\n        </WebccButton>\n      </div>\n    </HeadlessPopoverPanel>\n  </HeadlessPopover>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.elements.'\n\nconst screen = useScreen()\n\nconst model = defineModel<{ pax: number; pets: number }>({\n  default: { pax: FILTERS_PAX_MIN, pets: FILTERS_PETS_MIN },\n})\n\nconst guests = ref({ pax: model.value.pax, pets: model.value.pets })\n\nconst hasSelectedValues = computed(\n  () =>\n    model.value.pax !== FILTERS_PAX_MIN &&\n    model.value.pets !== FILTERS_PETS_MIN,\n)\n\nfunction apply(close: () => void) {\n  model.value = { pax: guests.value.pax, pets: guests.value.pets }\n  close()\n}\n\nfunction handleClear() {\n  guests.value = { pax: FILTERS_PAX_MIN, pets: FILTERS_PETS_MIN }\n  model.value = { pax: guests.value.pax, pets: guests.value.pets }\n}\n</script>\n","<template>\n  <div>\n    <RedesignSearchBarCollapsed\n      v-if=\"isCollapsed && !isOldLayout\"\n      :suggestion\n      :pax\n      :period=\"datesPeriod\"\n      @click=\"toggle\"\n    />\n\n    <div v-else class=\"flex flex-col md:flex-row gap-4\">\n      <RedesignSearchDestinationSelect\n        v-model=\"suggestion\"\n        class=\"w-full md:max-w-72\"\n      />\n\n      <RedesignSearchDateRangePicker\n        v-model=\"datesPeriod\"\n        class=\"w-full md:w-auto\"\n      />\n\n      <RedesignSearchGuestsSelect v-model=\"guests\" class=\"w-full md:w-auto\" />\n\n      <WebccButton\n        variant=\"cta\"\n        class=\"h-12\"\n        :class=\"isOldLayout ? 'w-full' : ''\"\n        @click=\"performSearch\"\n      >\n        {{ $t(`${trPrefix}search`) }}\n      </WebccButton>\n\n      <WebccButton\n        v-if=\"!isOldLayout\"\n        variant=\"white\"\n        outline\n        class=\"h-12 md:hidden\"\n        @click=\"toggle\"\n      >\n        {{ $t('www.pages.favorites.close') }}\n      </WebccButton>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.elements.SearchBox.'\n\nconst props = defineProps<{\n  searchQueryParams?: string[]\n  isOldLayout?: boolean\n}>()\n\nconst confData = useConfdata()\nconst tracking = useTracking()\nconst params = useParams()\nconst screen = useScreen()\n\nconst suggestion = ref(mapDestinationToSuggestion(confData.destination))\n\nconst datesPeriod = ref(getInitialDatePeriodFromFlexTrip(useFlexTrip()))\n\nconst pax = ref(tryParseInt(params.all.pax) ?? 0)\nconst pets = ref(tryParseInt(params.all.minpets) ?? 0)\nconst guests = ref({ pax, pets })\nconst isCollapsed = ref(false)\n\nconst emit = defineEmits<{\n  'perfom-search': [\n    {\n      text?: string\n      date?: string\n      duration?: string | number\n      pax?: number\n      pets?: number\n    },\n  ]\n}>()\n\nwatch(\n  () => screen.isSmall,\n  (newValue) => {\n    if (!newValue) {\n      isCollapsed.value = false\n    }\n  },\n)\n\nfunction toggle() {\n  isCollapsed.value = !isCollapsed.value\n}\n\nasync function performSearch() {\n  const dates = toValue(datesPeriod)\n  const checkin = isValidDatePeriod(dates)\n    ? toServerDate(dates.startDate)\n    : undefined\n  const checkout = isValidDatePeriod(dates)\n    ? toServerDate(dates.endDate)\n    : undefined\n  const presetQuery = Object.fromEntries(\n    (props.searchQueryParams ?? []).map((param) => param.split('=')),\n  )\n  const duration = isFlexDatePeriod(dates)\n    ? dates.duration\n    : checkin && checkout\n      ? calculateDuration(checkin, checkout)\n      : undefined\n  emit('perfom-search', {\n    text: suggestion.value?.label,\n    date: checkin ?? '',\n    duration,\n    pax: guests.value.pax,\n    pets: guests.value.pets,\n  })\n  tracking.handlers?.qs.submitSearch({\n    text: suggestion.value?.label,\n    date: checkin ?? '',\n    duration: checkin && checkout ? calculateDuration(checkin, checkout) : '',\n    pax: guests.value.pax,\n    pets: guests.value.pets,\n    ...presetQuery,\n  })\n\n  const query = {\n    ...presetQuery,\n    ...params.persistent,\n    checkin,\n    checkout,\n    pax: guests.value.pax > 0 ? guests.value.pax : undefined,\n    minpets: guests.value.pets > 0 ? guests.value.pets : undefined,\n    duration: isFlexDatePeriod(dates) ? dates.duration : undefined,\n    fuzzyness: isFuzzyDatePeriod(dates) ? dates.fuzziness : undefined,\n  }\n\n  const path = buildPath(\n    confData.languagePrefix,\n    suggestion.value?.slug || confData.prefixSearchpage,\n  )\n\n  await navigateTo({ path, query }, { external: true }) // TODO: Get rid of external\n}\n\nonMounted(() => {\n  if (screen.isSmall) {\n    isCollapsed.value =\n      !!suggestion.value || !!pax.value || isValidDatePeriod(datesPeriod.value)\n  } else {\n    isCollapsed.value = false\n  }\n})\n</script>\n","<template>\n  <a\n    v-if=\"renderAsAnchor\"\n    :target=\"params.iframe ? '_self' : target\"\n    :href=\"url\"\n  >\n    <slot />\n  </a>\n  <NuxtLink v-else :to=\"url\" :prefetch=\"prefetch\">\n    <slot />\n  </NuxtLink>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n  absolute?: boolean\n  anchor?: boolean\n  target?: string\n  to?: string | URL\n  hash?: string\n  prefetch?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  absolute: false,\n  anchor: false,\n  target: '',\n  to: '',\n  hash: '',\n  prefetch: false,\n})\n\nconst params = useParams()\n\nconst renderAsAnchor = computed(() => {\n  const to = props.to.toString()\n  return (\n    props.anchor ||\n    to.startsWith('http') ||\n    to.startsWith('tel:') ||\n    to.startsWith('mailto:') ||\n    to.startsWith('//')\n  )\n})\n\nconst url = computed(() => {\n  let path = props.to\n  if (\n    props.absolute ||\n    typeof path === 'object' ||\n    path.startsWith('http') ||\n    path.startsWith('#') ||\n    path.startsWith('tel:') ||\n    path.startsWith('mailto:')\n  ) {\n    return path.toString()\n  }\n  // Allow self referential links but make sure to keep ssr-params\n  if (path === '') {\n    const searchParams = new URLSearchParams()\n    Object.entries(params.persistent).forEach(([key, value]) => {\n      searchParams.set(key, value.toString())\n    })\n    return searchParams.toString() ? `?${searchParams.toString()}` : ''\n  }\n  let search = ''\n  if (path.includes('?')) {\n    ;[path, search] = path.split('?')\n  }\n  if (!path.startsWith('/')) {\n    path = `/${path}`\n  }\n  if (!path.endsWith('/')) {\n    path = `${path}/`\n  }\n  // The second check is necessary since CMS-links in the conf-api response already include the language-prefix.\n  if (\n    useConfdata().languagePrefix &&\n    !path.startsWith(`${useConfdata().languagePrefix}/`)\n  ) {\n    path = useConfdata().languagePrefix + path\n  }\n  const p = new URLSearchParams(search)\n  Object.entries(params.persistent).forEach(([key, value]) => {\n    p.set(key, value.toString())\n  })\n  // Check, if hash is set\n  let hashParam = props.hash\n  if (props.hash !== '') {\n    // Check if # is set in the hash or not\n    if (!props.hash.startsWith('#')) {\n      hashParam = `#${hashParam}`\n    }\n  }\n  return path + (p.toString() ? `?${p.toString()}` : '') + hashParam\n})\n</script>\n","<template>\n  <WebccBreadcrumb :lead=\"lead\" :items=\"items\" class=\"py-3\" />\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.Breadcrumbs.'\n\nconst props = defineProps<{\n  geo?: { country?: TrDest; region?: TrDest; place?: TrDest }\n}>()\n\nconst lead = computed(() => {\n  return {\n    target: '/',\n    title: 'Home',\n    tr: `${trPrefix}home`,\n    content: 'Home',\n  }\n})\nconst items = computed(() => {\n  const items = []\n  const country = props.geo?.country\n  const region = props.geo?.region\n  const place = props.geo?.place\n  let countryPath\n  let regionPath\n  let placePath\n  if (country) {\n    countryPath = country.slug\n    items.push({\n      target: countryPath,\n      title: country.name,\n      text: country.name,\n      content: country.name,\n    })\n  }\n  if (region) {\n    regionPath = `${countryPath}/${region.slug}`\n    items.push({\n      target: regionPath,\n      title: region.name,\n      text: region.name,\n      content: region.name,\n    })\n  }\n  if (place) {\n    placePath = `${regionPath}/${place.slug}`\n    items.push({\n      target: placePath,\n      title: place.name,\n      text: place.name,\n      content: place.name,\n    })\n  }\n  return items\n})\n</script>\n","export const useStorageReady = () => {\n  // Check if the storage is ready via nuxtApp\n  if (import.meta.client) {\n    try {\n      if (window.localStorage) {\n        return true\n      }\n      return false\n    } catch {\n      return false\n    }\n  } else {\n    return false\n  }\n}\n","<template>\n  <!-- Used to access the bookmarks page in iframe -->\n  <client-only v-if=\"show\">\n    <div class=\"flex items-baseline justify-end gap-2\">\n      <WebccLink\n        class=\"focus:text-txt-900 relative flex items-center rounded border-bgr-300 bg-bgr-200 px-3 py-1.5 text-sm font-light text-txt hover:bg-bgr-100 focus:border-bgr-700 focus:bg-bgr-100 focus:outline-none disabled:cursor-not-allowed disabled:shadow-none md:px-4 md:text-base\"\n        :to=\"conf.links?.bookmarks.href\"\n      >\n        <WebccIcon class=\"-ml-1.5 mr-2 h-5 w-5\" name=\"site/bookmark\" filled />\n        <span class=\"block\">{{ $t(`${trPrefix}favorites`) }}</span>\n        <div\n          v-show=\"bookmarks.count > 0\"\n          class=\"absolute -right-2 -top-2 flex h-4 w-4 items-center justify-center rounded-full bg-thm text-xs text-bgr\"\n        >\n          {{ bookmarks.count }}\n        </div>\n      </WebccLink>\n    </div>\n  </client-only>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.site.BookmarkLink.'\n\nconst bookmarks = useBookmarks()\nconst conf = useConfdata()\n\nconst show = computed(() => {\n  const { iframe } = useParams()\n  return (\n    useStorageReady() &&\n    iframe?.layout &&\n    !['header', 'full'].includes(iframe.layout.toString())\n  )\n})\n</script>\n","<template>\n  <div class=\"my-4 flex flex-row flex-wrap gap-x-2 gap-y-4 align-baseline\">\n    <div\n      v-for=\"(facet, idx) in selected\"\n      :key=\"idx\"\n      class=\"flex items-center gap-x-2.5 min-w-[5rem] rounded-full bg-thm-light border border-gray-400 px-3 py-3.5 text-sm font-semibold hover:bg-inherit\"\n    >\n      <span>{{ facet?.label }}</span>\n\n      <button @click.stop=\"remove(facet!.key)\">\n        <WebccIcon name=\"site/x\" class=\"ml-1 h-4 w-4\" />\n      </button>\n    </div>\n  </div>\n\n  <button\n    class=\"text-left underline font-semibold flex gap-1 items-center\"\n    @click.stop=\"removeAll\"\n  >\n    {{ $t(`${trPrefixCommon}removeAllFilters`) }}\n  </button>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefixCommon = 'www.common.'\n\nconst model = defineModel<SearchState>({ required: true })\n\nconst { selected, remove, removeAll } = useSelectedSearchStateValues(model)\n</script>\n","<template>\n  <template v-if=\"loading\">\n    <RedesignWebccStepper\n      :model-value=\"0\"\n      :name=\"name\"\n      :min=\"0\"\n      :max=\"0\"\n      disabled\n    >\n      <slot name=\"item.loader\">\n        <div\n          class=\"inline-block h-[1em] rounded-full bg-gray-200 align-sub\"\n          :style=\"{ width: `${Math.random() * 100 + 40}px` }\"\n        >\n          &nbsp;\n        </div>\n      </slot>\n    </RedesignWebccStepper>\n  </template>\n\n  <template v-else>\n    <RedesignWebccStepper\n      v-if=\"options\"\n      v-model=\"model\"\n      :name=\"name\"\n      :min=\"options[0].value\"\n      :max=\"options[1].value\"\n    >\n      <slot></slot>\n    </RedesignWebccStepper>\n  </template>\n</template>\n\n<script\n  setup\n  lang=\"ts\"\n  generic=\"\n    TValue extends string | number | undefined,\n    TOption extends BaseFilterOption<TValue>\n  \"\n>\nconst LOADING_COUNT = 4\n\nwithDefaults(\n  defineProps<{\n    name: string\n    loading?: boolean\n    loadingItems?: number\n    options?: TOption[]\n  }>(),\n  {\n    loadingItems: LOADING_COUNT,\n    options: () => [],\n  },\n)\n\nconst model = defineModel<TValue>({\n  required: true,\n  default: () => undefined,\n}) as Ref<TValue>\n</script>\n","<template>\n  <div class=\"relative\">\n    <RedesignWebccNumberInput\n      v-model=\"model\"\n      class=\"h-14 pt-8 pb-3 pl-[3.75rem] pr-6 min-w-[8rem] text-start\"\n      :name\n      :min\n      :max\n      :default-value\n      :step=\"STEP\"\n      :debounce=\"DEBOUNCE\"\n      :disabled\n      :loading\n    />\n\n    <span class=\"absolute top-2.5 left-6 text-xs text-txt-weak\">\n      <slot></slot>\n    </span>\n\n    <span\n      class=\"absolute bottom-1.5 left-6 text-base font-medium\"\n      :class=\"{ 'opacity-50': disabled || loading }\"\n    >\n      {{ currency }}\n    </span>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst STEP = 10\nconst DEBOUNCE = 400\n\ndefineProps<{\n  name: string\n  currency: string\n  disabled?: boolean\n  min?: number\n  max?: number\n  defaultValue?: number\n  loading?: boolean\n}>()\n\nconst model = defineModel<number>({ required: true })\n</script>\n","export function useColors() {\n  return useNuxtApp().$colors\n}\n","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.4.8\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n    let id = 0;\n    return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n    return value === null || value === undefined;\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n    if (Array.isArray && Array.isArray(value)) {\n        return true;\n    }\n    const type = Object.prototype.toString.call(value);\n    if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n        return true;\n    }\n    return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n    return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */ function isNumberFinite(value) {\n    return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n    return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n    return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n    if (fn && typeof fn.call === 'function') {\n        return fn.apply(thisArg, args);\n    }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n    let i, len, keys;\n    if (isArray(loopable)) {\n        len = loopable.length;\n        if (reverse) {\n            for(i = len - 1; i >= 0; i--){\n                fn.call(thisArg, loopable[i], i);\n            }\n        } else {\n            for(i = 0; i < len; i++){\n                fn.call(thisArg, loopable[i], i);\n            }\n        }\n    } else if (isObject(loopable)) {\n        keys = Object.keys(loopable);\n        len = keys.length;\n        for(i = 0; i < len; i++){\n            fn.call(thisArg, loopable[keys[i]], keys[i]);\n        }\n    }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n    let i, ilen, v0, v1;\n    if (!a0 || !a1 || a0.length !== a1.length) {\n        return false;\n    }\n    for(i = 0, ilen = a0.length; i < ilen; ++i){\n        v0 = a0[i];\n        v1 = a1[i];\n        if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n    if (isArray(source)) {\n        return source.map(clone);\n    }\n    if (isObject(source)) {\n        const target = Object.create(null);\n        const keys = Object.keys(source);\n        const klen = keys.length;\n        let k = 0;\n        for(; k < klen; ++k){\n            target[keys[k]] = clone(source[keys[k]]);\n        }\n        return target;\n    }\n    return source;\n}\nfunction isValidKey(key) {\n    return [\n        '__proto__',\n        'prototype',\n        'constructor'\n    ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        // eslint-disable-next-line @typescript-eslint/no-use-before-define\n        merge(tval, sval, options);\n    } else {\n        target[key] = clone(sval);\n    }\n}\nfunction merge(target, source, options) {\n    const sources = isArray(source) ? source : [\n        source\n    ];\n    const ilen = sources.length;\n    if (!isObject(target)) {\n        return target;\n    }\n    options = options || {};\n    const merger = options.merger || _merger;\n    let current;\n    for(let i = 0; i < ilen; ++i){\n        current = sources[i];\n        if (!isObject(current)) {\n            continue;\n        }\n        const keys = Object.keys(current);\n        for(let k = 0, klen = keys.length; k < klen; ++k){\n            merger(keys[k], target, current, options);\n        }\n    }\n    return target;\n}\nfunction mergeIf(target, source) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    return merge(target, source, {\n        merger: _mergerIf\n    });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        mergeIf(tval, sval);\n    } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n        target[key] = clone(sval);\n    }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n    if (value !== undefined) {\n        console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n    }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n    // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n    '': (v)=>v,\n    // default resolvers\n    x: (o)=>o.x,\n    y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n    const parts = key.split('.');\n    const keys = [];\n    let tmp = '';\n    for (const part of parts){\n        tmp += part;\n        if (tmp.endsWith('\\\\')) {\n            tmp = tmp.slice(0, -1) + '.';\n        } else {\n            keys.push(tmp);\n            tmp = '';\n        }\n    }\n    return keys;\n}\nfunction _getKeyResolver(key) {\n    const keys = _splitKey(key);\n    return (obj)=>{\n        for (const k of keys){\n            if (k === '') {\n                break;\n            }\n            obj = obj && obj[k];\n        }\n        return obj;\n    };\n}\nfunction resolveObjectKey(obj, key) {\n    const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n    return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n    if (a.size !== b.size) {\n        return false;\n    }\n    for (const item of a){\n        if (!b.has(item)) {\n            return false;\n        }\n    }\n    return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n    return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n    return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n    const roundedRange = Math.round(range);\n    range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n    const niceRange = Math.pow(10, Math.floor(log10(range)));\n    const fraction = range / niceRange;\n    const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n    return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n    const result = [];\n    const sqrt = Math.sqrt(value);\n    let i;\n    for(i = 1; i < sqrt; i++){\n        if (value % i === 0) {\n            result.push(i);\n            result.push(value / i);\n        }\n    }\n    if (sqrt === (sqrt | 0)) {\n        result.push(sqrt);\n    }\n    result.sort((a, b)=>a - b).pop();\n    return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */ function isNonPrimitive(n) {\n    return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n    return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n    const rounded = Math.round(x);\n    return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n    let i, ilen, value;\n    for(i = 0, ilen = array.length; i < ilen; i++){\n        value = array[i][property];\n        if (!isNaN(value)) {\n            target.min = Math.min(target.min, value);\n            target.max = Math.max(target.max, value);\n        }\n    }\n}\nfunction toRadians(degrees) {\n    return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n    return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n    if (!isNumberFinite(x)) {\n        return;\n    }\n    let e = 1;\n    let p = 0;\n    while(Math.round(x * e) / e !== x){\n        e *= 10;\n        p++;\n    }\n    return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n    const distanceFromXCenter = anglePoint.x - centrePoint.x;\n    const distanceFromYCenter = anglePoint.y - centrePoint.y;\n    const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n    let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n    if (angle < -0.5 * PI) {\n        angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n    }\n    return {\n        angle,\n        distance: radialDistanceFromCenter\n    };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n    return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n    return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n    return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n    const a = _normalizeAngle(angle);\n    const s = _normalizeAngle(start);\n    const e = _normalizeAngle(end);\n    const angleToStart = _normalizeAngle(s - a);\n    const angleToEnd = _normalizeAngle(e - a);\n    const startToAngle = _normalizeAngle(a - s);\n    const endToAngle = _normalizeAngle(a - e);\n    return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n    return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n    return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n    return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n    cmp = cmp || ((index)=>table[index] < value);\n    let hi = table.length - 1;\n    let lo = 0;\n    let mid;\n    while(hi - lo > 1){\n        mid = lo + hi >> 1;\n        if (cmp(mid)) {\n            lo = mid;\n        } else {\n            hi = mid;\n        }\n    }\n    return {\n        lo,\n        hi\n    };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n        const ti = table[index][key];\n        return ti < value || ti === value && table[index + 1][key] === value;\n    } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n    let start = 0;\n    let end = values.length;\n    while(start < end && values[start] < min){\n        start++;\n    }\n    while(end > start && values[end - 1] > max){\n        end--;\n    }\n    return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n    'push',\n    'pop',\n    'shift',\n    'splice',\n    'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n    if (array._chartjs) {\n        array._chartjs.listeners.push(listener);\n        return;\n    }\n    Object.defineProperty(array, '_chartjs', {\n        configurable: true,\n        enumerable: false,\n        value: {\n            listeners: [\n                listener\n            ]\n        }\n    });\n    arrayEvents.forEach((key)=>{\n        const method = '_onData' + _capitalize(key);\n        const base = array[key];\n        Object.defineProperty(array, key, {\n            configurable: true,\n            enumerable: false,\n            value (...args) {\n                const res = base.apply(this, args);\n                array._chartjs.listeners.forEach((object)=>{\n                    if (typeof object[method] === 'function') {\n                        object[method](...args);\n                    }\n                });\n                return res;\n            }\n        });\n    });\n}\nfunction unlistenArrayEvents(array, listener) {\n    const stub = array._chartjs;\n    if (!stub) {\n        return;\n    }\n    const listeners = stub.listeners;\n    const index = listeners.indexOf(listener);\n    if (index !== -1) {\n        listeners.splice(index, 1);\n    }\n    if (listeners.length > 0) {\n        return;\n    }\n    arrayEvents.forEach((key)=>{\n        delete array[key];\n    });\n    delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n    const set = new Set(items);\n    if (set.size === items.length) {\n        return items;\n    }\n    return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n    return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n    if (typeof window === 'undefined') {\n        return function(callback) {\n            return callback();\n        };\n    }\n    return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n    let argsToUse = [];\n    let ticking = false;\n    return function(...args) {\n        // Save the args for use later\n        argsToUse = args;\n        if (!ticking) {\n            ticking = true;\n            requestAnimFrame.call(window, ()=>{\n                ticking = false;\n                fn.apply(thisArg, argsToUse);\n            });\n        }\n    };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n    let timeout;\n    return function(...args) {\n        if (delay) {\n            clearTimeout(timeout);\n            timeout = setTimeout(fn, delay, args);\n        } else {\n            fn.apply(this, args);\n        }\n        return delay;\n    };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n    const check = rtl ? 'left' : 'right';\n    return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n    const pointCount = points.length;\n    let start = 0;\n    let count = pointCount;\n    if (meta._sorted) {\n        const { iScale , vScale , _parsed  } = meta;\n        const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n        const axis = iScale.axis;\n        const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n        if (minDefined) {\n            start = Math.min(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n            if (spanGaps) {\n                const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                start -= Math.max(0, distanceToDefinedLo);\n            }\n            start = _limitValue(start, 0, pointCount - 1);\n        }\n        if (maxDefined) {\n            let end = Math.max(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n            if (spanGaps) {\n                const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                end += Math.max(0, distanceToDefinedHi);\n            }\n            count = _limitValue(end, start, pointCount) - start;\n        } else {\n            count = pointCount - start;\n        }\n    }\n    return {\n        start,\n        count\n    };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n    const { xScale , yScale , _scaleRanges  } = meta;\n    const newRanges = {\n        xmin: xScale.min,\n        xmax: xScale.max,\n        ymin: yScale.min,\n        ymax: yScale.max\n    };\n    if (!_scaleRanges) {\n        meta._scaleRanges = newRanges;\n        return true;\n    }\n    const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n    Object.assign(_scaleRanges, newRanges);\n    return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n    linear: (t)=>t,\n    easeInQuad: (t)=>t * t,\n    easeOutQuad: (t)=>-t * (t - 2),\n    easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n    easeInCubic: (t)=>t * t * t,\n    easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n    easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n    easeInQuart: (t)=>t * t * t * t,\n    easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n    easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n    easeInQuint: (t)=>t * t * t * t * t,\n    easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n    easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n    easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n    easeOutSine: (t)=>Math.sin(t * HALF_PI),\n    easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n    easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n    easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n    easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n    easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n    easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n    easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n    easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n    easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n    easeInOutElastic (t) {\n        const s = 0.1125;\n        const p = 0.45;\n        return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n    },\n    easeInBack (t) {\n        const s = 1.70158;\n        return t * t * ((s + 1) * t - s);\n    },\n    easeOutBack (t) {\n        const s = 1.70158;\n        return (t -= 1) * t * ((s + 1) * t + s) + 1;\n    },\n    easeInOutBack (t) {\n        let s = 1.70158;\n        if ((t /= 0.5) < 1) {\n            return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n        }\n        return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n    },\n    easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n    easeOutBounce (t) {\n        const m = 7.5625;\n        const d = 2.75;\n        if (t < 1 / d) {\n            return m * t * t;\n        }\n        if (t < 2 / d) {\n            return m * (t -= 1.5 / d) * t + 0.75;\n        }\n        if (t < 2.5 / d) {\n            return m * (t -= 2.25 / d) * t + 0.9375;\n        }\n        return m * (t -= 2.625 / d) * t + 0.984375;\n    },\n    easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n    if (value && typeof value === 'object') {\n        const type = value.toString();\n        return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n    }\n    return false;\n}\nfunction color(value) {\n    return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n    return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n    'x',\n    'y',\n    'borderWidth',\n    'radius',\n    'tension'\n];\nconst colors = [\n    'color',\n    'borderColor',\n    'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n    defaults.set('animation', {\n        delay: undefined,\n        duration: 1000,\n        easing: 'easeOutQuart',\n        fn: undefined,\n        from: undefined,\n        loop: undefined,\n        to: undefined,\n        type: undefined\n    });\n    defaults.describe('animation', {\n        _fallback: false,\n        _indexable: false,\n        _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n    });\n    defaults.set('animations', {\n        colors: {\n            type: 'color',\n            properties: colors\n        },\n        numbers: {\n            type: 'number',\n            properties: numbers\n        }\n    });\n    defaults.describe('animations', {\n        _fallback: 'animation'\n    });\n    defaults.set('transitions', {\n        active: {\n            animation: {\n                duration: 400\n            }\n        },\n        resize: {\n            animation: {\n                duration: 0\n            }\n        },\n        show: {\n            animations: {\n                colors: {\n                    from: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    duration: 0\n                }\n            }\n        },\n        hide: {\n            animations: {\n                colors: {\n                    to: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    easing: 'linear',\n                    fn: (v)=>v | 0\n                }\n            }\n        }\n    });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n    defaults.set('layout', {\n        autoPadding: true,\n        padding: {\n            top: 0,\n            right: 0,\n            bottom: 0,\n            left: 0\n        }\n    });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n    options = options || {};\n    const cacheKey = locale + JSON.stringify(options);\n    let formatter = intlCache.get(cacheKey);\n    if (!formatter) {\n        formatter = new Intl.NumberFormat(locale, options);\n        intlCache.set(cacheKey, formatter);\n    }\n    return formatter;\n}\nfunction formatNumber(num, locale, options) {\n    return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n        return isArray(value) ?  value : '' + value;\n    },\n numeric (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const locale = this.chart.options.locale;\n        let notation;\n        let delta = tickValue;\n        if (ticks.length > 1) {\n            const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n            if (maxTick < 1e-4 || maxTick > 1e+15) {\n                notation = 'scientific';\n            }\n            delta = calculateDelta(tickValue, ticks);\n        }\n        const logDelta = log10(Math.abs(delta));\n        const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n        const options = {\n            notation,\n            minimumFractionDigits: numDecimal,\n            maximumFractionDigits: numDecimal\n        };\n        Object.assign(options, this.options.ticks.format);\n        return formatNumber(tickValue, locale, options);\n    },\n logarithmic (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n        if ([\n            1,\n            2,\n            3,\n            5,\n            10,\n            15\n        ].includes(remain) || index > 0.8 * ticks.length) {\n            return formatters.numeric.call(this, tickValue, index, ticks);\n        }\n        return '';\n    }\n};\nfunction calculateDelta(tickValue, ticks) {\n    let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n    if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n        delta = tickValue - Math.floor(tickValue);\n    }\n    return delta;\n}\n var Ticks = {\n    formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n    defaults.set('scale', {\n        display: true,\n        offset: false,\n        reverse: false,\n        beginAtZero: false,\n bounds: 'ticks',\n        clip: true,\n grace: 0,\n        grid: {\n            display: true,\n            lineWidth: 1,\n            drawOnChartArea: true,\n            drawTicks: true,\n            tickLength: 8,\n            tickWidth: (_ctx, options)=>options.lineWidth,\n            tickColor: (_ctx, options)=>options.color,\n            offset: false\n        },\n        border: {\n            display: true,\n            dash: [],\n            dashOffset: 0.0,\n            width: 1\n        },\n        title: {\n            display: false,\n            text: '',\n            padding: {\n                top: 4,\n                bottom: 4\n            }\n        },\n        ticks: {\n            minRotation: 0,\n            maxRotation: 50,\n            mirror: false,\n            textStrokeWidth: 0,\n            textStrokeColor: '',\n            padding: 3,\n            display: true,\n            autoSkip: true,\n            autoSkipPadding: 3,\n            labelOffset: 0,\n            callback: Ticks.formatters.values,\n            minor: {},\n            major: {},\n            align: 'center',\n            crossAlign: 'near',\n            showLabelBackdrop: false,\n            backdropColor: 'rgba(255, 255, 255, 0.75)',\n            backdropPadding: 2\n        }\n    });\n    defaults.route('scale.ticks', 'color', '', 'color');\n    defaults.route('scale.grid', 'color', '', 'borderColor');\n    defaults.route('scale.border', 'color', '', 'borderColor');\n    defaults.route('scale.title', 'color', '', 'color');\n    defaults.describe('scale', {\n        _fallback: false,\n        _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n        _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n    });\n    defaults.describe('scales', {\n        _fallback: 'scale'\n    });\n    defaults.describe('scale.ticks', {\n        _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n        _indexable: (name)=>name !== 'backdropPadding'\n    });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n    if (!key) {\n        return node;\n    }\n    const keys = key.split('.');\n    for(let i = 0, n = keys.length; i < n; ++i){\n        const k = keys[i];\n        node = node[k] || (node[k] = Object.create(null));\n    }\n    return node;\n}\nfunction set(root, scope, values) {\n    if (typeof scope === 'string') {\n        return merge(getScope$1(root, scope), values);\n    }\n    return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n    constructor(_descriptors, _appliers){\n        this.animation = undefined;\n        this.backgroundColor = 'rgba(0,0,0,0.1)';\n        this.borderColor = 'rgba(0,0,0,0.1)';\n        this.color = '#666';\n        this.datasets = {};\n        this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n        this.elements = {};\n        this.events = [\n            'mousemove',\n            'mouseout',\n            'click',\n            'touchstart',\n            'touchmove'\n        ];\n        this.font = {\n            family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n            size: 12,\n            style: 'normal',\n            lineHeight: 1.2,\n            weight: null\n        };\n        this.hover = {};\n        this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n        this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n        this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n        this.indexAxis = 'x';\n        this.interaction = {\n            mode: 'nearest',\n            intersect: true,\n            includeInvisible: false\n        };\n        this.maintainAspectRatio = true;\n        this.onHover = null;\n        this.onClick = null;\n        this.parsing = true;\n        this.plugins = {};\n        this.responsive = true;\n        this.scale = undefined;\n        this.scales = {};\n        this.showLine = true;\n        this.drawActiveElementsOnTop = true;\n        this.describe(_descriptors);\n        this.apply(_appliers);\n    }\n set(scope, values) {\n        return set(this, scope, values);\n    }\n get(scope) {\n        return getScope$1(this, scope);\n    }\n describe(scope, values) {\n        return set(descriptors, scope, values);\n    }\n    override(scope, values) {\n        return set(overrides, scope, values);\n    }\n route(scope, name, targetScope, targetName) {\n        const scopeObject = getScope$1(this, scope);\n        const targetScopeObject = getScope$1(this, targetScope);\n        const privateName = '_' + name;\n        Object.defineProperties(scopeObject, {\n            [privateName]: {\n                value: scopeObject[name],\n                writable: true\n            },\n            [name]: {\n                enumerable: true,\n                get () {\n                    const local = this[privateName];\n                    const target = targetScopeObject[targetName];\n                    if (isObject(local)) {\n                        return Object.assign({}, target, local);\n                    }\n                    return valueOrDefault(local, target);\n                },\n                set (value) {\n                    this[privateName] = value;\n                }\n            }\n        });\n    }\n    apply(appliers) {\n        appliers.forEach((apply)=>apply(this));\n    }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n    _scriptable: (name)=>!name.startsWith('on'),\n    _indexable: (name)=>name !== 'events',\n    hover: {\n        _fallback: 'interaction'\n    },\n    interaction: {\n        _scriptable: false,\n        _indexable: false\n    }\n}, [\n    applyAnimationsDefaults,\n    applyLayoutsDefaults,\n    applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n    if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n        return null;\n    }\n    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n    let textWidth = data[string];\n    if (!textWidth) {\n        textWidth = data[string] = ctx.measureText(string).width;\n        gc.push(string);\n    }\n    if (textWidth > longest) {\n        longest = textWidth;\n    }\n    return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n    cache = cache || {};\n    let data = cache.data = cache.data || {};\n    let gc = cache.garbageCollect = cache.garbageCollect || [];\n    if (cache.font !== font) {\n        data = cache.data = {};\n        gc = cache.garbageCollect = [];\n        cache.font = font;\n    }\n    ctx.save();\n    ctx.font = font;\n    let longest = 0;\n    const ilen = arrayOfThings.length;\n    let i, j, jlen, thing, nestedThing;\n    for(i = 0; i < ilen; i++){\n        thing = arrayOfThings[i];\n        // Undefined strings and arrays should not be measured\n        if (thing !== undefined && thing !== null && !isArray(thing)) {\n            longest = _measureText(ctx, data, gc, longest, thing);\n        } else if (isArray(thing)) {\n            // if it is an array lets measure each element\n            // to do maybe simplify this function a bit so we can do this more recursively?\n            for(j = 0, jlen = thing.length; j < jlen; j++){\n                nestedThing = thing[j];\n                // Undefined strings and arrays should not be measured\n                if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n                    longest = _measureText(ctx, data, gc, longest, nestedThing);\n                }\n            }\n        }\n    }\n    ctx.restore();\n    const gcLen = gc.length / 2;\n    if (gcLen > arrayOfThings.length) {\n        for(i = 0; i < gcLen; i++){\n            delete data[gc[i]];\n        }\n        gc.splice(0, gcLen);\n    }\n    return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n    const devicePixelRatio = chart.currentDevicePixelRatio;\n    const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n    return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n    if (!ctx && !canvas) {\n        return;\n    }\n    ctx = ctx || canvas.getContext('2d');\n    ctx.save();\n    // canvas.width and canvas.height do not consider the canvas transform,\n    // while clearRect does\n    ctx.resetTransform();\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n    ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n    let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n    const style = options.pointStyle;\n    const rotation = options.rotation;\n    const radius = options.radius;\n    let rad = (rotation || 0) * RAD_PER_DEG;\n    if (style && typeof style === 'object') {\n        type = style.toString();\n        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n            ctx.save();\n            ctx.translate(x, y);\n            ctx.rotate(rad);\n            ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n            ctx.restore();\n            return;\n        }\n    }\n    if (isNaN(radius) || radius <= 0) {\n        return;\n    }\n    ctx.beginPath();\n    switch(style){\n        // Default includes circle\n        default:\n            if (w) {\n                ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n            } else {\n                ctx.arc(x, y, radius, 0, TAU);\n            }\n            ctx.closePath();\n            break;\n        case 'triangle':\n            width = w ? w / 2 : radius;\n            ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            ctx.closePath();\n            break;\n        case 'rectRounded':\n            // NOTE: the rounded rect implementation changed to use `arc` instead of\n            // `quadraticCurveTo` since it generates better results when rect is\n            // almost a circle. 0.516 (instead of 0.5) produces results with visually\n            // closer proportion to the previous impl and it is inscribed in the\n            // circle with `radius`. For more details, see the following PRs:\n            // https://github.com/chartjs/Chart.js/issues/5597\n            // https://github.com/chartjs/Chart.js/issues/5858\n            cornerRadius = radius * 0.516;\n            size = radius - cornerRadius;\n            xOffset = Math.cos(rad + QUARTER_PI) * size;\n            xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            yOffset = Math.sin(rad + QUARTER_PI) * size;\n            yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n            ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n            ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n            ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n            ctx.closePath();\n            break;\n        case 'rect':\n            if (!rotation) {\n                size = Math.SQRT1_2 * radius;\n                width = w ? w / 2 : size;\n                ctx.rect(x - width, y - size, 2 * width, 2 * size);\n                break;\n            }\n            rad += QUARTER_PI;\n        /* falls through */ case 'rectRot':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            ctx.closePath();\n            break;\n        case 'crossRot':\n            rad += QUARTER_PI;\n        /* falls through */ case 'cross':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'star':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            rad += QUARTER_PI;\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'line':\n            xOffset = w ? w / 2 : Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            ctx.moveTo(x - xOffset, y - yOffset);\n            ctx.lineTo(x + xOffset, y + yOffset);\n            break;\n        case 'dash':\n            ctx.moveTo(x, y);\n            ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n            break;\n        case false:\n            ctx.closePath();\n            break;\n    }\n    ctx.fill();\n    if (options.borderWidth > 0) {\n        ctx.stroke();\n    }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n    margin = margin || 0.5; // margin - default is to match rounded decimals\n    return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n    ctx.save();\n    ctx.beginPath();\n    ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n    ctx.clip();\n}\nfunction unclipArea(ctx) {\n    ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    if (mode === 'middle') {\n        const midpoint = (previous.x + target.x) / 2.0;\n        ctx.lineTo(midpoint, previous.y);\n        ctx.lineTo(midpoint, target.y);\n    } else if (mode === 'after' !== !!flip) {\n        ctx.lineTo(previous.x, target.y);\n    } else {\n        ctx.lineTo(target.x, previous.y);\n    }\n    ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n    if (opts.translation) {\n        ctx.translate(opts.translation[0], opts.translation[1]);\n    }\n    if (!isNullOrUndef(opts.rotation)) {\n        ctx.rotate(opts.rotation);\n    }\n    if (opts.color) {\n        ctx.fillStyle = opts.color;\n    }\n    if (opts.textAlign) {\n        ctx.textAlign = opts.textAlign;\n    }\n    if (opts.textBaseline) {\n        ctx.textBaseline = opts.textBaseline;\n    }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n    if (opts.strikethrough || opts.underline) {\n        /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */ const metrics = ctx.measureText(line);\n        const left = x - metrics.actualBoundingBoxLeft;\n        const right = x + metrics.actualBoundingBoxRight;\n        const top = y - metrics.actualBoundingBoxAscent;\n        const bottom = y + metrics.actualBoundingBoxDescent;\n        const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n        ctx.strokeStyle = ctx.fillStyle;\n        ctx.beginPath();\n        ctx.lineWidth = opts.decorationWidth || 2;\n        ctx.moveTo(left, yDecoration);\n        ctx.lineTo(right, yDecoration);\n        ctx.stroke();\n    }\n}\nfunction drawBackdrop(ctx, opts) {\n    const oldColor = ctx.fillStyle;\n    ctx.fillStyle = opts.color;\n    ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n    ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n    const lines = isArray(text) ? text : [\n        text\n    ];\n    const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n    let i, line;\n    ctx.save();\n    ctx.font = font.string;\n    setRenderOpts(ctx, opts);\n    for(i = 0; i < lines.length; ++i){\n        line = lines[i];\n        if (opts.backdrop) {\n            drawBackdrop(ctx, opts.backdrop);\n        }\n        if (stroke) {\n            if (opts.strokeColor) {\n                ctx.strokeStyle = opts.strokeColor;\n            }\n            if (!isNullOrUndef(opts.strokeWidth)) {\n                ctx.lineWidth = opts.strokeWidth;\n            }\n            ctx.strokeText(line, x, y, opts.maxWidth);\n        }\n        ctx.fillText(line, x, y, opts.maxWidth);\n        decorateText(ctx, x, y, line, opts);\n        y += Number(font.lineHeight);\n    }\n    ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n    const { x , y , w , h , radius  } = rect;\n    // top left arc\n    ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n    // line from top left to bottom left\n    ctx.lineTo(x, y + h - radius.bottomLeft);\n    // bottom left arc\n    ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n    // line from bottom left to bottom right\n    ctx.lineTo(x + w - radius.bottomRight, y + h);\n    // bottom right arc\n    ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n    // line from bottom right to top right\n    ctx.lineTo(x + w, y + radius.topRight);\n    // top right arc\n    ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n    // line from top right to top left\n    ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n    const matches = ('' + value).match(LINE_HEIGHT);\n    if (!matches || matches[1] === 'normal') {\n        return size * 1.2;\n    }\n    value = +matches[2];\n    switch(matches[3]){\n        case 'px':\n            return value;\n        case '%':\n            value /= 100;\n            break;\n    }\n    return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n    const ret = {};\n    const objProps = isObject(props);\n    const keys = objProps ? Object.keys(props) : props;\n    const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n    for (const prop of keys){\n        ret[prop] = numberOrZero(read(prop));\n    }\n    return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n    return _readValueToProps(value, {\n        top: 'y',\n        right: 'x',\n        bottom: 'y',\n        left: 'x'\n    });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n    return _readValueToProps(value, [\n        'topLeft',\n        'topRight',\n        'bottomLeft',\n        'bottomRight'\n    ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n    const obj = toTRBL(value);\n    obj.width = obj.left + obj.right;\n    obj.height = obj.top + obj.bottom;\n    return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n    options = options || {};\n    fallback = fallback || defaults.font;\n    let size = valueOrDefault(options.size, fallback.size);\n    if (typeof size === 'string') {\n        size = parseInt(size, 10);\n    }\n    let style = valueOrDefault(options.style, fallback.style);\n    if (style && !('' + style).match(FONT_STYLE)) {\n        console.warn('Invalid font style specified: \"' + style + '\"');\n        style = undefined;\n    }\n    const font = {\n        family: valueOrDefault(options.family, fallback.family),\n        lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n        size,\n        style,\n        weight: valueOrDefault(options.weight, fallback.weight),\n        string: ''\n    };\n    font.string = toFontString(font);\n    return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n    let cacheable = true;\n    let i, ilen, value;\n    for(i = 0, ilen = inputs.length; i < ilen; ++i){\n        value = inputs[i];\n        if (value === undefined) {\n            continue;\n        }\n        if (context !== undefined && typeof value === 'function') {\n            value = value(context);\n            cacheable = false;\n        }\n        if (index !== undefined && isArray(value)) {\n            value = value[index % value.length];\n            cacheable = false;\n        }\n        if (value !== undefined) {\n            if (info && !cacheable) {\n                info.cacheable = false;\n            }\n            return value;\n        }\n    }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n    const { min , max  } = minmax;\n    const change = toDimension(grace, (max - min) / 2);\n    const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n    return {\n        min: keepZero(min, -Math.abs(change)),\n        max: keepZero(max, change)\n    };\n}\nfunction createContext(parentContext, context) {\n    return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n    ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n    const finalRootScopes = rootScopes || scopes;\n    if (typeof fallback === 'undefined') {\n        fallback = _resolve('_fallback', scopes);\n    }\n    const cache = {\n        [Symbol.toStringTag]: 'Object',\n        _cacheable: true,\n        _scopes: scopes,\n        _rootScopes: finalRootScopes,\n        _fallback: fallback,\n        _getTarget: getTarget,\n        override: (scope)=>_createResolver([\n                scope,\n                ...scopes\n            ], prefixes, finalRootScopes, fallback)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete target._keys; // remove cached keys\n            delete scopes[0][prop]; // remove from top level scope\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop) {\n            return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(scopes[0]);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return getKeysFromAllScopes(target).includes(prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys (target) {\n            return getKeysFromAllScopes(target);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            const storage = target._storage || (target._storage = getTarget());\n            target[prop] = storage[prop] = value; // set to top level scope + cache\n            delete target._keys; // remove cached keys\n            return true;\n        }\n    });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n    const cache = {\n        _cacheable: false,\n        _proxy: proxy,\n        _context: context,\n        _subProxy: subProxy,\n        _stack: new Set(),\n        _descriptors: _descriptors(proxy, descriptorDefaults),\n        setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n        override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete proxy[prop]; // remove from proxy\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop, receiver) {\n            return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n                enumerable: true,\n                configurable: true\n            } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(proxy);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return Reflect.has(proxy, prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys () {\n            return Reflect.ownKeys(proxy);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            proxy[prop] = value; // set to proxy\n            delete target[prop]; // remove from cache\n            return true;\n        }\n    });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n    scriptable: true,\n    indexable: true\n}) {\n    const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys  } = proxy;\n    return {\n        allKeys: _allKeys,\n        scriptable: _scriptable,\n        indexable: _indexable,\n        isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n        isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n    };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n    if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n        return target[prop];\n    }\n    const value = resolve();\n    // cache the resolved value\n    target[prop] = value;\n    return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    let value = _proxy[prop]; // resolve from proxy\n    // resolve with context\n    if (isFunction(value) && descriptors.isScriptable(prop)) {\n        value = _resolveScriptable(prop, value, target, receiver);\n    }\n    if (isArray(value) && value.length) {\n        value = _resolveArray(prop, value, target, descriptors.isIndexable);\n    }\n    if (needsSubResolver(prop, value)) {\n        // if the resolved value is an object, create a sub resolver for it\n        value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n    }\n    return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n    const { _proxy , _context , _subProxy , _stack  } = target;\n    if (_stack.has(prop)) {\n        throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n    }\n    _stack.add(prop);\n    let value = getValue(_context, _subProxy || receiver);\n    _stack.delete(prop);\n    if (needsSubResolver(prop, value)) {\n        // When scriptable option returns an object, create a resolver on that.\n        value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n    }\n    return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n        return value[_context.index % value.length];\n    } else if (isObject(value[0])) {\n        // Array of objects, return array or resolvers\n        const arr = value;\n        const scopes = _proxy._scopes.filter((s)=>s !== arr);\n        value = [];\n        for (const item of arr){\n            const resolver = createSubResolver(scopes, _proxy, prop, item);\n            value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n        }\n    }\n    return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n    return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n    for (const parent of parentScopes){\n        const scope = getScope(key, parent);\n        if (scope) {\n            set.add(scope);\n            const fallback = resolveFallback(scope._fallback, key, value);\n            if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n                // When we reach the descriptor that defines a new _fallback, return that.\n                // The fallback will resume to that new scope.\n                return fallback;\n            }\n        } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n            // Fallback to `false` results to `false`, when falling back to different key.\n            // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n            return null;\n        }\n    }\n    return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n    const rootScopes = resolver._rootScopes;\n    const fallback = resolveFallback(resolver._fallback, prop, value);\n    const allScopes = [\n        ...parentScopes,\n        ...rootScopes\n    ];\n    const set = new Set();\n    set.add(value);\n    let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n    if (key === null) {\n        return false;\n    }\n    if (typeof fallback !== 'undefined' && fallback !== prop) {\n        key = addScopesFromKey(set, allScopes, fallback, key, value);\n        if (key === null) {\n            return false;\n        }\n    }\n    return _createResolver(Array.from(set), [\n        ''\n    ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n    while(key){\n        key = addScopes(set, allScopes, key, fallback, item);\n    }\n    return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n    const parent = resolver._getTarget();\n    if (!(prop in parent)) {\n        parent[prop] = {};\n    }\n    const target = parent[prop];\n    if (isArray(target) && isObject(value)) {\n        // For array of objects, the object is used to store updated values\n        return value;\n    }\n    return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n    let value;\n    for (const prefix of prefixes){\n        value = _resolve(readKey(prefix, prop), scopes);\n        if (typeof value !== 'undefined') {\n            return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n        }\n    }\n}\nfunction _resolve(key, scopes) {\n    for (const scope of scopes){\n        if (!scope) {\n            continue;\n        }\n        const value = scope[key];\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n}\nfunction getKeysFromAllScopes(target) {\n    let keys = target._keys;\n    if (!keys) {\n        keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n    }\n    return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n    const set = new Set();\n    for (const scope of scopes){\n        for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n            set.add(key);\n        }\n    }\n    return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n    const { iScale  } = meta;\n    const { key ='r'  } = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for(i = 0, ilen = count; i < ilen; ++i){\n        index = i + start;\n        item = data[index];\n        parsed[i] = {\n            r: iScale.parse(resolveObjectKey(item, key), index)\n        };\n    }\n    return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n    // Props to Rob Spencer at scaled innovation for his post on splining between points\n    // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n    // This function must also respect \"skipped\" points\n    const previous = firstPoint.skip ? middlePoint : firstPoint;\n    const current = middlePoint;\n    const next = afterPoint.skip ? middlePoint : afterPoint;\n    const d01 = distanceBetweenPoints(current, previous);\n    const d12 = distanceBetweenPoints(next, current);\n    let s01 = d01 / (d01 + d12);\n    let s12 = d12 / (d01 + d12);\n    // If all points are the same, s01 & s02 will be inf\n    s01 = isNaN(s01) ? 0 : s01;\n    s12 = isNaN(s12) ? 0 : s12;\n    const fa = t * s01; // scaling factor for triangle Ta\n    const fb = t * s12;\n    return {\n        previous: {\n            x: current.x - fa * (next.x - previous.x),\n            y: current.y - fa * (next.y - previous.y)\n        },\n        next: {\n            x: current.x + fb * (next.x - previous.x),\n            y: current.y + fb * (next.y - previous.y)\n        }\n    };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n    const pointsLen = points.length;\n    let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen - 1; ++i){\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent || !pointAfter) {\n            continue;\n        }\n        if (almostEquals(deltaK[i], 0, EPSILON)) {\n            mK[i] = mK[i + 1] = 0;\n            continue;\n        }\n        alphaK = mK[i] / deltaK[i];\n        betaK = mK[i + 1] / deltaK[i];\n        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n        if (squaredMagnitude <= 9) {\n            continue;\n        }\n        tauK = 3 / Math.sqrt(squaredMagnitude);\n        mK[i] = alphaK * tauK * deltaK[i];\n        mK[i + 1] = betaK * tauK * deltaK[i];\n    }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    let delta, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        const iPixel = pointCurrent[indexAxis];\n        const vPixel = pointCurrent[valueAxis];\n        if (pointBefore) {\n            delta = (iPixel - pointBefore[indexAxis]) / 3;\n            pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n            pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n        }\n        if (pointAfter) {\n            delta = (pointAfter[indexAxis] - iPixel) / 3;\n            pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n            pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n        }\n    }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    const deltaK = Array(pointsLen).fill(0);\n    const mK = Array(pointsLen);\n    // Calculate slopes (deltaK) and initialize tangents (mK)\n    let i, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        if (pointAfter) {\n            const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n            // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n            deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n        }\n        mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n    }\n    monotoneAdjust(points, deltaK, mK);\n    monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n    return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n    let i, ilen, point, inArea, inAreaPrev;\n    let inAreaNext = _isPointInArea(points[0], area);\n    for(i = 0, ilen = points.length; i < ilen; ++i){\n        inAreaPrev = inArea;\n        inArea = inAreaNext;\n        inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n        if (!inArea) {\n            continue;\n        }\n        point = points[i];\n        if (inAreaPrev) {\n            point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n            point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n        }\n        if (inAreaNext) {\n            point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n            point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n        }\n    }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n    let i, ilen, point, controlPoints;\n    // Only consider points that are drawn in case the spanGaps option is used\n    if (options.spanGaps) {\n        points = points.filter((pt)=>!pt.skip);\n    }\n    if (options.cubicInterpolationMode === 'monotone') {\n        splineCurveMonotone(points, indexAxis);\n    } else {\n        let prev = loop ? points[points.length - 1] : points[0];\n        for(i = 0, ilen = points.length; i < ilen; ++i){\n            point = points[i];\n            controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n            point.cp1x = controlPoints.previous.x;\n            point.cp1y = controlPoints.previous.y;\n            point.cp2x = controlPoints.next.x;\n            point.cp2y = controlPoints.next.y;\n            prev = point;\n        }\n    }\n    if (options.capBezierPoints) {\n        capBezierPoints(points, area);\n    }\n}\n\n/**\n * @private\n */ function _isDomSupported() {\n    return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n    let parent = domNode.parentNode;\n    if (parent && parent.toString() === '[object ShadowRoot]') {\n        parent = parent.host;\n    }\n    return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n    let valueInPixels;\n    if (typeof styleValue === 'string') {\n        valueInPixels = parseInt(styleValue, 10);\n        if (styleValue.indexOf('%') !== -1) {\n            // percentage * size in dimension\n            valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n        }\n    } else {\n        valueInPixels = styleValue;\n    }\n    return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n    return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n    'top',\n    'right',\n    'bottom',\n    'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n    const result = {};\n    suffix = suffix ? '-' + suffix : '';\n    for(let i = 0; i < 4; i++){\n        const pos = positions[i];\n        result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n    }\n    result.width = result.left + result.right;\n    result.height = result.top + result.bottom;\n    return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n    const touches = e.touches;\n    const source = touches && touches.length ? touches[0] : e;\n    const { offsetX , offsetY  } = source;\n    let box = false;\n    let x, y;\n    if (useOffsetPos(offsetX, offsetY, e.target)) {\n        x = offsetX;\n        y = offsetY;\n    } else {\n        const rect = canvas.getBoundingClientRect();\n        x = source.clientX - rect.left;\n        y = source.clientY - rect.top;\n        box = true;\n    }\n    return {\n        x,\n        y,\n        box\n    };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n    if ('native' in event) {\n        return event;\n    }\n    const { canvas , currentDevicePixelRatio  } = chart;\n    const style = getComputedStyle(canvas);\n    const borderBox = style.boxSizing === 'border-box';\n    const paddings = getPositionedStyle(style, 'padding');\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const { x , y , box  } = getCanvasPosition(event, canvas);\n    const xOffset = paddings.left + (box && borders.left);\n    const yOffset = paddings.top + (box && borders.top);\n    let { width , height  } = chart;\n    if (borderBox) {\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    return {\n        x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n        y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n    };\n}\nfunction getContainerSize(canvas, width, height) {\n    let maxWidth, maxHeight;\n    if (width === undefined || height === undefined) {\n        const container = canvas && _getParentNode(canvas);\n        if (!container) {\n            width = canvas.clientWidth;\n            height = canvas.clientHeight;\n        } else {\n            const rect = container.getBoundingClientRect(); // this is the border box of the container\n            const containerStyle = getComputedStyle(container);\n            const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n            const containerPadding = getPositionedStyle(containerStyle, 'padding');\n            width = rect.width - containerPadding.width - containerBorder.width;\n            height = rect.height - containerPadding.height - containerBorder.height;\n            maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n            maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n        }\n    }\n    return {\n        width,\n        height,\n        maxWidth: maxWidth || INFINITY,\n        maxHeight: maxHeight || INFINITY\n    };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n    const style = getComputedStyle(canvas);\n    const margins = getPositionedStyle(style, 'margin');\n    const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n    const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n    const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n    let { width , height  } = containerSize;\n    if (style.boxSizing === 'content-box') {\n        const borders = getPositionedStyle(style, 'border', 'width');\n        const paddings = getPositionedStyle(style, 'padding');\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    width = Math.max(0, width - margins.width);\n    height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n    width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n    height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n    if (width && !height) {\n        // https://github.com/chartjs/Chart.js/issues/4659\n        // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n        height = round1(width / 2);\n    }\n    const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n    if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n        height = containerSize.height;\n        width = round1(Math.floor(height * aspectRatio));\n    }\n    return {\n        width,\n        height\n    };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n    const pixelRatio = forceRatio || 1;\n    const deviceHeight = Math.floor(chart.height * pixelRatio);\n    const deviceWidth = Math.floor(chart.width * pixelRatio);\n    chart.height = Math.floor(chart.height);\n    chart.width = Math.floor(chart.width);\n    const canvas = chart.canvas;\n    // If no style has been set on the canvas, the render size is used as display size,\n    // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n    // See https://github.com/chartjs/Chart.js/issues/3575\n    if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n        canvas.style.height = `${chart.height}px`;\n        canvas.style.width = `${chart.width}px`;\n    }\n    if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n        chart.currentDevicePixelRatio = pixelRatio;\n        canvas.height = deviceHeight;\n        canvas.width = deviceWidth;\n        chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n        return true;\n    }\n    return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n    let passiveSupported = false;\n    try {\n        const options = {\n            get passive () {\n                passiveSupported = true;\n                return false;\n            }\n        };\n        if (_isDomSupported()) {\n            window.addEventListener('test', null, options);\n            window.removeEventListener('test', null, options);\n        }\n    } catch (e) {\n    // continue regardless of error\n    }\n    return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n    const value = getStyle(element, property);\n    const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n    return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: p1.y + t * (p2.y - p1.y)\n    };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n    };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n    const cp1 = {\n        x: p1.cp2x,\n        y: p1.cp2y\n    };\n    const cp2 = {\n        x: p2.cp1x,\n        y: p2.cp1y\n    };\n    const a = _pointInLine(p1, cp1, t);\n    const b = _pointInLine(cp1, cp2, t);\n    const c = _pointInLine(cp2, p2, t);\n    const d = _pointInLine(a, b, t);\n    const e = _pointInLine(b, c, t);\n    return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n    return {\n        x (x) {\n            return rectX + rectX + width - x;\n        },\n        setWidth (w) {\n            width = w;\n        },\n        textAlign (align) {\n            if (align === 'center') {\n                return align;\n            }\n            return align === 'right' ? 'left' : 'right';\n        },\n        xPlus (x, value) {\n            return x - value;\n        },\n        leftForLtr (x, itemWidth) {\n            return x - itemWidth;\n        }\n    };\n};\nconst getLeftToRightAdapter = function() {\n    return {\n        x (x) {\n            return x;\n        },\n        setWidth (w) {},\n        textAlign (align) {\n            return align;\n        },\n        xPlus (x, value) {\n            return x + value;\n        },\n        leftForLtr (x, _itemWidth) {\n            return x;\n        }\n    };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n    return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n    let style, original;\n    if (direction === 'ltr' || direction === 'rtl') {\n        style = ctx.canvas.style;\n        original = [\n            style.getPropertyValue('direction'),\n            style.getPropertyPriority('direction')\n        ];\n        style.setProperty('direction', direction, 'important');\n        ctx.prevTextDirection = original;\n    }\n}\nfunction restoreTextDirection(ctx, original) {\n    if (original !== undefined) {\n        delete ctx.prevTextDirection;\n        ctx.canvas.style.setProperty('direction', original[0], original[1]);\n    }\n}\n\nfunction propertyFn(property) {\n    if (property === 'angle') {\n        return {\n            between: _angleBetween,\n            compare: _angleDiff,\n            normalize: _normalizeAngle\n        };\n    }\n    return {\n        between: _isBetween,\n        compare: (a, b)=>a - b,\n        normalize: (x)=>x\n    };\n}\nfunction normalizeSegment({ start , end , count , loop , style  }) {\n    return {\n        start: start % count,\n        end: end % count,\n        loop: loop && (end - start + 1) % count === 0,\n        style\n    };\n}\nfunction getSegment(segment, points, bounds) {\n    const { property , start: startBound , end: endBound  } = bounds;\n    const { between , normalize  } = propertyFn(property);\n    const count = points.length;\n    let { start , end , loop  } = segment;\n    let i, ilen;\n    if (loop) {\n        start += count;\n        end += count;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n                break;\n            }\n            start--;\n            end--;\n        }\n        start %= count;\n        end %= count;\n    }\n    if (end < start) {\n        end += count;\n    }\n    return {\n        start,\n        end,\n        loop,\n        style: segment.style\n    };\n}\n function _boundSegment(segment, points, bounds) {\n    if (!bounds) {\n        return [\n            segment\n        ];\n    }\n    const { property , start: startBound , end: endBound  } = bounds;\n    const count = points.length;\n    const { compare , between , normalize  } = propertyFn(property);\n    const { start , end , loop , style  } = getSegment(segment, points, bounds);\n    const result = [];\n    let inside = false;\n    let subStart = null;\n    let value, point, prevValue;\n    const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n    const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n    const shouldStart = ()=>inside || startIsBefore();\n    const shouldStop = ()=>!inside || endIsBefore();\n    for(let i = start, prev = start; i <= end; ++i){\n        point = points[i % count];\n        if (point.skip) {\n            continue;\n        }\n        value = normalize(point[property]);\n        if (value === prevValue) {\n            continue;\n        }\n        inside = between(value, startBound, endBound);\n        if (subStart === null && shouldStart()) {\n            subStart = compare(value, startBound) === 0 ? i : prev;\n        }\n        if (subStart !== null && shouldStop()) {\n            result.push(normalizeSegment({\n                start: subStart,\n                end: i,\n                loop,\n                count,\n                style\n            }));\n            subStart = null;\n        }\n        prev = i;\n        prevValue = value;\n    }\n    if (subStart !== null) {\n        result.push(normalizeSegment({\n            start: subStart,\n            end,\n            loop,\n            count,\n            style\n        }));\n    }\n    return result;\n}\n function _boundSegments(line, bounds) {\n    const result = [];\n    const segments = line.segments;\n    for(let i = 0; i < segments.length; i++){\n        const sub = _boundSegment(segments[i], line.points, bounds);\n        if (sub.length) {\n            result.push(...sub);\n        }\n    }\n    return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n    let start = 0;\n    let end = count - 1;\n    if (loop && !spanGaps) {\n        while(start < count && !points[start].skip){\n            start++;\n        }\n    }\n    while(start < count && points[start].skip){\n        start++;\n    }\n    start %= count;\n    if (loop) {\n        end += start;\n    }\n    while(end > start && points[end % count].skip){\n        end--;\n    }\n    end %= count;\n    return {\n        start,\n        end\n    };\n}\n function solidSegments(points, start, max, loop) {\n    const count = points.length;\n    const result = [];\n    let last = start;\n    let prev = points[start];\n    let end;\n    for(end = start + 1; end <= max; ++end){\n        const cur = points[end % count];\n        if (cur.skip || cur.stop) {\n            if (!prev.skip) {\n                loop = false;\n                result.push({\n                    start: start % count,\n                    end: (end - 1) % count,\n                    loop\n                });\n                start = last = cur.stop ? end : null;\n            }\n        } else {\n            last = end;\n            if (prev.skip) {\n                start = end;\n            }\n        }\n        prev = cur;\n    }\n    if (last !== null) {\n        result.push({\n            start: start % count,\n            end: last % count,\n            loop\n        });\n    }\n    return result;\n}\n function _computeSegments(line, segmentOptions) {\n    const points = line.points;\n    const spanGaps = line.options.spanGaps;\n    const count = points.length;\n    if (!count) {\n        return [];\n    }\n    const loop = !!line._loop;\n    const { start , end  } = findStartAndEnd(points, count, loop, spanGaps);\n    if (spanGaps === true) {\n        return splitByStyles(line, [\n            {\n                start,\n                end,\n                loop\n            }\n        ], points, segmentOptions);\n    }\n    const max = end < start ? end + count : end;\n    const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n    return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n    if (!segmentOptions || !segmentOptions.setContext || !points) {\n        return segments;\n    }\n    return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n    const chartContext = line._chart.getContext();\n    const baseStyle = readStyle(line.options);\n    const { _datasetIndex: datasetIndex , options: { spanGaps  }  } = line;\n    const count = points.length;\n    const result = [];\n    let prevStyle = baseStyle;\n    let start = segments[0].start;\n    let i = start;\n    function addStyle(s, e, l, st) {\n        const dir = spanGaps ? -1 : 1;\n        if (s === e) {\n            return;\n        }\n        s += count;\n        while(points[s % count].skip){\n            s -= dir;\n        }\n        while(points[e % count].skip){\n            e += dir;\n        }\n        if (s % count !== e % count) {\n            result.push({\n                start: s % count,\n                end: e % count,\n                loop: l,\n                style: st\n            });\n            prevStyle = st;\n            start = e % count;\n        }\n    }\n    for (const segment of segments){\n        start = spanGaps ? start : segment.start;\n        let prev = points[start % count];\n        let style;\n        for(i = start + 1; i <= segment.end; i++){\n            const pt = points[i % count];\n            style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n                type: 'segment',\n                p0: prev,\n                p1: pt,\n                p0DataIndex: (i - 1) % count,\n                p1DataIndex: i % count,\n                datasetIndex\n            })));\n            if (styleChanged(style, prevStyle)) {\n                addStyle(start, i - 1, segment.loop, prevStyle);\n            }\n            prev = pt;\n            prevStyle = style;\n        }\n        if (start < i - 1) {\n            addStyle(start, i - 1, segment.loop, prevStyle);\n        }\n    }\n    return result;\n}\nfunction readStyle(options) {\n    return {\n        backgroundColor: options.backgroundColor,\n        borderCapStyle: options.borderCapStyle,\n        borderDash: options.borderDash,\n        borderDashOffset: options.borderDashOffset,\n        borderJoinStyle: options.borderJoinStyle,\n        borderWidth: options.borderWidth,\n        borderColor: options.borderColor\n    };\n}\nfunction styleChanged(style, prevStyle) {\n    if (!prevStyle) {\n        return false;\n    }\n    const cache = [];\n    const replacer = function(key, value) {\n        if (!isPatternOrGradient(value)) {\n            return value;\n        }\n        if (!cache.includes(value)) {\n            cache.push(value);\n        }\n        return cache.indexOf(value);\n    };\n    return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.4.8\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nclass Animator {\n    constructor(){\n        this._request = null;\n        this._charts = new Map();\n        this._running = false;\n        this._lastDate = undefined;\n    }\n _notify(chart, anims, date, type) {\n        const callbacks = anims.listeners[type];\n        const numSteps = anims.duration;\n        callbacks.forEach((fn)=>fn({\n                chart,\n                initial: anims.initial,\n                numSteps,\n                currentStep: Math.min(date - anims.start, numSteps)\n            }));\n    }\n _refresh() {\n        if (this._request) {\n            return;\n        }\n        this._running = true;\n        this._request = requestAnimFrame.call(window, ()=>{\n            this._update();\n            this._request = null;\n            if (this._running) {\n                this._refresh();\n            }\n        });\n    }\n _update(date = Date.now()) {\n        let remaining = 0;\n        this._charts.forEach((anims, chart)=>{\n            if (!anims.running || !anims.items.length) {\n                return;\n            }\n            const items = anims.items;\n            let i = items.length - 1;\n            let draw = false;\n            let item;\n            for(; i >= 0; --i){\n                item = items[i];\n                if (item._active) {\n                    if (item._total > anims.duration) {\n                        anims.duration = item._total;\n                    }\n                    item.tick(date);\n                    draw = true;\n                } else {\n                    items[i] = items[items.length - 1];\n                    items.pop();\n                }\n            }\n            if (draw) {\n                chart.draw();\n                this._notify(chart, anims, date, 'progress');\n            }\n            if (!items.length) {\n                anims.running = false;\n                this._notify(chart, anims, date, 'complete');\n                anims.initial = false;\n            }\n            remaining += items.length;\n        });\n        this._lastDate = date;\n        if (remaining === 0) {\n            this._running = false;\n        }\n    }\n _getAnims(chart) {\n        const charts = this._charts;\n        let anims = charts.get(chart);\n        if (!anims) {\n            anims = {\n                running: false,\n                initial: true,\n                items: [],\n                listeners: {\n                    complete: [],\n                    progress: []\n                }\n            };\n            charts.set(chart, anims);\n        }\n        return anims;\n    }\n listen(chart, event, cb) {\n        this._getAnims(chart).listeners[event].push(cb);\n    }\n add(chart, items) {\n        if (!items || !items.length) {\n            return;\n        }\n        this._getAnims(chart).items.push(...items);\n    }\n has(chart) {\n        return this._getAnims(chart).items.length > 0;\n    }\n start(chart) {\n        const anims = this._charts.get(chart);\n        if (!anims) {\n            return;\n        }\n        anims.running = true;\n        anims.start = Date.now();\n        anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n        this._refresh();\n    }\n    running(chart) {\n        if (!this._running) {\n            return false;\n        }\n        const anims = this._charts.get(chart);\n        if (!anims || !anims.running || !anims.items.length) {\n            return false;\n        }\n        return true;\n    }\n stop(chart) {\n        const anims = this._charts.get(chart);\n        if (!anims || !anims.items.length) {\n            return;\n        }\n        const items = anims.items;\n        let i = items.length - 1;\n        for(; i >= 0; --i){\n            items[i].cancel();\n        }\n        anims.items = [];\n        this._notify(chart, anims, Date.now(), 'complete');\n    }\n remove(chart) {\n        return this._charts.delete(chart);\n    }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n    boolean (from, to, factor) {\n        return factor > 0.5 ? to : from;\n    },\n color (from, to, factor) {\n        const c0 = color(from || transparent);\n        const c1 = c0.valid && color(to || transparent);\n        return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n    },\n    number (from, to, factor) {\n        return from + (to - from) * factor;\n    }\n};\nclass Animation {\n    constructor(cfg, target, prop, to){\n        const currentValue = target[prop];\n        to = resolve([\n            cfg.to,\n            to,\n            currentValue,\n            cfg.from\n        ]);\n        const from = resolve([\n            cfg.from,\n            currentValue,\n            to\n        ]);\n        this._active = true;\n        this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n        this._easing = effects[cfg.easing] || effects.linear;\n        this._start = Math.floor(Date.now() + (cfg.delay || 0));\n        this._duration = this._total = Math.floor(cfg.duration);\n        this._loop = !!cfg.loop;\n        this._target = target;\n        this._prop = prop;\n        this._from = from;\n        this._to = to;\n        this._promises = undefined;\n    }\n    active() {\n        return this._active;\n    }\n    update(cfg, to, date) {\n        if (this._active) {\n            this._notify(false);\n            const currentValue = this._target[this._prop];\n            const elapsed = date - this._start;\n            const remain = this._duration - elapsed;\n            this._start = date;\n            this._duration = Math.floor(Math.max(remain, cfg.duration));\n            this._total += elapsed;\n            this._loop = !!cfg.loop;\n            this._to = resolve([\n                cfg.to,\n                to,\n                currentValue,\n                cfg.from\n            ]);\n            this._from = resolve([\n                cfg.from,\n                currentValue,\n                to\n            ]);\n        }\n    }\n    cancel() {\n        if (this._active) {\n            this.tick(Date.now());\n            this._active = false;\n            this._notify(false);\n        }\n    }\n    tick(date) {\n        const elapsed = date - this._start;\n        const duration = this._duration;\n        const prop = this._prop;\n        const from = this._from;\n        const loop = this._loop;\n        const to = this._to;\n        let factor;\n        this._active = from !== to && (loop || elapsed < duration);\n        if (!this._active) {\n            this._target[prop] = to;\n            this._notify(true);\n            return;\n        }\n        if (elapsed < 0) {\n            this._target[prop] = from;\n            return;\n        }\n        factor = elapsed / duration % 2;\n        factor = loop && factor > 1 ? 2 - factor : factor;\n        factor = this._easing(Math.min(1, Math.max(0, factor)));\n        this._target[prop] = this._fn(from, to, factor);\n    }\n    wait() {\n        const promises = this._promises || (this._promises = []);\n        return new Promise((res, rej)=>{\n            promises.push({\n                res,\n                rej\n            });\n        });\n    }\n    _notify(resolved) {\n        const method = resolved ? 'res' : 'rej';\n        const promises = this._promises || [];\n        for(let i = 0; i < promises.length; i++){\n            promises[i][method]();\n        }\n    }\n}\n\nclass Animations {\n    constructor(chart, config){\n        this._chart = chart;\n        this._properties = new Map();\n        this.configure(config);\n    }\n    configure(config) {\n        if (!isObject(config)) {\n            return;\n        }\n        const animationOptions = Object.keys(defaults.animation);\n        const animatedProps = this._properties;\n        Object.getOwnPropertyNames(config).forEach((key)=>{\n            const cfg = config[key];\n            if (!isObject(cfg)) {\n                return;\n            }\n            const resolved = {};\n            for (const option of animationOptions){\n                resolved[option] = cfg[option];\n            }\n            (isArray(cfg.properties) && cfg.properties || [\n                key\n            ]).forEach((prop)=>{\n                if (prop === key || !animatedProps.has(prop)) {\n                    animatedProps.set(prop, resolved);\n                }\n            });\n        });\n    }\n _animateOptions(target, values) {\n        const newOptions = values.options;\n        const options = resolveTargetOptions(target, newOptions);\n        if (!options) {\n            return [];\n        }\n        const animations = this._createAnimations(options, newOptions);\n        if (newOptions.$shared) {\n            awaitAll(target.options.$animations, newOptions).then(()=>{\n                target.options = newOptions;\n            }, ()=>{\n            });\n        }\n        return animations;\n    }\n _createAnimations(target, values) {\n        const animatedProps = this._properties;\n        const animations = [];\n        const running = target.$animations || (target.$animations = {});\n        const props = Object.keys(values);\n        const date = Date.now();\n        let i;\n        for(i = props.length - 1; i >= 0; --i){\n            const prop = props[i];\n            if (prop.charAt(0) === '$') {\n                continue;\n            }\n            if (prop === 'options') {\n                animations.push(...this._animateOptions(target, values));\n                continue;\n            }\n            const value = values[prop];\n            let animation = running[prop];\n            const cfg = animatedProps.get(prop);\n            if (animation) {\n                if (cfg && animation.active()) {\n                    animation.update(cfg, value, date);\n                    continue;\n                } else {\n                    animation.cancel();\n                }\n            }\n            if (!cfg || !cfg.duration) {\n                target[prop] = value;\n                continue;\n            }\n            running[prop] = animation = new Animation(cfg, target, prop, value);\n            animations.push(animation);\n        }\n        return animations;\n    }\n update(target, values) {\n        if (this._properties.size === 0) {\n            Object.assign(target, values);\n            return;\n        }\n        const animations = this._createAnimations(target, values);\n        if (animations.length) {\n            animator.add(this._chart, animations);\n            return true;\n        }\n    }\n}\nfunction awaitAll(animations, properties) {\n    const running = [];\n    const keys = Object.keys(properties);\n    for(let i = 0; i < keys.length; i++){\n        const anim = animations[keys[i]];\n        if (anim && anim.active()) {\n            running.push(anim.wait());\n        }\n    }\n    return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n    if (!newOptions) {\n        return;\n    }\n    let options = target.options;\n    if (!options) {\n        target.options = newOptions;\n        return;\n    }\n    if (options.$shared) {\n        target.options = options = Object.assign({}, options, {\n            $shared: false,\n            $animations: {}\n        });\n    }\n    return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n    const opts = scale && scale.options || {};\n    const reverse = opts.reverse;\n    const min = opts.min === undefined ? allowedOverflow : 0;\n    const max = opts.max === undefined ? allowedOverflow : 0;\n    return {\n        start: reverse ? max : min,\n        end: reverse ? min : max\n    };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n    if (allowedOverflow === false) {\n        return false;\n    }\n    const x = scaleClip(xScale, allowedOverflow);\n    const y = scaleClip(yScale, allowedOverflow);\n    return {\n        top: y.end,\n        right: x.end,\n        bottom: y.start,\n        left: x.start\n    };\n}\nfunction toClip(value) {\n    let t, r, b, l;\n    if (isObject(value)) {\n        t = value.top;\n        r = value.right;\n        b = value.bottom;\n        l = value.left;\n    } else {\n        t = r = b = l = value;\n    }\n    return {\n        top: t,\n        right: r,\n        bottom: b,\n        left: l,\n        disabled: value === false\n    };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n    const keys = [];\n    const metasets = chart._getSortedDatasetMetas(filterVisible);\n    let i, ilen;\n    for(i = 0, ilen = metasets.length; i < ilen; ++i){\n        keys.push(metasets[i].index);\n    }\n    return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n    const keys = stack.keys;\n    const singleMode = options.mode === 'single';\n    let i, ilen, datasetIndex, otherValue;\n    if (value === null) {\n        return;\n    }\n    let found = false;\n    for(i = 0, ilen = keys.length; i < ilen; ++i){\n        datasetIndex = +keys[i];\n        if (datasetIndex === dsIndex) {\n            found = true;\n            if (options.all) {\n                continue;\n            }\n            break;\n        }\n        otherValue = stack.values[datasetIndex];\n        if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n            value += otherValue;\n        }\n    }\n    if (!found && !options.all) {\n        return 0;\n    }\n    return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n    const { iScale , vScale  } = meta;\n    const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n    const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n    const keys = Object.keys(data);\n    const adata = new Array(keys.length);\n    let i, ilen, key;\n    for(i = 0, ilen = keys.length; i < ilen; ++i){\n        key = keys[i];\n        adata[i] = {\n            [iAxisKey]: key,\n            [vAxisKey]: data[key]\n        };\n    }\n    return adata;\n}\nfunction isStacked(scale, meta) {\n    const stacked = scale && scale.options.stacked;\n    return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n    return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n    const { min , max , minDefined , maxDefined  } = scale.getUserBounds();\n    return {\n        min: minDefined ? min : Number.NEGATIVE_INFINITY,\n        max: maxDefined ? max : Number.POSITIVE_INFINITY\n    };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n    const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n    return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n    for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n        const value = stack[meta.index];\n        if (positive && value > 0 || !positive && value < 0) {\n            return meta.index;\n        }\n    }\n    return null;\n}\nfunction updateStacks(controller, parsed) {\n    const { chart , _cachedMeta: meta  } = controller;\n    const stacks = chart._stacks || (chart._stacks = {});\n    const { iScale , vScale , index: datasetIndex  } = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const key = getStackKey(iScale, vScale, meta);\n    const ilen = parsed.length;\n    let stack;\n    for(let i = 0; i < ilen; ++i){\n        const item = parsed[i];\n        const { [iAxis]: index , [vAxis]: value  } = item;\n        const itemStacks = item._stacks || (item._stacks = {});\n        stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n        stack[datasetIndex] = value;\n        stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n        stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n        const visualValues = stack._visualValues || (stack._visualValues = {});\n        visualValues[datasetIndex] = value;\n    }\n}\nfunction getFirstScaleId(chart, axis) {\n    const scales = chart.scales;\n    return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n    return createContext(parent, {\n        active: false,\n        dataset: undefined,\n        datasetIndex: index,\n        index,\n        mode: 'default',\n        type: 'dataset'\n    });\n}\nfunction createDataContext(parent, index, element) {\n    return createContext(parent, {\n        active: false,\n        dataIndex: index,\n        parsed: undefined,\n        raw: undefined,\n        element,\n        index,\n        mode: 'default',\n        type: 'data'\n    });\n}\nfunction clearStacks(meta, items) {\n    const datasetIndex = meta.controller.index;\n    const axis = meta.vScale && meta.vScale.axis;\n    if (!axis) {\n        return;\n    }\n    items = items || meta._parsed;\n    for (const parsed of items){\n        const stacks = parsed._stacks;\n        if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n            return;\n        }\n        delete stacks[axis][datasetIndex];\n        if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n            delete stacks[axis]._visualValues[datasetIndex];\n        }\n    }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n        keys: getSortedDatasetIndices(chart, true),\n        values: null\n    };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n        this.chart = chart;\n        this._ctx = chart.ctx;\n        this.index = datasetIndex;\n        this._cachedDataOpts = {};\n        this._cachedMeta = this.getMeta();\n        this._type = this._cachedMeta.type;\n        this.options = undefined;\n         this._parsing = false;\n        this._data = undefined;\n        this._objectData = undefined;\n        this._sharedOptions = undefined;\n        this._drawStart = undefined;\n        this._drawCount = undefined;\n        this.enableOptionSharing = false;\n        this.supportsDecimation = false;\n        this.$context = undefined;\n        this._syncList = [];\n        this.datasetElementType = new.target.datasetElementType;\n        this.dataElementType = new.target.dataElementType;\n        this.initialize();\n    }\n    initialize() {\n        const meta = this._cachedMeta;\n        this.configure();\n        this.linkScales();\n        meta._stacked = isStacked(meta.vScale, meta);\n        this.addElements();\n        if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n            console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n        }\n    }\n    updateIndex(datasetIndex) {\n        if (this.index !== datasetIndex) {\n            clearStacks(this._cachedMeta);\n        }\n        this.index = datasetIndex;\n    }\n    linkScales() {\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const dataset = this.getDataset();\n        const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n        const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n        const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n        const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n        const indexAxis = meta.indexAxis;\n        const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n        const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n        meta.xScale = this.getScaleForId(xid);\n        meta.yScale = this.getScaleForId(yid);\n        meta.rScale = this.getScaleForId(rid);\n        meta.iScale = this.getScaleForId(iid);\n        meta.vScale = this.getScaleForId(vid);\n    }\n    getDataset() {\n        return this.chart.data.datasets[this.index];\n    }\n    getMeta() {\n        return this.chart.getDatasetMeta(this.index);\n    }\n getScaleForId(scaleID) {\n        return this.chart.scales[scaleID];\n    }\n _getOtherScale(scale) {\n        const meta = this._cachedMeta;\n        return scale === meta.iScale ? meta.vScale : meta.iScale;\n    }\n    reset() {\n        this._update('reset');\n    }\n _destroy() {\n        const meta = this._cachedMeta;\n        if (this._data) {\n            unlistenArrayEvents(this._data, this);\n        }\n        if (meta._stacked) {\n            clearStacks(meta);\n        }\n    }\n _dataCheck() {\n        const dataset = this.getDataset();\n        const data = dataset.data || (dataset.data = []);\n        const _data = this._data;\n        if (isObject(data)) {\n            const meta = this._cachedMeta;\n            this._data = convertObjectDataToArray(data, meta);\n        } else if (_data !== data) {\n            if (_data) {\n                unlistenArrayEvents(_data, this);\n                const meta = this._cachedMeta;\n                clearStacks(meta);\n                meta._parsed = [];\n            }\n            if (data && Object.isExtensible(data)) {\n                listenArrayEvents(data, this);\n            }\n            this._syncList = [];\n            this._data = data;\n        }\n    }\n    addElements() {\n        const meta = this._cachedMeta;\n        this._dataCheck();\n        if (this.datasetElementType) {\n            meta.dataset = new this.datasetElementType();\n        }\n    }\n    buildOrUpdateElements(resetNewElements) {\n        const meta = this._cachedMeta;\n        const dataset = this.getDataset();\n        let stackChanged = false;\n        this._dataCheck();\n        const oldStacked = meta._stacked;\n        meta._stacked = isStacked(meta.vScale, meta);\n        if (meta.stack !== dataset.stack) {\n            stackChanged = true;\n            clearStacks(meta);\n            meta.stack = dataset.stack;\n        }\n        this._resyncElements(resetNewElements);\n        if (stackChanged || oldStacked !== meta._stacked) {\n            updateStacks(this, meta._parsed);\n            meta._stacked = isStacked(meta.vScale, meta);\n        }\n    }\n configure() {\n        const config = this.chart.config;\n        const scopeKeys = config.datasetScopeKeys(this._type);\n        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n        this.options = config.createResolver(scopes, this.getContext());\n        this._parsing = this.options.parsing;\n        this._cachedDataOpts = {};\n    }\n parse(start, count) {\n        const { _cachedMeta: meta , _data: data  } = this;\n        const { iScale , _stacked  } = meta;\n        const iAxis = iScale.axis;\n        let sorted = start === 0 && count === data.length ? true : meta._sorted;\n        let prev = start > 0 && meta._parsed[start - 1];\n        let i, cur, parsed;\n        if (this._parsing === false) {\n            meta._parsed = data;\n            meta._sorted = true;\n            parsed = data;\n        } else {\n            if (isArray(data[start])) {\n                parsed = this.parseArrayData(meta, data, start, count);\n            } else if (isObject(data[start])) {\n                parsed = this.parseObjectData(meta, data, start, count);\n            } else {\n                parsed = this.parsePrimitiveData(meta, data, start, count);\n            }\n            const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n            for(i = 0; i < count; ++i){\n                meta._parsed[i + start] = cur = parsed[i];\n                if (sorted) {\n                    if (isNotInOrderComparedToPrev()) {\n                        sorted = false;\n                    }\n                    prev = cur;\n                }\n            }\n            meta._sorted = sorted;\n        }\n        if (_stacked) {\n            updateStacks(this, parsed);\n        }\n    }\n parsePrimitiveData(meta, data, start, count) {\n        const { iScale , vScale  } = meta;\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const labels = iScale.getLabels();\n        const singleScale = iScale === vScale;\n        const parsed = new Array(count);\n        let i, ilen, index;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            parsed[i] = {\n                [iAxis]: singleScale || iScale.parse(labels[index], index),\n                [vAxis]: vScale.parse(data[index], index)\n            };\n        }\n        return parsed;\n    }\n parseArrayData(meta, data, start, count) {\n        const { xScale , yScale  } = meta;\n        const parsed = new Array(count);\n        let i, ilen, index, item;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            item = data[index];\n            parsed[i] = {\n                x: xScale.parse(item[0], index),\n                y: yScale.parse(item[1], index)\n            };\n        }\n        return parsed;\n    }\n parseObjectData(meta, data, start, count) {\n        const { xScale , yScale  } = meta;\n        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n        const parsed = new Array(count);\n        let i, ilen, index, item;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            item = data[index];\n            parsed[i] = {\n                x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n                y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n            };\n        }\n        return parsed;\n    }\n getParsed(index) {\n        return this._cachedMeta._parsed[index];\n    }\n getDataElement(index) {\n        return this._cachedMeta.data[index];\n    }\n applyStack(scale, parsed, mode) {\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const value = parsed[scale.axis];\n        const stack = {\n            keys: getSortedDatasetIndices(chart, true),\n            values: parsed._stacks[scale.axis]._visualValues\n        };\n        return applyStack(stack, value, meta.index, {\n            mode\n        });\n    }\n updateRangeFromParsed(range, scale, parsed, stack) {\n        const parsedValue = parsed[scale.axis];\n        let value = parsedValue === null ? NaN : parsedValue;\n        const values = stack && parsed._stacks[scale.axis];\n        if (stack && values) {\n            stack.values = values;\n            value = applyStack(stack, parsedValue, this._cachedMeta.index);\n        }\n        range.min = Math.min(range.min, value);\n        range.max = Math.max(range.max, value);\n    }\n getMinMax(scale, canStack) {\n        const meta = this._cachedMeta;\n        const _parsed = meta._parsed;\n        const sorted = meta._sorted && scale === meta.iScale;\n        const ilen = _parsed.length;\n        const otherScale = this._getOtherScale(scale);\n        const stack = createStack(canStack, meta, this.chart);\n        const range = {\n            min: Number.POSITIVE_INFINITY,\n            max: Number.NEGATIVE_INFINITY\n        };\n        const { min: otherMin , max: otherMax  } = getUserBounds(otherScale);\n        let i, parsed;\n        function _skip() {\n            parsed = _parsed[i];\n            const otherValue = parsed[otherScale.axis];\n            return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n        }\n        for(i = 0; i < ilen; ++i){\n            if (_skip()) {\n                continue;\n            }\n            this.updateRangeFromParsed(range, scale, parsed, stack);\n            if (sorted) {\n                break;\n            }\n        }\n        if (sorted) {\n            for(i = ilen - 1; i >= 0; --i){\n                if (_skip()) {\n                    continue;\n                }\n                this.updateRangeFromParsed(range, scale, parsed, stack);\n                break;\n            }\n        }\n        return range;\n    }\n    getAllParsedValues(scale) {\n        const parsed = this._cachedMeta._parsed;\n        const values = [];\n        let i, ilen, value;\n        for(i = 0, ilen = parsed.length; i < ilen; ++i){\n            value = parsed[i][scale.axis];\n            if (isNumberFinite(value)) {\n                values.push(value);\n            }\n        }\n        return values;\n    }\n getMaxOverflow() {\n        return false;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const iScale = meta.iScale;\n        const vScale = meta.vScale;\n        const parsed = this.getParsed(index);\n        return {\n            label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n            value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n        };\n    }\n _update(mode) {\n        const meta = this._cachedMeta;\n        this.update(mode || 'default');\n        meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n    }\n update(mode) {}\n    draw() {\n        const ctx = this._ctx;\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const elements = meta.data || [];\n        const area = chart.chartArea;\n        const active = [];\n        const start = this._drawStart || 0;\n        const count = this._drawCount || elements.length - start;\n        const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n        let i;\n        if (meta.dataset) {\n            meta.dataset.draw(ctx, area, start, count);\n        }\n        for(i = start; i < start + count; ++i){\n            const element = elements[i];\n            if (element.hidden) {\n                continue;\n            }\n            if (element.active && drawActiveElementsOnTop) {\n                active.push(element);\n            } else {\n                element.draw(ctx, area);\n            }\n        }\n        for(i = 0; i < active.length; ++i){\n            active[i].draw(ctx, area);\n        }\n    }\n getStyle(index, active) {\n        const mode = active ? 'active' : 'default';\n        return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n    }\n getContext(index, active, mode) {\n        const dataset = this.getDataset();\n        let context;\n        if (index >= 0 && index < this._cachedMeta.data.length) {\n            const element = this._cachedMeta.data[index];\n            context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n            context.parsed = this.getParsed(index);\n            context.raw = dataset.data[index];\n            context.index = context.dataIndex = index;\n        } else {\n            context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n            context.dataset = dataset;\n            context.index = context.datasetIndex = this.index;\n        }\n        context.active = !!active;\n        context.mode = mode;\n        return context;\n    }\n resolveDatasetElementOptions(mode) {\n        return this._resolveElementOptions(this.datasetElementType.id, mode);\n    }\n resolveDataElementOptions(index, mode) {\n        return this._resolveElementOptions(this.dataElementType.id, mode, index);\n    }\n _resolveElementOptions(elementType, mode = 'default', index) {\n        const active = mode === 'active';\n        const cache = this._cachedDataOpts;\n        const cacheKey = elementType + '-' + mode;\n        const cached = cache[cacheKey];\n        const sharing = this.enableOptionSharing && defined(index);\n        if (cached) {\n            return cloneIfNotShared(cached, sharing);\n        }\n        const config = this.chart.config;\n        const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n        const prefixes = active ? [\n            `${elementType}Hover`,\n            'hover',\n            elementType,\n            ''\n        ] : [\n            elementType,\n            ''\n        ];\n        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n        const names = Object.keys(defaults.elements[elementType]);\n        const context = ()=>this.getContext(index, active, mode);\n        const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n        if (values.$shared) {\n            values.$shared = sharing;\n            cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n        }\n        return values;\n    }\n _resolveAnimations(index, transition, active) {\n        const chart = this.chart;\n        const cache = this._cachedDataOpts;\n        const cacheKey = `animation-${transition}`;\n        const cached = cache[cacheKey];\n        if (cached) {\n            return cached;\n        }\n        let options;\n        if (chart.options.animation !== false) {\n            const config = this.chart.config;\n            const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n            const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n            options = config.createResolver(scopes, this.getContext(index, active, transition));\n        }\n        const animations = new Animations(chart, options && options.animations);\n        if (options && options._cacheable) {\n            cache[cacheKey] = Object.freeze(animations);\n        }\n        return animations;\n    }\n getSharedOptions(options) {\n        if (!options.$shared) {\n            return;\n        }\n        return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n    }\n includeOptions(mode, sharedOptions) {\n        return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n    }\n _getSharedOptions(start, mode) {\n        const firstOpts = this.resolveDataElementOptions(start, mode);\n        const previouslySharedOptions = this._sharedOptions;\n        const sharedOptions = this.getSharedOptions(firstOpts);\n        const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n        return {\n            sharedOptions,\n            includeOptions\n        };\n    }\n updateElement(element, index, properties, mode) {\n        if (isDirectUpdateMode(mode)) {\n            Object.assign(element, properties);\n        } else {\n            this._resolveAnimations(index, mode).update(element, properties);\n        }\n    }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n        if (sharedOptions && !isDirectUpdateMode(mode)) {\n            this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n        }\n    }\n _setStyle(element, index, mode, active) {\n        element.active = active;\n        const options = this.getStyle(index, active);\n        this._resolveAnimations(index, mode, active).update(element, {\n            options: !active && this.getSharedOptions(options) || options\n        });\n    }\n    removeHoverStyle(element, datasetIndex, index) {\n        this._setStyle(element, index, 'active', false);\n    }\n    setHoverStyle(element, datasetIndex, index) {\n        this._setStyle(element, index, 'active', true);\n    }\n _removeDatasetHoverStyle() {\n        const element = this._cachedMeta.dataset;\n        if (element) {\n            this._setStyle(element, undefined, 'active', false);\n        }\n    }\n _setDatasetHoverStyle() {\n        const element = this._cachedMeta.dataset;\n        if (element) {\n            this._setStyle(element, undefined, 'active', true);\n        }\n    }\n _resyncElements(resetNewElements) {\n        const data = this._data;\n        const elements = this._cachedMeta.data;\n        for (const [method, arg1, arg2] of this._syncList){\n            this[method](arg1, arg2);\n        }\n        this._syncList = [];\n        const numMeta = elements.length;\n        const numData = data.length;\n        const count = Math.min(numData, numMeta);\n        if (count) {\n            this.parse(0, count);\n        }\n        if (numData > numMeta) {\n            this._insertElements(numMeta, numData - numMeta, resetNewElements);\n        } else if (numData < numMeta) {\n            this._removeElements(numData, numMeta - numData);\n        }\n    }\n _insertElements(start, count, resetNewElements = true) {\n        const meta = this._cachedMeta;\n        const data = meta.data;\n        const end = start + count;\n        let i;\n        const move = (arr)=>{\n            arr.length += count;\n            for(i = arr.length - 1; i >= end; i--){\n                arr[i] = arr[i - count];\n            }\n        };\n        move(data);\n        for(i = start; i < end; ++i){\n            data[i] = new this.dataElementType();\n        }\n        if (this._parsing) {\n            move(meta._parsed);\n        }\n        this.parse(start, count);\n        if (resetNewElements) {\n            this.updateElements(data, start, count, 'reset');\n        }\n    }\n    updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n        const meta = this._cachedMeta;\n        if (this._parsing) {\n            const removed = meta._parsed.splice(start, count);\n            if (meta._stacked) {\n                clearStacks(meta, removed);\n            }\n        }\n        meta.data.splice(start, count);\n    }\n _sync(args) {\n        if (this._parsing) {\n            this._syncList.push(args);\n        } else {\n            const [method, arg1, arg2] = args;\n            this[method](arg1, arg2);\n        }\n        this.chart._dataChanges.push([\n            this.index,\n            ...args\n        ]);\n    }\n    _onDataPush() {\n        const count = arguments.length;\n        this._sync([\n            '_insertElements',\n            this.getDataset().data.length - count,\n            count\n        ]);\n    }\n    _onDataPop() {\n        this._sync([\n            '_removeElements',\n            this._cachedMeta.data.length - 1,\n            1\n        ]);\n    }\n    _onDataShift() {\n        this._sync([\n            '_removeElements',\n            0,\n            1\n        ]);\n    }\n    _onDataSplice(start, count) {\n        if (count) {\n            this._sync([\n                '_removeElements',\n                start,\n                count\n            ]);\n        }\n        const newCount = arguments.length - 2;\n        if (newCount) {\n            this._sync([\n                '_insertElements',\n                start,\n                newCount\n            ]);\n        }\n    }\n    _onDataUnshift() {\n        this._sync([\n            '_insertElements',\n            0,\n            arguments.length\n        ]);\n    }\n}\n\nfunction getAllScaleValues(scale, type) {\n    if (!scale._cache.$bar) {\n        const visibleMetas = scale.getMatchingVisibleMetas(type);\n        let values = [];\n        for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n            values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n        }\n        scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n    }\n    return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n    const scale = meta.iScale;\n    const values = getAllScaleValues(scale, meta.type);\n    let min = scale._length;\n    let i, ilen, curr, prev;\n    const updateMinAndPrev = ()=>{\n        if (curr === 32767 || curr === -32768) {\n            return;\n        }\n        if (defined(prev)) {\n            min = Math.min(min, Math.abs(curr - prev) || min);\n        }\n        prev = curr;\n    };\n    for(i = 0, ilen = values.length; i < ilen; ++i){\n        curr = scale.getPixelForValue(values[i]);\n        updateMinAndPrev();\n    }\n    prev = undefined;\n    for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n        curr = scale.getPixelForTick(i);\n        updateMinAndPrev();\n    }\n    return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n    const thickness = options.barThickness;\n    let size, ratio;\n    if (isNullOrUndef(thickness)) {\n        size = ruler.min * options.categoryPercentage;\n        ratio = options.barPercentage;\n    } else {\n        size = thickness * stackCount;\n        ratio = 1;\n    }\n    return {\n        chunk: size / stackCount,\n        ratio,\n        start: ruler.pixels[index] - size / 2\n    };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n    const pixels = ruler.pixels;\n    const curr = pixels[index];\n    let prev = index > 0 ? pixels[index - 1] : null;\n    let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n    const percent = options.categoryPercentage;\n    if (prev === null) {\n        prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n    }\n    if (next === null) {\n        next = curr + curr - prev;\n    }\n    const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n    const size = Math.abs(next - prev) / 2 * percent;\n    return {\n        chunk: size / stackCount,\n        ratio: options.barPercentage,\n        start\n    };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n    const startValue = vScale.parse(entry[0], i);\n    const endValue = vScale.parse(entry[1], i);\n    const min = Math.min(startValue, endValue);\n    const max = Math.max(startValue, endValue);\n    let barStart = min;\n    let barEnd = max;\n    if (Math.abs(min) > Math.abs(max)) {\n        barStart = max;\n        barEnd = min;\n    }\n    item[vScale.axis] = barEnd;\n    item._custom = {\n        barStart,\n        barEnd,\n        start: startValue,\n        end: endValue,\n        min,\n        max\n    };\n}\nfunction parseValue(entry, item, vScale, i) {\n    if (isArray(entry)) {\n        parseFloatBar(entry, item, vScale, i);\n    } else {\n        item[vScale.axis] = vScale.parse(entry, i);\n    }\n    return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = [];\n    let i, ilen, item, entry;\n    for(i = start, ilen = start + count; i < ilen; ++i){\n        entry = data[i];\n        item = {};\n        item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n        parsed.push(parseValue(entry, item, vScale, i));\n    }\n    return parsed;\n}\nfunction isFloatBar(custom) {\n    return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n    if (size !== 0) {\n        return sign(size);\n    }\n    return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n    let reverse, start, end, top, bottom;\n    if (properties.horizontal) {\n        reverse = properties.base > properties.x;\n        start = 'left';\n        end = 'right';\n    } else {\n        reverse = properties.base < properties.y;\n        start = 'bottom';\n        end = 'top';\n    }\n    if (reverse) {\n        top = 'end';\n        bottom = 'start';\n    } else {\n        top = 'start';\n        bottom = 'end';\n    }\n    return {\n        start,\n        end,\n        reverse,\n        top,\n        bottom\n    };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n    let edge = options.borderSkipped;\n    const res = {};\n    if (!edge) {\n        properties.borderSkipped = res;\n        return;\n    }\n    if (edge === true) {\n        properties.borderSkipped = {\n            top: true,\n            right: true,\n            bottom: true,\n            left: true\n        };\n        return;\n    }\n    const { start , end , reverse , top , bottom  } = borderProps(properties);\n    if (edge === 'middle' && stack) {\n        properties.enableBorderRadius = true;\n        if ((stack._top || 0) === index) {\n            edge = top;\n        } else if ((stack._bottom || 0) === index) {\n            edge = bottom;\n        } else {\n            res[parseEdge(bottom, start, end, reverse)] = true;\n            edge = top;\n        }\n    }\n    res[parseEdge(edge, start, end, reverse)] = true;\n    properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n    if (reverse) {\n        edge = swap(edge, a, b);\n        edge = startEnd(edge, b, a);\n    } else {\n        edge = startEnd(edge, a, b);\n    }\n    return edge;\n}\nfunction swap(orig, v1, v2) {\n    return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n    return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount  }, ratio) {\n    properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n    static id = 'bar';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'bar',\n        categoryPercentage: 0.8,\n        barPercentage: 0.9,\n        grouped: true,\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'base',\n                    'width',\n                    'height'\n                ]\n            }\n        }\n    };\n static overrides = {\n        scales: {\n            _index_: {\n                type: 'category',\n                offset: true,\n                grid: {\n                    offset: true\n                }\n            },\n            _value_: {\n                type: 'linear',\n                beginAtZero: true\n            }\n        }\n    };\n parsePrimitiveData(meta, data, start, count) {\n        return parseArrayOrPrimitive(meta, data, start, count);\n    }\n parseArrayData(meta, data, start, count) {\n        return parseArrayOrPrimitive(meta, data, start, count);\n    }\n parseObjectData(meta, data, start, count) {\n        const { iScale , vScale  } = meta;\n        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n        const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n        const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n        const parsed = [];\n        let i, ilen, item, obj;\n        for(i = start, ilen = start + count; i < ilen; ++i){\n            obj = data[i];\n            item = {};\n            item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n            parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n        }\n        return parsed;\n    }\n updateRangeFromParsed(range, scale, parsed, stack) {\n        super.updateRangeFromParsed(range, scale, parsed, stack);\n        const custom = parsed._custom;\n        if (custom && scale === this._cachedMeta.vScale) {\n            range.min = Math.min(range.min, custom.min);\n            range.max = Math.max(range.max, custom.max);\n        }\n    }\n getMaxOverflow() {\n        return 0;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const { iScale , vScale  } = meta;\n        const parsed = this.getParsed(index);\n        const custom = parsed._custom;\n        const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n        return {\n            label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n            value\n        };\n    }\n    initialize() {\n        this.enableOptionSharing = true;\n        super.initialize();\n        const meta = this._cachedMeta;\n        meta.stack = this.getDataset().stack;\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        this.updateElements(meta.data, 0, meta.data.length, mode);\n    }\n    updateElements(bars, start, count, mode) {\n        const reset = mode === 'reset';\n        const { index , _cachedMeta: { vScale  }  } = this;\n        const base = vScale.getBasePixel();\n        const horizontal = vScale.isHorizontal();\n        const ruler = this._getRuler();\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        for(let i = start; i < start + count; i++){\n            const parsed = this.getParsed(i);\n            const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n                base,\n                head: base\n            } : this._calculateBarValuePixels(i);\n            const ipixels = this._calculateBarIndexPixels(i, ruler);\n            const stack = (parsed._stacks || {})[vScale.axis];\n            const properties = {\n                horizontal,\n                base: vpixels.base,\n                enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n                x: horizontal ? vpixels.head : ipixels.center,\n                y: horizontal ? ipixels.center : vpixels.head,\n                height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n                width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n            };\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n            }\n            const options = properties.options || bars[i].options;\n            setBorderSkipped(properties, options, stack, index);\n            setInflateAmount(properties, options, ruler.ratio);\n            this.updateElement(bars[i], i, properties, mode);\n        }\n    }\n _getStacks(last, dataIndex) {\n        const { iScale  } = this._cachedMeta;\n        const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n        const stacked = iScale.options.stacked;\n        const stacks = [];\n        const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n        const iScaleValue = currentParsed && currentParsed[iScale.axis];\n        const skipNull = (meta)=>{\n            const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n            const val = parsed && parsed[meta.vScale.axis];\n            if (isNullOrUndef(val) || isNaN(val)) {\n                return true;\n            }\n        };\n        for (const meta of metasets){\n            if (dataIndex !== undefined && skipNull(meta)) {\n                continue;\n            }\n            if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n                stacks.push(meta.stack);\n            }\n            if (meta.index === last) {\n                break;\n            }\n        }\n        if (!stacks.length) {\n            stacks.push(undefined);\n        }\n        return stacks;\n    }\n _getStackCount(index) {\n        return this._getStacks(undefined, index).length;\n    }\n _getStackIndex(datasetIndex, name, dataIndex) {\n        const stacks = this._getStacks(datasetIndex, dataIndex);\n        const index = name !== undefined ? stacks.indexOf(name) : -1;\n        return index === -1 ? stacks.length - 1 : index;\n    }\n _getRuler() {\n        const opts = this.options;\n        const meta = this._cachedMeta;\n        const iScale = meta.iScale;\n        const pixels = [];\n        let i, ilen;\n        for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n            pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n        }\n        const barThickness = opts.barThickness;\n        const min = barThickness || computeMinSampleSize(meta);\n        return {\n            min,\n            pixels,\n            start: iScale._startPixel,\n            end: iScale._endPixel,\n            stackCount: this._getStackCount(),\n            scale: iScale,\n            grouped: opts.grouped,\n            ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n        };\n    }\n _calculateBarValuePixels(index) {\n        const { _cachedMeta: { vScale , _stacked , index: datasetIndex  } , options: { base: baseValue , minBarLength  }  } = this;\n        const actualBase = baseValue || 0;\n        const parsed = this.getParsed(index);\n        const custom = parsed._custom;\n        const floating = isFloatBar(custom);\n        let value = parsed[vScale.axis];\n        let start = 0;\n        let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n        let head, size;\n        if (length !== value) {\n            start = length - value;\n            length = value;\n        }\n        if (floating) {\n            value = custom.barStart;\n            length = custom.barEnd - custom.barStart;\n            if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n                start = 0;\n            }\n            start += value;\n        }\n        const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n        let base = vScale.getPixelForValue(startValue);\n        if (this.chart.getDataVisibility(index)) {\n            head = vScale.getPixelForValue(start + length);\n        } else {\n            head = base;\n        }\n        size = head - base;\n        if (Math.abs(size) < minBarLength) {\n            size = barSign(size, vScale, actualBase) * minBarLength;\n            if (value === actualBase) {\n                base -= size / 2;\n            }\n            const startPixel = vScale.getPixelForDecimal(0);\n            const endPixel = vScale.getPixelForDecimal(1);\n            const min = Math.min(startPixel, endPixel);\n            const max = Math.max(startPixel, endPixel);\n            base = Math.max(Math.min(base, max), min);\n            head = base + size;\n            if (_stacked && !floating) {\n                parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n            }\n        }\n        if (base === vScale.getPixelForValue(actualBase)) {\n            const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n            base += halfGrid;\n            size -= halfGrid;\n        }\n        return {\n            size,\n            base,\n            head,\n            center: head + size / 2\n        };\n    }\n _calculateBarIndexPixels(index, ruler) {\n        const scale = ruler.scale;\n        const options = this.options;\n        const skipNull = options.skipNull;\n        const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n        let center, size;\n        if (ruler.grouped) {\n            const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n            const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n            const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n            center = range.start + range.chunk * stackIndex + range.chunk / 2;\n            size = Math.min(maxBarThickness, range.chunk * range.ratio);\n        } else {\n            center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n            size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n        }\n        return {\n            base: center - size / 2,\n            head: center + size / 2,\n            center,\n            size\n        };\n    }\n    draw() {\n        const meta = this._cachedMeta;\n        const vScale = meta.vScale;\n        const rects = meta.data;\n        const ilen = rects.length;\n        let i = 0;\n        for(; i < ilen; ++i){\n            if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n                rects[i].draw(this._ctx);\n            }\n        }\n    }\n}\n\nclass BubbleController extends DatasetController {\n    static id = 'bubble';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'point',\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'borderWidth',\n                    'radius'\n                ]\n            }\n        }\n    };\n static overrides = {\n        scales: {\n            x: {\n                type: 'linear'\n            },\n            y: {\n                type: 'linear'\n            }\n        }\n    };\n    initialize() {\n        this.enableOptionSharing = true;\n        super.initialize();\n    }\n parsePrimitiveData(meta, data, start, count) {\n        const parsed = super.parsePrimitiveData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n        }\n        return parsed;\n    }\n parseArrayData(meta, data, start, count) {\n        const parsed = super.parseArrayData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            const item = data[start + i];\n            parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n        }\n        return parsed;\n    }\n parseObjectData(meta, data, start, count) {\n        const parsed = super.parseObjectData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            const item = data[start + i];\n            parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n        }\n        return parsed;\n    }\n getMaxOverflow() {\n        const data = this._cachedMeta.data;\n        let max = 0;\n        for(let i = data.length - 1; i >= 0; --i){\n            max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n        }\n        return max > 0 && max;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const labels = this.chart.data.labels || [];\n        const { xScale , yScale  } = meta;\n        const parsed = this.getParsed(index);\n        const x = xScale.getLabelForValue(parsed.x);\n        const y = yScale.getLabelForValue(parsed.y);\n        const r = parsed._custom;\n        return {\n            label: labels[index] || '',\n            value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n        };\n    }\n    update(mode) {\n        const points = this._cachedMeta.data;\n        this.updateElements(points, 0, points.length, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale  } = this._cachedMeta;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        for(let i = start; i < start + count; i++){\n            const point = points[i];\n            const parsed = !reset && this.getParsed(i);\n            const properties = {};\n            const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n            const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel);\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n                if (reset) {\n                    properties.options.radius = 0;\n                }\n            }\n            this.updateElement(point, i, properties, mode);\n        }\n    }\n resolveDataElementOptions(index, mode) {\n        const parsed = this.getParsed(index);\n        let values = super.resolveDataElementOptions(index, mode);\n        if (values.$shared) {\n            values = Object.assign({}, values, {\n                $shared: false\n            });\n        }\n        const radius = values.radius;\n        if (mode !== 'active') {\n            values.radius = 0;\n        }\n        values.radius += valueOrDefault(parsed && parsed._custom, radius);\n        return values;\n    }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n    let ratioX = 1;\n    let ratioY = 1;\n    let offsetX = 0;\n    let offsetY = 0;\n    if (circumference < TAU) {\n        const startAngle = rotation;\n        const endAngle = startAngle + circumference;\n        const startX = Math.cos(startAngle);\n        const startY = Math.sin(startAngle);\n        const endX = Math.cos(endAngle);\n        const endY = Math.sin(endAngle);\n        const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n        const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n        const maxX = calcMax(0, startX, endX);\n        const maxY = calcMax(HALF_PI, startY, endY);\n        const minX = calcMin(PI, startX, endX);\n        const minY = calcMin(PI + HALF_PI, startY, endY);\n        ratioX = (maxX - minX) / 2;\n        ratioY = (maxY - minY) / 2;\n        offsetX = -(maxX + minX) / 2;\n        offsetY = -(maxY + minY) / 2;\n    }\n    return {\n        ratioX,\n        ratioY,\n        offsetX,\n        offsetY\n    };\n}\nclass DoughnutController extends DatasetController {\n    static id = 'doughnut';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'arc',\n        animation: {\n            animateRotate: true,\n            animateScale: false\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'circumference',\n                    'endAngle',\n                    'innerRadius',\n                    'outerRadius',\n                    'startAngle',\n                    'x',\n                    'y',\n                    'offset',\n                    'borderWidth',\n                    'spacing'\n                ]\n            }\n        },\n        cutout: '50%',\n        rotation: 0,\n        circumference: 360,\n        radius: '100%',\n        spacing: 0,\n        indexAxis: 'r'\n    };\n    static descriptors = {\n        _scriptable: (name)=>name !== 'spacing',\n        _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n    };\n static overrides = {\n        aspectRatio: 1,\n        plugins: {\n            legend: {\n                labels: {\n                    generateLabels (chart) {\n                        const data = chart.data;\n                        if (data.labels.length && data.datasets.length) {\n                            const { labels: { pointStyle , color  }  } = chart.legend.options;\n                            return data.labels.map((label, i)=>{\n                                const meta = chart.getDatasetMeta(0);\n                                const style = meta.controller.getStyle(i);\n                                return {\n                                    text: label,\n                                    fillStyle: style.backgroundColor,\n                                    strokeStyle: style.borderColor,\n                                    fontColor: color,\n                                    lineWidth: style.borderWidth,\n                                    pointStyle: pointStyle,\n                                    hidden: !chart.getDataVisibility(i),\n                                    index: i\n                                };\n                            });\n                        }\n                        return [];\n                    }\n                },\n                onClick (e, legendItem, legend) {\n                    legend.chart.toggleDataVisibility(legendItem.index);\n                    legend.chart.update();\n                }\n            }\n        }\n    };\n    constructor(chart, datasetIndex){\n        super(chart, datasetIndex);\n        this.enableOptionSharing = true;\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n        this.offsetX = undefined;\n        this.offsetY = undefined;\n    }\n    linkScales() {}\n parse(start, count) {\n        const data = this.getDataset().data;\n        const meta = this._cachedMeta;\n        if (this._parsing === false) {\n            meta._parsed = data;\n        } else {\n            let getter = (i)=>+data[i];\n            if (isObject(data[start])) {\n                const { key ='value'  } = this._parsing;\n                getter = (i)=>+resolveObjectKey(data[i], key);\n            }\n            let i, ilen;\n            for(i = start, ilen = start + count; i < ilen; ++i){\n                meta._parsed[i] = getter(i);\n            }\n        }\n    }\n _getRotation() {\n        return toRadians(this.options.rotation - 90);\n    }\n _getCircumference() {\n        return toRadians(this.options.circumference);\n    }\n _getRotationExtents() {\n        let min = TAU;\n        let max = -TAU;\n        for(let i = 0; i < this.chart.data.datasets.length; ++i){\n            if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n                const controller = this.chart.getDatasetMeta(i).controller;\n                const rotation = controller._getRotation();\n                const circumference = controller._getCircumference();\n                min = Math.min(min, rotation);\n                max = Math.max(max, rotation + circumference);\n            }\n        }\n        return {\n            rotation: min,\n            circumference: max - min\n        };\n    }\n update(mode) {\n        const chart = this.chart;\n        const { chartArea  } = chart;\n        const meta = this._cachedMeta;\n        const arcs = meta.data;\n        const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n        const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n        const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n        const chartWeight = this._getRingWeight(this.index);\n        const { circumference , rotation  } = this._getRotationExtents();\n        const { ratioX , ratioY , offsetX , offsetY  } = getRatioAndOffset(rotation, circumference, cutout);\n        const maxWidth = (chartArea.width - spacing) / ratioX;\n        const maxHeight = (chartArea.height - spacing) / ratioY;\n        const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n        const outerRadius = toDimension(this.options.radius, maxRadius);\n        const innerRadius = Math.max(outerRadius * cutout, 0);\n        const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n        this.offsetX = offsetX * outerRadius;\n        this.offsetY = offsetY * outerRadius;\n        meta.total = this.calculateTotal();\n        this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n        this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n        this.updateElements(arcs, 0, arcs.length, mode);\n    }\n _circumference(i, reset) {\n        const opts = this.options;\n        const meta = this._cachedMeta;\n        const circumference = this._getCircumference();\n        if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n            return 0;\n        }\n        return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n    }\n    updateElements(arcs, start, count, mode) {\n        const reset = mode === 'reset';\n        const chart = this.chart;\n        const chartArea = chart.chartArea;\n        const opts = chart.options;\n        const animationOpts = opts.animation;\n        const centerX = (chartArea.left + chartArea.right) / 2;\n        const centerY = (chartArea.top + chartArea.bottom) / 2;\n        const animateScale = reset && animationOpts.animateScale;\n        const innerRadius = animateScale ? 0 : this.innerRadius;\n        const outerRadius = animateScale ? 0 : this.outerRadius;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        let startAngle = this._getRotation();\n        let i;\n        for(i = 0; i < start; ++i){\n            startAngle += this._circumference(i, reset);\n        }\n        for(i = start; i < start + count; ++i){\n            const circumference = this._circumference(i, reset);\n            const arc = arcs[i];\n            const properties = {\n                x: centerX + this.offsetX,\n                y: centerY + this.offsetY,\n                startAngle,\n                endAngle: startAngle + circumference,\n                circumference,\n                outerRadius,\n                innerRadius\n            };\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n            }\n            startAngle += circumference;\n            this.updateElement(arc, i, properties, mode);\n        }\n    }\n    calculateTotal() {\n        const meta = this._cachedMeta;\n        const metaData = meta.data;\n        let total = 0;\n        let i;\n        for(i = 0; i < metaData.length; i++){\n            const value = meta._parsed[i];\n            if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n                total += Math.abs(value);\n            }\n        }\n        return total;\n    }\n    calculateCircumference(value) {\n        const total = this._cachedMeta.total;\n        if (total > 0 && !isNaN(value)) {\n            return TAU * (Math.abs(value) / total);\n        }\n        return 0;\n    }\n    getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const chart = this.chart;\n        const labels = chart.data.labels || [];\n        const value = formatNumber(meta._parsed[index], chart.options.locale);\n        return {\n            label: labels[index] || '',\n            value\n        };\n    }\n    getMaxBorderWidth(arcs) {\n        let max = 0;\n        const chart = this.chart;\n        let i, ilen, meta, controller, options;\n        if (!arcs) {\n            for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n                if (chart.isDatasetVisible(i)) {\n                    meta = chart.getDatasetMeta(i);\n                    arcs = meta.data;\n                    controller = meta.controller;\n                    break;\n                }\n            }\n        }\n        if (!arcs) {\n            return 0;\n        }\n        for(i = 0, ilen = arcs.length; i < ilen; ++i){\n            options = controller.resolveDataElementOptions(i);\n            if (options.borderAlign !== 'inner') {\n                max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n            }\n        }\n        return max;\n    }\n    getMaxOffset(arcs) {\n        let max = 0;\n        for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n            const options = this.resolveDataElementOptions(i);\n            max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n        }\n        return max;\n    }\n _getRingWeightOffset(datasetIndex) {\n        let ringWeightOffset = 0;\n        for(let i = 0; i < datasetIndex; ++i){\n            if (this.chart.isDatasetVisible(i)) {\n                ringWeightOffset += this._getRingWeight(i);\n            }\n        }\n        return ringWeightOffset;\n    }\n _getRingWeight(datasetIndex) {\n        return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n    }\n _getVisibleDatasetWeightTotal() {\n        return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n    }\n}\n\nclass LineController extends DatasetController {\n    static id = 'line';\n static defaults = {\n        datasetElementType: 'line',\n        dataElementType: 'point',\n        showLine: true,\n        spanGaps: false\n    };\n static overrides = {\n        scales: {\n            _index_: {\n                type: 'category'\n            },\n            _value_: {\n                type: 'linear'\n            }\n        }\n    };\n    initialize() {\n        this.enableOptionSharing = true;\n        this.supportsDecimation = true;\n        super.initialize();\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const { dataset: line , data: points = [] , _dataset  } = meta;\n        const animationsDisabled = this.chart._animationsDisabled;\n        let { start , count  } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n        this._drawStart = start;\n        this._drawCount = count;\n        if (_scaleRangesChanged(meta)) {\n            start = 0;\n            count = points.length;\n        }\n        line._chart = this.chart;\n        line._datasetIndex = this.index;\n        line._decimated = !!_dataset._decimated;\n        line.points = points;\n        const options = this.resolveDatasetElementOptions(mode);\n        if (!this.options.showLine) {\n            options.borderWidth = 0;\n        }\n        options.segment = this.options.segment;\n        this.updateElement(line, undefined, {\n            animated: !animationsDisabled,\n            options\n        }, mode);\n        this.updateElements(points, start, count, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const { spanGaps , segment  } = this.options;\n        const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n        const end = start + count;\n        const pointsCount = points.length;\n        let prevParsed = start > 0 && this.getParsed(start - 1);\n        for(let i = 0; i < pointsCount; ++i){\n            const point = points[i];\n            const properties = directUpdate ? point : {};\n            if (i < start || i >= end) {\n                properties.skip = true;\n                continue;\n            }\n            const parsed = this.getParsed(i);\n            const nullData = isNullOrUndef(parsed[vAxis]);\n            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n            if (segment) {\n                properties.parsed = parsed;\n                properties.raw = _dataset.data[i];\n            }\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            }\n            if (!directUpdate) {\n                this.updateElement(point, i, properties, mode);\n            }\n            prevParsed = parsed;\n        }\n    }\n getMaxOverflow() {\n        const meta = this._cachedMeta;\n        const dataset = meta.dataset;\n        const border = dataset.options && dataset.options.borderWidth || 0;\n        const data = meta.data || [];\n        if (!data.length) {\n            return border;\n        }\n        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n        return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n    draw() {\n        const meta = this._cachedMeta;\n        meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n        super.draw();\n    }\n}\n\nclass PolarAreaController extends DatasetController {\n    static id = 'polarArea';\n static defaults = {\n        dataElementType: 'arc',\n        animation: {\n            animateRotate: true,\n            animateScale: true\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'startAngle',\n                    'endAngle',\n                    'innerRadius',\n                    'outerRadius'\n                ]\n            }\n        },\n        indexAxis: 'r',\n        startAngle: 0\n    };\n static overrides = {\n        aspectRatio: 1,\n        plugins: {\n            legend: {\n                labels: {\n                    generateLabels (chart) {\n                        const data = chart.data;\n                        if (data.labels.length && data.datasets.length) {\n                            const { labels: { pointStyle , color  }  } = chart.legend.options;\n                            return data.labels.map((label, i)=>{\n                                const meta = chart.getDatasetMeta(0);\n                                const style = meta.controller.getStyle(i);\n                                return {\n                                    text: label,\n                                    fillStyle: style.backgroundColor,\n                                    strokeStyle: style.borderColor,\n                                    fontColor: color,\n                                    lineWidth: style.borderWidth,\n                                    pointStyle: pointStyle,\n                                    hidden: !chart.getDataVisibility(i),\n                                    index: i\n                                };\n                            });\n                        }\n                        return [];\n                    }\n                },\n                onClick (e, legendItem, legend) {\n                    legend.chart.toggleDataVisibility(legendItem.index);\n                    legend.chart.update();\n                }\n            }\n        },\n        scales: {\n            r: {\n                type: 'radialLinear',\n                angleLines: {\n                    display: false\n                },\n                beginAtZero: true,\n                grid: {\n                    circular: true\n                },\n                pointLabels: {\n                    display: false\n                },\n                startAngle: 0\n            }\n        }\n    };\n    constructor(chart, datasetIndex){\n        super(chart, datasetIndex);\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n    }\n    getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const chart = this.chart;\n        const labels = chart.data.labels || [];\n        const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n        return {\n            label: labels[index] || '',\n            value\n        };\n    }\n    parseObjectData(meta, data, start, count) {\n        return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n    update(mode) {\n        const arcs = this._cachedMeta.data;\n        this._updateRadius();\n        this.updateElements(arcs, 0, arcs.length, mode);\n    }\n getMinMax() {\n        const meta = this._cachedMeta;\n        const range = {\n            min: Number.POSITIVE_INFINITY,\n            max: Number.NEGATIVE_INFINITY\n        };\n        meta.data.forEach((element, index)=>{\n            const parsed = this.getParsed(index).r;\n            if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n                if (parsed < range.min) {\n                    range.min = parsed;\n                }\n                if (parsed > range.max) {\n                    range.max = parsed;\n                }\n            }\n        });\n        return range;\n    }\n _updateRadius() {\n        const chart = this.chart;\n        const chartArea = chart.chartArea;\n        const opts = chart.options;\n        const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n        const outerRadius = Math.max(minSize / 2, 0);\n        const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n        const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n        this.outerRadius = outerRadius - radiusLength * this.index;\n        this.innerRadius = this.outerRadius - radiusLength;\n    }\n    updateElements(arcs, start, count, mode) {\n        const reset = mode === 'reset';\n        const chart = this.chart;\n        const opts = chart.options;\n        const animationOpts = opts.animation;\n        const scale = this._cachedMeta.rScale;\n        const centerX = scale.xCenter;\n        const centerY = scale.yCenter;\n        const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n        let angle = datasetStartAngle;\n        let i;\n        const defaultAngle = 360 / this.countVisibleElements();\n        for(i = 0; i < start; ++i){\n            angle += this._computeAngle(i, mode, defaultAngle);\n        }\n        for(i = start; i < start + count; i++){\n            const arc = arcs[i];\n            let startAngle = angle;\n            let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n            let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n            angle = endAngle;\n            if (reset) {\n                if (animationOpts.animateScale) {\n                    outerRadius = 0;\n                }\n                if (animationOpts.animateRotate) {\n                    startAngle = endAngle = datasetStartAngle;\n                }\n            }\n            const properties = {\n                x: centerX,\n                y: centerY,\n                innerRadius: 0,\n                outerRadius,\n                startAngle,\n                endAngle,\n                options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n            };\n            this.updateElement(arc, i, properties, mode);\n        }\n    }\n    countVisibleElements() {\n        const meta = this._cachedMeta;\n        let count = 0;\n        meta.data.forEach((element, index)=>{\n            if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n                count++;\n            }\n        });\n        return count;\n    }\n _computeAngle(index, mode, defaultAngle) {\n        return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n    }\n}\n\nclass PieController extends DoughnutController {\n    static id = 'pie';\n static defaults = {\n        cutout: 0,\n        rotation: 0,\n        circumference: 360,\n        radius: '100%'\n    };\n}\n\nclass RadarController extends DatasetController {\n    static id = 'radar';\n static defaults = {\n        datasetElementType: 'line',\n        dataElementType: 'point',\n        indexAxis: 'r',\n        showLine: true,\n        elements: {\n            line: {\n                fill: 'start'\n            }\n        }\n    };\n static overrides = {\n        aspectRatio: 1,\n        scales: {\n            r: {\n                type: 'radialLinear'\n            }\n        }\n    };\n getLabelAndValue(index) {\n        const vScale = this._cachedMeta.vScale;\n        const parsed = this.getParsed(index);\n        return {\n            label: vScale.getLabels()[index],\n            value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n        };\n    }\n    parseObjectData(meta, data, start, count) {\n        return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const line = meta.dataset;\n        const points = meta.data || [];\n        const labels = meta.iScale.getLabels();\n        line.points = points;\n        if (mode !== 'resize') {\n            const options = this.resolveDatasetElementOptions(mode);\n            if (!this.options.showLine) {\n                options.borderWidth = 0;\n            }\n            const properties = {\n                _loop: true,\n                _fullLoop: labels.length === points.length,\n                options\n            };\n            this.updateElement(line, undefined, properties, mode);\n        }\n        this.updateElements(points, 0, points.length, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const scale = this._cachedMeta.rScale;\n        const reset = mode === 'reset';\n        for(let i = start; i < start + count; i++){\n            const point = points[i];\n            const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n            const x = reset ? scale.xCenter : pointPosition.x;\n            const y = reset ? scale.yCenter : pointPosition.y;\n            const properties = {\n                x,\n                y,\n                angle: pointPosition.angle,\n                skip: isNaN(x) || isNaN(y),\n                options\n            };\n            this.updateElement(point, i, properties, mode);\n        }\n    }\n}\n\nclass ScatterController extends DatasetController {\n    static id = 'scatter';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'point',\n        showLine: false,\n        fill: false\n    };\n static overrides = {\n        interaction: {\n            mode: 'point'\n        },\n        scales: {\n            x: {\n                type: 'linear'\n            },\n            y: {\n                type: 'linear'\n            }\n        }\n    };\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const labels = this.chart.data.labels || [];\n        const { xScale , yScale  } = meta;\n        const parsed = this.getParsed(index);\n        const x = xScale.getLabelForValue(parsed.x);\n        const y = yScale.getLabelForValue(parsed.y);\n        return {\n            label: labels[index] || '',\n            value: '(' + x + ', ' + y + ')'\n        };\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const { data: points = []  } = meta;\n        const animationsDisabled = this.chart._animationsDisabled;\n        let { start , count  } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n        this._drawStart = start;\n        this._drawCount = count;\n        if (_scaleRangesChanged(meta)) {\n            start = 0;\n            count = points.length;\n        }\n        if (this.options.showLine) {\n            if (!this.datasetElementType) {\n                this.addElements();\n            }\n            const { dataset: line , _dataset  } = meta;\n            line._chart = this.chart;\n            line._datasetIndex = this.index;\n            line._decimated = !!_dataset._decimated;\n            line.points = points;\n            const options = this.resolveDatasetElementOptions(mode);\n            options.segment = this.options.segment;\n            this.updateElement(line, undefined, {\n                animated: !animationsDisabled,\n                options\n            }, mode);\n        } else if (this.datasetElementType) {\n            delete meta.dataset;\n            this.datasetElementType = false;\n        }\n        this.updateElements(points, start, count, mode);\n    }\n    addElements() {\n        const { showLine  } = this.options;\n        if (!this.datasetElementType && showLine) {\n            this.datasetElementType = this.chart.registry.getElement('line');\n        }\n        super.addElements();\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n        const firstOpts = this.resolveDataElementOptions(start, mode);\n        const sharedOptions = this.getSharedOptions(firstOpts);\n        const includeOptions = this.includeOptions(mode, sharedOptions);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const { spanGaps , segment  } = this.options;\n        const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n        let prevParsed = start > 0 && this.getParsed(start - 1);\n        for(let i = start; i < start + count; ++i){\n            const point = points[i];\n            const parsed = this.getParsed(i);\n            const properties = directUpdate ? point : {};\n            const nullData = isNullOrUndef(parsed[vAxis]);\n            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n            if (segment) {\n                properties.parsed = parsed;\n                properties.raw = _dataset.data[i];\n            }\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            }\n            if (!directUpdate) {\n                this.updateElement(point, i, properties, mode);\n            }\n            prevParsed = parsed;\n        }\n        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    }\n getMaxOverflow() {\n        const meta = this._cachedMeta;\n        const data = meta.data || [];\n        if (!this.options.showLine) {\n            let max = 0;\n            for(let i = data.length - 1; i >= 0; --i){\n                max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n            }\n            return max > 0 && max;\n        }\n        const dataset = meta.dataset;\n        const border = dataset.options && dataset.options.borderWidth || 0;\n        if (!data.length) {\n            return border;\n        }\n        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n        return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n    throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n    /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */ static override(members) {\n        Object.assign(DateAdapterBase.prototype, members);\n    }\n    options;\n    constructor(options){\n        this.options = options || {};\n    }\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    init() {}\n    formats() {\n        return abstract();\n    }\n    parse() {\n        return abstract();\n    }\n    format() {\n        return abstract();\n    }\n    add() {\n        return abstract();\n    }\n    diff() {\n        return abstract();\n    }\n    startOf() {\n        return abstract();\n    }\n    endOf() {\n        return abstract();\n    }\n}\nvar adapters = {\n    _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n    const { controller , data , _sorted  } = metaset;\n    const iScale = controller._cachedMeta.iScale;\n    const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n    if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n        const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n        if (!intersect) {\n            const result = lookupMethod(data, axis, value);\n            if (spanGaps) {\n                const { vScale  } = controller._cachedMeta;\n                const { _parsed  } = metaset;\n                const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                result.lo -= Math.max(0, distanceToDefinedLo);\n                const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                result.hi += Math.max(0, distanceToDefinedHi);\n            }\n            return result;\n        } else if (controller._sharedOptions) {\n            const el = data[0];\n            const range = typeof el.getRange === 'function' && el.getRange(axis);\n            if (range) {\n                const start = lookupMethod(data, axis, value - range);\n                const end = lookupMethod(data, axis, value + range);\n                return {\n                    lo: start.lo,\n                    hi: end.hi\n                };\n            }\n        }\n    }\n    return {\n        lo: 0,\n        hi: data.length - 1\n    };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const value = position[axis];\n    for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n        const { index , data  } = metasets[i];\n        const { lo , hi  } = binarySearch(metasets[i], axis, value, intersect);\n        for(let j = lo; j <= hi; ++j){\n            const element = data[j];\n            if (!element.skip) {\n                handler(element, index, j);\n            }\n        }\n    }\n}\n function getDistanceMetricForAxis(axis) {\n    const useX = axis.indexOf('x') !== -1;\n    const useY = axis.indexOf('y') !== -1;\n    return function(pt1, pt2) {\n        const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n        const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n        return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n    };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n    const items = [];\n    if (!includeInvisible && !chart.isPointInArea(position)) {\n        return items;\n    }\n    const evaluationFunc = function(element, datasetIndex, index) {\n        if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n            return;\n        }\n        if (element.inRange(position.x, position.y, useFinalPosition)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    };\n    evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n    return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n    let items = [];\n    function evaluationFunc(element, datasetIndex, index) {\n        const { startAngle , endAngle  } = element.getProps([\n            'startAngle',\n            'endAngle'\n        ], useFinalPosition);\n        const { angle  } = getAngleFromPoint(element, {\n            x: position.x,\n            y: position.y\n        });\n        if (_angleBetween(angle, startAngle, endAngle)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    }\n    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n    return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n    let items = [];\n    const distanceMetric = getDistanceMetricForAxis(axis);\n    let minDistance = Number.POSITIVE_INFINITY;\n    function evaluationFunc(element, datasetIndex, index) {\n        const inRange = element.inRange(position.x, position.y, useFinalPosition);\n        if (intersect && !inRange) {\n            return;\n        }\n        const center = element.getCenterPoint(useFinalPosition);\n        const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n        if (!pointInArea && !inRange) {\n            return;\n        }\n        const distance = distanceMetric(position, center);\n        if (distance < minDistance) {\n            items = [\n                {\n                    element,\n                    datasetIndex,\n                    index\n                }\n            ];\n            minDistance = distance;\n        } else if (distance === minDistance) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    }\n    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n    return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n    if (!includeInvisible && !chart.isPointInArea(position)) {\n        return [];\n    }\n    return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n    const items = [];\n    const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n    let intersectsItem = false;\n    evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n        if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n            intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n        }\n    });\n    if (intersect && !intersectsItem) {\n        return [];\n    }\n    return items;\n}\n var Interaction = {\n    evaluateInteractionItems,\n    modes: {\n index (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'x';\n            const includeInvisible = options.includeInvisible || false;\n            const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n            const elements = [];\n            if (!items.length) {\n                return [];\n            }\n            chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n                const index = items[0].index;\n                const element = meta.data[index];\n                if (element && !element.skip) {\n                    elements.push({\n                        element,\n                        datasetIndex: meta.index,\n                        index\n                    });\n                }\n            });\n            return elements;\n        },\n dataset (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n            if (items.length > 0) {\n                const datasetIndex = items[0].datasetIndex;\n                const data = chart.getDatasetMeta(datasetIndex).data;\n                items = [];\n                for(let i = 0; i < data.length; ++i){\n                    items.push({\n                        element: data[i],\n                        datasetIndex,\n                        index: i\n                    });\n                }\n            }\n            return items;\n        },\n point (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n        },\n nearest (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n        },\n x (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n        },\n y (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n        }\n    }\n};\n\nconst STATIC_POSITIONS = [\n    'left',\n    'top',\n    'right',\n    'bottom'\n];\nfunction filterByPosition(array, position) {\n    return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n    return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n    return array.sort((a, b)=>{\n        const v0 = reverse ? b : a;\n        const v1 = reverse ? a : b;\n        return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n    });\n}\nfunction wrapBoxes(boxes) {\n    const layoutBoxes = [];\n    let i, ilen, box, pos, stack, stackWeight;\n    for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n        box = boxes[i];\n        ({ position: pos , options: { stack , stackWeight =1  }  } = box);\n        layoutBoxes.push({\n            index: i,\n            box,\n            pos,\n            horizontal: box.isHorizontal(),\n            weight: box.weight,\n            stack: stack && pos + stack,\n            stackWeight\n        });\n    }\n    return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n    const stacks = {};\n    for (const wrap of layouts){\n        const { stack , pos , stackWeight  } = wrap;\n        if (!stack || !STATIC_POSITIONS.includes(pos)) {\n            continue;\n        }\n        const _stack = stacks[stack] || (stacks[stack] = {\n            count: 0,\n            placed: 0,\n            weight: 0,\n            size: 0\n        });\n        _stack.count++;\n        _stack.weight += stackWeight;\n    }\n    return stacks;\n}\n function setLayoutDims(layouts, params) {\n    const stacks = buildStacks(layouts);\n    const { vBoxMaxWidth , hBoxMaxHeight  } = params;\n    let i, ilen, layout;\n    for(i = 0, ilen = layouts.length; i < ilen; ++i){\n        layout = layouts[i];\n        const { fullSize  } = layout.box;\n        const stack = stacks[layout.stack];\n        const factor = stack && layout.stackWeight / stack.weight;\n        if (layout.horizontal) {\n            layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n            layout.height = hBoxMaxHeight;\n        } else {\n            layout.width = vBoxMaxWidth;\n            layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n        }\n    }\n    return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n    const layoutBoxes = wrapBoxes(boxes);\n    const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n    const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n    const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n    const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n    const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n    const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n    const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n    return {\n        fullSize,\n        leftAndTop: left.concat(top),\n        rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n        chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n        vertical: left.concat(right).concat(centerVertical),\n        horizontal: top.concat(bottom).concat(centerHorizontal)\n    };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n    return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n    maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n    maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n    maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n    maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n    const { pos , box  } = layout;\n    const maxPadding = chartArea.maxPadding;\n    if (!isObject(pos)) {\n        if (layout.size) {\n            chartArea[pos] -= layout.size;\n        }\n        const stack = stacks[layout.stack] || {\n            size: 0,\n            count: 1\n        };\n        stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n        layout.size = stack.size / stack.count;\n        chartArea[pos] += layout.size;\n    }\n    if (box.getPadding) {\n        updateMaxPadding(maxPadding, box.getPadding());\n    }\n    const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n    const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n    const widthChanged = newWidth !== chartArea.w;\n    const heightChanged = newHeight !== chartArea.h;\n    chartArea.w = newWidth;\n    chartArea.h = newHeight;\n    return layout.horizontal ? {\n        same: widthChanged,\n        other: heightChanged\n    } : {\n        same: heightChanged,\n        other: widthChanged\n    };\n}\nfunction handleMaxPadding(chartArea) {\n    const maxPadding = chartArea.maxPadding;\n    function updatePos(pos) {\n        const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n        chartArea[pos] += change;\n        return change;\n    }\n    chartArea.y += updatePos('top');\n    chartArea.x += updatePos('left');\n    updatePos('right');\n    updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n    const maxPadding = chartArea.maxPadding;\n    function marginForPositions(positions) {\n        const margin = {\n            left: 0,\n            top: 0,\n            right: 0,\n            bottom: 0\n        };\n        positions.forEach((pos)=>{\n            margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n        });\n        return margin;\n    }\n    return horizontal ? marginForPositions([\n        'left',\n        'right'\n    ]) : marginForPositions([\n        'top',\n        'bottom'\n    ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n    const refitBoxes = [];\n    let i, ilen, layout, box, refit, changed;\n    for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n        layout = boxes[i];\n        box = layout.box;\n        box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n        const { same , other  } = updateDims(chartArea, params, layout, stacks);\n        refit |= same && refitBoxes.length;\n        changed = changed || other;\n        if (!box.fullSize) {\n            refitBoxes.push(layout);\n        }\n    }\n    return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n    box.top = top;\n    box.left = left;\n    box.right = left + width;\n    box.bottom = top + height;\n    box.width = width;\n    box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n    const userPadding = params.padding;\n    let { x , y  } = chartArea;\n    for (const layout of boxes){\n        const box = layout.box;\n        const stack = stacks[layout.stack] || {\n            count: 1,\n            placed: 0,\n            weight: 1\n        };\n        const weight = layout.stackWeight / stack.weight || 1;\n        if (layout.horizontal) {\n            const width = chartArea.w * weight;\n            const height = stack.size || box.height;\n            if (defined(stack.start)) {\n                y = stack.start;\n            }\n            if (box.fullSize) {\n                setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n            } else {\n                setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n            }\n            stack.start = y;\n            stack.placed += width;\n            y = box.bottom;\n        } else {\n            const height = chartArea.h * weight;\n            const width = stack.size || box.width;\n            if (defined(stack.start)) {\n                x = stack.start;\n            }\n            if (box.fullSize) {\n                setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n            } else {\n                setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n            }\n            stack.start = x;\n            stack.placed += height;\n            x = box.right;\n        }\n    }\n    chartArea.x = x;\n    chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n        if (!chart.boxes) {\n            chart.boxes = [];\n        }\n        item.fullSize = item.fullSize || false;\n        item.position = item.position || 'top';\n        item.weight = item.weight || 0;\n        item._layers = item._layers || function() {\n            return [\n                {\n                    z: 0,\n                    draw (chartArea) {\n                        item.draw(chartArea);\n                    }\n                }\n            ];\n        };\n        chart.boxes.push(item);\n    },\n removeBox (chart, layoutItem) {\n        const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n        if (index !== -1) {\n            chart.boxes.splice(index, 1);\n        }\n    },\n configure (chart, item, options) {\n        item.fullSize = options.fullSize;\n        item.position = options.position;\n        item.weight = options.weight;\n    },\n update (chart, width, height, minPadding) {\n        if (!chart) {\n            return;\n        }\n        const padding = toPadding(chart.options.layout.padding);\n        const availableWidth = Math.max(width - padding.width, 0);\n        const availableHeight = Math.max(height - padding.height, 0);\n        const boxes = buildLayoutBoxes(chart.boxes);\n        const verticalBoxes = boxes.vertical;\n        const horizontalBoxes = boxes.horizontal;\n        each(chart.boxes, (box)=>{\n            if (typeof box.beforeLayout === 'function') {\n                box.beforeLayout();\n            }\n        });\n        const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n        const params = Object.freeze({\n            outerWidth: width,\n            outerHeight: height,\n            padding,\n            availableWidth,\n            availableHeight,\n            vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n            hBoxMaxHeight: availableHeight / 2\n        });\n        const maxPadding = Object.assign({}, padding);\n        updateMaxPadding(maxPadding, toPadding(minPadding));\n        const chartArea = Object.assign({\n            maxPadding,\n            w: availableWidth,\n            h: availableHeight,\n            x: padding.left,\n            y: padding.top\n        }, padding);\n        const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n        fitBoxes(boxes.fullSize, chartArea, params, stacks);\n        fitBoxes(verticalBoxes, chartArea, params, stacks);\n        if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n            fitBoxes(verticalBoxes, chartArea, params, stacks);\n        }\n        handleMaxPadding(chartArea);\n        placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n        chartArea.x += chartArea.w;\n        chartArea.y += chartArea.h;\n        placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n        chart.chartArea = {\n            left: chartArea.left,\n            top: chartArea.top,\n            right: chartArea.left + chartArea.w,\n            bottom: chartArea.top + chartArea.h,\n            height: chartArea.h,\n            width: chartArea.w\n        };\n        each(boxes.chartArea, (layout)=>{\n            const box = layout.box;\n            Object.assign(box, chart.chartArea);\n            box.update(chartArea.w, chartArea.h, {\n                left: 0,\n                top: 0,\n                right: 0,\n                bottom: 0\n            });\n        });\n    }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n        return false;\n    }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n        return 1;\n    }\n getMaximumSize(element, width, height, aspectRatio) {\n        width = Math.max(0, width || element.width);\n        height = height || element.height;\n        return {\n            width,\n            height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n        };\n    }\n isAttached(canvas) {\n        return true;\n    }\n updateConfig(config) {\n    }\n}\n\nclass BasicPlatform extends BasePlatform {\n    acquireContext(item) {\n        return item && item.getContext && item.getContext('2d') || null;\n    }\n    updateConfig(config) {\n        config.options.animation = false;\n    }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n    touchstart: 'mousedown',\n    touchmove: 'mousemove',\n    touchend: 'mouseup',\n    pointerenter: 'mouseenter',\n    pointerdown: 'mousedown',\n    pointermove: 'mousemove',\n    pointerup: 'mouseup',\n    pointerleave: 'mouseout',\n    pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n    const style = canvas.style;\n    const renderHeight = canvas.getAttribute('height');\n    const renderWidth = canvas.getAttribute('width');\n    canvas[EXPANDO_KEY] = {\n        initial: {\n            height: renderHeight,\n            width: renderWidth,\n            style: {\n                display: style.display,\n                height: style.height,\n                width: style.width\n            }\n        }\n    };\n    style.display = style.display || 'block';\n    style.boxSizing = style.boxSizing || 'border-box';\n    if (isNullOrEmpty(renderWidth)) {\n        const displayWidth = readUsedSize(canvas, 'width');\n        if (displayWidth !== undefined) {\n            canvas.width = displayWidth;\n        }\n    }\n    if (isNullOrEmpty(renderHeight)) {\n        if (canvas.style.height === '') {\n            canvas.height = canvas.width / (aspectRatio || 2);\n        } else {\n            const displayHeight = readUsedSize(canvas, 'height');\n            if (displayHeight !== undefined) {\n                canvas.height = displayHeight;\n            }\n        }\n    }\n    return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n    passive: true\n} : false;\nfunction addListener(node, type, listener) {\n    if (node) {\n        node.addEventListener(type, listener, eventListenerOptions);\n    }\n}\nfunction removeListener(chart, type, listener) {\n    if (chart && chart.canvas) {\n        chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n    }\n}\nfunction fromNativeEvent(event, chart) {\n    const type = EVENT_TYPES[event.type] || event.type;\n    const { x , y  } = getRelativePosition(event, chart);\n    return {\n        type,\n        chart,\n        native: event,\n        x: x !== undefined ? x : null,\n        y: y !== undefined ? y : null\n    };\n}\nfunction nodeListContains(nodeList, canvas) {\n    for (const node of nodeList){\n        if (node === canvas || node.contains(canvas)) {\n            return true;\n        }\n    }\n}\nfunction createAttachObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const observer = new MutationObserver((entries)=>{\n        let trigger = false;\n        for (const entry of entries){\n            trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n            trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n        }\n        if (trigger) {\n            listener();\n        }\n    });\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    });\n    return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const observer = new MutationObserver((entries)=>{\n        let trigger = false;\n        for (const entry of entries){\n            trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n            trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n        }\n        if (trigger) {\n            listener();\n        }\n    });\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    });\n    return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n    const dpr = window.devicePixelRatio;\n    if (dpr === oldDevicePixelRatio) {\n        return;\n    }\n    oldDevicePixelRatio = dpr;\n    drpListeningCharts.forEach((resize, chart)=>{\n        if (chart.currentDevicePixelRatio !== dpr) {\n            resize();\n        }\n    });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n    if (!drpListeningCharts.size) {\n        window.addEventListener('resize', onWindowResize);\n    }\n    drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n    drpListeningCharts.delete(chart);\n    if (!drpListeningCharts.size) {\n        window.removeEventListener('resize', onWindowResize);\n    }\n}\nfunction createResizeObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const container = canvas && _getParentNode(canvas);\n    if (!container) {\n        return;\n    }\n    const resize = throttled((width, height)=>{\n        const w = container.clientWidth;\n        listener(width, height);\n        if (w < container.clientWidth) {\n            listener();\n        }\n    }, window);\n    const observer = new ResizeObserver((entries)=>{\n        const entry = entries[0];\n        const width = entry.contentRect.width;\n        const height = entry.contentRect.height;\n        if (width === 0 && height === 0) {\n            return;\n        }\n        resize(width, height);\n    });\n    observer.observe(container);\n    listenDevicePixelRatioChanges(chart, resize);\n    return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n    if (observer) {\n        observer.disconnect();\n    }\n    if (type === 'resize') {\n        unlistenDevicePixelRatioChanges(chart);\n    }\n}\nfunction createProxyAndListen(chart, type, listener) {\n    const canvas = chart.canvas;\n    const proxy = throttled((event)=>{\n        if (chart.ctx !== null) {\n            listener(fromNativeEvent(event, chart));\n        }\n    }, chart);\n    addListener(canvas, type, proxy);\n    return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n        const context = canvas && canvas.getContext && canvas.getContext('2d');\n        if (context && context.canvas === canvas) {\n            initCanvas(canvas, aspectRatio);\n            return context;\n        }\n        return null;\n    }\n releaseContext(context) {\n        const canvas = context.canvas;\n        if (!canvas[EXPANDO_KEY]) {\n            return false;\n        }\n        const initial = canvas[EXPANDO_KEY].initial;\n        [\n            'height',\n            'width'\n        ].forEach((prop)=>{\n            const value = initial[prop];\n            if (isNullOrUndef(value)) {\n                canvas.removeAttribute(prop);\n            } else {\n                canvas.setAttribute(prop, value);\n            }\n        });\n        const style = initial.style || {};\n        Object.keys(style).forEach((key)=>{\n            canvas.style[key] = style[key];\n        });\n        canvas.width = canvas.width;\n        delete canvas[EXPANDO_KEY];\n        return true;\n    }\n addEventListener(chart, type, listener) {\n        this.removeEventListener(chart, type);\n        const proxies = chart.$proxies || (chart.$proxies = {});\n        const handlers = {\n            attach: createAttachObserver,\n            detach: createDetachObserver,\n            resize: createResizeObserver\n        };\n        const handler = handlers[type] || createProxyAndListen;\n        proxies[type] = handler(chart, type, listener);\n    }\n removeEventListener(chart, type) {\n        const proxies = chart.$proxies || (chart.$proxies = {});\n        const proxy = proxies[type];\n        if (!proxy) {\n            return;\n        }\n        const handlers = {\n            attach: releaseObserver,\n            detach: releaseObserver,\n            resize: releaseObserver\n        };\n        const handler = handlers[type] || removeListener;\n        handler(chart, type, proxy);\n        proxies[type] = undefined;\n    }\n    getDevicePixelRatio() {\n        return window.devicePixelRatio;\n    }\n getMaximumSize(canvas, width, height, aspectRatio) {\n        return getMaximumSize(canvas, width, height, aspectRatio);\n    }\n isAttached(canvas) {\n        const container = canvas && _getParentNode(canvas);\n        return !!(container && container.isConnected);\n    }\n}\n\nfunction _detectPlatform(canvas) {\n    if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n        return BasicPlatform;\n    }\n    return DomPlatform;\n}\n\nclass Element {\n    static defaults = {};\n    static defaultRoutes = undefined;\n    x;\n    y;\n    active = false;\n    options;\n    $animations;\n    tooltipPosition(useFinalPosition) {\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return {\n            x,\n            y\n        };\n    }\n    hasValue() {\n        return isNumber(this.x) && isNumber(this.y);\n    }\n    getProps(props, final) {\n        const anims = this.$animations;\n        if (!final || !anims) {\n            // let's not create an object, if not needed\n            return this;\n        }\n        const ret = {};\n        props.forEach((prop)=>{\n            ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n        });\n        return ret;\n    }\n}\n\nfunction autoSkip(scale, ticks) {\n    const tickOpts = scale.options.ticks;\n    const determinedMaxTicks = determineMaxTicks(scale);\n    const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n    const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n    const numMajorIndices = majorIndices.length;\n    const first = majorIndices[0];\n    const last = majorIndices[numMajorIndices - 1];\n    const newTicks = [];\n    if (numMajorIndices > ticksLimit) {\n        skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n        return newTicks;\n    }\n    const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n    if (numMajorIndices > 0) {\n        let i, ilen;\n        const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n        skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n        for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n            skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n        }\n        skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n        return newTicks;\n    }\n    skip(ticks, newTicks, spacing);\n    return newTicks;\n}\nfunction determineMaxTicks(scale) {\n    const offset = scale.options.offset;\n    const tickLength = scale._tickSize();\n    const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n    const maxChart = scale._maxLength / tickLength;\n    return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n    const evenMajorSpacing = getEvenSpacing(majorIndices);\n    const spacing = ticks.length / ticksLimit;\n    if (!evenMajorSpacing) {\n        return Math.max(spacing, 1);\n    }\n    const factors = _factorize(evenMajorSpacing);\n    for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n        const factor = factors[i];\n        if (factor > spacing) {\n            return factor;\n        }\n    }\n    return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n    const result = [];\n    let i, ilen;\n    for(i = 0, ilen = ticks.length; i < ilen; i++){\n        if (ticks[i].major) {\n            result.push(i);\n        }\n    }\n    return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n    let count = 0;\n    let next = majorIndices[0];\n    let i;\n    spacing = Math.ceil(spacing);\n    for(i = 0; i < ticks.length; i++){\n        if (i === next) {\n            newTicks.push(ticks[i]);\n            count++;\n            next = majorIndices[count * spacing];\n        }\n    }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n    const start = valueOrDefault(majorStart, 0);\n    const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n    let count = 0;\n    let length, i, next;\n    spacing = Math.ceil(spacing);\n    if (majorEnd) {\n        length = majorEnd - majorStart;\n        spacing = length / Math.floor(length / spacing);\n    }\n    next = start;\n    while(next < 0){\n        count++;\n        next = Math.round(start + count * spacing);\n    }\n    for(i = Math.max(start, 0); i < end; i++){\n        if (i === next) {\n            newTicks.push(ticks[i]);\n            count++;\n            next = Math.round(start + count * spacing);\n        }\n    }\n}\n function getEvenSpacing(arr) {\n    const len = arr.length;\n    let i, diff;\n    if (len < 2) {\n        return false;\n    }\n    for(diff = arr[0], i = 1; i < len; ++i){\n        if (arr[i] - arr[i - 1] !== diff) {\n            return false;\n        }\n    }\n    return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n    const result = [];\n    const increment = arr.length / numItems;\n    const len = arr.length;\n    let i = 0;\n    for(; i < len; i += increment){\n        result.push(arr[Math.floor(i)]);\n    }\n    return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n    const length = scale.ticks.length;\n    const validIndex = Math.min(index, length - 1);\n    const start = scale._startPixel;\n    const end = scale._endPixel;\n    const epsilon = 1e-6;\n    let lineValue = scale.getPixelForTick(validIndex);\n    let offset;\n    if (offsetGridLines) {\n        if (length === 1) {\n            offset = Math.max(lineValue - start, end - lineValue);\n        } else if (index === 0) {\n            offset = (scale.getPixelForTick(1) - lineValue) / 2;\n        } else {\n            offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n        }\n        lineValue += validIndex < index ? offset : -offset;\n        if (lineValue < start - epsilon || lineValue > end + epsilon) {\n            return;\n        }\n    }\n    return lineValue;\n}\n function garbageCollect(caches, length) {\n    each(caches, (cache)=>{\n        const gc = cache.gc;\n        const gcLen = gc.length / 2;\n        let i;\n        if (gcLen > length) {\n            for(i = 0; i < gcLen; ++i){\n                delete cache.data[gc[i]];\n            }\n            gc.splice(0, gcLen);\n        }\n    });\n}\n function getTickMarkLength(options) {\n    return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n    if (!options.display) {\n        return 0;\n    }\n    const font = toFont(options.font, fallback);\n    const padding = toPadding(options.padding);\n    const lines = isArray(options.text) ? options.text.length : 1;\n    return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n    return createContext(parent, {\n        scale,\n        type: 'scale'\n    });\n}\nfunction createTickContext(parent, index, tick) {\n    return createContext(parent, {\n        tick,\n        index,\n        type: 'tick'\n    });\n}\nfunction titleAlign(align, position, reverse) {\n     let ret = _toLeftRightCenter(align);\n    if (reverse && position !== 'right' || !reverse && position === 'right') {\n        ret = reverseAlign(ret);\n    }\n    return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n    const { top , left , bottom , right , chart  } = scale;\n    const { chartArea , scales  } = chart;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    const height = bottom - top;\n    const width = right - left;\n    if (scale.isHorizontal()) {\n        titleX = _alignStartEnd(align, left, right);\n        if (isObject(position)) {\n            const positionAxisID = Object.keys(position)[0];\n            const value = position[positionAxisID];\n            titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n        } else if (position === 'center') {\n            titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n        } else {\n            titleY = offsetFromEdge(scale, position, offset);\n        }\n        maxWidth = right - left;\n    } else {\n        if (isObject(position)) {\n            const positionAxisID = Object.keys(position)[0];\n            const value = position[positionAxisID];\n            titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n        } else if (position === 'center') {\n            titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n        } else {\n            titleX = offsetFromEdge(scale, position, offset);\n        }\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = position === 'left' ? -HALF_PI : HALF_PI;\n    }\n    return {\n        titleX,\n        titleY,\n        maxWidth,\n        rotation\n    };\n}\nclass Scale extends Element {\n    constructor(cfg){\n        super();\n         this.id = cfg.id;\n         this.type = cfg.type;\n         this.options = undefined;\n         this.ctx = cfg.ctx;\n         this.chart = cfg.chart;\n         this.top = undefined;\n         this.bottom = undefined;\n         this.left = undefined;\n         this.right = undefined;\n         this.width = undefined;\n         this.height = undefined;\n        this._margins = {\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0\n        };\n         this.maxWidth = undefined;\n         this.maxHeight = undefined;\n         this.paddingTop = undefined;\n         this.paddingBottom = undefined;\n         this.paddingLeft = undefined;\n         this.paddingRight = undefined;\n         this.axis = undefined;\n         this.labelRotation = undefined;\n        this.min = undefined;\n        this.max = undefined;\n        this._range = undefined;\n         this.ticks = [];\n         this._gridLineItems = null;\n         this._labelItems = null;\n         this._labelSizes = null;\n        this._length = 0;\n        this._maxLength = 0;\n        this._longestTextCache = {};\n         this._startPixel = undefined;\n         this._endPixel = undefined;\n        this._reversePixels = false;\n        this._userMax = undefined;\n        this._userMin = undefined;\n        this._suggestedMax = undefined;\n        this._suggestedMin = undefined;\n        this._ticksLength = 0;\n        this._borderValue = 0;\n        this._cache = {};\n        this._dataLimitsCached = false;\n        this.$context = undefined;\n    }\n init(options) {\n        this.options = options.setContext(this.getContext());\n        this.axis = options.axis;\n        this._userMin = this.parse(options.min);\n        this._userMax = this.parse(options.max);\n        this._suggestedMin = this.parse(options.suggestedMin);\n        this._suggestedMax = this.parse(options.suggestedMax);\n    }\n parse(raw, index) {\n        return raw;\n    }\n getUserBounds() {\n        let { _userMin , _userMax , _suggestedMin , _suggestedMax  } = this;\n        _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n        _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n        _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n        _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n        return {\n            min: finiteOrDefault(_userMin, _suggestedMin),\n            max: finiteOrDefault(_userMax, _suggestedMax),\n            minDefined: isNumberFinite(_userMin),\n            maxDefined: isNumberFinite(_userMax)\n        };\n    }\n getMinMax(canStack) {\n        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n        let range;\n        if (minDefined && maxDefined) {\n            return {\n                min,\n                max\n            };\n        }\n        const metas = this.getMatchingVisibleMetas();\n        for(let i = 0, ilen = metas.length; i < ilen; ++i){\n            range = metas[i].controller.getMinMax(this, canStack);\n            if (!minDefined) {\n                min = Math.min(min, range.min);\n            }\n            if (!maxDefined) {\n                max = Math.max(max, range.max);\n            }\n        }\n        min = maxDefined && min > max ? max : min;\n        max = minDefined && min > max ? min : max;\n        return {\n            min: finiteOrDefault(min, finiteOrDefault(max, min)),\n            max: finiteOrDefault(max, finiteOrDefault(min, max))\n        };\n    }\n getPadding() {\n        return {\n            left: this.paddingLeft || 0,\n            top: this.paddingTop || 0,\n            right: this.paddingRight || 0,\n            bottom: this.paddingBottom || 0\n        };\n    }\n getTicks() {\n        return this.ticks;\n    }\n getLabels() {\n        const data = this.chart.data;\n        return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n    }\n getLabelItems(chartArea = this.chart.chartArea) {\n        const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n        return items;\n    }\n    beforeLayout() {\n        this._cache = {};\n        this._dataLimitsCached = false;\n    }\n    beforeUpdate() {\n        callback(this.options.beforeUpdate, [\n            this\n        ]);\n    }\n update(maxWidth, maxHeight, margins) {\n        const { beginAtZero , grace , ticks: tickOpts  } = this.options;\n        const sampleSize = tickOpts.sampleSize;\n        this.beforeUpdate();\n        this.maxWidth = maxWidth;\n        this.maxHeight = maxHeight;\n        this._margins = margins = Object.assign({\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0\n        }, margins);\n        this.ticks = null;\n        this._labelSizes = null;\n        this._gridLineItems = null;\n        this._labelItems = null;\n        this.beforeSetDimensions();\n        this.setDimensions();\n        this.afterSetDimensions();\n        this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n        if (!this._dataLimitsCached) {\n            this.beforeDataLimits();\n            this.determineDataLimits();\n            this.afterDataLimits();\n            this._range = _addGrace(this, grace, beginAtZero);\n            this._dataLimitsCached = true;\n        }\n        this.beforeBuildTicks();\n        this.ticks = this.buildTicks() || [];\n        this.afterBuildTicks();\n        const samplingEnabled = sampleSize < this.ticks.length;\n        this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n        this.configure();\n        this.beforeCalculateLabelRotation();\n        this.calculateLabelRotation();\n        this.afterCalculateLabelRotation();\n        if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n            this.ticks = autoSkip(this, this.ticks);\n            this._labelSizes = null;\n            this.afterAutoSkip();\n        }\n        if (samplingEnabled) {\n            this._convertTicksToLabels(this.ticks);\n        }\n        this.beforeFit();\n        this.fit();\n        this.afterFit();\n        this.afterUpdate();\n    }\n configure() {\n        let reversePixels = this.options.reverse;\n        let startPixel, endPixel;\n        if (this.isHorizontal()) {\n            startPixel = this.left;\n            endPixel = this.right;\n        } else {\n            startPixel = this.top;\n            endPixel = this.bottom;\n            reversePixels = !reversePixels;\n        }\n        this._startPixel = startPixel;\n        this._endPixel = endPixel;\n        this._reversePixels = reversePixels;\n        this._length = endPixel - startPixel;\n        this._alignToPixels = this.options.alignToPixels;\n    }\n    afterUpdate() {\n        callback(this.options.afterUpdate, [\n            this\n        ]);\n    }\n    beforeSetDimensions() {\n        callback(this.options.beforeSetDimensions, [\n            this\n        ]);\n    }\n    setDimensions() {\n        if (this.isHorizontal()) {\n            this.width = this.maxWidth;\n            this.left = 0;\n            this.right = this.width;\n        } else {\n            this.height = this.maxHeight;\n            this.top = 0;\n            this.bottom = this.height;\n        }\n        this.paddingLeft = 0;\n        this.paddingTop = 0;\n        this.paddingRight = 0;\n        this.paddingBottom = 0;\n    }\n    afterSetDimensions() {\n        callback(this.options.afterSetDimensions, [\n            this\n        ]);\n    }\n    _callHooks(name) {\n        this.chart.notifyPlugins(name, this.getContext());\n        callback(this.options[name], [\n            this\n        ]);\n    }\n    beforeDataLimits() {\n        this._callHooks('beforeDataLimits');\n    }\n    determineDataLimits() {}\n    afterDataLimits() {\n        this._callHooks('afterDataLimits');\n    }\n    beforeBuildTicks() {\n        this._callHooks('beforeBuildTicks');\n    }\n buildTicks() {\n        return [];\n    }\n    afterBuildTicks() {\n        this._callHooks('afterBuildTicks');\n    }\n    beforeTickToLabelConversion() {\n        callback(this.options.beforeTickToLabelConversion, [\n            this\n        ]);\n    }\n generateTickLabels(ticks) {\n        const tickOpts = this.options.ticks;\n        let i, ilen, tick;\n        for(i = 0, ilen = ticks.length; i < ilen; i++){\n            tick = ticks[i];\n            tick.label = callback(tickOpts.callback, [\n                tick.value,\n                i,\n                ticks\n            ], this);\n        }\n    }\n    afterTickToLabelConversion() {\n        callback(this.options.afterTickToLabelConversion, [\n            this\n        ]);\n    }\n    beforeCalculateLabelRotation() {\n        callback(this.options.beforeCalculateLabelRotation, [\n            this\n        ]);\n    }\n    calculateLabelRotation() {\n        const options = this.options;\n        const tickOpts = options.ticks;\n        const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n        const minRotation = tickOpts.minRotation || 0;\n        const maxRotation = tickOpts.maxRotation;\n        let labelRotation = minRotation;\n        let tickWidth, maxHeight, maxLabelDiagonal;\n        if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n            this.labelRotation = minRotation;\n            return;\n        }\n        const labelSizes = this._getLabelSizes();\n        const maxLabelWidth = labelSizes.widest.width;\n        const maxLabelHeight = labelSizes.highest.height;\n        const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n        tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n        if (maxLabelWidth + 6 > tickWidth) {\n            tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n            maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n            maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n            labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n            labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n        }\n        this.labelRotation = labelRotation;\n    }\n    afterCalculateLabelRotation() {\n        callback(this.options.afterCalculateLabelRotation, [\n            this\n        ]);\n    }\n    afterAutoSkip() {}\n    beforeFit() {\n        callback(this.options.beforeFit, [\n            this\n        ]);\n    }\n    fit() {\n        const minSize = {\n            width: 0,\n            height: 0\n        };\n        const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts  }  } = this;\n        const display = this._isVisible();\n        const isHorizontal = this.isHorizontal();\n        if (display) {\n            const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n            if (isHorizontal) {\n                minSize.width = this.maxWidth;\n                minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n            } else {\n                minSize.height = this.maxHeight;\n                minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n            }\n            if (tickOpts.display && this.ticks.length) {\n                const { first , last , widest , highest  } = this._getLabelSizes();\n                const tickPadding = tickOpts.padding * 2;\n                const angleRadians = toRadians(this.labelRotation);\n                const cos = Math.cos(angleRadians);\n                const sin = Math.sin(angleRadians);\n                if (isHorizontal) {\n                    const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n                    minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n                } else {\n                    const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n                    minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n                }\n                this._calculatePadding(first, last, sin, cos);\n            }\n        }\n        this._handleMargins();\n        if (isHorizontal) {\n            this.width = this._length = chart.width - this._margins.left - this._margins.right;\n            this.height = minSize.height;\n        } else {\n            this.width = minSize.width;\n            this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n        }\n    }\n    _calculatePadding(first, last, sin, cos) {\n        const { ticks: { align , padding  } , position  } = this.options;\n        const isRotated = this.labelRotation !== 0;\n        const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n        if (this.isHorizontal()) {\n            const offsetLeft = this.getPixelForTick(0) - this.left;\n            const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n            let paddingLeft = 0;\n            let paddingRight = 0;\n            if (isRotated) {\n                if (labelsBelowTicks) {\n                    paddingLeft = cos * first.width;\n                    paddingRight = sin * last.height;\n                } else {\n                    paddingLeft = sin * first.height;\n                    paddingRight = cos * last.width;\n                }\n            } else if (align === 'start') {\n                paddingRight = last.width;\n            } else if (align === 'end') {\n                paddingLeft = first.width;\n            } else if (align !== 'inner') {\n                paddingLeft = first.width / 2;\n                paddingRight = last.width / 2;\n            }\n            this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n            this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n        } else {\n            let paddingTop = last.height / 2;\n            let paddingBottom = first.height / 2;\n            if (align === 'start') {\n                paddingTop = 0;\n                paddingBottom = first.height;\n            } else if (align === 'end') {\n                paddingTop = last.height;\n                paddingBottom = 0;\n            }\n            this.paddingTop = paddingTop + padding;\n            this.paddingBottom = paddingBottom + padding;\n        }\n    }\n _handleMargins() {\n        if (this._margins) {\n            this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n            this._margins.top = Math.max(this.paddingTop, this._margins.top);\n            this._margins.right = Math.max(this.paddingRight, this._margins.right);\n            this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n        }\n    }\n    afterFit() {\n        callback(this.options.afterFit, [\n            this\n        ]);\n    }\n isHorizontal() {\n        const { axis , position  } = this.options;\n        return position === 'top' || position === 'bottom' || axis === 'x';\n    }\n isFullSize() {\n        return this.options.fullSize;\n    }\n _convertTicksToLabels(ticks) {\n        this.beforeTickToLabelConversion();\n        this.generateTickLabels(ticks);\n        let i, ilen;\n        for(i = 0, ilen = ticks.length; i < ilen; i++){\n            if (isNullOrUndef(ticks[i].label)) {\n                ticks.splice(i, 1);\n                ilen--;\n                i--;\n            }\n        }\n        this.afterTickToLabelConversion();\n    }\n _getLabelSizes() {\n        let labelSizes = this._labelSizes;\n        if (!labelSizes) {\n            const sampleSize = this.options.ticks.sampleSize;\n            let ticks = this.ticks;\n            if (sampleSize < ticks.length) {\n                ticks = sample(ticks, sampleSize);\n            }\n            this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n        }\n        return labelSizes;\n    }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n        const { ctx , _longestTextCache: caches  } = this;\n        const widths = [];\n        const heights = [];\n        const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n        let widestLabelSize = 0;\n        let highestLabelSize = 0;\n        let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n        for(i = 0; i < length; i += increment){\n            label = ticks[i].label;\n            tickFont = this._resolveTickFontOptions(i);\n            ctx.font = fontString = tickFont.string;\n            cache = caches[fontString] = caches[fontString] || {\n                data: {},\n                gc: []\n            };\n            lineHeight = tickFont.lineHeight;\n            width = height = 0;\n            if (!isNullOrUndef(label) && !isArray(label)) {\n                width = _measureText(ctx, cache.data, cache.gc, width, label);\n                height = lineHeight;\n            } else if (isArray(label)) {\n                for(j = 0, jlen = label.length; j < jlen; ++j){\n                    nestedLabel =  label[j];\n                    if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n                        width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n                        height += lineHeight;\n                    }\n                }\n            }\n            widths.push(width);\n            heights.push(height);\n            widestLabelSize = Math.max(width, widestLabelSize);\n            highestLabelSize = Math.max(height, highestLabelSize);\n        }\n        garbageCollect(caches, length);\n        const widest = widths.indexOf(widestLabelSize);\n        const highest = heights.indexOf(highestLabelSize);\n        const valueAt = (idx)=>({\n                width: widths[idx] || 0,\n                height: heights[idx] || 0\n            });\n        return {\n            first: valueAt(0),\n            last: valueAt(length - 1),\n            widest: valueAt(widest),\n            highest: valueAt(highest),\n            widths,\n            heights\n        };\n    }\n getLabelForValue(value) {\n        return value;\n    }\n getPixelForValue(value, index) {\n        return NaN;\n    }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n        const ticks = this.ticks;\n        if (index < 0 || index > ticks.length - 1) {\n            return null;\n        }\n        return this.getPixelForValue(ticks[index].value);\n    }\n getPixelForDecimal(decimal) {\n        if (this._reversePixels) {\n            decimal = 1 - decimal;\n        }\n        const pixel = this._startPixel + decimal * this._length;\n        return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n    }\n getDecimalForPixel(pixel) {\n        const decimal = (pixel - this._startPixel) / this._length;\n        return this._reversePixels ? 1 - decimal : decimal;\n    }\n getBasePixel() {\n        return this.getPixelForValue(this.getBaseValue());\n    }\n getBaseValue() {\n        const { min , max  } = this;\n        return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n    }\n getContext(index) {\n        const ticks = this.ticks || [];\n        if (index >= 0 && index < ticks.length) {\n            const tick = ticks[index];\n            return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n        }\n        return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n    }\n _tickSize() {\n        const optionTicks = this.options.ticks;\n        const rot = toRadians(this.labelRotation);\n        const cos = Math.abs(Math.cos(rot));\n        const sin = Math.abs(Math.sin(rot));\n        const labelSizes = this._getLabelSizes();\n        const padding = optionTicks.autoSkipPadding || 0;\n        const w = labelSizes ? labelSizes.widest.width + padding : 0;\n        const h = labelSizes ? labelSizes.highest.height + padding : 0;\n        return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n    }\n _isVisible() {\n        const display = this.options.display;\n        if (display !== 'auto') {\n            return !!display;\n        }\n        return this.getMatchingVisibleMetas().length > 0;\n    }\n _computeGridLineItems(chartArea) {\n        const axis = this.axis;\n        const chart = this.chart;\n        const options = this.options;\n        const { grid , position , border  } = options;\n        const offset = grid.offset;\n        const isHorizontal = this.isHorizontal();\n        const ticks = this.ticks;\n        const ticksLength = ticks.length + (offset ? 1 : 0);\n        const tl = getTickMarkLength(grid);\n        const items = [];\n        const borderOpts = border.setContext(this.getContext());\n        const axisWidth = borderOpts.display ? borderOpts.width : 0;\n        const axisHalfWidth = axisWidth / 2;\n        const alignBorderValue = function(pixel) {\n            return _alignPixel(chart, pixel, axisWidth);\n        };\n        let borderValue, i, lineValue, alignedLineValue;\n        let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n        if (position === 'top') {\n            borderValue = alignBorderValue(this.bottom);\n            ty1 = this.bottom - tl;\n            ty2 = borderValue - axisHalfWidth;\n            y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n            y2 = chartArea.bottom;\n        } else if (position === 'bottom') {\n            borderValue = alignBorderValue(this.top);\n            y1 = chartArea.top;\n            y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n            ty1 = borderValue + axisHalfWidth;\n            ty2 = this.top + tl;\n        } else if (position === 'left') {\n            borderValue = alignBorderValue(this.right);\n            tx1 = this.right - tl;\n            tx2 = borderValue - axisHalfWidth;\n            x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n            x2 = chartArea.right;\n        } else if (position === 'right') {\n            borderValue = alignBorderValue(this.left);\n            x1 = chartArea.left;\n            x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n            tx1 = borderValue + axisHalfWidth;\n            tx2 = this.left + tl;\n        } else if (axis === 'x') {\n            if (position === 'center') {\n                borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n            }\n            y1 = chartArea.top;\n            y2 = chartArea.bottom;\n            ty1 = borderValue + axisHalfWidth;\n            ty2 = ty1 + tl;\n        } else if (axis === 'y') {\n            if (position === 'center') {\n                borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n            }\n            tx1 = borderValue - axisHalfWidth;\n            tx2 = tx1 - tl;\n            x1 = chartArea.left;\n            x2 = chartArea.right;\n        }\n        const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n        const step = Math.max(1, Math.ceil(ticksLength / limit));\n        for(i = 0; i < ticksLength; i += step){\n            const context = this.getContext(i);\n            const optsAtIndex = grid.setContext(context);\n            const optsAtIndexBorder = border.setContext(context);\n            const lineWidth = optsAtIndex.lineWidth;\n            const lineColor = optsAtIndex.color;\n            const borderDash = optsAtIndexBorder.dash || [];\n            const borderDashOffset = optsAtIndexBorder.dashOffset;\n            const tickWidth = optsAtIndex.tickWidth;\n            const tickColor = optsAtIndex.tickColor;\n            const tickBorderDash = optsAtIndex.tickBorderDash || [];\n            const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n            lineValue = getPixelForGridLine(this, i, offset);\n            if (lineValue === undefined) {\n                continue;\n            }\n            alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n            if (isHorizontal) {\n                tx1 = tx2 = x1 = x2 = alignedLineValue;\n            } else {\n                ty1 = ty2 = y1 = y2 = alignedLineValue;\n            }\n            items.push({\n                tx1,\n                ty1,\n                tx2,\n                ty2,\n                x1,\n                y1,\n                x2,\n                y2,\n                width: lineWidth,\n                color: lineColor,\n                borderDash,\n                borderDashOffset,\n                tickWidth,\n                tickColor,\n                tickBorderDash,\n                tickBorderDashOffset\n            });\n        }\n        this._ticksLength = ticksLength;\n        this._borderValue = borderValue;\n        return items;\n    }\n _computeLabelItems(chartArea) {\n        const axis = this.axis;\n        const options = this.options;\n        const { position , ticks: optionTicks  } = options;\n        const isHorizontal = this.isHorizontal();\n        const ticks = this.ticks;\n        const { align , crossAlign , padding , mirror  } = optionTicks;\n        const tl = getTickMarkLength(options.grid);\n        const tickAndPadding = tl + padding;\n        const hTickAndPadding = mirror ? -padding : tickAndPadding;\n        const rotation = -toRadians(this.labelRotation);\n        const items = [];\n        let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n        let textBaseline = 'middle';\n        if (position === 'top') {\n            y = this.bottom - hTickAndPadding;\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (position === 'bottom') {\n            y = this.top + hTickAndPadding;\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (position === 'left') {\n            const ret = this._getYAxisLabelAlignment(tl);\n            textAlign = ret.textAlign;\n            x = ret.x;\n        } else if (position === 'right') {\n            const ret = this._getYAxisLabelAlignment(tl);\n            textAlign = ret.textAlign;\n            x = ret.x;\n        } else if (axis === 'x') {\n            if (position === 'center') {\n                y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n            }\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (axis === 'y') {\n            if (position === 'center') {\n                x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                x = this.chart.scales[positionAxisID].getPixelForValue(value);\n            }\n            textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n        }\n        if (axis === 'y') {\n            if (align === 'start') {\n                textBaseline = 'top';\n            } else if (align === 'end') {\n                textBaseline = 'bottom';\n            }\n        }\n        const labelSizes = this._getLabelSizes();\n        for(i = 0, ilen = ticks.length; i < ilen; ++i){\n            tick = ticks[i];\n            label = tick.label;\n            const optsAtIndex = optionTicks.setContext(this.getContext(i));\n            pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n            font = this._resolveTickFontOptions(i);\n            lineHeight = font.lineHeight;\n            lineCount = isArray(label) ? label.length : 1;\n            const halfCount = lineCount / 2;\n            const color = optsAtIndex.color;\n            const strokeColor = optsAtIndex.textStrokeColor;\n            const strokeWidth = optsAtIndex.textStrokeWidth;\n            let tickTextAlign = textAlign;\n            if (isHorizontal) {\n                x = pixel;\n                if (textAlign === 'inner') {\n                    if (i === ilen - 1) {\n                        tickTextAlign = !this.options.reverse ? 'right' : 'left';\n                    } else if (i === 0) {\n                        tickTextAlign = !this.options.reverse ? 'left' : 'right';\n                    } else {\n                        tickTextAlign = 'center';\n                    }\n                }\n                if (position === 'top') {\n                    if (crossAlign === 'near' || rotation !== 0) {\n                        textOffset = -lineCount * lineHeight + lineHeight / 2;\n                    } else if (crossAlign === 'center') {\n                        textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n                    } else {\n                        textOffset = -labelSizes.highest.height + lineHeight / 2;\n                    }\n                } else {\n                    if (crossAlign === 'near' || rotation !== 0) {\n                        textOffset = lineHeight / 2;\n                    } else if (crossAlign === 'center') {\n                        textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n                    } else {\n                        textOffset = labelSizes.highest.height - lineCount * lineHeight;\n                    }\n                }\n                if (mirror) {\n                    textOffset *= -1;\n                }\n                if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n                    x += lineHeight / 2 * Math.sin(rotation);\n                }\n            } else {\n                y = pixel;\n                textOffset = (1 - lineCount) * lineHeight / 2;\n            }\n            let backdrop;\n            if (optsAtIndex.showLabelBackdrop) {\n                const labelPadding = toPadding(optsAtIndex.backdropPadding);\n                const height = labelSizes.heights[i];\n                const width = labelSizes.widths[i];\n                let top = textOffset - labelPadding.top;\n                let left = 0 - labelPadding.left;\n                switch(textBaseline){\n                    case 'middle':\n                        top -= height / 2;\n                        break;\n                    case 'bottom':\n                        top -= height;\n                        break;\n                }\n                switch(textAlign){\n                    case 'center':\n                        left -= width / 2;\n                        break;\n                    case 'right':\n                        left -= width;\n                        break;\n                    case 'inner':\n                        if (i === ilen - 1) {\n                            left -= width;\n                        } else if (i > 0) {\n                            left -= width / 2;\n                        }\n                        break;\n                }\n                backdrop = {\n                    left,\n                    top,\n                    width: width + labelPadding.width,\n                    height: height + labelPadding.height,\n                    color: optsAtIndex.backdropColor\n                };\n            }\n            items.push({\n                label,\n                font,\n                textOffset,\n                options: {\n                    rotation,\n                    color,\n                    strokeColor,\n                    strokeWidth,\n                    textAlign: tickTextAlign,\n                    textBaseline,\n                    translation: [\n                        x,\n                        y\n                    ],\n                    backdrop\n                }\n            });\n        }\n        return items;\n    }\n    _getXAxisLabelAlignment() {\n        const { position , ticks  } = this.options;\n        const rotation = -toRadians(this.labelRotation);\n        if (rotation) {\n            return position === 'top' ? 'left' : 'right';\n        }\n        let align = 'center';\n        if (ticks.align === 'start') {\n            align = 'left';\n        } else if (ticks.align === 'end') {\n            align = 'right';\n        } else if (ticks.align === 'inner') {\n            align = 'inner';\n        }\n        return align;\n    }\n    _getYAxisLabelAlignment(tl) {\n        const { position , ticks: { crossAlign , mirror , padding  }  } = this.options;\n        const labelSizes = this._getLabelSizes();\n        const tickAndPadding = tl + padding;\n        const widest = labelSizes.widest.width;\n        let textAlign;\n        let x;\n        if (position === 'left') {\n            if (mirror) {\n                x = this.right + padding;\n                if (crossAlign === 'near') {\n                    textAlign = 'left';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x += widest / 2;\n                } else {\n                    textAlign = 'right';\n                    x += widest;\n                }\n            } else {\n                x = this.right - tickAndPadding;\n                if (crossAlign === 'near') {\n                    textAlign = 'right';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x -= widest / 2;\n                } else {\n                    textAlign = 'left';\n                    x = this.left;\n                }\n            }\n        } else if (position === 'right') {\n            if (mirror) {\n                x = this.left + padding;\n                if (crossAlign === 'near') {\n                    textAlign = 'right';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x -= widest / 2;\n                } else {\n                    textAlign = 'left';\n                    x -= widest;\n                }\n            } else {\n                x = this.left + tickAndPadding;\n                if (crossAlign === 'near') {\n                    textAlign = 'left';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x += widest / 2;\n                } else {\n                    textAlign = 'right';\n                    x = this.right;\n                }\n            }\n        } else {\n            textAlign = 'right';\n        }\n        return {\n            textAlign,\n            x\n        };\n    }\n _computeLabelArea() {\n        if (this.options.ticks.mirror) {\n            return;\n        }\n        const chart = this.chart;\n        const position = this.options.position;\n        if (position === 'left' || position === 'right') {\n            return {\n                top: 0,\n                left: this.left,\n                bottom: chart.height,\n                right: this.right\n            };\n        }\n        if (position === 'top' || position === 'bottom') {\n            return {\n                top: this.top,\n                left: 0,\n                bottom: this.bottom,\n                right: chart.width\n            };\n        }\n    }\n drawBackground() {\n        const { ctx , options: { backgroundColor  } , left , top , width , height  } = this;\n        if (backgroundColor) {\n            ctx.save();\n            ctx.fillStyle = backgroundColor;\n            ctx.fillRect(left, top, width, height);\n            ctx.restore();\n        }\n    }\n    getLineWidthForValue(value) {\n        const grid = this.options.grid;\n        if (!this._isVisible() || !grid.display) {\n            return 0;\n        }\n        const ticks = this.ticks;\n        const index = ticks.findIndex((t)=>t.value === value);\n        if (index >= 0) {\n            const opts = grid.setContext(this.getContext(index));\n            return opts.lineWidth;\n        }\n        return 0;\n    }\n drawGrid(chartArea) {\n        const grid = this.options.grid;\n        const ctx = this.ctx;\n        const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n        let i, ilen;\n        const drawLine = (p1, p2, style)=>{\n            if (!style.width || !style.color) {\n                return;\n            }\n            ctx.save();\n            ctx.lineWidth = style.width;\n            ctx.strokeStyle = style.color;\n            ctx.setLineDash(style.borderDash || []);\n            ctx.lineDashOffset = style.borderDashOffset;\n            ctx.beginPath();\n            ctx.moveTo(p1.x, p1.y);\n            ctx.lineTo(p2.x, p2.y);\n            ctx.stroke();\n            ctx.restore();\n        };\n        if (grid.display) {\n            for(i = 0, ilen = items.length; i < ilen; ++i){\n                const item = items[i];\n                if (grid.drawOnChartArea) {\n                    drawLine({\n                        x: item.x1,\n                        y: item.y1\n                    }, {\n                        x: item.x2,\n                        y: item.y2\n                    }, item);\n                }\n                if (grid.drawTicks) {\n                    drawLine({\n                        x: item.tx1,\n                        y: item.ty1\n                    }, {\n                        x: item.tx2,\n                        y: item.ty2\n                    }, {\n                        color: item.tickColor,\n                        width: item.tickWidth,\n                        borderDash: item.tickBorderDash,\n                        borderDashOffset: item.tickBorderDashOffset\n                    });\n                }\n            }\n        }\n    }\n drawBorder() {\n        const { chart , ctx , options: { border , grid  }  } = this;\n        const borderOpts = border.setContext(this.getContext());\n        const axisWidth = border.display ? borderOpts.width : 0;\n        if (!axisWidth) {\n            return;\n        }\n        const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n        const borderValue = this._borderValue;\n        let x1, x2, y1, y2;\n        if (this.isHorizontal()) {\n            x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n            x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n            y1 = y2 = borderValue;\n        } else {\n            y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n            y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n            x1 = x2 = borderValue;\n        }\n        ctx.save();\n        ctx.lineWidth = borderOpts.width;\n        ctx.strokeStyle = borderOpts.color;\n        ctx.beginPath();\n        ctx.moveTo(x1, y1);\n        ctx.lineTo(x2, y2);\n        ctx.stroke();\n        ctx.restore();\n    }\n drawLabels(chartArea) {\n        const optionTicks = this.options.ticks;\n        if (!optionTicks.display) {\n            return;\n        }\n        const ctx = this.ctx;\n        const area = this._computeLabelArea();\n        if (area) {\n            clipArea(ctx, area);\n        }\n        const items = this.getLabelItems(chartArea);\n        for (const item of items){\n            const renderTextOptions = item.options;\n            const tickFont = item.font;\n            const label = item.label;\n            const y = item.textOffset;\n            renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n        }\n        if (area) {\n            unclipArea(ctx);\n        }\n    }\n drawTitle() {\n        const { ctx , options: { position , title , reverse  }  } = this;\n        if (!title.display) {\n            return;\n        }\n        const font = toFont(title.font);\n        const padding = toPadding(title.padding);\n        const align = title.align;\n        let offset = font.lineHeight / 2;\n        if (position === 'bottom' || position === 'center' || isObject(position)) {\n            offset += padding.bottom;\n            if (isArray(title.text)) {\n                offset += font.lineHeight * (title.text.length - 1);\n            }\n        } else {\n            offset += padding.top;\n        }\n        const { titleX , titleY , maxWidth , rotation  } = titleArgs(this, offset, position, align);\n        renderText(ctx, title.text, 0, 0, font, {\n            color: title.color,\n            maxWidth,\n            rotation,\n            textAlign: titleAlign(align, position, reverse),\n            textBaseline: 'middle',\n            translation: [\n                titleX,\n                titleY\n            ]\n        });\n    }\n    draw(chartArea) {\n        if (!this._isVisible()) {\n            return;\n        }\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawBorder();\n        this.drawTitle();\n        this.drawLabels(chartArea);\n    }\n _layers() {\n        const opts = this.options;\n        const tz = opts.ticks && opts.ticks.z || 0;\n        const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n        const bz = valueOrDefault(opts.border && opts.border.z, 0);\n        if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n            return [\n                {\n                    z: tz,\n                    draw: (chartArea)=>{\n                        this.draw(chartArea);\n                    }\n                }\n            ];\n        }\n        return [\n            {\n                z: gz,\n                draw: (chartArea)=>{\n                    this.drawBackground();\n                    this.drawGrid(chartArea);\n                    this.drawTitle();\n                }\n            },\n            {\n                z: bz,\n                draw: ()=>{\n                    this.drawBorder();\n                }\n            },\n            {\n                z: tz,\n                draw: (chartArea)=>{\n                    this.drawLabels(chartArea);\n                }\n            }\n        ];\n    }\n getMatchingVisibleMetas(type) {\n        const metas = this.chart.getSortedVisibleDatasetMetas();\n        const axisID = this.axis + 'AxisID';\n        const result = [];\n        let i, ilen;\n        for(i = 0, ilen = metas.length; i < ilen; ++i){\n            const meta = metas[i];\n            if (meta[axisID] === this.id && (!type || meta.type === type)) {\n                result.push(meta);\n            }\n        }\n        return result;\n    }\n _resolveTickFontOptions(index) {\n        const opts = this.options.ticks.setContext(this.getContext(index));\n        return toFont(opts.font);\n    }\n _maxDigits() {\n        const fontSize = this._resolveTickFontOptions(0).lineHeight;\n        return (this.isHorizontal() ? this.width : this.height) / fontSize;\n    }\n}\n\nclass TypedRegistry {\n    constructor(type, scope, override){\n        this.type = type;\n        this.scope = scope;\n        this.override = override;\n        this.items = Object.create(null);\n    }\n    isForType(type) {\n        return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n    }\n register(item) {\n        const proto = Object.getPrototypeOf(item);\n        let parentScope;\n        if (isIChartComponent(proto)) {\n            parentScope = this.register(proto);\n        }\n        const items = this.items;\n        const id = item.id;\n        const scope = this.scope + '.' + id;\n        if (!id) {\n            throw new Error('class does not have id: ' + item);\n        }\n        if (id in items) {\n            return scope;\n        }\n        items[id] = item;\n        registerDefaults(item, scope, parentScope);\n        if (this.override) {\n            defaults.override(item.id, item.overrides);\n        }\n        return scope;\n    }\n get(id) {\n        return this.items[id];\n    }\n unregister(item) {\n        const items = this.items;\n        const id = item.id;\n        const scope = this.scope;\n        if (id in items) {\n            delete items[id];\n        }\n        if (scope && id in defaults[scope]) {\n            delete defaults[scope][id];\n            if (this.override) {\n                delete overrides[id];\n            }\n        }\n    }\n}\nfunction registerDefaults(item, scope, parentScope) {\n    const itemDefaults = merge(Object.create(null), [\n        parentScope ? defaults.get(parentScope) : {},\n        defaults.get(scope),\n        item.defaults\n    ]);\n    defaults.set(scope, itemDefaults);\n    if (item.defaultRoutes) {\n        routeDefaults(scope, item.defaultRoutes);\n    }\n    if (item.descriptors) {\n        defaults.describe(scope, item.descriptors);\n    }\n}\nfunction routeDefaults(scope, routes) {\n    Object.keys(routes).forEach((property)=>{\n        const propertyParts = property.split('.');\n        const sourceName = propertyParts.pop();\n        const sourceScope = [\n            scope\n        ].concat(propertyParts).join('.');\n        const parts = routes[property].split('.');\n        const targetName = parts.pop();\n        const targetScope = parts.join('.');\n        defaults.route(sourceScope, sourceName, targetScope, targetName);\n    });\n}\nfunction isIChartComponent(proto) {\n    return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n    constructor(){\n        this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n        this.elements = new TypedRegistry(Element, 'elements');\n        this.plugins = new TypedRegistry(Object, 'plugins');\n        this.scales = new TypedRegistry(Scale, 'scales');\n        this._typedRegistries = [\n            this.controllers,\n            this.scales,\n            this.elements\n        ];\n    }\n add(...args) {\n        this._each('register', args);\n    }\n    remove(...args) {\n        this._each('unregister', args);\n    }\n addControllers(...args) {\n        this._each('register', args, this.controllers);\n    }\n addElements(...args) {\n        this._each('register', args, this.elements);\n    }\n addPlugins(...args) {\n        this._each('register', args, this.plugins);\n    }\n addScales(...args) {\n        this._each('register', args, this.scales);\n    }\n getController(id) {\n        return this._get(id, this.controllers, 'controller');\n    }\n getElement(id) {\n        return this._get(id, this.elements, 'element');\n    }\n getPlugin(id) {\n        return this._get(id, this.plugins, 'plugin');\n    }\n getScale(id) {\n        return this._get(id, this.scales, 'scale');\n    }\n removeControllers(...args) {\n        this._each('unregister', args, this.controllers);\n    }\n removeElements(...args) {\n        this._each('unregister', args, this.elements);\n    }\n removePlugins(...args) {\n        this._each('unregister', args, this.plugins);\n    }\n removeScales(...args) {\n        this._each('unregister', args, this.scales);\n    }\n _each(method, args, typedRegistry) {\n        [\n            ...args\n        ].forEach((arg)=>{\n            const reg = typedRegistry || this._getRegistryForType(arg);\n            if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n                this._exec(method, reg, arg);\n            } else {\n                each(arg, (item)=>{\n                    const itemReg = typedRegistry || this._getRegistryForType(item);\n                    this._exec(method, itemReg, item);\n                });\n            }\n        });\n    }\n _exec(method, registry, component) {\n        const camelMethod = _capitalize(method);\n        callback(component['before' + camelMethod], [], component);\n        registry[method](component);\n        callback(component['after' + camelMethod], [], component);\n    }\n _getRegistryForType(type) {\n        for(let i = 0; i < this._typedRegistries.length; i++){\n            const reg = this._typedRegistries[i];\n            if (reg.isForType(type)) {\n                return reg;\n            }\n        }\n        return this.plugins;\n    }\n _get(id, typedRegistry, type) {\n        const item = typedRegistry.get(id);\n        if (item === undefined) {\n            throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n        }\n        return item;\n    }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n    constructor(){\n        this._init = [];\n    }\n notify(chart, hook, args, filter) {\n        if (hook === 'beforeInit') {\n            this._init = this._createDescriptors(chart, true);\n            this._notify(this._init, chart, 'install');\n        }\n        const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n        const result = this._notify(descriptors, chart, hook, args);\n        if (hook === 'afterDestroy') {\n            this._notify(descriptors, chart, 'stop');\n            this._notify(this._init, chart, 'uninstall');\n        }\n        return result;\n    }\n _notify(descriptors, chart, hook, args) {\n        args = args || {};\n        for (const descriptor of descriptors){\n            const plugin = descriptor.plugin;\n            const method = plugin[hook];\n            const params = [\n                chart,\n                args,\n                descriptor.options\n            ];\n            if (callback(method, params, plugin) === false && args.cancelable) {\n                return false;\n            }\n        }\n        return true;\n    }\n    invalidate() {\n        if (!isNullOrUndef(this._cache)) {\n            this._oldCache = this._cache;\n            this._cache = undefined;\n        }\n    }\n _descriptors(chart) {\n        if (this._cache) {\n            return this._cache;\n        }\n        const descriptors = this._cache = this._createDescriptors(chart);\n        this._notifyStateChanges(chart);\n        return descriptors;\n    }\n    _createDescriptors(chart, all) {\n        const config = chart && chart.config;\n        const options = valueOrDefault(config.options && config.options.plugins, {});\n        const plugins = allPlugins(config);\n        return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n    }\n _notifyStateChanges(chart) {\n        const previousDescriptors = this._oldCache || [];\n        const descriptors = this._cache;\n        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n        this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n        this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n    }\n}\n function allPlugins(config) {\n    const localIds = {};\n    const plugins = [];\n    const keys = Object.keys(registry.plugins.items);\n    for(let i = 0; i < keys.length; i++){\n        plugins.push(registry.getPlugin(keys[i]));\n    }\n    const local = config.plugins || [];\n    for(let i = 0; i < local.length; i++){\n        const plugin = local[i];\n        if (plugins.indexOf(plugin) === -1) {\n            plugins.push(plugin);\n            localIds[plugin.id] = true;\n        }\n    }\n    return {\n        plugins,\n        localIds\n    };\n}\nfunction getOpts(options, all) {\n    if (!all && options === false) {\n        return null;\n    }\n    if (options === true) {\n        return {};\n    }\n    return options;\n}\nfunction createDescriptors(chart, { plugins , localIds  }, options, all) {\n    const result = [];\n    const context = chart.getContext();\n    for (const plugin of plugins){\n        const id = plugin.id;\n        const opts = getOpts(options[id], all);\n        if (opts === null) {\n            continue;\n        }\n        result.push({\n            plugin,\n            options: pluginOpts(chart.config, {\n                plugin,\n                local: localIds[id]\n            }, opts, context)\n        });\n    }\n    return result;\n}\nfunction pluginOpts(config, { plugin , local  }, opts, context) {\n    const keys = config.pluginScopeKeys(plugin);\n    const scopes = config.getOptionScopes(opts, keys);\n    if (local && plugin.defaults) {\n        scopes.push(plugin.defaults);\n    }\n    return config.createResolver(scopes, context, [\n        ''\n    ], {\n        scriptable: false,\n        indexable: false,\n        allKeys: true\n    });\n}\n\nfunction getIndexAxis(type, options) {\n    const datasetDefaults = defaults.datasets[type] || {};\n    const datasetOptions = (options.datasets || {})[type] || {};\n    return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n    let axis = id;\n    if (id === '_index_') {\n        axis = indexAxis;\n    } else if (id === '_value_') {\n        axis = indexAxis === 'x' ? 'y' : 'x';\n    }\n    return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n    return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n    if (id === 'x' || id === 'y' || id === 'r') {\n        return id;\n    }\n}\nfunction axisFromPosition(position) {\n    if (position === 'top' || position === 'bottom') {\n        return 'x';\n    }\n    if (position === 'left' || position === 'right') {\n        return 'y';\n    }\n}\nfunction determineAxis(id, ...scaleOptions) {\n    if (idMatchesAxis(id)) {\n        return id;\n    }\n    for (const opts of scaleOptions){\n        const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n        if (axis) {\n            return axis;\n        }\n    }\n    throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n    if (dataset[axis + 'AxisID'] === id) {\n        return {\n            axis\n        };\n    }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n    if (config.data && config.data.datasets) {\n        const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n        if (boundDs.length) {\n            return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n        }\n    }\n    return {};\n}\nfunction mergeScaleConfig(config, options) {\n    const chartDefaults = overrides[config.type] || {\n        scales: {}\n    };\n    const configScales = options.scales || {};\n    const chartIndexAxis = getIndexAxis(config.type, options);\n    const scales = Object.create(null);\n    Object.keys(configScales).forEach((id)=>{\n        const scaleConf = configScales[id];\n        if (!isObject(scaleConf)) {\n            return console.error(`Invalid scale configuration for scale: ${id}`);\n        }\n        if (scaleConf._proxy) {\n            return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n        }\n        const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n        const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n        const defaultScaleOptions = chartDefaults.scales || {};\n        scales[id] = mergeIf(Object.create(null), [\n            {\n                axis\n            },\n            scaleConf,\n            defaultScaleOptions[axis],\n            defaultScaleOptions[defaultId]\n        ]);\n    });\n    config.data.datasets.forEach((dataset)=>{\n        const type = dataset.type || config.type;\n        const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n        const datasetDefaults = overrides[type] || {};\n        const defaultScaleOptions = datasetDefaults.scales || {};\n        Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n            const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n            const id = dataset[axis + 'AxisID'] || axis;\n            scales[id] = scales[id] || Object.create(null);\n            mergeIf(scales[id], [\n                {\n                    axis\n                },\n                configScales[id],\n                defaultScaleOptions[defaultID]\n            ]);\n        });\n    });\n    Object.keys(scales).forEach((key)=>{\n        const scale = scales[key];\n        mergeIf(scale, [\n            defaults.scales[scale.type],\n            defaults.scale\n        ]);\n    });\n    return scales;\n}\nfunction initOptions(config) {\n    const options = config.options || (config.options = {});\n    options.plugins = valueOrDefault(options.plugins, {});\n    options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n    data = data || {};\n    data.datasets = data.datasets || [];\n    data.labels = data.labels || [];\n    return data;\n}\nfunction initConfig(config) {\n    config = config || {};\n    config.data = initData(config.data);\n    initOptions(config);\n    return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n    let keys = keyCache.get(cacheKey);\n    if (!keys) {\n        keys = generate();\n        keyCache.set(cacheKey, keys);\n        keysCached.add(keys);\n    }\n    return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n    const opts = resolveObjectKey(obj, key);\n    if (opts !== undefined) {\n        set.add(opts);\n    }\n};\nclass Config {\n    constructor(config){\n        this._config = initConfig(config);\n        this._scopeCache = new Map();\n        this._resolverCache = new Map();\n    }\n    get platform() {\n        return this._config.platform;\n    }\n    get type() {\n        return this._config.type;\n    }\n    set type(type) {\n        this._config.type = type;\n    }\n    get data() {\n        return this._config.data;\n    }\n    set data(data) {\n        this._config.data = initData(data);\n    }\n    get options() {\n        return this._config.options;\n    }\n    set options(options) {\n        this._config.options = options;\n    }\n    get plugins() {\n        return this._config.plugins;\n    }\n    update() {\n        const config = this._config;\n        this.clearCache();\n        initOptions(config);\n    }\n    clearCache() {\n        this._scopeCache.clear();\n        this._resolverCache.clear();\n    }\n datasetScopeKeys(datasetType) {\n        return cachedKeys(datasetType, ()=>[\n                [\n                    `datasets.${datasetType}`,\n                    ''\n                ]\n            ]);\n    }\n datasetAnimationScopeKeys(datasetType, transition) {\n        return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n                [\n                    `datasets.${datasetType}.transitions.${transition}`,\n                    `transitions.${transition}`\n                ],\n                [\n                    `datasets.${datasetType}`,\n                    ''\n                ]\n            ]);\n    }\n datasetElementScopeKeys(datasetType, elementType) {\n        return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n                [\n                    `datasets.${datasetType}.elements.${elementType}`,\n                    `datasets.${datasetType}`,\n                    `elements.${elementType}`,\n                    ''\n                ]\n            ]);\n    }\n pluginScopeKeys(plugin) {\n        const id = plugin.id;\n        const type = this.type;\n        return cachedKeys(`${type}-plugin-${id}`, ()=>[\n                [\n                    `plugins.${id}`,\n                    ...plugin.additionalOptionScopes || []\n                ]\n            ]);\n    }\n _cachedScopes(mainScope, resetCache) {\n        const _scopeCache = this._scopeCache;\n        let cache = _scopeCache.get(mainScope);\n        if (!cache || resetCache) {\n            cache = new Map();\n            _scopeCache.set(mainScope, cache);\n        }\n        return cache;\n    }\n getOptionScopes(mainScope, keyLists, resetCache) {\n        const { options , type  } = this;\n        const cache = this._cachedScopes(mainScope, resetCache);\n        const cached = cache.get(keyLists);\n        if (cached) {\n            return cached;\n        }\n        const scopes = new Set();\n        keyLists.forEach((keys)=>{\n            if (mainScope) {\n                scopes.add(mainScope);\n                keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n            }\n            keys.forEach((key)=>addIfFound(scopes, options, key));\n            keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n            keys.forEach((key)=>addIfFound(scopes, defaults, key));\n            keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n        });\n        const array = Array.from(scopes);\n        if (array.length === 0) {\n            array.push(Object.create(null));\n        }\n        if (keysCached.has(keyLists)) {\n            cache.set(keyLists, array);\n        }\n        return array;\n    }\n chartOptionScopes() {\n        const { options , type  } = this;\n        return [\n            options,\n            overrides[type] || {},\n            defaults.datasets[type] || {},\n            {\n                type\n            },\n            defaults,\n            descriptors\n        ];\n    }\n resolveNamedOptions(scopes, names, context, prefixes = [\n        ''\n    ]) {\n        const result = {\n            $shared: true\n        };\n        const { resolver , subPrefixes  } = getResolver(this._resolverCache, scopes, prefixes);\n        let options = resolver;\n        if (needContext(resolver, names)) {\n            result.$shared = false;\n            context = isFunction(context) ? context() : context;\n            const subResolver = this.createResolver(scopes, context, subPrefixes);\n            options = _attachContext(resolver, context, subResolver);\n        }\n        for (const prop of names){\n            result[prop] = options[prop];\n        }\n        return result;\n    }\n createResolver(scopes, context, prefixes = [\n        ''\n    ], descriptorDefaults) {\n        const { resolver  } = getResolver(this._resolverCache, scopes, prefixes);\n        return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n    }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n    let cache = resolverCache.get(scopes);\n    if (!cache) {\n        cache = new Map();\n        resolverCache.set(scopes, cache);\n    }\n    const cacheKey = prefixes.join();\n    let cached = cache.get(cacheKey);\n    if (!cached) {\n        const resolver = _createResolver(scopes, prefixes);\n        cached = {\n            resolver,\n            subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n        };\n        cache.set(cacheKey, cached);\n    }\n    return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n    const { isScriptable , isIndexable  } = _descriptors(proxy);\n    for (const prop of names){\n        const scriptable = isScriptable(prop);\n        const indexable = isIndexable(prop);\n        const value = (indexable || scriptable) && proxy[prop];\n        if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar version = \"4.4.8\";\n\nconst KNOWN_POSITIONS = [\n    'top',\n    'bottom',\n    'left',\n    'right',\n    'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n    return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n    return function(a, b) {\n        return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n    };\n}\nfunction onAnimationsComplete(context) {\n    const chart = context.chart;\n    const animationOptions = chart.options.animation;\n    chart.notifyPlugins('afterRender');\n    callback(animationOptions && animationOptions.onComplete, [\n        context\n    ], chart);\n}\nfunction onAnimationProgress(context) {\n    const chart = context.chart;\n    const animationOptions = chart.options.animation;\n    callback(animationOptions && animationOptions.onProgress, [\n        context\n    ], chart);\n}\n function getCanvas(item) {\n    if (_isDomSupported() && typeof item === 'string') {\n        item = document.getElementById(item);\n    } else if (item && item.length) {\n        item = item[0];\n    }\n    if (item && item.canvas) {\n        item = item.canvas;\n    }\n    return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n    const canvas = getCanvas(key);\n    return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n    const keys = Object.keys(obj);\n    for (const key of keys){\n        const intKey = +key;\n        if (intKey >= start) {\n            const value = obj[key];\n            delete obj[key];\n            if (move > 0 || intKey > start) {\n                obj[intKey + move] = value;\n            }\n        }\n    }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n    if (!inChartArea || e.type === 'mouseout') {\n        return null;\n    }\n    if (isClick) {\n        return lastEvent;\n    }\n    return e;\n}\nfunction getSizeForArea(scale, chartArea, field) {\n    return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n    const { xScale , yScale  } = meta;\n    if (xScale && yScale) {\n        return {\n            left: getSizeForArea(xScale, chartArea, 'left'),\n            right: getSizeForArea(xScale, chartArea, 'right'),\n            top: getSizeForArea(yScale, chartArea, 'top'),\n            bottom: getSizeForArea(yScale, chartArea, 'bottom')\n        };\n    }\n    return chartArea;\n}\nclass Chart {\n    static defaults = defaults;\n    static instances = instances;\n    static overrides = overrides;\n    static registry = registry;\n    static version = version;\n    static getChart = getChart;\n    static register(...items) {\n        registry.add(...items);\n        invalidatePlugins();\n    }\n    static unregister(...items) {\n        registry.remove(...items);\n        invalidatePlugins();\n    }\n    constructor(item, userConfig){\n        const config = this.config = new Config(userConfig);\n        const initialCanvas = getCanvas(item);\n        const existingChart = getChart(initialCanvas);\n        if (existingChart) {\n            throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n        }\n        const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n        this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n        this.platform.updateConfig(config);\n        const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n        const canvas = context && context.canvas;\n        const height = canvas && canvas.height;\n        const width = canvas && canvas.width;\n        this.id = uid();\n        this.ctx = context;\n        this.canvas = canvas;\n        this.width = width;\n        this.height = height;\n        this._options = options;\n        this._aspectRatio = this.aspectRatio;\n        this._layers = [];\n        this._metasets = [];\n        this._stacks = undefined;\n        this.boxes = [];\n        this.currentDevicePixelRatio = undefined;\n        this.chartArea = undefined;\n        this._active = [];\n        this._lastEvent = undefined;\n        this._listeners = {};\n         this._responsiveListeners = undefined;\n        this._sortedMetasets = [];\n        this.scales = {};\n        this._plugins = new PluginService();\n        this.$proxies = {};\n        this._hiddenIndices = {};\n        this.attached = false;\n        this._animationsDisabled = undefined;\n        this.$context = undefined;\n        this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n        this._dataChanges = [];\n        instances[this.id] = this;\n        if (!context || !canvas) {\n            console.error(\"Failed to create chart: can't acquire context from the given item\");\n            return;\n        }\n        animator.listen(this, 'complete', onAnimationsComplete);\n        animator.listen(this, 'progress', onAnimationProgress);\n        this._initialize();\n        if (this.attached) {\n            this.update();\n        }\n    }\n    get aspectRatio() {\n        const { options: { aspectRatio , maintainAspectRatio  } , width , height , _aspectRatio  } = this;\n        if (!isNullOrUndef(aspectRatio)) {\n            return aspectRatio;\n        }\n        if (maintainAspectRatio && _aspectRatio) {\n            return _aspectRatio;\n        }\n        return height ? width / height : null;\n    }\n    get data() {\n        return this.config.data;\n    }\n    set data(data) {\n        this.config.data = data;\n    }\n    get options() {\n        return this._options;\n    }\n    set options(options) {\n        this.config.options = options;\n    }\n    get registry() {\n        return registry;\n    }\n _initialize() {\n        this.notifyPlugins('beforeInit');\n        if (this.options.responsive) {\n            this.resize();\n        } else {\n            retinaScale(this, this.options.devicePixelRatio);\n        }\n        this.bindEvents();\n        this.notifyPlugins('afterInit');\n        return this;\n    }\n    clear() {\n        clearCanvas(this.canvas, this.ctx);\n        return this;\n    }\n    stop() {\n        animator.stop(this);\n        return this;\n    }\n resize(width, height) {\n        if (!animator.running(this)) {\n            this._resize(width, height);\n        } else {\n            this._resizeBeforeDraw = {\n                width,\n                height\n            };\n        }\n    }\n    _resize(width, height) {\n        const options = this.options;\n        const canvas = this.canvas;\n        const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n        const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n        const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n        const mode = this.width ? 'resize' : 'attach';\n        this.width = newSize.width;\n        this.height = newSize.height;\n        this._aspectRatio = this.aspectRatio;\n        if (!retinaScale(this, newRatio, true)) {\n            return;\n        }\n        this.notifyPlugins('resize', {\n            size: newSize\n        });\n        callback(options.onResize, [\n            this,\n            newSize\n        ], this);\n        if (this.attached) {\n            if (this._doResize(mode)) {\n                this.render();\n            }\n        }\n    }\n    ensureScalesHaveIDs() {\n        const options = this.options;\n        const scalesOptions = options.scales || {};\n        each(scalesOptions, (axisOptions, axisID)=>{\n            axisOptions.id = axisID;\n        });\n    }\n buildOrUpdateScales() {\n        const options = this.options;\n        const scaleOpts = options.scales;\n        const scales = this.scales;\n        const updated = Object.keys(scales).reduce((obj, id)=>{\n            obj[id] = false;\n            return obj;\n        }, {});\n        let items = [];\n        if (scaleOpts) {\n            items = items.concat(Object.keys(scaleOpts).map((id)=>{\n                const scaleOptions = scaleOpts[id];\n                const axis = determineAxis(id, scaleOptions);\n                const isRadial = axis === 'r';\n                const isHorizontal = axis === 'x';\n                return {\n                    options: scaleOptions,\n                    dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n                    dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n                };\n            }));\n        }\n        each(items, (item)=>{\n            const scaleOptions = item.options;\n            const id = scaleOptions.id;\n            const axis = determineAxis(id, scaleOptions);\n            const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n            if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n                scaleOptions.position = item.dposition;\n            }\n            updated[id] = true;\n            let scale = null;\n            if (id in scales && scales[id].type === scaleType) {\n                scale = scales[id];\n            } else {\n                const scaleClass = registry.getScale(scaleType);\n                scale = new scaleClass({\n                    id,\n                    type: scaleType,\n                    ctx: this.ctx,\n                    chart: this\n                });\n                scales[scale.id] = scale;\n            }\n            scale.init(scaleOptions, options);\n        });\n        each(updated, (hasUpdated, id)=>{\n            if (!hasUpdated) {\n                delete scales[id];\n            }\n        });\n        each(scales, (scale)=>{\n            layouts.configure(this, scale, scale.options);\n            layouts.addBox(this, scale);\n        });\n    }\n _updateMetasets() {\n        const metasets = this._metasets;\n        const numData = this.data.datasets.length;\n        const numMeta = metasets.length;\n        metasets.sort((a, b)=>a.index - b.index);\n        if (numMeta > numData) {\n            for(let i = numData; i < numMeta; ++i){\n                this._destroyDatasetMeta(i);\n            }\n            metasets.splice(numData, numMeta - numData);\n        }\n        this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n    }\n _removeUnreferencedMetasets() {\n        const { _metasets: metasets , data: { datasets  }  } = this;\n        if (metasets.length > datasets.length) {\n            delete this._stacks;\n        }\n        metasets.forEach((meta, index)=>{\n            if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n                this._destroyDatasetMeta(index);\n            }\n        });\n    }\n    buildOrUpdateControllers() {\n        const newControllers = [];\n        const datasets = this.data.datasets;\n        let i, ilen;\n        this._removeUnreferencedMetasets();\n        for(i = 0, ilen = datasets.length; i < ilen; i++){\n            const dataset = datasets[i];\n            let meta = this.getDatasetMeta(i);\n            const type = dataset.type || this.config.type;\n            if (meta.type && meta.type !== type) {\n                this._destroyDatasetMeta(i);\n                meta = this.getDatasetMeta(i);\n            }\n            meta.type = type;\n            meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n            meta.order = dataset.order || 0;\n            meta.index = i;\n            meta.label = '' + dataset.label;\n            meta.visible = this.isDatasetVisible(i);\n            if (meta.controller) {\n                meta.controller.updateIndex(i);\n                meta.controller.linkScales();\n            } else {\n                const ControllerClass = registry.getController(type);\n                const { datasetElementType , dataElementType  } = defaults.datasets[type];\n                Object.assign(ControllerClass, {\n                    dataElementType: registry.getElement(dataElementType),\n                    datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n                });\n                meta.controller = new ControllerClass(this, i);\n                newControllers.push(meta.controller);\n            }\n        }\n        this._updateMetasets();\n        return newControllers;\n    }\n _resetElements() {\n        each(this.data.datasets, (dataset, datasetIndex)=>{\n            this.getDatasetMeta(datasetIndex).controller.reset();\n        }, this);\n    }\n reset() {\n        this._resetElements();\n        this.notifyPlugins('reset');\n    }\n    update(mode) {\n        const config = this.config;\n        config.update();\n        const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n        const animsDisabled = this._animationsDisabled = !options.animation;\n        this._updateScales();\n        this._checkEventBindings();\n        this._updateHiddenIndices();\n        this._plugins.invalidate();\n        if (this.notifyPlugins('beforeUpdate', {\n            mode,\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const newControllers = this.buildOrUpdateControllers();\n        this.notifyPlugins('beforeElementsUpdate');\n        let minPadding = 0;\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n            const { controller  } = this.getDatasetMeta(i);\n            const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n            controller.buildOrUpdateElements(reset);\n            minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n        }\n        minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n        this._updateLayout(minPadding);\n        if (!animsDisabled) {\n            each(newControllers, (controller)=>{\n                controller.reset();\n            });\n        }\n        this._updateDatasets(mode);\n        this.notifyPlugins('afterUpdate', {\n            mode\n        });\n        this._layers.sort(compare2Level('z', '_idx'));\n        const { _active , _lastEvent  } = this;\n        if (_lastEvent) {\n            this._eventHandler(_lastEvent, true);\n        } else if (_active.length) {\n            this._updateHoverStyles(_active, _active, true);\n        }\n        this.render();\n    }\n _updateScales() {\n        each(this.scales, (scale)=>{\n            layouts.removeBox(this, scale);\n        });\n        this.ensureScalesHaveIDs();\n        this.buildOrUpdateScales();\n    }\n _checkEventBindings() {\n        const options = this.options;\n        const existingEvents = new Set(Object.keys(this._listeners));\n        const newEvents = new Set(options.events);\n        if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n            this.unbindEvents();\n            this.bindEvents();\n        }\n    }\n _updateHiddenIndices() {\n        const { _hiddenIndices  } = this;\n        const changes = this._getUniformDataChanges() || [];\n        for (const { method , start , count  } of changes){\n            const move = method === '_removeElements' ? -count : count;\n            moveNumericKeys(_hiddenIndices, start, move);\n        }\n    }\n _getUniformDataChanges() {\n        const _dataChanges = this._dataChanges;\n        if (!_dataChanges || !_dataChanges.length) {\n            return;\n        }\n        this._dataChanges = [];\n        const datasetCount = this.data.datasets.length;\n        const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n        const changeSet = makeSet(0);\n        for(let i = 1; i < datasetCount; i++){\n            if (!setsEqual(changeSet, makeSet(i))) {\n                return;\n            }\n        }\n        return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n                method: a[1],\n                start: +a[2],\n                count: +a[3]\n            }));\n    }\n _updateLayout(minPadding) {\n        if (this.notifyPlugins('beforeLayout', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        layouts.update(this, this.width, this.height, minPadding);\n        const area = this.chartArea;\n        const noArea = area.width <= 0 || area.height <= 0;\n        this._layers = [];\n        each(this.boxes, (box)=>{\n            if (noArea && box.position === 'chartArea') {\n                return;\n            }\n            if (box.configure) {\n                box.configure();\n            }\n            this._layers.push(...box._layers());\n        }, this);\n        this._layers.forEach((item, index)=>{\n            item._idx = index;\n        });\n        this.notifyPlugins('afterLayout');\n    }\n _updateDatasets(mode) {\n        if (this.notifyPlugins('beforeDatasetsUpdate', {\n            mode,\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this.getDatasetMeta(i).controller.configure();\n        }\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this._updateDataset(i, isFunction(mode) ? mode({\n                datasetIndex: i\n            }) : mode);\n        }\n        this.notifyPlugins('afterDatasetsUpdate', {\n            mode\n        });\n    }\n _updateDataset(index, mode) {\n        const meta = this.getDatasetMeta(index);\n        const args = {\n            meta,\n            index,\n            mode,\n            cancelable: true\n        };\n        if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n            return;\n        }\n        meta.controller._update(mode);\n        args.cancelable = false;\n        this.notifyPlugins('afterDatasetUpdate', args);\n    }\n    render() {\n        if (this.notifyPlugins('beforeRender', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        if (animator.has(this)) {\n            if (this.attached && !animator.running(this)) {\n                animator.start(this);\n            }\n        } else {\n            this.draw();\n            onAnimationsComplete({\n                chart: this\n            });\n        }\n    }\n    draw() {\n        let i;\n        if (this._resizeBeforeDraw) {\n            const { width , height  } = this._resizeBeforeDraw;\n            this._resizeBeforeDraw = null;\n            this._resize(width, height);\n        }\n        this.clear();\n        if (this.width <= 0 || this.height <= 0) {\n            return;\n        }\n        if (this.notifyPlugins('beforeDraw', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const layers = this._layers;\n        for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n            layers[i].draw(this.chartArea);\n        }\n        this._drawDatasets();\n        for(; i < layers.length; ++i){\n            layers[i].draw(this.chartArea);\n        }\n        this.notifyPlugins('afterDraw');\n    }\n _getSortedDatasetMetas(filterVisible) {\n        const metasets = this._sortedMetasets;\n        const result = [];\n        let i, ilen;\n        for(i = 0, ilen = metasets.length; i < ilen; ++i){\n            const meta = metasets[i];\n            if (!filterVisible || meta.visible) {\n                result.push(meta);\n            }\n        }\n        return result;\n    }\n getSortedVisibleDatasetMetas() {\n        return this._getSortedDatasetMetas(true);\n    }\n _drawDatasets() {\n        if (this.notifyPlugins('beforeDatasetsDraw', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const metasets = this.getSortedVisibleDatasetMetas();\n        for(let i = metasets.length - 1; i >= 0; --i){\n            this._drawDataset(metasets[i]);\n        }\n        this.notifyPlugins('afterDatasetsDraw');\n    }\n _drawDataset(meta) {\n        const ctx = this.ctx;\n        const clip = meta._clip;\n        const useClip = !clip.disabled;\n        const area = getDatasetArea(meta, this.chartArea);\n        const args = {\n            meta,\n            index: meta.index,\n            cancelable: true\n        };\n        if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n            return;\n        }\n        if (useClip) {\n            clipArea(ctx, {\n                left: clip.left === false ? 0 : area.left - clip.left,\n                right: clip.right === false ? this.width : area.right + clip.right,\n                top: clip.top === false ? 0 : area.top - clip.top,\n                bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n            });\n        }\n        meta.controller.draw();\n        if (useClip) {\n            unclipArea(ctx);\n        }\n        args.cancelable = false;\n        this.notifyPlugins('afterDatasetDraw', args);\n    }\n isPointInArea(point) {\n        return _isPointInArea(point, this.chartArea, this._minPadding);\n    }\n    getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n        const method = Interaction.modes[mode];\n        if (typeof method === 'function') {\n            return method(this, e, options, useFinalPosition);\n        }\n        return [];\n    }\n    getDatasetMeta(datasetIndex) {\n        const dataset = this.data.datasets[datasetIndex];\n        const metasets = this._metasets;\n        let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n        if (!meta) {\n            meta = {\n                type: null,\n                data: [],\n                dataset: null,\n                controller: null,\n                hidden: null,\n                xAxisID: null,\n                yAxisID: null,\n                order: dataset && dataset.order || 0,\n                index: datasetIndex,\n                _dataset: dataset,\n                _parsed: [],\n                _sorted: false\n            };\n            metasets.push(meta);\n        }\n        return meta;\n    }\n    getContext() {\n        return this.$context || (this.$context = createContext(null, {\n            chart: this,\n            type: 'chart'\n        }));\n    }\n    getVisibleDatasetCount() {\n        return this.getSortedVisibleDatasetMetas().length;\n    }\n    isDatasetVisible(datasetIndex) {\n        const dataset = this.data.datasets[datasetIndex];\n        if (!dataset) {\n            return false;\n        }\n        const meta = this.getDatasetMeta(datasetIndex);\n        return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n    }\n    setDatasetVisibility(datasetIndex, visible) {\n        const meta = this.getDatasetMeta(datasetIndex);\n        meta.hidden = !visible;\n    }\n    toggleDataVisibility(index) {\n        this._hiddenIndices[index] = !this._hiddenIndices[index];\n    }\n    getDataVisibility(index) {\n        return !this._hiddenIndices[index];\n    }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n        const mode = visible ? 'show' : 'hide';\n        const meta = this.getDatasetMeta(datasetIndex);\n        const anims = meta.controller._resolveAnimations(undefined, mode);\n        if (defined(dataIndex)) {\n            meta.data[dataIndex].hidden = !visible;\n            this.update();\n        } else {\n            this.setDatasetVisibility(datasetIndex, visible);\n            anims.update(meta, {\n                visible\n            });\n            this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n        }\n    }\n    hide(datasetIndex, dataIndex) {\n        this._updateVisibility(datasetIndex, dataIndex, false);\n    }\n    show(datasetIndex, dataIndex) {\n        this._updateVisibility(datasetIndex, dataIndex, true);\n    }\n _destroyDatasetMeta(datasetIndex) {\n        const meta = this._metasets[datasetIndex];\n        if (meta && meta.controller) {\n            meta.controller._destroy();\n        }\n        delete this._metasets[datasetIndex];\n    }\n    _stop() {\n        let i, ilen;\n        this.stop();\n        animator.remove(this);\n        for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this._destroyDatasetMeta(i);\n        }\n    }\n    destroy() {\n        this.notifyPlugins('beforeDestroy');\n        const { canvas , ctx  } = this;\n        this._stop();\n        this.config.clearCache();\n        if (canvas) {\n            this.unbindEvents();\n            clearCanvas(canvas, ctx);\n            this.platform.releaseContext(ctx);\n            this.canvas = null;\n            this.ctx = null;\n        }\n        delete instances[this.id];\n        this.notifyPlugins('afterDestroy');\n    }\n    toBase64Image(...args) {\n        return this.canvas.toDataURL(...args);\n    }\n bindEvents() {\n        this.bindUserEvents();\n        if (this.options.responsive) {\n            this.bindResponsiveEvents();\n        } else {\n            this.attached = true;\n        }\n    }\n bindUserEvents() {\n        const listeners = this._listeners;\n        const platform = this.platform;\n        const _add = (type, listener)=>{\n            platform.addEventListener(this, type, listener);\n            listeners[type] = listener;\n        };\n        const listener = (e, x, y)=>{\n            e.offsetX = x;\n            e.offsetY = y;\n            this._eventHandler(e);\n        };\n        each(this.options.events, (type)=>_add(type, listener));\n    }\n bindResponsiveEvents() {\n        if (!this._responsiveListeners) {\n            this._responsiveListeners = {};\n        }\n        const listeners = this._responsiveListeners;\n        const platform = this.platform;\n        const _add = (type, listener)=>{\n            platform.addEventListener(this, type, listener);\n            listeners[type] = listener;\n        };\n        const _remove = (type, listener)=>{\n            if (listeners[type]) {\n                platform.removeEventListener(this, type, listener);\n                delete listeners[type];\n            }\n        };\n        const listener = (width, height)=>{\n            if (this.canvas) {\n                this.resize(width, height);\n            }\n        };\n        let detached;\n        const attached = ()=>{\n            _remove('attach', attached);\n            this.attached = true;\n            this.resize();\n            _add('resize', listener);\n            _add('detach', detached);\n        };\n        detached = ()=>{\n            this.attached = false;\n            _remove('resize', listener);\n            this._stop();\n            this._resize(0, 0);\n            _add('attach', attached);\n        };\n        if (platform.isAttached(this.canvas)) {\n            attached();\n        } else {\n            detached();\n        }\n    }\n unbindEvents() {\n        each(this._listeners, (listener, type)=>{\n            this.platform.removeEventListener(this, type, listener);\n        });\n        this._listeners = {};\n        each(this._responsiveListeners, (listener, type)=>{\n            this.platform.removeEventListener(this, type, listener);\n        });\n        this._responsiveListeners = undefined;\n    }\n    updateHoverStyle(items, mode, enabled) {\n        const prefix = enabled ? 'set' : 'remove';\n        let meta, item, i, ilen;\n        if (mode === 'dataset') {\n            meta = this.getDatasetMeta(items[0].datasetIndex);\n            meta.controller['_' + prefix + 'DatasetHoverStyle']();\n        }\n        for(i = 0, ilen = items.length; i < ilen; ++i){\n            item = items[i];\n            const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n            if (controller) {\n                controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n            }\n        }\n    }\n getActiveElements() {\n        return this._active || [];\n    }\n setActiveElements(activeElements) {\n        const lastActive = this._active || [];\n        const active = activeElements.map(({ datasetIndex , index  })=>{\n            const meta = this.getDatasetMeta(datasetIndex);\n            if (!meta) {\n                throw new Error('No dataset found at index ' + datasetIndex);\n            }\n            return {\n                datasetIndex,\n                element: meta.data[index],\n                index\n            };\n        });\n        const changed = !_elementsEqual(active, lastActive);\n        if (changed) {\n            this._active = active;\n            this._lastEvent = null;\n            this._updateHoverStyles(active, lastActive);\n        }\n    }\n notifyPlugins(hook, args, filter) {\n        return this._plugins.notify(this, hook, args, filter);\n    }\n isPluginEnabled(pluginId) {\n        return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n    }\n _updateHoverStyles(active, lastActive, replay) {\n        const hoverOptions = this.options.hover;\n        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n        const deactivated = diff(lastActive, active);\n        const activated = replay ? active : diff(active, lastActive);\n        if (deactivated.length) {\n            this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n        }\n        if (activated.length && hoverOptions.mode) {\n            this.updateHoverStyle(activated, hoverOptions.mode, true);\n        }\n    }\n _eventHandler(e, replay) {\n        const args = {\n            event: e,\n            replay,\n            cancelable: true,\n            inChartArea: this.isPointInArea(e)\n        };\n        const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n        if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n            return;\n        }\n        const changed = this._handleEvent(e, replay, args.inChartArea);\n        args.cancelable = false;\n        this.notifyPlugins('afterEvent', args, eventFilter);\n        if (changed || args.changed) {\n            this.render();\n        }\n        return this;\n    }\n _handleEvent(e, replay, inChartArea) {\n        const { _active: lastActive = [] , options  } = this;\n        const useFinalPosition = replay;\n        const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n        const isClick = _isClickEvent(e);\n        const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n        if (inChartArea) {\n            this._lastEvent = null;\n            callback(options.onHover, [\n                e,\n                active,\n                this\n            ], this);\n            if (isClick) {\n                callback(options.onClick, [\n                    e,\n                    active,\n                    this\n                ], this);\n            }\n        }\n        const changed = !_elementsEqual(active, lastActive);\n        if (changed || replay) {\n            this._active = active;\n            this._updateHoverStyles(active, lastActive, replay);\n        }\n        this._lastEvent = lastEvent;\n        return changed;\n    }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n        if (e.type === 'mouseout') {\n            return [];\n        }\n        if (!inChartArea) {\n            return lastActive;\n        }\n        const hoverOptions = this.options.hover;\n        return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n    }\n}\nfunction invalidatePlugins() {\n    return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n    const { startAngle , pixelMargin , x , y , outerRadius , innerRadius  } = element;\n    let angleMargin = pixelMargin / outerRadius;\n    // Draw an inner border by clipping the arc and drawing a double-width border\n    // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n    ctx.beginPath();\n    ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n    if (innerRadius > pixelMargin) {\n        angleMargin = pixelMargin / innerRadius;\n        ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n    } else {\n        ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n    }\n    ctx.closePath();\n    ctx.clip();\n}\nfunction toRadiusCorners(value) {\n    return _readValueToProps(value, [\n        'outerStart',\n        'outerEnd',\n        'innerStart',\n        'innerEnd'\n    ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n    const o = toRadiusCorners(arc.options.borderRadius);\n    const halfThickness = (outerRadius - innerRadius) / 2;\n    const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n    // Outer limits are complicated. We want to compute the available angular distance at\n    // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n    // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n    //\n    // If the borderRadius is large, that value can become negative.\n    // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n    // we know that the thickness term will dominate and compute the limits at that point\n    const computeOuterLimit = (val)=>{\n        const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n        return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n    };\n    return {\n        outerStart: computeOuterLimit(o.outerStart),\n        outerEnd: computeOuterLimit(o.outerEnd),\n        innerStart: _limitValue(o.innerStart, 0, innerLimit),\n        innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n    };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n    return {\n        x: x + r * Math.cos(theta),\n        y: y + r * Math.sin(theta)\n    };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n    const { x , y , startAngle: start , pixelMargin , innerRadius: innerR  } = element;\n    const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n    const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n    let spacingOffset = 0;\n    const alpha = end - start;\n    if (spacing) {\n        // When spacing is present, it is the same for all items\n        // So we adjust the start and end angle of the arc such that\n        // the distance is the same as it would be without the spacing\n        const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n        const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n        const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n        const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n        spacingOffset = (alpha - adjustedAngle) / 2;\n    }\n    const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n    const angleOffset = (alpha - beta) / 2;\n    const startAngle = start + angleOffset + spacingOffset;\n    const endAngle = end - angleOffset - spacingOffset;\n    const { outerStart , outerEnd , innerStart , innerEnd  } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n    const outerStartAdjustedRadius = outerRadius - outerStart;\n    const outerEndAdjustedRadius = outerRadius - outerEnd;\n    const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n    const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n    const innerStartAdjustedRadius = innerRadius + innerStart;\n    const innerEndAdjustedRadius = innerRadius + innerEnd;\n    const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n    const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n    ctx.beginPath();\n    if (circular) {\n        // The first arc segments from point 1 to point a to point 2\n        const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n        ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n        ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n        // The corner segment from point 2 to point 3\n        if (outerEnd > 0) {\n            const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n        }\n        // The line from point 3 to point 4\n        const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n        ctx.lineTo(p4.x, p4.y);\n        // The corner segment from point 4 to point 5\n        if (innerEnd > 0) {\n            const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n        }\n        // The inner arc from point 5 to point b to point 6\n        const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n        ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n        ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n        // The corner segment from point 6 to point 7\n        if (innerStart > 0) {\n            const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n        }\n        // The line from point 7 to point 8\n        const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n        ctx.lineTo(p8.x, p8.y);\n        // The corner segment from point 8 to point 1\n        if (outerStart > 0) {\n            const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n        }\n    } else {\n        ctx.moveTo(x, y);\n        const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n        const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n        ctx.lineTo(outerStartX, outerStartY);\n        const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n        const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n        ctx.lineTo(outerEndX, outerEndY);\n    }\n    ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n    const { fullCircles , startAngle , circumference  } = element;\n    let endAngle = element.endAngle;\n    if (fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        for(let i = 0; i < fullCircles; ++i){\n            ctx.fill();\n        }\n        if (!isNaN(circumference)) {\n            endAngle = startAngle + (circumference % TAU || TAU);\n        }\n    }\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.fill();\n    return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n    const { fullCircles , startAngle , circumference , options  } = element;\n    const { borderWidth , borderJoinStyle , borderDash , borderDashOffset  } = options;\n    const inner = options.borderAlign === 'inner';\n    if (!borderWidth) {\n        return;\n    }\n    ctx.setLineDash(borderDash || []);\n    ctx.lineDashOffset = borderDashOffset;\n    if (inner) {\n        ctx.lineWidth = borderWidth * 2;\n        ctx.lineJoin = borderJoinStyle || 'round';\n    } else {\n        ctx.lineWidth = borderWidth;\n        ctx.lineJoin = borderJoinStyle || 'bevel';\n    }\n    let endAngle = element.endAngle;\n    if (fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        for(let i = 0; i < fullCircles; ++i){\n            ctx.stroke();\n        }\n        if (!isNaN(circumference)) {\n            endAngle = startAngle + (circumference % TAU || TAU);\n        }\n    }\n    if (inner) {\n        clipArc(ctx, element, endAngle);\n    }\n    if (!fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        ctx.stroke();\n    }\n}\nclass ArcElement extends Element {\n    static id = 'arc';\n    static defaults = {\n        borderAlign: 'center',\n        borderColor: '#fff',\n        borderDash: [],\n        borderDashOffset: 0,\n        borderJoinStyle: undefined,\n        borderRadius: 0,\n        borderWidth: 2,\n        offset: 0,\n        spacing: 0,\n        angle: undefined,\n        circular: true\n    };\n    static defaultRoutes = {\n        backgroundColor: 'backgroundColor'\n    };\n    static descriptors = {\n        _scriptable: true,\n        _indexable: (name)=>name !== 'borderDash'\n    };\n    circumference;\n    endAngle;\n    fullCircles;\n    innerRadius;\n    outerRadius;\n    pixelMargin;\n    startAngle;\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.circumference = undefined;\n        this.startAngle = undefined;\n        this.endAngle = undefined;\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n        this.pixelMargin = 0;\n        this.fullCircles = 0;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    inRange(chartX, chartY, useFinalPosition) {\n        const point = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        const { angle , distance  } = getAngleFromPoint(point, {\n            x: chartX,\n            y: chartY\n        });\n        const { startAngle , endAngle , innerRadius , outerRadius , circumference  } = this.getProps([\n            'startAngle',\n            'endAngle',\n            'innerRadius',\n            'outerRadius',\n            'circumference'\n        ], useFinalPosition);\n        const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n        const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n        const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n        const betweenAngles = _circumference >= TAU || nonZeroBetween;\n        const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n        return betweenAngles && withinRadius;\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y , startAngle , endAngle , innerRadius , outerRadius  } = this.getProps([\n            'x',\n            'y',\n            'startAngle',\n            'endAngle',\n            'innerRadius',\n            'outerRadius'\n        ], useFinalPosition);\n        const { offset , spacing  } = this.options;\n        const halfAngle = (startAngle + endAngle) / 2;\n        const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n        return {\n            x: x + Math.cos(halfAngle) * halfRadius,\n            y: y + Math.sin(halfAngle) * halfRadius\n        };\n    }\n    tooltipPosition(useFinalPosition) {\n        return this.getCenterPoint(useFinalPosition);\n    }\n    draw(ctx) {\n        const { options , circumference  } = this;\n        const offset = (options.offset || 0) / 4;\n        const spacing = (options.spacing || 0) / 2;\n        const circular = options.circular;\n        this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n        this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n        if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n            return;\n        }\n        ctx.save();\n        const halfAngle = (this.startAngle + this.endAngle) / 2;\n        ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n        const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n        const radiusOffset = offset * fix;\n        ctx.fillStyle = options.backgroundColor;\n        ctx.strokeStyle = options.borderColor;\n        drawArc(ctx, this, radiusOffset, spacing, circular);\n        drawBorder(ctx, this, radiusOffset, spacing, circular);\n        ctx.restore();\n    }\n}\n\nfunction setStyle(ctx, options, style = options) {\n    ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n    ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n    ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n    ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n    ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n    ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n    ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n    if (options.stepped) {\n        return _steppedLineTo;\n    }\n    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n        return _bezierCurveTo;\n    }\n    return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n    const count = points.length;\n    const { start: paramsStart = 0 , end: paramsEnd = count - 1  } = params;\n    const { start: segmentStart , end: segmentEnd  } = segment;\n    const start = Math.max(paramsStart, segmentStart);\n    const end = Math.min(paramsEnd, segmentEnd);\n    const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n    return {\n        count,\n        start,\n        loop: segment.loop,\n        ilen: end < start && !outside ? count + end - start : end - start\n    };\n}\n function pathSegment(ctx, line, segment, params) {\n    const { points , options  } = line;\n    const { count , start , loop , ilen  } = pathVars(points, segment, params);\n    const lineMethod = getLineMethod(options);\n    let { move =true , reverse  } = params || {};\n    let i, point, prev;\n    for(i = 0; i <= ilen; ++i){\n        point = points[(start + (reverse ? ilen - i : i)) % count];\n        if (point.skip) {\n            continue;\n        } else if (move) {\n            ctx.moveTo(point.x, point.y);\n            move = false;\n        } else {\n            lineMethod(ctx, prev, point, reverse, options.stepped);\n        }\n        prev = point;\n    }\n    if (loop) {\n        point = points[(start + (reverse ? ilen : 0)) % count];\n        lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n    const points = line.points;\n    const { count , start , ilen  } = pathVars(points, segment, params);\n    const { move =true , reverse  } = params || {};\n    let avgX = 0;\n    let countX = 0;\n    let i, point, prevX, minY, maxY, lastY;\n    const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n    const drawX = ()=>{\n        if (minY !== maxY) {\n            ctx.lineTo(avgX, maxY);\n            ctx.lineTo(avgX, minY);\n            ctx.lineTo(avgX, lastY);\n        }\n    };\n    if (move) {\n        point = points[pointIndex(0)];\n        ctx.moveTo(point.x, point.y);\n    }\n    for(i = 0; i <= ilen; ++i){\n        point = points[pointIndex(i)];\n        if (point.skip) {\n            continue;\n        }\n        const x = point.x;\n        const y = point.y;\n        const truncX = x | 0;\n        if (truncX === prevX) {\n            if (y < minY) {\n                minY = y;\n            } else if (y > maxY) {\n                maxY = y;\n            }\n            avgX = (countX * avgX + x) / ++countX;\n        } else {\n            drawX();\n            ctx.lineTo(x, y);\n            prevX = truncX;\n            countX = 0;\n            minY = maxY = y;\n        }\n        lastY = y;\n    }\n    drawX();\n}\n function _getSegmentMethod(line) {\n    const opts = line.options;\n    const borderDash = opts.borderDash && opts.borderDash.length;\n    const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n    return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n    if (options.stepped) {\n        return _steppedInterpolation;\n    }\n    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n        return _bezierInterpolation;\n    }\n    return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n    let path = line._path;\n    if (!path) {\n        path = line._path = new Path2D();\n        if (line.path(path, start, count)) {\n            path.closePath();\n        }\n    }\n    setStyle(ctx, line.options);\n    ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n    const { segments , options  } = line;\n    const segmentMethod = _getSegmentMethod(line);\n    for (const segment of segments){\n        setStyle(ctx, options, segment.style);\n        ctx.beginPath();\n        if (segmentMethod(ctx, line, segment, {\n            start,\n            end: start + count - 1\n        })) {\n            ctx.closePath();\n        }\n        ctx.stroke();\n    }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n    if (usePath2D && !line.options.segment) {\n        strokePathWithCache(ctx, line, start, count);\n    } else {\n        strokePathDirect(ctx, line, start, count);\n    }\n}\nclass LineElement extends Element {\n    static id = 'line';\n static defaults = {\n        borderCapStyle: 'butt',\n        borderDash: [],\n        borderDashOffset: 0,\n        borderJoinStyle: 'miter',\n        borderWidth: 3,\n        capBezierPoints: true,\n        cubicInterpolationMode: 'default',\n        fill: false,\n        spanGaps: false,\n        stepped: false,\n        tension: 0\n    };\n static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    static descriptors = {\n        _scriptable: true,\n        _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n    };\n    constructor(cfg){\n        super();\n        this.animated = true;\n        this.options = undefined;\n        this._chart = undefined;\n        this._loop = undefined;\n        this._fullLoop = undefined;\n        this._path = undefined;\n        this._points = undefined;\n        this._segments = undefined;\n        this._decimated = false;\n        this._pointsUpdated = false;\n        this._datasetIndex = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    updateControlPoints(chartArea, indexAxis) {\n        const options = this.options;\n        if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n            const loop = options.spanGaps ? this._loop : this._fullLoop;\n            _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n            this._pointsUpdated = true;\n        }\n    }\n    set points(points) {\n        this._points = points;\n        delete this._segments;\n        delete this._path;\n        this._pointsUpdated = false;\n    }\n    get points() {\n        return this._points;\n    }\n    get segments() {\n        return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n    }\n first() {\n        const segments = this.segments;\n        const points = this.points;\n        return segments.length && points[segments[0].start];\n    }\n last() {\n        const segments = this.segments;\n        const points = this.points;\n        const count = segments.length;\n        return count && points[segments[count - 1].end];\n    }\n interpolate(point, property) {\n        const options = this.options;\n        const value = point[property];\n        const points = this.points;\n        const segments = _boundSegments(this, {\n            property,\n            start: value,\n            end: value\n        });\n        if (!segments.length) {\n            return;\n        }\n        const result = [];\n        const _interpolate = _getInterpolationMethod(options);\n        let i, ilen;\n        for(i = 0, ilen = segments.length; i < ilen; ++i){\n            const { start , end  } = segments[i];\n            const p1 = points[start];\n            const p2 = points[end];\n            if (p1 === p2) {\n                result.push(p1);\n                continue;\n            }\n            const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n            const interpolated = _interpolate(p1, p2, t, options.stepped);\n            interpolated[property] = point[property];\n            result.push(interpolated);\n        }\n        return result.length === 1 ? result[0] : result;\n    }\n pathSegment(ctx, segment, params) {\n        const segmentMethod = _getSegmentMethod(this);\n        return segmentMethod(ctx, this, segment, params);\n    }\n path(ctx, start, count) {\n        const segments = this.segments;\n        const segmentMethod = _getSegmentMethod(this);\n        let loop = this._loop;\n        start = start || 0;\n        count = count || this.points.length - start;\n        for (const segment of segments){\n            loop &= segmentMethod(ctx, this, segment, {\n                start,\n                end: start + count - 1\n            });\n        }\n        return !!loop;\n    }\n draw(ctx, chartArea, start, count) {\n        const options = this.options || {};\n        const points = this.points || [];\n        if (points.length && options.borderWidth) {\n            ctx.save();\n            draw(ctx, this, start, count);\n            ctx.restore();\n        }\n        if (this.animated) {\n            this._pointsUpdated = false;\n            this._path = undefined;\n        }\n    }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n    const options = el.options;\n    const { [axis]: value  } = el.getProps([\n        axis\n    ], useFinalPosition);\n    return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n    static id = 'point';\n    parsed;\n    skip;\n    stop;\n    /**\n   * @type {any}\n   */ static defaults = {\n        borderWidth: 1,\n        hitRadius: 1,\n        hoverBorderWidth: 1,\n        hoverRadius: 4,\n        pointStyle: 'circle',\n        radius: 3,\n        rotation: 0\n    };\n    /**\n   * @type {any}\n   */ static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.parsed = undefined;\n        this.skip = undefined;\n        this.stop = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    inRange(mouseX, mouseY, useFinalPosition) {\n        const options = this.options;\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n    }\n    inXRange(mouseX, useFinalPosition) {\n        return inRange$1(this, mouseX, 'x', useFinalPosition);\n    }\n    inYRange(mouseY, useFinalPosition) {\n        return inRange$1(this, mouseY, 'y', useFinalPosition);\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return {\n            x,\n            y\n        };\n    }\n    size(options) {\n        options = options || this.options || {};\n        let radius = options.radius || 0;\n        radius = Math.max(radius, radius && options.hoverRadius || 0);\n        const borderWidth = radius && options.borderWidth || 0;\n        return (radius + borderWidth) * 2;\n    }\n    draw(ctx, area) {\n        const options = this.options;\n        if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n            return;\n        }\n        ctx.strokeStyle = options.borderColor;\n        ctx.lineWidth = options.borderWidth;\n        ctx.fillStyle = options.backgroundColor;\n        drawPoint(ctx, options, this.x, this.y);\n    }\n    getRange() {\n        const options = this.options || {};\n        // @ts-expect-error Fallbacks should never be hit in practice\n        return options.radius + options.hitRadius;\n    }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n    const { x , y , base , width , height  } =  bar.getProps([\n        'x',\n        'y',\n        'base',\n        'width',\n        'height'\n    ], useFinalPosition);\n    let left, right, top, bottom, half;\n    if (bar.horizontal) {\n        half = height / 2;\n        left = Math.min(x, base);\n        right = Math.max(x, base);\n        top = y - half;\n        bottom = y + half;\n    } else {\n        half = width / 2;\n        left = x - half;\n        right = x + half;\n        top = Math.min(y, base);\n        bottom = Math.max(y, base);\n    }\n    return {\n        left,\n        top,\n        right,\n        bottom\n    };\n}\nfunction skipOrLimit(skip, value, min, max) {\n    return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n    const value = bar.options.borderWidth;\n    const skip = bar.borderSkipped;\n    const o = toTRBL(value);\n    return {\n        t: skipOrLimit(skip.top, o.top, 0, maxH),\n        r: skipOrLimit(skip.right, o.right, 0, maxW),\n        b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n        l: skipOrLimit(skip.left, o.left, 0, maxW)\n    };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n    const { enableBorderRadius  } = bar.getProps([\n        'enableBorderRadius'\n    ]);\n    const value = bar.options.borderRadius;\n    const o = toTRBLCorners(value);\n    const maxR = Math.min(maxW, maxH);\n    const skip = bar.borderSkipped;\n    const enableBorder = enableBorderRadius || isObject(value);\n    return {\n        topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n        topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n        bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n        bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n    };\n}\nfunction boundingRects(bar) {\n    const bounds = getBarBounds(bar);\n    const width = bounds.right - bounds.left;\n    const height = bounds.bottom - bounds.top;\n    const border = parseBorderWidth(bar, width / 2, height / 2);\n    const radius = parseBorderRadius(bar, width / 2, height / 2);\n    return {\n        outer: {\n            x: bounds.left,\n            y: bounds.top,\n            w: width,\n            h: height,\n            radius\n        },\n        inner: {\n            x: bounds.left + border.l,\n            y: bounds.top + border.t,\n            w: width - border.l - border.r,\n            h: height - border.t - border.b,\n            radius: {\n                topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n                topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n                bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n                bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n            }\n        }\n    };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n    const skipX = x === null;\n    const skipY = y === null;\n    const skipBoth = skipX && skipY;\n    const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n    return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n    return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n    ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n    const x = rect.x !== refRect.x ? -amount : 0;\n    const y = rect.y !== refRect.y ? -amount : 0;\n    const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n    const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n    return {\n        x: rect.x + x,\n        y: rect.y + y,\n        w: rect.w + w,\n        h: rect.h + h,\n        radius: rect.radius\n    };\n}\nclass BarElement extends Element {\n    static id = 'bar';\n static defaults = {\n        borderSkipped: 'start',\n        borderWidth: 0,\n        borderRadius: 0,\n        inflateAmount: 'auto',\n        pointStyle: undefined\n    };\n static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.horizontal = undefined;\n        this.base = undefined;\n        this.width = undefined;\n        this.height = undefined;\n        this.inflateAmount = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    draw(ctx) {\n        const { inflateAmount , options: { borderColor , backgroundColor  }  } = this;\n        const { inner , outer  } = boundingRects(this);\n        const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n        ctx.save();\n        if (outer.w !== inner.w || outer.h !== inner.h) {\n            ctx.beginPath();\n            addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n            ctx.clip();\n            addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n            ctx.fillStyle = borderColor;\n            ctx.fill('evenodd');\n        }\n        ctx.beginPath();\n        addRectPath(ctx, inflateRect(inner, inflateAmount));\n        ctx.fillStyle = backgroundColor;\n        ctx.fill();\n        ctx.restore();\n    }\n    inRange(mouseX, mouseY, useFinalPosition) {\n        return inRange(this, mouseX, mouseY, useFinalPosition);\n    }\n    inXRange(mouseX, useFinalPosition) {\n        return inRange(this, mouseX, null, useFinalPosition);\n    }\n    inYRange(mouseY, useFinalPosition) {\n        return inRange(this, null, mouseY, useFinalPosition);\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y , base , horizontal  } =  this.getProps([\n            'x',\n            'y',\n            'base',\n            'horizontal'\n        ], useFinalPosition);\n        return {\n            x: horizontal ? (x + base) / 2 : x,\n            y: horizontal ? y : (y + base) / 2\n        };\n    }\n    getRange(axis) {\n        return axis === 'x' ? this.width / 2 : this.height / 2;\n    }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n    'rgb(54, 162, 235)',\n    'rgb(255, 99, 132)',\n    'rgb(255, 159, 64)',\n    'rgb(255, 205, 86)',\n    'rgb(75, 192, 192)',\n    'rgb(153, 102, 255)',\n    'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n    return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n    return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n    dataset.borderColor = getBorderColor(i);\n    dataset.backgroundColor = getBackgroundColor(i);\n    return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n    dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n    return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n    dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n    return i;\n}\nfunction getColorizer(chart) {\n    let i = 0;\n    return (dataset, datasetIndex)=>{\n        const controller = chart.getDatasetMeta(datasetIndex).controller;\n        if (controller instanceof DoughnutController) {\n            i = colorizeDoughnutDataset(dataset, i);\n        } else if (controller instanceof PolarAreaController) {\n            i = colorizePolarAreaDataset(dataset, i);\n        } else if (controller) {\n            i = colorizeDefaultDataset(dataset, i);\n        }\n    };\n}\nfunction containsColorsDefinitions(descriptors) {\n    let k;\n    for(k in descriptors){\n        if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction containsColorsDefinition(descriptor) {\n    return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n    return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n    id: 'colors',\n    defaults: {\n        enabled: true,\n        forceOverride: false\n    },\n    beforeLayout (chart, _args, options) {\n        if (!options.enabled) {\n            return;\n        }\n        const { data: { datasets  } , options: chartOptions  } = chart.config;\n        const { elements  } = chartOptions;\n        const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n        if (!options.forceOverride && containsColorDefenition) {\n            return;\n        }\n        const colorizer = getColorizer(chart);\n        datasets.forEach(colorizer);\n    }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n    if (samples >= count) {\n        return data.slice(start, start + count);\n    }\n    const decimated = [];\n    const bucketWidth = (count - 2) / (samples - 2);\n    let sampledIndex = 0;\n    const endIndex = start + count - 1;\n    let a = start;\n    let i, maxAreaPoint, maxArea, area, nextA;\n    decimated[sampledIndex++] = data[a];\n    for(i = 0; i < samples - 2; i++){\n        let avgX = 0;\n        let avgY = 0;\n        let j;\n        const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n        const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n        const avgRangeLength = avgRangeEnd - avgRangeStart;\n        for(j = avgRangeStart; j < avgRangeEnd; j++){\n            avgX += data[j].x;\n            avgY += data[j].y;\n        }\n        avgX /= avgRangeLength;\n        avgY /= avgRangeLength;\n        const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n        const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n        const { x: pointAx , y: pointAy  } = data[a];\n        maxArea = area = -1;\n        for(j = rangeOffs; j < rangeTo; j++){\n            area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n            if (area > maxArea) {\n                maxArea = area;\n                maxAreaPoint = data[j];\n                nextA = j;\n            }\n        }\n        decimated[sampledIndex++] = maxAreaPoint;\n        a = nextA;\n    }\n    decimated[sampledIndex++] = data[endIndex];\n    return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n    let avgX = 0;\n    let countX = 0;\n    let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n    const decimated = [];\n    const endIndex = start + count - 1;\n    const xMin = data[start].x;\n    const xMax = data[endIndex].x;\n    const dx = xMax - xMin;\n    for(i = start; i < start + count; ++i){\n        point = data[i];\n        x = (point.x - xMin) / dx * availableWidth;\n        y = point.y;\n        const truncX = x | 0;\n        if (truncX === prevX) {\n            if (y < minY) {\n                minY = y;\n                minIndex = i;\n            } else if (y > maxY) {\n                maxY = y;\n                maxIndex = i;\n            }\n            avgX = (countX * avgX + point.x) / ++countX;\n        } else {\n            const lastIndex = i - 1;\n            if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n                const intermediateIndex1 = Math.min(minIndex, maxIndex);\n                const intermediateIndex2 = Math.max(minIndex, maxIndex);\n                if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n                    decimated.push({\n                        ...data[intermediateIndex1],\n                        x: avgX\n                    });\n                }\n                if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n                    decimated.push({\n                        ...data[intermediateIndex2],\n                        x: avgX\n                    });\n                }\n            }\n            if (i > 0 && lastIndex !== startIndex) {\n                decimated.push(data[lastIndex]);\n            }\n            decimated.push(point);\n            prevX = truncX;\n            countX = 0;\n            minY = maxY = y;\n            minIndex = maxIndex = startIndex = i;\n        }\n    }\n    return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n    if (dataset._decimated) {\n        const data = dataset._data;\n        delete dataset._decimated;\n        delete dataset._data;\n        Object.defineProperty(dataset, 'data', {\n            configurable: true,\n            enumerable: true,\n            writable: true,\n            value: data\n        });\n    }\n}\nfunction cleanDecimatedData(chart) {\n    chart.data.datasets.forEach((dataset)=>{\n        cleanDecimatedDataset(dataset);\n    });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n    const pointCount = points.length;\n    let start = 0;\n    let count;\n    const { iScale  } = meta;\n    const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n    if (minDefined) {\n        start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n        count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n    } else {\n        count = pointCount - start;\n    }\n    return {\n        start,\n        count\n    };\n}\nvar plugin_decimation = {\n    id: 'decimation',\n    defaults: {\n        algorithm: 'min-max',\n        enabled: false\n    },\n    beforeElementsUpdate: (chart, args, options)=>{\n        if (!options.enabled) {\n            cleanDecimatedData(chart);\n            return;\n        }\n        const availableWidth = chart.width;\n        chart.data.datasets.forEach((dataset, datasetIndex)=>{\n            const { _data , indexAxis  } = dataset;\n            const meta = chart.getDatasetMeta(datasetIndex);\n            const data = _data || dataset.data;\n            if (resolve([\n                indexAxis,\n                chart.options.indexAxis\n            ]) === 'y') {\n                return;\n            }\n            if (!meta.controller.supportsDecimation) {\n                return;\n            }\n            const xAxis = chart.scales[meta.xAxisID];\n            if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n                return;\n            }\n            if (chart.options.parsing) {\n                return;\n            }\n            let { start , count  } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n            const threshold = options.threshold || 4 * availableWidth;\n            if (count <= threshold) {\n                cleanDecimatedDataset(dataset);\n                return;\n            }\n            if (isNullOrUndef(_data)) {\n                dataset._data = data;\n                delete dataset.data;\n                Object.defineProperty(dataset, 'data', {\n                    configurable: true,\n                    enumerable: true,\n                    get: function() {\n                        return this._decimated;\n                    },\n                    set: function(d) {\n                        this._data = d;\n                    }\n                });\n            }\n            let decimated;\n            switch(options.algorithm){\n                case 'lttb':\n                    decimated = lttbDecimation(data, start, count, availableWidth, options);\n                    break;\n                case 'min-max':\n                    decimated = minMaxDecimation(data, start, count, availableWidth);\n                    break;\n                default:\n                    throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n            }\n            dataset._decimated = decimated;\n        });\n    },\n    destroy (chart) {\n        cleanDecimatedData(chart);\n    }\n};\n\nfunction _segments(line, target, property) {\n    const segments = line.segments;\n    const points = line.points;\n    const tpoints = target.points;\n    const parts = [];\n    for (const segment of segments){\n        let { start , end  } = segment;\n        end = _findSegmentEnd(start, end, points);\n        const bounds = _getBounds(property, points[start], points[end], segment.loop);\n        if (!target.segments) {\n            parts.push({\n                source: segment,\n                target: bounds,\n                start: points[start],\n                end: points[end]\n            });\n            continue;\n        }\n        const targetSegments = _boundSegments(target, bounds);\n        for (const tgt of targetSegments){\n            const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n            const fillSources = _boundSegment(segment, points, subBounds);\n            for (const fillSource of fillSources){\n                parts.push({\n                    source: fillSource,\n                    target: tgt,\n                    start: {\n                        [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n                    },\n                    end: {\n                        [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n                    }\n                });\n            }\n        }\n    }\n    return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n    if (loop) {\n        return;\n    }\n    let start = first[property];\n    let end = last[property];\n    if (property === 'angle') {\n        start = _normalizeAngle(start);\n        end = _normalizeAngle(end);\n    }\n    return {\n        property,\n        start,\n        end\n    };\n}\nfunction _pointsFromSegments(boundary, line) {\n    const { x =null , y =null  } = boundary || {};\n    const linePoints = line.points;\n    const points = [];\n    line.segments.forEach(({ start , end  })=>{\n        end = _findSegmentEnd(start, end, linePoints);\n        const first = linePoints[start];\n        const last = linePoints[end];\n        if (y !== null) {\n            points.push({\n                x: first.x,\n                y\n            });\n            points.push({\n                x: last.x,\n                y\n            });\n        } else if (x !== null) {\n            points.push({\n                x,\n                y: first.y\n            });\n            points.push({\n                x,\n                y: last.y\n            });\n        }\n    });\n    return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n    for(; end > start; end--){\n        const point = points[end];\n        if (!isNaN(point.x) && !isNaN(point.y)) {\n            break;\n        }\n    }\n    return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n    if (a && b) {\n        return fn(a[prop], b[prop]);\n    }\n    return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n    let points = [];\n    let _loop = false;\n    if (isArray(boundary)) {\n        _loop = true;\n        points = boundary;\n    } else {\n        points = _pointsFromSegments(boundary, line);\n    }\n    return points.length ? new LineElement({\n        points,\n        options: {\n            tension: 0\n        },\n        _loop,\n        _fullLoop: _loop\n    }) : null;\n}\nfunction _shouldApplyFill(source) {\n    return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n    const source = sources[index];\n    let fill = source.fill;\n    const visited = [\n        index\n    ];\n    let target;\n    if (!propagate) {\n        return fill;\n    }\n    while(fill !== false && visited.indexOf(fill) === -1){\n        if (!isNumberFinite(fill)) {\n            return fill;\n        }\n        target = sources[fill];\n        if (!target) {\n            return false;\n        }\n        if (target.visible) {\n            return fill;\n        }\n        visited.push(fill);\n        fill = target.fill;\n    }\n    return false;\n}\n function _decodeFill(line, index, count) {\n     const fill = parseFillOption(line);\n    if (isObject(fill)) {\n        return isNaN(fill.value) ? false : fill;\n    }\n    let target = parseFloat(fill);\n    if (isNumberFinite(target) && Math.floor(target) === target) {\n        return decodeTargetIndex(fill[0], index, target, count);\n    }\n    return [\n        'origin',\n        'start',\n        'end',\n        'stack',\n        'shape'\n    ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n    if (firstCh === '-' || firstCh === '+') {\n        target = index + target;\n    }\n    if (target === index || target < 0 || target >= count) {\n        return false;\n    }\n    return target;\n}\n function _getTargetPixel(fill, scale) {\n    let pixel = null;\n    if (fill === 'start') {\n        pixel = scale.bottom;\n    } else if (fill === 'end') {\n        pixel = scale.top;\n    } else if (isObject(fill)) {\n        pixel = scale.getPixelForValue(fill.value);\n    } else if (scale.getBasePixel) {\n        pixel = scale.getBasePixel();\n    }\n    return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n    let value;\n    if (fill === 'start') {\n        value = startValue;\n    } else if (fill === 'end') {\n        value = scale.options.reverse ? scale.min : scale.max;\n    } else if (isObject(fill)) {\n        value = fill.value;\n    } else {\n        value = scale.getBaseValue();\n    }\n    return value;\n}\n function parseFillOption(line) {\n    const options = line.options;\n    const fillOption = options.fill;\n    let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n    if (fill === undefined) {\n        fill = !!options.backgroundColor;\n    }\n    if (fill === false || fill === null) {\n        return false;\n    }\n    if (fill === true) {\n        return 'origin';\n    }\n    return fill;\n}\n\nfunction _buildStackLine(source) {\n    const { scale , index , line  } = source;\n    const points = [];\n    const segments = line.segments;\n    const sourcePoints = line.points;\n    const linesBelow = getLinesBelow(scale, index);\n    linesBelow.push(_createBoundaryLine({\n        x: null,\n        y: scale.bottom\n    }, line));\n    for(let i = 0; i < segments.length; i++){\n        const segment = segments[i];\n        for(let j = segment.start; j <= segment.end; j++){\n            addPointsBelow(points, sourcePoints[j], linesBelow);\n        }\n    }\n    return new LineElement({\n        points,\n        options: {}\n    });\n}\n function getLinesBelow(scale, index) {\n    const below = [];\n    const metas = scale.getMatchingVisibleMetas('line');\n    for(let i = 0; i < metas.length; i++){\n        const meta = metas[i];\n        if (meta.index === index) {\n            break;\n        }\n        if (!meta.hidden) {\n            below.unshift(meta.dataset);\n        }\n    }\n    return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n    const postponed = [];\n    for(let j = 0; j < linesBelow.length; j++){\n        const line = linesBelow[j];\n        const { first , last , point  } = findPoint(line, sourcePoint, 'x');\n        if (!point || first && last) {\n            continue;\n        }\n        if (first) {\n            postponed.unshift(point);\n        } else {\n            points.push(point);\n            if (!last) {\n                break;\n            }\n        }\n    }\n    points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n    const point = line.interpolate(sourcePoint, property);\n    if (!point) {\n        return {};\n    }\n    const pointValue = point[property];\n    const segments = line.segments;\n    const linePoints = line.points;\n    let first = false;\n    let last = false;\n    for(let i = 0; i < segments.length; i++){\n        const segment = segments[i];\n        const firstValue = linePoints[segment.start][property];\n        const lastValue = linePoints[segment.end][property];\n        if (_isBetween(pointValue, firstValue, lastValue)) {\n            first = pointValue === firstValue;\n            last = pointValue === lastValue;\n            break;\n        }\n    }\n    return {\n        first,\n        last,\n        point\n    };\n}\n\nclass simpleArc {\n    constructor(opts){\n        this.x = opts.x;\n        this.y = opts.y;\n        this.radius = opts.radius;\n    }\n    pathSegment(ctx, bounds, opts) {\n        const { x , y , radius  } = this;\n        bounds = bounds || {\n            start: 0,\n            end: TAU\n        };\n        ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n        return !opts.bounds;\n    }\n    interpolate(point) {\n        const { x , y , radius  } = this;\n        const angle = point.angle;\n        return {\n            x: x + Math.cos(angle) * radius,\n            y: y + Math.sin(angle) * radius,\n            angle\n        };\n    }\n}\n\nfunction _getTarget(source) {\n    const { chart , fill , line  } = source;\n    if (isNumberFinite(fill)) {\n        return getLineByIndex(chart, fill);\n    }\n    if (fill === 'stack') {\n        return _buildStackLine(source);\n    }\n    if (fill === 'shape') {\n        return true;\n    }\n    const boundary = computeBoundary(source);\n    if (boundary instanceof simpleArc) {\n        return boundary;\n    }\n    return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n    const meta = chart.getDatasetMeta(index);\n    const visible = meta && chart.isDatasetVisible(index);\n    return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n    const scale = source.scale || {};\n    if (scale.getPointPositionForValue) {\n        return computeCircularBoundary(source);\n    }\n    return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n    const { scale ={} , fill  } = source;\n    const pixel = _getTargetPixel(fill, scale);\n    if (isNumberFinite(pixel)) {\n        const horizontal = scale.isHorizontal();\n        return {\n            x: horizontal ? pixel : null,\n            y: horizontal ? null : pixel\n        };\n    }\n    return null;\n}\nfunction computeCircularBoundary(source) {\n    const { scale , fill  } = source;\n    const options = scale.options;\n    const length = scale.getLabels().length;\n    const start = options.reverse ? scale.max : scale.min;\n    const value = _getTargetValue(fill, scale, start);\n    const target = [];\n    if (options.grid.circular) {\n        const center = scale.getPointPositionForValue(0, start);\n        return new simpleArc({\n            x: center.x,\n            y: center.y,\n            radius: scale.getDistanceFromCenterForValue(value)\n        });\n    }\n    for(let i = 0; i < length; ++i){\n        target.push(scale.getPointPositionForValue(i, value));\n    }\n    return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n    const target = _getTarget(source);\n    const { line , scale , axis  } = source;\n    const lineOpts = line.options;\n    const fillOption = lineOpts.fill;\n    const color = lineOpts.backgroundColor;\n    const { above =color , below =color  } = fillOption || {};\n    if (target && line.points.length) {\n        clipArea(ctx, area);\n        doFill(ctx, {\n            line,\n            target,\n            above,\n            below,\n            area,\n            scale,\n            axis\n        });\n        unclipArea(ctx);\n    }\n}\nfunction doFill(ctx, cfg) {\n    const { line , target , above , below , area , scale  } = cfg;\n    const property = line._loop ? 'angle' : cfg.axis;\n    ctx.save();\n    if (property === 'x' && below !== above) {\n        clipVertical(ctx, target, area.top);\n        fill(ctx, {\n            line,\n            target,\n            color: above,\n            scale,\n            property\n        });\n        ctx.restore();\n        ctx.save();\n        clipVertical(ctx, target, area.bottom);\n    }\n    fill(ctx, {\n        line,\n        target,\n        color: below,\n        scale,\n        property\n    });\n    ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n    const { segments , points  } = target;\n    let first = true;\n    let lineLoop = false;\n    ctx.beginPath();\n    for (const segment of segments){\n        const { start , end  } = segment;\n        const firstPoint = points[start];\n        const lastPoint = points[_findSegmentEnd(start, end, points)];\n        if (first) {\n            ctx.moveTo(firstPoint.x, firstPoint.y);\n            first = false;\n        } else {\n            ctx.lineTo(firstPoint.x, clipY);\n            ctx.lineTo(firstPoint.x, firstPoint.y);\n        }\n        lineLoop = !!target.pathSegment(ctx, segment, {\n            move: lineLoop\n        });\n        if (lineLoop) {\n            ctx.closePath();\n        } else {\n            ctx.lineTo(lastPoint.x, clipY);\n        }\n    }\n    ctx.lineTo(target.first().x, clipY);\n    ctx.closePath();\n    ctx.clip();\n}\nfunction fill(ctx, cfg) {\n    const { line , target , property , color , scale  } = cfg;\n    const segments = _segments(line, target, property);\n    for (const { source: src , target: tgt , start , end  } of segments){\n        const { style: { backgroundColor =color  } = {}  } = src;\n        const notShape = target !== true;\n        ctx.save();\n        ctx.fillStyle = backgroundColor;\n        clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n        ctx.beginPath();\n        const lineLoop = !!line.pathSegment(ctx, src);\n        let loop;\n        if (notShape) {\n            if (lineLoop) {\n                ctx.closePath();\n            } else {\n                interpolatedLineTo(ctx, target, end, property);\n            }\n            const targetLoop = !!target.pathSegment(ctx, tgt, {\n                move: lineLoop,\n                reverse: true\n            });\n            loop = lineLoop && targetLoop;\n            if (!loop) {\n                interpolatedLineTo(ctx, target, start, property);\n            }\n        }\n        ctx.closePath();\n        ctx.fill(loop ? 'evenodd' : 'nonzero');\n        ctx.restore();\n    }\n}\nfunction clipBounds(ctx, scale, bounds) {\n    const { top , bottom  } = scale.chart.chartArea;\n    const { property , start , end  } = bounds || {};\n    if (property === 'x') {\n        ctx.beginPath();\n        ctx.rect(start, top, end - start, bottom - top);\n        ctx.clip();\n    }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n    const interpolatedPoint = target.interpolate(point, property);\n    if (interpolatedPoint) {\n        ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n    }\n}\n\nvar index = {\n    id: 'filler',\n    afterDatasetsUpdate (chart, _args, options) {\n        const count = (chart.data.datasets || []).length;\n        const sources = [];\n        let meta, i, line, source;\n        for(i = 0; i < count; ++i){\n            meta = chart.getDatasetMeta(i);\n            line = meta.dataset;\n            source = null;\n            if (line && line.options && line instanceof LineElement) {\n                source = {\n                    visible: chart.isDatasetVisible(i),\n                    index: i,\n                    fill: _decodeFill(line, i, count),\n                    chart,\n                    axis: meta.controller.options.indexAxis,\n                    scale: meta.vScale,\n                    line\n                };\n            }\n            meta.$filler = source;\n            sources.push(source);\n        }\n        for(i = 0; i < count; ++i){\n            source = sources[i];\n            if (!source || source.fill === false) {\n                continue;\n            }\n            source.fill = _resolveTarget(sources, i, options.propagate);\n        }\n    },\n    beforeDraw (chart, _args, options) {\n        const draw = options.drawTime === 'beforeDraw';\n        const metasets = chart.getSortedVisibleDatasetMetas();\n        const area = chart.chartArea;\n        for(let i = metasets.length - 1; i >= 0; --i){\n            const source = metasets[i].$filler;\n            if (!source) {\n                continue;\n            }\n            source.line.updateControlPoints(area, source.axis);\n            if (draw && source.fill) {\n                _drawfill(chart.ctx, source, area);\n            }\n        }\n    },\n    beforeDatasetsDraw (chart, _args, options) {\n        if (options.drawTime !== 'beforeDatasetsDraw') {\n            return;\n        }\n        const metasets = chart.getSortedVisibleDatasetMetas();\n        for(let i = metasets.length - 1; i >= 0; --i){\n            const source = metasets[i].$filler;\n            if (_shouldApplyFill(source)) {\n                _drawfill(chart.ctx, source, chart.chartArea);\n            }\n        }\n    },\n    beforeDatasetDraw (chart, args, options) {\n        const source = args.meta.$filler;\n        if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n            return;\n        }\n        _drawfill(chart.ctx, source, chart.chartArea);\n    },\n    defaults: {\n        propagate: true,\n        drawTime: 'beforeDatasetDraw'\n    }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n    let { boxHeight =fontSize , boxWidth =fontSize  } = labelOpts;\n    if (labelOpts.usePointStyle) {\n        boxHeight = Math.min(boxHeight, fontSize);\n        boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n    }\n    return {\n        boxWidth,\n        boxHeight,\n        itemHeight: Math.max(fontSize, boxHeight)\n    };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n        super();\n        this._added = false;\n        this.legendHitBoxes = [];\n this._hoveredItem = null;\n        this.doughnutMode = false;\n        this.chart = config.chart;\n        this.options = config.options;\n        this.ctx = config.ctx;\n        this.legendItems = undefined;\n        this.columnSizes = undefined;\n        this.lineWidths = undefined;\n        this.maxHeight = undefined;\n        this.maxWidth = undefined;\n        this.top = undefined;\n        this.bottom = undefined;\n        this.left = undefined;\n        this.right = undefined;\n        this.height = undefined;\n        this.width = undefined;\n        this._margins = undefined;\n        this.position = undefined;\n        this.weight = undefined;\n        this.fullSize = undefined;\n    }\n    update(maxWidth, maxHeight, margins) {\n        this.maxWidth = maxWidth;\n        this.maxHeight = maxHeight;\n        this._margins = margins;\n        this.setDimensions();\n        this.buildLabels();\n        this.fit();\n    }\n    setDimensions() {\n        if (this.isHorizontal()) {\n            this.width = this.maxWidth;\n            this.left = this._margins.left;\n            this.right = this.width;\n        } else {\n            this.height = this.maxHeight;\n            this.top = this._margins.top;\n            this.bottom = this.height;\n        }\n    }\n    buildLabels() {\n        const labelOpts = this.options.labels || {};\n        let legendItems = callback(labelOpts.generateLabels, [\n            this.chart\n        ], this) || [];\n        if (labelOpts.filter) {\n            legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n        }\n        if (labelOpts.sort) {\n            legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n        }\n        if (this.options.reverse) {\n            legendItems.reverse();\n        }\n        this.legendItems = legendItems;\n    }\n    fit() {\n        const { options , ctx  } = this;\n        if (!options.display) {\n            this.width = this.height = 0;\n            return;\n        }\n        const labelOpts = options.labels;\n        const labelFont = toFont(labelOpts.font);\n        const fontSize = labelFont.size;\n        const titleHeight = this._computeTitleHeight();\n        const { boxWidth , itemHeight  } = getBoxSize(labelOpts, fontSize);\n        let width, height;\n        ctx.font = labelFont.string;\n        if (this.isHorizontal()) {\n            width = this.maxWidth;\n            height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n        } else {\n            height = this.maxHeight;\n            width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n        }\n        this.width = Math.min(width, options.maxWidth || this.maxWidth);\n        this.height = Math.min(height, options.maxHeight || this.maxHeight);\n    }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n        const { ctx , maxWidth , options: { labels: { padding  }  }  } = this;\n        const hitboxes = this.legendHitBoxes = [];\n        const lineWidths = this.lineWidths = [\n            0\n        ];\n        const lineHeight = itemHeight + padding;\n        let totalHeight = titleHeight;\n        ctx.textAlign = 'left';\n        ctx.textBaseline = 'middle';\n        let row = -1;\n        let top = -lineHeight;\n        this.legendItems.forEach((legendItem, i)=>{\n            const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n            if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n                totalHeight += lineHeight;\n                lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n                top += lineHeight;\n                row++;\n            }\n            hitboxes[i] = {\n                left: 0,\n                top,\n                row,\n                width: itemWidth,\n                height: itemHeight\n            };\n            lineWidths[lineWidths.length - 1] += itemWidth + padding;\n        });\n        return totalHeight;\n    }\n    _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n        const { ctx , maxHeight , options: { labels: { padding  }  }  } = this;\n        const hitboxes = this.legendHitBoxes = [];\n        const columnSizes = this.columnSizes = [];\n        const heightLimit = maxHeight - titleHeight;\n        let totalWidth = padding;\n        let currentColWidth = 0;\n        let currentColHeight = 0;\n        let left = 0;\n        let col = 0;\n        this.legendItems.forEach((legendItem, i)=>{\n            const { itemWidth , itemHeight  } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n            if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n                totalWidth += currentColWidth + padding;\n                columnSizes.push({\n                    width: currentColWidth,\n                    height: currentColHeight\n                });\n                left += currentColWidth + padding;\n                col++;\n                currentColWidth = currentColHeight = 0;\n            }\n            hitboxes[i] = {\n                left,\n                top: currentColHeight,\n                col,\n                width: itemWidth,\n                height: itemHeight\n            };\n            currentColWidth = Math.max(currentColWidth, itemWidth);\n            currentColHeight += itemHeight + padding;\n        });\n        totalWidth += currentColWidth;\n        columnSizes.push({\n            width: currentColWidth,\n            height: currentColHeight\n        });\n        return totalWidth;\n    }\n    adjustHitBoxes() {\n        if (!this.options.display) {\n            return;\n        }\n        const titleHeight = this._computeTitleHeight();\n        const { legendHitBoxes: hitboxes , options: { align , labels: { padding  } , rtl  }  } = this;\n        const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n        if (this.isHorizontal()) {\n            let row = 0;\n            let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n            for (const hitbox of hitboxes){\n                if (row !== hitbox.row) {\n                    row = hitbox.row;\n                    left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n                }\n                hitbox.top += this.top + titleHeight + padding;\n                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n                left += hitbox.width + padding;\n            }\n        } else {\n            let col = 0;\n            let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n            for (const hitbox of hitboxes){\n                if (hitbox.col !== col) {\n                    col = hitbox.col;\n                    top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n                }\n                hitbox.top = top;\n                hitbox.left += this.left + padding;\n                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n                top += hitbox.height + padding;\n            }\n        }\n    }\n    isHorizontal() {\n        return this.options.position === 'top' || this.options.position === 'bottom';\n    }\n    draw() {\n        if (this.options.display) {\n            const ctx = this.ctx;\n            clipArea(ctx, this);\n            this._draw();\n            unclipArea(ctx);\n        }\n    }\n _draw() {\n        const { options: opts , columnSizes , lineWidths , ctx  } = this;\n        const { align , labels: labelOpts  } = opts;\n        const defaultColor = defaults.color;\n        const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n        const labelFont = toFont(labelOpts.font);\n        const { padding  } = labelOpts;\n        const fontSize = labelFont.size;\n        const halfFontSize = fontSize / 2;\n        let cursor;\n        this.drawTitle();\n        ctx.textAlign = rtlHelper.textAlign('left');\n        ctx.textBaseline = 'middle';\n        ctx.lineWidth = 0.5;\n        ctx.font = labelFont.string;\n        const { boxWidth , boxHeight , itemHeight  } = getBoxSize(labelOpts, fontSize);\n        const drawLegendBox = function(x, y, legendItem) {\n            if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n                return;\n            }\n            ctx.save();\n            const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n            ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n            ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n            ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n            ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n            ctx.lineWidth = lineWidth;\n            ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n            ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n            if (labelOpts.usePointStyle) {\n                const drawOptions = {\n                    radius: boxHeight * Math.SQRT2 / 2,\n                    pointStyle: legendItem.pointStyle,\n                    rotation: legendItem.rotation,\n                    borderWidth: lineWidth\n                };\n                const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n                const centerY = y + halfFontSize;\n                drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n            } else {\n                const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n                const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n                const borderRadius = toTRBLCorners(legendItem.borderRadius);\n                ctx.beginPath();\n                if (Object.values(borderRadius).some((v)=>v !== 0)) {\n                    addRoundedRectPath(ctx, {\n                        x: xBoxLeft,\n                        y: yBoxTop,\n                        w: boxWidth,\n                        h: boxHeight,\n                        radius: borderRadius\n                    });\n                } else {\n                    ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n                }\n                ctx.fill();\n                if (lineWidth !== 0) {\n                    ctx.stroke();\n                }\n            }\n            ctx.restore();\n        };\n        const fillText = function(x, y, legendItem) {\n            renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n                strikethrough: legendItem.hidden,\n                textAlign: rtlHelper.textAlign(legendItem.textAlign)\n            });\n        };\n        const isHorizontal = this.isHorizontal();\n        const titleHeight = this._computeTitleHeight();\n        if (isHorizontal) {\n            cursor = {\n                x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n                y: this.top + padding + titleHeight,\n                line: 0\n            };\n        } else {\n            cursor = {\n                x: this.left + padding,\n                y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n                line: 0\n            };\n        }\n        overrideTextDirection(this.ctx, opts.textDirection);\n        const lineHeight = itemHeight + padding;\n        this.legendItems.forEach((legendItem, i)=>{\n            ctx.strokeStyle = legendItem.fontColor;\n            ctx.fillStyle = legendItem.fontColor;\n            const textWidth = ctx.measureText(legendItem.text).width;\n            const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n            const width = boxWidth + halfFontSize + textWidth;\n            let x = cursor.x;\n            let y = cursor.y;\n            rtlHelper.setWidth(this.width);\n            if (isHorizontal) {\n                if (i > 0 && x + width + padding > this.right) {\n                    y = cursor.y += lineHeight;\n                    cursor.line++;\n                    x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n                }\n            } else if (i > 0 && y + lineHeight > this.bottom) {\n                x = cursor.x = x + columnSizes[cursor.line].width + padding;\n                cursor.line++;\n                y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n            }\n            const realX = rtlHelper.x(x);\n            drawLegendBox(realX, y, legendItem);\n            x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n            fillText(rtlHelper.x(x), y, legendItem);\n            if (isHorizontal) {\n                cursor.x += width + padding;\n            } else if (typeof legendItem.text !== 'string') {\n                const fontLineHeight = labelFont.lineHeight;\n                cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n            } else {\n                cursor.y += lineHeight;\n            }\n        });\n        restoreTextDirection(this.ctx, opts.textDirection);\n    }\n drawTitle() {\n        const opts = this.options;\n        const titleOpts = opts.title;\n        const titleFont = toFont(titleOpts.font);\n        const titlePadding = toPadding(titleOpts.padding);\n        if (!titleOpts.display) {\n            return;\n        }\n        const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n        const ctx = this.ctx;\n        const position = titleOpts.position;\n        const halfFontSize = titleFont.size / 2;\n        const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n        let y;\n        let left = this.left;\n        let maxWidth = this.width;\n        if (this.isHorizontal()) {\n            maxWidth = Math.max(...this.lineWidths);\n            y = this.top + topPaddingPlusHalfFontSize;\n            left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n        } else {\n            const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n            y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n        }\n        const x = _alignStartEnd(position, left, left + maxWidth);\n        ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n        ctx.textBaseline = 'middle';\n        ctx.strokeStyle = titleOpts.color;\n        ctx.fillStyle = titleOpts.color;\n        ctx.font = titleFont.string;\n        renderText(ctx, titleOpts.text, x, y, titleFont);\n    }\n _computeTitleHeight() {\n        const titleOpts = this.options.title;\n        const titleFont = toFont(titleOpts.font);\n        const titlePadding = toPadding(titleOpts.padding);\n        return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n    }\n _getLegendItemAt(x, y) {\n        let i, hitBox, lh;\n        if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n            lh = this.legendHitBoxes;\n            for(i = 0; i < lh.length; ++i){\n                hitBox = lh[i];\n                if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n                    return this.legendItems[i];\n                }\n            }\n        }\n        return null;\n    }\n handleEvent(e) {\n        const opts = this.options;\n        if (!isListened(e.type, opts)) {\n            return;\n        }\n        const hoveredItem = this._getLegendItemAt(e.x, e.y);\n        if (e.type === 'mousemove' || e.type === 'mouseout') {\n            const previous = this._hoveredItem;\n            const sameItem = itemsEqual(previous, hoveredItem);\n            if (previous && !sameItem) {\n                callback(opts.onLeave, [\n                    e,\n                    previous,\n                    this\n                ], this);\n            }\n            this._hoveredItem = hoveredItem;\n            if (hoveredItem && !sameItem) {\n                callback(opts.onHover, [\n                    e,\n                    hoveredItem,\n                    this\n                ], this);\n            }\n        } else if (hoveredItem) {\n            callback(opts.onClick, [\n                e,\n                hoveredItem,\n                this\n            ], this);\n        }\n    }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n    const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n    const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n    return {\n        itemWidth,\n        itemHeight\n    };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n    let legendItemText = legendItem.text;\n    if (legendItemText && typeof legendItemText !== 'string') {\n        legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n    }\n    return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n    let itemHeight = _itemHeight;\n    if (typeof legendItem.text !== 'string') {\n        itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n    }\n    return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n    const labelHeight = legendItem.text ? legendItem.text.length : 0;\n    return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n    if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n        return true;\n    }\n    if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n        return true;\n    }\n    return false;\n}\nvar plugin_legend = {\n    id: 'legend',\n _element: Legend,\n    start (chart, _args, options) {\n        const legend = chart.legend = new Legend({\n            ctx: chart.ctx,\n            options,\n            chart\n        });\n        layouts.configure(chart, legend, options);\n        layouts.addBox(chart, legend);\n    },\n    stop (chart) {\n        layouts.removeBox(chart, chart.legend);\n        delete chart.legend;\n    },\n    beforeUpdate (chart, _args, options) {\n        const legend = chart.legend;\n        layouts.configure(chart, legend, options);\n        legend.options = options;\n    },\n    afterUpdate (chart) {\n        const legend = chart.legend;\n        legend.buildLabels();\n        legend.adjustHitBoxes();\n    },\n    afterEvent (chart, args) {\n        if (!args.replay) {\n            chart.legend.handleEvent(args.event);\n        }\n    },\n    defaults: {\n        display: true,\n        position: 'top',\n        align: 'center',\n        fullSize: true,\n        reverse: false,\n        weight: 1000,\n        onClick (e, legendItem, legend) {\n            const index = legendItem.datasetIndex;\n            const ci = legend.chart;\n            if (ci.isDatasetVisible(index)) {\n                ci.hide(index);\n                legendItem.hidden = true;\n            } else {\n                ci.show(index);\n                legendItem.hidden = false;\n            }\n        },\n        onHover: null,\n        onLeave: null,\n        labels: {\n            color: (ctx)=>ctx.chart.options.color,\n            boxWidth: 40,\n            padding: 10,\n            generateLabels (chart) {\n                const datasets = chart.data.datasets;\n                const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;\n                return chart._getSortedDatasetMetas().map((meta)=>{\n                    const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n                    const borderWidth = toPadding(style.borderWidth);\n                    return {\n                        text: datasets[meta.index].label,\n                        fillStyle: style.backgroundColor,\n                        fontColor: color,\n                        hidden: !meta.visible,\n                        lineCap: style.borderCapStyle,\n                        lineDash: style.borderDash,\n                        lineDashOffset: style.borderDashOffset,\n                        lineJoin: style.borderJoinStyle,\n                        lineWidth: (borderWidth.width + borderWidth.height) / 4,\n                        strokeStyle: style.borderColor,\n                        pointStyle: pointStyle || style.pointStyle,\n                        rotation: style.rotation,\n                        textAlign: textAlign || style.textAlign,\n                        borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n                        datasetIndex: meta.index\n                    };\n                }, this);\n            }\n        },\n        title: {\n            color: (ctx)=>ctx.chart.options.color,\n            display: false,\n            position: 'center',\n            text: ''\n        }\n    },\n    descriptors: {\n        _scriptable: (name)=>!name.startsWith('on'),\n        labels: {\n            _scriptable: (name)=>![\n                    'generateLabels',\n                    'filter',\n                    'sort'\n                ].includes(name)\n        }\n    }\n};\n\nclass Title extends Element {\n constructor(config){\n        super();\n        this.chart = config.chart;\n        this.options = config.options;\n        this.ctx = config.ctx;\n        this._padding = undefined;\n        this.top = undefined;\n        this.bottom = undefined;\n        this.left = undefined;\n        this.right = undefined;\n        this.width = undefined;\n        this.height = undefined;\n        this.position = undefined;\n        this.weight = undefined;\n        this.fullSize = undefined;\n    }\n    update(maxWidth, maxHeight) {\n        const opts = this.options;\n        this.left = 0;\n        this.top = 0;\n        if (!opts.display) {\n            this.width = this.height = this.right = this.bottom = 0;\n            return;\n        }\n        this.width = this.right = maxWidth;\n        this.height = this.bottom = maxHeight;\n        const lineCount = isArray(opts.text) ? opts.text.length : 1;\n        this._padding = toPadding(opts.padding);\n        const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n        if (this.isHorizontal()) {\n            this.height = textSize;\n        } else {\n            this.width = textSize;\n        }\n    }\n    isHorizontal() {\n        const pos = this.options.position;\n        return pos === 'top' || pos === 'bottom';\n    }\n    _drawArgs(offset) {\n        const { top , left , bottom , right , options  } = this;\n        const align = options.align;\n        let rotation = 0;\n        let maxWidth, titleX, titleY;\n        if (this.isHorizontal()) {\n            titleX = _alignStartEnd(align, left, right);\n            titleY = top + offset;\n            maxWidth = right - left;\n        } else {\n            if (options.position === 'left') {\n                titleX = left + offset;\n                titleY = _alignStartEnd(align, bottom, top);\n                rotation = PI * -0.5;\n            } else {\n                titleX = right - offset;\n                titleY = _alignStartEnd(align, top, bottom);\n                rotation = PI * 0.5;\n            }\n            maxWidth = bottom - top;\n        }\n        return {\n            titleX,\n            titleY,\n            maxWidth,\n            rotation\n        };\n    }\n    draw() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        if (!opts.display) {\n            return;\n        }\n        const fontOpts = toFont(opts.font);\n        const lineHeight = fontOpts.lineHeight;\n        const offset = lineHeight / 2 + this._padding.top;\n        const { titleX , titleY , maxWidth , rotation  } = this._drawArgs(offset);\n        renderText(ctx, opts.text, 0, 0, fontOpts, {\n            color: opts.color,\n            maxWidth,\n            rotation,\n            textAlign: _toLeftRightCenter(opts.align),\n            textBaseline: 'middle',\n            translation: [\n                titleX,\n                titleY\n            ]\n        });\n    }\n}\nfunction createTitle(chart, titleOpts) {\n    const title = new Title({\n        ctx: chart.ctx,\n        options: titleOpts,\n        chart\n    });\n    layouts.configure(chart, title, titleOpts);\n    layouts.addBox(chart, title);\n    chart.titleBlock = title;\n}\nvar plugin_title = {\n    id: 'title',\n _element: Title,\n    start (chart, _args, options) {\n        createTitle(chart, options);\n    },\n    stop (chart) {\n        const titleBlock = chart.titleBlock;\n        layouts.removeBox(chart, titleBlock);\n        delete chart.titleBlock;\n    },\n    beforeUpdate (chart, _args, options) {\n        const title = chart.titleBlock;\n        layouts.configure(chart, title, options);\n        title.options = options;\n    },\n    defaults: {\n        align: 'center',\n        display: false,\n        font: {\n            weight: 'bold'\n        },\n        fullSize: true,\n        padding: 10,\n        position: 'top',\n        text: '',\n        weight: 2000\n    },\n    defaultRoutes: {\n        color: 'color'\n    },\n    descriptors: {\n        _scriptable: true,\n        _indexable: false\n    }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n    id: 'subtitle',\n    start (chart, _args, options) {\n        const title = new Title({\n            ctx: chart.ctx,\n            options,\n            chart\n        });\n        layouts.configure(chart, title, options);\n        layouts.addBox(chart, title);\n        map.set(chart, title);\n    },\n    stop (chart) {\n        layouts.removeBox(chart, map.get(chart));\n        map.delete(chart);\n    },\n    beforeUpdate (chart, _args, options) {\n        const title = map.get(chart);\n        layouts.configure(chart, title, options);\n        title.options = options;\n    },\n    defaults: {\n        align: 'center',\n        display: false,\n        font: {\n            weight: 'normal'\n        },\n        fullSize: true,\n        padding: 0,\n        position: 'top',\n        text: '',\n        weight: 1500\n    },\n    defaultRoutes: {\n        color: 'color'\n    },\n    descriptors: {\n        _scriptable: true,\n        _indexable: false\n    }\n};\n\nconst positioners = {\n average (items) {\n        if (!items.length) {\n            return false;\n        }\n        let i, len;\n        let xSet = new Set();\n        let y = 0;\n        let count = 0;\n        for(i = 0, len = items.length; i < len; ++i){\n            const el = items[i].element;\n            if (el && el.hasValue()) {\n                const pos = el.tooltipPosition();\n                xSet.add(pos.x);\n                y += pos.y;\n                ++count;\n            }\n        }\n        if (count === 0 || xSet.size === 0) {\n            return false;\n        }\n        const xAverage = [\n            ...xSet\n        ].reduce((a, b)=>a + b) / xSet.size;\n        return {\n            x: xAverage,\n            y: y / count\n        };\n    },\n nearest (items, eventPosition) {\n        if (!items.length) {\n            return false;\n        }\n        let x = eventPosition.x;\n        let y = eventPosition.y;\n        let minDistance = Number.POSITIVE_INFINITY;\n        let i, len, nearestElement;\n        for(i = 0, len = items.length; i < len; ++i){\n            const el = items[i].element;\n            if (el && el.hasValue()) {\n                const center = el.getCenterPoint();\n                const d = distanceBetweenPoints(eventPosition, center);\n                if (d < minDistance) {\n                    minDistance = d;\n                    nearestElement = el;\n                }\n            }\n        }\n        if (nearestElement) {\n            const tp = nearestElement.tooltipPosition();\n            x = tp.x;\n            y = tp.y;\n        }\n        return {\n            x,\n            y\n        };\n    }\n};\nfunction pushOrConcat(base, toPush) {\n    if (toPush) {\n        if (isArray(toPush)) {\n            Array.prototype.push.apply(base, toPush);\n        } else {\n            base.push(toPush);\n        }\n    }\n    return base;\n}\n function splitNewlines(str) {\n    if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n        return str.split('\\n');\n    }\n    return str;\n}\n function createTooltipItem(chart, item) {\n    const { element , datasetIndex , index  } = item;\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n    const { label , value  } = controller.getLabelAndValue(index);\n    return {\n        chart,\n        label,\n        parsed: controller.getParsed(index),\n        raw: chart.data.datasets[datasetIndex].data[index],\n        formattedValue: value,\n        dataset: controller.getDataset(),\n        dataIndex: index,\n        datasetIndex,\n        element\n    };\n}\n function getTooltipSize(tooltip, options) {\n    const ctx = tooltip.chart.ctx;\n    const { body , footer , title  } = tooltip;\n    const { boxWidth , boxHeight  } = options;\n    const bodyFont = toFont(options.bodyFont);\n    const titleFont = toFont(options.titleFont);\n    const footerFont = toFont(options.footerFont);\n    const titleLineCount = title.length;\n    const footerLineCount = footer.length;\n    const bodyLineItemCount = body.length;\n    const padding = toPadding(options.padding);\n    let height = padding.height;\n    let width = 0;\n    let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n    combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n    if (titleLineCount) {\n        height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n    }\n    if (combinedBodyLength) {\n        const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n        height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n    }\n    if (footerLineCount) {\n        height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n    }\n    let widthPadding = 0;\n    const maxLineWidth = function(line) {\n        width = Math.max(width, ctx.measureText(line).width + widthPadding);\n    };\n    ctx.save();\n    ctx.font = titleFont.string;\n    each(tooltip.title, maxLineWidth);\n    ctx.font = bodyFont.string;\n    each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n    widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n    each(body, (bodyItem)=>{\n        each(bodyItem.before, maxLineWidth);\n        each(bodyItem.lines, maxLineWidth);\n        each(bodyItem.after, maxLineWidth);\n    });\n    widthPadding = 0;\n    ctx.font = footerFont.string;\n    each(tooltip.footer, maxLineWidth);\n    ctx.restore();\n    width += padding.width;\n    return {\n        width,\n        height\n    };\n}\nfunction determineYAlign(chart, size) {\n    const { y , height  } = size;\n    if (y < height / 2) {\n        return 'top';\n    } else if (y > chart.height - height / 2) {\n        return 'bottom';\n    }\n    return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n    const { x , width  } = size;\n    const caret = options.caretSize + options.caretPadding;\n    if (xAlign === 'left' && x + width + caret > chart.width) {\n        return true;\n    }\n    if (xAlign === 'right' && x - width - caret < 0) {\n        return true;\n    }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n    const { x , width  } = size;\n    const { width: chartWidth , chartArea: { left , right  }  } = chart;\n    let xAlign = 'center';\n    if (yAlign === 'center') {\n        xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n    } else if (x <= width / 2) {\n        xAlign = 'left';\n    } else if (x >= chartWidth - width / 2) {\n        xAlign = 'right';\n    }\n    if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n        xAlign = 'center';\n    }\n    return xAlign;\n}\n function determineAlignment(chart, options, size) {\n    const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n    return {\n        xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n        yAlign\n    };\n}\nfunction alignX(size, xAlign) {\n    let { x , width  } = size;\n    if (xAlign === 'right') {\n        x -= width;\n    } else if (xAlign === 'center') {\n        x -= width / 2;\n    }\n    return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n    let { y , height  } = size;\n    if (yAlign === 'top') {\n        y += paddingAndSize;\n    } else if (yAlign === 'bottom') {\n        y -= height + paddingAndSize;\n    } else {\n        y -= height / 2;\n    }\n    return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n    const { caretSize , caretPadding , cornerRadius  } = options;\n    const { xAlign , yAlign  } = alignment;\n    const paddingAndSize = caretSize + caretPadding;\n    const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(cornerRadius);\n    let x = alignX(size, xAlign);\n    const y = alignY(size, yAlign, paddingAndSize);\n    if (yAlign === 'center') {\n        if (xAlign === 'left') {\n            x += paddingAndSize;\n        } else if (xAlign === 'right') {\n            x -= paddingAndSize;\n        }\n    } else if (xAlign === 'left') {\n        x -= Math.max(topLeft, bottomLeft) + caretSize;\n    } else if (xAlign === 'right') {\n        x += Math.max(topRight, bottomRight) + caretSize;\n    }\n    return {\n        x: _limitValue(x, 0, chart.width - size.width),\n        y: _limitValue(y, 0, chart.height - size.height)\n    };\n}\nfunction getAlignedX(tooltip, align, options) {\n    const padding = toPadding(options.padding);\n    return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n    return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n    return createContext(parent, {\n        tooltip,\n        tooltipItems,\n        type: 'tooltip'\n    });\n}\nfunction overrideCallbacks(callbacks, context) {\n    const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n    return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n    beforeTitle: noop,\n    title (tooltipItems) {\n        if (tooltipItems.length > 0) {\n            const item = tooltipItems[0];\n            const labels = item.chart.data.labels;\n            const labelCount = labels ? labels.length : 0;\n            if (this && this.options && this.options.mode === 'dataset') {\n                return item.dataset.label || '';\n            } else if (item.label) {\n                return item.label;\n            } else if (labelCount > 0 && item.dataIndex < labelCount) {\n                return labels[item.dataIndex];\n            }\n        }\n        return '';\n    },\n    afterTitle: noop,\n    beforeBody: noop,\n    beforeLabel: noop,\n    label (tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n            return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n            label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n            label += value;\n        }\n        return label;\n    },\n    labelColor (tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n            borderColor: options.borderColor,\n            backgroundColor: options.backgroundColor,\n            borderWidth: options.borderWidth,\n            borderDash: options.borderDash,\n            borderDashOffset: options.borderDashOffset,\n            borderRadius: 0\n        };\n    },\n    labelTextColor () {\n        return this.options.bodyColor;\n    },\n    labelPointStyle (tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n            pointStyle: options.pointStyle,\n            rotation: options.rotation\n        };\n    },\n    afterLabel: noop,\n    afterBody: noop,\n    beforeFooter: noop,\n    footer: noop,\n    afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n    const result = callbacks[name].call(ctx, arg);\n    if (typeof result === 'undefined') {\n        return defaultCallbacks[name].call(ctx, arg);\n    }\n    return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n    constructor(config){\n        super();\n        this.opacity = 0;\n        this._active = [];\n        this._eventPosition = undefined;\n        this._size = undefined;\n        this._cachedAnimations = undefined;\n        this._tooltipItems = [];\n        this.$animations = undefined;\n        this.$context = undefined;\n        this.chart = config.chart;\n        this.options = config.options;\n        this.dataPoints = undefined;\n        this.title = undefined;\n        this.beforeBody = undefined;\n        this.body = undefined;\n        this.afterBody = undefined;\n        this.footer = undefined;\n        this.xAlign = undefined;\n        this.yAlign = undefined;\n        this.x = undefined;\n        this.y = undefined;\n        this.height = undefined;\n        this.width = undefined;\n        this.caretX = undefined;\n        this.caretY = undefined;\n        this.labelColors = undefined;\n        this.labelPointStyles = undefined;\n        this.labelTextColors = undefined;\n    }\n    initialize(options) {\n        this.options = options;\n        this._cachedAnimations = undefined;\n        this.$context = undefined;\n    }\n _resolveAnimations() {\n        const cached = this._cachedAnimations;\n        if (cached) {\n            return cached;\n        }\n        const chart = this.chart;\n        const options = this.options.setContext(this.getContext());\n        const opts = options.enabled && chart.options.animation && options.animations;\n        const animations = new Animations(this.chart, opts);\n        if (opts._cacheable) {\n            this._cachedAnimations = Object.freeze(animations);\n        }\n        return animations;\n    }\n getContext() {\n        return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n    }\n    getTitle(context, options) {\n        const { callbacks  } = options;\n        const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n        const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n        const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n        let lines = [];\n        lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n        lines = pushOrConcat(lines, splitNewlines(title));\n        lines = pushOrConcat(lines, splitNewlines(afterTitle));\n        return lines;\n    }\n    getBeforeBody(tooltipItems, options) {\n        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n    }\n    getBody(tooltipItems, options) {\n        const { callbacks  } = options;\n        const bodyItems = [];\n        each(tooltipItems, (context)=>{\n            const bodyItem = {\n                before: [],\n                lines: [],\n                after: []\n            };\n            const scoped = overrideCallbacks(callbacks, context);\n            pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n            pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n            pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n            bodyItems.push(bodyItem);\n        });\n        return bodyItems;\n    }\n    getAfterBody(tooltipItems, options) {\n        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n    }\n    getFooter(tooltipItems, options) {\n        const { callbacks  } = options;\n        const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n        const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n        const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n        let lines = [];\n        lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n        lines = pushOrConcat(lines, splitNewlines(footer));\n        lines = pushOrConcat(lines, splitNewlines(afterFooter));\n        return lines;\n    }\n _createItems(options) {\n        const active = this._active;\n        const data = this.chart.data;\n        const labelColors = [];\n        const labelPointStyles = [];\n        const labelTextColors = [];\n        let tooltipItems = [];\n        let i, len;\n        for(i = 0, len = active.length; i < len; ++i){\n            tooltipItems.push(createTooltipItem(this.chart, active[i]));\n        }\n        if (options.filter) {\n            tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n        }\n        if (options.itemSort) {\n            tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n        }\n        each(tooltipItems, (context)=>{\n            const scoped = overrideCallbacks(options.callbacks, context);\n            labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n            labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n            labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n        });\n        this.labelColors = labelColors;\n        this.labelPointStyles = labelPointStyles;\n        this.labelTextColors = labelTextColors;\n        this.dataPoints = tooltipItems;\n        return tooltipItems;\n    }\n    update(changed, replay) {\n        const options = this.options.setContext(this.getContext());\n        const active = this._active;\n        let properties;\n        let tooltipItems = [];\n        if (!active.length) {\n            if (this.opacity !== 0) {\n                properties = {\n                    opacity: 0\n                };\n            }\n        } else {\n            const position = positioners[options.position].call(this, active, this._eventPosition);\n            tooltipItems = this._createItems(options);\n            this.title = this.getTitle(tooltipItems, options);\n            this.beforeBody = this.getBeforeBody(tooltipItems, options);\n            this.body = this.getBody(tooltipItems, options);\n            this.afterBody = this.getAfterBody(tooltipItems, options);\n            this.footer = this.getFooter(tooltipItems, options);\n            const size = this._size = getTooltipSize(this, options);\n            const positionAndSize = Object.assign({}, position, size);\n            const alignment = determineAlignment(this.chart, options, positionAndSize);\n            const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n            this.xAlign = alignment.xAlign;\n            this.yAlign = alignment.yAlign;\n            properties = {\n                opacity: 1,\n                x: backgroundPoint.x,\n                y: backgroundPoint.y,\n                width: size.width,\n                height: size.height,\n                caretX: position.x,\n                caretY: position.y\n            };\n        }\n        this._tooltipItems = tooltipItems;\n        this.$context = undefined;\n        if (properties) {\n            this._resolveAnimations().update(this, properties);\n        }\n        if (changed && options.external) {\n            options.external.call(this, {\n                chart: this.chart,\n                tooltip: this,\n                replay\n            });\n        }\n    }\n    drawCaret(tooltipPoint, ctx, size, options) {\n        const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n        ctx.lineTo(caretPosition.x1, caretPosition.y1);\n        ctx.lineTo(caretPosition.x2, caretPosition.y2);\n        ctx.lineTo(caretPosition.x3, caretPosition.y3);\n    }\n    getCaretPosition(tooltipPoint, size, options) {\n        const { xAlign , yAlign  } = this;\n        const { caretSize , cornerRadius  } = options;\n        const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(cornerRadius);\n        const { x: ptX , y: ptY  } = tooltipPoint;\n        const { width , height  } = size;\n        let x1, x2, x3, y1, y2, y3;\n        if (yAlign === 'center') {\n            y2 = ptY + height / 2;\n            if (xAlign === 'left') {\n                x1 = ptX;\n                x2 = x1 - caretSize;\n                y1 = y2 + caretSize;\n                y3 = y2 - caretSize;\n            } else {\n                x1 = ptX + width;\n                x2 = x1 + caretSize;\n                y1 = y2 - caretSize;\n                y3 = y2 + caretSize;\n            }\n            x3 = x1;\n        } else {\n            if (xAlign === 'left') {\n                x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n            } else if (xAlign === 'right') {\n                x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n            } else {\n                x2 = this.caretX;\n            }\n            if (yAlign === 'top') {\n                y1 = ptY;\n                y2 = y1 - caretSize;\n                x1 = x2 - caretSize;\n                x3 = x2 + caretSize;\n            } else {\n                y1 = ptY + height;\n                y2 = y1 + caretSize;\n                x1 = x2 + caretSize;\n                x3 = x2 - caretSize;\n            }\n            y3 = y1;\n        }\n        return {\n            x1,\n            x2,\n            x3,\n            y1,\n            y2,\n            y3\n        };\n    }\n    drawTitle(pt, ctx, options) {\n        const title = this.title;\n        const length = title.length;\n        let titleFont, titleSpacing, i;\n        if (length) {\n            const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n            pt.x = getAlignedX(this, options.titleAlign, options);\n            ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n            ctx.textBaseline = 'middle';\n            titleFont = toFont(options.titleFont);\n            titleSpacing = options.titleSpacing;\n            ctx.fillStyle = options.titleColor;\n            ctx.font = titleFont.string;\n            for(i = 0; i < length; ++i){\n                ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n                pt.y += titleFont.lineHeight + titleSpacing;\n                if (i + 1 === length) {\n                    pt.y += options.titleMarginBottom - titleSpacing;\n                }\n            }\n        }\n    }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n        const labelColor = this.labelColors[i];\n        const labelPointStyle = this.labelPointStyles[i];\n        const { boxHeight , boxWidth  } = options;\n        const bodyFont = toFont(options.bodyFont);\n        const colorX = getAlignedX(this, 'left', options);\n        const rtlColorX = rtlHelper.x(colorX);\n        const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n        const colorY = pt.y + yOffSet;\n        if (options.usePointStyle) {\n            const drawOptions = {\n                radius: Math.min(boxWidth, boxHeight) / 2,\n                pointStyle: labelPointStyle.pointStyle,\n                rotation: labelPointStyle.rotation,\n                borderWidth: 1\n            };\n            const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n            const centerY = colorY + boxHeight / 2;\n            ctx.strokeStyle = options.multiKeyBackground;\n            ctx.fillStyle = options.multiKeyBackground;\n            drawPoint(ctx, drawOptions, centerX, centerY);\n            ctx.strokeStyle = labelColor.borderColor;\n            ctx.fillStyle = labelColor.backgroundColor;\n            drawPoint(ctx, drawOptions, centerX, centerY);\n        } else {\n            ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n            ctx.strokeStyle = labelColor.borderColor;\n            ctx.setLineDash(labelColor.borderDash || []);\n            ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n            const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n            const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n            const borderRadius = toTRBLCorners(labelColor.borderRadius);\n            if (Object.values(borderRadius).some((v)=>v !== 0)) {\n                ctx.beginPath();\n                ctx.fillStyle = options.multiKeyBackground;\n                addRoundedRectPath(ctx, {\n                    x: outerX,\n                    y: colorY,\n                    w: boxWidth,\n                    h: boxHeight,\n                    radius: borderRadius\n                });\n                ctx.fill();\n                ctx.stroke();\n                ctx.fillStyle = labelColor.backgroundColor;\n                ctx.beginPath();\n                addRoundedRectPath(ctx, {\n                    x: innerX,\n                    y: colorY + 1,\n                    w: boxWidth - 2,\n                    h: boxHeight - 2,\n                    radius: borderRadius\n                });\n                ctx.fill();\n            } else {\n                ctx.fillStyle = options.multiKeyBackground;\n                ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n                ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n                ctx.fillStyle = labelColor.backgroundColor;\n                ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n            }\n        }\n        ctx.fillStyle = this.labelTextColors[i];\n    }\n    drawBody(pt, ctx, options) {\n        const { body  } = this;\n        const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding  } = options;\n        const bodyFont = toFont(options.bodyFont);\n        let bodyLineHeight = bodyFont.lineHeight;\n        let xLinePadding = 0;\n        const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n        const fillLineOfText = function(line) {\n            ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n            pt.y += bodyLineHeight + bodySpacing;\n        };\n        const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n        let bodyItem, textColor, lines, i, j, ilen, jlen;\n        ctx.textAlign = bodyAlign;\n        ctx.textBaseline = 'middle';\n        ctx.font = bodyFont.string;\n        pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n        ctx.fillStyle = options.bodyColor;\n        each(this.beforeBody, fillLineOfText);\n        xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n        for(i = 0, ilen = body.length; i < ilen; ++i){\n            bodyItem = body[i];\n            textColor = this.labelTextColors[i];\n            ctx.fillStyle = textColor;\n            each(bodyItem.before, fillLineOfText);\n            lines = bodyItem.lines;\n            if (displayColors && lines.length) {\n                this._drawColorBox(ctx, pt, i, rtlHelper, options);\n                bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n            }\n            for(j = 0, jlen = lines.length; j < jlen; ++j){\n                fillLineOfText(lines[j]);\n                bodyLineHeight = bodyFont.lineHeight;\n            }\n            each(bodyItem.after, fillLineOfText);\n        }\n        xLinePadding = 0;\n        bodyLineHeight = bodyFont.lineHeight;\n        each(this.afterBody, fillLineOfText);\n        pt.y -= bodySpacing;\n    }\n    drawFooter(pt, ctx, options) {\n        const footer = this.footer;\n        const length = footer.length;\n        let footerFont, i;\n        if (length) {\n            const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n            pt.x = getAlignedX(this, options.footerAlign, options);\n            pt.y += options.footerMarginTop;\n            ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n            ctx.textBaseline = 'middle';\n            footerFont = toFont(options.footerFont);\n            ctx.fillStyle = options.footerColor;\n            ctx.font = footerFont.string;\n            for(i = 0; i < length; ++i){\n                ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n                pt.y += footerFont.lineHeight + options.footerSpacing;\n            }\n        }\n    }\n    drawBackground(pt, ctx, tooltipSize, options) {\n        const { xAlign , yAlign  } = this;\n        const { x , y  } = pt;\n        const { width , height  } = tooltipSize;\n        const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(options.cornerRadius);\n        ctx.fillStyle = options.backgroundColor;\n        ctx.strokeStyle = options.borderColor;\n        ctx.lineWidth = options.borderWidth;\n        ctx.beginPath();\n        ctx.moveTo(x + topLeft, y);\n        if (yAlign === 'top') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + width - topRight, y);\n        ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n        if (yAlign === 'center' && xAlign === 'right') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + width, y + height - bottomRight);\n        ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n        if (yAlign === 'bottom') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + bottomLeft, y + height);\n        ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n        if (yAlign === 'center' && xAlign === 'left') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x, y + topLeft);\n        ctx.quadraticCurveTo(x, y, x + topLeft, y);\n        ctx.closePath();\n        ctx.fill();\n        if (options.borderWidth > 0) {\n            ctx.stroke();\n        }\n    }\n _updateAnimationTarget(options) {\n        const chart = this.chart;\n        const anims = this.$animations;\n        const animX = anims && anims.x;\n        const animY = anims && anims.y;\n        if (animX || animY) {\n            const position = positioners[options.position].call(this, this._active, this._eventPosition);\n            if (!position) {\n                return;\n            }\n            const size = this._size = getTooltipSize(this, options);\n            const positionAndSize = Object.assign({}, position, this._size);\n            const alignment = determineAlignment(chart, options, positionAndSize);\n            const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n            if (animX._to !== point.x || animY._to !== point.y) {\n                this.xAlign = alignment.xAlign;\n                this.yAlign = alignment.yAlign;\n                this.width = size.width;\n                this.height = size.height;\n                this.caretX = position.x;\n                this.caretY = position.y;\n                this._resolveAnimations().update(this, point);\n            }\n        }\n    }\n _willRender() {\n        return !!this.opacity;\n    }\n    draw(ctx) {\n        const options = this.options.setContext(this.getContext());\n        let opacity = this.opacity;\n        if (!opacity) {\n            return;\n        }\n        this._updateAnimationTarget(options);\n        const tooltipSize = {\n            width: this.width,\n            height: this.height\n        };\n        const pt = {\n            x: this.x,\n            y: this.y\n        };\n        opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n        const padding = toPadding(options.padding);\n        const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n        if (options.enabled && hasTooltipContent) {\n            ctx.save();\n            ctx.globalAlpha = opacity;\n            this.drawBackground(pt, ctx, tooltipSize, options);\n            overrideTextDirection(ctx, options.textDirection);\n            pt.y += padding.top;\n            this.drawTitle(pt, ctx, options);\n            this.drawBody(pt, ctx, options);\n            this.drawFooter(pt, ctx, options);\n            restoreTextDirection(ctx, options.textDirection);\n            ctx.restore();\n        }\n    }\n getActiveElements() {\n        return this._active || [];\n    }\n setActiveElements(activeElements, eventPosition) {\n        const lastActive = this._active;\n        const active = activeElements.map(({ datasetIndex , index  })=>{\n            const meta = this.chart.getDatasetMeta(datasetIndex);\n            if (!meta) {\n                throw new Error('Cannot find a dataset at index ' + datasetIndex);\n            }\n            return {\n                datasetIndex,\n                element: meta.data[index],\n                index\n            };\n        });\n        const changed = !_elementsEqual(lastActive, active);\n        const positionChanged = this._positionChanged(active, eventPosition);\n        if (changed || positionChanged) {\n            this._active = active;\n            this._eventPosition = eventPosition;\n            this._ignoreReplayEvents = true;\n            this.update(true);\n        }\n    }\n handleEvent(e, replay, inChartArea = true) {\n        if (replay && this._ignoreReplayEvents) {\n            return false;\n        }\n        this._ignoreReplayEvents = false;\n        const options = this.options;\n        const lastActive = this._active || [];\n        const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n        const positionChanged = this._positionChanged(active, e);\n        const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n        if (changed) {\n            this._active = active;\n            if (options.enabled || options.external) {\n                this._eventPosition = {\n                    x: e.x,\n                    y: e.y\n                };\n                this.update(true, replay);\n            }\n        }\n        return changed;\n    }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n        const options = this.options;\n        if (e.type === 'mouseout') {\n            return [];\n        }\n        if (!inChartArea) {\n            return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n        }\n        const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n        if (options.reverse) {\n            active.reverse();\n        }\n        return active;\n    }\n _positionChanged(active, e) {\n        const { caretX , caretY , options  } = this;\n        const position = positioners[options.position].call(this, active, e);\n        return position !== false && (caretX !== position.x || caretY !== position.y);\n    }\n}\nvar plugin_tooltip = {\n    id: 'tooltip',\n    _element: Tooltip,\n    positioners,\n    afterInit (chart, _args, options) {\n        if (options) {\n            chart.tooltip = new Tooltip({\n                chart,\n                options\n            });\n        }\n    },\n    beforeUpdate (chart, _args, options) {\n        if (chart.tooltip) {\n            chart.tooltip.initialize(options);\n        }\n    },\n    reset (chart, _args, options) {\n        if (chart.tooltip) {\n            chart.tooltip.initialize(options);\n        }\n    },\n    afterDraw (chart) {\n        const tooltip = chart.tooltip;\n        if (tooltip && tooltip._willRender()) {\n            const args = {\n                tooltip\n            };\n            if (chart.notifyPlugins('beforeTooltipDraw', {\n                ...args,\n                cancelable: true\n            }) === false) {\n                return;\n            }\n            tooltip.draw(chart.ctx);\n            chart.notifyPlugins('afterTooltipDraw', args);\n        }\n    },\n    afterEvent (chart, args) {\n        if (chart.tooltip) {\n            const useFinalPosition = args.replay;\n            if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n                args.changed = true;\n            }\n        }\n    },\n    defaults: {\n        enabled: true,\n        external: null,\n        position: 'average',\n        backgroundColor: 'rgba(0,0,0,0.8)',\n        titleColor: '#fff',\n        titleFont: {\n            weight: 'bold'\n        },\n        titleSpacing: 2,\n        titleMarginBottom: 6,\n        titleAlign: 'left',\n        bodyColor: '#fff',\n        bodySpacing: 2,\n        bodyFont: {},\n        bodyAlign: 'left',\n        footerColor: '#fff',\n        footerSpacing: 2,\n        footerMarginTop: 6,\n        footerFont: {\n            weight: 'bold'\n        },\n        footerAlign: 'left',\n        padding: 6,\n        caretPadding: 2,\n        caretSize: 5,\n        cornerRadius: 6,\n        boxHeight: (ctx, opts)=>opts.bodyFont.size,\n        boxWidth: (ctx, opts)=>opts.bodyFont.size,\n        multiKeyBackground: '#fff',\n        displayColors: true,\n        boxPadding: 0,\n        borderColor: 'rgba(0,0,0,0)',\n        borderWidth: 0,\n        animation: {\n            duration: 400,\n            easing: 'easeOutQuart'\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'width',\n                    'height',\n                    'caretX',\n                    'caretY'\n                ]\n            },\n            opacity: {\n                easing: 'linear',\n                duration: 200\n            }\n        },\n        callbacks: defaultCallbacks\n    },\n    defaultRoutes: {\n        bodyFont: 'font',\n        footerFont: 'font',\n        titleFont: 'font'\n    },\n    descriptors: {\n        _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n        _indexable: false,\n        callbacks: {\n            _scriptable: false,\n            _indexable: false\n        },\n        animation: {\n            _fallback: false\n        },\n        animations: {\n            _fallback: 'animation'\n        }\n    },\n    additionalOptionScopes: [\n        'interaction'\n    ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n    if (typeof raw === 'string') {\n        index = labels.push(raw) - 1;\n        addedLabels.unshift({\n            index,\n            label: raw\n        });\n    } else if (isNaN(raw)) {\n        index = null;\n    }\n    return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n    const first = labels.indexOf(raw);\n    if (first === -1) {\n        return addIfString(labels, raw, index, addedLabels);\n    }\n    const last = labels.lastIndexOf(raw);\n    return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n        return labels[value];\n    }\n    return value;\n}\nclass CategoryScale extends Scale {\n    static id = 'category';\n static defaults = {\n        ticks: {\n            callback: _getLabelForValue\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this._startValue = undefined;\n        this._valueRange = 0;\n        this._addedLabels = [];\n    }\n    init(scaleOptions) {\n        const added = this._addedLabels;\n        if (added.length) {\n            const labels = this.getLabels();\n            for (const { index , label  } of added){\n                if (labels[index] === label) {\n                    labels.splice(index, 1);\n                }\n            }\n            this._addedLabels = [];\n        }\n        super.init(scaleOptions);\n    }\n    parse(raw, index) {\n        if (isNullOrUndef(raw)) {\n            return null;\n        }\n        const labels = this.getLabels();\n        index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n        return validIndex(index, labels.length - 1);\n    }\n    determineDataLimits() {\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let { min , max  } = this.getMinMax(true);\n        if (this.options.bounds === 'ticks') {\n            if (!minDefined) {\n                min = 0;\n            }\n            if (!maxDefined) {\n                max = this.getLabels().length - 1;\n            }\n        }\n        this.min = min;\n        this.max = max;\n    }\n    buildTicks() {\n        const min = this.min;\n        const max = this.max;\n        const offset = this.options.offset;\n        const ticks = [];\n        let labels = this.getLabels();\n        labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n        this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n        this._startValue = this.min - (offset ? 0.5 : 0);\n        for(let value = min; value <= max; value++){\n            ticks.push({\n                value\n            });\n        }\n        return ticks;\n    }\n    getLabelForValue(value) {\n        return _getLabelForValue.call(this, value);\n    }\n configure() {\n        super.configure();\n        if (!this.isHorizontal()) {\n            this._reversePixels = !this._reversePixels;\n        }\n    }\n    getPixelForValue(value) {\n        if (typeof value !== 'number') {\n            value = this.parse(value);\n        }\n        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n    }\n    getPixelForTick(index) {\n        const ticks = this.ticks;\n        if (index < 0 || index > ticks.length - 1) {\n            return null;\n        }\n        return this.getPixelForValue(ticks[index].value);\n    }\n    getValueForPixel(pixel) {\n        return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n    }\n    getBasePixel() {\n        return this.bottom;\n    }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n    const ticks = [];\n    const MIN_SPACING = 1e-14;\n    const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds  } = generationOptions;\n    const unit = step || 1;\n    const maxSpaces = maxTicks - 1;\n    const { min: rmin , max: rmax  } = dataRange;\n    const minDefined = !isNullOrUndef(min);\n    const maxDefined = !isNullOrUndef(max);\n    const countDefined = !isNullOrUndef(count);\n    const minSpacing = (rmax - rmin) / (maxDigits + 1);\n    let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n    let factor, niceMin, niceMax, numSpaces;\n    if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n        return [\n            {\n                value: rmin\n            },\n            {\n                value: rmax\n            }\n        ];\n    }\n    numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n    if (numSpaces > maxSpaces) {\n        spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n    }\n    if (!isNullOrUndef(precision)) {\n        factor = Math.pow(10, precision);\n        spacing = Math.ceil(spacing * factor) / factor;\n    }\n    if (bounds === 'ticks') {\n        niceMin = Math.floor(rmin / spacing) * spacing;\n        niceMax = Math.ceil(rmax / spacing) * spacing;\n    } else {\n        niceMin = rmin;\n        niceMax = rmax;\n    }\n    if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n        numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n        spacing = (max - min) / numSpaces;\n        niceMin = min;\n        niceMax = max;\n    } else if (countDefined) {\n        niceMin = minDefined ? min : niceMin;\n        niceMax = maxDefined ? max : niceMax;\n        numSpaces = count - 1;\n        spacing = (niceMax - niceMin) / numSpaces;\n    } else {\n        numSpaces = (niceMax - niceMin) / spacing;\n        if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n            numSpaces = Math.round(numSpaces);\n        } else {\n            numSpaces = Math.ceil(numSpaces);\n        }\n    }\n    const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n    factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n    niceMin = Math.round(niceMin * factor) / factor;\n    niceMax = Math.round(niceMax * factor) / factor;\n    let j = 0;\n    if (minDefined) {\n        if (includeBounds && niceMin !== min) {\n            ticks.push({\n                value: min\n            });\n            if (niceMin < min) {\n                j++;\n            }\n            if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n                j++;\n            }\n        } else if (niceMin < min) {\n            j++;\n        }\n    }\n    for(; j < numSpaces; ++j){\n        const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n        if (maxDefined && tickValue > max) {\n            break;\n        }\n        ticks.push({\n            value: tickValue\n        });\n    }\n    if (maxDefined && includeBounds && niceMax !== max) {\n        if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n            ticks[ticks.length - 1].value = max;\n        } else {\n            ticks.push({\n                value: max\n            });\n        }\n    } else if (!maxDefined || niceMax === max) {\n        ticks.push({\n            value: niceMax\n        });\n    }\n    return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation  }) {\n    const rad = toRadians(minRotation);\n    const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n    const length = 0.75 * minSpacing * ('' + value).length;\n    return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n    constructor(cfg){\n        super(cfg);\n         this.start = undefined;\n         this.end = undefined;\n         this._startValue = undefined;\n         this._endValue = undefined;\n        this._valueRange = 0;\n    }\n    parse(raw, index) {\n        if (isNullOrUndef(raw)) {\n            return null;\n        }\n        if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n            return null;\n        }\n        return +raw;\n    }\n    handleTickRangeOptions() {\n        const { beginAtZero  } = this.options;\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let { min , max  } = this;\n        const setMin = (v)=>min = minDefined ? min : v;\n        const setMax = (v)=>max = maxDefined ? max : v;\n        if (beginAtZero) {\n            const minSign = sign(min);\n            const maxSign = sign(max);\n            if (minSign < 0 && maxSign < 0) {\n                setMax(0);\n            } else if (minSign > 0 && maxSign > 0) {\n                setMin(0);\n            }\n        }\n        if (min === max) {\n            let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n            setMax(max + offset);\n            if (!beginAtZero) {\n                setMin(min - offset);\n            }\n        }\n        this.min = min;\n        this.max = max;\n    }\n    getTickLimit() {\n        const tickOpts = this.options.ticks;\n        let { maxTicksLimit , stepSize  } = tickOpts;\n        let maxTicks;\n        if (stepSize) {\n            maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n            if (maxTicks > 1000) {\n                console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n                maxTicks = 1000;\n            }\n        } else {\n            maxTicks = this.computeTickLimit();\n            maxTicksLimit = maxTicksLimit || 11;\n        }\n        if (maxTicksLimit) {\n            maxTicks = Math.min(maxTicksLimit, maxTicks);\n        }\n        return maxTicks;\n    }\n computeTickLimit() {\n        return Number.POSITIVE_INFINITY;\n    }\n    buildTicks() {\n        const opts = this.options;\n        const tickOpts = opts.ticks;\n        let maxTicks = this.getTickLimit();\n        maxTicks = Math.max(2, maxTicks);\n        const numericGeneratorOptions = {\n            maxTicks,\n            bounds: opts.bounds,\n            min: opts.min,\n            max: opts.max,\n            precision: tickOpts.precision,\n            step: tickOpts.stepSize,\n            count: tickOpts.count,\n            maxDigits: this._maxDigits(),\n            horizontal: this.isHorizontal(),\n            minRotation: tickOpts.minRotation || 0,\n            includeBounds: tickOpts.includeBounds !== false\n        };\n        const dataRange = this._range || this;\n        const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n        if (opts.bounds === 'ticks') {\n            _setMinAndMaxByKey(ticks, this, 'value');\n        }\n        if (opts.reverse) {\n            ticks.reverse();\n            this.start = this.max;\n            this.end = this.min;\n        } else {\n            this.start = this.min;\n            this.end = this.max;\n        }\n        return ticks;\n    }\n configure() {\n        const ticks = this.ticks;\n        let start = this.min;\n        let end = this.max;\n        super.configure();\n        if (this.options.offset && ticks.length) {\n            const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n            start -= offset;\n            end += offset;\n        }\n        this._startValue = start;\n        this._endValue = end;\n        this._valueRange = end - start;\n    }\n    getLabelForValue(value) {\n        return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n}\n\nclass LinearScale extends LinearScaleBase {\n    static id = 'linear';\n static defaults = {\n        ticks: {\n            callback: Ticks.formatters.numeric\n        }\n    };\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(true);\n        this.min = isNumberFinite(min) ? min : 0;\n        this.max = isNumberFinite(max) ? max : 1;\n        this.handleTickRangeOptions();\n    }\n computeTickLimit() {\n        const horizontal = this.isHorizontal();\n        const length = horizontal ? this.width : this.height;\n        const minRotation = toRadians(this.options.ticks.minRotation);\n        const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n        const tickFont = this._resolveTickFontOptions(0);\n        return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n    }\n    getPixelForValue(value) {\n        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n    }\n    getValueForPixel(pixel) {\n        return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n    }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n    const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n    return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n    const rangeStep = Math.pow(10, rangeExp);\n    const start = Math.floor(min / rangeStep);\n    const end = Math.ceil(max / rangeStep);\n    return end - start;\n}\nfunction startExp(min, max) {\n    const range = max - min;\n    let rangeExp = log10Floor(range);\n    while(steps(min, max, rangeExp) > 10){\n        rangeExp++;\n    }\n    while(steps(min, max, rangeExp) < 10){\n        rangeExp--;\n    }\n    return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max  }) {\n    min = finiteOrDefault(generationOptions.min, min);\n    const ticks = [];\n    const minExp = log10Floor(min);\n    let exp = startExp(min, max);\n    let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n    const stepSize = Math.pow(10, exp);\n    const base = minExp > exp ? Math.pow(10, minExp) : 0;\n    const start = Math.round((min - base) * precision) / precision;\n    const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n    let significand = Math.floor((start - offset) / Math.pow(10, exp));\n    let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n    while(value < max){\n        ticks.push({\n            value,\n            major: isMajor(value),\n            significand\n        });\n        if (significand >= 10) {\n            significand = significand < 15 ? 15 : 20;\n        } else {\n            significand++;\n        }\n        if (significand >= 20) {\n            exp++;\n            significand = 2;\n            precision = exp >= 0 ? 1 : precision;\n        }\n        value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n    }\n    const lastTick = finiteOrDefault(generationOptions.max, value);\n    ticks.push({\n        value: lastTick,\n        major: isMajor(lastTick),\n        significand\n    });\n    return ticks;\n}\nclass LogarithmicScale extends Scale {\n    static id = 'logarithmic';\n static defaults = {\n        ticks: {\n            callback: Ticks.formatters.logarithmic,\n            major: {\n                enabled: true\n            }\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this.start = undefined;\n         this.end = undefined;\n         this._startValue = undefined;\n        this._valueRange = 0;\n    }\n    parse(raw, index) {\n        const value = LinearScaleBase.prototype.parse.apply(this, [\n            raw,\n            index\n        ]);\n        if (value === 0) {\n            this._zero = true;\n            return undefined;\n        }\n        return isNumberFinite(value) && value > 0 ? value : null;\n    }\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(true);\n        this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n        this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n        if (this.options.beginAtZero) {\n            this._zero = true;\n        }\n        if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n            this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n        }\n        this.handleTickRangeOptions();\n    }\n    handleTickRangeOptions() {\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let min = this.min;\n        let max = this.max;\n        const setMin = (v)=>min = minDefined ? min : v;\n        const setMax = (v)=>max = maxDefined ? max : v;\n        if (min === max) {\n            if (min <= 0) {\n                setMin(1);\n                setMax(10);\n            } else {\n                setMin(changeExponent(min, -1));\n                setMax(changeExponent(max, +1));\n            }\n        }\n        if (min <= 0) {\n            setMin(changeExponent(max, -1));\n        }\n        if (max <= 0) {\n            setMax(changeExponent(min, +1));\n        }\n        this.min = min;\n        this.max = max;\n    }\n    buildTicks() {\n        const opts = this.options;\n        const generationOptions = {\n            min: this._userMin,\n            max: this._userMax\n        };\n        const ticks = generateTicks(generationOptions, this);\n        if (opts.bounds === 'ticks') {\n            _setMinAndMaxByKey(ticks, this, 'value');\n        }\n        if (opts.reverse) {\n            ticks.reverse();\n            this.start = this.max;\n            this.end = this.min;\n        } else {\n            this.start = this.min;\n            this.end = this.max;\n        }\n        return ticks;\n    }\n getLabelForValue(value) {\n        return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n configure() {\n        const start = this.min;\n        super.configure();\n        this._startValue = log10(start);\n        this._valueRange = log10(this.max) - log10(start);\n    }\n    getPixelForValue(value) {\n        if (value === undefined || value === 0) {\n            value = this.min;\n        }\n        if (value === null || isNaN(value)) {\n            return NaN;\n        }\n        return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n    }\n    getValueForPixel(pixel) {\n        const decimal = this.getDecimalForPixel(pixel);\n        return Math.pow(10, this._startValue + decimal * this._valueRange);\n    }\n}\n\nfunction getTickBackdropHeight(opts) {\n    const tickOpts = opts.ticks;\n    if (tickOpts.display && opts.display) {\n        const padding = toPadding(tickOpts.backdropPadding);\n        return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n    }\n    return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n    label = isArray(label) ? label : [\n        label\n    ];\n    return {\n        w: _longestText(ctx, font.string, label),\n        h: label.length * font.lineHeight\n    };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n    if (angle === min || angle === max) {\n        return {\n            start: pos - size / 2,\n            end: pos + size / 2\n        };\n    } else if (angle < min || angle > max) {\n        return {\n            start: pos - size,\n            end: pos\n        };\n    }\n    return {\n        start: pos,\n        end: pos + size\n    };\n}\n function fitWithPointLabels(scale) {\n    const orig = {\n        l: scale.left + scale._padding.left,\n        r: scale.right - scale._padding.right,\n        t: scale.top + scale._padding.top,\n        b: scale.bottom - scale._padding.bottom\n    };\n    const limits = Object.assign({}, orig);\n    const labelSizes = [];\n    const padding = [];\n    const valueCount = scale._pointLabels.length;\n    const pointLabelOpts = scale.options.pointLabels;\n    const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n    for(let i = 0; i < valueCount; i++){\n        const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n        padding[i] = opts.padding;\n        const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n        const plFont = toFont(opts.font);\n        const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n        labelSizes[i] = textSize;\n        const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n        const angle = Math.round(toDegrees(angleRadians));\n        const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n        const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n        updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n    }\n    scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n    scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n    const sin = Math.abs(Math.sin(angle));\n    const cos = Math.abs(Math.cos(angle));\n    let x = 0;\n    let y = 0;\n    if (hLimits.start < orig.l) {\n        x = (orig.l - hLimits.start) / sin;\n        limits.l = Math.min(limits.l, orig.l - x);\n    } else if (hLimits.end > orig.r) {\n        x = (hLimits.end - orig.r) / sin;\n        limits.r = Math.max(limits.r, orig.r + x);\n    }\n    if (vLimits.start < orig.t) {\n        y = (orig.t - vLimits.start) / cos;\n        limits.t = Math.min(limits.t, orig.t - y);\n    } else if (vLimits.end > orig.b) {\n        y = (vLimits.end - orig.b) / cos;\n        limits.b = Math.max(limits.b, orig.b + y);\n    }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n    const outerDistance = scale.drawingArea;\n    const { extra , additionalAngle , padding , size  } = itemOpts;\n    const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    return {\n        visible: true,\n        x: pointLabelPosition.x,\n        y,\n        textAlign,\n        left,\n        top: y,\n        right: left + size.w,\n        bottom: y + size.h\n    };\n}\nfunction isNotOverlapped(item, area) {\n    if (!area) {\n        return true;\n    }\n    const { left , top , right , bottom  } = item;\n    const apexesInArea = _isPointInArea({\n        x: left,\n        y: top\n    }, area) || _isPointInArea({\n        x: left,\n        y: bottom\n    }, area) || _isPointInArea({\n        x: right,\n        y: top\n    }, area) || _isPointInArea({\n        x: right,\n        y: bottom\n    }, area);\n    return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n    const items = [];\n    const valueCount = scale._pointLabels.length;\n    const opts = scale.options;\n    const { centerPointLabels , display  } = opts.pointLabels;\n    const itemOpts = {\n        extra: getTickBackdropHeight(opts) / 2,\n        additionalAngle: centerPointLabels ? PI / valueCount : 0\n    };\n    let area;\n    for(let i = 0; i < valueCount; i++){\n        itemOpts.padding = padding[i];\n        itemOpts.size = labelSizes[i];\n        const item = createPointLabelItem(scale, i, itemOpts);\n        items.push(item);\n        if (display === 'auto') {\n            item.visible = isNotOverlapped(item, area);\n            if (item.visible) {\n                area = item;\n            }\n        }\n    }\n    return items;\n}\nfunction getTextAlignForAngle(angle) {\n    if (angle === 0 || angle === 180) {\n        return 'center';\n    } else if (angle < 180) {\n        return 'left';\n    }\n    return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n    if (align === 'right') {\n        x -= w;\n    } else if (align === 'center') {\n        x -= w / 2;\n    }\n    return x;\n}\nfunction yForAngle(y, h, angle) {\n    if (angle === 90 || angle === 270) {\n        y -= h / 2;\n    } else if (angle > 270 || angle < 90) {\n        y -= h;\n    }\n    return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n    const { left , top , right , bottom  } = item;\n    const { backdropColor  } = opts;\n    if (!isNullOrUndef(backdropColor)) {\n        const borderRadius = toTRBLCorners(opts.borderRadius);\n        const padding = toPadding(opts.backdropPadding);\n        ctx.fillStyle = backdropColor;\n        const backdropLeft = left - padding.left;\n        const backdropTop = top - padding.top;\n        const backdropWidth = right - left + padding.width;\n        const backdropHeight = bottom - top + padding.height;\n        if (Object.values(borderRadius).some((v)=>v !== 0)) {\n            ctx.beginPath();\n            addRoundedRectPath(ctx, {\n                x: backdropLeft,\n                y: backdropTop,\n                w: backdropWidth,\n                h: backdropHeight,\n                radius: borderRadius\n            });\n            ctx.fill();\n        } else {\n            ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n        }\n    }\n}\nfunction drawPointLabels(scale, labelCount) {\n    const { ctx , options: { pointLabels  }  } = scale;\n    for(let i = labelCount - 1; i >= 0; i--){\n        const item = scale._pointLabelItems[i];\n        if (!item.visible) {\n            continue;\n        }\n        const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n        drawPointLabelBox(ctx, optsAtIndex, item);\n        const plFont = toFont(optsAtIndex.font);\n        const { x , y , textAlign  } = item;\n        renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n            color: optsAtIndex.color,\n            textAlign: textAlign,\n            textBaseline: 'middle'\n        });\n    }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n    const { ctx  } = scale;\n    if (circular) {\n        ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n    } else {\n        let pointPosition = scale.getPointPosition(0, radius);\n        ctx.moveTo(pointPosition.x, pointPosition.y);\n        for(let i = 1; i < labelCount; i++){\n            pointPosition = scale.getPointPosition(i, radius);\n            ctx.lineTo(pointPosition.x, pointPosition.y);\n        }\n    }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n    const ctx = scale.ctx;\n    const circular = gridLineOpts.circular;\n    const { color , lineWidth  } = gridLineOpts;\n    if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n        return;\n    }\n    ctx.save();\n    ctx.strokeStyle = color;\n    ctx.lineWidth = lineWidth;\n    ctx.setLineDash(borderOpts.dash || []);\n    ctx.lineDashOffset = borderOpts.dashOffset;\n    ctx.beginPath();\n    pathRadiusLine(scale, radius, circular, labelCount);\n    ctx.closePath();\n    ctx.stroke();\n    ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n    return createContext(parent, {\n        label,\n        index,\n        type: 'pointLabel'\n    });\n}\nclass RadialLinearScale extends LinearScaleBase {\n    static id = 'radialLinear';\n static defaults = {\n        display: true,\n        animate: true,\n        position: 'chartArea',\n        angleLines: {\n            display: true,\n            lineWidth: 1,\n            borderDash: [],\n            borderDashOffset: 0.0\n        },\n        grid: {\n            circular: false\n        },\n        startAngle: 0,\n        ticks: {\n            showLabelBackdrop: true,\n            callback: Ticks.formatters.numeric\n        },\n        pointLabels: {\n            backdropColor: undefined,\n            backdropPadding: 2,\n            display: true,\n            font: {\n                size: 10\n            },\n            callback (label) {\n                return label;\n            },\n            padding: 5,\n            centerPointLabels: false\n        }\n    };\n    static defaultRoutes = {\n        'angleLines.color': 'borderColor',\n        'pointLabels.color': 'color',\n        'ticks.color': 'color'\n    };\n    static descriptors = {\n        angleLines: {\n            _fallback: 'grid'\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this.xCenter = undefined;\n         this.yCenter = undefined;\n         this.drawingArea = undefined;\n         this._pointLabels = [];\n        this._pointLabelItems = [];\n    }\n    setDimensions() {\n        const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n        const w = this.width = this.maxWidth - padding.width;\n        const h = this.height = this.maxHeight - padding.height;\n        this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n        this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n        this.drawingArea = Math.floor(Math.min(w, h) / 2);\n    }\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(false);\n        this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n        this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n        this.handleTickRangeOptions();\n    }\n computeTickLimit() {\n        return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n    }\n    generateTickLabels(ticks) {\n        LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n        this._pointLabels = this.getLabels().map((value, index)=>{\n            const label = callback(this.options.pointLabels.callback, [\n                value,\n                index\n            ], this);\n            return label || label === 0 ? label : '';\n        }).filter((v, i)=>this.chart.getDataVisibility(i));\n    }\n    fit() {\n        const opts = this.options;\n        if (opts.display && opts.pointLabels.display) {\n            fitWithPointLabels(this);\n        } else {\n            this.setCenterPoint(0, 0, 0, 0);\n        }\n    }\n    setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n        this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n        this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n        this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n    }\n    getIndexAngle(index) {\n        const angleMultiplier = TAU / (this._pointLabels.length || 1);\n        const startAngle = this.options.startAngle || 0;\n        return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n    }\n    getDistanceFromCenterForValue(value) {\n        if (isNullOrUndef(value)) {\n            return NaN;\n        }\n        const scalingFactor = this.drawingArea / (this.max - this.min);\n        if (this.options.reverse) {\n            return (this.max - value) * scalingFactor;\n        }\n        return (value - this.min) * scalingFactor;\n    }\n    getValueForDistanceFromCenter(distance) {\n        if (isNullOrUndef(distance)) {\n            return NaN;\n        }\n        const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n        return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n    }\n    getPointLabelContext(index) {\n        const pointLabels = this._pointLabels || [];\n        if (index >= 0 && index < pointLabels.length) {\n            const pointLabel = pointLabels[index];\n            return createPointLabelContext(this.getContext(), index, pointLabel);\n        }\n    }\n    getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n        const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n        return {\n            x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n            y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n            angle\n        };\n    }\n    getPointPositionForValue(index, value) {\n        return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n    }\n    getBasePosition(index) {\n        return this.getPointPositionForValue(index || 0, this.getBaseValue());\n    }\n    getPointLabelPosition(index) {\n        const { left , top , right , bottom  } = this._pointLabelItems[index];\n        return {\n            left,\n            top,\n            right,\n            bottom\n        };\n    }\n drawBackground() {\n        const { backgroundColor , grid: { circular  }  } = this.options;\n        if (backgroundColor) {\n            const ctx = this.ctx;\n            ctx.save();\n            ctx.beginPath();\n            pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n            ctx.closePath();\n            ctx.fillStyle = backgroundColor;\n            ctx.fill();\n            ctx.restore();\n        }\n    }\n drawGrid() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        const { angleLines , grid , border  } = opts;\n        const labelCount = this._pointLabels.length;\n        let i, offset, position;\n        if (opts.pointLabels.display) {\n            drawPointLabels(this, labelCount);\n        }\n        if (grid.display) {\n            this.ticks.forEach((tick, index)=>{\n                if (index !== 0 || index === 0 && this.min < 0) {\n                    offset = this.getDistanceFromCenterForValue(tick.value);\n                    const context = this.getContext(index);\n                    const optsAtIndex = grid.setContext(context);\n                    const optsAtIndexBorder = border.setContext(context);\n                    drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n                }\n            });\n        }\n        if (angleLines.display) {\n            ctx.save();\n            for(i = labelCount - 1; i >= 0; i--){\n                const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n                const { color , lineWidth  } = optsAtIndex;\n                if (!lineWidth || !color) {\n                    continue;\n                }\n                ctx.lineWidth = lineWidth;\n                ctx.strokeStyle = color;\n                ctx.setLineDash(optsAtIndex.borderDash);\n                ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n                offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n                position = this.getPointPosition(i, offset);\n                ctx.beginPath();\n                ctx.moveTo(this.xCenter, this.yCenter);\n                ctx.lineTo(position.x, position.y);\n                ctx.stroke();\n            }\n            ctx.restore();\n        }\n    }\n drawBorder() {}\n drawLabels() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        const tickOpts = opts.ticks;\n        if (!tickOpts.display) {\n            return;\n        }\n        const startAngle = this.getIndexAngle(0);\n        let offset, width;\n        ctx.save();\n        ctx.translate(this.xCenter, this.yCenter);\n        ctx.rotate(startAngle);\n        ctx.textAlign = 'center';\n        ctx.textBaseline = 'middle';\n        this.ticks.forEach((tick, index)=>{\n            if (index === 0 && this.min >= 0 && !opts.reverse) {\n                return;\n            }\n            const optsAtIndex = tickOpts.setContext(this.getContext(index));\n            const tickFont = toFont(optsAtIndex.font);\n            offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n            if (optsAtIndex.showLabelBackdrop) {\n                ctx.font = tickFont.string;\n                width = ctx.measureText(tick.label).width;\n                ctx.fillStyle = optsAtIndex.backdropColor;\n                const padding = toPadding(optsAtIndex.backdropPadding);\n                ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n            }\n            renderText(ctx, tick.label, 0, -offset, tickFont, {\n                color: optsAtIndex.color,\n                strokeColor: optsAtIndex.textStrokeColor,\n                strokeWidth: optsAtIndex.textStrokeWidth\n            });\n        });\n        ctx.restore();\n    }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n    millisecond: {\n        common: true,\n        size: 1,\n        steps: 1000\n    },\n    second: {\n        common: true,\n        size: 1000,\n        steps: 60\n    },\n    minute: {\n        common: true,\n        size: 60000,\n        steps: 60\n    },\n    hour: {\n        common: true,\n        size: 3600000,\n        steps: 24\n    },\n    day: {\n        common: true,\n        size: 86400000,\n        steps: 30\n    },\n    week: {\n        common: false,\n        size: 604800000,\n        steps: 4\n    },\n    month: {\n        common: true,\n        size: 2.628e9,\n        steps: 12\n    },\n    quarter: {\n        common: false,\n        size: 7.884e9,\n        steps: 4\n    },\n    year: {\n        common: true,\n        size: 3.154e10\n    }\n};\n const UNITS =  /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n    return a - b;\n}\n function parse(scale, input) {\n    if (isNullOrUndef(input)) {\n        return null;\n    }\n    const adapter = scale._adapter;\n    const { parser , round , isoWeekday  } = scale._parseOpts;\n    let value = input;\n    if (typeof parser === 'function') {\n        value = parser(value);\n    }\n    if (!isNumberFinite(value)) {\n        value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n    }\n    if (value === null) {\n        return null;\n    }\n    if (round) {\n        value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n    }\n    return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n    const ilen = UNITS.length;\n    for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n        const interval = INTERVALS[UNITS[i]];\n        const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n        if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n            return UNITS[i];\n        }\n    }\n    return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n    for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n        const unit = UNITS[i];\n        if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n            return unit;\n        }\n    }\n    return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n    for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n        if (INTERVALS[UNITS[i]].common) {\n            return UNITS[i];\n        }\n    }\n}\n function addTick(ticks, time, timestamps) {\n    if (!timestamps) {\n        ticks[time] = true;\n    } else if (timestamps.length) {\n        const { lo , hi  } = _lookup(timestamps, time);\n        const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n        ticks[timestamp] = true;\n    }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n    const adapter = scale._adapter;\n    const first = +adapter.startOf(ticks[0].value, majorUnit);\n    const last = ticks[ticks.length - 1].value;\n    let major, index;\n    for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n        index = map[major];\n        if (index >= 0) {\n            ticks[index].major = true;\n        }\n    }\n    return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n    const ticks = [];\n     const map = {};\n    const ilen = values.length;\n    let i, value;\n    for(i = 0; i < ilen; ++i){\n        value = values[i];\n        map[value] = i;\n        ticks.push({\n            value,\n            major: false\n        });\n    }\n    return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n    static id = 'time';\n static defaults = {\n bounds: 'data',\n        adapters: {},\n        time: {\n            parser: false,\n            unit: false,\n            round: false,\n            isoWeekday: false,\n            minUnit: 'millisecond',\n            displayFormats: {}\n        },\n        ticks: {\n source: 'auto',\n            callback: false,\n            major: {\n                enabled: false\n            }\n        }\n    };\n constructor(props){\n        super(props);\n         this._cache = {\n            data: [],\n            labels: [],\n            all: []\n        };\n         this._unit = 'day';\n         this._majorUnit = undefined;\n        this._offsets = {};\n        this._normalized = false;\n        this._parseOpts = undefined;\n    }\n    init(scaleOpts, opts = {}) {\n        const time = scaleOpts.time || (scaleOpts.time = {});\n         const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n        adapter.init(opts);\n        mergeIf(time.displayFormats, adapter.formats());\n        this._parseOpts = {\n            parser: time.parser,\n            round: time.round,\n            isoWeekday: time.isoWeekday\n        };\n        super.init(scaleOpts);\n        this._normalized = opts.normalized;\n    }\n parse(raw, index) {\n        if (raw === undefined) {\n            return null;\n        }\n        return parse(this, raw);\n    }\n    beforeLayout() {\n        super.beforeLayout();\n        this._cache = {\n            data: [],\n            labels: [],\n            all: []\n        };\n    }\n    determineDataLimits() {\n        const options = this.options;\n        const adapter = this._adapter;\n        const unit = options.time.unit || 'day';\n        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n function _applyBounds(bounds) {\n            if (!minDefined && !isNaN(bounds.min)) {\n                min = Math.min(min, bounds.min);\n            }\n            if (!maxDefined && !isNaN(bounds.max)) {\n                max = Math.max(max, bounds.max);\n            }\n        }\n        if (!minDefined || !maxDefined) {\n            _applyBounds(this._getLabelBounds());\n            if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n                _applyBounds(this.getMinMax(false));\n            }\n        }\n        min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n        max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n        this.min = Math.min(min, max - 1);\n        this.max = Math.max(min + 1, max);\n    }\n _getLabelBounds() {\n        const arr = this.getLabelTimestamps();\n        let min = Number.POSITIVE_INFINITY;\n        let max = Number.NEGATIVE_INFINITY;\n        if (arr.length) {\n            min = arr[0];\n            max = arr[arr.length - 1];\n        }\n        return {\n            min,\n            max\n        };\n    }\n buildTicks() {\n        const options = this.options;\n        const timeOpts = options.time;\n        const tickOpts = options.ticks;\n        const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n        if (options.bounds === 'ticks' && timestamps.length) {\n            this.min = this._userMin || timestamps[0];\n            this.max = this._userMax || timestamps[timestamps.length - 1];\n        }\n        const min = this.min;\n        const max = this.max;\n        const ticks = _filterBetween(timestamps, min, max);\n        this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n        this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n        this.initOffsets(timestamps);\n        if (options.reverse) {\n            ticks.reverse();\n        }\n        return ticksFromTimestamps(this, ticks, this._majorUnit);\n    }\n    afterAutoSkip() {\n        if (this.options.offsetAfterAutoskip) {\n            this.initOffsets(this.ticks.map((tick)=>+tick.value));\n        }\n    }\n initOffsets(timestamps = []) {\n        let start = 0;\n        let end = 0;\n        let first, last;\n        if (this.options.offset && timestamps.length) {\n            first = this.getDecimalForValue(timestamps[0]);\n            if (timestamps.length === 1) {\n                start = 1 - first;\n            } else {\n                start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n            }\n            last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n            if (timestamps.length === 1) {\n                end = last;\n            } else {\n                end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n            }\n        }\n        const limit = timestamps.length < 3 ? 0.5 : 0.25;\n        start = _limitValue(start, 0, limit);\n        end = _limitValue(end, 0, limit);\n        this._offsets = {\n            start,\n            end,\n            factor: 1 / (start + 1 + end)\n        };\n    }\n _generate() {\n        const adapter = this._adapter;\n        const min = this.min;\n        const max = this.max;\n        const options = this.options;\n        const timeOpts = options.time;\n        const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n        const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n        const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n        const hasWeekday = isNumber(weekday) || weekday === true;\n        const ticks = {};\n        let first = min;\n        let time, count;\n        if (hasWeekday) {\n            first = +adapter.startOf(first, 'isoWeek', weekday);\n        }\n        first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n        if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n            throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n        }\n        const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n        for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n            addTick(ticks, time, timestamps);\n        }\n        if (time === max || options.bounds === 'ticks' || count === 1) {\n            addTick(ticks, time, timestamps);\n        }\n        return Object.keys(ticks).sort(sorter).map((x)=>+x);\n    }\n getLabelForValue(value) {\n        const adapter = this._adapter;\n        const timeOpts = this.options.time;\n        if (timeOpts.tooltipFormat) {\n            return adapter.format(value, timeOpts.tooltipFormat);\n        }\n        return adapter.format(value, timeOpts.displayFormats.datetime);\n    }\n format(value, format) {\n        const options = this.options;\n        const formats = options.time.displayFormats;\n        const unit = this._unit;\n        const fmt = format || formats[unit];\n        return this._adapter.format(value, fmt);\n    }\n _tickFormatFunction(time, index, ticks, format) {\n        const options = this.options;\n        const formatter = options.ticks.callback;\n        if (formatter) {\n            return callback(formatter, [\n                time,\n                index,\n                ticks\n            ], this);\n        }\n        const formats = options.time.displayFormats;\n        const unit = this._unit;\n        const majorUnit = this._majorUnit;\n        const minorFormat = unit && formats[unit];\n        const majorFormat = majorUnit && formats[majorUnit];\n        const tick = ticks[index];\n        const major = majorUnit && majorFormat && tick && tick.major;\n        return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    }\n generateTickLabels(ticks) {\n        let i, ilen, tick;\n        for(i = 0, ilen = ticks.length; i < ilen; ++i){\n            tick = ticks[i];\n            tick.label = this._tickFormatFunction(tick.value, i, ticks);\n        }\n    }\n getDecimalForValue(value) {\n        return value === null ? NaN : (value - this.min) / (this.max - this.min);\n    }\n getPixelForValue(value) {\n        const offsets = this._offsets;\n        const pos = this.getDecimalForValue(value);\n        return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n    }\n getValueForPixel(pixel) {\n        const offsets = this._offsets;\n        const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n        return this.min + pos * (this.max - this.min);\n    }\n _getLabelSize(label) {\n        const ticksOpts = this.options.ticks;\n        const tickLabelWidth = this.ctx.measureText(label).width;\n        const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n        const cosRotation = Math.cos(angle);\n        const sinRotation = Math.sin(angle);\n        const tickFontSize = this._resolveTickFontOptions(0).size;\n        return {\n            w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n            h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n        };\n    }\n _getLabelCapacity(exampleTime) {\n        const timeOpts = this.options.time;\n        const displayFormats = timeOpts.displayFormats;\n        const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n        const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n            exampleTime\n        ], this._majorUnit), format);\n        const size = this._getLabelSize(exampleLabel);\n        const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n        return capacity > 0 ? capacity : 1;\n    }\n getDataTimestamps() {\n        let timestamps = this._cache.data || [];\n        let i, ilen;\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const metas = this.getMatchingVisibleMetas();\n        if (this._normalized && metas.length) {\n            return this._cache.data = metas[0].controller.getAllParsedValues(this);\n        }\n        for(i = 0, ilen = metas.length; i < ilen; ++i){\n            timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n        }\n        return this._cache.data = this.normalize(timestamps);\n    }\n getLabelTimestamps() {\n        const timestamps = this._cache.labels || [];\n        let i, ilen;\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const labels = this.getLabels();\n        for(i = 0, ilen = labels.length; i < ilen; ++i){\n            timestamps.push(parse(this, labels[i]));\n        }\n        return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n    }\n normalize(values) {\n        return _arrayUnique(values.sort(sorter));\n    }\n}\n\nfunction interpolate(table, val, reverse) {\n    let lo = 0;\n    let hi = table.length - 1;\n    let prevSource, nextSource, prevTarget, nextTarget;\n    if (reverse) {\n        if (val >= table[lo].pos && val <= table[hi].pos) {\n            ({ lo , hi  } = _lookupByKey(table, 'pos', val));\n        }\n        ({ pos: prevSource , time: prevTarget  } = table[lo]);\n        ({ pos: nextSource , time: nextTarget  } = table[hi]);\n    } else {\n        if (val >= table[lo].time && val <= table[hi].time) {\n            ({ lo , hi  } = _lookupByKey(table, 'time', val));\n        }\n        ({ time: prevSource , pos: prevTarget  } = table[lo]);\n        ({ time: nextSource , pos: nextTarget  } = table[hi]);\n    }\n    const span = nextSource - prevSource;\n    return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n    static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n        super(props);\n         this._table = [];\n         this._minPos = undefined;\n         this._tableRange = undefined;\n    }\n initOffsets() {\n        const timestamps = this._getTimestampsForTable();\n        const table = this._table = this.buildLookupTable(timestamps);\n        this._minPos = interpolate(table, this.min);\n        this._tableRange = interpolate(table, this.max) - this._minPos;\n        super.initOffsets(timestamps);\n    }\n buildLookupTable(timestamps) {\n        const { min , max  } = this;\n        const items = [];\n        const table = [];\n        let i, ilen, prev, curr, next;\n        for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n            curr = timestamps[i];\n            if (curr >= min && curr <= max) {\n                items.push(curr);\n            }\n        }\n        if (items.length < 2) {\n            return [\n                {\n                    time: min,\n                    pos: 0\n                },\n                {\n                    time: max,\n                    pos: 1\n                }\n            ];\n        }\n        for(i = 0, ilen = items.length; i < ilen; ++i){\n            next = items[i + 1];\n            prev = items[i - 1];\n            curr = items[i];\n            if (Math.round((next + prev) / 2) !== curr) {\n                table.push({\n                    time: curr,\n                    pos: i / (ilen - 1)\n                });\n            }\n        }\n        return table;\n    }\n _generate() {\n        const min = this.min;\n        const max = this.max;\n        let timestamps = super.getDataTimestamps();\n        if (!timestamps.includes(min) || !timestamps.length) {\n            timestamps.splice(0, 0, min);\n        }\n        if (!timestamps.includes(max) || timestamps.length === 1) {\n            timestamps.push(max);\n        }\n        return timestamps.sort((a, b)=>a - b);\n    }\n _getTimestampsForTable() {\n        let timestamps = this._cache.all || [];\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const data = this.getDataTimestamps();\n        const label = this.getLabelTimestamps();\n        if (data.length && label.length) {\n            timestamps = this.normalize(data.concat(label));\n        } else {\n            timestamps = data.length ? data : label;\n        }\n        timestamps = this._cache.all = timestamps;\n        return timestamps;\n    }\n getDecimalForValue(value) {\n        return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n    }\n getValueForPixel(pixel) {\n        const offsets = this._offsets;\n        const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n        return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n    }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n    controllers,\n    elements,\n    plugins,\n    scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import { Chart as Chart$1, BarController, DoughnutController, LineController, PieController, PolarAreaController, RadarController, BubbleController, ScatterController } from 'chart.js';\nimport { version, isProxy, toRaw, defineComponent, ref, shallowRef, onMounted, onUnmounted, watch, nextTick, h } from 'vue';\n\nconst CommonProps = {\n    data: {\n        type: Object,\n        required: true\n    },\n    options: {\n        type: Object,\n        default: ()=>({})\n    },\n    plugins: {\n        type: Array,\n        default: ()=>[]\n    },\n    datasetIdKey: {\n        type: String,\n        default: \"label\"\n    },\n    updateMode: {\n        type: String,\n        default: undefined\n    }\n};\nconst A11yProps = {\n    ariaLabel: {\n        type: String\n    },\n    ariaDescribedby: {\n        type: String\n    }\n};\nconst Props = {\n    type: {\n        type: String,\n        required: true\n    },\n    destroyDelay: {\n        type: Number,\n        default: 0 // No delay by default\n    },\n    ...CommonProps,\n    ...A11yProps\n};\n\nconst compatProps = version[0] === \"2\" ? (internals, props)=>Object.assign(internals, {\n        attrs: props\n    }) : (internals, props)=>Object.assign(internals, props);\nfunction toRawIfProxy(obj) {\n    return isProxy(obj) ? toRaw(obj) : obj;\n}\nfunction cloneProxy(obj) {\n    let src = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : obj;\n    return isProxy(src) ? new Proxy(obj, {}) : obj;\n}\nfunction setOptions(chart, nextOptions) {\n    const options = chart.options;\n    if (options && nextOptions) {\n        Object.assign(options, nextOptions);\n    }\n}\nfunction setLabels(currentData, nextLabels) {\n    currentData.labels = nextLabels;\n}\nfunction setDatasets(currentData, nextDatasets, datasetIdKey) {\n    const addedDatasets = [];\n    currentData.datasets = nextDatasets.map((nextDataset)=>{\n        // given the new set, find it's current match\n        const currentDataset = currentData.datasets.find((dataset)=>dataset[datasetIdKey] === nextDataset[datasetIdKey]);\n        // There is no original to update, so simply add new one\n        if (!currentDataset || !nextDataset.data || addedDatasets.includes(currentDataset)) {\n            return {\n                ...nextDataset\n            };\n        }\n        addedDatasets.push(currentDataset);\n        Object.assign(currentDataset, nextDataset);\n        return currentDataset;\n    });\n}\nfunction cloneData(data, datasetIdKey) {\n    const nextData = {\n        labels: [],\n        datasets: []\n    };\n    setLabels(nextData, data.labels);\n    setDatasets(nextData, data.datasets, datasetIdKey);\n    return nextData;\n}\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getDatasetAtEvent(chart, event) {\n    return chart.getElementsAtEventForMode(event, \"dataset\", {\n        intersect: true\n    }, false);\n}\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementAtEvent(chart, event) {\n    return chart.getElementsAtEventForMode(event, \"nearest\", {\n        intersect: true\n    }, false);\n}\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementsAtEvent(chart, event) {\n    return chart.getElementsAtEventForMode(event, \"index\", {\n        intersect: true\n    }, false);\n}\n\nconst Chart = defineComponent({\n    props: Props,\n    setup (props, param) {\n        let { expose , slots  } = param;\n        const canvasRef = ref(null);\n        const chartRef = shallowRef(null);\n        expose({\n            chart: chartRef\n        });\n        const renderChart = ()=>{\n            if (!canvasRef.value) return;\n            const { type , data , options , plugins , datasetIdKey  } = props;\n            const clonedData = cloneData(data, datasetIdKey);\n            const proxiedData = cloneProxy(clonedData, data);\n            chartRef.value = new Chart$1(canvasRef.value, {\n                type,\n                data: proxiedData,\n                options: {\n                    ...options\n                },\n                plugins\n            });\n        };\n        const destroyChart = ()=>{\n            const chart = toRaw(chartRef.value);\n            if (chart) {\n                if (props.destroyDelay > 0) {\n                    setTimeout(()=>{\n                        chart.destroy();\n                        chartRef.value = null;\n                    }, props.destroyDelay);\n                } else {\n                    chart.destroy();\n                    chartRef.value = null;\n                }\n            }\n        };\n        const update = (chart)=>{\n            chart.update(props.updateMode);\n        };\n        onMounted(renderChart);\n        onUnmounted(destroyChart);\n        watch([\n            ()=>props.options,\n            ()=>props.data\n        ], (param, param1)=>{\n            let [nextOptionsProxy, nextDataProxy] = param, [prevOptionsProxy, prevDataProxy] = param1;\n            const chart = toRaw(chartRef.value);\n            if (!chart) {\n                return;\n            }\n            let shouldUpdate = false;\n            if (nextOptionsProxy) {\n                const nextOptions = toRawIfProxy(nextOptionsProxy);\n                const prevOptions = toRawIfProxy(prevOptionsProxy);\n                if (nextOptions && nextOptions !== prevOptions) {\n                    setOptions(chart, nextOptions);\n                    shouldUpdate = true;\n                }\n            }\n            if (nextDataProxy) {\n                const nextLabels = toRawIfProxy(nextDataProxy.labels);\n                const prevLabels = toRawIfProxy(prevDataProxy.labels);\n                const nextDatasets = toRawIfProxy(nextDataProxy.datasets);\n                const prevDatasets = toRawIfProxy(prevDataProxy.datasets);\n                if (nextLabels !== prevLabels) {\n                    setLabels(chart.config.data, nextLabels);\n                    shouldUpdate = true;\n                }\n                if (nextDatasets && nextDatasets !== prevDatasets) {\n                    setDatasets(chart.config.data, nextDatasets, props.datasetIdKey);\n                    shouldUpdate = true;\n                }\n            }\n            if (shouldUpdate) {\n                nextTick(()=>{\n                    update(chart);\n                });\n            }\n        }, {\n            deep: true\n        });\n        return ()=>{\n            return h(\"canvas\", {\n                role: \"img\",\n                ariaLabel: props.ariaLabel,\n                ariaDescribedby: props.ariaDescribedby,\n                ref: canvasRef\n            }, [\n                h(\"p\", {}, [\n                    slots.default ? slots.default() : \"\"\n                ])\n            ]);\n        };\n    }\n});\n\nfunction createTypedChart(type, registerables) {\n    Chart$1.register(registerables);\n    return defineComponent({\n        props: CommonProps,\n        setup (props, param) {\n            let { expose  } = param;\n            const ref = shallowRef(null);\n            const reforwardRef = (chartRef)=>{\n                ref.value = chartRef?.chart;\n            };\n            expose({\n                chart: ref\n            });\n            return ()=>{\n                return h(Chart, compatProps({\n                    ref: reforwardRef\n                }, {\n                    type,\n                    ...props\n                }));\n            };\n        }\n    });\n}\nconst Bar = /* #__PURE__ */ createTypedChart(\"bar\", BarController);\nconst Doughnut = /* #__PURE__ */ createTypedChart(\"doughnut\", DoughnutController);\nconst Line = /* #__PURE__ */ createTypedChart(\"line\", LineController);\nconst Pie = /* #__PURE__ */ createTypedChart(\"pie\", PieController);\nconst PolarArea = /* #__PURE__ */ createTypedChart(\"polarArea\", PolarAreaController);\nconst Radar = /* #__PURE__ */ createTypedChart(\"radar\", RadarController);\nconst Bubble = /* #__PURE__ */ createTypedChart(\"bubble\", BubbleController);\nconst Scatter = /* #__PURE__ */ createTypedChart(\"scatter\", ScatterController);\n\nexport { Bar, Bubble, Chart, Doughnut, Line, Pie, PolarArea, Radar, Scatter, createTypedChart, getDatasetAtEvent, getElementAtEvent, getElementsAtEvent };\n//# sourceMappingURL=index.js.map\n","<template>\n  <div\n    v-if=\"loading\"\n    role=\"status\"\n    class=\"flex gap-0.5 h-24 items-end overflow-hidden animate-pulse\"\n  >\n    <div\n      v-for=\"(percent, key) in loadingBars\"\n      :key\n      class=\"w-full bg-bgr-200\"\n      :style=\"{ height: `${percent}%` }\"\n    ></div>\n  </div>\n\n  <Bar v-else :data :options=\"BAR_OPTIONS\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { BarElement, CategoryScale, Chart, LinearScale } from 'chart.js'\nimport { Bar } from 'vue-chartjs'\n\nChart.register(BarElement, CategoryScale, LinearScale)\n\ntype Item = { value: NumInterval; count?: number }\n\nconst BAR_THICKNESS = 10\n\nconst BAR_OPTIONS = {\n  responsive: true,\n  plugins: {\n    legend: { display: false },\n    tooltip: { enabled: false },\n  },\n  scales: {\n    x: { display: false },\n    y: { display: false, beginAtZero: true },\n  },\n}\n\nconst props = withDefaults(\n  defineProps<{\n    items: Item[]\n    disabled?: boolean\n    loading?: boolean\n    loadingItems?: Partial<Item>[]\n  }>(),\n  {\n    disabled: false,\n    loadingItems: () =>\n      Array.from({ length: 20 }, () => ({ count: Math.random() })),\n  },\n)\n\nconst model = defineModel<NumInterval>({ required: true })\n\nconst colors = computed(() => useColors().colors as Colors)\n\nconst loadingBars = computed(() => {\n  const counts = props.loadingItems.map(({ count }) => count ?? 0)\n  const max = Math.max(...counts)\n  return counts.map((count) => Math.round((count / max) * 100))\n})\n\nconst data = computed(() => ({\n  labels: props.items.map(({ value }) => value.join(' - ')),\n\n  datasets: [\n    {\n      data: props.items.map(({ count }) => count ?? 0),\n\n      backgroundColor: props.items.map(({ value }) => {\n        if (props.disabled) return colors.value.background200\n\n        return (value[0] >= model.value[0] && value[0] <= model.value[1]) ||\n          (model.value[0] >= value[0] && model.value[0] <= value[0]) ||\n          (model.value[1] >= value[0] && model.value[1] <= value[0])\n          ? colors.value.theme\n          : colors.value.background200\n      }),\n\n      barThickness: BAR_THICKNESS,\n    },\n  ],\n}))\n</script>\n","(function(){\"use strict\";try{if(typeof document<\"u\"){var e=document.createElement(\"style\");e.appendChild(document.createTextNode('.vue-slider-dot{position:absolute;transition:all 0s;z-index:5}.vue-slider-dot:focus{outline:none}.vue-slider-dot-tooltip{position:absolute;visibility:hidden}.vue-slider-dot-hover:hover .vue-slider-dot-tooltip,.vue-slider-dot-tooltip-show{visibility:visible}.vue-slider-dot-tooltip-top{top:-10px;left:50%;transform:translate(-50%,-100%)}.vue-slider-dot-tooltip-bottom{bottom:-10px;left:50%;transform:translate(-50%,100%)}.vue-slider-dot-tooltip-left{left:-10px;top:50%;transform:translate(-100%,-50%)}.vue-slider-dot-tooltip-right{right:-10px;top:50%;transform:translate(100%,-50%)}.vue-slider-marks{position:relative;width:100%;height:100%}.vue-slider-mark{position:absolute;z-index:1}.vue-slider-ltr .vue-slider-mark,.vue-slider-rtl .vue-slider-mark{width:0;height:100%;top:50%}.vue-slider-ltr .vue-slider-mark-step,.vue-slider-rtl .vue-slider-mark-step{top:0}.vue-slider-ltr .vue-slider-mark-label,.vue-slider-rtl .vue-slider-mark-label{top:100%;margin-top:10px}.vue-slider-ltr .vue-slider-mark{transform:translate(-50%,-50%)}.vue-slider-ltr .vue-slider-mark-step{left:0}.vue-slider-ltr .vue-slider-mark-label{left:50%;transform:translate(-50%)}.vue-slider-rtl .vue-slider-mark{transform:translate(50%,-50%)}.vue-slider-rtl .vue-slider-mark-step{right:0}.vue-slider-rtl .vue-slider-mark-label{right:50%;transform:translate(50%)}.vue-slider-ttb .vue-slider-mark,.vue-slider-btt .vue-slider-mark{width:100%;height:0;left:50%}.vue-slider-ttb .vue-slider-mark-step,.vue-slider-btt .vue-slider-mark-step{left:0}.vue-slider-ttb .vue-slider-mark-label,.vue-slider-btt .vue-slider-mark-label{left:100%;margin-left:10px}.vue-slider-btt .vue-slider-mark{transform:translate(-50%,50%)}.vue-slider-btt .vue-slider-mark-step{top:0}.vue-slider-btt .vue-slider-mark-label{top:50%;transform:translateY(-50%)}.vue-slider-ttb .vue-slider-mark{transform:translate(-50%,-50%)}.vue-slider-ttb .vue-slider-mark-step{bottom:0}.vue-slider-ttb .vue-slider-mark-label{bottom:50%;transform:translateY(50%)}.vue-slider-mark-step,.vue-slider-mark-label{position:absolute}.vue-slider-disabled{opacity:.5;cursor:not-allowed}.vue-slider-rail{background-color:#ccc;border-radius:15px}.vue-slider-process{background-color:#3498db;border-radius:15px}.vue-slider-mark{z-index:4}.vue-slider-mark:first-child .vue-slider-mark-step,.vue-slider-mark:last-child .vue-slider-mark-step{display:none}.vue-slider-mark-step{width:100%;height:100%;border-radius:50%;background-color:#00000029}.vue-slider-mark-label{font-size:14px;white-space:nowrap}.vue-slider-dot-handle{cursor:pointer;width:100%;height:100%;border-radius:50%;background-color:#fff;box-sizing:border-box;box-shadow:.5px .5px 2px 1px #00000052}.vue-slider-dot-handle-focus{box-shadow:0 0 1px 2px #3498db5c}.vue-slider-dot-handle-disabled{cursor:not-allowed;background-color:#ccc}.vue-slider-dot-tooltip-inner{font-size:14px;white-space:nowrap;padding:2px 5px;min-width:20px;text-align:center;color:#fff;border-radius:5px;border-color:#3498db;background-color:#3498db;box-sizing:content-box}.vue-slider-dot-tooltip-inner:after{content:\"\";position:absolute}.vue-slider-dot-tooltip-inner-top:after{top:100%;left:50%;transform:translate(-50%);height:0;width:0;border-color:transparent;border-style:solid;border-width:5px;border-top-color:inherit}.vue-slider-dot-tooltip-inner-bottom:after{bottom:100%;left:50%;transform:translate(-50%);height:0;width:0;border-color:transparent;border-style:solid;border-width:5px;border-bottom-color:inherit}.vue-slider-dot-tooltip-inner-left:after{left:100%;top:50%;transform:translateY(-50%);height:0;width:0;border-color:transparent;border-style:solid;border-width:5px;border-left-color:inherit}.vue-slider-dot-tooltip-inner-right:after{right:100%;top:50%;transform:translateY(-50%);height:0;width:0;border-color:transparent;border-style:solid;border-width:5px;border-right-color:inherit}.vue-slider-dot-tooltip-wrapper{opacity:0;transition:all .3s}.vue-slider-dot-tooltip-wrapper-show{opacity:1}.vue-slider{position:relative;box-sizing:content-box;-webkit-user-select:none;user-select:none;display:block;-webkit-tap-highlight-color:rgba(0,0,0,0)}.vue-slider-rail{position:relative;width:100%;height:100%;transition-property:width,height,left,right,top,bottom}.vue-slider-process{position:absolute;z-index:1}')),document.head.appendChild(e)}}catch(r){console.error(\"vite-plugin-css-injected-by-js\",r)}})();\nvar N = Object.defineProperty;\nvar T = (s, t, e) => t in s ? N(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;\nvar l = (s, t, e) => (T(s, typeof t != \"symbol\" ? t + \"\" : t, e), e);\nimport { openBlock as u, createElementBlock as f, normalizeClass as g, renderSlot as c, createElementVNode as D, normalizeStyle as p, toDisplayString as I, createCommentVNode as B, resolveComponent as L, mergeProps as m, Fragment as P, renderList as R, createBlock as U, withCtx as A, createVNode as _ } from \"vue\";\nconst w = (s, t) => {\n  const e = s.__vccOpts || s;\n  for (const [i, a] of t)\n    e[i] = a;\n  return e;\n}, W = {\n  emits: [\"drag-start\"],\n  props: {\n    value: {\n      type: [Number, String],\n      // number | string\n      default: 0\n    },\n    tooltip: {\n      type: String,\n      // 'none' | 'always' | 'focus' | 'hover' | 'active'\n      required: !0\n    },\n    dotStyle: {\n      type: Array,\n      // ([key: string]: any)[]\n      default: () => ({})\n    },\n    tooltipStyle: {\n      type: Array,\n      // ([key: string]: any)[]\n      default: () => ({})\n    },\n    tooltipPlacement: {\n      type: String,\n      // 'top' | 'right' | 'bottom' | 'left'\n      required: !0\n    },\n    tooltipFormatter: {\n      type: [String, Array, Object, Function],\n      default: void 0\n    },\n    focus: {\n      type: Boolean,\n      default: !1\n    },\n    disabled: {\n      type: Boolean,\n      default: !1\n    }\n  },\n  computed: {\n    dotClasses() {\n      return [\n        \"vue-slider-dot\",\n        {\n          \"vue-slider-dot-hover\": this.tooltip === \"hover\" || this.tooltip === \"active\",\n          \"vue-slider-dot-disabled\": this.disabled,\n          \"vue-slider-dot-focus\": this.focus\n        }\n      ];\n    },\n    handleClasses() {\n      return [\n        \"vue-slider-dot-handle\",\n        {\n          \"vue-slider-dot-handle-disabled\": this.disabled,\n          \"vue-slider-dot-handle-focus\": this.focus\n        }\n      ];\n    },\n    tooltipClasses() {\n      return [\n        \"vue-slider-dot-tooltip\",\n        [`vue-slider-dot-tooltip-${this.tooltipPlacement}`],\n        {\n          \"vue-slider-dot-tooltip-show\": this.showTooltip\n        }\n      ];\n    },\n    tooltipInnerClasses() {\n      return [\n        \"vue-slider-dot-tooltip-inner\",\n        [`vue-slider-dot-tooltip-inner-${this.tooltipPlacement}`],\n        {\n          \"vue-slider-dot-tooltip-inner-disabled\": this.disabled,\n          \"vue-slider-dot-tooltip-inner-focus\": this.focus\n        }\n      ];\n    },\n    showTooltip() {\n      switch (this.tooltip) {\n        case \"always\":\n          return !0;\n        case \"none\":\n          return !1;\n        case \"focus\":\n        case \"active\":\n          return !!this.focus;\n        default:\n          return !1;\n      }\n    },\n    tooltipValue() {\n      return this.tooltipFormatter ? typeof this.tooltipFormatter == \"string\" ? this.tooltipFormatter.replace(/\\{value\\}/, String(this.value)) : this.tooltipFormatter(this.value) : this.value;\n    }\n  },\n  methods: {\n    dragStart(s) {\n      if (this.disabled)\n        return !1;\n      this.$emit(\"drag-start\");\n    }\n  }\n}, K = [\"aria-valuetext\"], q = { class: \"vue-slider-dot-tooltip-text\" };\nfunction $(s, t, e, i, a, r) {\n  return u(), f(\"div\", {\n    ref: \"dot\",\n    class: g(r.dotClasses),\n    \"aria-valuetext\": r.tooltipValue,\n    onMousedown: t[0] || (t[0] = (...n) => r.dragStart && r.dragStart(...n)),\n    onTouchstartPassive: t[1] || (t[1] = (...n) => r.dragStart && r.dragStart(...n))\n  }, [\n    c(s.$slots, \"dot\", {}, () => [\n      D(\"div\", {\n        class: g(r.handleClasses),\n        style: p(e.dotStyle)\n      }, null, 6)\n    ]),\n    e.tooltip !== \"none\" ? (u(), f(\"div\", {\n      key: 0,\n      class: g(r.tooltipClasses)\n    }, [\n      c(s.$slots, \"tooltip\", {}, () => [\n        D(\"div\", {\n          class: g(r.tooltipInnerClasses),\n          style: p(e.tooltipStyle)\n        }, [\n          D(\"span\", q, I(r.tooltipValue), 1)\n        ], 6)\n      ])\n    ], 2)) : B(\"\", !0)\n  ], 42, K);\n}\nconst M = /* @__PURE__ */ w(W, [[\"render\", $]]), X = {\n  props: {\n    mark: {\n      type: Object,\n      // Mark\n      required: !0\n    },\n    hideLabel: {\n      type: Boolean,\n      default: !1\n    },\n    stepStyle: {\n      type: Object,\n      // [key: string]: any\n      default: void 0\n    },\n    stepActiveStyle: {\n      type: Object,\n      // [key: string]: any\n      default: void 0\n    },\n    labelStyle: {\n      type: Object,\n      // [key: string]: any\n      default: void 0\n    },\n    labelActiveStyle: {\n      type: Object,\n      // [key: string]: any\n      default: void 0\n    }\n  },\n  computed: {\n    marksClasses() {\n      return [\n        \"vue-slider-mark\",\n        {\n          \"vue-slider-mark-active\": this.mark.active\n        }\n      ];\n    },\n    stepClasses() {\n      return [\n        \"vue-slider-mark-step\",\n        {\n          \"vue-slider-mark-step-active\": this.mark.active\n        }\n      ];\n    },\n    labelClasses() {\n      return [\n        \"vue-slider-mark-label\",\n        {\n          \"vue-slider-mark-label-active\": this.mark.active\n        }\n      ];\n    }\n  },\n  methods: {\n    labelClickHandle(s) {\n      s.stopPropagation(), this.$emit(\"pressLabel\", this.mark.pos);\n    }\n  }\n};\nfunction G(s, t, e, i, a, r) {\n  return u(), f(\"div\", {\n    class: g(r.marksClasses)\n  }, [\n    c(s.$slots, \"step\", {}, () => [\n      D(\"div\", {\n        class: g(r.stepClasses),\n        style: p([\n          e.stepStyle,\n          e.mark.style,\n          e.mark.active ? e.stepActiveStyle : null,\n          e.mark.active ? e.mark.activeStyle : null\n        ])\n      }, null, 6)\n    ]),\n    e.hideLabel ? B(\"\", !0) : c(s.$slots, \"label\", { key: 0 }, () => [\n      D(\"div\", {\n        class: g(r.labelClasses),\n        style: p([\n          e.labelStyle,\n          e.mark.labelStyle,\n          e.mark.active ? e.labelActiveStyle : null,\n          e.mark.active ? e.mark.labelActiveStyle : null\n        ]),\n        onClick: t[0] || (t[0] = (...n) => r.labelClickHandle && r.labelClickHandle(...n))\n      }, I(e.mark.label), 7)\n    ])\n  ], 2);\n}\nconst z = /* @__PURE__ */ w(X, [[\"render\", G]]), k = (s) => typeof s == \"number\" ? `${s}px` : s, Z = (s) => {\n  const t = document.documentElement, e = document.body, i = s.getBoundingClientRect();\n  return {\n    y: i.top + (window.pageYOffset || t.scrollTop) - (t.clientTop || e.clientTop || 0),\n    x: i.left + (window.pageXOffset || t.scrollLeft) - (t.clientLeft || e.clientLeft || 0)\n  };\n}, J = (s, t, e) => {\n  const i = \"targetTouches\" in s ? s.targetTouches[0] : s, a = Z(t), r = {\n    x: i.pageX - a.x,\n    y: i.pageY - a.y\n  };\n  return {\n    x: e ? t.offsetWidth - r.x : r.x,\n    y: e ? t.offsetHeight - r.y : r.y\n  };\n}, Q = (s, t) => {\n  if (t.hook) {\n    const e = t.hook(s);\n    if (typeof e == \"function\")\n      return e;\n    if (!e)\n      return null;\n  }\n  switch (s.keyCode) {\n    case 38:\n      return (e) => t.direction === \"ttb\" ? e - 1 : e + 1;\n    case 39:\n      return (e) => t.direction === \"rtl\" ? e - 1 : e + 1;\n    case 40:\n      return (e) => t.direction === \"ttb\" ? e + 1 : e - 1;\n    case 37:\n      return (e) => t.direction === \"rtl\" ? e + 1 : e - 1;\n    case 35:\n      return () => t.max;\n    case 36:\n      return () => t.min;\n    case 33:\n      return (e) => e + 10;\n    case 34:\n      return (e) => e - 10;\n    default:\n      return null;\n  }\n};\nclass y {\n  constructor(t) {\n    l(this, \"num\");\n    this.num = t;\n  }\n  decimal(t, e) {\n    const i = this.num, a = this.getDecimalLen(i), r = this.getDecimalLen(t);\n    let n = 0;\n    switch (e) {\n      case \"+\":\n        n = this.getExponent(a, r), this.num = (this.safeRoundUp(i, n) + this.safeRoundUp(t, n)) / n;\n        break;\n      case \"-\":\n        n = this.getExponent(a, r), this.num = (this.safeRoundUp(i, n) - this.safeRoundUp(t, n)) / n;\n        break;\n      case \"*\":\n        this.num = this.safeRoundUp(\n          this.safeRoundUp(i, this.getExponent(a)),\n          this.safeRoundUp(t, this.getExponent(r))\n        ) / this.getExponent(a + r);\n        break;\n      case \"/\":\n        n = this.getExponent(a, r), this.num = this.safeRoundUp(i, n) / this.safeRoundUp(t, n);\n        break;\n      case \"%\":\n        n = this.getExponent(a, r), this.num = this.safeRoundUp(i, n) % this.safeRoundUp(t, n) / n;\n        break;\n    }\n    return this;\n  }\n  plus(t) {\n    return this.decimal(t, \"+\");\n  }\n  minus(t) {\n    return this.decimal(t, \"-\");\n  }\n  multiply(t) {\n    return this.decimal(t, \"*\");\n  }\n  divide(t) {\n    return this.decimal(t, \"/\");\n  }\n  remainder(t) {\n    return this.decimal(t, \"%\");\n  }\n  toNumber() {\n    return this.num;\n  }\n  getDecimalLen(t) {\n    const e = `${t}`.split(\"e\");\n    return (`${e[0]}`.split(\".\")[1] || \"\").length - (e[1] ? +e[1] : 0);\n  }\n  getExponent(t, e) {\n    return Math.pow(10, e !== void 0 ? Math.max(t, e) : t);\n  }\n  // fix: 9999999.99995 * 100000 = 999999999994.9999\n  safeRoundUp(t, e) {\n    return Math.round(t * e);\n  }\n}\nvar Y = /* @__PURE__ */ ((s) => (s[s.VALUE = 1] = \"VALUE\", s[s.INTERVAL = 2] = \"INTERVAL\", s[s.MIN = 3] = \"MIN\", s[s.MAX = 4] = \"MAX\", s[s.ORDER = 5] = \"ORDER\", s))(Y || {});\nconst tt = {\n  1: 'The type of the \"value\" is illegal',\n  2: 'The prop \"interval\" is invalid, \"(max - min)\" must be divisible by \"interval\"',\n  3: 'The \"value\" must be greater than or equal to the \"min\".',\n  4: 'The \"value\" must be less than or equal to the \"max\".',\n  5: 'When \"order\" is false, the parameters \"minRange\", \"maxRange\", \"fixed\", \"enabled\" are invalid.'\n};\nclass et {\n  constructor(t) {\n    l(this, \"dotsPos\", []);\n    // The position of each slider\n    l(this, \"dotsValue\", []);\n    // The value of each slider\n    l(this, \"data\");\n    l(this, \"enableCross\");\n    l(this, \"fixed\");\n    l(this, \"max\");\n    l(this, \"min\");\n    l(this, \"interval\");\n    l(this, \"minRange\");\n    l(this, \"maxRange\");\n    l(this, \"order\");\n    l(this, \"marks\");\n    l(this, \"included\");\n    l(this, \"process\");\n    l(this, \"adsorb\");\n    l(this, \"dotOptions\");\n    l(this, \"onError\");\n    l(this, \"cacheRangeDir\", {});\n    this.data = t.data, this.max = t.max, this.min = t.min, this.interval = t.interval, this.order = t.order, this.marks = t.marks, this.included = t.included, this.process = t.process, this.adsorb = t.adsorb, this.dotOptions = t.dotOptions, this.onError = t.onError, this.order ? (this.minRange = t.minRange || 0, this.maxRange = t.maxRange || 0, this.enableCross = t.enableCross, this.fixed = t.fixed) : ((t.minRange || t.maxRange || !t.enableCross || t.fixed) && this.emitError(\n      5\n      /* ORDER */\n    ), this.minRange = 0, this.maxRange = 0, this.enableCross = !0, this.fixed = !1), this.setValue(t.value);\n  }\n  setValue(t) {\n    this.setDotsValue(\n      Array.isArray(t) ? this.order ? [...t].sort((e, i) => this.getIndexByValue(e) - this.getIndexByValue(i)) : [...t] : [t],\n      !0\n    );\n  }\n  setDotsValue(t, e) {\n    this.dotsValue = t, e && this.syncDotsPos();\n  }\n  // Set the slider position\n  setDotsPos(t) {\n    const e = this.order ? [...t].sort((i, a) => i - a) : t;\n    this.dotsPos = e, this.setDotsValue(\n      e.map((i) => this.getValueByPos(i)),\n      this.adsorb\n    );\n  }\n  // Get value by position\n  getValueByPos(t) {\n    let e = this.parsePos(t);\n    if (this.included) {\n      let i = 100;\n      this.markList.forEach((a) => {\n        const r = Math.abs(a.pos - t);\n        r < i && (i = r, e = a.value);\n      });\n    }\n    return e;\n  }\n  // Sync slider position\n  syncDotsPos() {\n    this.dotsPos = this.dotsValue.map((t) => this.parseValue(t));\n  }\n  /**\n   * Get all the marks\n   *\n   * @readonly\n   * @type {Mark[]}\n   * @memberof Control\n   */\n  get markList() {\n    if (!this.marks)\n      return [];\n    const t = (e, i) => {\n      const a = this.parseValue(e);\n      return {\n        pos: a,\n        value: e,\n        label: e,\n        active: this.isActiveByPos(a),\n        ...i\n      };\n    };\n    return this.marks === !0 ? this.getValues().map((e) => t(e)) : Object.prototype.toString.call(this.marks) === \"[object Object]\" ? Object.keys(this.marks).sort((e, i) => +e - +i).map((e) => {\n      const i = this.marks[e];\n      return t(e, typeof i != \"string\" ? i : { label: i });\n    }) : Array.isArray(this.marks) ? this.marks.map((e) => t(e)) : typeof this.marks == \"function\" ? this.getValues().map((e) => ({ value: e, result: this.marks(e) })).filter(({ result: e }) => !!e).map(({ value: e, result: i }) => t(e, i)) : [];\n  }\n  /**\n   * Get the most recent slider index by position\n   *\n   * @param {number} pos\n   * @returns {number}\n   * @memberof Control\n   */\n  getRecentDot(t) {\n    const e = this.dotsPos.filter((i, a) => !(this.getDotOption(a) && this.getDotOption(a).disabled)).map((i) => Math.abs(i - t));\n    return e.indexOf(Math.min(...e));\n  }\n  /**\n   * Get index by value\n   *\n   * @param {Value} value\n   * @returns {number}\n   * @memberof Control\n   */\n  getIndexByValue(t) {\n    return this.data ? this.data.indexOf(t) : new y(+t).minus(this.min).divide(this.interval).toNumber();\n  }\n  /**\n   * Get value by index\n   *\n   * @param {index} number\n   * @returns {Value}\n   * @memberof Control\n   */\n  getValueByIndex(t) {\n    return t < 0 ? t = 0 : t > this.total && (t = this.total), this.data ? this.data[t] : new y(t).multiply(this.interval).plus(this.min).toNumber();\n  }\n  /**\n   * Set the position of a single slider\n   *\n   * @param {number} pos\n   * @param {number} index\n   */\n  setDotPos(t, e) {\n    t = this.getValidPos(t, e).pos;\n    const i = t - this.dotsPos[e];\n    if (!i)\n      return;\n    let a = new Array(this.dotsPos.length);\n    this.fixed ? a = this.getFixedChangePosArr(i, e) : this.minRange || this.maxRange ? a = this.getLimitRangeChangePosArr(t, i, e) : a[e] = i, this.setDotsPos(this.dotsPos.map((r, n) => r + (a[n] || 0)));\n  }\n  /**\n   * In fixed mode, get the position of all slider changes\n   *\n   * @param {number} changePos Change distance of a single slider\n   * @param {number} index slider index\n   * @returns {DotsPosChangeArray}\n   * @memberof Control\n   */\n  getFixedChangePosArr(t, e) {\n    return this.dotsPos.forEach((i, a) => {\n      if (a !== e) {\n        const { pos: r, inRange: n } = this.getValidPos(i + t, a);\n        n || (t = Math.min(Math.abs(r - i), Math.abs(t)) * (t < 0 ? -1 : 1));\n      }\n    }), this.dotsPos.map((i) => t);\n  }\n  /**\n   * In minRange/maxRange mode, get the position of all slider changes\n   *\n   * @param {number} pos position of a single slider\n   * @param {number} changePos Change distance of a single slider\n   * @param {number} index slider index\n   * @returns {DotsPosChangeArray}\n   * @memberof Control\n   */\n  getLimitRangeChangePosArr(t, e, i) {\n    const a = [{ index: i, changePos: e }], r = e;\n    return [this.minRange, this.maxRange].forEach((n, S) => {\n      if (!n)\n        return !1;\n      const o = S === 0, h = e > 0;\n      let b = 0;\n      o ? b = h ? 1 : -1 : b = h ? -1 : 1;\n      const H = (V, j) => {\n        const E = Math.abs(V - j);\n        return o ? E < this.minRangeDir : E > this.maxRangeDir;\n      };\n      let v = i + b, x = this.dotsPos[v], C = t;\n      for (; this.isPos(x) && H(x, C); ) {\n        const { pos: V } = this.getValidPos(x + r, v);\n        a.push({\n          index: v,\n          changePos: V - x\n        }), v = v + b, C = V, x = this.dotsPos[v];\n      }\n    }), this.dotsPos.map((n, S) => {\n      const o = a.filter((h) => h.index === S);\n      return o.length ? o[0].changePos : 0;\n    });\n  }\n  isPos(t) {\n    return typeof t == \"number\";\n  }\n  /**\n   * Get a valid position by pos\n   *\n   * @param {number} pos\n   * @param {number} index\n   * @returns {{ pos: number, inRange: boolean }}\n   */\n  getValidPos(t, e) {\n    const i = this.valuePosRange[e];\n    let a = !0;\n    return t < i[0] ? (t = i[0], a = !1) : t > i[1] && (t = i[1], a = !1), {\n      pos: t,\n      inRange: a\n    };\n  }\n  /**\n   * Calculate the position of the slider by value\n   *\n   * @param {Value} val\n   * @returns {number}\n   */\n  parseValue(t) {\n    if (this.data)\n      t = this.data.indexOf(t);\n    else if (typeof t == \"number\" || typeof t == \"string\") {\n      if (t = +t, t < this.min)\n        return this.emitError(\n          3\n          /* MIN */\n        ), 0;\n      if (t > this.max)\n        return this.emitError(\n          4\n          /* MAX */\n        ), 0;\n      if (typeof t != \"number\" || t !== t)\n        return this.emitError(\n          1\n          /* VALUE */\n        ), 0;\n      t = new y(t).minus(this.min).divide(this.interval).toNumber();\n    }\n    const e = new y(t).multiply(this.gap).toNumber();\n    return e < 0 ? 0 : e > 100 ? 100 : e;\n  }\n  /**\n   * Calculate the value by position\n   *\n   * @param {number} pos\n   * @returns {Value}\n   * @memberof Control\n   */\n  parsePos(t) {\n    const e = Math.round(t / this.gap);\n    return this.getValueByIndex(e);\n  }\n  /**\n   * Determine if the location is active\n   *\n   * @param {number} pos\n   * @returns {boolean}\n   * @memberof Control\n   */\n  isActiveByPos(t) {\n    return this.processArray.some(([e, i]) => t >= e && t <= i);\n  }\n  /**\n   * Get each value\n   *\n   * @returns {Value[]}\n   * @memberof Control\n   */\n  getValues() {\n    if (this.data)\n      return this.data;\n    {\n      const t = [];\n      for (let e = 0; e <= this.total; e++)\n        t.push(new y(e).multiply(this.interval).plus(this.min).toNumber());\n      return t;\n    }\n  }\n  /**\n   * Calculate the distance of the range\n   * @param range number\n   */\n  getRangeDir(t) {\n    return t ? new y(t).divide(\n      new y(this.data ? this.data.length - 1 : this.max).minus(this.data ? 0 : this.min).toNumber()\n    ).multiply(100).toNumber() : 100;\n  }\n  emitError(t) {\n    this.onError && this.onError(t, tt[t]);\n  }\n  get processArray() {\n    if (this.process) {\n      if (typeof this.process == \"function\")\n        return this.process(this.dotsPos);\n      if (this.dotsPos.length === 1)\n        return [[0, this.dotsPos[0]]];\n      if (this.dotsPos.length > 1)\n        return [[Math.min(...this.dotsPos), Math.max(...this.dotsPos)]];\n    }\n    return [];\n  }\n  /**\n   * The total number of values\n   *\n   * @type {number}\n   * @memberof Control\n   */\n  get total() {\n    let t = 0;\n    return this.data ? t = this.data.length - 1 : t = new y(this.max).minus(this.min).divide(this.interval).toNumber(), t - Math.floor(t) !== 0 ? (this.emitError(\n      2\n      /* INTERVAL */\n    ), 0) : t;\n  }\n  // Distance between each value\n  get gap() {\n    return 100 / this.total;\n  }\n  // The minimum distance between the two sliders\n  get minRangeDir() {\n    return this.cacheRangeDir[this.minRange] ? this.cacheRangeDir[this.minRange] : this.cacheRangeDir[this.minRange] = this.getRangeDir(this.minRange);\n  }\n  // Maximum distance between the two sliders\n  get maxRangeDir() {\n    return this.cacheRangeDir[this.maxRange] ? this.cacheRangeDir[this.maxRange] : this.cacheRangeDir[this.maxRange] = this.getRangeDir(this.maxRange);\n  }\n  getDotOption(t) {\n    return Array.isArray(this.dotOptions) ? this.dotOptions[t] : this.dotOptions;\n  }\n  getDotRange(t, e, i) {\n    if (!this.dotOptions)\n      return i;\n    const a = this.getDotOption(t);\n    return a && a[e] !== void 0 ? this.parseValue(a[e]) : i;\n  }\n  /**\n   * Sliding range of each slider\n   *\n   * @type {Array<[number, number]>}\n   * @memberof Control\n   */\n  get valuePosRange() {\n    const t = this.dotsPos, e = [];\n    return t.forEach((i, a) => {\n      e.push([\n        Math.max(\n          this.minRange ? this.minRangeDir * a : 0,\n          this.enableCross ? 0 : t[a - 1] || 0,\n          this.getDotRange(a, \"min\", 0)\n        ),\n        Math.min(\n          this.minRange ? 100 - this.minRangeDir * (t.length - 1 - a) : 100,\n          this.enableCross ? 100 : t[a + 1] || 100,\n          this.getDotRange(a, \"max\", 100)\n        )\n      ]);\n    }), e;\n  }\n  get dotsIndex() {\n    return this.dotsValue.map((t) => this.getIndexByValue(t));\n  }\n}\nclass st {\n  constructor(t) {\n    l(this, \"map\");\n    l(this, \"states\", 0);\n    this.map = t;\n  }\n  add(t) {\n    this.states |= t;\n  }\n  delete(t) {\n    this.states &= ~t;\n  }\n  toggle(t) {\n    this.has(t) ? this.delete(t) : this.add(t);\n  }\n  has(t) {\n    return !!(this.states & t);\n  }\n}\nconst O = 4, d = {\n  // StateMap\n  None: 0,\n  Drag: 2,\n  Focus: 4\n}, it = {\n  emits: [\"update:modelValue\", \"change\", \"drag-start\", \"drag-end\", \"dragging\", \"error\"],\n  components: {\n    VueSliderDot: M,\n    VueSliderMark: z\n  },\n  props: {\n    modelValue: {\n      type: [Number, String, Array],\n      default: 0\n    },\n    silent: {\n      type: Boolean,\n      default: !1\n    },\n    direction: {\n      type: String,\n      default: \"ltr\",\n      validator: (s) => [\"ltr\", \"rtl\", \"ttb\", \"btt\"].indexOf(s) > -1\n    },\n    width: {\n      type: [Number, String],\n      default: void 0\n    },\n    height: {\n      type: [Number, String],\n      default: void 0\n    },\n    dotSize: {\n      type: [Array, Number],\n      // The size of the slider, optional [width, height] | size\n      default: 14\n    },\n    contained: {\n      type: Boolean,\n      default: !1\n    },\n    min: {\n      type: Number,\n      default: 0\n    },\n    max: {\n      type: Number,\n      default: 100\n    },\n    interval: {\n      type: Number,\n      default: 1\n    },\n    disabled: {\n      type: Boolean,\n      default: !1\n    },\n    clickable: {\n      type: Boolean,\n      default: !0\n    },\n    dragOnClick: {\n      type: Boolean,\n      default: !0\n    },\n    duration: {\n      type: Number,\n      default: 0.5\n    },\n    data: {\n      type: [Object, Array],\n      // Value[] | object[] | DataObject\n      default: void 0\n    },\n    dataValue: {\n      type: String,\n      default: \"value\"\n    },\n    dataLabel: {\n      type: String,\n      default: \"label\"\n    },\n    lazy: {\n      type: Boolean,\n      default: !1\n    },\n    tooltip: {\n      type: String,\n      default: \"active\",\n      validator: (s) => [\"none\", \"always\", \"focus\", \"hover\", \"active\"].indexOf(s) > -1\n    },\n    tooltipPlacement: {\n      type: [String, Array],\n      default: void 0,\n      validator: (s) => (Array.isArray(s) ? s : [s]).every(\n        (t) => [\"top\", \"right\", \"bottom\", \"left\"].indexOf(t) > -1\n      )\n    },\n    tooltipFormatter: {\n      type: [String, Array, Function],\n      default: \"\"\n    },\n    useKeyboard: {\n      type: Boolean,\n      default: !0\n    },\n    keydownHook: {\n      type: [Boolean, Function],\n      default: void 0\n    },\n    enableCross: {\n      type: Boolean,\n      default: !0\n    },\n    fixed: {\n      type: Boolean,\n      default: !1\n    },\n    order: {\n      type: Boolean,\n      default: !0\n    },\n    minRange: {\n      type: Number,\n      default: void 0\n    },\n    maxRange: {\n      type: Number,\n      default: void 0\n    },\n    marks: {\n      type: [Boolean, Object, Array, Function],\n      default: !1\n    },\n    process: {\n      type: [Boolean, Function],\n      default: !0\n    },\n    zoom: {\n      type: [Number],\n      default: void 0\n    },\n    included: {\n      type: [Boolean],\n      default: !1\n    },\n    adsorb: {\n      type: [Boolean],\n      default: !1\n    },\n    hideLabel: {\n      type: [Boolean],\n      default: !1\n    },\n    dotOptions: {\n      type: Object,\n      default: void 0\n    },\n    dotAttrs: {\n      type: Object,\n      default: void 0\n    },\n    railStyle: {\n      type: Object,\n      default: null\n    },\n    processStyle: {\n      type: Object,\n      default: null\n    },\n    dotStyle: {\n      type: Object,\n      default: null\n    },\n    tooltipStyle: {\n      type: Object,\n      default: null\n    },\n    stepStyle: {\n      type: Object,\n      default: null\n    },\n    stepActiveStyle: {\n      type: Object,\n      default: null\n    },\n    labelStyle: {\n      type: Object,\n      default: null\n    },\n    labelActiveStyle: {\n      type: Object,\n      default: null\n    }\n  },\n  data() {\n    return {\n      control: null,\n      // Control instance\n      states: new st(d),\n      scale: 1,\n      focusDotIndex: 0\n    };\n  },\n  computed: {\n    tailSize() {\n      return k((this.isHorizontal ? this.height : this.width) || O);\n    },\n    containerClasses() {\n      return [\n        \"vue-slider\",\n        [`vue-slider-${this.direction}`],\n        {\n          \"vue-slider-disabled\": this.disabled\n        }\n      ];\n    },\n    containerStyles() {\n      const [s, t] = Array.isArray(this.dotSize) ? this.dotSize : [this.dotSize, this.dotSize], e = this.width ? k(this.width) : this.isHorizontal ? \"auto\" : k(O), i = this.height ? k(this.height) : this.isHorizontal ? k(O) : \"auto\";\n      return {\n        padding: this.contained ? `${t / 2}px ${s / 2}px` : this.isHorizontal ? `${t / 2}px 0` : `0 ${s / 2}px`,\n        width: e,\n        height: i\n      };\n    },\n    processArray() {\n      return this.control.processArray.map(([s, t, e], i) => {\n        s > t && ([s, t] = [t, s]);\n        const a = this.isHorizontal ? \"width\" : \"height\";\n        return {\n          start: s,\n          end: t,\n          index: i,\n          style: {\n            [this.isHorizontal ? \"height\" : \"width\"]: \"100%\",\n            [this.isHorizontal ? \"top\" : \"left\"]: 0,\n            [this.mainDirection]: `${s}%`,\n            [a]: `${t - s}%`,\n            transitionProperty: `${a},${this.mainDirection}`,\n            transitionDuration: `${this.animateTime}s`,\n            ...this.processStyle,\n            ...e\n          }\n        };\n      });\n    },\n    dotBaseStyle() {\n      const [s, t] = Array.isArray(this.dotSize) ? this.dotSize : [this.dotSize, this.dotSize];\n      let e;\n      return this.isHorizontal ? e = {\n        transform: `translate(${this.isReverse ? \"50%\" : \"-50%\"}, -50%)`,\n        \"-WebkitTransform\": `translate(${this.isReverse ? \"50%\" : \"-50%\"}, -50%)`,\n        top: \"50%\",\n        [this.direction === \"ltr\" ? \"left\" : \"right\"]: \"0\"\n      } : e = {\n        transform: `translate(-50%, ${this.isReverse ? \"50%\" : \"-50%\"})`,\n        \"-WebkitTransform\": `translate(-50%, ${this.isReverse ? \"50%\" : \"-50%\"})`,\n        left: \"50%\",\n        [this.direction === \"btt\" ? \"bottom\" : \"top\"]: \"0\"\n      }, {\n        width: `${s}px`,\n        height: `${t}px`,\n        ...e\n      };\n    },\n    mainDirection() {\n      switch (this.direction) {\n        case \"ltr\":\n          return \"left\";\n        case \"rtl\":\n          return \"right\";\n        case \"btt\":\n          return \"bottom\";\n        case \"ttb\":\n          return \"top\";\n      }\n    },\n    isHorizontal() {\n      return this.direction === \"ltr\" || this.direction === \"rtl\";\n    },\n    isReverse() {\n      return this.direction === \"rtl\" || this.direction === \"btt\";\n    },\n    tooltipDirections() {\n      const s = this.tooltipPlacement || (this.isHorizontal ? \"top\" : \"left\");\n      return Array.isArray(s) ? s : this.dots.map(() => s);\n    },\n    dots() {\n      return this.control.dotsPos.map((s, t) => ({\n        pos: s,\n        index: t,\n        value: this.control.dotsValue[t],\n        focus: this.states.has(d.Focus) && this.focusDotIndex === t,\n        disabled: this.disabled,\n        style: this.dotStyle,\n        ...(Array.isArray(this.dotOptions) ? this.dotOptions[t] : this.dotOptions) || {}\n      }));\n    },\n    animateTime() {\n      return this.states.has(d.Drag) ? 0 : this.duration;\n    },\n    canSort() {\n      return this.order && !this.minRange && !this.maxRange && !this.fixed && this.enableCross;\n    },\n    sliderData() {\n      return this.isObjectArrayData(this.data) ? this.data.map((s) => s[this.dataValue]) : this.isObjectData(this.data) ? Object.keys(this.data) : this.data;\n    },\n    sliderMarks() {\n      if (this.marks)\n        return this.marks;\n      if (this.isObjectArrayData(this.data))\n        return (s) => {\n          const t = { label: s };\n          return this.data.some((e) => e[this.dataValue] === s ? (t.label = e[this.dataLabel], !0) : !1), t;\n        };\n      if (this.isObjectData(this.data))\n        return this.data;\n    },\n    sliderTooltipFormatter() {\n      if (this.tooltipFormatter)\n        return this.tooltipFormatter;\n      if (this.isObjectArrayData(this.data))\n        return (s) => {\n          let t = \"\" + s;\n          return this.data.some((e) => e[this.dataValue] === s ? (t = e[this.dataLabel], !0) : !1), t;\n        };\n      if (this.isObjectData(this.data)) {\n        const s = this.data;\n        return (t) => s[t];\n      }\n    },\n    // Slider value and component internal value are inconsistent\n    isNotSync() {\n      const s = this.control.dotsValue;\n      return Array.isArray(this.modelValue) ? this.modelValue.length !== s.length || this.modelValue.some((t, e) => t !== s[e]) : this.modelValue !== s[0];\n    },\n    /**\n     * Get the drag range of the slider\n     *\n     * @private\n     * @param {number} index slider index\n     * @returns {[number, number]} range [start, end]\n     * @memberof VueSlider\n     */\n    dragRange() {\n      const s = this.dots[this.focusDotIndex - 1], t = this.dots[this.focusDotIndex + 1];\n      return [s ? s.pos : -1 / 0, t ? t.pos : 1 / 0];\n    }\n  },\n  created() {\n    this.initControl();\n  },\n  mounted() {\n    this.bindEvent();\n  },\n  beforeUnmount() {\n    this.unbindEvent();\n  },\n  methods: {\n    isObjectData(s) {\n      return !!s && Object.prototype.toString.call(s) === \"[object Object]\";\n    },\n    isObjectArrayData(s) {\n      return !!s && Array.isArray(s) && s.length > 0 && typeof s[0] == \"object\";\n    },\n    bindEvent() {\n      document.addEventListener(\"touchmove\", this.dragMove, { passive: !1 }), document.addEventListener(\"touchend\", this.dragEnd, { passive: !1 }), document.addEventListener(\"mousedown\", this.blurHandle), document.addEventListener(\"mousemove\", this.dragMove, { passive: !1 }), document.addEventListener(\"mouseup\", this.dragEnd), document.addEventListener(\"mouseleave\", this.dragEnd), document.addEventListener(\"keydown\", this.keydownHandle);\n    },\n    unbindEvent() {\n      document.removeEventListener(\"touchmove\", this.dragMove), document.removeEventListener(\"touchend\", this.dragEnd), document.removeEventListener(\"mousedown\", this.blurHandle), document.removeEventListener(\"mousemove\", this.dragMove), document.removeEventListener(\"mouseup\", this.dragEnd), document.removeEventListener(\"mouseleave\", this.dragEnd), document.removeEventListener(\"keydown\", this.keydownHandle);\n    },\n    setScale() {\n      const s = new y(\n        Math.floor(this.isHorizontal ? this.$refs.rail.offsetWidth : this.$refs.rail.offsetHeight)\n      );\n      this.zoom !== void 0 && s.multiply(this.zoom), s.divide(100), this.scale = s.toNumber();\n    },\n    initControl() {\n      this.control = new et({\n        value: this.modelValue,\n        data: this.sliderData,\n        enableCross: this.enableCross,\n        fixed: this.fixed,\n        max: this.max,\n        min: this.min,\n        interval: this.interval,\n        minRange: this.minRange,\n        maxRange: this.maxRange,\n        order: this.order,\n        marks: this.sliderMarks,\n        included: this.included,\n        process: this.process,\n        adsorb: this.adsorb,\n        dotOptions: this.dotOptions,\n        onError: this.emitError\n      }), this.syncValueByPos(), [\n        \"data\",\n        \"enableCross\",\n        \"fixed\",\n        \"max\",\n        \"min\",\n        \"interval\",\n        \"minRange\",\n        \"maxRange\",\n        \"order\",\n        \"marks\",\n        \"process\",\n        \"adsorb\",\n        \"included\",\n        \"dotOptions\"\n      ].forEach((s) => {\n        this.$watch(s, (t) => {\n          if (s === \"data\" && Array.isArray(this.control.data) && Array.isArray(t) && this.control.data.length === t.length && t.every((e, i) => e === this.control.data[i]))\n            return !1;\n          switch (s) {\n            case \"data\":\n            case \"dataLabel\":\n            case \"dataValue\":\n              this.control.data = this.sliderData;\n              break;\n            case \"mark\":\n              this.control.marks = this.sliderMarks;\n              break;\n            default:\n              this.control[s] = t;\n          }\n          [\"data\", \"max\", \"min\", \"interval\"].indexOf(s) > -1 && this.control.syncDotsPos();\n        });\n      });\n    },\n    syncValueByPos() {\n      const s = this.control.dotsValue;\n      if (this.isDiff(s, Array.isArray(this.modelValue) ? this.modelValue : [this.modelValue])) {\n        const t = s.length === 1 ? s[0] : [...s];\n        this.$emit(\"change\", t, this.focusDotIndex), this.$emit(\"update:modelValue\", t, this.focusDotIndex);\n      }\n    },\n    isDiff(s, t) {\n      return s.length !== t.length || s.some((e, i) => e !== t[i]);\n    },\n    emitError(s, t) {\n      this.silent || console.error(`[VueSlider error]: ${t}`), this.$emit(\"error\", s, t);\n    },\n    dragStartOnProcess(s) {\n      if (this.dragOnClick) {\n        this.setScale();\n        const t = this.getPosByEvent(s), e = this.control.getRecentDot(t);\n        if (this.dots[e].disabled)\n          return;\n        this.dragStart(e), this.control.setDotPos(t, this.focusDotIndex), this.lazy || this.syncValueByPos();\n      }\n    },\n    dragStart(s) {\n      this.focusDotIndex = s, this.setScale(), this.states.add(d.Drag), this.states.add(d.Focus), this.$emit(\"drag-start\", this.focusDotIndex);\n    },\n    dragMove(s) {\n      if (!this.states.has(d.Drag))\n        return !1;\n      s.preventDefault();\n      const t = this.getPosByEvent(s);\n      this.isCrossDot(t), this.control.setDotPos(t, this.focusDotIndex), this.lazy || this.syncValueByPos();\n      const e = this.control.dotsValue;\n      this.$emit(\"dragging\", e.length === 1 ? e[0] : [...e], this.focusDotIndex);\n    },\n    // If the component is sorted, then when the slider crosses, toggle the currently selected slider index\n    isCrossDot(s) {\n      if (this.canSort) {\n        const t = this.focusDotIndex;\n        let e = s;\n        if (e > this.dragRange[1] ? (e = this.dragRange[1], this.focusDotIndex++) : e < this.dragRange[0] && (e = this.dragRange[0], this.focusDotIndex--), t !== this.focusDotIndex) {\n          const i = this.$refs[`dot-${this.focusDotIndex}`];\n          i && i.$el && i.$el.focus(), this.control.setDotPos(e, t);\n        }\n      }\n    },\n    dragEnd(s) {\n      if (!this.states.has(d.Drag))\n        return !1;\n      setTimeout(() => {\n        this.lazy && this.syncValueByPos(), this.included && this.isNotSync ? this.control.setValue(this.modelValue) : this.control.syncDotsPos(), this.states.delete(d.Drag), (!this.useKeyboard || \"targetTouches\" in s) && this.states.delete(d.Focus), this.$emit(\"drag-end\", this.focusDotIndex);\n      });\n    },\n    blurHandle(s) {\n      if (!this.states.has(d.Focus) || !this.$refs.container || this.$refs.container.contains(s.target))\n        return !1;\n      this.states.delete(d.Focus);\n    },\n    clickHandle(s) {\n      if (!this.clickable || this.disabled)\n        return !1;\n      if (this.states.has(d.Drag))\n        return;\n      this.setScale();\n      const t = this.getPosByEvent(s);\n      this.setValueByPos(t);\n    },\n    focus(s = 0) {\n      this.states.add(d.Focus), this.focusDotIndex = s;\n    },\n    blur() {\n      this.states.delete(d.Focus);\n    },\n    getValue() {\n      const s = this.control.dotsValue;\n      return s.length === 1 ? s[0] : s;\n    },\n    getIndex() {\n      const s = this.control.dotsIndex;\n      return s.length === 1 ? s[0] : s;\n    },\n    setValue(s) {\n      this.control.setValue(Array.isArray(s) ? [...s] : [s]), this.syncValueByPos();\n    },\n    setIndex(s) {\n      const t = Array.isArray(s) ? s.map((e) => this.control.getValueByIndex(e)) : this.control.getValueByIndex(s);\n      this.setValue(t);\n    },\n    setValueByPos(s) {\n      const t = this.control.getRecentDot(s);\n      if (this.disabled || this.dots[t].disabled)\n        return !1;\n      this.focusDotIndex = t, this.control.setDotPos(s, t), this.syncValueByPos(), this.useKeyboard && this.states.add(d.Focus), setTimeout(() => {\n        this.included && this.isNotSync ? this.control.setValue(this.modelValue) : this.control.syncDotsPos();\n      });\n    },\n    keydownHandle(s) {\n      if (!this.useKeyboard || !this.states.has(d.Focus))\n        return !1;\n      const t = this.included && this.marks, e = Q(s, {\n        direction: this.direction,\n        max: t ? this.control.markList.length - 1 : this.control.total,\n        min: 0,\n        hook: this.keydownHook\n      });\n      if (e) {\n        s.preventDefault();\n        let i = -1, a = 0;\n        t ? (this.control.markList.some((r, n) => r.value === this.control.dotsValue[this.focusDotIndex] ? (i = e(n), !0) : !1), i < 0 ? i = 0 : i > this.control.markList.length - 1 && (i = this.control.markList.length - 1), a = this.control.markList[i].pos) : (i = e(\n          this.control.getIndexByValue(this.control.dotsValue[this.focusDotIndex])\n        ), a = this.control.parseValue(this.control.getValueByIndex(i))), this.isCrossDot(a), this.control.setDotPos(a, this.focusDotIndex), this.syncValueByPos();\n      }\n    },\n    getPosByEvent(s) {\n      return J(s, this.$refs.rail, this.isReverse)[this.isHorizontal ? \"x\" : \"y\"] / this.scale;\n    }\n  },\n  watch: {\n    modelValue: {\n      handler() {\n        this.control && !this.states.has(d.Drag) && this.isNotSync && (this.control.setValue(this.modelValue), this.syncValueByPos());\n      },\n      deep: !0\n    }\n  }\n}, rt = {\n  key: 0,\n  class: \"vue-slider-marks\"\n};\nfunction at(s, t, e, i, a, r) {\n  const n = L(\"VueSliderMark\"), S = L(\"VueSliderDot\");\n  return u(), f(\"div\", m({\n    ref: \"container\",\n    class: r.containerClasses,\n    style: r.containerStyles,\n    onClick: t[0] || (t[0] = (...o) => r.clickHandle && r.clickHandle(...o)),\n    onTouchstartPassive: t[1] || (t[1] = (...o) => r.dragStartOnProcess && r.dragStartOnProcess(...o)),\n    onMousedown: t[2] || (t[2] = (...o) => r.dragStartOnProcess && r.dragStartOnProcess(...o))\n  }, s.$attrs), [\n    D(\"div\", {\n      ref: \"rail\",\n      class: \"vue-slider-rail\",\n      style: p(e.railStyle)\n    }, [\n      (u(!0), f(P, null, R(r.processArray, (o, h) => c(s.$slots, \"process\", m({ ref_for: !0 }, { ...o }), () => [\n        (u(), f(\"div\", {\n          class: \"vue-slider-process\",\n          key: `process-${h}`,\n          style: p(o.style)\n        }, null, 4))\n      ])), 256)),\n      r.sliderMarks ? (u(), f(\"div\", rt, [\n        (u(!0), f(P, null, R(a.control.markList, (o, h) => c(s.$slots, \"mark\", m({ ref_for: !0 }, { ...o }), () => [\n          (u(), U(n, {\n            key: `mark-${h}`,\n            mark: o,\n            hideLabel: e.hideLabel,\n            style: p({\n              [r.isHorizontal ? \"height\" : \"width\"]: \"100%\",\n              [r.isHorizontal ? \"width\" : \"height\"]: r.tailSize,\n              [r.mainDirection]: `${o.pos}%`\n            }),\n            stepStyle: e.stepStyle,\n            stepActiveStyle: e.stepActiveStyle,\n            labelStyle: e.labelStyle,\n            labelActiveStyle: e.labelActiveStyle,\n            onPressLabel: (b) => e.clickable && r.setValueByPos(b)\n          }, {\n            step: A(() => [\n              c(s.$slots, \"step\", m({ ref_for: !0 }, { ...o }))\n            ]),\n            label: A(() => [\n              c(s.$slots, \"label\", m({ ref_for: !0 }, { ...o }))\n            ]),\n            _: 2\n          }, 1032, [\"mark\", \"hideLabel\", \"style\", \"stepStyle\", \"stepActiveStyle\", \"labelStyle\", \"labelActiveStyle\", \"onPressLabel\"]))\n        ])), 256))\n      ])) : B(\"\", !0),\n      (u(!0), f(P, null, R(r.dots, (o, h) => (u(), f(P, null, [\n        _(S, m({\n          ref_for: !0,\n          ref: `dot-${h}`,\n          value: o.value,\n          disabled: o.disabled,\n          focus: o.focus,\n          \"dot-style\": [\n            o.style,\n            o.disabled ? o.disabledStyle : null,\n            o.focus ? o.focusStyle : null\n          ],\n          tooltip: o.tooltip || e.tooltip,\n          \"tooltip-style\": [\n            e.tooltipStyle,\n            o.tooltipStyle,\n            o.disabled ? o.tooltipDisabledStyle : null,\n            o.focus ? o.tooltipFocusStyle : null\n          ],\n          \"tooltip-formatter\": Array.isArray(r.sliderTooltipFormatter) ? r.sliderTooltipFormatter[h] : r.sliderTooltipFormatter,\n          \"tooltip-placement\": r.tooltipDirections[h],\n          style: [\n            r.dotBaseStyle,\n            {\n              [r.mainDirection]: `${o.pos}%`,\n              transition: `${r.mainDirection} ${r.animateTime}s`\n            }\n          ],\n          \"onDrag-start\": () => r.dragStart(h),\n          role: \"slider\",\n          \"aria-valuenow\": o.value,\n          \"aria-valuemin\": this.min,\n          \"aria-valuemax\": this.max,\n          \"aria-orientation\": this.isHorizontal ? \"horizontal\" : \"vertical\",\n          tabindex: \"0\",\n          nativeOnFocus: () => !o.disabled && r.focus(h),\n          nativeOnBlur: () => r.blur()\n        }, { ...e.dotAttrs }), {\n          dot: A(() => [\n            c(s.$slots, \"dot\", m({ ref_for: !0 }, { ...o }))\n          ]),\n          tooltip: A(() => [\n            c(s.$slots, \"tooltip\", m({ ref_for: !0 }, { ...o }))\n          ]),\n          _: 2\n        }, 1040, [\"value\", \"disabled\", \"focus\", \"dot-style\", \"tooltip\", \"tooltip-style\", \"tooltip-formatter\", \"tooltip-placement\", \"style\", \"onDrag-start\", \"aria-valuenow\", \"aria-valuemin\", \"aria-valuemax\", \"aria-orientation\", \"nativeOnFocus\", \"nativeOnBlur\"]),\n        c(s.$slots, \"default\", m({ ref_for: !0 }, { value: r.getValue() }))\n      ], 64))), 256))\n    ], 4)\n  ], 16);\n}\nconst F = /* @__PURE__ */ w(it, [[\"render\", at]]);\nF.VueSliderMark = z;\nF.VueSliderDot = M;\nexport {\n  Y as ERROR_TYPE,\n  M as VueSliderDot,\n  z as VueSliderMark,\n  F as default\n};\n","<template>\n  <div\n    v-if=\"loading\"\n    role=\"status\"\n    class=\"animate-pulse bg-bgr-200\"\n    :style=\"{ height: `${RAIL_HEIGHT_REM}rem` }\"\n  ></div>\n\n  <VueSlider\n    v-else\n    v-model=\"model\"\n    lazy\n    :min\n    :max\n    :disabled\n    :tooltip=\"'none'\"\n    :dot-size=\"`${DOT_SIZE_REM}rem`\"\n    :rail-style=\"{\n      height: `${RAIL_HEIGHT_REM}rem`,\n      background: disabled ? colors.background200 : colors.border,\n    }\"\n    :process-style=\"{\n      background: disabled ? colors.border : colors.themeActive,\n    }\"\n  >\n    <template #dot>\n      <div\n        class=\"rounded-full bg-bgr-50 border border-thm-active cursor-pointer\"\n        :style=\"{ width: `${DOT_SIZE_REM}rem`, height: `${DOT_SIZE_REM}rem` }\"\n      ></div>\n    </template>\n  </VueSlider>\n</template>\n\n<script setup lang=\"ts\">\nimport VueSlider from 'vue-3-slider-component'\n\nconst DOT_SIZE_REM = 2\nconst RAIL_HEIGHT_REM = 0.25\n\nwithDefaults(\n  defineProps<{\n    min: number\n    max: number\n    disabled?: boolean\n    loading?: boolean\n  }>(),\n  {\n    disabled: false,\n  },\n)\n\nconst model = defineModel<NumInterval>({ required: true })\n\nconst colors = computed(() => useColors().colors as Colors)\n</script>\n","<template>\n  <div class=\"flex flex-col\">\n    <div class=\"flex items-center gap-5 mb-8 relative\">\n      <RedesignWebccCurrencyInput\n        v-model=\"from\"\n        :name=\"`${name}-min`\"\n        :currency\n        :min\n        :max\n        :default-value=\"min\"\n        :disabled\n        :loading\n      >\n        {{ $t(`${trPrefix}priceMin`) }}\n      </RedesignWebccCurrencyInput>\n\n      &mdash;\n\n      <RedesignWebccCurrencyInput\n        v-model=\"to\"\n        :name=\"`${name}-max`\"\n        :currency\n        :min\n        :max\n        :default-value=\"max\"\n        :disabled\n        :loading\n      >\n        {{ $t(`${trPrefix}priceMax`) }}\n      </RedesignWebccCurrencyInput>\n    </div>\n\n    <div class=\"w-full relative\">\n      <RedesignWebccHistogram\n        v-model=\"priceRange\"\n        class=\"w-full max-h-24\"\n        :items=\"options\"\n        :disabled\n        :loading\n        :loading-items=\"OPTIONS_SAMPLE\"\n      />\n\n      <RedesignWebccSlider\n        v-model=\"priceRange\"\n        class=\"w-full\"\n        :name\n        :min\n        :max\n        :disabled\n        :loading\n      />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = `www.components.views.search.newFilter.filterSections.price.`\n\ntype PriceOption = { value: PriceRangeValue; count?: number }\n\n/**\n * Simulate real 26 price options.\n */\nconst OPTIONS_SAMPLE: PriceOption[] = [\n  { value: [0, 200], count: 24 },\n  { value: [200, 400], count: 773 },\n  { value: [400, 600], count: 2898 },\n  { value: [600, 800], count: 3570 },\n  { value: [800, 1000], count: 3636 },\n  { value: [1000, 1200], count: 2785 },\n  { value: [1200, 1400], count: 1765 },\n  { value: [1400, 1600], count: 1125 },\n  { value: [1600, 1800], count: 719 },\n  { value: [1800, 2000], count: 509 },\n  { value: [2000, 2200], count: 316 },\n  { value: [2200, 2400], count: 244 },\n  { value: [2400, 2600], count: 208 },\n  { value: [2600, 2800], count: 148 },\n  { value: [2800, 3000], count: 112 },\n  { value: [3000, 3200], count: 82 },\n  { value: [3200, 3400], count: 77 },\n  { value: [3400, 3600], count: 49 },\n  { value: [3600, 3800], count: 40 },\n  { value: [3800, 4000], count: 33 },\n  { value: [4000, 4200], count: 29 },\n  { value: [4200, 4400], count: 28 },\n  { value: [4400, 4600], count: 16 },\n  { value: [4600, 4800], count: 18 },\n  { value: [4800, 5000], count: 6 },\n  { value: [5000, 0], count: 48 },\n]\nconst props = withDefaults(\n  defineProps<{\n    name: string\n    options: PriceOption[]\n    currency: string\n    disabled?: boolean\n    loading?: boolean\n  }>(),\n  {\n    disabled: false,\n  },\n)\n\nconst model = defineModel<PriceRangeValue>({ required: true })\n\nconst options = computed(() => props.options.toSorted(({ value }) => value[0]))\n\nconst min = computed(\n  () => (options.value.at(0) ?? OPTIONS_SAMPLE.at(0)!).value[0],\n)\n\nconst max = computed(\n  () => (options.value.at(-1) ?? OPTIONS_SAMPLE.at(-1)!).value[0],\n)\n\nconst priceRange = computed<PriceRangeValue>({\n  get() {\n    return [model.value[0] || min.value, model.value[1] || max.value]\n  },\n  set(value) {\n    model.value = [\n      value[0] <= min.value ? 0 : value[0],\n      value[1] >= max.value ? 0 : value[1],\n    ]\n  },\n})\n\nconst from = computed({\n  get: () => priceRange.value[0],\n  set: (value) => (priceRange.value = [value, priceRange.value[1]]),\n})\n\nconst to = computed({\n  get: () => priceRange.value[1],\n  set: (value) => (priceRange.value = [priceRange.value[0], value]),\n})\n</script>\n","import type { ModelRef } from 'vue'\n\nexport type Formdata = Record<\n  string,\n  string | number | boolean | object | any[] | undefined\n>\n\nexport const setKey = Symbol('set') as InjectionKey<\n  (field: string, value: any) => void\n>\nexport const resetKey = Symbol('reset') as InjectionKey<() => void>\nexport const submitKey = Symbol('submit') as InjectionKey<\n  () => Promise<boolean>\n>\nexport const formdataKey = Symbol('formdata') as InjectionKey<Formdata>\nexport const fieldErrorsKey = Symbol('fieldErrors') as InjectionKey<\n  Record<string, string[]>\n>\nexport const setFieldErrorsKey = Symbol('setFieldErrors') as InjectionKey<\n  (field: string, errors: string[]) => void\n>\nexport const registerKey = Symbol('register') as InjectionKey<\n  (name: string, formField: any) => void\n>\nexport const modelKey = Symbol('model') as InjectionKey<\n  ModelRef<unknown, string>\n>\n","<template>\n  <div class=\"flex\">\n    <input\n      :id=\"name\"\n      v-model=\"model\"\n      type=\"radio\"\n      :value=\"value\"\n      :checked=\"checked\"\n      class=\"w-5 h-5 mt-0.5 mr-2 border-1 border-brd hover:cursor-pointer\"\n      :class=\"{\n        'active:bg-thm-contrast checked:bg-thm-light hover:checked:bg-thm-light hover:active:bg-thm-light':\n          disabled,\n        'focus:ring-2 hover:bg-thm-light hover:border-thm-reduced': !disabled,\n        'border-cta-active': error,\n      }\"\n    />\n\n    <label class=\"flex hover:cursor-pointer\" :for=\"name\">\n      <div class=\"flex flex-col\">\n        <span\n          class=\"font-normal\"\n          :class=\"\n            disabled ? 'text-txt-weak' : 'text-txt-strongest hover:text-txt'\n          \"\n        >\n          <slot></slot>\n        </span>\n\n        <p v-if=\"hint\" class=\"text-sm font-normal text-txt-weak\">\n          {{ hint }}\n        </p>\n      </div>\n\n      <WebccIcon\n        v-if=\"error\"\n        class=\"h-5 w-5 mt-0.5 ml-2 text-cta-active\"\n        name=\"site/error-warning\"\n      />\n    </label>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { modelKey } from '../../../@ihgroup/form/InjectionKeys'\n\nconst props = defineProps<{\n  checked: boolean\n  value: RedesignWebccRadioOptionValue\n  disabled?: boolean\n  hint?: string\n  error?: boolean\n}>()\n\nconst model = inject(modelKey)\n\nconst name = computed(() => `radio-${props.value}`)\n</script>\n","<template>\n  <div v-bind=\"$attrs\" role=\"radiogroup\">\n    <slot></slot>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { modelKey } from '../../../@ihgroup/form/InjectionKeys'\n\nconst model = defineModel<RedesignWebccRadioOptionValue>({\n  required: true,\n})\n\nprovide(modelKey, model)\n</script>\n","<template>\n  <RedesignWebccRadioGroup\n    v-model=\"model\"\n    class=\"grid gap-4\"\n    :aria-busy=\"loading ? 'true' : undefined\"\n  >\n    <template v-if=\"loading\">\n      <RedesignWebccRadio\n        v-for=\"(_, idx) in Array.from({ length: loadingItems })\"\n        :key=\"idx\"\n        class=\"animate-pulse\"\n        :checked=\"false\"\n        :value=\"undefined\"\n        disabled\n      >\n        <slot name=\"item.loader\" :idx=\"idx\">\n          <div\n            class=\"inline-block h-[1em] rounded-full bg-gray-200 align-sub\"\n            :style=\"{ width: `${Math.random() * 100 + 40}px` }\"\n          >\n            &nbsp;\n          </div>\n        </slot>\n      </RedesignWebccRadio>\n    </template>\n\n    <template v-else>\n      <RedesignWebccRadio :checked=\"!model\" :value=\"undefined\">\n        Any\n      </RedesignWebccRadio>\n\n      <RedesignWebccRadio\n        v-for=\"option in options\"\n        :key=\"`${option.value}`\"\n        :checked=\"option.value === model\"\n        :value=\"option.value\"\n      >\n        <slot name=\"item\" :option=\"option\" />\n      </RedesignWebccRadio>\n    </template>\n  </RedesignWebccRadioGroup>\n</template>\n\n<script\n  setup\n  lang=\"ts\"\n  generic=\"\n    TValue extends string | number | undefined,\n    TOption extends BaseFilterOption<TValue>\n  \"\n>\nconst LOADING_COUNT = 4\n\ndefineSlots<{\n  item(props: { option: TOption }): any\n  ['item.loader'](props: { idx: number }): any\n}>()\n\nwithDefaults(\n  defineProps<{\n    loading?: boolean\n    loadingItems?: number\n    options?: TOption[]\n  }>(),\n  {\n    loadingItems: LOADING_COUNT,\n    options: () => [],\n  },\n)\n\nconst model = defineModel<TValue>({\n  required: true,\n  default: () => undefined,\n}) as Ref<TValue>\n</script>\n","<template>\n  <span class=\"inline-block\">\n    <span\n      class=\"inline-block w-full h-[1em] rounded-full bg-gray-200 align-sub\"\n    >\n      &nbsp;\n    </span>\n  </span>\n</template>\n","<template>\n  <div class=\"flex\">\n    <input\n      :id=\"name\"\n      v-model=\"internalModel\"\n      type=\"checkbox\"\n      :value=\"value\"\n      class=\"w-5 h-5 mt-0.5 mr-2 border-1 rounded-md border-brd hover:cursor-pointer\"\n      :class=\"{\n        'active:bg-thm-contrast checked:bg-thm-light hover:checked:bg-thm-light hover:active:bg-thm-light':\n          disabled,\n        'focus:ring-2 hover:bg-thm-light hover:border-thm-reduced': !disabled,\n        'border-cta-active': error,\n      }\"\n    />\n\n    <label class=\"flex hover:cursor-pointer\" :for=\"name\">\n      <div class=\"flex flex-col\">\n        <span\n          class=\"font-normal\"\n          :class=\"\n            disabled ? 'text-txt-weak' : 'text-txt-strongest hover:text-txt'\n          \"\n        >\n          <slot></slot>\n        </span>\n\n        <p v-if=\"hint\" class=\"text-sm font-normal text-txt-weak\">\n          {{ hint }}\n        </p>\n      </div>\n\n      <WebccIcon\n        v-if=\"error\"\n        class=\"h-5 w-5 mt-0.5 ml-2 text-cta-active\"\n        name=\"site/error-warning\"\n      />\n    </label>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n  defineProps<{\n    value: RedesignWebccCheckboxOptionValue\n    disabled?: boolean\n    hint?: string\n    error?: boolean\n    type?: 'single' | 'group'\n  }>(),\n  {\n    type: 'single',\n  },\n)\n\nconst model = defineModel({\n  required: true,\n})\n\nconst internalModel = computed({\n  get: () => {\n    if (props.type === 'group') {\n      if (Array.isArray(model.value)) {\n        return model.value\n      } else if (typeof model.value === 'string') {\n        return model.value.split(',')\n      }\n\n      return []\n    }\n\n    return model.value ?? false\n  },\n\n  set: (value) => {\n    model.value = value\n  },\n})\n\nconst name = computed(() => `checkbox-${props.value}`)\n</script>\n","import{computed as m,defineComponent as b,inject as I,onMounted as P,onUnmounted as h,provide as R,ref as d,watchEffect as w}from\"vue\";import{useId as E}from'../../hooks/use-id.js';import{useResolveButtonType as H}from'../../hooks/use-resolve-button-type.js';import{State as y,useOpenClosed as L,useOpenClosedProvider as j}from'../../internal/open-closed.js';import{Keys as f}from'../../keyboard.js';import{dom as p}from'../../utils/dom.js';import{match as x}from'../../utils/match.js';import{Features as B,render as g}from'../../utils/render.js';var $=(o=>(o[o.Open=0]=\"Open\",o[o.Closed=1]=\"Closed\",o))($||{});let T=Symbol(\"DisclosureContext\");function O(t){let r=I(T,null);if(r===null){let o=new Error(`<${t} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,O),o}return r}let k=Symbol(\"DisclosurePanelContext\");function U(){return I(k,null)}let N=b({name:\"Disclosure\",props:{as:{type:[Object,String],default:\"template\"},defaultOpen:{type:[Boolean],default:!1}},setup(t,{slots:r,attrs:o}){let s=d(t.defaultOpen?0:1),e=d(null),i=d(null),n={buttonId:d(`headlessui-disclosure-button-${E()}`),panelId:d(`headlessui-disclosure-panel-${E()}`),disclosureState:s,panel:e,button:i,toggleDisclosure(){s.value=x(s.value,{[0]:1,[1]:0})},closeDisclosure(){s.value!==1&&(s.value=1)},close(l){n.closeDisclosure();let a=(()=>l?l instanceof HTMLElement?l:l.value instanceof HTMLElement?p(l):p(n.button):p(n.button))();a==null||a.focus()}};return R(T,n),j(m(()=>x(s.value,{[0]:y.Open,[1]:y.Closed}))),()=>{let{defaultOpen:l,...a}=t,c={open:s.value===0,close:n.close};return g({theirProps:a,ourProps:{},slot:c,slots:r,attrs:o,name:\"Disclosure\"})}}}),Q=b({name:\"DisclosureButton\",props:{as:{type:[Object,String],default:\"button\"},disabled:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(t,{attrs:r,slots:o,expose:s}){let e=O(\"DisclosureButton\"),i=U(),n=m(()=>i===null?!1:i.value===e.panelId.value);P(()=>{n.value||t.id!==null&&(e.buttonId.value=t.id)}),h(()=>{n.value||(e.buttonId.value=null)});let l=d(null);s({el:l,$el:l}),n.value||w(()=>{e.button.value=l.value});let a=H(m(()=>({as:t.as,type:r.type})),l);function c(){var u;t.disabled||(n.value?(e.toggleDisclosure(),(u=p(e.button))==null||u.focus()):e.toggleDisclosure())}function D(u){var S;if(!t.disabled)if(n.value)switch(u.key){case f.Space:case f.Enter:u.preventDefault(),u.stopPropagation(),e.toggleDisclosure(),(S=p(e.button))==null||S.focus();break}else switch(u.key){case f.Space:case f.Enter:u.preventDefault(),u.stopPropagation(),e.toggleDisclosure();break}}function v(u){switch(u.key){case f.Space:u.preventDefault();break}}return()=>{var C;let u={open:e.disclosureState.value===0},{id:S,...K}=t,M=n.value?{ref:l,type:a.value,onClick:c,onKeydown:D}:{id:(C=e.buttonId.value)!=null?C:S,ref:l,type:a.value,\"aria-expanded\":e.disclosureState.value===0,\"aria-controls\":e.disclosureState.value===0||p(e.panel)?e.panelId.value:void 0,disabled:t.disabled?!0:void 0,onClick:c,onKeydown:D,onKeyup:v};return g({ourProps:M,theirProps:K,slot:u,attrs:r,slots:o,name:\"DisclosureButton\"})}}}),V=b({name:\"DisclosurePanel\",props:{as:{type:[Object,String],default:\"div\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null}},setup(t,{attrs:r,slots:o,expose:s}){let e=O(\"DisclosurePanel\");P(()=>{t.id!==null&&(e.panelId.value=t.id)}),h(()=>{e.panelId.value=null}),s({el:e.panel,$el:e.panel}),R(k,e.panelId);let i=L(),n=m(()=>i!==null?(i.value&y.Open)===y.Open:e.disclosureState.value===0);return()=>{var v;let l={open:e.disclosureState.value===0,close:e.close},{id:a,...c}=t,D={id:(v=e.panelId.value)!=null?v:a,ref:e.panel};return g({ourProps:D,theirProps:c,slot:l,attrs:r,slots:o,features:B.RenderStrategy|B.Static,visible:n.value,name:\"DisclosurePanel\"})}}});export{N as Disclosure,Q as DisclosureButton,V as DisclosurePanel};\n","<template>\n  <HeadlessDisclosure v-slot=\"{ open }\" as=\"div\">\n    <Transition name=\"slide\">\n      <HeadlessDisclosurePanel :class=\"$attrs.class\">\n        <slot></slot>\n      </HeadlessDisclosurePanel>\n    </Transition>\n\n    <HeadlessDisclosureButton as=\"template\">\n      <button class=\"text-left underline font-semibold flex gap-1 items-center\">\n        {{ open ? 'View less' : 'View more' }}\n\n        <WebccIcon\n          :name=\"`site/${open ? 'chevron-up' : 'chevron-down'}`\"\n          class=\"h-4 w-4\"\n        />\n      </button>\n    </HeadlessDisclosureButton>\n  </HeadlessDisclosure>\n</template>\n","<template>\n  <div v-bind=\"$attrs\" role=\"group\">\n    <slot></slot>\n  </div>\n</template>\n","<template>\n  <RedesignWebccCheckboxGroup\n    class=\"grid gap-4\"\n    :class=\"{ 'animate-pulse': loading }\"\n    :aria-busy=\"loading ? 'true' : undefined\"\n  >\n    <template v-if=\"loading\">\n      <RedesignWebccCheckbox\n        v-for=\"(_, idx) in Array.from({ length: loadingItems })\"\n        :key=\"`item-${idx}`\"\n        :type=\"'group'\"\n        disabled\n      >\n        <slot name=\"item.loader\" :idx=\"idx\">\n          <RedesignTextLoading\n            :style=\"{ width: `${Math.random() * 100 + 40}px` }\"\n          />\n        </slot>\n      </RedesignWebccCheckbox>\n    </template>\n\n    <template v-else>\n      <RedesignWebccCheckbox\n        v-for=\"option in options.slice(\n          0,\n          defaultVisibleCount || options.length,\n        )\"\n        :key=\"option.value\"\n        v-model=\"model\"\n        :value=\"option.value\"\n        :type=\"'group'\"\n      >\n        <slot name=\"item\" :option=\"option\" />\n      </RedesignWebccCheckbox>\n\n      <template\n        v-if=\"defaultVisibleCount && options.length > defaultVisibleCount\"\n      >\n        <RedesignWebccDisclosure class=\"grid gap-4\">\n          <RedesignWebccCheckbox\n            v-for=\"option in options.slice(defaultVisibleCount)\"\n            :key=\"option.value\"\n            v-model=\"model\"\n            :value=\"option.value\"\n            :type=\"'group'\"\n          >\n            <slot name=\"item\" :option=\"option\" />\n          </RedesignWebccCheckbox>\n        </RedesignWebccDisclosure>\n      </template>\n    </template>\n  </RedesignWebccCheckboxGroup>\n</template>\n<script\n  setup\n  lang=\"ts\"\n  generic=\"\n    TValue extends string | number | undefined,\n    TOption extends BaseFilterOption<TValue>\n  \"\n>\nconst LOADING_COUNT = 4\n\ndefineSlots<{\n  item(props: { option: TOption }): any\n  ['item.loader'](props: { idx: number }): any\n}>()\n\nwithDefaults(\n  defineProps<{\n    loading?: boolean\n    loadingItems?: number\n    options?: TOption[]\n    defaultVisibleCount?: number\n  }>(),\n  {\n    loadingItems: LOADING_COUNT,\n    options: () => [],\n    defaultVisibleCount: 0,\n  },\n)\nconst model = defineModel<TValue[]>({\n  required: true,\n  default: () => [],\n}) as Ref<TValue[]>\n</script>\n","<template>\n  <div v-if=\"stars.length\" class=\"flex gap-0.5 items-center\">\n    <WebccIcon\n      v-for=\"(star, index) in stars\"\n      :key=\"index\"\n      :name=\"star ? 'site/star' : 'site/star-empty'\"\n      class=\"h-4 w-4\"\n    />\n\n    <span v-if=\"$slots.default\" class=\"ml-2\">\n      <slot></slot>\n    </span>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst STARS_MAX = 5\n\nconst props = withDefaults(\n  defineProps<{\n    stars: number\n    full?: boolean\n    max?: number\n  }>(),\n  {\n    full: false,\n    max: STARS_MAX,\n  },\n)\n\nconst stars = computed<boolean[]>(() => [\n  ...Array(props.stars).fill(true),\n  ...(props.full ? Array(props.max - props.stars).fill(false) : []),\n])\n</script>\n","<template>\n  <aside class=\"w-[380px]\" aria-label=\"Sidebar\">\n    <div class=\"overflow-y-auto bg-white border-gray-200 border rounded-md\">\n      <RedesignFilterFieldset\n        v-if=\"selected?.length !== 0\"\n        :label=\"$t(`${trPrefixFacets}selected`)\"\n      >\n        <RedesignFilterSelected :model-value=\"model\" />\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset :label=\"$t(`${trPrefixFacets}rooms`)\">\n        <RedesignStepperInput\n          v-model=\"model.bedrooms\"\n          name=\"bedrooms\"\n          :options=\"facets.bedrooms.options\"\n          :loading=\"facets.bedrooms.loading\"\n        >\n          {{ $t(`${trPrefixSearch}bedrooms`) }}\n        </RedesignStepperInput>\n\n        <RedesignStepperInput\n          v-model=\"model.bathrooms\"\n          name=\"bathrooms\"\n          :options=\"facets.bathrooms.options\"\n          :loading=\"facets.bathrooms.loading\"\n        >\n          {{ $t(`${trPrefixSearch}bathrooms`) }}\n        </RedesignStepperInput>\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset :label=\"$t(`${trPrefixFacets}priceRange`)\">\n        <RedesignWebccPriceRangePicker\n          v-model=\"model.priceRange\"\n          :currency\n          name=\"price\"\n          :options=\"facets.priceRange.options\"\n          :loading=\"facets.priceRange.loading\"\n        />\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset :label=\"$t(`${trPrefixFacets}accommodationType`)\">\n        <RedesignSingleSelectInput\n          v-model=\"model.accommodationType\"\n          :options=\"facets.accommodationType.options\"\n          :loading=\"facets.accommodationType.loading\"\n          :loading-items=\"3\"\n        >\n          <template #item=\"{ option }\">\n            {{\n              $t(\n                `${trPrefixSearch}accommodationType.${option.value}` as TranslationKey,\n              )\n            }}\n            ({{ option.count }})\n          </template>\n        </RedesignSingleSelectInput>\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset\n        :label=\"$t(`${trPrefixFacets}propertyType`)\"\n        class=\"flex flex-col\"\n      >\n        <RedesignMultiSelectInput\n          v-model=\"model.propertyType\"\n          :options=\"facets.propertyType.options\"\n          :loading=\"facets.propertyType.loading\"\n          :loading-items=\"4\"\n        >\n          <template #item=\"{ option }\">\n            {{\n              $t(\n                `${trPrefixSearch}propertyType.${option.value}` as TranslationKey,\n              )\n            }}\n            ({{ option.count }})\n          </template>\n        </RedesignMultiSelectInput>\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset\n        :label=\"$t(`${trPrefixFacets}starRating`)\"\n        class=\"flex flex-col\"\n      >\n        <RedesignSingleSelectInput\n          v-model=\"model.starRating\"\n          :options=\"facets.starRating.options\"\n          :loading=\"facets.starRating.loading\"\n          :loading-items=\"4\"\n        >\n          <template #item=\"{ option }\">\n            <RedesignWebccStars :stars=\"option.value\" full>\n              {{ option.value + (option.value < 5 ? '+' : '') }}\n              ({{ option.count }})\n            </RedesignWebccStars>\n          </template>\n        </RedesignSingleSelectInput>\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset\n        :label=\"$t(`${trPrefixFacets}features`)\"\n        class=\"flex flex-col\"\n      >\n        <RedesignMultiSelectInput\n          v-model=\"model.features\"\n          :options=\"facets.features.options\"\n          :loading=\"facets.features.loading\"\n          :loading-items=\"5\"\n          :default-visible-count=\"5\"\n        >\n          <template #item=\"{ option }\">\n            {{\n              $t(`${trPrefixSearch}features.${option.value}` as TranslationKey)\n            }}\n            ({{ option.count }})\n          </template>\n        </RedesignMultiSelectInput>\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset :label=\"$t(`${trPrefixFacets}distances`)\">\n        <h5 class=\"mb-4 text-base font-medium\">\n          {{ $t(`${trPrefixFacets}sea`) }}\n        </h5>\n\n        <RedesignSingleSelectInput\n          v-model=\"model.distances.sea\"\n          :options=\"facets.sea.options\"\n          :loading=\"facets.sea.loading\"\n          :loading-items=\"5\"\n        >\n          <template #item=\"{ option }\">\n            {{\n              $t(`${trPrefixSearch}distances.${option.value}` as TranslationKey)\n            }}\n            ({{ option.count }})\n          </template>\n        </RedesignSingleSelectInput>\n\n        <RedesignWebccDisclosure class=\"mt-4 grid gap-4\">\n          <h5 class=\"text-base font-medium\">\n            {{ $t(`${trPrefixFacets}lake`) }}\n          </h5>\n\n          <RedesignSingleSelectInput\n            v-model=\"model.distances.lake\"\n            :options=\"facets.lake.options\"\n            :loading=\"facets.lake.loading\"\n            :loading-items=\"5\"\n          >\n            <template #item=\"{ option }\">\n              {{\n                $t(\n                  `${trPrefixSearch}distances.${option.value}` as TranslationKey,\n                )\n              }}\n              ({{ option.count }})\n            </template>\n          </RedesignSingleSelectInput>\n\n          <h5 class=\"mt-4 text-base font-medium\">\n            {{ $t(`${trPrefixFacets}ski`) }}\n          </h5>\n\n          <RedesignSingleSelectInput\n            v-model=\"model.distances.ski\"\n            :options=\"facets.ski.options\"\n            :loading=\"facets.ski.loading\"\n            :loading-items=\"5\"\n          >\n            <template #item=\"{ option }\">\n              {{\n                $t(\n                  `${trPrefixSearch}distances.${option.value}` as TranslationKey,\n                )\n              }}\n              ({{ option.count }})\n            </template>\n          </RedesignSingleSelectInput>\n\n          <h5 class=\"mt-4 text-base font-medium\">\n            {{ $t(`${trPrefixFacets}center`) }}\n          </h5>\n\n          <RedesignSingleSelectInput\n            v-model=\"model.distances.center\"\n            :options=\"facets.center.options\"\n            :loading=\"facets.center.loading\"\n            :loading-items=\"5\"\n          >\n            <template #item=\"{ option }\">\n              {{\n                $t(\n                  `${trPrefixSearch}distances.${option.value}` as TranslationKey,\n                )\n              }}\n              ({{ option.count }})\n            </template>\n          </RedesignSingleSelectInput>\n        </RedesignWebccDisclosure>\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset :label=\"$t(`${trPrefixFacets}offers`)\">\n        <RedesignSingleSelectInput\n          v-model=\"model.offers\"\n          :options=\"facets.offers.options\"\n          :loading=\"facets.offers.loading\"\n          :loading-items=\"5\"\n        >\n          <template #item=\"{ option }\">\n            {{\n              $t(`${trPrefixSearch}offers.${option.value}` as TranslationKey)\n            }}\n            ({{ option.count }})\n          </template>\n        </RedesignSingleSelectInput>\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset :label=\"$t(`${trPrefixFacets}holidayType`)\">\n        <RedesignSingleSelectInput\n          v-model=\"model.holidayType\"\n          :options=\"facets.holidayType.options\"\n          :loading=\"facets.holidayType.loading\"\n          :loading-items=\"5\"\n        >\n          <template #item=\"{ option }\">\n            {{\n              $t(\n                `${trPrefixSearch}holidayType.${option.value}` as TranslationKey,\n              )\n            }}\n            ({{ option.count }})\n          </template>\n        </RedesignSingleSelectInput>\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset\n        :label=\"$t(`${trPrefixFacets}special`)\"\n        class=\"flex flex-col\"\n      >\n        <RedesignMultiSelectInput\n          v-model=\"model.special\"\n          :options=\"facets.special.options\"\n          :loading=\"facets.special.loading\"\n          :loading-items=\"5\"\n          :default-visible-count=\"5\"\n        >\n          <template #item=\"{ option }\">\n            {{\n              $t(`${trPrefixSearch}special.${option.value}` as TranslationKey)\n            }}\n            ({{ option.count }})\n          </template>\n        </RedesignMultiSelectInput>\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset :label=\"$t(`${trPrefixFacets}pool`)\">\n        <RedesignSingleSelectInput\n          v-model=\"model.pool\"\n          :options=\"facets.pool.options\"\n          :loading=\"facets.pool.loading\"\n          :loading-items=\"4\"\n        >\n          <template #item=\"{ option }\">\n            {{ $t(`${trPrefixSearch}pool.${option.value}` as TranslationKey) }}\n            ({{ option.count }})\n          </template>\n        </RedesignSingleSelectInput>\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset\n        :label=\"$t(`${trPrefixFacets}fishing`)\"\n        class=\"flex flex-col\"\n      >\n        <RedesignMultiSelectInput\n          v-model=\"model.fishing\"\n          :options=\"facets.fishing.options\"\n          :loading=\"facets.fishing.loading\"\n          :loading-items=\"3\"\n        >\n          <template #item=\"{ option }\">\n            {{\n              $t(`${trPrefixSearch}fishing.${option.value}` as TranslationKey)\n            }}\n            ({{ option.count }})\n          </template>\n        </RedesignMultiSelectInput>\n      </RedesignFilterFieldset>\n\n      <RedesignFilterFieldset\n        :label=\"$t(`${trPrefixFacets}activities`)\"\n        class=\"flex flex-col\"\n      >\n        <RedesignMultiSelectInput\n          v-model=\"model.activities\"\n          :options=\"facets.activities.options\"\n          :loading=\"facets.activities.loading\"\n          :loading-items=\"5\"\n          :default-visible-count=\"6\"\n          class=\"grid gap-4\"\n        >\n          <template #item=\"{ option }\">\n            {{\n              $t(\n                `${trPrefixSearch}activities.${option.value}` as TranslationKey,\n              )\n            }}\n            ({{ option.count }})\n          </template>\n        </RedesignMultiSelectInput>\n      </RedesignFilterFieldset>\n    </div>\n  </aside>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefixFacets = 'www.facets.'\nconst trPrefixSearch = 'www.search.'\n\nconst model = defineModel<SearchState>({ required: true })\n\nconst facets = useFacets(model)\nconst { selected } = useSelectedSearchStateValues(model)\nconst { currency } = storeToRefs(useConfdata())\n</script>\n\n<style scoped></style>\n","<!--\n# Headings\n\nLevel: numerisch: 1-7 bestimmt das HTML-Tag, das für die Überschrift verwendet wird\nwenn, dann wird level default 4\n\nSize: kann numerisch oder über Tailwind-Größe gesetzt werden:\n1 / 3xl 1.875rem z.B. Startseite\n2 / 2xl 1.5rem   z.B. Why2 oder USPCorona\n3 / xl  1.25rem  z.B. Überschriften im Footer\n4 / lg  1.125rem z.B.\n5 / md (base) 1rem\n6 / sm  0.875rem\n7 / xs  0.75rem\n\nWenn size undefined -> size wird aus level (1-7) übernommen\n-->\n\n<template>\n  <component :is=\"component\" :id=\"id\" :class=\"classes\">\n    <WebccIcon\n      v-if=\"icon\"\n      :name=\"icon\"\n      class=\"mr-1 h-6 w-6 fill-current\"\n      filled\n    />\n    <slot>{{ title }}</slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nexport type Size = '3xl' | '2xl' | 'xl' | 'lg' | 'base' | 'sm' | 'xs' | ''\n\ninterface Props {\n  bold?: boolean\n  title?: string\n  level?: number\n  size?: Size\n  tag?: string\n  space?: string\n  color?: string\n  icon?: string\n  id?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  title: '',\n  level: 4,\n  size: '',\n  tag: '',\n  space: '',\n  color: 'thm',\n  icon: '',\n  id: '',\n})\n\nconst component = computed(() => {\n  if (!props.tag) {\n    return `h${props.level}`\n  }\n  const resolvedComponent = resolveComponent(props.tag)\n  return typeof resolvedComponent === 'string'\n    ? `h${props.level}`\n    : resolvedComponent\n})\n\nconst sizing = computed(() => {\n  const { size } = props\n  if (!size) {\n    return ['3xl', '2xl', 'xl', 'lg', 'base', 'sm', 'xs', ''][props.level - 1]\n  }\n  return size\n})\n\nconst spacing = computed(() => {\n  if (props.space) {\n    return props.space\n  }\n  switch (sizing.value) {\n    case '3xl':\n      return 'mt-8 mb-4 md:mt-16 md:mb-8'\n    case '2xl':\n      return 'mt-6 mb-3 md:mt-12 md:mb-6'\n    case 'xl':\n      return 'mt-4 mb-2 md:mt-8 md:mb-4'\n    case 'lg':\n      return 'mt-2 mb-1 md:mt-4 md:mb-2'\n    case 'base':\n      return 'mt-1 mb-0.5 md:mt-2 md:mb-1'\n    case 'sm':\n      return 'mt-0.5 mb-0 md:mt-1 md:mb-0.5'\n    case 'xs':\n      return ''\n  }\n  return ''\n})\n\nconst fonts = computed(() => {\n  switch (sizing.value) {\n    case '3xl':\n      return 'text-3xl'\n    case '2xl':\n      return 'text-2xl'\n    case 'xl':\n      return 'text-xl '\n    case 'lg':\n      return 'text-lg '\n    case 'base':\n      return 'text-base '\n    case 'sm':\n      return 'text-sm'\n    case 'xs':\n      return 'text-xs'\n    default:\n      return ''\n  }\n})\n\nconst classes = computed(() => {\n  let color = 'text-thm'\n  switch (props.color) {\n    case 'cta':\n      color = 'text-cta'\n      break\n    case 'hlt':\n      color = 'text-hlt'\n      break\n    case 'txt':\n      color = 'text-txt'\n      break\n    case 'white':\n      color = 'text-txt-contrast'\n      break\n  }\n  let classes = `flex flex-row items-center ${fonts.value} ${color} ${spacing.value}`\n\n  if (props.bold) {\n    classes += ' font-semibold'\n  }\n  return classes\n})\n</script>\n","<template>\n  <WebccHeading v-if=\"titles.length\" :level=\"1\" color=\"txt\" size=\"xl\">\n    <div class=\"flex flex-col items-start justify-center\">\n      <p v-if=\"titles[0]\">{{ titles[0] }}</p>\n      <p v-if=\"titles[1]\" class=\"text-lg uppercase\">{{ titles[1] }}</p>\n      <p v-if=\"titles[2]\" class=\"text-base\">{{ titles[2] }}</p>\n    </div>\n  </WebccHeading>\n</template>\n\n<script setup lang=\"ts\">\nconst params = useParams()\nconst confData = useConfdata()\n\nconst props = defineProps<{\n  total: number\n}>()\n\nconst titles = computed(() =>\n  params.all.heading\n    ? [params.all.heading] //\n    : (confData.additionalBody as SearchPageBody).h1.map((line) =>\n        replacePlaceholders(line, { amount: props.total }),\n      ),\n)\n</script>\n","<template>\n  <WebccHeading\n    v-if=\"total\"\n    :title=\"title\"\n    :level=\"2\"\n    size=\"base\"\n    color=\"txt\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nconst confData = useConfdata()\n\nconst props = defineProps<{\n  total: number\n}>()\n\nconst title = computed(() =>\n  replacePlaceholders((confData.additionalBody as SearchPageBody).h2, {\n    amount: props.total,\n    destination: getDestinationName(confData.destination),\n  }),\n)\n</script>\n","import{computed as v,defineComponent as x,inject as L,onMounted as k,onUnmounted as C,provide as j,ref as y,unref as h}from\"vue\";import{useId as w}from'../../hooks/use-id.js';import{render as R}from'../../utils/render.js';let a=Symbol(\"LabelContext\");function d(){let t=L(a,null);if(t===null){let n=new Error(\"You used a <Label /> component, but it is not inside a parent.\");throw Error.captureStackTrace&&Error.captureStackTrace(n,d),n}return t}function E({slot:t={},name:n=\"Label\",props:i={}}={}){let e=y([]);function o(r){return e.value.push(r),()=>{let l=e.value.indexOf(r);l!==-1&&e.value.splice(l,1)}}return j(a,{register:o,slot:t,name:n,props:i}),v(()=>e.value.length>0?e.value.join(\" \"):void 0)}let K=x({name:\"Label\",props:{as:{type:[Object,String],default:\"label\"},passive:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(t,{slots:n,attrs:i}){var r;let e=(r=t.id)!=null?r:`headlessui-label-${w()}`,o=d();return k(()=>C(o.register(e))),()=>{let{name:l=\"Label\",slot:p={},props:c={}}=o,{passive:f,...s}=t,u={...Object.entries(c).reduce((b,[g,m])=>Object.assign(b,{[g]:h(m)}),{}),id:e};return f&&(delete u.onClick,delete u.htmlFor,delete s.onClick),R({ourProps:u,theirProps:s,slot:p,attrs:i,slots:n,name:l})}}});export{K as Label,E as useLabels};\n","import{computed as o,defineComponent as F,Fragment as _,h as C,inject as $,onMounted as D,onUnmounted as U,provide as W,ref as k,toRaw as y,watch as J}from\"vue\";import{useControllable as q}from'../../hooks/use-controllable.js';import{useId as x}from'../../hooks/use-id.js';import{useTreeWalker as Q}from'../../hooks/use-tree-walker.js';import{Features as X,Hidden as Y}from'../../internal/hidden.js';import{Keys as h}from'../../keyboard.js';import{dom as E}from'../../utils/dom.js';import{Focus as w,focusIn as I,FocusResult as P,sortByDomNode as Z}from'../../utils/focus-management.js';import{attemptSubmit as z,objectToFormEntries as ee}from'../../utils/form.js';import{getOwnerDocument as A}from'../../utils/owner.js';import{compact as te,omit as ae,render as B}from'../../utils/render.js';import{Description as ne,useDescriptions as V}from'../description/description.js';import{Label as re,useLabels as j}from'../label/label.js';function le(t,m){return t===m}let H=Symbol(\"RadioGroupContext\");function N(t){let m=$(H,null);if(m===null){let u=new Error(`<${t} /> is missing a parent <RadioGroup /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(u,N),u}return m}let he=F({name:\"RadioGroup\",emits:{\"update:modelValue\":t=>!0},props:{as:{type:[Object,String],default:\"div\"},disabled:{type:[Boolean],default:!1},by:{type:[String,Function],default:()=>le},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{type:[Object,String,Number,Boolean],default:void 0},form:{type:String,optional:!0},name:{type:String,optional:!0},id:{type:String,default:null}},inheritAttrs:!1,setup(t,{emit:m,attrs:u,slots:S,expose:g}){var O;let d=(O=t.id)!=null?O:`headlessui-radiogroup-${x()}`,p=k(null),l=k([]),R=j({name:\"RadioGroupLabel\"}),T=V({name:\"RadioGroupDescription\"});g({el:p,$el:p});let[f,G]=q(o(()=>t.modelValue),e=>m(\"update:modelValue\",e),o(()=>t.defaultValue)),s={options:l,value:f,disabled:o(()=>t.disabled),firstOption:o(()=>l.value.find(e=>!e.propsRef.disabled)),containsCheckedOption:o(()=>l.value.some(e=>s.compare(y(e.propsRef.value),y(t.modelValue)))),compare(e,a){if(typeof t.by==\"string\"){let n=t.by;return(e==null?void 0:e[n])===(a==null?void 0:a[n])}return t.by(e,a)},change(e){var n;if(t.disabled||s.compare(y(f.value),y(e)))return!1;let a=(n=l.value.find(i=>s.compare(y(i.propsRef.value),y(e))))==null?void 0:n.propsRef;return a!=null&&a.disabled?!1:(G(e),!0)},registerOption(e){l.value.push(e),l.value=Z(l.value,a=>a.element)},unregisterOption(e){let a=l.value.findIndex(n=>n.id===e);a!==-1&&l.value.splice(a,1)}};W(H,s),Q({container:o(()=>E(p)),accept(e){return e.getAttribute(\"role\")===\"radio\"?NodeFilter.FILTER_REJECT:e.hasAttribute(\"role\")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(e){e.setAttribute(\"role\",\"none\")}});function v(e){if(!p.value||!p.value.contains(e.target))return;let a=l.value.filter(n=>n.propsRef.disabled===!1).map(n=>n.element);switch(e.key){case h.Enter:z(e.currentTarget);break;case h.ArrowLeft:case h.ArrowUp:if(e.preventDefault(),e.stopPropagation(),I(a,w.Previous|w.WrapAround)===P.Success){let i=l.value.find(r=>{var c;return r.element===((c=A(p))==null?void 0:c.activeElement)});i&&s.change(i.propsRef.value)}break;case h.ArrowRight:case h.ArrowDown:if(e.preventDefault(),e.stopPropagation(),I(a,w.Next|w.WrapAround)===P.Success){let i=l.value.find(r=>{var c;return r.element===((c=A(r.element))==null?void 0:c.activeElement)});i&&s.change(i.propsRef.value)}break;case h.Space:{e.preventDefault(),e.stopPropagation();let n=l.value.find(i=>{var r;return i.element===((r=A(i.element))==null?void 0:r.activeElement)});n&&s.change(n.propsRef.value)}break}}let b=o(()=>{var e;return(e=E(p))==null?void 0:e.closest(\"form\")});return D(()=>{J([b],()=>{if(!b.value||t.defaultValue===void 0)return;function e(){s.change(t.defaultValue)}return b.value.addEventListener(\"reset\",e),()=>{var a;(a=b.value)==null||a.removeEventListener(\"reset\",e)}},{immediate:!0})}),()=>{let{disabled:e,name:a,form:n,...i}=t,r={ref:p,id:d,role:\"radiogroup\",\"aria-labelledby\":R.value,\"aria-describedby\":T.value,onKeydown:v};return C(_,[...a!=null&&f.value!=null?ee({[a]:f.value}).map(([c,L])=>C(Y,te({features:X.Hidden,key:c,as:\"input\",type:\"hidden\",hidden:!0,readOnly:!0,form:n,disabled:e,name:c,value:L}))):[],B({ourProps:r,theirProps:{...u,...ae(i,[\"modelValue\",\"defaultValue\",\"by\"])},slot:{},attrs:u,slots:S,name:\"RadioGroup\"})])}}});var ie=(u=>(u[u.Empty=1]=\"Empty\",u[u.Active=2]=\"Active\",u))(ie||{});let Oe=F({name:\"RadioGroupOption\",props:{as:{type:[Object,String],default:\"div\"},value:{type:[Object,String,Number,Boolean]},disabled:{type:Boolean,default:!1},id:{type:String,default:null}},setup(t,{attrs:m,slots:u,expose:S}){var i;let g=(i=t.id)!=null?i:`headlessui-radiogroup-option-${x()}`,d=N(\"RadioGroupOption\"),p=j({name:\"RadioGroupLabel\"}),l=V({name:\"RadioGroupDescription\"}),R=k(null),T=o(()=>({value:t.value,disabled:t.disabled})),f=k(1);S({el:R,$el:R});let G=o(()=>E(R));D(()=>d.registerOption({id:g,element:G,propsRef:T})),U(()=>d.unregisterOption(g));let s=o(()=>{var r;return((r=d.firstOption.value)==null?void 0:r.id)===g}),v=o(()=>d.disabled.value||t.disabled),b=o(()=>d.compare(y(d.value.value),y(t.value))),O=o(()=>v.value?-1:b.value||!d.containsCheckedOption.value&&s.value?0:-1);function e(){var r;d.change(t.value)&&(f.value|=2,(r=E(R))==null||r.focus())}function a(){f.value|=2}function n(){f.value&=-3}return()=>{let{value:r,disabled:c,...L}=t,K={checked:b.value,disabled:v.value,active:Boolean(f.value&2)},M={id:g,ref:R,role:\"radio\",\"aria-checked\":b.value?\"true\":\"false\",\"aria-labelledby\":p.value,\"aria-describedby\":l.value,\"aria-disabled\":v.value?!0:void 0,tabIndex:O.value,onClick:v.value?void 0:e,onFocus:v.value?void 0:a,onBlur:v.value?void 0:n};return B({ourProps:M,theirProps:L,slot:K,attrs:m,slots:u,name:\"RadioGroupOption\"})}}}),ke=re,Ee=ne;export{he as RadioGroup,Ee as RadioGroupDescription,ke as RadioGroupLabel,Oe as RadioGroupOption};\n","<template>\n  <HeadlessRadioGroup\n    v-model=\"model\"\n    class=\"inline-flex items-center bg-thm-light rounded-full p-1.5 gap-1\"\n  >\n    <HeadlessRadioGroupOption\n      v-for=\"(details, value) in options\"\n      v-slot=\"{ checked }\"\n      :key=\"value\"\n      :value=\"value\"\n      as=\"template\"\n    >\n      <div\n        class=\"inline-flex items-center px-3 py-1.5 gap-2 rounded-full border cursor-pointer hover:bg-bgr focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover transform transition duration-200 ease-out\"\n        :class=\"\n          checked ? 'bg-bgr border-thm-hover shadow' : 'border-transparent'\n        \"\n      >\n        <slot\n          name=\"option\"\n          :value=\"value\"\n          :details=\"details\"\n          :selected=\"checked\"\n        >\n          <span>{{ details || value }}</span>\n        </slot>\n      </div>\n    </HeadlessRadioGroupOption>\n  </HeadlessRadioGroup>\n</template>\n\n<script setup lang=\"ts\" generic=\"TValue extends string | number, TDetails\">\nimport { isArray, zipObject } from 'lodash-es'\n\nconst props = defineProps<{\n  options: Readonly<TValue[] | Record<TValue, TDetails>>\n}>()\n\nconst model = defineModel<TValue>({ required: true })\n\nconst options = computed(\n  () =>\n    (isArray(props.options)\n      ? zipObject(props.options)\n      : props.options) as Record<TValue, TDetails>,\n)\n</script>\n","<template>\n  <WebccRadioSwitch v-model=\"model\" :options=\"OPTIONS\">\n    <template #option=\"{ value }\">\n      <WebccIcon :name=\"`searchpage/${value}-view`\" class=\"h-4 w-4\" />\n      <span>{{ $t(`${trPrefix}${value}`) }}</span>\n    </template>\n  </WebccRadioSwitch>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.area.layout.'\n\nconst OPTIONS = ['grid', 'list'] as const\n\nconst model = defineModel<SearchResultLayout>({ required: true })\n</script>\n","let a=/([\\u2700-\\u27BF]|[\\uE000-\\uF8FF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDFFF]|[\\u2011-\\u26FF]|\\uD83E[\\uDD10-\\uDDFF])/g;function o(e){var r,i;let n=(r=e.innerText)!=null?r:\"\",t=e.cloneNode(!0);if(!(t instanceof HTMLElement))return n;let u=!1;for(let f of t.querySelectorAll('[hidden],[aria-hidden],[role=\"img\"]'))f.remove(),u=!0;let l=u?(i=t.innerText)!=null?i:\"\":n;return a.test(l)&&(l=l.replace(a,\"\")),l}function g(e){let n=e.getAttribute(\"aria-label\");if(typeof n==\"string\")return n.trim();let t=e.getAttribute(\"aria-labelledby\");if(t){let u=t.split(\" \").map(l=>{let r=document.getElementById(l);if(r){let i=r.getAttribute(\"aria-label\");return typeof i==\"string\"?i.trim():o(r).trim()}return null}).filter(Boolean);if(u.length>0)return u.join(\", \")}return o(e).trim()}export{g as getTextValue};\n","import{ref as n}from\"vue\";import{dom as o}from'../utils/dom.js';import{getTextValue as i}from'../utils/get-text-value.js';function p(a){let t=n(\"\"),r=n(\"\");return()=>{let e=o(a);if(!e)return\"\";let l=e.innerText;if(t.value===l)return r.value;let u=i(e).trim().toLowerCase();return t.value=l,r.value=u,u}}export{p as useTextValue};\n","import{computed as x,defineComponent as E,Fragment as z,h as N,inject as _,nextTick as V,onMounted as K,onUnmounted as q,provide as W,ref as T,toRaw as R,watch as H,watchEffect as G}from\"vue\";import{useControllable as J}from'../../hooks/use-controllable.js';import{useId as F}from'../../hooks/use-id.js';import{useOutsideClick as X}from'../../hooks/use-outside-click.js';import{useResolveButtonType as Y}from'../../hooks/use-resolve-button-type.js';import{useTextValue as Z}from'../../hooks/use-text-value.js';import{useTrackedPointer as ee}from'../../hooks/use-tracked-pointer.js';import{Features as te,Hidden as oe}from'../../internal/hidden.js';import{State as B,useOpenClosed as ae,useOpenClosedProvider as ie}from'../../internal/open-closed.js';import{Keys as c}from'../../keyboard.js';import{calculateActiveIndex as ne,Focus as g}from'../../utils/calculate-active-index.js';import{dom as S}from'../../utils/dom.js';import{FocusableMode as le,isFocusableElement as ue,sortByDomNode as re}from'../../utils/focus-management.js';import{objectToFormEntries as se}from'../../utils/form.js';import{match as P}from'../../utils/match.js';import{compact as de,Features as U,omit as fe,render as j}from'../../utils/render.js';function pe(o,b){return o===b}var ce=(r=>(r[r.Open=0]=\"Open\",r[r.Closed=1]=\"Closed\",r))(ce||{}),ve=(r=>(r[r.Single=0]=\"Single\",r[r.Multi=1]=\"Multi\",r))(ve||{}),be=(r=>(r[r.Pointer=0]=\"Pointer\",r[r.Other=1]=\"Other\",r))(be||{});function me(o){requestAnimationFrame(()=>requestAnimationFrame(o))}let $=Symbol(\"ListboxContext\");function A(o){let b=_($,null);if(b===null){let r=new Error(`<${o} /> is missing a parent <Listbox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,A),r}return b}let Ie=E({name:\"Listbox\",emits:{\"update:modelValue\":o=>!0},props:{as:{type:[Object,String],default:\"template\"},disabled:{type:[Boolean],default:!1},by:{type:[String,Function],default:()=>pe},horizontal:{type:[Boolean],default:!1},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{type:[Object,String,Number,Boolean],default:void 0},form:{type:String,optional:!0},name:{type:String,optional:!0},multiple:{type:[Boolean],default:!1}},inheritAttrs:!1,setup(o,{slots:b,attrs:r,emit:w}){let n=T(1),e=T(null),f=T(null),v=T(null),s=T([]),m=T(\"\"),p=T(null),a=T(1);function u(t=i=>i){let i=p.value!==null?s.value[p.value]:null,l=re(t(s.value.slice()),O=>S(O.dataRef.domRef)),d=i?l.indexOf(i):null;return d===-1&&(d=null),{options:l,activeOptionIndex:d}}let D=x(()=>o.multiple?1:0),[y,L]=J(x(()=>o.modelValue),t=>w(\"update:modelValue\",t),x(()=>o.defaultValue)),M=x(()=>y.value===void 0?P(D.value,{[1]:[],[0]:void 0}):y.value),k={listboxState:n,value:M,mode:D,compare(t,i){if(typeof o.by==\"string\"){let l=o.by;return(t==null?void 0:t[l])===(i==null?void 0:i[l])}return o.by(t,i)},orientation:x(()=>o.horizontal?\"horizontal\":\"vertical\"),labelRef:e,buttonRef:f,optionsRef:v,disabled:x(()=>o.disabled),options:s,searchQuery:m,activeOptionIndex:p,activationTrigger:a,closeListbox(){o.disabled||n.value!==1&&(n.value=1,p.value=null)},openListbox(){o.disabled||n.value!==0&&(n.value=0)},goToOption(t,i,l){if(o.disabled||n.value===1)return;let d=u(),O=ne(t===g.Specific?{focus:g.Specific,id:i}:{focus:t},{resolveItems:()=>d.options,resolveActiveIndex:()=>d.activeOptionIndex,resolveId:h=>h.id,resolveDisabled:h=>h.dataRef.disabled});m.value=\"\",p.value=O,a.value=l!=null?l:1,s.value=d.options},search(t){if(o.disabled||n.value===1)return;let l=m.value!==\"\"?0:1;m.value+=t.toLowerCase();let O=(p.value!==null?s.value.slice(p.value+l).concat(s.value.slice(0,p.value+l)):s.value).find(I=>I.dataRef.textValue.startsWith(m.value)&&!I.dataRef.disabled),h=O?s.value.indexOf(O):-1;h===-1||h===p.value||(p.value=h,a.value=1)},clearSearch(){o.disabled||n.value!==1&&m.value!==\"\"&&(m.value=\"\")},registerOption(t,i){let l=u(d=>[...d,{id:t,dataRef:i}]);s.value=l.options,p.value=l.activeOptionIndex},unregisterOption(t){let i=u(l=>{let d=l.findIndex(O=>O.id===t);return d!==-1&&l.splice(d,1),l});s.value=i.options,p.value=i.activeOptionIndex,a.value=1},theirOnChange(t){o.disabled||L(t)},select(t){o.disabled||L(P(D.value,{[0]:()=>t,[1]:()=>{let i=R(k.value.value).slice(),l=R(t),d=i.findIndex(O=>k.compare(l,R(O)));return d===-1?i.push(l):i.splice(d,1),i}}))}};X([f,v],(t,i)=>{var l;k.closeListbox(),ue(i,le.Loose)||(t.preventDefault(),(l=S(f))==null||l.focus())},x(()=>n.value===0)),W($,k),ie(x(()=>P(n.value,{[0]:B.Open,[1]:B.Closed})));let C=x(()=>{var t;return(t=S(f))==null?void 0:t.closest(\"form\")});return K(()=>{H([C],()=>{if(!C.value||o.defaultValue===void 0)return;function t(){k.theirOnChange(o.defaultValue)}return C.value.addEventListener(\"reset\",t),()=>{var i;(i=C.value)==null||i.removeEventListener(\"reset\",t)}},{immediate:!0})}),()=>{let{name:t,modelValue:i,disabled:l,form:d,...O}=o,h={open:n.value===0,disabled:l,value:M.value};return N(z,[...t!=null&&M.value!=null?se({[t]:M.value}).map(([I,Q])=>N(oe,de({features:te.Hidden,key:I,as:\"input\",type:\"hidden\",hidden:!0,readOnly:!0,form:d,disabled:l,name:I,value:Q}))):[],j({ourProps:{},theirProps:{...r,...fe(O,[\"defaultValue\",\"onUpdate:modelValue\",\"horizontal\",\"multiple\",\"by\"])},slot:h,slots:b,attrs:r,name:\"Listbox\"})])}}}),Ee=E({name:\"ListboxLabel\",props:{as:{type:[Object,String],default:\"label\"},id:{type:String,default:null}},setup(o,{attrs:b,slots:r}){var f;let w=(f=o.id)!=null?f:`headlessui-listbox-label-${F()}`,n=A(\"ListboxLabel\");function e(){var v;(v=S(n.buttonRef))==null||v.focus({preventScroll:!0})}return()=>{let v={open:n.listboxState.value===0,disabled:n.disabled.value},{...s}=o,m={id:w,ref:n.labelRef,onClick:e};return j({ourProps:m,theirProps:s,slot:v,attrs:b,slots:r,name:\"ListboxLabel\"})}}}),je=E({name:\"ListboxButton\",props:{as:{type:[Object,String],default:\"button\"},id:{type:String,default:null}},setup(o,{attrs:b,slots:r,expose:w}){var p;let n=(p=o.id)!=null?p:`headlessui-listbox-button-${F()}`,e=A(\"ListboxButton\");w({el:e.buttonRef,$el:e.buttonRef});function f(a){switch(a.key){case c.Space:case c.Enter:case c.ArrowDown:a.preventDefault(),e.openListbox(),V(()=>{var u;(u=S(e.optionsRef))==null||u.focus({preventScroll:!0}),e.value.value||e.goToOption(g.First)});break;case c.ArrowUp:a.preventDefault(),e.openListbox(),V(()=>{var u;(u=S(e.optionsRef))==null||u.focus({preventScroll:!0}),e.value.value||e.goToOption(g.Last)});break}}function v(a){switch(a.key){case c.Space:a.preventDefault();break}}function s(a){e.disabled.value||(e.listboxState.value===0?(e.closeListbox(),V(()=>{var u;return(u=S(e.buttonRef))==null?void 0:u.focus({preventScroll:!0})})):(a.preventDefault(),e.openListbox(),me(()=>{var u;return(u=S(e.optionsRef))==null?void 0:u.focus({preventScroll:!0})})))}let m=Y(x(()=>({as:o.as,type:b.type})),e.buttonRef);return()=>{var y,L;let a={open:e.listboxState.value===0,disabled:e.disabled.value,value:e.value.value},{...u}=o,D={ref:e.buttonRef,id:n,type:m.value,\"aria-haspopup\":\"listbox\",\"aria-controls\":(y=S(e.optionsRef))==null?void 0:y.id,\"aria-expanded\":e.listboxState.value===0,\"aria-labelledby\":e.labelRef.value?[(L=S(e.labelRef))==null?void 0:L.id,n].join(\" \"):void 0,disabled:e.disabled.value===!0?!0:void 0,onKeydown:f,onKeyup:v,onClick:s};return j({ourProps:D,theirProps:u,slot:a,attrs:b,slots:r,name:\"ListboxButton\"})}}}),Ae=E({name:\"ListboxOptions\",props:{as:{type:[Object,String],default:\"ul\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null}},setup(o,{attrs:b,slots:r,expose:w}){var p;let n=(p=o.id)!=null?p:`headlessui-listbox-options-${F()}`,e=A(\"ListboxOptions\"),f=T(null);w({el:e.optionsRef,$el:e.optionsRef});function v(a){switch(f.value&&clearTimeout(f.value),a.key){case c.Space:if(e.searchQuery.value!==\"\")return a.preventDefault(),a.stopPropagation(),e.search(a.key);case c.Enter:if(a.preventDefault(),a.stopPropagation(),e.activeOptionIndex.value!==null){let u=e.options.value[e.activeOptionIndex.value];e.select(u.dataRef.value)}e.mode.value===0&&(e.closeListbox(),V(()=>{var u;return(u=S(e.buttonRef))==null?void 0:u.focus({preventScroll:!0})}));break;case P(e.orientation.value,{vertical:c.ArrowDown,horizontal:c.ArrowRight}):return a.preventDefault(),a.stopPropagation(),e.goToOption(g.Next);case P(e.orientation.value,{vertical:c.ArrowUp,horizontal:c.ArrowLeft}):return a.preventDefault(),a.stopPropagation(),e.goToOption(g.Previous);case c.Home:case c.PageUp:return a.preventDefault(),a.stopPropagation(),e.goToOption(g.First);case c.End:case c.PageDown:return a.preventDefault(),a.stopPropagation(),e.goToOption(g.Last);case c.Escape:a.preventDefault(),a.stopPropagation(),e.closeListbox(),V(()=>{var u;return(u=S(e.buttonRef))==null?void 0:u.focus({preventScroll:!0})});break;case c.Tab:a.preventDefault(),a.stopPropagation();break;default:a.key.length===1&&(e.search(a.key),f.value=setTimeout(()=>e.clearSearch(),350));break}}let s=ae(),m=x(()=>s!==null?(s.value&B.Open)===B.Open:e.listboxState.value===0);return()=>{var y,L;let a={open:e.listboxState.value===0},{...u}=o,D={\"aria-activedescendant\":e.activeOptionIndex.value===null||(y=e.options.value[e.activeOptionIndex.value])==null?void 0:y.id,\"aria-multiselectable\":e.mode.value===1?!0:void 0,\"aria-labelledby\":(L=S(e.buttonRef))==null?void 0:L.id,\"aria-orientation\":e.orientation.value,id:n,onKeydown:v,role:\"listbox\",tabIndex:0,ref:e.optionsRef};return j({ourProps:D,theirProps:u,slot:a,attrs:b,slots:r,features:U.RenderStrategy|U.Static,visible:m.value,name:\"ListboxOptions\"})}}}),Fe=E({name:\"ListboxOption\",props:{as:{type:[Object,String],default:\"li\"},value:{type:[Object,String,Number,Boolean]},disabled:{type:Boolean,default:!1},id:{type:String,default:null}},setup(o,{slots:b,attrs:r,expose:w}){var C;let n=(C=o.id)!=null?C:`headlessui-listbox-option-${F()}`,e=A(\"ListboxOption\"),f=T(null);w({el:f,$el:f});let v=x(()=>e.activeOptionIndex.value!==null?e.options.value[e.activeOptionIndex.value].id===n:!1),s=x(()=>P(e.mode.value,{[0]:()=>e.compare(R(e.value.value),R(o.value)),[1]:()=>R(e.value.value).some(t=>e.compare(R(t),R(o.value)))})),m=x(()=>P(e.mode.value,{[1]:()=>{var i;let t=R(e.value.value);return((i=e.options.value.find(l=>t.some(d=>e.compare(R(d),R(l.dataRef.value)))))==null?void 0:i.id)===n},[0]:()=>s.value})),p=Z(f),a=x(()=>({disabled:o.disabled,value:o.value,get textValue(){return p()},domRef:f}));K(()=>e.registerOption(n,a)),q(()=>e.unregisterOption(n)),K(()=>{H([e.listboxState,s],()=>{e.listboxState.value===0&&s.value&&P(e.mode.value,{[1]:()=>{m.value&&e.goToOption(g.Specific,n)},[0]:()=>{e.goToOption(g.Specific,n)}})},{immediate:!0})}),G(()=>{e.listboxState.value===0&&v.value&&e.activationTrigger.value!==0&&V(()=>{var t,i;return(i=(t=S(f))==null?void 0:t.scrollIntoView)==null?void 0:i.call(t,{block:\"nearest\"})})});function u(t){if(o.disabled)return t.preventDefault();e.select(o.value),e.mode.value===0&&(e.closeListbox(),V(()=>{var i;return(i=S(e.buttonRef))==null?void 0:i.focus({preventScroll:!0})}))}function D(){if(o.disabled)return e.goToOption(g.Nothing);e.goToOption(g.Specific,n)}let y=ee();function L(t){y.update(t)}function M(t){y.wasMoved(t)&&(o.disabled||v.value||e.goToOption(g.Specific,n,0))}function k(t){y.wasMoved(t)&&(o.disabled||v.value&&e.goToOption(g.Nothing))}return()=>{let{disabled:t}=o,i={active:v.value,selected:s.value,disabled:t},{value:l,disabled:d,...O}=o,h={id:n,ref:f,role:\"option\",tabIndex:t===!0?void 0:-1,\"aria-disabled\":t===!0?!0:void 0,\"aria-selected\":s.value,disabled:void 0,onClick:u,onFocus:D,onPointerenter:L,onMouseenter:L,onPointermove:M,onMousemove:M,onPointerleave:k,onMouseleave:k};return j({ourProps:h,theirProps:O,slot:i,attrs:r,slots:b,name:\"ListboxOption\"})}}});export{Ie as Listbox,je as ListboxButton,Ee as ListboxLabel,Fe as ListboxOption,Ae as ListboxOptions};\n","<template>\n  <HeadlessListbox v-model=\"model\">\n    <div class=\"relative text-sm\">\n      <HeadlessListboxButton\n        class=\"flex items-center justify-between border border-bgr-300 hover:bg-bgr-100 transition focus:bg-bgr-100 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover w-full\"\n        :class=\"rounded ? 'rounded-full' : 'rounded'\"\n      >\n        <slot name=\"button\" :value=\"model\" :details=\"options[model]\">\n          <span class=\"py-2 px-3\">{{ options[model] }}</span>\n        </slot>\n        <WebccIcon name=\"site/arrow-down\" class=\"h-4 w-4 shrink-0 mr-4\" />\n      </HeadlessListboxButton>\n\n      <transition\n        :class=\"classes.transform\"\n        enter-active-class=\"transition duration-100 ease-out\"\n        enter-from-class=\"transform scale-95 opacity-0\"\n        enter-to-class=\"transform scale-100 opacity-100\"\n        leave-active-class=\"transition duration-100 ease-out\"\n        leave-to-class=\"transform scale-95 opacity-0\"\n        leave-from-class=\"transform scale-100 opacity-100\"\n      >\n        <HeadlessListboxOptions\n          class=\"absolute z-10 mt-2 py-1 rounded-lg border border-bgr-300 shadow-lg origin-top-left bg-bgr focus:outline-none\"\n          :class=\"classes.list\"\n        >\n          <HeadlessListboxOption\n            v-for=\"(details, value) in options\"\n            v-slot=\"{ active, selected }\"\n            :key=\"value\"\n            :value=\"value\"\n            as=\"template\"\n          >\n            <div\n              class=\"flex items-center py-1 px-4 gap-4\"\n              :class=\"[\n                { 'bg-bgr-100 outline-none cursor-pointer': active },\n                classes.item,\n              ]\"\n            >\n              <WebccIcon\n                name=\"site/tick\"\n                class=\"h-2.5 w-2.5\"\n                :class=\"{ invisible: !selected }\"\n              />\n              <slot\n                name=\"option\"\n                :value=\"value\"\n                :details=\"details\"\n                :selected=\"selected\"\n              >\n                <span>{{ details || value }}</span>\n              </slot>\n            </div>\n          </HeadlessListboxOption>\n        </HeadlessListboxOptions>\n      </transition>\n    </div>\n  </HeadlessListbox>\n</template>\n\n<script setup lang=\"ts\" generic=\"TValue extends string | number, TDetails\">\nimport { isArray, zipObject } from 'lodash-es'\n\nexport type Mode = 'fit' | 'left' | 'right'\n\nconst props = withDefaults(\n  defineProps<{\n    options: Readonly<TValue[] | Record<TValue, TDetails>>\n    /**\n     * How to align the options menu:\n     * - `fit` — fit the button width\n     * - `left` — to the left side\n     * - `right` — to the right side\n     *\n     * @default fit\n     */\n    rounded?: boolean\n    mode?: Mode\n  }>(),\n  {\n    rounded: false,\n    mode: 'fit',\n  },\n)\n\nconst model = defineModel<TValue>({ required: true })\n\nconst MODE_CLASSES = {\n  left: { list: 'left-0', item: 'text-nowrap', transform: 'origin-top-left' },\n  right: {\n    list: 'right-0',\n    item: 'text-nowrap',\n    transform: 'origin-top-right',\n  },\n  fit: { list: 'left-0 right-0', item: '', transform: 'origin-top' },\n} as const\n\nconst classes = computed(() => MODE_CLASSES[props.mode])\n\nconst options = computed(\n  () =>\n    (isArray(props.options)\n      ? zipObject(props.options)\n      : props.options) as Record<TValue, TDetails>,\n)\n</script>\n","<template>\n  <RedesignWebccDropdown v-model=\"sorting\" :options=\"OPTIONS\" :mode>\n    <template #button=\"{ details: key }\">\n      <div class=\"p-3 overflow-hidden text-ellipsis whitespace-nowrap\">\n        {{ $t(`${trPrefix}prefix`) }} {{ $t(`${trPrefix}${key}`) }}\n      </div>\n    </template>\n    <template #option=\"{ details: key }\">\n      {{ $t(`${trPrefix}${key}`) }}\n    </template>\n  </RedesignWebccDropdown>\n</template>\n\n<script setup lang=\"ts\">\nimport type { Mode } from './RedesignWebccDropdown.vue'\n\nconst trPrefix = 'www.components.views.search.area.sorting.'\n\nconst OPTIONS = {\n  recommendation: 'recommendation',\n  '-lastbookday': 'bestsellers',\n  age: 'age',\n  '-averagerating': 'rating',\n  price: 'priceAsc',\n  '-price': 'priceDesc',\n  pax: 'paxAsc',\n  '-pax': 'paxDesc',\n} as const\n\nwithDefaults(defineProps<{ mode?: Mode }>(), { mode: 'fit' })\n\nconst model = defineModel<SortingValue>()\n\nconst sorting = computed({\n  get: () => model.value ?? SORT_DEFAULT,\n  set: (value) => (model.value = value === SORT_DEFAULT ? undefined : value),\n})\n</script>\n","<template>\n  <div class=\"flex flex-wrap items-center gap-2 text-xs font-medium\">\n    <div\n      v-if=\"discount\"\n      class=\"rounded px-1 py-0.5 bg-hlt-hover text-hlt-contrast\"\n    >\n      {{ discount }}&percnt;\n    </div>\n    <div v-if=\"isTopRated\">\n      <span class=\"rounded px-1 py-0.5 bg-suc text-suc-contrast uppercase\">\n        {{ $t(`${trPrefix}toprated`) }}\n      </span>\n    </div>\n    <div v-if=\"isNew\">\n      <span class=\"rounded px-1 py-0.5 bg-suc text-suc-contrast uppercase\">\n        {{ $t(`${trPrefix}new`) }}\n      </span>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.Tags.'\n\nconst props = defineProps<{ accom: ResultDocument }>()\n\nconst discount = computed(() => props.accom.trip?.reduction?.toFixed())\nconst isTopRated = computed(() => props.accom.tags.includes('top'))\nconst isNew = computed(() => props.accom.tags.includes('new'))\n</script>\n","export function getTripDateRange({\n  checkin,\n  checkout,\n}: {\n  checkin?: UnparsedDate\n  checkout?: UnparsedDate\n}): DateRange {\n  return { start: tryParseDate(checkin), end: tryParseDate(checkout) }\n}\n\nexport function isTripValid(trip: Partial<TripParams>): trip is TripParams {\n  return !!(trip.checkin && trip.checkout && trip.pax)\n}\n\nexport function getTripOrigPrice({ price, reduction }: Trip): number {\n  return price / ((100 - (reduction ?? 0)) / 100)\n}\n","<template>\n  <div class=\"rounded px-1 py-0.5 bg-bgr opacity-80 text-xs font-semibold\">\n    {{ dateRangeText }}\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{ trip: Trip }>()\n\nconst dateRangeText = computed(() =>\n  formatDateRange(getTripDateRange(props.trip), 'monthDay'),\n)\n</script>\n","<template>\n  <button\n    class=\"p-1 rounded-full bg-bgr opacity-80 hover:bg-bgr-100 transition focus:bg-bgr-100 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover\"\n    @click.prevent.stop=\"toggleBookmark\"\n  >\n    <WebccIcon\n      filled\n      :name=\"isBookmarked ? 'site/bookmark-filled' : 'site/bookmark'\"\n      class=\"h-6 w-6\"\n    />\n  </button>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  accom: ResultDocument\n}>()\n\nconst bookmarks = useBookmarks()\nconst tracking = useTracking()\n\nconst isBookmarked = computed(() => bookmarks.has(props.accom.code))\n\nfunction toggleBookmark() {\n  bookmarks.toggle(props.accom.code)\n\n  const state = isBookmarked.value\n  tracking.handlers?.ecommerce.toggleWishlist([props.accom], state)\n  tracking.handlers?.search.toggleBookmark({ accom: props.accom.code, state })\n}\n</script>\n","import{ref as n,isRef as t,watch as i,onMounted as e,onUnmounted as r}from\"vue\";var a=function(){return a=Object.assign||function(n){for(var t,i=1,e=arguments.length;i<e;i++)for(var r in t=arguments[i])Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n},a.apply(this,arguments)};function o(n,t,i){if(i||2===arguments.length)for(var e,r=0,a=t.length;r<a;r++)!e&&r in t||(e||(e=Array.prototype.slice.call(t,0,r)),e[r]=t[r]);return n.concat(e||Array.prototype.slice.call(t))}function u(n){return Array.prototype.slice.call(n)}function s(n,t){var i=Math.floor(n);return i===t||i+1===t?n:t}function c(){return Date.now()}function d(n,t,i){if(t=\"data-keen-slider-\"+t,null===i)return n.removeAttribute(t);n.setAttribute(t,i||\"\")}function l(n,t){return t=t||document,\"function\"==typeof n&&(n=n(t)),Array.isArray(n)?n:\"string\"==typeof n?u(t.querySelectorAll(n)):n instanceof HTMLElement?[n]:n instanceof NodeList?u(n):[]}function f(n){n.raw&&(n=n.raw),n.cancelable&&!n.defaultPrevented&&n.preventDefault()}function p(n){n.raw&&(n=n.raw),n.stopPropagation&&n.stopPropagation()}function v(){var n=[];return{add:function(t,i,e,r){t.addListener?t.addListener(e):t.addEventListener(i,e,r),n.push([t,i,e,r])},input:function(n,t,i,e){this.add(n,t,function(n){return function(t){t.nativeEvent&&(t=t.nativeEvent);var i=t.changedTouches||[],e=t.targetTouches||[],r=t.detail&&t.detail.x?t.detail:null;return n({id:r?r.identifier?r.identifier:\"i\":e[0]?e[0]?e[0].identifier:\"e\":\"d\",idChanged:r?r.identifier?r.identifier:\"i\":i[0]?i[0]?i[0].identifier:\"e\":\"d\",raw:t,x:r&&r.x?r.x:e[0]?e[0].screenX:r?r.x:t.pageX,y:r&&r.y?r.y:e[0]?e[0].screenY:r?r.y:t.pageY})}}(i),e)},purge:function(){n.forEach((function(n){n[0].removeListener?n[0].removeListener(n[2]):n[0].removeEventListener(n[1],n[2],n[3])})),n=[]}}}function h(n,t,i){return Math.min(Math.max(n,t),i)}function m(n){return(n>0?1:0)-(n<0?1:0)||+n}function g(n){var t=n.getBoundingClientRect();return{height:s(t.height,n.offsetHeight),width:s(t.width,n.offsetWidth)}}function b(n,t,i,e){var r=n&&n[t];return null==r?i:e&&\"function\"==typeof r?r():r}function x(n){return Math.round(1e6*n)/1e6}function k(n){var t,i,e,r,a,o;function u(t){o||(o=t),s(!0);var a=t-o;a>e&&(a=e);var l=r[i];if(l[3]<a)return i++,u(t);var f=l[2],p=l[4],v=l[0],h=l[1]*(0,l[5])(0===p?1:(a-f)/p);if(h&&n.track.to(v+h),a<e)return d();o=null,s(!1),c(null),n.emit(\"animationEnded\")}function s(n){t.active=n}function c(n){t.targetIdx=n}function d(){var n;n=u,a=window.requestAnimationFrame(n)}function l(){var t;t=a,window.cancelAnimationFrame(t),s(!1),c(null),o&&n.emit(\"animationStopped\"),o=null}return t={active:!1,start:function(t){if(l(),n.track.details){var a=0,o=n.track.details.position;i=0,e=0,r=t.map((function(n){var t,i=Number(o),r=null!==(t=n.earlyExit)&&void 0!==t?t:n.duration,u=n.easing,s=n.distance*u(r/n.duration)||0;o+=s;var c=e;return e+=r,a+=s,[i,n.distance,c,e,n.duration,u]})),c(n.track.distToIdx(a)),d(),n.emit(\"animationStarted\")}},stop:l,targetIdx:null}}function y(n){var t,i,e,r,a,u,s,d,l,f,p,v,g,k,y=1/0,w=[],M=null,T=0;function C(n){_(T+n)}function E(n){var t=z(T+n).abs;return D(t)?t:null}function z(n){var t=Math.floor(Math.abs(x(n/i))),e=x((n%i+i)%i);e===i&&(e=0);var r=m(n),a=s.indexOf(o([],s,!0).reduce((function(n,t){return Math.abs(t-e)<Math.abs(n-e)?t:n}))),c=a;return r<0&&t++,a===u&&(c=0,t+=r>0?1:-1),{abs:c+t*u*r,origin:a,rel:c}}function I(n,t,i){var e;if(t||!S())return A(n,i);if(!D(n))return null;var r=z(null!=i?i:T),a=r.abs,o=n-r.rel,s=a+o;e=A(s);var c=A(s-u*m(o));return(null!==c&&Math.abs(c)<Math.abs(e)||null===e)&&(e=c),x(e)}function A(n,t){if(null==t&&(t=x(T)),!D(n)||null===n)return null;n=Math.round(n);var e=z(t),r=e.abs,a=e.rel,o=e.origin,c=O(n),d=(t%i+i)%i,l=s[o],f=Math.floor((n-(r-a))/u)*i;return x(l-d-l+s[c]+f+(o===u?i:0))}function D(n){return L(n)===n}function L(n){return h(n,l,f)}function S(){return r.loop}function O(n){return(n%u+u)%u}function _(t){var i;i=t-T,w.push({distance:i,timestamp:c()}),w.length>6&&(w=w.slice(-6)),T=x(t);var e=H().abs;if(e!==M){var r=null!==M;M=e,r&&n.emit(\"slideChanged\")}}function H(o){var s=o?null:function(){if(u){var n=S(),t=n?(T%i+i)%i:T,o=(n?T%i:T)-a[0][2],s=0-(o<0&&n?i-Math.abs(o):o),c=0,d=z(T),h=d.abs,b=d.rel,x=a[b][2],y=a.map((function(t,e){var a=s+c;(a<0-t[0]||a>1)&&(a+=(Math.abs(a)>i-1&&n?i:0)*m(-a));var o=e-b,d=m(o),l=o+h;n&&(-1===d&&a>x&&(l+=u),1===d&&a<x&&(l-=u),null!==p&&l<p&&(a+=i),null!==v&&l>v&&(a-=i));var f=a+t[0]+t[1],g=Math.max(a>=0&&f<=1?1:f<0||a>1?0:a<0?Math.min(1,(t[0]+a)/t[0]):(1-a)/t[0],0);return c+=t[0]+t[1],{abs:l,distance:r.rtl?-1*a+1-t[0]:a,portion:g,size:t[0]}}));return h=L(h),b=O(h),{abs:L(h),length:e,max:k,maxIdx:f,min:g,minIdx:l,position:T,progress:n?t/i:T/e,rel:b,slides:y,slidesLength:i}}}();return t.details=s,n.emit(\"detailsChanged\"),s}return t={absToRel:O,add:C,details:null,distToIdx:E,idxToDist:I,init:function(t){if(function(){if(r=n.options,a=(r.trackConfig||[]).map((function(n){return[b(n,\"size\",1),b(n,\"spacing\",0),b(n,\"origin\",0)]})),u=a.length){i=x(a.reduce((function(n,t){return n+t[0]+t[1]}),0));var t,o=u-1;e=x(i+a[0][2]-a[o][0]-a[o][2]-a[o][1]),s=a.reduce((function(n,i){if(!n)return[0];var e=a[n.length-1],r=n[n.length-1]+(e[0]+e[2])+e[1];return r-=i[2],n[n.length-1]>r&&(r=n[n.length-1]),r=x(r),n.push(r),(!t||t<r)&&(d=n.length-1),t=r,n}),null),0===e&&(d=0),s.push(x(i))}}(),!u)return H(!0);var o;!function(){var t=n.options.range,i=n.options.loop;p=l=i?b(i,\"min\",-1/0):0,v=f=i?b(i,\"max\",y):d;var e=b(t,\"min\",null),r=b(t,\"max\",null);null!==e&&(l=e),null!==r&&(f=r),g=l===-1/0?l:n.track.idxToDist(l||0,!0,0),k=f===y?f:I(f,!0,0),null===r&&(v=f),b(t,\"align\",!1)&&f!==y&&0===a[O(f)][2]&&(k-=1-a[O(f)][0],f=E(k-T)),g=x(g),k=x(k)}(),o=t,Number(o)===o?C(A(L(t))):H()},to:_,velocity:function(){var n=c(),t=w.reduce((function(t,i){var e=i.distance,r=i.timestamp;return n-r>200||(m(e)!==m(t.distance)&&t.distance&&(t={distance:0,lastTimestamp:0,time:0}),t.time&&(t.distance+=e),t.lastTimestamp&&(t.time+=r-t.lastTimestamp),t.lastTimestamp=r),t}),{distance:0,lastTimestamp:0,time:0});return t.distance/t.time||0}}}function w(n){var t,i,e,r,a,o,u,s;function c(n){return 2*n}function d(n){return h(n,u,s)}function l(n){return 1-Math.pow(1-n,3)}function f(){return e?n.track.velocity():0}function p(){b();var t=\"free-snap\"===n.options.mode,i=n.track,e=f();r=m(e);var u=n.track.details,s=[];if(e||!t){var p=v(e),h=p.dist,g=p.dur;if(g=c(g),h*=r,t){var x=i.idxToDist(i.distToIdx(h),!0);x&&(h=x)}s.push({distance:h,duration:g,easing:l});var k=u.position,y=k+h;if(y<a||y>o){var w=y<a?a-k:o-k,M=0,T=e;if(m(w)===r){var C=Math.min(Math.abs(w)/Math.abs(h),1),E=function(n){return 1-Math.pow(1-n,1/3)}(C)*g;s[0].earlyExit=E,T=e*(1-C)}else s[0].earlyExit=0,M+=w;var z=v(T,100),I=z.dist*r;n.options.rubberband&&(s.push({distance:I,duration:c(z.dur),easing:l}),s.push({distance:-I+M,duration:500,easing:l}))}n.animator.start(s)}else n.moveToIdx(d(u.abs),!0,{duration:500,easing:function(n){return 1+--n*n*n*n*n}})}function v(n,t){void 0===t&&(t=1e3);var i=147e-9+(n=Math.abs(n))/t;return{dist:Math.pow(n,2)/i,dur:n/i}}function g(){var t=n.track.details;t&&(a=t.min,o=t.max,u=t.minIdx,s=t.maxIdx)}function b(){n.animator.stop()}n.on(\"updated\",g),n.on(\"optionsChanged\",g),n.on(\"created\",g),n.on(\"dragStarted\",(function(){e=!1,b(),t=i=n.track.details.abs})),n.on(\"dragChecked\",(function(){e=!0})),n.on(\"dragEnded\",(function(){var e=n.options.mode;\"snap\"===e&&function(){var e=n.track,r=n.track.details,u=r.position,s=m(f());(u>o||u<a)&&(s=0);var c=t+s;0===r.slides[e.absToRel(c)].portion&&(c-=s),t!==i&&(c=i),m(e.idxToDist(c,!0))!==s&&(c+=s),c=d(c);var l=e.idxToDist(c,!0);n.animator.start([{distance:l,duration:500,easing:function(n){return 1+--n*n*n*n*n}}])}(),\"free\"!==e&&\"free-snap\"!==e||p()})),n.on(\"dragged\",(function(){i=n.track.details.abs}))}function M(n){var t,i,e,r,a,o,u,s,c,d,g,b,x,k,y,w,M,T,C=v();function E(t){if(o&&s===t.id){var l=D(t);if(c){if(!A(t))return I(t);d=l,c=!1,n.emit(\"dragChecked\")}if(w)return d=l;f(t);var v=function(t){if(M===-1/0&&T===1/0)return t;var e=n.track.details,o=e.length,u=e.position,s=h(t,M-u,T-u);if(0===o)return 0;if(!n.options.rubberband)return s;if(u<=T&&u>=M)return t;if(u<M&&i>0||u>T&&i<0)return t;var c=(u<M?u-M:u-T)/o,d=r*o,l=Math.abs(c*d),f=Math.max(0,1-l/a*2);return f*f*t}(u(d-l)/r*e);i=m(v);var x=n.track.details.position;(x>M&&x<T||x===M&&i>0||x===T&&i<0)&&p(t),g+=v,!b&&Math.abs(g*r)>5&&(b=!0),n.track.add(v),d=l,n.emit(\"dragged\")}}function z(t){!o&&n.track.details&&n.track.details.length&&(g=0,o=!0,b=!1,c=!0,s=t.id,A(t),d=D(t),n.emit(\"dragStarted\"))}function I(t){o&&s===t.idChanged&&(o=!1,n.emit(\"dragEnded\"))}function A(n){var t=L(),i=t?n.y:n.x,e=t?n.x:n.y,r=void 0!==x&&void 0!==k&&Math.abs(k-e)<=Math.abs(x-i);return x=i,k=e,r}function D(n){return L()?n.y:n.x}function L(){return n.options.vertical}function S(){r=n.size,a=L()?window.innerHeight:window.innerWidth;var t=n.track.details;t&&(M=t.min,T=t.max)}function O(n){b&&(p(n),f(n))}function _(){if(C.purge(),n.options.drag&&!n.options.disabled){var i;i=n.options.dragSpeed||1,u=\"function\"==typeof i?i:function(n){return n*i},e=n.options.rtl?-1:1,S(),t=n.container,function(){var n=\"data-keen-slider-clickable\";l(\"[\".concat(n,\"]:not([\").concat(n,\"=false])\"),t).map((function(n){C.add(n,\"dragstart\",p),C.add(n,\"mousedown\",p),C.add(n,\"touchstart\",p)}))}(),C.add(t,\"dragstart\",(function(n){f(n)})),C.add(t,\"click\",O,{capture:!0}),C.input(t,\"ksDragStart\",z),C.input(t,\"ksDrag\",E),C.input(t,\"ksDragEnd\",I),C.input(t,\"mousedown\",z),C.input(t,\"mousemove\",E),C.input(t,\"mouseleave\",I),C.input(t,\"mouseup\",I),C.input(t,\"touchstart\",z,{passive:!0}),C.input(t,\"touchmove\",E,{passive:!1}),C.input(t,\"touchend\",I),C.input(t,\"touchcancel\",I),C.add(window,\"wheel\",(function(n){o&&f(n)}));var r=\"data-keen-slider-scrollable\";l(\"[\".concat(r,\"]:not([\").concat(r,\"=false])\"),n.container).map((function(n){return function(n){var t;C.input(n,\"touchstart\",(function(n){t=D(n),w=!0,y=!0}),{passive:!0}),C.input(n,\"touchmove\",(function(i){var e=L(),r=e?n.scrollHeight-n.clientHeight:n.scrollWidth-n.clientWidth,a=t-D(i),o=e?n.scrollTop:n.scrollLeft,u=e&&\"scroll\"===n.style.overflowY||!e&&\"scroll\"===n.style.overflowX;if(t=D(i),(a<0&&o>0||a>0&&o<r)&&y&&u)return w=!0;y=!1,f(i),w=!1})),C.input(n,\"touchend\",(function(){w=!1}))}(n)}))}}n.on(\"updated\",S),n.on(\"optionsChanged\",_),n.on(\"created\",_),n.on(\"destroyed\",C.purge)}function T(n){var t,i,e=null;function r(t,i,e){n.animator.active?o(t,i,e):requestAnimationFrame((function(){return o(t,i,e)}))}function a(){r(!1,!1,i)}function o(i,r,a){var o=0,u=n.size,d=n.track.details;if(d&&t){var l=d.slides;t.forEach((function(n,t){if(i)!e&&r&&s(n,null,a),c(n,null,a);else{if(!l[t])return;var d=l[t].size*u;!e&&r&&s(n,d,a),c(n,l[t].distance*u-o,a),o+=d}}))}}function u(t){return\"performance\"===n.options.renderMode?Math.round(t):t}function s(n,t,i){var e=i?\"height\":\"width\";null!==t&&(t=u(t)+\"px\"),n.style[\"min-\"+e]=t,n.style[\"max-\"+e]=t}function c(n,t,i){if(null!==t){t=u(t);var e=i?t:0;t=\"translate3d(\".concat(i?0:t,\"px, \").concat(e,\"px, 0)\")}n.style.transform=t,n.style[\"-webkit-transform\"]=t}function d(){t&&(o(!0,!0,i),t=null),n.on(\"detailsChanged\",a,!0)}function l(){r(!1,!0,i)}function f(){d(),i=n.options.vertical,n.options.disabled||\"custom\"===n.options.renderMode||(e=\"auto\"===b(n.options.slides,\"perView\",null),n.on(\"detailsChanged\",a),(t=n.slides).length&&l())}n.on(\"created\",f),n.on(\"optionsChanged\",f),n.on(\"beforeOptionsChanged\",(function(){d()})),n.on(\"updated\",l),n.on(\"destroyed\",d)}function C(n,t){return function(i){var e,r,o,u,s,c,f=v();function p(n){var t;d(i.container,\"reverse\",\"rtl\"!==(t=i.container,window.getComputedStyle(t,null).getPropertyValue(\"direction\"))||n?null:\"\"),d(i.container,\"v\",i.options.vertical&&!n?\"\":null),d(i.container,\"disabled\",i.options.disabled&&!n?\"\":null)}function h(){m()&&M()}function m(){var n=null;if(u.forEach((function(t){t.matches&&(n=t.__media)})),n===e)return!1;e||i.emit(\"beforeOptionsChanged\"),e=n;var t=n?o.breakpoints[n]:o;return i.options=a(a({},o),t),p(),I(),A(),C(),!0}function x(n){var t=g(n);return(i.options.vertical?t.height:t.width)/i.size||1}function k(){return i.options.trackConfig.length}function y(n){for(var s in e=!1,o=a(a({},t),n),f.purge(),r=i.size,u=[],o.breakpoints||[]){var c=window.matchMedia(s);c.__media=s,u.push(c),f.add(c,\"change\",h)}f.add(window,\"orientationchange\",z),f.add(window,\"resize\",E),m()}function w(n){i.animator.stop();var t=i.track.details;i.track.init(null!=n?n:t?t.abs:0)}function M(n){w(n),i.emit(\"optionsChanged\")}function T(n,t){if(n)return y(n),void M(t);I(),A();var e=k();C(),k()!==e?M(t):w(t),i.emit(\"updated\")}function C(){var n=i.options.slides;if(\"function\"==typeof n)return i.options.trackConfig=n(i.size,i.slides);for(var t=i.slides,e=t.length,r=\"number\"==typeof n?n:b(n,\"number\",e,!0),a=[],o=b(n,\"perView\",1,!0),u=b(n,\"spacing\",0,!0)/i.size||0,s=\"auto\"===o?u:u/o,c=b(n,\"origin\",\"auto\"),d=0,l=0;l<r;l++){var f=\"auto\"===o?x(t[l]):1/o-u+s,p=\"center\"===c?.5-f/2:\"auto\"===c?0:c;a.push({origin:p,size:f,spacing:u}),d+=f}if(d+=u*(r-1),\"auto\"===c&&!i.options.loop&&1!==o){var v=0;a.map((function(n){var t=d-v;return v+=n.size+u,t>=1||(n.origin=1-t-(d>1?0:1-d)),n}))}i.options.trackConfig=a}function E(){I();var n=i.size;i.options.disabled||n===r||(r=n,T())}function z(){E(),setTimeout(E,500),setTimeout(E,2e3)}function I(){var n=g(i.container);i.size=(i.options.vertical?n.height:n.width)||1}function A(){i.slides=l(i.options.selector,i.container)}i.container=(c=l(n,s||document)).length?c[0]:null,i.destroy=function(){f.purge(),i.emit(\"destroyed\"),p(!0)},i.prev=function(){i.moveToIdx(i.track.details.abs-1,!0)},i.next=function(){i.moveToIdx(i.track.details.abs+1,!0)},i.update=T,y(i.options)}}var E=function(n,t,i){try{return function(n,t){var i,e={};return i={emit:function(n){e[n]&&e[n].forEach((function(n){n(i)}));var t=i.options&&i.options[n];t&&t(i)},moveToIdx:function(n,t,e){var r=i.track.idxToDist(n,t);if(r){var a=i.options.defaultAnimation;i.animator.start([{distance:r,duration:b(e||a,\"duration\",500),easing:b(e||a,\"easing\",(function(n){return 1+--n*n*n*n*n}))}])}},on:function(n,t,i){void 0===i&&(i=!1),e[n]||(e[n]=[]);var r=e[n].indexOf(t);r>-1?i&&delete e[n][r]:i||e[n].push(t)},options:n},function(){if(i.track=y(i),i.animator=k(i),t)for(var n=0,e=t;n<e.length;n++)(0,e[n])(i);i.track.init(i.options.initial||0),i.emit(\"created\")}(),i}(t,o([C(n,{drag:!0,mode:\"snap\",renderMode:\"precision\",rubberband:!0,selector:\".keen-slider__slide\"}),T,M,w],i||[],!0))}catch(n){console.error(n)}};function z(a,o){var u=n(),s=n();return t(a)&&i(a,(function(n,t){s.value&&s.value.update(n)})),e((function(){u.value&&(s.value=new E(u.value,t(a)?a.value:a,o))})),r((function(){s.value&&s.value.destroy()})),[u,s]}export{z as useKeenSlider};\n","<template>\n  <div class=\"group relative\">\n    <div class=\"relative h-full\" :class=\"containerClasses\">\n      <div ref=\"container\" class=\"keen-slider absolute flex bg-bgr h-full\">\n        <div\n          v-for=\"({ id, loaded, alt, title, src }, index) in slides\"\n          :key=\"id\"\n          class=\"keen-slider__slide lazy__slide relative h-full min-w-full\"\n        >\n          <img\n            :src=\"loaded ? src : ''\"\n            :alt=\"alt\"\n            :title=\"title\"\n            :class=\"[\n              coverFull ? 'w-full' : 'w-[inherit]',\n              imageHeight ? `h-[${imageHeight}]` : 'h-full',\n            ]\"\n            class=\"m-auto object-cover\"\n          />\n          <div\n            class=\"absolute inset-0 pointer-events-none *:pointer-events-auto\"\n          >\n            <slot name=\"overlay\" :index=\"index\" />\n          </div>\n        </div>\n      </div>\n      <div\n        v-for=\"(isActive, direction) in slideButtons\"\n        :key=\"direction\"\n        class=\"absolute top-0 h-full\"\n        :class=\"`${direction}-0`\"\n      >\n        <slot\n          v-if=\"isActive\"\n          :name=\"`${direction}-button`\"\n          :click=\"() => onSlideButtonClick(direction)\"\n        >\n          <div\n            class=\"flex h-full items-center\"\n            :class=\"direction === 'left' ? 'pl-4' : 'pr-4'\"\n            @click.stop=\"onSlideButtonClick(direction)\"\n            @mouseover=\"onSlideChangeIntent(direction)\"\n          >\n            <button\n              v-if=\"modern\"\n              class=\"p-2 rounded-full bg-bgr hover:bg-bgr-100 transition focus:bg-bgr-100 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover opacity-0 group-hover:opacity-80 focus:opacity-80\"\n              @focus=\"onSlideChangeIntent(direction)\"\n            >\n              <WebccIcon\n                :name=\"`site/arrow-${direction}`\"\n                class=\"h-4 w-4 text-txt\"\n                filled\n              />\n            </button>\n            <button\n              v-else\n              class=\"block p-1 rounded-lg bg-bgr bg-opacity-80 text-txt backdrop-blur-md transition-all opacity-0 duration-200 hover:scale-105 hover:bg-opacity-90 hover:shadow-md active:scale-100 group-hover:opacity-100\"\n            >\n              <WebccIcon\n                :name=\"`site/chevron-${direction}`\"\n                class=\"h-6 w-6 text-txt\"\n                filled\n              />\n            </button>\n          </div>\n        </slot>\n      </div>\n      <div class=\"absolute inset-0 pointer-events-none *:pointer-events-auto\">\n        <slot name=\"container-overlay\" />\n      </div>\n    </div>\n    <div\n      v-if=\"isMoreThenOneSlide && dots !== 'none'\"\n      class=\"flex w-full justify-center items-center\"\n      :class=\"dots === 'internal' ? 'gap-1 absolute bottom-2' : 'gap-2 p-4'\"\n    >\n      <span\n        v-for=\"index in paginationDots\"\n        :key=\"index\"\n        class=\"w-2 h-2 bg-bgr rounded-full transition-colors duration-300\"\n        :class=\"current === index ? dotsStyle.current : dotsStyle.default\"\n        @click.stop=\"slideTo(index)\"\n      />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport 'keen-slider/keen-slider.min.css'\nimport { useKeenSlider } from 'keen-slider/vue.es'\n\ninterface Slide extends MediaImage {\n  loaded?: boolean\n}\n\ntype DotsDisplayMode = 'external' | 'internal' | 'none'\n\nconst dotsStyle = computed(() => {\n  return props.dots === 'internal'\n    ? { current: 'opacity-100 w-2.5 h-2.5', default: 'opacity-60' }\n    : { current: 'bg-gray-700' }\n})\n\nconst props = withDefaults(\n  defineProps<{\n    images: MediaImage[]\n    containerClasses?: string\n    coverFull?: boolean\n    initial?: number\n    dots?: DotsDisplayMode\n    modern?: boolean\n    loop?: boolean\n    imageHeight?: string\n  }>(),\n  {\n    containerClasses: undefined,\n    coverFull: false,\n    initial: 0,\n    dots: 'none',\n    modern: false,\n    loop: true,\n    imageHeight: undefined,\n  },\n)\n\nconst emit = defineEmits<{\n  'slide-change': [index: number]\n  'slide-change-intent': [direction: ScrollDirectionHorizontal]\n  'slide-button-click': [direction: ScrollDirectionHorizontal]\n}>()\n\ndefineSlots<{\n  'overlay'(props: { index: number }): unknown\n  'left-button'(props: { click(): void }): unknown\n  'right-button'(props: { click(): void }): unknown\n  'container-overlay'(): unknown\n}>()\n\nconst current = ref(props.initial)\nconst slides = ref<Slide[]>([])\n\nconst isMoreThenOneSlide = computed(() => slides.value.length > 1)\n\nconst slideButtons = computed(() => ({\n  left: isMoreThenOneSlide.value && (props.loop || current.value > 0),\n  right:\n    isMoreThenOneSlide.value &&\n    (props.loop || current.value < slides.value.length - 1),\n}))\n\nsetImages(props.images)\n\nwatch(() => props.images, setImages)\n\nconst [container, slider] = useKeenSlider({\n  loop: props.loop,\n  initial: current.value,\n  defaultAnimation: { duration: 800 },\n  dragSpeed: 0.6,\n  dragStarted({ track }) {\n    onSlideChangeIntent(\n      track.details.abs - current.value > 0 ? 'right' : 'left',\n    )\n  },\n  slideChanged({ track }) {\n    current.value = positiveMod(track.details.rel, slides.value.length)\n    loadImagesAround(current.value)\n    emit('slide-change', track.details.rel)\n  },\n})\n\nfunction setImages(images: MediaImage[]) {\n  slides.value = images.map((image) => ({ ...image }))\n  loadImagesAround(current.value)\n  nextTick(() => slider.value?.update())\n}\n\n/**\n * Loads the given and surrounding images for smooth sliding.\n */\nfunction loadImagesAround(index: number) {\n  ;[index - 1, index, index + 1].forEach(loadImageAt)\n}\n\n/**\n * Marks the image at the given index as `loaded` to trigger its actual load and rendering.\n */\nfunction loadImageAt(index: number) {\n  const relativeIndex = index % slides.value.length\n  const image = slides.value.at(relativeIndex)\n  if (image) image.loaded = true\n}\n\nonBeforeUnmount(() => {\n  slider.value?.destroy()\n})\n\nfunction slideTo(index: number) {\n  slider.value?.moveToIdx(index)\n}\n\nfunction onSlideButtonClick(direction: ScrollDirectionHorizontal) {\n  const slideFn = direction === 'left' ? slider.value?.prev : slider.value?.next\n  slideFn?.()\n  emit('slide-button-click', direction)\n}\n\nfunction onSlideChangeIntent(direction: ScrollDirectionHorizontal) {\n  emit('slide-change-intent', direction)\n}\n\nconst maxDots = 5\nconst paginationDots = computed(() => {\n  if (props.dots === 'external')\n    return Array.from({ length: slides.value.length }, (_, i) => i)\n  const total = slides.value.length\n  const half = Math.ceil(maxDots / 2)\n\n  if (current.value < half) {\n    return Array.from({ length: Math.min(maxDots, total) }, (_, i) => i)\n  }\n  if (current.value > total - half) {\n    return Array.from(\n      { length: Math.min(maxDots, total) },\n      (_, i) => total - maxDots + i,\n    )\n  }\n  return Array.from({ length: maxDots }, (_, i) => current.value + 1 + i - half)\n})\n</script>\n","import { compact, isString } from 'lodash-es'\n\nexport type AccomImage = MediaItem & { id: MediaItemId }\n\nexport interface AccomData {\n  code: string\n  slug: string\n  type: { code: AccomType; translation?: string }\n  name: string\n  country: { name: string }\n  region: { name: string }\n  place: { name: string }\n  images: AccomImage[]\n}\n\ntype GetImageTransformationFn = (\n  image: AccomImage,\n  index: number,\n) => ImageTransformation\n\nconst trPrefix = 'www.components.hitbox.'\n\nexport function useAccomImageCollection(\n  accom: MaybeRefOrGetter<AccomData>,\n  getTransformationFn?: GetImageTransformationFn,\n) {\n  const { t } = useI18n()\n  const { buildImageUrl } = useURLs()\n\n  const _images = ref<AccomImage[]>()\n\n  const images = computed(() =>\n    (_images.value ?? toValue(accom).images).map((item, index) =>\n      buildImage(item, getTransformationFn?.(item, index)),\n    ),\n  )\n\n  const accomPrefix = computed(() => {\n    const { type, name, country, region, place } = toValue(accom)\n    const typeText = type.translation || t(`${trPrefix}Title.type.${type.code}`)\n\n    return compact([\n      [typeText, name].join(' '),\n      country.name,\n      region.name,\n      place.name,\n    ]).join(', ')\n  })\n\n  function buildImage(\n    image: AccomImage,\n    transformation?: ImageTransformation,\n  ): MediaImage {\n    const { code, slug } = toValue(accom)\n    const { id, type, tag, caption } = image\n\n    const src = id ? buildImageUrl(id, transformation) : ''\n    const title =\n      (tag && t(`${trPrefix}Gallery.${tag}`)) ||\n      (type && t(`${trPrefix}Gallery.${type}`)) ||\n      caption ||\n      ''\n    const alt = slug ? compact([accomPrefix.value, title]).join(', ') : code\n\n    return { id, src, title, alt }\n  }\n\n  function setImages(items: (MediaItemId | AccomImage)[]) {\n    const accomData = toValue(accom)\n    _images.value = items.map((item) =>\n      isString(item) ? createAccomImage(accomData, item) : item,\n    )\n  }\n\n  return { images, setImages }\n}\n\nexport function toAccomData(input: ResultDocument): AccomData\nexport function toAccomData(\n  input: TranslatedAccommodation,\n  season: Season,\n): AccomData\nexport function toAccomData(\n  input: ResultDocument | TranslatedAccommodation,\n  season?: Season,\n): AccomData {\n  return 'buildingtype' in input\n    ? mapResultDoc(input)\n    : mapTranslatedAccom(input, season!)\n}\n\nfunction mapTranslatedAccom(\n  accom: TranslatedAccommodation,\n  season: Season,\n): AccomData {\n  const { media, ...data } = accom\n\n  return {\n    ...data,\n    images: media[`images_${season}`].map((id) => ({ ...media.items[id], id })),\n  }\n}\n\nfunction mapResultDoc(doc: ResultDocument): AccomData {\n  const { type, country, region, place, image, ...data } = doc\n\n  return {\n    ...data,\n    type: { code: type },\n    country: { name: country },\n    region: { name: region },\n    place: { name: place },\n    images: compact([image]),\n  }\n}\n\n/**\n * Creates a new accommodation image based on its main image data and with the given `id`.\n *\n * Uses undefined `tag` for the new generated images because we cannot guarantee\n * that the image with another `id` has the same `tag` or `caption.\n *\n * @see https://jira.migros.net/browse/IHGWEBCC-1469\n */\nfunction createAccomImage(accom: AccomData, id: string): AccomImage {\n  const image = accom.images.at(0)\n\n  if (id === image?.id) return image\n\n  return {\n    id,\n    season: image?.season ?? getSeason(),\n    type: image?.type ?? 'outside',\n    order_s: image?.order_s ?? 0,\n    order_w: image?.order_w ?? 0,\n  }\n}\n","export function useAccommodation(code: string) {\n  async function getImages(season: Season) {\n    return (\n      (await useWebccApi().accommodationImages(code, season)).data.value ?? []\n    )\n  }\n\n  async function getVacancies() {\n    const { data } = await useWebccApi().accommodationVacancies(code, {\n      currency: useConfdata().currency,\n      maxage: useRuntimeConfig().public.maxage.vacancies,\n    })\n\n    return data.value ?? undefined\n  }\n\n  return { getImages, getVacancies }\n}\n","<template>\n  <ImageSlider\n    ref=\"gallery\"\n    :key=\"key\"\n    :images=\"images\"\n    :loop=\"false\"\n    modern\n    dots=\"internal\"\n    class=\"rounded-tl rounded-tr md:rounded-tr-none\"\n    @slide-change-intent.once=\"onSlideChangeIntent\"\n    @slide-button-click=\"onSlideButtonClick\"\n  >\n    <template #container-overlay>\n      <slot />\n    </template>\n  </ImageSlider>\n</template>\n\n<script setup lang=\"ts\">\nconst IMAGE_NEXT_PLACEHOLDER_ID = ''\n\nconst props = defineProps<{\n  accom: ResultDocument\n}>()\n\nconst screen = useScreen()\nconst tracking = useTracking()\n\nconst gallery = ref<HTMLElement>()\nconst isLoading = ref(false)\n\nconst key = computed(() => new Date().toISOString() + screen.current)\nconst isLoaded = computed(\n  () => !images.value.some(({ id }) => id === IMAGE_NEXT_PLACEHOLDER_ID),\n)\n\nuseIntersectionObserver(\n  gallery,\n  ([entry]) => {\n    if (screen.isSmall && entry?.isIntersecting) loadImageKeys()\n  },\n  { rootMargin: '200px 0px' },\n)\n\nconst { images, setImages } = useAccomImageCollection(\n  () => toAccomData(props.accom),\n  () => 'tr:n-srp_hitbox_xl',\n)\n\nonMounted(() => {\n  if (!props.accom.image) return\n\n  setImages([props.accom.image, ...Array(4).fill(IMAGE_NEXT_PLACEHOLDER_ID)])\n})\n\nasync function loadImageKeys() {\n  if (isLoaded.value || isLoading.value) return\n\n  isLoading.value = true\n  const season = useSeason(props.accom.trip?.checkin)\n  const imageIds = await useAccommodation(props.accom.code).getImages(season)\n  isLoading.value = false\n\n  if (!imageIds.length) return\n\n  setImages(imageIds)\n}\n\nfunction onSlideChangeIntent() {\n  loadImageKeys()\n}\n\nfunction onSlideButtonClick() {\n  tracking.handlers?.detail.galleryNavigation()\n}\n</script>\n","export async function imageMeta(_ctx, url) {\n  const meta = await _imageMeta(url).catch((err) => {\n    console.error(\"Failed to get image meta for \" + url, err + \"\");\n    return {\n      width: 0,\n      height: 0,\n      ratio: 0\n    };\n  });\n  return meta;\n}\nasync function _imageMeta(url) {\n  if (import.meta.server) {\n    const imageMeta2 = await import(\"image-meta\").then((r) => r.imageMeta);\n    const data = await fetch(url).then((res) => res.buffer());\n    const metadata = imageMeta2(data);\n    if (!metadata) {\n      throw new Error(`No metadata could be extracted from the image \\`${url}\\`.`);\n    }\n    const { width, height } = metadata;\n    const meta = {\n      width,\n      height,\n      ratio: width && height ? width / height : void 0\n    };\n    return meta;\n  }\n  if (typeof Image === \"undefined\") {\n    throw new TypeError(\"Image not supported\");\n  }\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    img.onload = () => {\n      const meta = {\n        width: img.width,\n        height: img.height,\n        ratio: img.width / img.height\n      };\n      resolve(meta);\n    };\n    img.onerror = (err) => reject(err);\n    img.src = url;\n  });\n}\n","export default function imageFetch(url) {\n  return fetch(cleanDoubleSlashes(url));\n}\nexport function getInt(x) {\n  if (typeof x === \"number\") {\n    return x;\n  }\n  if (typeof x === \"string\") {\n    return Number.parseInt(x, 10);\n  }\n  return void 0;\n}\nexport function getFileExtension(url = \"\") {\n  const extension = url.split(/[?#]/).shift().split(\"/\").pop().split(\".\").pop();\n  return extension;\n}\nexport function cleanDoubleSlashes(path = \"\") {\n  return path.replace(/(https?:\\/\\/)|(\\/)+/g, \"$1$2\");\n}\nexport function createMapper(map) {\n  return (key) => {\n    return key ? map[key] || key : map.missingValue;\n  };\n}\nexport function createOperationsGenerator({ formatter, keyMap, joinWith = \"/\", valueMap } = {}) {\n  if (!formatter) {\n    formatter = (key, value) => `${key}=${value}`;\n  }\n  if (keyMap && typeof keyMap !== \"function\") {\n    keyMap = createMapper(keyMap);\n  }\n  const map = valueMap || {};\n  Object.keys(map).forEach((valueKey) => {\n    if (typeof map[valueKey] !== \"function\") {\n      map[valueKey] = createMapper(map[valueKey]);\n    }\n  });\n  return (modifiers = {}) => {\n    const operations = Object.entries(modifiers).filter(([_, value]) => typeof value !== \"undefined\").map(([key, value]) => {\n      const mapper = map[key];\n      if (typeof mapper === \"function\") {\n        value = mapper(modifiers[key]);\n      }\n      key = typeof keyMap === \"function\" ? keyMap(key) : key;\n      return formatter(key, value);\n    });\n    return operations.join(joinWith);\n  };\n}\nexport function renderAttributesToString(attributes = {}) {\n  return Object.entries(attributes).map(([key, value]) => value ? `${key}=\"${value}\"` : \"\").filter(Boolean).join(\" \");\n}\nexport function renderTag(tag, attrs, contents) {\n  const html = `<${tag} ${renderAttributesToString(attrs)}>`;\n  if (!contents) {\n    return html;\n  }\n  return html + contents + `</${tag}>`;\n}\nexport function generateAlt(src = \"\") {\n  return src.split(/[?#]/).shift().split(\"/\").pop().split(\".\").shift();\n}\nexport function parseSize(input = \"\") {\n  if (typeof input === \"number\") {\n    return input;\n  }\n  if (typeof input === \"string\") {\n    if (input.replace(\"px\", \"\").match(/^\\d+$/g)) {\n      return Number.parseInt(input, 10);\n    }\n  }\n}\nexport function parseDensities(input = \"\") {\n  if (input === void 0 || !input.length) {\n    return [];\n  }\n  const densities = /* @__PURE__ */ new Set();\n  for (const density of input.split(\" \")) {\n    const d = Number.parseInt(density.replace(\"x\", \"\"));\n    if (d) {\n      densities.add(d);\n    }\n  }\n  return Array.from(densities);\n}\nexport function checkDensities(densities) {\n  if (densities.length === 0) {\n    throw new Error(\"`densities` must not be empty, configure to `1` to render regular size only (DPR 1.0)\");\n  }\n  if (import.meta.dev && Array.from(densities).some((d) => d > 2)) {\n    const _densities = densities;\n    if (!_densities._warned) {\n      console.warn(\"[nuxt] [image] Density values above `2` are not recommended. See https://observablehq.com/@eeeps/visual-acuity-and-device-pixel-ratio.\");\n    }\n    _densities._warned = true;\n  }\n}\nexport function parseSizes(input) {\n  const sizes = {};\n  if (typeof input === \"string\") {\n    for (const entry of input.split(/[\\s,]+/).filter((e) => e)) {\n      const s = entry.split(\":\");\n      if (s.length !== 2) {\n        sizes[\"1px\"] = s[0].trim();\n      } else {\n        sizes[s[0].trim()] = s[1].trim();\n      }\n    }\n  } else {\n    Object.assign(sizes, input);\n  }\n  return sizes;\n}\n","import { defu } from \"defu\";\nimport { hasProtocol, parseURL, joinURL, withLeadingSlash } from \"ufo\";\nimport { imageMeta } from \"./utils/meta.mjs\";\nimport { checkDensities, parseDensities, parseSize, parseSizes } from \"./utils/index.mjs\";\nimport { prerenderStaticImages } from \"./utils/prerender.mjs\";\nexport function createImage(globalOptions) {\n  const ctx = {\n    options: globalOptions\n  };\n  const getImage = (input, options = {}) => {\n    const image = resolveImage(ctx, input, options);\n    if (import.meta.server && process.env.prerender) {\n      prerenderStaticImages(image.url);\n    }\n    return image;\n  };\n  const $img = (input, modifiers = {}, options = {}) => {\n    return getImage(input, {\n      ...options,\n      modifiers: defu(modifiers, options.modifiers || {})\n    }).url;\n  };\n  for (const presetName in globalOptions.presets) {\n    $img[presetName] = (source, modifiers, options) => $img(source, modifiers, { ...globalOptions.presets[presetName], ...options });\n  }\n  $img.options = globalOptions;\n  $img.getImage = getImage;\n  $img.getMeta = (input, options) => getMeta(ctx, input, options);\n  $img.getSizes = (input, options) => getSizes(ctx, input, options);\n  ctx.$img = $img;\n  return $img;\n}\nasync function getMeta(ctx, input, options) {\n  const image = resolveImage(ctx, input, { ...options });\n  if (typeof image.getMeta === \"function\") {\n    return await image.getMeta();\n  } else {\n    return await imageMeta(ctx, image.url);\n  }\n}\nfunction resolveImage(ctx, input, options) {\n  if (input && typeof input !== \"string\") {\n    throw new TypeError(`input must be a string (received ${typeof input}: ${JSON.stringify(input)})`);\n  }\n  if (!input || input.startsWith(\"data:\")) {\n    return {\n      url: input\n    };\n  }\n  const { provider, defaults } = getProvider(ctx, options.provider || ctx.options.provider);\n  const preset = getPreset(ctx, options.preset);\n  input = hasProtocol(input) ? input : withLeadingSlash(input);\n  if (!provider.supportsAlias) {\n    for (const base in ctx.options.alias) {\n      if (input.startsWith(base)) {\n        input = joinURL(ctx.options.alias[base], input.substr(base.length));\n      }\n    }\n  }\n  if (provider.validateDomains && hasProtocol(input)) {\n    const inputHost = parseURL(input).host;\n    if (!ctx.options.domains.find((d) => d === inputHost)) {\n      return {\n        url: input\n      };\n    }\n  }\n  const _options = defu(options, preset, defaults);\n  _options.modifiers = { ..._options.modifiers };\n  const expectedFormat = _options.modifiers.format;\n  if (_options.modifiers?.width) {\n    _options.modifiers.width = parseSize(_options.modifiers.width);\n  }\n  if (_options.modifiers?.height) {\n    _options.modifiers.height = parseSize(_options.modifiers.height);\n  }\n  const image = provider.getImage(input, _options, ctx);\n  image.format = image.format || expectedFormat || \"\";\n  return image;\n}\nfunction getProvider(ctx, name) {\n  const provider = ctx.options.providers[name];\n  if (!provider) {\n    throw new Error(\"Unknown provider: \" + name);\n  }\n  return provider;\n}\nfunction getPreset(ctx, name) {\n  if (!name) {\n    return {};\n  }\n  if (!ctx.options.presets[name]) {\n    throw new Error(\"Unknown preset: \" + name);\n  }\n  return ctx.options.presets[name];\n}\nfunction getSizes(ctx, input, opts) {\n  const width = parseSize(opts.modifiers?.width);\n  const height = parseSize(opts.modifiers?.height);\n  const sizes = parseSizes(opts.sizes);\n  const densities = opts.densities?.trim() ? parseDensities(opts.densities.trim()) : ctx.options.densities;\n  checkDensities(densities);\n  const hwRatio = width && height ? height / width : 0;\n  const sizeVariants = [];\n  const srcsetVariants = [];\n  if (Object.keys(sizes).length >= 1) {\n    for (const key in sizes) {\n      const variant = getSizesVariant(key, String(sizes[key]), height, hwRatio, ctx);\n      if (variant === void 0) {\n        continue;\n      }\n      sizeVariants.push({\n        size: variant.size,\n        screenMaxWidth: variant.screenMaxWidth,\n        media: `(max-width: ${variant.screenMaxWidth}px)`\n      });\n      for (const density of densities) {\n        srcsetVariants.push({\n          width: variant._cWidth * density,\n          src: getVariantSrc(ctx, input, opts, variant, density)\n        });\n      }\n    }\n    finaliseSizeVariants(sizeVariants);\n  } else {\n    for (const density of densities) {\n      const key = Object.keys(sizes)[0];\n      let variant = getSizesVariant(key, String(sizes[key]), height, hwRatio, ctx);\n      if (variant === void 0) {\n        variant = {\n          size: \"\",\n          screenMaxWidth: 0,\n          _cWidth: opts.modifiers?.width,\n          _cHeight: opts.modifiers?.height\n        };\n      }\n      srcsetVariants.push({\n        width: density,\n        src: getVariantSrc(ctx, input, opts, variant, density)\n      });\n    }\n  }\n  finaliseSrcsetVariants(srcsetVariants);\n  const defaultVariant = srcsetVariants[srcsetVariants.length - 1];\n  const sizesVal = sizeVariants.length ? sizeVariants.map((v) => `${v.media ? v.media + \" \" : \"\"}${v.size}`).join(\", \") : void 0;\n  const suffix = sizesVal ? \"w\" : \"x\";\n  const srcsetVal = srcsetVariants.map((v) => `${v.src} ${v.width}${suffix}`).join(\", \");\n  return {\n    sizes: sizesVal,\n    srcset: srcsetVal,\n    src: defaultVariant?.src\n  };\n}\nfunction getSizesVariant(key, size, height, hwRatio, ctx) {\n  const screenMaxWidth = ctx.options.screens && ctx.options.screens[key] || Number.parseInt(key);\n  const isFluid = size.endsWith(\"vw\");\n  if (!isFluid && /^\\d+$/.test(size)) {\n    size = size + \"px\";\n  }\n  if (!isFluid && !size.endsWith(\"px\")) {\n    return void 0;\n  }\n  let _cWidth = Number.parseInt(size);\n  if (!screenMaxWidth || !_cWidth) {\n    return void 0;\n  }\n  if (isFluid) {\n    _cWidth = Math.round(_cWidth / 100 * screenMaxWidth);\n  }\n  const _cHeight = hwRatio ? Math.round(_cWidth * hwRatio) : height;\n  return {\n    size,\n    screenMaxWidth,\n    _cWidth,\n    _cHeight\n  };\n}\nfunction getVariantSrc(ctx, input, opts, variant, density) {\n  return ctx.$img(\n    input,\n    {\n      ...opts.modifiers,\n      width: variant._cWidth ? variant._cWidth * density : void 0,\n      height: variant._cHeight ? variant._cHeight * density : void 0\n    },\n    opts\n  );\n}\nfunction finaliseSizeVariants(sizeVariants) {\n  sizeVariants.sort((v1, v2) => v1.screenMaxWidth - v2.screenMaxWidth);\n  let previousMedia = null;\n  for (let i = sizeVariants.length - 1; i >= 0; i--) {\n    const sizeVariant = sizeVariants[i];\n    if (sizeVariant.media === previousMedia) {\n      sizeVariants.splice(i, 1);\n    }\n    previousMedia = sizeVariant.media;\n  }\n  for (let i = 0; i < sizeVariants.length; i++) {\n    sizeVariants[i].media = sizeVariants[i + 1]?.media || \"\";\n  }\n}\nfunction finaliseSrcsetVariants(srcsetVariants) {\n  srcsetVariants.sort((v1, v2) => v1.width - v2.width);\n  let previousWidth = null;\n  for (let i = srcsetVariants.length - 1; i >= 0; i--) {\n    const sizeVariant = srcsetVariants[i];\n    if (sizeVariant.width === previousWidth) {\n      srcsetVariants.splice(i, 1);\n    }\n    previousWidth = sizeVariant.width;\n  }\n}\n","import { joinURL, encodePath, encodeParam } from \"ufo\";\nimport { createOperationsGenerator } from \"#image\";\nconst operationsGenerator = createOperationsGenerator({\n  keyMap: {\n    format: \"f\",\n    fit: \"fit\",\n    width: \"w\",\n    height: \"h\",\n    resize: \"s\",\n    quality: \"q\",\n    background: \"b\"\n  },\n  joinWith: \"&\",\n  formatter: (key, val) => encodeParam(key) + \"_\" + encodeParam(val)\n});\nexport const getImage = (src, { modifiers = {}, baseURL } = {}, ctx) => {\n  if (modifiers.width && modifiers.height) {\n    modifiers.resize = `${modifiers.width}x${modifiers.height}`;\n    delete modifiers.width;\n    delete modifiers.height;\n  }\n  const params = operationsGenerator(modifiers) || \"_\";\n  if (!baseURL) {\n    baseURL = joinURL(ctx.options.nuxt.baseURL, \"/_ipx\");\n  }\n  return {\n    url: joinURL(baseURL, params, encodePath(src))\n  };\n};\nexport const validateDomains = true;\nexport const supportsAlias = true;\n","\nimport * as ipxRuntime$6fvceTRRcZ from '/myapp/node_modules/@nuxt/image/dist/runtime/providers/ipx'\n\nexport const imageOptions = {\n  \"screens\": {\n    \"xs\": 320,\n    \"sm\": 640,\n    \"md\": 768,\n    \"lg\": 1024,\n    \"xl\": 1280,\n    \"xxl\": 1536,\n    \"2xl\": 1536\n  },\n  \"presets\": {},\n  \"provider\": \"ipx\",\n  \"domains\": [],\n  \"alias\": {},\n  \"densities\": [\n    1,\n    2\n  ],\n  \"format\": [\n    \"webp\"\n  ]\n}\n\nimageOptions.providers = {\n  ['ipx']: { provider: ipxRuntime$6fvceTRRcZ, defaults: {} }\n}\n        ","import { createImage } from \"./image.mjs\";\nimport { imageOptions } from \"#build/image-options\";\nimport { useNuxtApp, useRuntimeConfig } from \"#imports\";\nexport const useImage = () => {\n  const config = useRuntimeConfig();\n  const nuxtApp = useNuxtApp();\n  return nuxtApp.$img || nuxtApp._img || (nuxtApp._img = createImage({\n    ...imageOptions,\n    nuxt: {\n      baseURL: config.app.baseURL\n    }\n  }));\n};\n","export function markFeatureUsage(featureName) {\n  performance?.mark?.(\"mark_feature_usage\", {\n    detail: {\n      feature: featureName\n    }\n  });\n}\n","import { computed } from \"vue\";\nimport { parseSize } from \"../utils/index.mjs\";\nimport { useImage } from \"#imports\";\nexport const baseImageProps = {\n  // input source\n  src: { type: String, default: void 0 },\n  // modifiers\n  format: { type: String, default: void 0 },\n  quality: { type: [Number, String], default: void 0 },\n  background: { type: String, default: void 0 },\n  fit: { type: String, default: void 0 },\n  modifiers: { type: Object, default: void 0 },\n  // options\n  preset: { type: String, default: void 0 },\n  provider: { type: String, default: void 0 },\n  sizes: { type: [Object, String], default: void 0 },\n  densities: { type: String, default: void 0 },\n  preload: {\n    type: [Boolean, Object],\n    default: void 0\n  },\n  // <img> attributes\n  width: { type: [String, Number], default: void 0 },\n  height: { type: [String, Number], default: void 0 },\n  alt: { type: String, default: void 0 },\n  referrerpolicy: { type: String, default: void 0 },\n  usemap: { type: String, default: void 0 },\n  longdesc: { type: String, default: void 0 },\n  ismap: { type: Boolean, default: void 0 },\n  loading: {\n    type: String,\n    default: void 0,\n    validator: (val) => [\"lazy\", \"eager\"].includes(val)\n  },\n  crossorigin: {\n    type: [Boolean, String],\n    default: void 0,\n    validator: (val) => [\"anonymous\", \"use-credentials\", \"\", true, false].includes(val)\n  },\n  decoding: {\n    type: String,\n    default: void 0,\n    validator: (val) => [\"async\", \"auto\", \"sync\"].includes(val)\n  },\n  // csp\n  nonce: { type: [String], default: void 0 }\n};\nexport const useBaseImage = (props) => {\n  const options = computed(() => {\n    return {\n      provider: props.provider,\n      preset: props.preset\n    };\n  });\n  const attrs = computed(() => {\n    return {\n      width: parseSize(props.width),\n      height: parseSize(props.height),\n      alt: props.alt,\n      referrerpolicy: props.referrerpolicy,\n      usemap: props.usemap,\n      longdesc: props.longdesc,\n      ismap: props.ismap,\n      crossorigin: props.crossorigin === true ? \"anonymous\" : props.crossorigin || void 0,\n      loading: props.loading,\n      decoding: props.decoding,\n      nonce: props.nonce\n    };\n  });\n  const $img = useImage();\n  const modifiers = computed(() => {\n    return {\n      ...props.modifiers,\n      width: parseSize(props.width),\n      height: parseSize(props.height),\n      format: props.format,\n      quality: props.quality || $img.options.quality,\n      background: props.background,\n      fit: props.fit\n    };\n  });\n  return {\n    options,\n    attrs,\n    modifiers\n  };\n};\n","import { h, defineComponent, ref, computed, onMounted } from \"vue\";\nimport { useImage } from \"../composables.mjs\";\nimport { parseSize } from \"../utils/index.mjs\";\nimport { prerenderStaticImages } from \"../utils/prerender.mjs\";\nimport { markFeatureUsage } from \"../utils/performance.mjs\";\nimport { baseImageProps, useBaseImage } from \"./_base.mjs\";\nimport { useHead, useNuxtApp } from \"#imports\";\nexport const imgProps = {\n  ...baseImageProps,\n  placeholder: { type: [Boolean, String, Number, Array], default: void 0 },\n  placeholderClass: { type: String, default: void 0 }\n};\nexport default defineComponent({\n  name: \"NuxtImg\",\n  props: imgProps,\n  emits: [\"load\", \"error\"],\n  setup: (props, ctx) => {\n    const $img = useImage();\n    const _base = useBaseImage(props);\n    const placeholderLoaded = ref(false);\n    const imgEl = ref();\n    const sizes = computed(() => $img.getSizes(props.src, {\n      ..._base.options.value,\n      sizes: props.sizes,\n      densities: props.densities,\n      modifiers: {\n        ..._base.modifiers.value,\n        width: parseSize(props.width),\n        height: parseSize(props.height)\n      }\n    }));\n    const attrs = computed(() => {\n      const attrs2 = { ..._base.attrs.value, \"data-nuxt-img\": \"\" };\n      if (!props.placeholder || placeholderLoaded.value) {\n        attrs2.sizes = sizes.value.sizes;\n        attrs2.srcset = sizes.value.srcset;\n      }\n      return attrs2;\n    });\n    const placeholder = computed(() => {\n      let placeholder2 = props.placeholder;\n      if (placeholder2 === \"\") {\n        placeholder2 = true;\n      }\n      if (!placeholder2 || placeholderLoaded.value) {\n        return false;\n      }\n      if (typeof placeholder2 === \"string\") {\n        return placeholder2;\n      }\n      const size = Array.isArray(placeholder2) ? placeholder2 : typeof placeholder2 === \"number\" ? [placeholder2, placeholder2] : [10, 10];\n      return $img(props.src, {\n        ..._base.modifiers.value,\n        width: size[0],\n        height: size[1],\n        quality: size[2] || 50,\n        blur: size[3] || 3\n      }, _base.options.value);\n    });\n    const mainSrc = computed(\n      () => props.sizes ? sizes.value.src : $img(props.src, _base.modifiers.value, _base.options.value)\n    );\n    const src = computed(() => placeholder.value ? placeholder.value : mainSrc.value);\n    if (props.preload) {\n      const isResponsive = Object.values(sizes.value).every((v) => v);\n      useHead({\n        link: [{\n          rel: \"preload\",\n          as: \"image\",\n          nonce: props.nonce,\n          ...!isResponsive ? { href: src.value } : {\n            href: sizes.value.src,\n            imagesizes: sizes.value.sizes,\n            imagesrcset: sizes.value.srcset\n          },\n          ...typeof props.preload !== \"boolean\" && props.preload.fetchPriority ? { fetchpriority: props.preload.fetchPriority } : {}\n        }]\n      });\n    }\n    if (import.meta.server && process.env.prerender) {\n      prerenderStaticImages(src.value, sizes.value.srcset);\n    }\n    const nuxtApp = useNuxtApp();\n    const initialLoad = nuxtApp.isHydrating;\n    onMounted(() => {\n      if (placeholder.value) {\n        const img = new Image();\n        img.src = mainSrc.value;\n        if (props.sizes) {\n          img.sizes = sizes.value.sizes || \"\";\n          img.srcset = sizes.value.srcset;\n        }\n        img.onload = (event) => {\n          placeholderLoaded.value = true;\n          ctx.emit(\"load\", event);\n        };\n        markFeatureUsage(\"nuxt-image\");\n        return;\n      }\n      if (!imgEl.value) {\n        return;\n      }\n      if (imgEl.value.complete && initialLoad) {\n        if (imgEl.value.getAttribute(\"data-error\")) {\n          ctx.emit(\"error\", new Event(\"error\"));\n        } else {\n          ctx.emit(\"load\", new Event(\"load\"));\n        }\n      }\n      imgEl.value.onload = (event) => {\n        ctx.emit(\"load\", event);\n      };\n      imgEl.value.onerror = (event) => {\n        ctx.emit(\"error\", event);\n      };\n    });\n    return () => h(\"img\", {\n      ref: imgEl,\n      ...import.meta.server ? { onerror: \"this.setAttribute('data-error', 1)\" } : {},\n      ...attrs.value,\n      ...ctx.attrs,\n      class: props.placeholder && !placeholderLoaded.value ? [props.placeholderClass] : void 0,\n      src: src.value\n    });\n  }\n});\n","<template>\n  <VTooltip\n    placement=\"bottom-end\"\n    :triggers=\"['click', 'hover']\"\n    popper-class=\"custom-tooltip\"\n  >\n    <slot />\n    <template #popper>\n      <slot name=\"content\" />\n    </template>\n  </VTooltip>\n</template>\n\n<style>\n.custom-tooltip {\n  .v-popper__inner {\n    background: var(--color-contrast);\n    padding: 0.75rem 1.5rem;\n    max-width: 21.125rem;\n  }\n  .v-popper__arrow-outer {\n    border-color: var(--color-contrast);\n  }\n}\n</style>\n","<template>\n  <WebccTooltip>\n    <NuxtImg\n      v-if=\"isVisible\"\n      :src=\"`/images/${name}.svg`\"\n      :class=\"size\"\n      @click.stop\n    />\n    <template #content>\n      {{ $t(`${trPrefix}sustainabilityTooltip`) }}\n    </template>\n  </WebccTooltip>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.'\n\nconst props = defineProps<{\n  accom?: ResultDocument\n  small?: boolean\n}>()\n\nconst isVisible = computed(() => !!props.accom?.tags?.includes('sustainable'))\nconst name = computed(() => (props.small ? 'ecomodation-small' : 'ecomodation'))\nconst size = computed(() => (props.small ? 'w-6 h-8' : 'w-20 h-10'))\n</script>\n","<template>\n  <section class=\"flex flex-wrap text-ctr\">\n    <RedesignTextLoading v-if=\"loading\" class=\"w-2/3\" />\n    <template v-for=\"(count, key) in features\" v-else :key=\"key\">\n      <span class=\"whitespace-nowrap\">\n        {{ $t(`${trPrefix}${key}`, count) }}\n      </span>\n      <span class=\"last:hidden mx-1 font-bold\">&bull;</span>\n    </template>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.Features.'\n\nconst props = defineProps<{\n  accom?: ResultDocument\n  loading?: boolean\n}>()\n\nconst features = computed(() => ({\n  pax_s: props.accom?.pax,\n  room_s: props.accom?.rooms,\n  bedroom_s: props.accom?.bedrooms,\n  bathroom_s: props.accom?.bathrooms,\n}))\n</script>\n","import clamp from 'lodash-es/clamp'\n\nexport const RATING_MIN = 0.1\nexport const RATING_MAX = 5\nexport const RATING_DELIM = '/'\n\nexport type RatingRounded = 1 | 2 | 3 | 4 | 5\nexport type RatingHeart = 0 | 0.5 | 1\n\nexport function roundRating(rating: number): RatingRounded | 0 {\n  return rating > 0\n    ? (clamp(\n        Math.round(rating),\n        Math.ceil(RATING_MIN),\n        RATING_MAX,\n      ) as RatingRounded)\n    : 0\n}\n\nexport function roundRatingToDecimal(rating: number): number {\n  return rating > 0\n    ? clamp(Math.round(rating * 10) / 10, RATING_MIN, RATING_MAX)\n    : 0\n}\n\nexport function formatRating(rating: number, locale?: string): string {\n  if (rating <= 0) return ''\n\n  return new Intl.NumberFormat(locale, {\n    style: 'decimal',\n    minimumFractionDigits: 0,\n    maximumFractionDigits: 1,\n  }).format(rating)\n}\n\nexport function getRatingText(rating: number, locale?: string): string {\n  if (rating <= 0) return ''\n\n  return [formatRating(rating, locale), RATING_DELIM, RATING_MAX].join(' ')\n}\n\nexport function getRatingHearts(rating: number): RatingHeart[] {\n  return Array.from({ length: RATING_MAX }, (_, index) => {\n    const delta = rating - index - 0.5\n    if (delta < -(!index && rating ? 0.5 : 0.25)) return 0\n    if (delta >= 0.25) return 1\n    return 0.5\n  })\n}\n","export default function useRating(rating: MaybeRefOrGetter<number>) {\n  const i18n = useI18n()\n\n  const value = computed(() => roundRatingToDecimal(toValue(rating)))\n  const rounded = computed(() => roundRating(toValue(rating)))\n  const formatted = computed(() => formatRating(value.value, i18n.locale))\n  const delim = computed(() => RATING_DELIM)\n  const max = computed(() => RATING_MAX)\n  const text = computed(() => getRatingText(value.value, i18n.locale))\n\n  return { value, formatted, rounded, delim, max, text }\n}\n","<template>\n  <section\n    v-if=\"(accom && rating!.value.value) || loading\"\n    class=\"flex items-center\"\n  >\n    <span\n      class=\"rounded-bl-none text-thm-contrast font-bold\"\n      :class=\"[\n        loading ? 'bg-gray-200 w-16' : 'bg-thm',\n        small ? 'rounded py-0.5 px-1.5' : 'rounded-lg py-1 px-2.5',\n      ]\"\n    >\n      <template v-if=\"loading\">&nbsp;</template>\n      <template v-else>{{ rating!.text }}</template>\n    </span>\n    <span v-if=\"!loading\" class=\"ml-1\">\n      ({{ $t(`${trPrefix}review_s`, accom?.reviews) }})\n    </span>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.Rating.'\n\nconst props = defineProps<{\n  accom?: ResultDocument\n  small?: boolean\n  loading?: boolean\n}>()\n\nconst rating = props.accom ? useRating(() => props.accom!.rating) : undefined\n</script>\n","type NUMBER_FORMAT_TYPES = '2-digits' | 'symbol,2-digits' | 'symbol'\n\nconst formats: Record<NUMBER_FORMAT_TYPES, Intl.NumberFormatOptions> = {\n  '2-digits': {\n    currencyDisplay: 'code', // symbol | code | name\n    minimumFractionDigits: 2,\n    maximumFractionDigits: 2,\n  },\n  'symbol,2-digits': {\n    currencyDisplay: 'symbol',\n    minimumFractionDigits: 2,\n    maximumFractionDigits: 2,\n  },\n  symbol: {\n    currencyDisplay: 'symbol',\n  },\n}\n\nexport function formatCurrency(\n  amount: number,\n  options: Intl.NumberFormatOptions | NUMBER_FORMAT_TYPES = {},\n  currency?: string,\n) {\n  const conf = useConfdata()\n  if (\n    amount === Infinity ||\n    amount === -Infinity ||\n    (amount !== 0 && !amount)\n  ) {\n    return ''\n  }\n\n  // if (!$ab) {\n  //   console.error(\n  //     'The currency functionality of the localize plugin is currently involved in an A/B-Test. To ensure proper functionality, please add @ihgroup/ab plugin to this project.'\n  //   )\n  // }\n\n  // if ($ab && $ab('currency') && Object.keys(options).length === 0) {\n  //   options = { maximumFractionDigits: 0, minimumFractionDigits: 0, useGrouping: false }\n  // }\n\n  if (Object.keys(options).length === 0) {\n    options = {\n      maximumFractionDigits: 0,\n      minimumFractionDigits: 0,\n      useGrouping: false,\n    }\n  }\n\n  if (!currency) {\n    // default currency from conf api\n    currency = conf.currency\n  }\n\n  if (typeof options === 'string') {\n    options = formats[options] || ({} as Intl.NumberFormatOptions)\n  }\n\n  const numberFormatOptions: Intl.NumberFormatOptions = {\n    style: 'currency',\n    currency,\n    currencyDisplay: 'code', // symbol | code | name\n\n    ...options,\n  }\n  // https://jira.hotelplan.com/browse/HHDWEBCC-4556\n  const locale =\n    conf?.domain === 'www.interhome.ch' &&\n    ['fr-CH', 'it-CH', 'en-GB'].includes(useL10N().locale)\n      ? 'de-CH'\n      : useL10N().locale\n\n  const formatter = new Intl.NumberFormat(locale, numberFormatOptions)\n\n  return formatter.format(amount)\n}\n","export function useMoneyFormat(currency: MaybeRefOrGetter<string>) {\n  function toMoney(amount: number) {\n    return formatCurrency(amount, undefined, toValue(currency))\n  }\n\n  return { toMoney }\n}\n","<template>\n  <section class=\"flex gap-1 items-end leading-normal\">\n    <span>{{ $t(`${trPrefix}from`) }}</span>\n    <span class=\"font-semibold\" :class=\"small ? 'text-sm' : 'text-xl'\">\n      {{ perNight }}\n    </span>\n    <span>{{ $t(`${trPrefix}night`) }}</span>\n    <span>{{ '|' }}</span>\n    <span v-if=\"hasDiscount\" class=\"text-hlt-hover line-through\">\n      {{ orig }}\n    </span>\n    <span> {{ current }}</span>\n    <span>{{ $t(`${trPrefix}total`).toLowerCase() }}</span>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.Price.'\n\nconst props = defineProps<{\n  trip: Trip\n  currency: string\n  small?: boolean\n}>()\n\nconst { toMoney } = useMoneyFormat(() => props.currency)\n\nconst hasDiscount = computed(() => !!props.trip.reduction)\nconst orig = computed(() => toMoney(getTripOrigPrice(props.trip)))\nconst current = computed(() => toMoney(props.trip.price))\nconst perNight = computed(() => toMoney(props.trip.pricePerNight ?? 0))\n</script>\n","export function findTargetA(event: Event): HTMLAnchorElement | null {\n  let target = (event.target || event.srcElement) as HTMLElement | null\n\n  while (target && target?.tagName !== 'A') {\n    target = target?.parentElement\n  }\n\n  return target as HTMLAnchorElement | null\n}\n\nexport function isNumericKey({ key }: KeyboardEvent) {\n  return /\\d/.test(key)\n}\n\nexport function isEnterOrSpaceKey({ key }: KeyboardEvent) {\n  return ['Enter', ' '].includes(key)\n}\n","<template>\n  <article\n    ref=\"card\"\n    class=\"grid rounded-lg border border-brd overflow-hidden text-wrn-contrast transition focus:bg-bgr-100 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover\"\n    tabindex=\"0\"\n    :class=\"[\n      vertical ? 'grid-cols-1 text-xs' : 'grid-cols-5',\n      { 'cursor-pointer': !loading, 'animate-pulse': loading },\n    ]\"\n    :aria-busy=\"loading\"\n    data-id=\"accommodation-card\"\n    @click.prevent.stop=\"openDetailPage\"\n    @keydown=\"handleKeydown\"\n  >\n    <RedesignAccomCardGallery\n      v-if=\"!loading && accom\"\n      :key=\"vertical?.toString()\"\n      :accom\n      :class=\"vertical ? 'max-h-52' : 'col-span-2 h-full max-h-64'\"\n      @click.stop=\"openDetailPage\"\n    >\n      <RedesignAccomCardTags :accom class=\"absolute left-2 top-3\" />\n      <RedesignAccomCardTripTags\n        v-if=\"trip && showTripTag\"\n        :trip\n        class=\"absolute left-2 bottom-3\"\n      />\n      <client-only>\n        <RedesignAccomCardBookmark\n          v-if=\"accom\"\n          :accom\n          class=\"absolute right-2 top-2\"\n        />\n      </client-only>\n    </RedesignAccomCardGallery>\n    <div\n      v-else\n      :class=\"['bg-gray-200', vertical ? 'h-52' : 'col-span-2 h-64']\"\n    />\n\n    <main\n      class=\"flex flex-col pt-4 pb-3 w-full h-full relative\"\n      :class=\"vertical ? [gap, 'px-2'] : [gap, 'col-span-3 px-3']\"\n    >\n      <section class=\"flex justify-between gap-2\">\n        <div class=\"flex flex-col truncate\" :class=\"gap\">\n          <section :class=\"{ 'opacity-25': loading || !accom }\">\n            <RedesignWebccStars :stars=\"accom?.stars ?? 5\" />\n          </section>\n          <RedesignAccomCardName :loading :accom :small=\"vertical\" />\n        </div>\n        <div class=\"shrink-0\" :class=\"vertical ? 'mr-1 -mt-2' : '-mt-1'\">\n          <RedesignAccomCardEco v-if=\"accom\" :accom :small=\"vertical\" />\n        </div>\n      </section>\n\n      <section class=\"flex flex-col w-full\" :class=\"gap\">\n        <RedesignAccomCardLocation v-if=\"!loading && accom\" :accom />\n        <RedesignTextLoading v-else class=\"w-1/2\" />\n        <RedesignAccomCardFeatures :loading :accom />\n        <RedesignAccomCardRating\n          :loading\n          :accom\n          :small=\"vertical\"\n          class=\"my-1.5\"\n        />\n      </section>\n\n      <section class=\"flex flex-col h-full justify-end\">\n        <div class=\"flex flex-row justify-between items-center\">\n          <RedesignAccomCardPrice\n            v-if=\"trip && !loading\"\n            :trip\n            :currency\n            :small=\"vertical\"\n          />\n          <RedesignTextLoading v-if=\"loading\" class=\"w-1/2\" />\n          <WebccButton\n            v-if=\"!vertical\"\n            variant=\"cta\"\n            :disabled=\"loading\"\n            @click.stop=\"openDetailPage\"\n          >\n            {{ $t(`${trPrefix}discover`) }}\n          </WebccButton>\n        </div>\n      </section>\n    </main>\n  </article>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.'\n\nconst props = defineProps<{\n  accom?: ResultDocument\n  currency: string\n  vertical?: boolean\n  showTripTag?: boolean\n  loading?: boolean\n}>()\n\nconst { buildAccommodationUrl } = useURLs()\nconst tracking = useTracking()\n\nconst card = ref<HTMLElement>()\nconst { focused } = useFocus(card)\n\nconst trip = computed(() => props.accom?.trip)\nconst url = computed(() =>\n  props.accom ? buildAccommodationUrl(props.accom).href : undefined,\n)\nconst gap = computed(() => (props.vertical ? 'gap-1.5' : 'gap-2'))\n\nfunction handleKeydown(event: KeyboardEvent) {\n  if (!focused.value) return\n  if (!isEnterOrSpaceKey(event)) return\n\n  openDetailPage()\n}\n\nfunction openDetailPage() {\n  if (!props.accom) return\n  tracking.handlers?.ecommerce.selectItem(props.accom)\n  tracking.handlers?.eec.productClick(props.accom)\n  navigateTo(url.value, { open: { target: '_blank' } })\n}\n</script>\n","<template>\n  <div\n    class=\"grid gap-6 grid-cols-1\"\n    :class=\"{ 'sm:grid-cols-2 lg:grid-cols-3': isGridView }\"\n    data-id=\"search-result-list\"\n  >\n    <template\n      v-for=\"(accom, index) in loading ? STUB_ITEMS : items\"\n      :key=\"\n        accom ? JSON.stringify(pick(accom, 'code', 'trip')) : `accom-${index}`\n      \"\n    >\n      <RedesignAccomCard\n        v-track:impression=\"{ event: 'search:objectImpression' }\"\n        :accom\n        :currency=\"confData.currency\"\n        :vertical=\"isGridView\"\n        :show-trip-tag\n        :loading\n      />\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { pick } from 'lodash-es'\nimport type { SearchApiResultDocument } from '~/api/search-api.types'\n\nconst PAGE_SIZE = 20\nconst STUB_ITEMS = Array.from<undefined>({ length: PAGE_SIZE })\n\nconst props = withDefaults(\n  defineProps<{\n    layout?: 'list' | 'grid'\n    items?: SearchApiResultDocument[]\n    loading?: boolean\n    showTripTag?: boolean\n  }>(),\n  {\n    layout: 'list',\n    items: () => [] as SearchApiResultDocument[],\n    loading: false,\n    showTripTag: false,\n  },\n)\n\nconst confData = useConfdata()\nconst screen = useScreen()\n\nconst isGridView = computed(() => props.layout === 'grid' || !screen.isLarge)\n\n// async function loadPage(page: number) {\n//   tracking.handlers?.search.paging({ current: page, total: pagesTotal.value })\n//   await search.setFilter({ page })\n//   startRef.value?.scrollIntoView({ behavior: 'smooth' })\n// }\n</script>\n","<template>\n  <nav\n    class=\"flex min-h-[2rem] w-full items-center justify-center gap-6 text-txt-strongest\"\n    role=\"navigation\"\n    aria-label=\"pagination\"\n  >\n    <WebccLink\n      v-show=\"active > 1 && active <= total\"\n      :to=\"prev.url\"\n      @click.prevent=\"onSelect(prev.index)\"\n    >\n      <WebccIcon class=\"text-txt h-5 w-5\" name=\"site/chevron-left\" filled />\n    </WebccLink>\n    <ul class=\"flex flex-wrap items-center justify-center gap-3 text-xl\">\n      <li v-for=\"(item, i) in items\" :key=\"i\">\n        <WebccLink\n          v-if=\"item\"\n          :to=\"item.url\"\n          class=\"rounded border border-transparent px-2.5 py-1 transition-all hover:border-bgr-400\"\n          :class=\"{\n            'border-txt-strongest bg-bgr hover:border-txt-strongest':\n              item.index === active,\n          }\"\n          :aria-label=\"item.index.toString()\"\n          aria-current=\"page\"\n          :disabled=\"active === item.index\"\n          @click.prevent=\"onSelect(item.index)\"\n        >\n          {{ item.index }}\n        </WebccLink>\n        <span v-else>&hellip;</span>\n      </li>\n    </ul>\n    <WebccLink\n      v-show=\"active < total\"\n      class=\"pagination-next\"\n      :to=\"next.url\"\n      @click.prevent=\"onSelect(next.index)\"\n    >\n      <WebccIcon class=\"text-txt h-6 w-6\" name=\"site/chevron-right\" filled />\n    </WebccLink>\n  </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport clamp from 'lodash-es/clamp'\nimport { withQuery } from 'ufo'\n\nconst props = withDefaults(\n  defineProps<{\n    active: number\n    total: number\n    visible?: number\n  }>(),\n  { visible: 7 },\n)\n\nconst emit = defineEmits<{\n  'select-page': [index: number]\n}>()\n\nconst route = useRoute()\nconst prev = computed(() => toPage(getIndexWithOffset(-1)))\nconst next = computed(() => toPage(getIndexWithOffset(+1)))\nconst items = computed(() =>\n  getPageNumbers(props.total, props.active, props.visible).map((item) =>\n    isNaN(item) ? null : toPage(item),\n  ),\n)\n\nfunction getIndexWithOffset(offset: number): number {\n  return clamp(props.active + offset, 1, props.total)\n}\n\nfunction toPage(index: number) {\n  return {\n    index,\n    url: withQuery(route.fullPath, { page: index }),\n  }\n}\n\nfunction getPageNumbers(\n  total: number,\n  active: number,\n  visible: number,\n): number[] {\n  if (props.total <= visible) {\n    return range(1, total)\n  }\n\n  const even = visible % 2 === 0 ? 1 : 0\n  const left = Math.floor(visible / 2)\n  const right = total - left + 1 + even\n\n  if (active > left && active < right) {\n    const start = active - left + 2\n    const end = active + left - 2 - even\n    return [1, NaN, ...range(start, end), NaN, total]\n  } else if (active === left) {\n    const end = active + left - 1 - even\n    return [...range(1, end), NaN, total]\n  } else if (active === right) {\n    const start = active - left + 1\n    return [1, NaN, ...range(start, total)]\n  }\n\n  return [...range(1, left), NaN, ...range(right, total)]\n}\n\nfunction onSelect(index: number) {\n  if (index < 1 || index > props.total) return\n\n  emit('select-page', index)\n}\n</script>\n","<template>\n  <WebccPagination\n    v-if=\"total > 1\"\n    :active=\"model\"\n    :total=\"total\"\n    data-id=\"search-pagination\"\n    @select-page=\"(nextPage: number) => (model = nextPage)\"\n  />\n</template>\n\n<script setup lang=\"ts\">\ndefineProps<{\n  total: number\n  current: number\n}>()\n\nconst model = defineModel<number>({ default: 1 })\n</script>\n","<template>\n  <section class=\"w-full rounded shadow bg-bgr p-4\">\n    <h4 class=\"text-xl leading-6 font-semibold mb-2\">\n      {{ $t(`${trPrefix}title`) }}\n    </h4>\n\n    <p class=\"text-base mb-2\">\n      {{ $t(`${trPrefix}description`) }}\n    </p>\n\n    <ul class=\"list-disc text-base pl-6 mb-2\">\n      <li>{{ $t(`${trPrefix}hintDates`) }}</li>\n      <li>{{ $t(`${trPrefix}hintLocations`) }}</li>\n      <li>{{ $t(`${trPrefix}hintFilters`) }}</li>\n    </ul>\n\n    <RedesignFilterSelected :model-value=\"model\" />\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.filter.noResults.'\n\nconst model = defineModel<SearchState>({ required: true })\n</script>\n","export const formatNumber = (\n  number: number,\n  format: keyof typeof formats = 'default',\n  options: Intl.NumberFormatOptions = {},\n) => {\n  if (typeof number !== 'number') {\n    number = parseFloat(number)\n  }\n  if (isNaN(number)) {\n    return ''\n  }\n\n  if (typeof format === 'object') {\n    // no named format, options is 2nd param, 3rd param discarded\n    options = { ...format }\n  }\n\n  options = { ...(formats[format] || formats.default), ...options }\n\n  return new Intl.NumberFormat(useL10N().locale, options).format(number)\n}\n\nconst formats = {\n  default: {\n    style: 'decimal',\n  },\n  '1-digit': {\n    style: 'decimal',\n    minimumFractionDigits: 1,\n    maximumFractionDigits: 1,\n  },\n  '2-digit': {\n    style: 'decimal',\n    minimumFractionDigits: 2,\n    maximumFractionDigits: 2,\n  },\n}\n","var n=function(){return n=Object.assign||function(n){for(var t,i=1,e=arguments.length;i<e;i++)for(var r in t=arguments[i])Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n},n.apply(this,arguments)};function t(n,t,i){if(i||2===arguments.length)for(var e,r=0,a=t.length;r<a;r++)!e&&r in t||(e||(e=Array.prototype.slice.call(t,0,r)),e[r]=t[r]);return n.concat(e||Array.prototype.slice.call(t))}function i(n){return Array.prototype.slice.call(n)}function e(n,t){var i=Math.floor(n);return i===t||i+1===t?n:t}function r(){return Date.now()}function a(n,t,i){if(t=\"data-keen-slider-\"+t,null===i)return n.removeAttribute(t);n.setAttribute(t,i||\"\")}function o(n,t){return t=t||document,\"function\"==typeof n&&(n=n(t)),Array.isArray(n)?n:\"string\"==typeof n?i(t.querySelectorAll(n)):n instanceof HTMLElement?[n]:n instanceof NodeList?i(n):[]}function u(n){n.raw&&(n=n.raw),n.cancelable&&!n.defaultPrevented&&n.preventDefault()}function s(n){n.raw&&(n=n.raw),n.stopPropagation&&n.stopPropagation()}function c(){var n=[];return{add:function(t,i,e,r){t.addListener?t.addListener(e):t.addEventListener(i,e,r),n.push([t,i,e,r])},input:function(n,t,i,e){this.add(n,t,function(n){return function(t){t.nativeEvent&&(t=t.nativeEvent);var i=t.changedTouches||[],e=t.targetTouches||[],r=t.detail&&t.detail.x?t.detail:null;return n({id:r?r.identifier?r.identifier:\"i\":e[0]?e[0]?e[0].identifier:\"e\":\"d\",idChanged:r?r.identifier?r.identifier:\"i\":i[0]?i[0]?i[0].identifier:\"e\":\"d\",raw:t,x:r&&r.x?r.x:e[0]?e[0].screenX:r?r.x:t.pageX,y:r&&r.y?r.y:e[0]?e[0].screenY:r?r.y:t.pageY})}}(i),e)},purge:function(){n.forEach((function(n){n[0].removeListener?n[0].removeListener(n[2]):n[0].removeEventListener(n[1],n[2],n[3])})),n=[]}}}function d(n,t,i){return Math.min(Math.max(n,t),i)}function l(n){return(n>0?1:0)-(n<0?1:0)||+n}function f(n){var t=n.getBoundingClientRect();return{height:e(t.height,n.offsetHeight),width:e(t.width,n.offsetWidth)}}function p(n,t,i,e){var r=n&&n[t];return null==r?i:e&&\"function\"==typeof r?r():r}function v(n){return Math.round(1e6*n)/1e6}function h(n){var t,i,e,r,a,o;function u(t){o||(o=t),s(!0);var a=t-o;a>e&&(a=e);var l=r[i];if(l[3]<a)return i++,u(t);var f=l[2],p=l[4],v=l[0],h=l[1]*(0,l[5])(0===p?1:(a-f)/p);if(h&&n.track.to(v+h),a<e)return d();o=null,s(!1),c(null),n.emit(\"animationEnded\")}function s(n){t.active=n}function c(n){t.targetIdx=n}function d(){var n;n=u,a=window.requestAnimationFrame(n)}function l(){var t;t=a,window.cancelAnimationFrame(t),s(!1),c(null),o&&n.emit(\"animationStopped\"),o=null}return t={active:!1,start:function(t){if(l(),n.track.details){var a=0,o=n.track.details.position;i=0,e=0,r=t.map((function(n){var t,i=Number(o),r=null!==(t=n.earlyExit)&&void 0!==t?t:n.duration,u=n.easing,s=n.distance*u(r/n.duration)||0;o+=s;var c=e;return e+=r,a+=s,[i,n.distance,c,e,n.duration,u]})),c(n.track.distToIdx(a)),d(),n.emit(\"animationStarted\")}},stop:l,targetIdx:null}}function m(n){var i,e,a,o,u,s,c,f,h,m,g,b,x,k,y=1/0,w=[],M=null,T=0;function C(n){_(T+n)}function E(n){var t=z(T+n).abs;return D(t)?t:null}function z(n){var i=Math.floor(Math.abs(v(n/e))),r=v((n%e+e)%e);r===e&&(r=0);var a=l(n),o=c.indexOf(t([],c,!0).reduce((function(n,t){return Math.abs(t-r)<Math.abs(n-r)?t:n}))),u=o;return a<0&&i++,o===s&&(u=0,i+=a>0?1:-1),{abs:u+i*s*a,origin:o,rel:u}}function I(n,t,i){var e;if(t||!S())return A(n,i);if(!D(n))return null;var r=z(null!=i?i:T),a=r.abs,o=n-r.rel,u=a+o;e=A(u);var c=A(u-s*l(o));return(null!==c&&Math.abs(c)<Math.abs(e)||null===e)&&(e=c),v(e)}function A(n,t){if(null==t&&(t=v(T)),!D(n)||null===n)return null;n=Math.round(n);var i=z(t),r=i.abs,a=i.rel,o=i.origin,u=O(n),d=(t%e+e)%e,l=c[o],f=Math.floor((n-(r-a))/s)*e;return v(l-d-l+c[u]+f+(o===s?e:0))}function D(n){return L(n)===n}function L(n){return d(n,h,m)}function S(){return o.loop}function O(n){return(n%s+s)%s}function _(t){var i;i=t-T,w.push({distance:i,timestamp:r()}),w.length>6&&(w=w.slice(-6)),T=v(t);var e=H().abs;if(e!==M){var a=null!==M;M=e,a&&n.emit(\"slideChanged\")}}function H(t){var r=t?null:function(){if(s){var n=S(),t=n?(T%e+e)%e:T,i=(n?T%e:T)-u[0][2],r=0-(i<0&&n?e-Math.abs(i):i),c=0,d=z(T),f=d.abs,p=d.rel,v=u[p][2],y=u.map((function(t,i){var a=r+c;(a<0-t[0]||a>1)&&(a+=(Math.abs(a)>e-1&&n?e:0)*l(-a));var u=i-p,d=l(u),h=u+f;n&&(-1===d&&a>v&&(h+=s),1===d&&a<v&&(h-=s),null!==g&&h<g&&(a+=e),null!==b&&h>b&&(a-=e));var m=a+t[0]+t[1],x=Math.max(a>=0&&m<=1?1:m<0||a>1?0:a<0?Math.min(1,(t[0]+a)/t[0]):(1-a)/t[0],0);return c+=t[0]+t[1],{abs:h,distance:o.rtl?-1*a+1-t[0]:a,portion:x,size:t[0]}}));return f=L(f),p=O(f),{abs:L(f),length:a,max:k,maxIdx:m,min:x,minIdx:h,position:T,progress:n?t/e:T/a,rel:p,slides:y,slidesLength:e}}}();return i.details=r,n.emit(\"detailsChanged\"),r}return i={absToRel:O,add:C,details:null,distToIdx:E,idxToDist:I,init:function(t){if(function(){if(o=n.options,u=(o.trackConfig||[]).map((function(n){return[p(n,\"size\",1),p(n,\"spacing\",0),p(n,\"origin\",0)]})),s=u.length){e=v(u.reduce((function(n,t){return n+t[0]+t[1]}),0));var t,i=s-1;a=v(e+u[0][2]-u[i][0]-u[i][2]-u[i][1]),c=u.reduce((function(n,i){if(!n)return[0];var e=u[n.length-1],r=n[n.length-1]+(e[0]+e[2])+e[1];return r-=i[2],n[n.length-1]>r&&(r=n[n.length-1]),r=v(r),n.push(r),(!t||t<r)&&(f=n.length-1),t=r,n}),null),0===a&&(f=0),c.push(v(e))}}(),!s)return H(!0);var i;!function(){var t=n.options.range,i=n.options.loop;g=h=i?p(i,\"min\",-1/0):0,b=m=i?p(i,\"max\",y):f;var e=p(t,\"min\",null),r=p(t,\"max\",null);null!==e&&(h=e),null!==r&&(m=r),x=h===-1/0?h:n.track.idxToDist(h||0,!0,0),k=m===y?m:I(m,!0,0),null===r&&(b=m),p(t,\"align\",!1)&&m!==y&&0===u[O(m)][2]&&(k-=1-u[O(m)][0],m=E(k-T)),x=v(x),k=v(k)}(),i=t,Number(i)===i?C(A(L(t))):H()},to:_,velocity:function(){var n=r(),t=w.reduce((function(t,i){var e=i.distance,r=i.timestamp;return n-r>200||(l(e)!==l(t.distance)&&t.distance&&(t={distance:0,lastTimestamp:0,time:0}),t.time&&(t.distance+=e),t.lastTimestamp&&(t.time+=r-t.lastTimestamp),t.lastTimestamp=r),t}),{distance:0,lastTimestamp:0,time:0});return t.distance/t.time||0}}}function g(n){var t,i,e,r,a,o,u,s;function c(n){return 2*n}function f(n){return d(n,u,s)}function p(n){return 1-Math.pow(1-n,3)}function v(){return e?n.track.velocity():0}function h(){b();var t=\"free-snap\"===n.options.mode,i=n.track,e=v();r=l(e);var u=n.track.details,s=[];if(e||!t){var d=m(e),h=d.dist,g=d.dur;if(g=c(g),h*=r,t){var x=i.idxToDist(i.distToIdx(h),!0);x&&(h=x)}s.push({distance:h,duration:g,easing:p});var k=u.position,y=k+h;if(y<a||y>o){var w=y<a?a-k:o-k,M=0,T=e;if(l(w)===r){var C=Math.min(Math.abs(w)/Math.abs(h),1),E=function(n){return 1-Math.pow(1-n,1/3)}(C)*g;s[0].earlyExit=E,T=e*(1-C)}else s[0].earlyExit=0,M+=w;var z=m(T,100),I=z.dist*r;n.options.rubberband&&(s.push({distance:I,duration:c(z.dur),easing:p}),s.push({distance:-I+M,duration:500,easing:p}))}n.animator.start(s)}else n.moveToIdx(f(u.abs),!0,{duration:500,easing:function(n){return 1+--n*n*n*n*n}})}function m(n,t){void 0===t&&(t=1e3);var i=147e-9+(n=Math.abs(n))/t;return{dist:Math.pow(n,2)/i,dur:n/i}}function g(){var t=n.track.details;t&&(a=t.min,o=t.max,u=t.minIdx,s=t.maxIdx)}function b(){n.animator.stop()}n.on(\"updated\",g),n.on(\"optionsChanged\",g),n.on(\"created\",g),n.on(\"dragStarted\",(function(){e=!1,b(),t=i=n.track.details.abs})),n.on(\"dragChecked\",(function(){e=!0})),n.on(\"dragEnded\",(function(){var e=n.options.mode;\"snap\"===e&&function(){var e=n.track,r=n.track.details,u=r.position,s=l(v());(u>o||u<a)&&(s=0);var c=t+s;0===r.slides[e.absToRel(c)].portion&&(c-=s),t!==i&&(c=i),l(e.idxToDist(c,!0))!==s&&(c+=s),c=f(c);var d=e.idxToDist(c,!0);n.animator.start([{distance:d,duration:500,easing:function(n){return 1+--n*n*n*n*n}}])}(),\"free\"!==e&&\"free-snap\"!==e||h()})),n.on(\"dragged\",(function(){i=n.track.details.abs}))}function b(n){var t,i,e,r,a,f,p,v,h,m,g,b,x,k,y,w,M,T,C=c();function E(t){if(f&&v===t.id){var o=D(t);if(h){if(!A(t))return I(t);m=o,h=!1,n.emit(\"dragChecked\")}if(w)return m=o;u(t);var c=function(t){if(M===-1/0&&T===1/0)return t;var e=n.track.details,o=e.length,u=e.position,s=d(t,M-u,T-u);if(0===o)return 0;if(!n.options.rubberband)return s;if(u<=T&&u>=M)return t;if(u<M&&i>0||u>T&&i<0)return t;var c=(u<M?u-M:u-T)/o,l=r*o,f=Math.abs(c*l),p=Math.max(0,1-f/a*2);return p*p*t}(p(m-o)/r*e);i=l(c);var x=n.track.details.position;(x>M&&x<T||x===M&&i>0||x===T&&i<0)&&s(t),g+=c,!b&&Math.abs(g*r)>5&&(b=!0),n.track.add(c),m=o,n.emit(\"dragged\")}}function z(t){!f&&n.track.details&&n.track.details.length&&(g=0,f=!0,b=!1,h=!0,v=t.id,A(t),m=D(t),n.emit(\"dragStarted\"))}function I(t){f&&v===t.idChanged&&(f=!1,n.emit(\"dragEnded\"))}function A(n){var t=L(),i=t?n.y:n.x,e=t?n.x:n.y,r=void 0!==x&&void 0!==k&&Math.abs(k-e)<=Math.abs(x-i);return x=i,k=e,r}function D(n){return L()?n.y:n.x}function L(){return n.options.vertical}function S(){r=n.size,a=L()?window.innerHeight:window.innerWidth;var t=n.track.details;t&&(M=t.min,T=t.max)}function O(n){b&&(s(n),u(n))}function _(){if(C.purge(),n.options.drag&&!n.options.disabled){var i;i=n.options.dragSpeed||1,p=\"function\"==typeof i?i:function(n){return n*i},e=n.options.rtl?-1:1,S(),t=n.container,function(){var n=\"data-keen-slider-clickable\";o(\"[\".concat(n,\"]:not([\").concat(n,\"=false])\"),t).map((function(n){C.add(n,\"dragstart\",s),C.add(n,\"mousedown\",s),C.add(n,\"touchstart\",s)}))}(),C.add(t,\"dragstart\",(function(n){u(n)})),C.add(t,\"click\",O,{capture:!0}),C.input(t,\"ksDragStart\",z),C.input(t,\"ksDrag\",E),C.input(t,\"ksDragEnd\",I),C.input(t,\"mousedown\",z),C.input(t,\"mousemove\",E),C.input(t,\"mouseleave\",I),C.input(t,\"mouseup\",I),C.input(t,\"touchstart\",z,{passive:!0}),C.input(t,\"touchmove\",E,{passive:!1}),C.input(t,\"touchend\",I),C.input(t,\"touchcancel\",I),C.add(window,\"wheel\",(function(n){f&&u(n)}));var r=\"data-keen-slider-scrollable\";o(\"[\".concat(r,\"]:not([\").concat(r,\"=false])\"),n.container).map((function(n){return function(n){var t;C.input(n,\"touchstart\",(function(n){t=D(n),w=!0,y=!0}),{passive:!0}),C.input(n,\"touchmove\",(function(i){var e=L(),r=e?n.scrollHeight-n.clientHeight:n.scrollWidth-n.clientWidth,a=t-D(i),o=e?n.scrollTop:n.scrollLeft,s=e&&\"scroll\"===n.style.overflowY||!e&&\"scroll\"===n.style.overflowX;if(t=D(i),(a<0&&o>0||a>0&&o<r)&&y&&s)return w=!0;y=!1,u(i),w=!1})),C.input(n,\"touchend\",(function(){w=!1}))}(n)}))}}n.on(\"updated\",S),n.on(\"optionsChanged\",_),n.on(\"created\",_),n.on(\"destroyed\",C.purge)}function x(n){var t,i,e=null;function r(t,i,e){n.animator.active?o(t,i,e):requestAnimationFrame((function(){return o(t,i,e)}))}function a(){r(!1,!1,i)}function o(i,r,a){var o=0,u=n.size,d=n.track.details;if(d&&t){var l=d.slides;t.forEach((function(n,t){if(i)!e&&r&&s(n,null,a),c(n,null,a);else{if(!l[t])return;var d=l[t].size*u;!e&&r&&s(n,d,a),c(n,l[t].distance*u-o,a),o+=d}}))}}function u(t){return\"performance\"===n.options.renderMode?Math.round(t):t}function s(n,t,i){var e=i?\"height\":\"width\";null!==t&&(t=u(t)+\"px\"),n.style[\"min-\"+e]=t,n.style[\"max-\"+e]=t}function c(n,t,i){if(null!==t){t=u(t);var e=i?t:0;t=\"translate3d(\".concat(i?0:t,\"px, \").concat(e,\"px, 0)\")}n.style.transform=t,n.style[\"-webkit-transform\"]=t}function d(){t&&(o(!0,!0,i),t=null),n.on(\"detailsChanged\",a,!0)}function l(){r(!1,!0,i)}function f(){d(),i=n.options.vertical,n.options.disabled||\"custom\"===n.options.renderMode||(e=\"auto\"===p(n.options.slides,\"perView\",null),n.on(\"detailsChanged\",a),(t=n.slides).length&&l())}n.on(\"created\",f),n.on(\"optionsChanged\",f),n.on(\"beforeOptionsChanged\",(function(){d()})),n.on(\"updated\",l),n.on(\"destroyed\",d)}function k(t,i){return function(e){var r,u,s,d,l,v,h=c();function m(n){var t;a(e.container,\"reverse\",\"rtl\"!==(t=e.container,window.getComputedStyle(t,null).getPropertyValue(\"direction\"))||n?null:\"\"),a(e.container,\"v\",e.options.vertical&&!n?\"\":null),a(e.container,\"disabled\",e.options.disabled&&!n?\"\":null)}function g(){b()&&M()}function b(){var t=null;if(d.forEach((function(n){n.matches&&(t=n.__media)})),t===r)return!1;r||e.emit(\"beforeOptionsChanged\"),r=t;var i=t?s.breakpoints[t]:s;return e.options=n(n({},s),i),m(),I(),A(),C(),!0}function x(n){var t=f(n);return(e.options.vertical?t.height:t.width)/e.size||1}function k(){return e.options.trackConfig.length}function y(t){for(var a in r=!1,s=n(n({},i),t),h.purge(),u=e.size,d=[],s.breakpoints||[]){var o=window.matchMedia(a);o.__media=a,d.push(o),h.add(o,\"change\",g)}h.add(window,\"orientationchange\",z),h.add(window,\"resize\",E),b()}function w(n){e.animator.stop();var t=e.track.details;e.track.init(null!=n?n:t?t.abs:0)}function M(n){w(n),e.emit(\"optionsChanged\")}function T(n,t){if(n)return y(n),void M(t);I(),A();var i=k();C(),k()!==i?M(t):w(t),e.emit(\"updated\")}function C(){var n=e.options.slides;if(\"function\"==typeof n)return e.options.trackConfig=n(e.size,e.slides);for(var t=e.slides,i=t.length,r=\"number\"==typeof n?n:p(n,\"number\",i,!0),a=[],o=p(n,\"perView\",1,!0),u=p(n,\"spacing\",0,!0)/e.size||0,s=\"auto\"===o?u:u/o,c=p(n,\"origin\",\"auto\"),d=0,l=0;l<r;l++){var f=\"auto\"===o?x(t[l]):1/o-u+s,v=\"center\"===c?.5-f/2:\"auto\"===c?0:c;a.push({origin:v,size:f,spacing:u}),d+=f}if(d+=u*(r-1),\"auto\"===c&&!e.options.loop&&1!==o){var h=0;a.map((function(n){var t=d-h;return h+=n.size+u,t>=1||(n.origin=1-t-(d>1?0:1-d)),n}))}e.options.trackConfig=a}function E(){I();var n=e.size;e.options.disabled||n===u||(u=n,T())}function z(){E(),setTimeout(E,500),setTimeout(E,2e3)}function I(){var n=f(e.container);e.size=(e.options.vertical?n.height:n.width)||1}function A(){e.slides=o(e.options.selector,e.container)}e.container=(v=o(t,l||document)).length?v[0]:null,e.destroy=function(){h.purge(),e.emit(\"destroyed\"),m(!0)},e.prev=function(){e.moveToIdx(e.track.details.abs-1,!0)},e.next=function(){e.moveToIdx(e.track.details.abs+1,!0)},e.update=T,y(e.options)}}var y=function(n,i,e){try{return function(n,t){var i,e={};return i={emit:function(n){e[n]&&e[n].forEach((function(n){n(i)}));var t=i.options&&i.options[n];t&&t(i)},moveToIdx:function(n,t,e){var r=i.track.idxToDist(n,t);if(r){var a=i.options.defaultAnimation;i.animator.start([{distance:r,duration:p(e||a,\"duration\",500),easing:p(e||a,\"easing\",(function(n){return 1+--n*n*n*n*n}))}])}},on:function(n,t,i){void 0===i&&(i=!1),e[n]||(e[n]=[]);var r=e[n].indexOf(t);r>-1?i&&delete e[n][r]:i||e[n].push(t)},options:n},function(){if(i.track=m(i),i.animator=h(i),t)for(var n=0,e=t;n<e.length;n++)(0,e[n])(i);i.track.init(i.options.initial||0),i.emit(\"created\")}(),i}(i,t([k(n,{drag:!0,mode:\"snap\",renderMode:\"precision\",rubberband:!0,selector:\".keen-slider__slide\"}),x,b,g],e||[],!0))}catch(n){console.error(n)}};export{y as default};\n","<template>\n  <div v-if=\"reviews.length\" class=\"bg-bgr py-4\">\n    <div class=\"container-fluid-lg\">\n      <div\n        itemscope\n        itemtype=\"http://schema.org/Product\"\n        class=\"flex w-full flex-wrap items-stretch justify-between gap-4 rounded-lg border border-bgr-100 bg-bgr px-4 py-6 shadow-md sm:flex-nowrap sm:gap-6 sm:px-6 md:gap-10 md:py-8 lg:px-10\"\n      >\n        <div\n          class=\"mb-2 flex w-full shrink-0 flex-col justify-between border-b pb-4 sm:mb-0 sm:max-w-[40%] sm:border-0 sm:pb-0 md:max-w-[30%]\"\n        >\n          <div class=\"flex flex-col\">\n            <p class=\"overflow-x-hidden text-ellipsis font-medium\">\n              <span>{{ $t(`${trPrefix}title`) }}</span\n              >&nbsp;<span\n                class=\"whitespace-nowrap md:whitespace-normal\"\n                itemprop=\"name\"\n                >{{ title }}</span\n              >\n            </p>\n            <p itemprop=\"name\" class=\"mb-2 sm:mb-0\">{{ filtersText }}</p>\n          </div>\n          <div\n            itemprop=\"aggregateRating\"\n            itemscope\n            itemtype=\"http://schema.org/AggregateRating\"\n            class=\"flex items-center gap-2 sm:flex-col sm:items-start\"\n          >\n            <div>\n              <span itemprop=\"worstRating\" content=\"1\"></span>\n              <span itemprop=\"bestRating\" content=\"5\"></span>\n              <span itemprop=\"ratingCount\" :content=\"reviewsCount\"></span>\n              <p\n                class=\"inline rounded-t-lg rounded-br-lg bg-thm px-2.5 py-2 text-sm text-txt-contrast font-bold\"\n              >\n                <span itemprop=\"ratingValue\">{{ rating.formatted }}</span>\n                <span>{{ rating.delim }} {{ rating.max }}</span>\n              </p>\n            </div>\n            <WebccLink\n              class=\"text-sm font-medium underline hover:no-underline\"\n              :to=\"link\"\n            >\n              <span>{{\n                $t(`${trPrefix}numberRatingsText`, {\n                  ratingcount: formatNumber(reviewsCount),\n                })\n              }}</span>\n            </WebccLink>\n          </div>\n        </div>\n        <div class=\"flex w-full gap-4 overflow-x-hidden\">\n          <button\n            :class=\"[current === 0 ? 'invisible' : '']\"\n            class=\"flex items-center justify-center self-center rounded-full bg-bgr-100 p-1 transition-all hover:bg-bgr-200 active:scale-95\"\n            @click=\"sliderMove(-1)\"\n          >\n            <WebccIcon filled name=\"site/chevron-left\" class=\"h-6 w-6\" />\n          </button>\n          <div ref=\"sliderRef\" class=\"keen-slider h-full\">\n            <div\n              v-for=\"(review, i) in reviews\"\n              :key=\"i\"\n              class=\"keen-slider__slide flex min-w-full flex-col gap-2 px-3 pt-1 md:min-w-1/3\"\n            >\n              <div>\n                <p\n                  class=\"inline rounded-t-lg rounded-br-lg bg-thm px-2.5 py-2 text-sm text-txt-contrast font-bold\"\n                >\n                  {{ rating.text }}\n                </p>\n              </div>\n              <div class=\"flex max-w-full flex-col\">\n                <p class=\"line-clamp-1 text-sm font-medium\">\n                  {{ review.title }}\n                </p>\n                <p class=\"line-clamp-2 text-sm\">{{ review.text }}</p>\n              </div>\n              <div class=\"flex flex-col\">\n                <div class=\"flex items-center gap-4\">\n                  <p class=\"text-sm font-medium\">\n                    {{ review.customer.firstname }}\n                    {{ review.customer.lastname }}\n                  </p>\n                  <WebccIcon\n                    filled\n                    :name=\"'flags/' + review.customer.country.toLowerCase()\"\n                    class=\"h-6 w-6\"\n                  />\n                </div>\n                <p class=\"text-sm\">\n                  {{ formatDatetime(review.published, 'monthYear') }}\n                </p>\n              </div>\n            </div>\n          </div>\n          <button\n            :class=\"[sliderEnd ? 'invisible' : '']\"\n            class=\"flex items-center justify-center self-center rounded-full bg-bgr-100 p-1 transition-all hover:bg-bgr-200 active:scale-95\"\n            @click=\"sliderMove(1)\"\n          >\n            <WebccIcon name=\"site/chevron-right\" filled class=\"h-6 w-6\" />\n          </button>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport 'keen-slider/keen-slider.min.css'\nimport KeenSlider, { type KeenSliderInstance } from 'keen-slider'\n\nconst trPrefix = 'www.components.views.search.RatingBox.'\n\nconst sliderRef = ref<HTMLDivElement>()\nconst slider = ref<KeenSliderInstance>()\n\nconst current = ref(0)\nconst result = ref<ReviewsSearchResult>()\n\nconst rating = useRating(() => result.value?.rating?.overall ?? 0)\n\nconst reviews = computed(() => result.value?.reviews || [])\nconst reviewsCount = computed(() => result.value?._stats.totalHits || 0)\nconst additionalBody = computed(\n  () => useConfdata().additionalBody as SearchPageBody,\n)\nconst filters = computed(() => useSearch().filters)\nconst geo = computed(() => useSearch().geoCurrent)\nconst geoTitle = computed(() =>\n  [geo.value.country?.name, geo.value.region?.name, geo.value.place?.name]\n    .filter(Boolean)\n    .join(', '),\n)\nconst confTitle = computed(() => (additionalBody.value.h1 ?? []).join(', '))\nconst title = computed(() => geoTitle.value || confTitle.value)\nconst link = computed(() => getUrlFullPath(useURLs().buildReviewsUrl()))\n\nconst filtersText = computed(() => {\n  return (additionalBody.value.searchfilterconfs ?? [])\n    .filter(({ filter, slug }) => filters.value[filter] && slug.value)\n    .map(({ translation }) => translation)\n    .join(', ')\n})\n\nconst sliderEnd = computed(() => {\n  if (!slider.value) {\n    return true\n  } else if (\n    ((\n      slider.value.options.slides as {\n        perView?: number\n      }\n    ).perView || 0) >= slider.value.slides.length ||\n    current.value ===\n      slider.value.slides.length -\n        ((\n          slider.value.options.slides as {\n            perView?: number\n          }\n        ).perView || 0)\n  ) {\n    return true\n  }\n  return false\n})\n\nonMounted(load)\n\nonBeforeUnmount(() => {\n  slider.value?.destroy?.()\n})\n\nasync function load() {\n  current.value = 0\n  result.value =\n    (\n      await useReviews().fetch(filters.value, {\n        bestReviews: true,\n        pagesize: 12,\n      })\n    ).data.value ?? undefined\n  nextTick(initSlider)\n}\n\nfunction initSlider() {\n  if (!reviews.value?.length || !sliderRef.value) return\n\n  slider.value = new KeenSlider(sliderRef.value, {\n    slides: {\n      perView: 1,\n    },\n    initial: 0,\n    breakpoints: {\n      '(min-width: 960px)': {\n        slides: {\n          perView: 3,\n        },\n      },\n    },\n    slideChanged: (slider) => {\n      current.value = slider.track.details.rel\n    },\n  })\n}\n\nfunction sliderMove(direction: number) {\n  if (slider.value) {\n    const numberOfSlides = slider.value.track.details.slides.length\n    const currentSlide = slider.value.track.details.rel\n    const moveIdx =\n      direction *\n      ((\n        slider.value.options.slides as {\n          perView?: number\n        }\n      ).perView || 0)\n    let newIdx\n    if (currentSlide + moveIdx < 0) {\n      newIdx = 0\n    } else if (currentSlide + moveIdx > numberOfSlides - 1) {\n      newIdx = numberOfSlides - 1\n    } else if (moveIdx > numberOfSlides - moveIdx - currentSlide) {\n      newIdx = numberOfSlides - moveIdx\n    } else {\n      newIdx = currentSlide + moveIdx\n    }\n    slider.value.moveToIdx(newIdx)\n  }\n}\n</script>\n","<template>\n  <WebccBreadcrumb :lead=\"lead\" :items=\"items\" class=\"py-3\" />\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.Breadcrumbs.'\n\nconst props = defineProps<{\n  items: { name: string; path: string }[]\n}>()\n\nconst lead = computed(() => ({\n  target: '/',\n  title: 'Home',\n  tr: `${trPrefix}home`,\n  content: 'Home',\n}))\n\nconst items = computed(() =>\n  props.items.map((item) => ({\n    target: item.path,\n    title: item.name,\n    text: item.name,\n    content: item.name,\n  })),\n)\n</script>\n","<template>\n  <section\n    ref=\"gallery\"\n    :key=\"key\"\n    class=\"group relative w-full overflow-hidden\"\n  >\n    <ImageSlider\n      class=\"overflow-hidden rounded-tl rounded-tr md:rounded-tr-none\"\n      :images=\"images\"\n      :cover-full=\"coverFull\"\n      @slide-change-intent.once=\"onSlideChangeIntent\"\n      @slide-button-click=\"onSlideButtonClick\"\n      @click=\"onClick\"\n    />\n    <slot />\n    <div class=\"absolute flex h-full w-full items-center justify-center\">\n      <NuxtImg v-if=\"!$params.iframe\" src=\"logos/interhome.svg\" class=\"w-1/2\" />\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst IMAGE_NEXT_PLACEHOLDER_ID = ''\n\nconst props = withDefaults(\n  defineProps<{\n    accom: ResultDocument\n    checkin?: Date\n    coverFull?: boolean\n    transformations?: Record<string, string>\n  }>(),\n  {\n    checkin: undefined,\n    transformations: () => {\n      return {\n        xl: 'tr:n-srp_hitbox_sm',\n        lg: 'tr:n-srp_hitbox_sm',\n        md: 'tr:n-srp_hitbox_l',\n      }\n    },\n  },\n)\n\nconst emit = defineEmits<{\n  open: []\n}>()\n\nconst screen = useScreen()\nconst tracking = useTracking()\n\nconst gallery = ref<HTMLElement>()\nconst isLoading = ref(false)\n\nconst key = computed(() => new Date().toISOString() + screen.current)\nconst isLoaded = computed(\n  () => !images.value.some(({ id }) => id === IMAGE_NEXT_PLACEHOLDER_ID),\n)\n\nuseIntersectionObserver(\n  gallery,\n  ([entry]) => {\n    if (screen.isSmall && entry?.isIntersecting) loadImageKeys()\n  },\n  { root: null, rootMargin: '200px 0px', threshold: 0 },\n)\n\nconst { images, setImages } = useAccomImageCollection(\n  () => toAccomData(props.accom),\n  () => 'tr:n-srp_hitbox_xl',\n)\n\nonMounted(() => {\n  const { image } = props.accom\n  if (image) setImages([image, IMAGE_NEXT_PLACEHOLDER_ID])\n})\n\nasync function loadImageKeys() {\n  if (isLoaded.value || isLoading.value) return\n\n  isLoading.value = true\n  const season = useSeason(props.checkin)\n  const imageIds = await useAccommodation(props.accom.code).getImages(season)\n  setImages(imageIds)\n  isLoading.value = false\n}\n\nfunction onSlideChangeIntent() {\n  loadImageKeys()\n}\n\nfunction onSlideButtonClick() {\n  tracking.handlers?.detail.galleryNavigation()\n}\n\nfunction onClick() {\n  emit('open')\n}\n</script>\n","<template>\n  <div class=\"flex items-center gap-2 text-xs font-medium\">\n    <div\n      v-if=\"discount > 5\"\n      class=\"rounded bg-hlt-hover px-1 py-0.5 text-hlt-contrast\"\n    >\n      {{ discount.toFixed() }}&percnt;\n    </div>\n    <div v-if=\"topRated\">\n      <span class=\"rounded bg-suc px-1 py-0.5 uppercase text-suc-contrast\">{{\n        $t(`${trPrefix}toprated`)\n      }}</span>\n    </div>\n    <div v-if=\"isNew\">\n      <span class=\"rounded bg-suc px-1 py-0.5 uppercase text-suc-contrast\">{{\n        $t(`${trPrefix}new`)\n      }}</span>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.Tags.'\n\nconst props = withDefaults(\n  defineProps<{\n    tags: string[]\n    discount?: number\n  }>(),\n  { discount: 0 },\n)\n\nconst topRated = computed(() => {\n  return props.tags.includes('top')\n})\nconst isNew = computed(() => {\n  return props.tags.includes('new')\n})\n</script>\n","<template>\n  <ol :class=\"textsize\" class=\"flex flex-wrap items-center\">\n    <li class=\"flex items-center\">\n      <WebccLink\n        v-if=\"links\"\n        anchor\n        class=\"cursor-pointer no-underline hover:text-thm\"\n        :to=\"toSearchURL(breadcrumbs.country)\"\n        >{{ accom.country }}</WebccLink\n      >\n      <span v-else>{{ accom.country }}</span>\n    </li>\n    <li class=\"flex items-center\">\n      <WebccIcon\n        name=\"site/chevron-right\"\n        class=\"h-4 w-4 mx-1 text-txt\"\n        filled\n      />\n      <WebccLink\n        v-if=\"links\"\n        anchor\n        class=\"cursor-pointer no-underline hover:text-thm\"\n        :to=\"toSearchURL(breadcrumbs.region)\"\n        >{{ accom.region }}</WebccLink\n      >\n      <span v-else>{{ accom.region }}</span>\n    </li>\n\n    <li class=\"flex items-center\">\n      <WebccIcon\n        name=\"site/chevron-right\"\n        class=\"h-4 w-4 mx-1 text-txt\"\n        filled\n      />\n      <WebccLink\n        v-if=\"links\"\n        anchor\n        class=\"cursor-pointer no-underline hover:text-thm\"\n        :to=\"toSearchURL(breadcrumbs.place)\"\n        >{{ accom.place }}</WebccLink\n      >\n      <span v-else>{{ accom.place }}</span>\n    </li>\n\n    <li v-if=\"!hideCode\" class=\"flex items-center font-semibold\">\n      <WebccIcon\n        name=\"site/chevron-right\"\n        class=\"h-4 w-4 mx-1 text-txt\"\n        filled\n      />\n      <span\n        :class=\"{ 'cursor-pointer no-underline hover:text-thm': links }\"\n        @click=\"emit('open')\"\n        >{{ accom.code }}</span\n      >\n    </li>\n  </ol>\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n  defineProps<{\n    targetUrl: URL\n    accom: ResultDocument\n    hideCode?: boolean\n    size?: string\n    links?: boolean\n  }>(),\n  {\n    size: 'sm',\n    links: true,\n  },\n)\n\nconst emit = defineEmits<{ (e: 'open'): void }>()\n\nconst breadcrumbs = computed(() => {\n  const slugparts = props.accom.slug?.split('/') || ''\n  const result = { country: '', region: '', place: '' }\n  result.country = `/${slugparts[0]}/`\n  result.region = `${result.country + slugparts[1]}/`\n  result.place = `${result.region + slugparts[2]}/`\n  return result\n})\n\nconst textsize = computed(() => {\n  switch (props.size) {\n    case 'xs':\n      return 'text-xs'\n    case 'sm':\n      return 'text-sm'\n    case 'md':\n      return 'text-md'\n    case 'lg':\n      return 'text-lg'\n    case 'xl':\n      return 'text-xl'\n    default:\n      return ''\n  }\n})\n\nfunction toSearchURL(breadcrumbPlace: string) {\n  const params = new URLSearchParams(useRequestURL().search)\n  params.delete('page')\n  const modifiedSearch = params.toString() ? `?${params.toString()}` : ''\n  return breadcrumbPlace + modifiedSearch\n}\n</script>\n","<template>\n  <h4 class=\"flex flex-wrap items-baseline\">\n    <WebccIcon\n      v-for=\"s in accom.stars\"\n      :key=\"s\"\n      name=\"favorites/evaluation-star\"\n      :class=\"iconclasses\"\n    />\n    <WebccLink\n      anchor\n      target=\"_blank\"\n      :to=\"targetUrl\"\n      :class=\"classes\"\n      @click=\"$emit('to-detailpage')\"\n    >\n      <span>{{ $t(`${trPrefix}type.${accom.type}`) }}</span>\n      {{ accom.slug ? accom.name : accom.code }}\n    </WebccLink>\n  </h4>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.Title.'\n\nconst props = withDefaults(\n  defineProps<{\n    targetUrl: URL\n    accom: ResultDocument\n    size?: string\n  }>(),\n  {\n    size: 'lg',\n  },\n)\n\ndefineEmits<{ (e: 'to-detailpage'): void }>()\n\nconst classes = computed(() => {\n  let size = ''\n  switch (props.size) {\n    case 'sm':\n      size = 'text-sm'\n      break\n    case 'md':\n      size = 'text-md'\n      break\n    case 'lg':\n      size = 'text-lg'\n      break\n    case 'xl':\n      size = 'text-xl'\n      break\n  }\n  return `cursor-pointer px-1 font-semibold lg:text-xl ${size}`\n})\nconst iconclasses = computed(() => {\n  return props.size === 'sm' ? 'mr-0.5 h-3 w-3' : 'mr-1 h-4 w-4'\n})\n</script>\n","<template>\n  <section v-if=\"showFreeCancellationInfo\">\n    <div\n      :class=\"fullParentWidth ? 'flex justify-center' : 'inline-flex'\"\n      class=\"border-suc items-center gap-2 rounded-lg border p-1 md:p-2\"\n    >\n      <WebccIcon name=\"site/tick\" class=\"text-suc h-4 w-4 md:h-5 md:w-5\" />\n      <div class=\"grow-0 text-xs md:text-sm\">\n        <span class=\"font-semibold\">{{ $t(`${trPrefix}title`) }}</span\n        >: <span>{{ $t(`${trPrefix}text`) }}</span>\n        <span class=\"font-semibold\">{{ lastFreeCancellationDateShort }}</span>\n      </div>\n      <span v-if=\"showTooltip\" v-tooltip=\"{ content: tooltip, html: true }\"\n        ><WebccIcon name=\"site/info-new\" class=\"text-txt-weak h-5 w-5\"\n      /></span>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'plugins.components.FreeCancellationInfo.'\n\nconst { t } = useI18n()\n\nconst props = withDefaults(\n  defineProps<{\n    checkinDate: Date\n    freeCancellationRange?: number\n    showTooltip?: boolean\n    fullParentWidth?: boolean\n    locale: string\n  }>(),\n  {\n    freeCancellationRange: 0,\n    showTooltip: false,\n    fullParentWidth: false,\n  },\n)\n\nconst showFreeCancellationInfo = computed(() => {\n  return (\n    props.freeCancellationRange > 0 &&\n    lastFreeCancellationDate.value > new Date()\n  )\n})\nconst lastFreeCancellationDate = computed(() => {\n  return daysSub(props.checkinDate, props.freeCancellationRange)\n})\nconst lastFreeCancellationDateShort = computed(() => {\n  return lastFreeCancellationDate.value.toLocaleDateString(props.locale, {\n    day: 'numeric',\n    month: 'short',\n  })\n})\nconst lastFreeCancellationDateFull = computed(() => {\n  return lastFreeCancellationDate.value.toLocaleDateString(props.locale, {\n    day: 'numeric',\n    month: 'numeric',\n    year: 'numeric',\n  })\n})\nconst tooltip = computed(() => {\n  const title = t(`${trPrefix}tooltipTitle`)\n  const text = t(`${trPrefix}tooltipText`, {\n    date: lastFreeCancellationDateFull.value,\n  })\n\n  return `<div class='max-w-[24rem] px-6 py-3'><p class='font-semibold mb-4'>${title}</p> <p>${text}</p></div>`\n})\n</script>\n","<template>\n  <div ref=\"mapRef\"><slot /></div>\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n  defineProps<{\n    domain?: string\n    locale?: string\n    zoom?: number\n    center?: { lat: number; lng: number }\n    marker?: string\n    ui?: boolean\n  }>(),\n  {\n    zoom: 12,\n    domain: 'www.interhome.com',\n    locale: 'en',\n    marker: '',\n    ui: true,\n    center: () => {\n      return {\n        lat: 45,\n        lng: 10,\n      }\n    },\n  },\n)\n\nconst emit = defineEmits<{\n  (e: 'loaded'): void\n}>()\n\nconst map: Ref<google.maps.Map | null> = ref(null)\nconst mapRef: Ref<HTMLDivElement | null> = ref(null)\n\ndefineExpose({ zoom: changeZoom, wrapper: mapRef })\n\nonMounted(async () => {\n  await loadGoogleMaps()\n})\n\nasync function loadGoogleMaps() {\n  if (!window.google?.maps?.version) {\n    console.log(' --- loading google maps ---')\n    const options = {\n      language: props.locale,\n      apiKey: useRuntimeConfig().public.googlemaps.apiKey || '',\n    }\n    const { Loader } = await import('@googlemaps/js-api-loader')\n\n    const loader = new Loader(options)\n\n    await loader.importLibrary('core')\n    console.log(' --- loaded google maps ---', window.google.maps.version)\n  }\n  const newmap = new window.google.maps.Map(mapRef.value!, {\n    center: props.center,\n    zoom: props.zoom || 12,\n    gestureHandling: 'greedy',\n    scrollwheel: false,\n  })\n  const marker = new window.google.maps.Marker({\n    position: props.center,\n    title: props.marker,\n  })\n  marker.setMap(newmap)\n  map.value = newmap\n  emit('loaded')\n}\n\nfunction changeZoom(delta: number) {\n  map.value?.setZoom(map.value.getZoom()! + delta)\n}\n</script>\n","<template>\n  <article class=\"relative flex flex-col rounded bg-bgr shadow\">\n    <header class=\"relative\">\n      <GoogleMaps\n        v-if=\"mapVisibilityState\"\n        ref=\"map\"\n        :locale=\"confData.locale\"\n        :domain=\"confData.domain\"\n        :center=\"{ lat: accom.coords.lat, lng: accom.coords.lon }\"\n        :marker=\"accom.name\"\n        :ui=\"false\"\n        class=\"aspect-video rounded-t\"\n      />\n      <HitboxGallery\n        :transformations=\"transformations\"\n        class=\"gallery aspect-[4/3]\"\n        :accom=\"accom\"\n        :checkin=\"checkin\"\n        @open=\"openDetailPage\"\n      />\n\n      <div>\n        <div\n          class=\"absolute flex flex-row items-center bottom-0 left-0 rounded-tr bg-white/80 px-4 text-txt backdrop-blur\"\n        >\n          <template v-if=\"!legalinfo && accom.trip?.price\">\n            <!-- TODO: ACHTUNG: Preise sind immer in EUR. Umrechnungskurse fehlen noch -->\n            <span class=\"text-lg font-semibold\">\n              <div v-if=\"isPricePerNightEnabled && pricePerNightText\">\n                <small class=\"font-light\"\n                  ><span class=\"mr-1\">{{\n                    $t(`${trPrefix}Price.from`)\n                  }}</span></small\n                >\n                <span class=\"text-lg font-semibold\">{{\n                  pricePerNightText\n                }}</span>\n                <small class=\"font-light\"\n                  ><span class=\"mr-1\">\n                    / {{ $t(`${trPrefix}Price.night`) }}</span\n                  >\n                </small>\n                <small class=\"font-light\"\n                  ><span>| </span>\n                  <span class=\"font-medium\">{{ priceText }}</span>\n                  <span>&nbsp;{{ $t(`${trPrefix}Price.total`) }}</span>\n                </small>\n              </div>\n              <div v-else>\n                <span class=\"mr-1\">{{ $t(`${trPrefix}Price.from`) }}</span>\n                {{ priceText }}\n                <small class=\"font-light\">\n                  /\n                  <span>{{\n                    $t(`${trPrefix}Price.night_s`, accom.trip.duration)\n                  }}</span>\n                </small>\n              </div>\n            </span>\n\n            <span v-tooltip=\"tooltip\" class=\"cursor-help\">\n              <WebccIcon\n                name=\"site/info\"\n                class=\"mt-0.5 inline-block h-4 w-4 text-thm ml-2\"\n              />\n            </span>\n          </template>\n          <template v-else>\n            <div\n              class=\"flex items-center font-semibold uppercase tracking-wide text-thm\"\n            >\n              <WebccIcon\n                name=\"attributes/feature-pax\"\n                class=\"mx-1 h-5 w-5 fill-current\"\n              />\n              {{ accom.pax }} &bull;\n              <WebccIcon\n                name=\"attributes/feature-rooms\"\n                class=\"mx-1 h-5 w-5 fill-current\"\n              />\n              {{ accom.rooms }} &bull;\n              <WebccIcon\n                name=\"attributes/feature-bedrooms\"\n                class=\"mx-1 h-5 w-5 fill-current\"\n              />\n              {{ accom.bedrooms }}\n            </div>\n          </template>\n        </div>\n\n        <div\n          v-if=\"\n            flexTrip.flexibleCalendar &&\n            checkin &&\n            checkout &&\n            accom.trip?.checkin &&\n            accom.trip?.checkout\n          \"\n          class=\"absolute bottom-9 left-4 inline-flex items-center justify-center gap-[10px] rounded bg-bgr p-2 opacity-80\"\n        >\n          <span class=\"h-[14px] text-xs font-medium\">{{ dateRageText }}</span>\n        </div>\n\n        <button\n          class=\"absolute right-2 top-2 rounded-full bg-black/40 p-1.5 hover:bg-black/50\"\n          @click.stop.prevent=\"mapVisibilityState = !mapVisibilityState\"\n        >\n          <svg\n            v-if=\"!mapVisibilityState\"\n            class=\"h-5 w-5 fill-none stroke-2 text-txt-weakest\"\n            width=\"24\"\n            height=\"24\"\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <polygon\n              points=\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\"\n            ></polygon>\n            <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"18\"></line>\n            <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"22\"></line>\n          </svg>\n          <svg\n            v-if=\"mapVisibilityState\"\n            class=\"h-5 w-5 fill-none stroke-2 text-txt-weakest\"\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"3\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect>\n            <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect>\n            <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect>\n            <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect>\n          </svg>\n        </button>\n        <client-only v-if=\"allowBookmark\">\n          <button\n            class=\"absolute right-12 top-2 rounded-full bg-black/40 p-1.5 hover:bg-black/50\"\n            @click.stop.prevent=\"onBookmarkClick\"\n          >\n            <WebccIcon\n              :name=\"isBookmarked ? 'site/bookmark-filled' : 'site/bookmark'\"\n              class=\"h-5 w-5 stroke-2 text-txt-weakest\"\n              filled\n            />\n          </button>\n        </client-only>\n        <button\n          v-if=\"mapVisibilityState\"\n          class=\"absolute bottom-16 right-2 rounded-full bg-black/40 p-1.5 hover:bg-black/50\"\n          @click.stop.prevent=\"zoom(1)\"\n        >\n          <svg\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"3\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n            class=\"h-5 w-5 fill-none text-txt-weakest\"\n          >\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\n            <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n          </svg>\n        </button>\n        <button\n          v-if=\"mapVisibilityState\"\n          class=\"absolute bottom-6 right-2 rounded-full bg-black/40 p-1.5 hover:bg-black/50\"\n          @click.stop.prevent=\"zoom(-1)\"\n        >\n          <svg\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"3\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n            class=\"h-5 w-5 fill-none text-txt-weakest\"\n          >\n            <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n          </svg>\n        </button>\n        <HitboxTags\n          class=\"absolute -left-2 top-2\"\n          :tags=\"accom.tags || []\"\n          :discount=\"discount\"\n        />\n      </div>\n    </header>\n    <div class=\"flex grow flex-col p-2\">\n      <HitboxBreadcrumb\n        v-if=\"accom.slug\"\n        :links=\"breadcrumbLinks\"\n        class=\"text-dim\"\n        :accom=\"accom\"\n        hide-code\n        size=\"xs\"\n        :target-url=\"targetUrl\"\n      />\n      <HitboxTitle\n        size=\"sm\"\n        :accom=\"accom\"\n        :target-url=\"targetUrl\"\n        @click=\"openDetailPage\"\n      />\n\n      <div class=\"mt-auto\">\n        <div class=\"mt-1 text-xs\">\n          <div\n            v-if=\"accom.rating > 0\"\n            class=\"flex flex-row items-center justify-end gap-1 font-semibold text-thm\"\n          >\n            <span class=\"flex text-thm\">\n              <WebccIcon\n                :filled=\"false\"\n                name=\"reviews/heart\"\n                class=\"h-3 w-3 text-thm\"\n                role=\"img\"\n                aria-hidden=\"true\"\n                focusable=\"false\"\n                :alt=\"rating.text.value\"\n              />\n            </span>\n            <span class=\"\"> {{ rating.text }} </span>\n            <span class=\"flex items-center\">\n              (\n              <span>{{ $t(`${trPrefix}Rating.review_s`, accom.reviews) }}</span>\n              )\n            </span>\n          </div>\n        </div>\n        <WebccFreeCancellationInfo\n          v-if=\"checkin\"\n          v-track:impression=\"{ event: 'search:freeCancellationImpression' }\"\n          :checkin-date=\"checkin\"\n          :free-cancellation-range=\"confData.freeCancellationRange\"\n          :locale=\"$i18n.locale\"\n        />\n\n        <div v-if=\"accom.trip\" class=\"flex justify-between pt-2 text-thm\">\n          <div\n            v-if=\"!legalinfo\"\n            class=\"flex items-center text-xs font-semibold uppercase tracking-wide text-thm\"\n          >\n            <WebccIcon\n              name=\"attributes/feature-pax\"\n              class=\"mx-1 h-5 w-5 fill-current\"\n            />\n            {{ accom.pax }} &bull;\n            <WebccIcon\n              name=\"attributes/feature-rooms\"\n              class=\"mx-1 h-5 w-5 fill-current\"\n            />\n            {{ accom.rooms }} &bull;\n            <WebccIcon\n              name=\"attributes/feature-bedrooms\"\n              class=\"mx-1 h-5 w-5 fill-current\"\n            />\n            {{ accom.bedrooms }}\n          </div>\n          <div v-else-if=\"accom.trip.price\">\n            <span class=\"mr-1\">{{ $t(`${trPrefix}Price.from`) }}</span>\n            <span class=\"text-lg font-semibold\"\n              >{{ priceText }}\n              <small class=\"font-light\">\n                /\n                <span>{{\n                  $t(`${trPrefix}Price.night_s`, accom.trip.duration)\n                }}</span>\n              </small></span\n            >\n          </div>\n          <WebccButton variant=\"cta\" size=\"sm\" class=\"\" @click=\"openDetailPage\">\n            <span>{{ $t(`${trPrefix}discover`) }}</span>\n          </WebccButton>\n        </div>\n        <div v-if=\"legalinfo\">\n          <span v-tooltip=\"tooltip\" class=\"cursor-help\">\n            <span>{{ $t(`${trPrefix}Price.addCosts`) }}</span>\n            <WebccIcon\n              name=\"site/info\"\n              class=\"-mt-0.5 inline-block h-4 w-4 text-thm\"\n            />\n          </span>\n        </div>\n      </div>\n      <!--  -->\n    </div>\n  </article>\n  <!-- </WebccLink> -->\n</template>\n\n<script setup lang=\"ts\">\nimport GoogleMaps from '~/components/common/functional/GoogleMaps.vue'\n\nconst trPrefix = 'www.components.hitbox.'\n\nconst props = withDefaults(\n  defineProps<{\n    accom: ResultDocument\n    checkin?: Date\n    checkout?: Date\n    pax?: number\n    breadcrumbLinks?: boolean\n    transformations?: Record<string, string>\n  }>(),\n  {\n    // languagePrefix: '',\n    checkin: undefined,\n    checkout: undefined,\n    pax: 1,\n    breadcrumbLinks: true,\n    transformations: () => {\n      return {\n        xl: 'tr:n-srp_hitbox_sm',\n        lg: 'tr:n-srp_hitbox_sm',\n        md: 'tr:n-srp_hitbox_l',\n      }\n    },\n  },\n)\n\nconst emit = defineEmits<{\n  'to-detailpage': []\n}>()\n\nconst { t } = useI18n()\nconst { buildAccommodationUrl } = useURLs()\nconst params = useParams()\nconst confData = useConfdata()\nconst flexTrip = useFlexTrip()\nconst bookmarks = useBookmarks()\nconst tracking = useTracking()\nconst ab = useAB()\nconst partner = usePartnerStore()\nconst addToWishlistEvt = useEventBus<AccommodationDto>('addToWishlist')\nconst deleteFromWishlistEvt =\n  useEventBus<AccommodationDto>('deleteFromWishlist')\nconst map = ref<typeof GoogleMaps>()\n\nconst mapVisibilityState = ref(false)\n\nconst isPricePerNightEnabled = useFlag('SRP-display-price-per-night')\n\nconst rating = useRating(() => props.accom.rating)\n\nconst priceText = computed(() => formatPrice(props.accom.trip?.price))\nconst pricePerNightText = computed(() =>\n  formatPrice(props.accom.trip?.pricePerNight),\n)\nconst targetUrl = computed(() => buildAccommodationUrl(props.accom))\nconst allowBookmark = computed(() => useStorageReady())\nconst isBookmarked = computed(() => bookmarks.has(props.accom.code))\nconst discount = computed(() => props.accom.trip?.reduction ?? 0)\nconst dateRageText = computed(() =>\n  formatDateRange(getTripDateRange(props.accom.trip ?? {}), 'monthDay'),\n)\nconst legalinfo = computed(() => ab.isActive('legalinfo'))\n\nconst tooltip = computed(() => {\n  const dependentPrice = t(`${trPrefix}Price.dependentPrice`)\n  const priceAfterInput = t(`${trPrefix}Price.priceAfterInput`)\n  const addCosts = t(`${trPrefix}Price.addCosts`)\n  const addCostsLong = t(`${trPrefix}Price.addCostsLong`)\n\n  const content = [\n    `<b>${dependentPrice}</b>`,\n    priceAfterInput,\n    `<b>${addCosts}</b>`,\n    addCostsLong,\n  ].join('<br/>')\n  return { content, html: true, triggers: ['hover', 'click'] }\n})\n\nfunction openDetailPage() {\n  emit('to-detailpage')\n  tracking.handlers?.eec.productClick(props.accom)\n  tracking.handlers?.ecommerce.selectItem(props.accom)\n  window.open(targetUrl.value, params.iframe ? '_self' : undefined)\n}\n\nfunction formatPrice(amount: number | undefined) {\n  return amount ? formatCurrency(amount, undefined, confData.currency) : ''\n}\n\nfunction zoom(delta: number) {\n  map.value?.zoom(delta)\n}\n\nasync function onBookmarkClick() {\n  if (partner.id && partner.jwt) {\n    processAsPartner()\n  } else {\n    addToWishlist()\n  }\n}\n\nfunction processAsPartner() {\n  if (isBookmarked.value) {\n    tracking.handlers?.ecommerce.removeFromWishlist([props.accom])\n  } else {\n    tracking.handlers?.ecommerce.addToWishlist([props.accom])\n  }\n  bookmarks.toggle(props.accom.code)\n}\n\nfunction addToWishlist() {\n  if (isBookmarked.value) {\n    deleteFromWishlistEvt.emit({ code: props.accom.code })\n  } else {\n    addToWishlistEvt.emit({ code: props.accom.code })\n  }\n}\n</script>\n\n<style scoped>\n.hitboxlayout {\n  grid-template-columns: minmax(275px, 1fr) 2fr;\n  grid-template-areas:\n    'image features'\n    'footerActions price'\n    'map map';\n}\n\n.gallery {\n  grid-area: image;\n}\n.badges-grid {\n  grid-area: badges;\n}\n.rating-grid {\n  grid-area: rating;\n}\n.breadcrumb-grid {\n  grid-area: breadcrumb;\n}\n.title-grid {\n  grid-area: title;\n}\n.features-grid {\n  grid-area: features;\n}\n.actions-grid {\n  grid-area: footerActions;\n}\n.price-grid {\n  grid-area: price;\n}\n.cta-grid {\n  grid-area: footerCta;\n}\n.accommodation-map {\n  grid-area: map;\n}\n</style>\n","<template>\n  <div\n    v-if=\"data.totalHits >= 10\"\n    v-impression:search:objectTeaserViewed.100=\"{ type, block }\"\n    class=\"flex flex-col gap-4 rounded-lg border border-bgr-200 bg-bgr p-6 shadow\"\n  >\n    <h2 class=\"text-2xl font-medium\">\n      {{ $t(`${trPrefix}title` as TranslationKey, { destination }) }}\n    </h2>\n    <span class=\"text-base font-normal\">{{\n      $t(`${trPrefix}description` as TranslationKey, { destination })\n    }}</span>\n    <div\n      class=\"flex flex-col gap-2 sm:grid sm:grid-cols-2 md:grid-cols-3 md:gap-10\"\n    >\n      <HitboxCard\n        v-for=\"(accom, index) in data.docs.slice(0, 3)\"\n        :key=\"index\"\n        :breadcrumb-links=\"false\"\n        class=\"w-full\"\n        :accom=\"accom\"\n        :transformations=\"IMAGE_TRANSFORMATIONS\"\n        @to-detailpage=\"onPropertyClick({ type, block })\"\n      />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst IMAGE_TRANSFORMATIONS = {\n  xl: 'tr:n-srp_hitbox_l',\n  lg: 'tr:n-srp_hitbox_l',\n  md: 'tr:n-srp_hitbox_l',\n}\n\nconst props = defineProps<{\n  type: ObjectTeaserType\n  block: ObjectTeaserBlock\n  destination: string\n  data: Result\n}>()\n\nconst tracking = useTracking()\n\nfunction onPropertyClick(params: {\n  type: ObjectTeaserType\n  block: ObjectTeaserBlock\n  destination?: string\n}) {\n  tracking.handlers?.search.objectTeaserClicked(params)\n}\n\nconst trPrefix = `www.components.views.search.ObjectTeaser.${props.destination ? 'withDestination' : 'withoutDestination'}.${props.type}.${props.block}.`\n</script>\n","<template>\n  <div v-if=\"show && visible\" class=\"flex flex-col gap-12\">\n    <SearchObjectTeaser\n      v-for=\"(entry, index) in apiResponse\"\n      :key=\"index\"\n      :type=\"type\"\n      :block=\"blocks[index]\"\n      :destination=\"destinationName\"\n      :data=\"entry\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst MIN_HITS_TO_DISPLAY = 10\nconst MIN_RESULTS_TO_DISPLAY = 3\nconst PLACE_ONLY_BLOCKS = ['sea', 'pool']\n\nconst TYPE_BLOCKS: Record<ObjectTeaserType, ObjectTeaserBlock[]> = {\n  destination: [\n    'reviews',\n    'sustainable',\n    'wlan',\n    'parking',\n    'aircondition',\n    'sea',\n    'pool',\n  ],\n  pool: ['reviews', 'sustainable', 'wlan', 'parking', 'aircondition'],\n  sea: ['reviews', 'sustainable', 'wlan', 'parking', 'aircondition'],\n  pets: ['reviews', 'sustainable', 'wlan', 'parking', 'hiking'],\n  skiing: ['reviews', 'sustainable', 'wlan', 'fireplace', 'cheapcheap'],\n  familyfriendly: ['reviews', 'sustainable', 'wlan', 'parking', 'aircondition'],\n}\n\nconst TYPE_FILTERS: Record<ObjectTeaserType, Params> = {\n  destination: {},\n  pool: { pool: true },\n  sea: { sea: 500 },\n  pets: { pets: true },\n  skiing: { skiing: true },\n  familyfriendly: { familyfriendly: true },\n}\n\nconst BLOCK_FILTERS: Record<ObjectTeaserBlock, Params> = {\n  reviews: { sorting: '-averagerating', stars: 3, pagesize: 3 },\n  sustainable: {\n    sustainable: true,\n    sorting: '-lastbookday',\n    stars: 3,\n    pagesize: 3,\n  },\n  wlan: { wlan: true, sorting: '-lastbookday', stars: 3, pagesize: 3 },\n  parking: { parking: true, sorting: '-lastbookday', stars: 3, pagesize: 3 },\n  aircondition: {\n    aircondition: true,\n    sorting: '-lastbookday',\n    stars: 3,\n    pagesize: 3,\n  },\n  hiking: { hiking: true, sorting: '-lastbookday', stars: 3, pagesize: 3 },\n  fireplace: {\n    fireplace: true,\n    sorting: '-lastbookday',\n    stars: 3,\n    pagesize: 3,\n  },\n  cheapcheap: {\n    cheapcheap: true,\n    sorting: '-lastbookday',\n    stars: 3,\n    pagesize: 3,\n  },\n  sea: { sea: 500, sorting: '-lastbookday', stars: 3, pagesize: 3 },\n  pool: { pool: true, sorting: '-lastbookday', stars: 3, pagesize: 3 },\n}\n\nconst props = withDefaults(\n  defineProps<{\n    show?: boolean\n    destination: Destination\n  }>(),\n  {\n    show: true,\n  },\n)\n\nconst confData = useConfdata()\nconst search = useSearch()\n\nconst type = computed(\n  () =>\n    (props.destination.filters?.[0].key || 'destination') as ObjectTeaserType,\n)\nconst destinationName = computed(() => getDestinationName(props.destination))\nconst blocks = computed(() => TYPE_BLOCKS[type.value])\n\nconst requests = computed(() => {\n  const { countryCode, regionCode, placeCode } = props.destination\n  const season = useSeason(search.filters.checkin)\n  const typeFilter = TYPE_FILTERS[type.value]\n  const blocksValue = placeCode\n    ? blocks.value\n    : blocks.value.filter((block) => !PLACE_ONLY_BLOCKS.includes(block))\n\n  return blocksValue.map((block) => ({\n    country: countryCode,\n    region: regionCode,\n    place: placeCode,\n    ...typeFilter,\n    ...BLOCK_FILTERS[block],\n    currency: confData.currency,\n    salesoffice: confData.salesoffice?.code,\n    season,\n  }))\n})\n\nconst { data: apiResponse } = useSearchMultiQuery(() => ({\n  requests: requests.value,\n  language: confData.language,\n}))\n\nconst visible = computed(\n  () =>\n    apiResponse.value &&\n    apiResponse.value.filter((entry) => entry.totalHits >= MIN_HITS_TO_DISPLAY)\n      .length >= MIN_RESULTS_TO_DISPLAY,\n)\n</script>\n","<template>\n  <section\n    v-if=\"isEnabled\"\n    v-track:impression=\"'search:seoContentImpression'\"\n    class=\"container-fluid-lg mb-14\"\n  >\n    <WebccHeading\n      :level=\"2\"\n      :space=\"'mt-0 mb-6'\"\n      class=\"text-txt-stronger font-medium\"\n    >\n      <span>{{ $t(`${trPrefix}introHeading`, { destination }) }}</span>\n    </WebccHeading>\n    <p class=\"text-base\">{{ text }}</p>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.content.SightsAndContent.'\n\nconst props = defineProps<{\n  modelValue: ContentAssetsIntro\n}>()\n\nconst { text } = props.modelValue\n\nconst isEnabled = useFlag('content-assets-intro-text')\n\nconst destination = computed(() =>\n  getDestinationName(useConfdata().destination),\n)\n</script>\n","<template>\n  <div ref=\"contentSight\" class=\"block rounded-lg shadow sm:flex\">\n    <img\n      :src=\"image.url\"\n      :alt=\"image.alt\"\n      class=\"square rounded-t-lg object-cover sm:w-1/2 sm:flex-1 sm:rounded-l-lg sm:rounded-r-none\"\n    />\n    <div\n      class=\"rounded-b-lg border-b border-r border-bgr-200 p-5 sm:w-1/2 sm:flex-1 sm:rounded-b-none sm:rounded-r-lg sm:border-t\"\n    >\n      <h3 class=\"mb-4 text-base font-medium text-txt-strongest md:text-xl\">\n        {{ title }}\n      </h3>\n      <p class=\"text-base text-txt-strong\">{{ text }}</p>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  modelValue: Sight\n}>()\n\nconst { title, text, image } = props.modelValue\nconst contentSight = ref<HTMLDivElement>()\n\nonMounted(() => {\n  observeContentSights()\n})\n\n/**\n * Creates IntersectionObserver and triggers fade in animation.\n */\nfunction observeContentSights() {\n  if (!contentSight.value) return\n\n  const observer = new IntersectionObserver(\n    (entries) => {\n      entries.forEach(({ isIntersecting, target }) => {\n        if (!isIntersecting) return\n        target.classList.add('motion-safe:animate-fadeIn')\n        observer.unobserve(target)\n      })\n    },\n    {\n      root: null,\n      rootMargin: '120px 0px',\n      threshold: 0.4,\n    },\n  )\n\n  observer.observe(contentSight.value)\n}\n</script>\n","<template>\n  <section class=\"container-fluid-lg mb-14\">\n    <header class=\"mb-8 flex justify-between space-x-3\">\n      <WebccHeading\n        :title=\"title\"\n        :level=\"2\"\n        :space=\"'mt-0'\"\n        class=\"text-txt-stronger font-medium\"\n      />\n      <WebccLink target=\"_blank\" anchor :to=\"link.url\" @click=\"onReadMoreClick\">\n        <WebccButton outline variant=\"theme\">\n          <span>{{ $t(`${trPrefix}showMore`) }}</span>\n        </WebccButton>\n      </WebccLink>\n    </header>\n    <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2\">\n      <SearchSightsAndContentItem\n        v-for=\"(sight, index) in sightsToShow\"\n        :key=\"index\"\n        :model-value=\"sight\"\n        class=\"block rounded-lg shadow sm:flex\"\n      />\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.content.SightsAndContent.'\n\nconst props = defineProps<{\n  modelValue: SightsInfo\n}>()\n\nconst { title, link, sights } = props.modelValue\n\nconst maxSights = computed(() => (useConfdata().destination.place ? 4 : 3))\nconst sightsToShow = computed(() => sights.slice(0, maxSights.value))\n\nfunction onReadMoreClick() {\n  useTracking().handlers?.search.requestTravelguide()\n}\n</script>\n","<template>\n  <section\n    v-if=\"isEnabled\"\n    v-track:impression=\"'search:topNaturalSightsImpression'\"\n    class=\"container-fluid-lg mb-14\"\n  >\n    <header class=\"mb-8 flex justify-between space-x-3\">\n      <WebccHeading\n        :title=\"title\"\n        :level=\"2\"\n        :space=\"'mt-0'\"\n        class=\"text-txt-stronger font-medium\"\n      />\n      <WebccLink\n        target=\"_blank\"\n        anchor\n        :to=\"link.url\"\n        @click.prevent=\"onReadMoreClick\"\n      >\n        <WebccButton outline variant=\"theme\">{{ link.title }}</WebccButton>\n      </WebccLink>\n    </header>\n    <p class=\"text-base\">{{ text }}</p>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  modelValue: NaturalSightsInfo\n}>()\n\nconst { title, text, link } = props.modelValue\n\nconst isEnabled = useFlag('top-natural-sights')\n\n/**\n * Handles external link clicks to ensure that URLs with anchors open correctly.\n *\n * Google Analytics may add the `_ga` param to the URL with anchor, making it invalid:\n * https://www.interhome.de/reisetipps/reiseziele/italien/toskana#toc-natural&_ga=2.40710050.1060525578.1706113349-1931037659.1706113349\n */\nfunction onReadMoreClick() {\n  window.open(link.url, '_blank')\n  useTracking().handlers?.search.topNaturalSightsRequest()\n}\n</script>\n","<template>\n  <div>\n    <div\n      class=\"absolute flex w-full justify-center border-2 border-bgr bg-thm-light py-1\"\n      :style=\"`bottom: ${pos}px`\"\n    >\n      <div class=\"flex flex-col text-sm font-medium\">\n        <span>{{ $t(`${trPrefix}max`, { value: max.toString() }) }}</span>\n        <span>{{ $t(`${trPrefix}min`, { value: min.toString() }) }}</span>\n      </div>\n    </div>\n    <div class=\"absolute bottom-0 flex w-full flex-col border border-bgr-100\">\n      <div\n        class=\"flex h-8 flex-row items-center justify-center text-sm font-medium\"\n      >\n        <WebccIcon class=\"mr-1 h-4 w-4 text-wrn\" name=\"searchpage/sun\" />\n        <span>{{ $t(`${trPrefix}hr_s`, sun) }}</span>\n      </div>\n      <div\n        class=\"flex h-8 flex-row items-center justify-center bg-thm text-center text-sm text-thm-contrast\"\n      >\n        <WebccIcon class=\"mr-1 h-4 w-4\" name=\"searchpage/umbrella\" />\n        <span>{{ $t(`${trPrefix}day_s`, rain) }}</span>\n      </div>\n      <div\n        class=\"h-12 p-2 text-center text-lg\"\n        :class=\"act ? 'border-b-4 border-thm font-medium' : ''\"\n      >\n        {{ name }}\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.content.WeatherInfo.'\n\nconst props = defineProps<{\n  modelValue: WeatherInfoMonth\n  pos: number\n}>()\n\nconst { id, name, max, min, sun, rain } = props.modelValue\n\nconst act = computed(() => id === new Date().getMonth())\n</script>\n","<template>\n  <section\n    v-track:impression=\"'search:weatherInfoImpression'\"\n    class=\"container-fluid-lg bg-bgr\"\n  >\n    <h2 class=\"mb-4 text-2xl font-medium md:text-2xl\">{{ title }}</h2>\n    <div\n      class=\"relative w-full overflow-x-auto rounded border border-bgr-100 shadow\"\n    >\n      <div class=\"relative top-20 mx-2 border-b bg-bgr-100\" />\n      <div class=\"relative top-40 mx-2 border-b bg-bgr-100\" />\n      <div class=\"grid h-96 w-full min-w-[960px] grid-cols-12 p-2\">\n        <SearchWeatherInfoMonth\n          v-for=\"(month, index) in months\"\n          :key=\"index\"\n          :model-value=\"month\"\n          :pos=\"posOf(month)\"\n          class=\"grow-1 relative\"\n        />\n      </div>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst BOTTOM = 130\nconst HEIGHT = 170\n\nconst props = defineProps<{\n  modelValue: WeatherInfo\n}>()\n\nconst { title, months } = props.modelValue\n\nconst minTemp = computed(\n  () =>\n    months.reduce((next, current) => (next.max <= current.max ? next : current))\n      .max,\n)\nconst maxTemp = computed(\n  () =>\n    months.reduce((next, current) => (next.max >= current.max ? next : current))\n      .max,\n)\n\nfunction posOf({ max }: WeatherInfoMonth) {\n  const relativeTemp = (max - minTemp.value) / (maxTemp.value - minTemp.value)\n  return Math.round(BOTTOM + HEIGHT * relativeTemp)\n}\n</script>\n","<template>\n  <section\n    v-impression:contentAssets:secretSpotsDisplayed.100\n    class=\"container-fluid-lg mb-14\"\n  >\n    <SearchAssetsHeader\n      :title=\"title\"\n      :link=\"link.url\"\n      :on-read-more-click=\"onReadMoreClick\"\n    >\n      <template #default>{{ link.title }}</template>\n    </SearchAssetsHeader>\n    <ul class=\"list-disc ml-4 px-4\">\n      <li v-for=\"(item, index) in content\" :key=\"index\" class=\"mb-2\">\n        {{ item }}\n      </li>\n    </ul>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  modelValue: SecretSpot\n}>()\n\nconst { title, link, content } = props.modelValue\n\nfunction onReadMoreClick() {\n  useTracking().handlers?.contentAssets.secretSpotsReadMore()\n}\n</script>\n","<template>\n  <section\n    v-impression:contentAssets:threeDaySummaryDisplayed.100\n    class=\"container-fluid-lg mb-14\"\n  >\n    <SearchAssetsHeader\n      :title=\"title\"\n      :link=\"link.url\"\n      :on-read-more-click=\"onReadMoreClick\"\n    >\n      <template #default>{{ link.title }}</template>\n    </SearchAssetsHeader>\n    <p class=\"text-base\">{{ content }}</p>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  modelValue: ThreeDaysSummary\n}>()\n\nconst { title, link, content } = props.modelValue\n\nfunction onReadMoreClick() {\n  useTracking().handlers?.contentAssets.threeDaySummaryReadMore()\n}\n</script>\n","<template>\n  <section\n    v-impression:contentAssets:touristicActivitiesDisplayed.100\n    class=\"container-fluid-lg mb-14\"\n  >\n    <SearchAssetsHeader\n      :title=\"title\"\n      :link=\"link.url\"\n      :on-read-more-click=\"onReadMoreClick\"\n    >\n      <template #default>{{ link.title }}</template>\n    </SearchAssetsHeader>\n    <div class=\"ml-4\">\n      <div v-for=\"(item, index) in content\" :key=\"index\" class=\"mb-6\">\n        <h3 class=\"mb-4 text-base font-medium text-txt-strongest md:text-xl\">\n          {{ item.title }}\n        </h3>\n        <p class=\"text-base text-txt-strong\">{{ item.content }}</p>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  modelValue: TouristicActivities\n}>()\n\nconst { title, link, content } = props.modelValue\n\nfunction onReadMoreClick() {\n  useTracking().handlers?.contentAssets.touristicActivitiesReadMore()\n}\n</script>\n","<template>\n  <!--\n    If at any point in the future we also want to link to pages in our application,\n    we should remove the \"absolute\" attribute but have to reconsider the fact\n    that the travelguide creates canonical without trailing slashes\n    while we creathe them with trailing slashes\n  -->\n  <WebccLink anchor absolute target=\"_blank\" :to=\"link.url\" @click=\"onClick\">\n    <figure class=\"h-[60%] w-64\">\n      <img\n        class=\"h-full object-cover\"\n        :src=\"imageUrl\"\n        :alt=\"title\"\n        :title=\"title\"\n      />\n    </figure>\n    <div class=\"h-[40%] p-2\">\n      <strong class=\"font-medium\">{{ destinationName }}</strong>\n      <span class=\"mt-2 flex flex-auto items-center leading-none\">\n        {{ title }}\n      </span>\n    </div>\n  </WebccLink>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  modelValue: Teaser\n}>()\n\nconst { title, link, image, destinationName } = props.modelValue\n\nconst imageUrl = computed(() => getPublicUrl(useConfdata().domain, image.url))\n\nfunction onClick() {\n  useTracking().handlers?.search.articleTeaserDetails()\n}\n</script>\n","<template>\n  <div @mouseenter=\"hovering = true\" @mouseleave=\"hovering = false\">\n    <div\n      ref=\"scroller\"\n      class=\"overflow-x-scroll hide-scrollbar relative flex w-full snap-x snap-proximity scroll-px-2 gap-2 scroll-smooth\"\n      :class=\"$attrs.class\"\n      @scroll=\"scrollCounter++\"\n      @scrollend=\"emitItemsDisplay\"\n    >\n      <slot />\n    </div>\n    <template v-for=\"direction in visibleButtons\" :key=\"direction\">\n      <slot name=\"button\" :direction :fade :scroll-to>\n        <div\n          v-if=\"fade\"\n          class=\"absolute top-0 h-full w-1/2 from-transparent from-90% to-bgr pointer-events-none\"\n          :class=\"[`${direction}-0`, `bg-gradient-to-${direction.at(0)}`]\"\n        />\n        <WebccButton\n          variant=\"white\"\n          :icon=\"`searchpage/chevron-${direction}-large`\"\n          round\n          class=\"absolute top-1/2\"\n          :class=\"[`${direction}-2`]\"\n          @click=\"scrollTo(direction)\"\n        />\n      </slot>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { range } from 'lodash-es'\n\nconst props = withDefaults(\n  defineProps<{\n    step?: number\n    fade?: boolean\n    buttons?: boolean | 'hover'\n  }>(),\n  {\n    step: 200,\n    fade: false,\n    buttons: 'hover',\n  },\n)\n\nconst emit = defineEmits<{\n  scrollClick: [direction: ScrollDirectionHorizontal]\n  itemsDisplay: [\n    indexes: number[],\n    indexesChanged: number[],\n    direction?: ScrollDirectionHorizontal,\n  ]\n}>()\n\nconst scroller = ref<HTMLDivElement>()\n\nconst lastIndexes = ref<number[]>([])\n\nconst intersectionObserver = useIntersectionObserver(scroller, ([entry]) => {\n  if (!entry?.isIntersecting) return\n\n  emitItemsDisplay()\n})\n\nconst mutationObserver = useMutationObserver(\n  scroller,\n  (mutations) => {\n    if (!mutations.length) return\n\n    // Toggle on content change the intersection observer and the scroll counter\n    // to make sure the events are emitted and the buttons are rendered\n    intersectionObserver.pause()\n    intersectionObserver.resume()\n    scrollCounter.value++\n  },\n  { childList: true },\n)\n\nconst hovering = ref(false)\nconst scrollCounter = ref(0)\n\nconst visibleButtons = computed(() => {\n  if (!scroller.value) return []\n  if (!scrollCounter.value) return []\n  if ((props.buttons === 'hover' && !hovering.value) || !props.buttons)\n    return []\n\n  const { scrollLeft, offsetWidth, scrollWidth } = scroller.value\n  return [\n    scrollLeft ? 'left' : undefined,\n    scrollLeft + offsetWidth !== scrollWidth ? 'right' : undefined,\n  ].filter(Boolean) as ScrollDirectionHorizontal[]\n})\n\nonMounted(() => scrollCounter.value++)\n\nonBeforeUnmount(() => {\n  intersectionObserver.stop()\n  mutationObserver.stop()\n})\n\nfunction scrollTo(direction: ScrollDirectionHorizontal) {\n  emit('scrollClick', direction)\n\n  if (!scroller.value) return\n\n  scroller.value.scrollLeft += (direction === 'left' ? -1 : 1) * props.step\n}\n\nfunction emitItemsDisplay() {\n  if (!scroller.value?.children.length) return\n\n  const { offsetWidth, scrollLeft, children } = scroller.value\n  const [{ clientWidth }] = children\n  const start = Math.floor(scrollLeft / clientWidth)\n  const max = Math.round(offsetWidth / clientWidth)\n  const count = Math.min(children.length, max)\n  const indexes = range(start, start + count)\n  const indexesChanged = getIndexesChanged(indexes)\n  const direction = getDirection(indexes)\n\n  emit('itemsDisplay', indexes, indexesChanged, direction)\n\n  lastIndexes.value = indexes\n}\n\nfunction getIndexesChanged(indexes: number[]) {\n  return indexes.filter((index) => !lastIndexes.value.includes(index))\n}\n\nfunction getDirection(indexes: number[]) {\n  if (indexes[0] < lastIndexes.value[0]) return 'left'\n  if (indexes[0] > lastIndexes.value[0]) return 'right'\n  return undefined\n}\n</script>\n","<template>\n  <section\n    v-impression:search:articleTeaserVisible.100\n    class=\"container-fluid-lg relative\"\n  >\n    <h2 class=\"mb-4 text-2xl font-medium\">{{ title }}</h2>\n    <WebccScroll\n      :buttons=\"screen.isSmall || 'hover'\"\n      @scroll-click=\"onScrollClick\"\n    >\n      <SearchArticleTeaserItem\n        v-for=\"(teaser, index) in teasers\"\n        :key=\"index\"\n        :model-value=\"teaser\"\n        class=\"h-64 w-64 flex-shrink-0 flex-grow-0 cursor-pointer snap-start overflow-hidden rounded border bg-bgr shadow-md\"\n      />\n    </WebccScroll>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  modelValue: TeasersInfo\n}>()\n\nconst screen = useScreen()\n\nconst { title, teasers } = toRefs(props.modelValue)\n\nfunction onScrollClick(direction: ScrollDirectionHorizontal) {\n  useTracking().handlers?.search.articleTeaserScrollClick(direction)\n}\n</script>\n","/**\n * Encapsulates requests to Nova API.\n */\nexport default function useNovaApi() {\n  async function getContentAssets(params: GetContentAssetsParams) {\n    return await useFetch<ContentAssets>('/nova/content-assets', { params })\n  }\n\n  return { getContentAssets }\n}\n","export default async function useContentAssets(filter?: string) {\n  const { domain, locale, destination } = useConfdata()\n\n  return await useNovaApi().getContentAssets({\n    destination: getDestinationCode(destination) ?? '',\n    filter,\n    locale: getLocale(domain, locale),\n  })\n}\n\nfunction getDestinationCode(destination: Destination) {\n  const { country, region, place } = getDestinationQuery(destination)\n\n  return place ?? region ?? country\n}\n\n/**\n * Determines the locale for Travelпuide based on the domain and our locale.\n *\n * Always returns the default language for `.com`,\n * since for `en-GB` Travalguide returns `.co.uk` resources.\n *\n * @see https://jira.migros.net/browse/IHGWEBCC-1474\n */\nfunction getLocale(domain: Domain, locale: string) {\n  return domain?.endsWith('.com') ? 'en' : locale.toLowerCase()\n}\n","<template>\n  <div>\n    <SearchContentAssetsIntro\n      v-if=\"assets?.intro\"\n      v-model=\"assets.intro\"\n      class=\"mb-14 first:mt-14 last:mb-0\"\n    />\n    <SearchSightsAndContent\n      v-if=\"assets?.sights\"\n      v-model=\"assets.sights\"\n      class=\"mb-14 first:mt-14 last:mb-0\"\n    />\n    <SearchNaturalSights\n      v-if=\"assets?.naturalSights\"\n      v-model=\"assets.naturalSights\"\n      class=\"mb-14 first:mt-14 last:mb-0\"\n    />\n    <SearchWeatherInfo\n      v-if=\"assets?.weather\"\n      v-model=\"assets.weather\"\n      class=\"mb-14 first:mt-14 last:mb-0\"\n    />\n    <SearchSecretSpot\n      v-if=\"assets?.secretSpots\"\n      v-model=\"assets.secretSpots\"\n      class=\"mb-14 first:mt-14 last:mb-0\"\n    />\n    <SearchThreeDaySummary\n      v-if=\"assets?.threeDaysSummary\"\n      v-model=\"assets.threeDaysSummary\"\n      class=\"mb-14 first:mt-14 last:mb-0\"\n    />\n    <SearchTouristicActivities\n      v-if=\"assets?.touristicActivities\"\n      v-model=\"assets.touristicActivities\"\n      class=\"mb-14 first:mt-14 last:mb-0\"\n    />\n    <SearchArticleTeaser\n      v-if=\"assets?.teasers\"\n      v-model=\"assets.teasers\"\n      class=\"mb-14 first:mt-14 last:mb-0\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  filter?: string\n}>()\n\nconst assets = ref<ContentAssets>()\n\nonMounted(async () => {\n  assets.value = (await useContentAssets(props.filter)).data.value ?? undefined\n})\n</script>\n","export default function useSearchApi() {\n  const baseURL = '/search-api/v1/engines/accomtrips'\n\n  async function search(query: SearchApiParams) {\n    return await useFetch<Result>('/', {\n      baseURL,\n      params: mapSearchApiParams(query),\n      transform: (result) => setDocPosition(result, query),\n    })\n  }\n\n  async function getLinkedObjects(code: string, language?: string) {\n    return $fetch<Result>(`/search-api/v1/accoms/${code}/linked-objects`, {\n      headers: removeFalsy({ 'Accept-Language': language }),\n    })\n  }\n\n  return { search, getLinkedObjects }\n}\n","<template>\n  <section v-if=\"filtersToDisplay.length\">\n    <WebccHeading\n      :level=\"2\"\n      color=\"txt\"\n      :title=\"title\"\n      :space=\"'mb-6'\"\n      class=\"text-2xl font-medium\"\n    />\n    <div class=\"-ml-4 mb-8 flex flex-wrap gap-y-2 text-txt-strongest\">\n      <WebccLink\n        v-for=\"(item, i) in filtersToDisplay\"\n        :key=\"i\"\n        class=\"border-r px-4 last:border-r-0 hover:text-cta\"\n        :to=\"item.href\"\n      >\n        {{ item.label }} ({{ item.amount }})\n      </WebccLink>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.searchTeaser.'\n\nconst { t } = useI18n()\nconst params = useParams()\nconst confData = useConfdata()\n\nconst facets = ref<SearchApiFacets>()\nconst { facets: searchFacets } = storeToRefs(useSearch())\n\nconst additionalBody = computed(() => confData.additionalBody as SearchPageBody)\nconst searchfilterconfs = computed(\n  () => additionalBody.value.searchfilterconfs ?? [],\n)\nconst destinationName = computed(() => getDestinationName(confData.destination))\nconst heading = computed(() => t(`${trPrefix}headingDestinationNoPlaceholder`))\nconst title = computed(() =>\n  [destinationName.value, heading.value].filter(Boolean).join(' - '),\n)\nconst hasFilters = computed(() => !!confData.destination.filters?.length)\n\nconst nonEmptyFacets = computed(() => {\n  const result: Record<string, Record<string, number>> & {\n    totalHits?: number\n  } = {}\n  Object.entries(facets.value ?? {}).forEach(([key, value]) => {\n    result[key] = {}\n    Object.entries(value as { [key: string]: number }).forEach(\n      ([key1, value1]) => {\n        if (value1 > 20) {\n          result[key][key1] = value1\n        }\n      },\n    )\n  })\n  return result\n})\n\nconst filtersToDisplay: Ref<(FilterLink & { amount: number })[]> = computed(\n  () => {\n    const result: (FilterLink & { amount: number })[] = []\n    additionalBody.value.WithFilters.forEach((filter) => {\n      const filterCopy: FilterLink & { amount: number } = JSON.parse(\n        JSON.stringify(filter),\n      )\n      let found = false\n      const path = filterCopy.name\n      // https://trello.com/c/OT7fEOZo/87-diskrepanzen-zwischen-filtern-in-conf-api-und-filtern-in-webcc-api\n      const filtername = searchfilterconfs.value.find(\n        (filterconf) => filterconf.filter === path,\n      )?.filter\n      // Ist der Filter Teil der Attribute?\n      Object.entries(nonEmptyFacets.value.attributes || {}).forEach(\n        ([key, value]) => {\n          if (key === filtername) {\n            filterCopy.amount = value\n            result.push(filterCopy)\n            found = true\n          }\n        },\n      )\n      if (!found) {\n        // Ist der Filter Teil der Distanzen?\n        if (['sea', 'lake', 'ski', 'center'].includes(filtername || '')) {\n          const filterValue = searchfilterconfs.value.find(\n            (filterconf) => filterconf.filter === path,\n          )?.slug.value\n          Object.entries(nonEmptyFacets.value[filtername!] || {}).forEach(\n            ([key, value]) => {\n              if (key === filterValue) {\n                filterCopy.amount = value\n                result.push(filterCopy)\n              }\n            },\n          )\n          // Ist der Filter ein Pax-Filter?\n        } else if (filtername === 'pax') {\n          const filterValue =\n            searchfilterconfs.value.find(\n              (filterconf) => filterconf.filter === path,\n            )?.slug.value || ''\n          filterCopy.amount = nonEmptyFacets.value.pax?.[filterValue]\n          // Gibt es für die Paxzahl Ergebnisse?\n          if (filterCopy.amount > 4) {\n            result.push(filterCopy)\n          }\n        }\n      }\n    })\n    return result.sort((a, b) => (a.label < b.label ? -1 : 1))\n  },\n)\n\nwatch(searchFacets, updateFacets)\n\nonMounted(updateFacets)\n\nasync function updateFacets() {\n  if (\n    !params.iframe &&\n    confData.isCanonicalPage(useRequestURL()) &&\n    hasFilters.value\n  ) {\n    // Fetching facets based only on geo params for canonical pages with filters\n    const { data } = await useSearchApi().search({\n      salesoffice: confData.salesoffice?.code,\n      currency: confData.currency,\n      language: confData.language,\n      ...getDestinationQuery(confData.destination),\n    })\n\n    facets.value = data.value?.facets\n  } else {\n    facets.value = useSearch().facets\n  }\n}\n</script>\n","<template>\n  <div v-if=\"subDestinations.length\">\n    <WebccHeading\n      :level=\"2\"\n      color=\"txt\"\n      :title=\"title\"\n      :space=\"'mb-6'\"\n      class=\"text-2xl font-medium\"\n    />\n    <div class=\"-ml-4 mb-8 flex flex-wrap gap-y-2 text-txt-strongest\">\n      <WebccLink\n        v-for=\"({ href, label }, index) in subDestinations\"\n        :key=\"index\"\n        class=\"border-r px-4 last:border-r-0 hover:text-cta\"\n        :to=\"href\"\n      >\n        {{ label }}\n      </WebccLink>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.searchTeaser.'\n\nconst { t } = useI18n()\n\nconst props = defineProps<{\n  destination: Destination\n}>()\n\nconst subDestinations = computed(\n  () => (useConfdata().additionalBody as SearchPageBody).subDestinations,\n)\nconst title = computed(() =>\n  [\n    getDestinationName(props.destination),\n    t(`${trPrefix}headingFilterNoPlaceholder`),\n  ]\n    .filter(Boolean)\n    .join(' - '),\n)\n</script>\n","<template>\n  <div>\n    <div class=\"relative\">\n      <div\n        ref=\"slotContent\"\n        class=\"h-full overflow-hidden transition-height duration-700 ease-in\"\n        :style=\"contentHeight !== 0 ? { maxHeight: contentHeight + 'px' } : ''\"\n      >\n        <slot />\n      </div>\n      <!-- Fade in div -->\n      <div\n        class=\"from-0 absolute inset-0 bg-gradient-to-t from-bgr via-bgr via-15% to-transparent to-40% transition-opacity duration-300\"\n        :class=\"fadeClasses\"\n      ></div>\n    </div>\n    <div class=\"mt-2 flex-row justify-center\" :class=\"btnClasses\">\n      <WebccButton outline variant=\"theme\" @click=\"expand\">\n        <span>{{ $t(`${trPrefix}showMore`) }}</span>\n      </WebccButton>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.ui.ExpandableContent.'\n\nconst minContentHeight = 384\nconst expanded = ref(false)\n\nconst emit = defineEmits<{ (e: 'expand'): void }>()\n\nconst slotContent: Ref<null | HTMLDivElement> = ref(null)\n\nconst maxContentHeight = computed(() => {\n  return slotContent.value?.scrollHeight\n})\n\nconst fadeClasses = computed(() => {\n  if (expanded.value) {\n    return 'hidden'\n  }\n\n  if (maxContentHeight.value && maxContentHeight.value <= minContentHeight) {\n    return 'hidden'\n  }\n\n  return 'flex'\n})\n\nconst btnClasses = computed(() => {\n  if (expanded.value) {\n    return 'hidden'\n  }\n\n  if (maxContentHeight.value && maxContentHeight.value <= minContentHeight) {\n    return 'hidden'\n  }\n\n  return 'flex'\n})\n\nconst contentHeight = computed(() => {\n  if (expanded.value) {\n    return slotContent.value?.scrollHeight\n  }\n\n  return minContentHeight\n})\n\nfunction expand() {\n  emit('expand')\n  expanded.value = true\n}\n</script>\n","<template>\n  <section class=\"bg-bgr py-6\">\n    <div class=\"container-fluid-lg mb-5\">\n      <slot />\n    </div>\n\n    <div class=\"container-fluid-lg mb-12\">\n      <slot name=\"searchteaser\" />\n    </div>\n\n    <div class=\"container-fluid-lg mb-12\">\n      <SearchTeaserFilters />\n      <TeaserSubDestinations :destination=\"confData.destination\" />\n      <slot name=\"contentassets\" />\n    </div>\n\n    <div v-if=\"additionalBody.seotext.content_html\" class=\"container-fluid-lg\">\n      <WebccExpandable :key=\"additionalBody.seotext.content_html\">\n        <div v-impression:search:seoTextImpression.100=\"'start'\"></div>\n        <article\n          class=\"prose prose-richtext-searchpage mt-4 max-w-none prose-img:w-full\"\n          @click.prevent=\"onSeoTextClick\"\n          v-html=\"additionalBody.seotext.content_html\"\n        ></article>\n        <div v-impression:search:seoTextImpression.100=\"'end'\"></div>\n      </WebccExpandable>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst { buildValidUrl } = useURLs()\nconst confData = useConfdata()\n\nconst additionalBody = computed(\n  () => useConfdata().additionalBody as SearchPageBody,\n)\n\nfunction onSeoTextClick(event: MouseEvent) {\n  const targetA = findTargetA(event)\n  const href = targetA?.getAttribute('href')\n\n  if (!href) {\n    return\n  }\n\n  if (href.startsWith('#')) {\n    document.getElementById(href.substring(1))?.scrollIntoView()\n  } else {\n    navigateTo(buildValidUrl(href).toString(), { external: true })\n  }\n}\n</script>\n","// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n","module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n  var i, ch, cache = encodeCache[exclude];\n  if (cache) { return cache; }\n\n  cache = encodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n\n    if (/^[0-9a-z]$/i.test(ch)) {\n      // always allow unencoded alphanumeric characters\n      cache.push(ch);\n    } else {\n      cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n    }\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    cache[exclude.charCodeAt(i)] = exclude[i];\n  }\n\n  return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n//  - string       - string to encode\n//  - exclude      - list of characters to ignore (in addition to a-zA-Z0-9)\n//  - keepEscaped  - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n  var i, l, code, nextCode, cache,\n      result = '';\n\n  if (typeof exclude !== 'string') {\n    // encode(string, keepEscaped)\n    keepEscaped  = exclude;\n    exclude = encode.defaultChars;\n  }\n\n  if (typeof keepEscaped === 'undefined') {\n    keepEscaped = true;\n  }\n\n  cache = getEncodeCache(exclude);\n\n  for (i = 0, l = string.length; i < l; i++) {\n    code = string.charCodeAt(i);\n\n    if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n      if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n        result += string.slice(i, i + 3);\n        i += 2;\n        continue;\n      }\n    }\n\n    if (code < 128) {\n      result += cache[code];\n      continue;\n    }\n\n    if (code >= 0xD800 && code <= 0xDFFF) {\n      if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n        nextCode = string.charCodeAt(i + 1);\n        if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n          result += encodeURIComponent(string[i] + string[i + 1]);\n          i++;\n          continue;\n        }\n      }\n      result += '%EF%BF%BD';\n      continue;\n    }\n\n    result += encodeURIComponent(string[i]);\n  }\n\n  return result;\n}\n\nencode.defaultChars   = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n","\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n  var i, ch, cache = decodeCache[exclude];\n  if (cache) { return cache; }\n\n  cache = decodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n    cache.push(ch);\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    ch = exclude.charCodeAt(i);\n    cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n  }\n\n  return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n  var cache;\n\n  if (typeof exclude !== 'string') {\n    exclude = decode.defaultChars;\n  }\n\n  cache = getDecodeCache(exclude);\n\n  return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n    var i, l, b1, b2, b3, b4, chr,\n        result = '';\n\n    for (i = 0, l = seq.length; i < l; i += 3) {\n      b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n      if (b1 < 0x80) {\n        result += cache[b1];\n        continue;\n      }\n\n      if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n        // 110xxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n        if ((b2 & 0xC0) === 0x80) {\n          chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n          if (chr < 0x80) {\n            result += '\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 3;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n        // 1110xxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n          chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n          if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n            result += '\\ufffd\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 6;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n        // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n        b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n          chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n          if (chr < 0x10000 || chr > 0x10FFFF) {\n            result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n          } else {\n            chr -= 0x10000;\n            result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n          }\n\n          i += 9;\n          continue;\n        }\n      }\n\n      result += '\\ufffd';\n    }\n\n    return result;\n  });\n}\n\n\ndecode.defaultChars   = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n","\n'use strict';\n\n\nmodule.exports = function format(url) {\n  var result = '';\n\n  result += url.protocol || '';\n  result += url.slashes ? '//' : '';\n  result += url.auth ? url.auth + '@' : '';\n\n  if (url.hostname && url.hostname.indexOf(':') !== -1) {\n    // ipv6 address\n    result += '[' + url.hostname + ']';\n  } else {\n    result += url.hostname || '';\n  }\n\n  result += url.port ? ':' + url.port : '';\n  result += url.pathname || '';\n  result += url.search || '';\n  result += url.hash || '';\n\n  return result;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n//    e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n//    so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n//    i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n//    (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n//    which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = [ '\\'' ].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n    hostEndingChars = [ '/', '?', '#' ],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    /* eslint-disable no-script-url */\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    };\n    /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n  if (url && url instanceof Url) { return url; }\n\n  var u = new Url();\n  u.parse(url, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n  var i, l, lowerProto, hec, slashes,\n      rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    lowerProto = proto.toLowerCase();\n    this.protocol = proto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (i = 0; i < hostEndingChars.length; i++) {\n      hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = auth;\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (i = 0; i < nonHostChars.length; i++) {\n      hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1) {\n      hostEnd = rest.length;\n    }\n\n    if (rest[hostEnd - 1] === ':') { hostEnd--; }\n    var host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost(host);\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) { continue; }\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    }\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n    }\n  }\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    rest = rest.slice(0, qm);\n  }\n  if (rest) { this.pathname = rest; }\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '';\n  }\n\n  return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n","'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse  = require('./parse');\n","module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","module.exports=/[\\0-\\x1F\\x7F-\\x9F]/","module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/","module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc  = require('./categories/Cc/regex');\nexports.Cf  = require('./categories/Cf/regex');\nexports.P   = require('./categories/P/regex');\nexports.Z   = require('./categories/Z/regex');\n","// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n  return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be object');\n    }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n  return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n  /*eslint no-bitwise:0*/\n  // broken sequence\n  if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n  // never used\n  if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n  if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n  // control codes\n  if (c >= 0x00 && c <= 0x08) { return false; }\n  if (c === 0x0B) { return false; }\n  if (c >= 0x0E && c <= 0x1F) { return false; }\n  if (c >= 0x7F && c <= 0x9F) { return false; }\n  // out of range\n  if (c > 0x10FFFF) { return false; }\n  return true;\n}\n\nfunction fromCodePoint(c) {\n  /*eslint no-bitwise:0*/\n  if (c > 0xffff) {\n    c -= 0x10000;\n    var surrogate1 = 0xd800 + (c >> 10),\n        surrogate2 = 0xdc00 + (c & 0x3ff);\n\n    return String.fromCharCode(surrogate1, surrogate2);\n  }\n  return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE  = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE       = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n  var code;\n\n  if (has(entities, name)) {\n    return entities[name];\n  }\n\n  if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    code = name[1].toLowerCase() === 'x' ?\n      parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n    if (isValidEntityCode(code)) {\n      return fromCodePoint(code);\n    }\n  }\n\n  return match;\n}\n\n/*function replaceEntities(str) {\n  if (str.indexOf('&') < 0) { return str; }\n\n  return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n  if (str.indexOf('\\\\') < 0) { return str; }\n  return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n  if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n  return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n    if (escaped) { return escaped; }\n    return replaceEntityPattern(match, entity);\n  });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n  return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n  if (HTML_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n  }\n  return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n  return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n  switch (code) {\n    case 0x09:\n    case 0x20:\n      return true;\n  }\n  return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n  if (code >= 0x2000 && code <= 0x200A) { return true; }\n  switch (code) {\n    case 0x09: // \\t\n    case 0x0A: // \\n\n    case 0x0B: // \\v\n    case 0x0C: // \\f\n    case 0x0D: // \\r\n    case 0x20:\n    case 0xA0:\n    case 0x1680:\n    case 0x202F:\n    case 0x205F:\n    case 0x3000:\n      return true;\n  }\n  return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n  return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n  switch (ch) {\n    case 0x21/* ! */:\n    case 0x22/* \" */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x27/* ' */:\n    case 0x28/* ( */:\n    case 0x29/* ) */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2C/* , */:\n    case 0x2D/* - */:\n    case 0x2E/* . */:\n    case 0x2F/* / */:\n    case 0x3A/* : */:\n    case 0x3B/* ; */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x3F/* ? */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7C/* | */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true;\n    default:\n      return false;\n  }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n  // Trim and collapse whitespace\n  //\n  str = str.trim().replace(/\\s+/g, ' ');\n\n  // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n  // fixed in v12 (couldn't find any details).\n  //\n  // So treat this one as a special case\n  // (remove this when node v10 is no longer supported).\n  //\n  if ('ẞ'.toLowerCase() === 'Ṿ') {\n    str = str.replace(/ẞ/g, 'ß');\n  }\n\n  // .toLowerCase().toUpperCase() should get rid of all differences\n  // between letter variants.\n  //\n  // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n  // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n  // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n  // uppercased versions).\n  //\n  // Here's an example showing how it happens. Lets take greek letter omega:\n  // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n  //\n  // Unicode entries:\n  // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n  // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n  // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n  // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n  //\n  // Case-insensitive comparison should treat all of them as equivalent.\n  //\n  // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n  // and .toUpperCase() doesn't change ϴ (already uppercase).\n  //\n  // Applying first lower then upper case normalizes any character:\n  // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n  //\n  // Note: this is equivalent to unicode case folding; unicode normalization\n  // is a different step that is not required here.\n  //\n  // Final result should be uppercased, because it's later stored in an object\n  // (this avoid a conflict with Object.prototype members,\n  // most notably, `__proto__`)\n  //\n  return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib                 = {};\nexports.lib.mdurl           = require('mdurl');\nexports.lib.ucmicro         = require('uc.micro');\n\nexports.assign              = assign;\nexports.isString            = isString;\nexports.has                 = has;\nexports.unescapeMd          = unescapeMd;\nexports.unescapeAll         = unescapeAll;\nexports.isValidEntityCode   = isValidEntityCode;\nexports.fromCodePoint       = fromCodePoint;\n// exports.replaceEntities     = replaceEntities;\nexports.escapeHtml          = escapeHtml;\nexports.arrayReplaceAt      = arrayReplaceAt;\nexports.isSpace             = isSpace;\nexports.isWhiteSpace        = isWhiteSpace;\nexports.isMdAsciiPunct      = isMdAsciiPunct;\nexports.isPunctChar         = isPunctChar;\nexports.escapeRE            = escapeRE;\nexports.normalizeReference  = normalizeReference;\n","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n  var level, found, marker, prevPos,\n      labelEnd = -1,\n      max = state.posMax,\n      oldPos = state.pos;\n\n  state.pos = start + 1;\n  level = 1;\n\n  while (state.pos < max) {\n    marker = state.src.charCodeAt(state.pos);\n    if (marker === 0x5D /* ] */) {\n      level--;\n      if (level === 0) {\n        found = true;\n        break;\n      }\n    }\n\n    prevPos = state.pos;\n    state.md.inline.skipToken(state);\n    if (marker === 0x5B /* [ */) {\n      if (prevPos === state.pos - 1) {\n        // increase level if we find text `[`, which is not a part of any token\n        level++;\n      } else if (disableNested) {\n        state.pos = oldPos;\n        return -1;\n      }\n    }\n  }\n\n  if (found) {\n    labelEnd = state.pos;\n  }\n\n  // restore old state\n  state.pos = oldPos;\n\n  return labelEnd;\n};\n","// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, start, max) {\n  var code, level,\n      pos = start,\n      result = {\n        ok: false,\n        pos: 0,\n        lines: 0,\n        str: ''\n      };\n\n  if (str.charCodeAt(pos) === 0x3C /* < */) {\n    pos++;\n    while (pos < max) {\n      code = str.charCodeAt(pos);\n      if (code === 0x0A /* \\n */) { return result; }\n      if (code === 0x3C /* < */) { return result; }\n      if (code === 0x3E /* > */) {\n        result.pos = pos + 1;\n        result.str = unescapeAll(str.slice(start + 1, pos));\n        result.ok = true;\n        return result;\n      }\n      if (code === 0x5C /* \\ */ && pos + 1 < max) {\n        pos += 2;\n        continue;\n      }\n\n      pos++;\n    }\n\n    // no closing '>'\n    return result;\n  }\n\n  // this should be ... } else { ... branch\n\n  level = 0;\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n\n    if (code === 0x20) { break; }\n\n    // ascii control characters\n    if (code < 0x20 || code === 0x7F) { break; }\n\n    if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      if (str.charCodeAt(pos + 1) === 0x20) { break; }\n      pos += 2;\n      continue;\n    }\n\n    if (code === 0x28 /* ( */) {\n      level++;\n      if (level > 32) { return result; }\n    }\n\n    if (code === 0x29 /* ) */) {\n      if (level === 0) { break; }\n      level--;\n    }\n\n    pos++;\n  }\n\n  if (start === pos) { return result; }\n  if (level !== 0) { return result; }\n\n  result.str = unescapeAll(str.slice(start, pos));\n  result.pos = pos;\n  result.ok = true;\n  return result;\n};\n","// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, start, max) {\n  var code,\n      marker,\n      lines = 0,\n      pos = start,\n      result = {\n        ok: false,\n        pos: 0,\n        lines: 0,\n        str: ''\n      };\n\n  if (pos >= max) { return result; }\n\n  marker = str.charCodeAt(pos);\n\n  if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n  pos++;\n\n  // if opening marker is \"(\", switch it to closing marker \")\"\n  if (marker === 0x28) { marker = 0x29; }\n\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n    if (code === marker) {\n      result.pos = pos + 1;\n      result.lines = lines;\n      result.str = unescapeAll(str.slice(start + 1, pos));\n      result.ok = true;\n      return result;\n    } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n      return result;\n    } else if (code === 0x0A) {\n      lines++;\n    } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos++;\n      if (str.charCodeAt(pos) === 0x0A) {\n        lines++;\n      }\n    }\n\n    pos++;\n  }\n\n  return result;\n};\n","// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel       = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle       = require('./parse_link_title');\n","/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign          = require('./common/utils').assign;\nvar unescapeAll     = require('./common/utils').unescapeAll;\nvar escapeHtml      = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  return  '<code' + slf.renderAttrs(token) + '>' +\n          escapeHtml(token.content) +\n          '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  return  '<pre' + slf.renderAttrs(token) + '><code>' +\n          escapeHtml(tokens[idx].content) +\n          '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx],\n      info = token.info ? unescapeAll(token.info).trim() : '',\n      langName = '',\n      langAttrs = '',\n      highlighted, i, arr, tmpAttrs, tmpToken;\n\n  if (info) {\n    arr = info.split(/(\\s+)/g);\n    langName = arr[0];\n    langAttrs = arr.slice(2).join('');\n  }\n\n  if (options.highlight) {\n    highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n  } else {\n    highlighted = escapeHtml(token.content);\n  }\n\n  if (highlighted.indexOf('<pre') === 0) {\n    return highlighted + '\\n';\n  }\n\n  // If language exists, inject class gently, without modifying original token.\n  // May be, one day we will add .deepClone() for token and simplify this part, but\n  // now we prefer to keep things local.\n  if (info) {\n    i        = token.attrIndex('class');\n    tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n    if (i < 0) {\n      tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n    } else {\n      tmpAttrs[i] = tmpAttrs[i].slice();\n      tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n    }\n\n    // Fake token just to render attributes\n    tmpToken = {\n      attrs: tmpAttrs\n    };\n\n    return  '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n          + highlighted\n          + '</code></pre>\\n';\n  }\n\n\n  return  '<pre><code' + slf.renderAttrs(token) + '>'\n        + highlighted\n        + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n  // should be placed on proper position for tests.\n  //\n  // Replace content with actual value\n\n  token.attrs[token.attrIndex('alt')][1] =\n    slf.renderInlineAsText(token.children, options, env);\n\n  return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n  return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n  return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n  return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n  /**\n   * Renderer#rules -> Object\n   *\n   * Contains render rules for tokens. Can be updated and extended.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * md.renderer.rules.strong_open  = function () { return '<b>'; };\n   * md.renderer.rules.strong_close = function () { return '</b>'; };\n   *\n   * var result = md.renderInline(...);\n   * ```\n   *\n   * Each rule is called as independent static function with fixed signature:\n   *\n   * ```javascript\n   * function my_token_render(tokens, idx, options, env, renderer) {\n   *   // ...\n   *   return renderedHTML;\n   * }\n   * ```\n   *\n   * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n   * for more details and examples.\n   **/\n  this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n  var i, l, result;\n\n  if (!token.attrs) { return ''; }\n\n  result = '';\n\n  for (i = 0, l = token.attrs.length; i < l; i++) {\n    result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n  }\n\n  return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n  var nextToken,\n      result = '',\n      needLf = false,\n      token = tokens[idx];\n\n  // Tight list paragraphs\n  if (token.hidden) {\n    return '';\n  }\n\n  // Insert a newline between hidden paragraph and subsequent opening\n  // block-level tag.\n  //\n  // For example, here we should insert a newline before blockquote:\n  //  - a\n  //    >\n  //\n  if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n    result += '\\n';\n  }\n\n  // Add token name, e.g. `<img`\n  result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n  // Encode attributes, e.g. `<img src=\"foo\"`\n  result += this.renderAttrs(token);\n\n  // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n  if (token.nesting === 0 && options.xhtmlOut) {\n    result += ' /';\n  }\n\n  // Check if we need to add a newline after this tag\n  if (token.block) {\n    needLf = true;\n\n    if (token.nesting === 1) {\n      if (idx + 1 < tokens.length) {\n        nextToken = tokens[idx + 1];\n\n        if (nextToken.type === 'inline' || nextToken.hidden) {\n          // Block-level tag containing an inline tag.\n          //\n          needLf = false;\n\n        } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n          // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n          //\n          needLf = false;\n        }\n      }\n    }\n  }\n\n  result += needLf ? '>\\n' : '>';\n\n  return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n  var type,\n      result = '',\n      rules = this.rules;\n\n  for (var i = 0, len = tokens.length; i < len; i++) {\n    type = tokens[i].type;\n\n    if (typeof rules[type] !== 'undefined') {\n      result += rules[type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options);\n    }\n  }\n\n  return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n  var result = '';\n\n  for (var i = 0, len = tokens.length; i < len; i++) {\n    if (tokens[i].type === 'text') {\n      result += tokens[i].content;\n    } else if (tokens[i].type === 'image') {\n      result += this.renderInlineAsText(tokens[i].children, options, env);\n    } else if (tokens[i].type === 'softbreak') {\n      result += '\\n';\n    }\n  }\n\n  return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n  var i, len, type,\n      result = '',\n      rules = this.rules;\n\n  for (i = 0, len = tokens.length; i < len; i++) {\n    type = tokens[i].type;\n\n    if (type === 'inline') {\n      result += this.renderInline(tokens[i].children, options, env);\n    } else if (typeof rules[type] !== 'undefined') {\n      result += rules[type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options, env);\n    }\n  }\n\n  return result;\n};\n\nmodule.exports = Renderer;\n","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n  // List of added rules. Each element is:\n  //\n  // {\n  //   name: XXX,\n  //   enabled: Boolean,\n  //   fn: Function(),\n  //   alt: [ name2, name3 ]\n  // }\n  //\n  this.__rules__ = [];\n\n  // Cached rule chains.\n  //\n  // First level - chain name, '' for default.\n  // Second level - diginal anchor for fast filtering by charcodes.\n  //\n  this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n  for (var i = 0; i < this.__rules__.length; i++) {\n    if (this.__rules__[i].name === name) {\n      return i;\n    }\n  }\n  return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n  var self = this;\n  var chains = [ '' ];\n\n  // collect unique names\n  self.__rules__.forEach(function (rule) {\n    if (!rule.enabled) { return; }\n\n    rule.alt.forEach(function (altName) {\n      if (chains.indexOf(altName) < 0) {\n        chains.push(altName);\n      }\n    });\n  });\n\n  self.__cache__ = {};\n\n  chains.forEach(function (chain) {\n    self.__cache__[chain] = [];\n    self.__rules__.forEach(function (rule) {\n      if (!rule.enabled) { return; }\n\n      if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n      self.__cache__[chain].push(rule.fn);\n    });\n  });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n  var index = this.__find__(name);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n  this.__rules__[index].fn = fn;\n  this.__rules__[index].alt = opt.alt || [];\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n  var index = this.__find__(beforeName);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n  this.__rules__.splice(index, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n  var index = this.__find__(afterName);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n  this.__rules__.splice(index + 1, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n  var opt = options || {};\n\n  this.__rules__.push({\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  var result = [];\n\n  // Search by name and enable\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n\n    if (idx < 0) {\n      if (ignoreInvalid) { return; }\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = true;\n    result.push(name);\n  }, this);\n\n  this.__cache__ = null;\n  return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n  this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  var result = [];\n\n  // Search by name and disable\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n\n    if (idx < 0) {\n      if (ignoreInvalid) { return; }\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = false;\n    result.push(name);\n  }, this);\n\n  this.__cache__ = null;\n  return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n  if (this.__cache__ === null) {\n    this.__compile__();\n  }\n\n  // Chain can be empty, if rules disabled. But we still have to return Array.\n  return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n","// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE  = /\\r\\n?|\\n/g;\nvar NULL_RE      = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n  var str;\n\n  // Normalize newlines\n  str = state.src.replace(NEWLINES_RE, '\\n');\n\n  // Replace NULL characters\n  str = str.replace(NULL_RE, '\\uFFFD');\n\n  state.src = str;\n};\n","'use strict';\n\n\nmodule.exports = function block(state) {\n  var token;\n\n  if (state.inlineMode) {\n    token          = new state.Token('inline', '', 0);\n    token.content  = state.src;\n    token.map      = [ 0, 1 ];\n    token.children = [];\n    state.tokens.push(token);\n  } else {\n    state.md.block.parse(state.src, state.md, state.env, state.tokens);\n  }\n};\n","'use strict';\n\nmodule.exports = function inline(state) {\n  var tokens = state.tokens, tok, i, l;\n\n  // Parse inlines\n  for (i = 0, l = tokens.length; i < l; i++) {\n    tok = tokens[i];\n    if (tok.type === 'inline') {\n      state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n    }\n  }\n};\n","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n  return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n  var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n      level, htmlLinkLevel, url, fullUrl, urlText,\n      blockTokens = state.tokens,\n      links;\n\n  if (!state.md.options.linkify) { return; }\n\n  for (j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline' ||\n        !state.md.linkify.pretest(blockTokens[j].content)) {\n      continue;\n    }\n\n    tokens = blockTokens[j].children;\n\n    htmlLinkLevel = 0;\n\n    // We scan from the end, to keep position when new tags added.\n    // Use reversed logic in links start/end match\n    for (i = tokens.length - 1; i >= 0; i--) {\n      currentToken = tokens[i];\n\n      // Skip content of markdown links\n      if (currentToken.type === 'link_close') {\n        i--;\n        while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n          i--;\n        }\n        continue;\n      }\n\n      // Skip content of html tag links\n      if (currentToken.type === 'html_inline') {\n        if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n          htmlLinkLevel--;\n        }\n        if (isLinkClose(currentToken.content)) {\n          htmlLinkLevel++;\n        }\n      }\n      if (htmlLinkLevel > 0) { continue; }\n\n      if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n        text = currentToken.content;\n        links = state.md.linkify.match(text);\n\n        // Now split string to nodes\n        nodes = [];\n        level = currentToken.level;\n        lastPos = 0;\n\n        // forbid escape sequence at the start of the string,\n        // this avoids http\\://example.com/ from being linkified as\n        // http:<a href=\"//example.com/\">//example.com/</a>\n        if (links.length > 0 &&\n            links[0].index === 0 &&\n            i > 0 &&\n            tokens[i - 1].type === 'text_special') {\n          links = links.slice(1);\n        }\n\n        for (ln = 0; ln < links.length; ln++) {\n          url = links[ln].url;\n          fullUrl = state.md.normalizeLink(url);\n          if (!state.md.validateLink(fullUrl)) { continue; }\n\n          urlText = links[ln].text;\n\n          // Linkifier might send raw hostnames like \"example.com\", where url\n          // starts with domain name. So we prepend http:// in those cases,\n          // and remove it afterwards.\n          //\n          if (!links[ln].schema) {\n            urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n          } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n            urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n          } else {\n            urlText = state.md.normalizeLinkText(urlText);\n          }\n\n          pos = links[ln].index;\n\n          if (pos > lastPos) {\n            token         = new state.Token('text', '', 0);\n            token.content = text.slice(lastPos, pos);\n            token.level   = level;\n            nodes.push(token);\n          }\n\n          token         = new state.Token('link_open', 'a', 1);\n          token.attrs   = [ [ 'href', fullUrl ] ];\n          token.level   = level++;\n          token.markup  = 'linkify';\n          token.info    = 'auto';\n          nodes.push(token);\n\n          token         = new state.Token('text', '', 0);\n          token.content = urlText;\n          token.level   = level;\n          nodes.push(token);\n\n          token         = new state.Token('link_close', 'a', -1);\n          token.level   = --level;\n          token.markup  = 'linkify';\n          token.info    = 'auto';\n          nodes.push(token);\n\n          lastPos = links[ln].lastIndex;\n        }\n        if (lastPos < text.length) {\n          token         = new state.Token('text', '', 0);\n          token.content = text.slice(lastPos);\n          token.level   = level;\n          nodes.push(token);\n        }\n\n        // replace current node\n        blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n      }\n    }\n  }\n};\n","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → &ndash;, --- → &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig;\nvar SCOPED_ABBR = {\n  c: '©',\n  r: '®',\n  tm: '™'\n};\n\nfunction replaceFn(match, name) {\n  return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n  var i, token, inside_autolink = 0;\n\n  for (i = inlineTokens.length - 1; i >= 0; i--) {\n    token = inlineTokens[i];\n\n    if (token.type === 'text' && !inside_autolink) {\n      token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\n\nfunction replace_rare(inlineTokens) {\n  var i, token, inside_autolink = 0;\n\n  for (i = inlineTokens.length - 1; i >= 0; i--) {\n    token = inlineTokens[i];\n\n    if (token.type === 'text' && !inside_autolink) {\n      if (RARE_RE.test(token.content)) {\n        token.content = token.content\n          .replace(/\\+-/g, '±')\n          // .., ..., ....... -> …\n          // but ?..... & !..... -> ?.. & !..\n          .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n          .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n          // em-dash\n          .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n          // en-dash\n          .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n          .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n      }\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\n\n\nmodule.exports = function replace(state) {\n  var blkIdx;\n\n  if (!state.md.options.typographer) { return; }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n    if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n    if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n      replace_scoped(state.tokens[blkIdx].children);\n    }\n\n    if (RARE_RE.test(state.tokens[blkIdx].content)) {\n      replace_rare(state.tokens[blkIdx].children);\n    }\n\n  }\n};\n","// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace   = require('../common/utils').isWhiteSpace;\nvar isPunctChar    = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* ’ */\n\n\nfunction replaceAt(str, index, ch) {\n  return str.slice(0, index) + ch + str.slice(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n  var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n      isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n      canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n  stack = [];\n\n  for (i = 0; i < tokens.length; i++) {\n    token = tokens[i];\n\n    thisLevel = tokens[i].level;\n\n    for (j = stack.length - 1; j >= 0; j--) {\n      if (stack[j].level <= thisLevel) { break; }\n    }\n    stack.length = j + 1;\n\n    if (token.type !== 'text') { continue; }\n\n    text = token.content;\n    pos = 0;\n    max = text.length;\n\n    /*eslint no-labels:0,block-scoped-var:0*/\n    OUTER:\n    while (pos < max) {\n      QUOTE_RE.lastIndex = pos;\n      t = QUOTE_RE.exec(text);\n      if (!t) { break; }\n\n      canOpen = canClose = true;\n      pos = t.index + 1;\n      isSingle = (t[0] === \"'\");\n\n      // Find previous character,\n      // default to space if it's the beginning of the line\n      //\n      lastChar = 0x20;\n\n      if (t.index - 1 >= 0) {\n        lastChar = text.charCodeAt(t.index - 1);\n      } else {\n        for (j = i - 1; j >= 0; j--) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n          if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n          break;\n        }\n      }\n\n      // Find next character,\n      // default to space if it's the end of the line\n      //\n      nextChar = 0x20;\n\n      if (pos < max) {\n        nextChar = text.charCodeAt(pos);\n      } else {\n        for (j = i + 1; j < tokens.length; j++) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n          if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          nextChar = tokens[j].content.charCodeAt(0);\n          break;\n        }\n      }\n\n      isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n      isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n      isLastWhiteSpace = isWhiteSpace(lastChar);\n      isNextWhiteSpace = isWhiteSpace(nextChar);\n\n      if (isNextWhiteSpace) {\n        canOpen = false;\n      } else if (isNextPunctChar) {\n        if (!(isLastWhiteSpace || isLastPunctChar)) {\n          canOpen = false;\n        }\n      }\n\n      if (isLastWhiteSpace) {\n        canClose = false;\n      } else if (isLastPunctChar) {\n        if (!(isNextWhiteSpace || isNextPunctChar)) {\n          canClose = false;\n        }\n      }\n\n      if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n        if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n          // special case: 1\"\" - count first quote as an inch\n          canClose = canOpen = false;\n        }\n      }\n\n      if (canOpen && canClose) {\n        // Replace quotes in the middle of punctuation sequence, but not\n        // in the middle of the words, i.e.:\n        //\n        // 1. foo \" bar \" baz - not replaced\n        // 2. foo-\"-bar-\"-baz - replaced\n        // 3. foo\"bar\"baz     - not replaced\n        //\n        canOpen = isLastPunctChar;\n        canClose = isNextPunctChar;\n      }\n\n      if (!canOpen && !canClose) {\n        // middle of word\n        if (isSingle) {\n          token.content = replaceAt(token.content, t.index, APOSTROPHE);\n        }\n        continue;\n      }\n\n      if (canClose) {\n        // this could be a closing quote, rewind the stack to get a match\n        for (j = stack.length - 1; j >= 0; j--) {\n          item = stack[j];\n          if (stack[j].level < thisLevel) { break; }\n          if (item.single === isSingle && stack[j].level === thisLevel) {\n            item = stack[j];\n\n            if (isSingle) {\n              openQuote = state.md.options.quotes[2];\n              closeQuote = state.md.options.quotes[3];\n            } else {\n              openQuote = state.md.options.quotes[0];\n              closeQuote = state.md.options.quotes[1];\n            }\n\n            // replace token.content *before* tokens[item.token].content,\n            // because, if they are pointing at the same token, replaceAt\n            // could mess up indices when quote length != 1\n            token.content = replaceAt(token.content, t.index, closeQuote);\n            tokens[item.token].content = replaceAt(\n              tokens[item.token].content, item.pos, openQuote);\n\n            pos += closeQuote.length - 1;\n            if (item.token === i) { pos += openQuote.length - 1; }\n\n            text = token.content;\n            max = text.length;\n\n            stack.length = j;\n            continue OUTER;\n          }\n        }\n      }\n\n      if (canOpen) {\n        stack.push({\n          token: i,\n          pos: t.index,\n          single: isSingle,\n          level: thisLevel\n        });\n      } else if (canClose && isSingle) {\n        token.content = replaceAt(token.content, t.index, APOSTROPHE);\n      }\n    }\n  }\n}\n\n\nmodule.exports = function smartquotes(state) {\n  /*eslint max-depth:0*/\n  var blkIdx;\n\n  if (!state.md.options.typographer) { return; }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n    if (state.tokens[blkIdx].type !== 'inline' ||\n        !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n      continue;\n    }\n\n    process_inlines(state.tokens[blkIdx].children, state);\n  }\n};\n","// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n'use strict';\n\n\nmodule.exports = function text_join(state) {\n  var j, l, tokens, curr, max, last,\n      blockTokens = state.tokens;\n\n  for (j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline') continue;\n\n    tokens = blockTokens[j].children;\n    max = tokens.length;\n\n    for (curr = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text_special') {\n        tokens[curr].type = 'text';\n      }\n    }\n\n    for (curr = last = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text' &&\n          curr + 1 < max &&\n          tokens[curr + 1].type === 'text') {\n\n        // collapse two adjacent text nodes\n        tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n      } else {\n        if (curr !== last) { tokens[last] = tokens[curr]; }\n\n        last++;\n      }\n    }\n\n    if (curr !== last) {\n      tokens.length = last;\n    }\n  }\n};\n","// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n  /**\n   * Token#type -> String\n   *\n   * Type of the token (string, e.g. \"paragraph_open\")\n   **/\n  this.type     = type;\n\n  /**\n   * Token#tag -> String\n   *\n   * html tag name, e.g. \"p\"\n   **/\n  this.tag      = tag;\n\n  /**\n   * Token#attrs -> Array\n   *\n   * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n   **/\n  this.attrs    = null;\n\n  /**\n   * Token#map -> Array\n   *\n   * Source map info. Format: `[ line_begin, line_end ]`\n   **/\n  this.map      = null;\n\n  /**\n   * Token#nesting -> Number\n   *\n   * Level change (number in {-1, 0, 1} set), where:\n   *\n   * -  `1` means the tag is opening\n   * -  `0` means the tag is self-closing\n   * - `-1` means the tag is closing\n   **/\n  this.nesting  = nesting;\n\n  /**\n   * Token#level -> Number\n   *\n   * nesting level, the same as `state.level`\n   **/\n  this.level    = 0;\n\n  /**\n   * Token#children -> Array\n   *\n   * An array of child nodes (inline and img tokens)\n   **/\n  this.children = null;\n\n  /**\n   * Token#content -> String\n   *\n   * In a case of self-closing tag (code, html, fence, etc.),\n   * it has contents of this tag.\n   **/\n  this.content  = '';\n\n  /**\n   * Token#markup -> String\n   *\n   * '*' or '_' for emphasis, fence string for fence, etc.\n   **/\n  this.markup   = '';\n\n  /**\n   * Token#info -> String\n   *\n   * Additional information:\n   *\n   * - Info string for \"fence\" tokens\n   * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n   * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n   **/\n  this.info     = '';\n\n  /**\n   * Token#meta -> Object\n   *\n   * A place for plugins to store an arbitrary data\n   **/\n  this.meta     = null;\n\n  /**\n   * Token#block -> Boolean\n   *\n   * True for block-level tokens, false for inline tokens.\n   * Used in renderer to calculate line breaks\n   **/\n  this.block    = false;\n\n  /**\n   * Token#hidden -> Boolean\n   *\n   * If it's true, ignore this element when rendering. Used for tight lists\n   * to hide paragraphs.\n   **/\n  this.hidden   = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n  var attrs, i, len;\n\n  if (!this.attrs) { return -1; }\n\n  attrs = this.attrs;\n\n  for (i = 0, len = attrs.length; i < len; i++) {\n    if (attrs[i][0] === name) { return i; }\n  }\n  return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n  if (this.attrs) {\n    this.attrs.push(attrData);\n  } else {\n    this.attrs = [ attrData ];\n  }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n  var idx = this.attrIndex(name),\n      attrData = [ name, value ];\n\n  if (idx < 0) {\n    this.attrPush(attrData);\n  } else {\n    this.attrs[idx] = attrData;\n  }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n  var idx = this.attrIndex(name), value = null;\n  if (idx >= 0) {\n    value = this.attrs[idx][1];\n  }\n  return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n  var idx = this.attrIndex(name);\n\n  if (idx < 0) {\n    this.attrPush([ name, value ]);\n  } else {\n    this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n  }\n};\n\n\nmodule.exports = Token;\n","// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n  this.src = src;\n  this.env = env;\n  this.tokens = [];\n  this.inlineMode = false;\n  this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler  = require('./ruler');\n\n\nvar _rules = [\n  [ 'normalize',      require('./rules_core/normalize')      ],\n  [ 'block',          require('./rules_core/block')          ],\n  [ 'inline',         require('./rules_core/inline')         ],\n  [ 'linkify',        require('./rules_core/linkify')        ],\n  [ 'replacements',   require('./rules_core/replacements')   ],\n  [ 'smartquotes',    require('./rules_core/smartquotes')    ],\n  // `text_join` finds `text_special` tokens (for escape sequences)\n  // and joins them with the rest of the text\n  [ 'text_join',      require('./rules_core/text_join')      ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n  /**\n   * Core#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of core rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (var i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n  var i, l, rules;\n\n  rules = this.ruler.getRules('');\n\n  for (i = 0, l = rules.length; i < l; i++) {\n    rules[i](state);\n  }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n","// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n  var pos = state.bMarks[line] + state.tShift[line],\n      max = state.eMarks[line];\n\n  return state.src.slice(pos, max);\n}\n\nfunction escapedSplit(str) {\n  var result = [],\n      pos = 0,\n      max = str.length,\n      ch,\n      isEscaped = false,\n      lastPos = 0,\n      current = '';\n\n  ch  = str.charCodeAt(pos);\n\n  while (pos < max) {\n    if (ch === 0x7c/* | */) {\n      if (!isEscaped) {\n        // pipe separating cells, '|'\n        result.push(current + str.substring(lastPos, pos));\n        current = '';\n        lastPos = pos + 1;\n      } else {\n        // escaped pipe, '\\|'\n        current += str.substring(lastPos, pos - 1);\n        lastPos = pos;\n      }\n    }\n\n    isEscaped = (ch === 0x5c/* \\ */);\n    pos++;\n\n    ch = str.charCodeAt(pos);\n  }\n\n  result.push(current + str.substring(lastPos));\n\n  return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n  var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n      aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n      terminatorRules, firstCh, secondCh;\n\n  // should have at least two lines\n  if (startLine + 2 > endLine) { return false; }\n\n  nextLine = startLine + 1;\n\n  if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n  // first character of the second line should be '|', '-', ':',\n  // and no other characters are allowed but spaces;\n  // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n  pos = state.bMarks[nextLine] + state.tShift[nextLine];\n  if (pos >= state.eMarks[nextLine]) { return false; }\n\n  firstCh = state.src.charCodeAt(pos++);\n  if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n  if (pos >= state.eMarks[nextLine]) { return false; }\n\n  secondCh = state.src.charCodeAt(pos++);\n  if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n    return false;\n  }\n\n  // if first character is '-', then second character must not be a space\n  // (due to parsing ambiguity with list)\n  if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n  while (pos < state.eMarks[nextLine]) {\n    ch = state.src.charCodeAt(pos);\n\n    if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n    pos++;\n  }\n\n  lineText = getLine(state, startLine + 1);\n\n  columns = lineText.split('|');\n  aligns = [];\n  for (i = 0; i < columns.length; i++) {\n    t = columns[i].trim();\n    if (!t) {\n      // allow empty columns before and after table, but not in between columns;\n      // e.g. allow ` |---| `, disallow ` ---||--- `\n      if (i === 0 || i === columns.length - 1) {\n        continue;\n      } else {\n        return false;\n      }\n    }\n\n    if (!/^:?-+:?$/.test(t)) { return false; }\n    if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n      aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n    } else if (t.charCodeAt(0) === 0x3A/* : */) {\n      aligns.push('left');\n    } else {\n      aligns.push('');\n    }\n  }\n\n  lineText = getLine(state, startLine).trim();\n  if (lineText.indexOf('|') === -1) { return false; }\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n  columns = escapedSplit(lineText);\n  if (columns.length && columns[0] === '') columns.shift();\n  if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n  // header row will define an amount of columns in the entire table,\n  // and align row should be exactly the same (the rest of the rows can differ)\n  columnCount = columns.length;\n  if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n  if (silent) { return true; }\n\n  oldParentType = state.parentType;\n  state.parentType = 'table';\n\n  // use 'blockquote' lists for termination because it's\n  // the most similar to tables\n  terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n  token     = state.push('table_open', 'table', 1);\n  token.map = tableLines = [ startLine, 0 ];\n\n  token     = state.push('thead_open', 'thead', 1);\n  token.map = [ startLine, startLine + 1 ];\n\n  token     = state.push('tr_open', 'tr', 1);\n  token.map = [ startLine, startLine + 1 ];\n\n  for (i = 0; i < columns.length; i++) {\n    token          = state.push('th_open', 'th', 1);\n    if (aligns[i]) {\n      token.attrs  = [ [ 'style', 'text-align:' + aligns[i] ] ];\n    }\n\n    token          = state.push('inline', '', 0);\n    token.content  = columns[i].trim();\n    token.children = [];\n\n    token          = state.push('th_close', 'th', -1);\n  }\n\n  token     = state.push('tr_close', 'tr', -1);\n  token     = state.push('thead_close', 'thead', -1);\n\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) { break; }\n    lineText = getLine(state, nextLine).trim();\n    if (!lineText) { break; }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n    columns = escapedSplit(lineText);\n    if (columns.length && columns[0] === '') columns.shift();\n    if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n    if (nextLine === startLine + 2) {\n      token     = state.push('tbody_open', 'tbody', 1);\n      token.map = tbodyLines = [ startLine + 2, 0 ];\n    }\n\n    token     = state.push('tr_open', 'tr', 1);\n    token.map = [ nextLine, nextLine + 1 ];\n\n    for (i = 0; i < columnCount; i++) {\n      token          = state.push('td_open', 'td', 1);\n      if (aligns[i]) {\n        token.attrs  = [ [ 'style', 'text-align:' + aligns[i] ] ];\n      }\n\n      token          = state.push('inline', '', 0);\n      token.content  = columns[i] ? columns[i].trim() : '';\n      token.children = [];\n\n      token          = state.push('td_close', 'td', -1);\n    }\n    token = state.push('tr_close', 'tr', -1);\n  }\n\n  if (tbodyLines) {\n    token = state.push('tbody_close', 'tbody', -1);\n    tbodyLines[1] = nextLine;\n  }\n\n  token = state.push('table_close', 'table', -1);\n  tableLines[1] = nextLine;\n\n  state.parentType = oldParentType;\n  state.line = nextLine;\n  return true;\n};\n","// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n  var nextLine, last, token;\n\n  if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n  last = nextLine = startLine + 1;\n\n  while (nextLine < endLine) {\n    if (state.isEmpty(nextLine)) {\n      nextLine++;\n      continue;\n    }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      nextLine++;\n      last = nextLine;\n      continue;\n    }\n    break;\n  }\n\n  state.line = last;\n\n  token         = state.push('code_block', 'code', 0);\n  token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n  token.map     = [ startLine, state.line ];\n\n  return true;\n};\n","// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n  var marker, len, params, nextLine, mem, token, markup,\n      haveEndMarker = false,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (pos + 3 > max) { return false; }\n\n  marker = state.src.charCodeAt(pos);\n\n  if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n    return false;\n  }\n\n  // scan marker length\n  mem = pos;\n  pos = state.skipChars(pos, marker);\n\n  len = pos - mem;\n\n  if (len < 3) { return false; }\n\n  markup = state.src.slice(mem, pos);\n  params = state.src.slice(pos, max);\n\n  if (marker === 0x60 /* ` */) {\n    if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n      return false;\n    }\n  }\n\n  // Since start is found, we can report success here in validation mode\n  if (silent) { return true; }\n\n  // search end of block\n  nextLine = startLine;\n\n  for (;;) {\n    nextLine++;\n    if (nextLine >= endLine) {\n      // unclosed block should be autoclosed by end of document.\n      // also block seems to be autoclosed by end of parent\n      break;\n    }\n\n    pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n      // non-empty line with negative indent should stop the list:\n      // - ```\n      //  test\n      break;\n    }\n\n    if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      // closing fence should be indented less than 4 spaces\n      continue;\n    }\n\n    pos = state.skipChars(pos, marker);\n\n    // closing code fence must be at least as long as the opening one\n    if (pos - mem < len) { continue; }\n\n    // make sure tail has spaces only\n    pos = state.skipSpaces(pos);\n\n    if (pos < max) { continue; }\n\n    haveEndMarker = true;\n    // found!\n    break;\n  }\n\n  // If a fence has heading spaces, they should be removed from its inner block\n  len = state.sCount[startLine];\n\n  state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n  token         = state.push('fence', 'code', 0);\n  token.info    = params;\n  token.content = state.getLines(startLine + 1, nextLine, len, true);\n  token.markup  = markup;\n  token.map     = [ startLine, state.line ];\n\n  return true;\n};\n","// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n  var adjustTab,\n      ch,\n      i,\n      initial,\n      l,\n      lastLineEmpty,\n      lines,\n      nextLine,\n      offset,\n      oldBMarks,\n      oldBSCount,\n      oldIndent,\n      oldParentType,\n      oldSCount,\n      oldTShift,\n      spaceAfterMarker,\n      terminate,\n      terminatorRules,\n      token,\n      isOutdented,\n      oldLineMax = state.lineMax,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  // check the block quote marker\n  if (state.src.charCodeAt(pos) !== 0x3E/* > */) { return false; }\n\n  // we know that it's going to be a valid blockquote,\n  // so no point trying to find the end of it in silent mode\n  if (silent) { return true; }\n\n  oldBMarks  = [];\n  oldBSCount = [];\n  oldSCount  = [];\n  oldTShift  = [];\n\n  terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n  oldParentType = state.parentType;\n  state.parentType = 'blockquote';\n\n  // Search the end of the block\n  //\n  // Block ends with either:\n  //  1. an empty line outside:\n  //     ```\n  //     > test\n  //\n  //     ```\n  //  2. an empty line inside:\n  //     ```\n  //     >\n  //     test\n  //     ```\n  //  3. another tag:\n  //     ```\n  //     > test\n  //      - - -\n  //     ```\n  for (nextLine = startLine; nextLine < endLine; nextLine++) {\n    // check if it's outdented, i.e. it's inside list item and indented\n    // less than said list item:\n    //\n    // ```\n    // 1. anything\n    //    > current blockquote\n    // 2. checking this line\n    // ```\n    isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n    pos = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos >= max) {\n      // Case 1: line is not inside the blockquote, and this line is empty.\n      break;\n    }\n\n    if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n      // This line is inside the blockquote.\n\n      // set offset past spaces and \">\"\n      initial = state.sCount[nextLine] + 1;\n\n      // skip one optional space after '>'\n      if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n        // ' >   test '\n        //     ^ -- position start of line here:\n        pos++;\n        initial++;\n        adjustTab = false;\n        spaceAfterMarker = true;\n      } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n        spaceAfterMarker = true;\n\n        if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n          // '  >\\t  test '\n          //       ^ -- position start of line here (tab has width===1)\n          pos++;\n          initial++;\n          adjustTab = false;\n        } else {\n          // ' >\\t  test '\n          //    ^ -- position start of line here + shift bsCount slightly\n          //         to make extra space appear\n          adjustTab = true;\n        }\n      } else {\n        spaceAfterMarker = false;\n      }\n\n      offset = initial;\n      oldBMarks.push(state.bMarks[nextLine]);\n      state.bMarks[nextLine] = pos;\n\n      while (pos < max) {\n        ch = state.src.charCodeAt(pos);\n\n        if (isSpace(ch)) {\n          if (ch === 0x09) {\n            offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n          } else {\n            offset++;\n          }\n        } else {\n          break;\n        }\n\n        pos++;\n      }\n\n      lastLineEmpty = pos >= max;\n\n      oldBSCount.push(state.bsCount[nextLine]);\n      state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n      oldSCount.push(state.sCount[nextLine]);\n      state.sCount[nextLine] = offset - initial;\n\n      oldTShift.push(state.tShift[nextLine]);\n      state.tShift[nextLine] = pos - state.bMarks[nextLine];\n      continue;\n    }\n\n    // Case 2: line is not inside the blockquote, and the last line was empty.\n    if (lastLineEmpty) { break; }\n\n    // Case 3: another tag found.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) {\n      // Quirk to enforce \"hard termination mode\" for paragraphs;\n      // normally if you call `tokenize(state, startLine, nextLine)`,\n      // paragraphs will look below nextLine for paragraph continuation,\n      // but if blockquote is terminated by another tag, they shouldn't\n      state.lineMax = nextLine;\n\n      if (state.blkIndent !== 0) {\n        // state.blkIndent was non-zero, we now set it to zero,\n        // so we need to re-calculate all offsets to appear as\n        // if indent wasn't changed\n        oldBMarks.push(state.bMarks[nextLine]);\n        oldBSCount.push(state.bsCount[nextLine]);\n        oldTShift.push(state.tShift[nextLine]);\n        oldSCount.push(state.sCount[nextLine]);\n        state.sCount[nextLine] -= state.blkIndent;\n      }\n\n      break;\n    }\n\n    oldBMarks.push(state.bMarks[nextLine]);\n    oldBSCount.push(state.bsCount[nextLine]);\n    oldTShift.push(state.tShift[nextLine]);\n    oldSCount.push(state.sCount[nextLine]);\n\n    // A negative indentation means that this is a paragraph continuation\n    //\n    state.sCount[nextLine] = -1;\n  }\n\n  oldIndent = state.blkIndent;\n  state.blkIndent = 0;\n\n  token        = state.push('blockquote_open', 'blockquote', 1);\n  token.markup = '>';\n  token.map    = lines = [ startLine, 0 ];\n\n  state.md.block.tokenize(state, startLine, nextLine);\n\n  token        = state.push('blockquote_close', 'blockquote', -1);\n  token.markup = '>';\n\n  state.lineMax = oldLineMax;\n  state.parentType = oldParentType;\n  lines[1] = state.line;\n\n  // Restore original tShift; this might not be necessary since the parser\n  // has already been here, but just to make sure we can do that.\n  for (i = 0; i < oldTShift.length; i++) {\n    state.bMarks[i + startLine] = oldBMarks[i];\n    state.tShift[i + startLine] = oldTShift[i];\n    state.sCount[i + startLine] = oldSCount[i];\n    state.bsCount[i + startLine] = oldBSCount[i];\n  }\n  state.blkIndent = oldIndent;\n\n  return true;\n};\n","// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n  var marker, cnt, ch, token,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  marker = state.src.charCodeAt(pos++);\n\n  // Check hr marker\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x5F/* _ */) {\n    return false;\n  }\n\n  // markers can be mixed with spaces, but there should be at least 3 of them\n\n  cnt = 1;\n  while (pos < max) {\n    ch = state.src.charCodeAt(pos++);\n    if (ch !== marker && !isSpace(ch)) { return false; }\n    if (ch === marker) { cnt++; }\n  }\n\n  if (cnt < 3) { return false; }\n\n  if (silent) { return true; }\n\n  state.line = startLine + 1;\n\n  token        = state.push('hr', 'hr', 0);\n  token.map    = [ startLine, state.line ];\n  token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n  return true;\n};\n","// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n  var marker, pos, max, ch;\n\n  pos = state.bMarks[startLine] + state.tShift[startLine];\n  max = state.eMarks[startLine];\n\n  marker = state.src.charCodeAt(pos++);\n  // Check bullet\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x2B/* + */) {\n    return -1;\n  }\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      // \" -test \" - is not a list item\n      return -1;\n    }\n  }\n\n  return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n  var ch,\n      start = state.bMarks[startLine] + state.tShift[startLine],\n      pos = start,\n      max = state.eMarks[startLine];\n\n  // List marker should have at least 2 chars (digit + dot)\n  if (pos + 1 >= max) { return -1; }\n\n  ch = state.src.charCodeAt(pos++);\n\n  if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n  for (;;) {\n    // EOL -> fail\n    if (pos >= max) { return -1; }\n\n    ch = state.src.charCodeAt(pos++);\n\n    if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n      // List marker should have no more than 9 digits\n      // (prevents integer overflow in browsers)\n      if (pos - start >= 10) { return -1; }\n\n      continue;\n    }\n\n    // found valid marker\n    if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n      break;\n    }\n\n    return -1;\n  }\n\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      // \" 1.test \" - is not a list item\n      return -1;\n    }\n  }\n  return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n  var i, l,\n      level = state.level + 2;\n\n  for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n    if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n      state.tokens[i + 2].hidden = true;\n      state.tokens[i].hidden = true;\n      i += 2;\n    }\n  }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n  var ch,\n      contentStart,\n      i,\n      indent,\n      indentAfterMarker,\n      initial,\n      isOrdered,\n      itemLines,\n      l,\n      listLines,\n      listTokIdx,\n      markerCharCode,\n      markerValue,\n      max,\n      offset,\n      oldListIndent,\n      oldParentType,\n      oldSCount,\n      oldTShift,\n      oldTight,\n      pos,\n      posAfterMarker,\n      prevEmptyEnd,\n      start,\n      terminate,\n      terminatorRules,\n      token,\n      nextLine = startLine,\n      isTerminatingParagraph = false,\n      tight = true;\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n  // Special case:\n  //  - item 1\n  //   - item 2\n  //    - item 3\n  //     - item 4\n  //      - this one is a paragraph continuation\n  if (state.listIndent >= 0 &&\n      state.sCount[nextLine] - state.listIndent >= 4 &&\n      state.sCount[nextLine] < state.blkIndent) {\n    return false;\n  }\n\n  // limit conditions when list can interrupt\n  // a paragraph (validation mode only)\n  if (silent && state.parentType === 'paragraph') {\n    // Next list item should still terminate previous list item;\n    //\n    // This code can fail if plugins use blkIndent as well as lists,\n    // but I hope the spec gets fixed long before that happens.\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      isTerminatingParagraph = true;\n    }\n  }\n\n  // Detect list type and position after marker\n  if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n    isOrdered = true;\n    start = state.bMarks[nextLine] + state.tShift[nextLine];\n    markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n    // If we're starting a new ordered list right after\n    // a paragraph, it should start with 1.\n    if (isTerminatingParagraph && markerValue !== 1) return false;\n\n  } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n    isOrdered = false;\n\n  } else {\n    return false;\n  }\n\n  // If we're starting a new unordered list right after\n  // a paragraph, first line should not be empty.\n  if (isTerminatingParagraph) {\n    if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false;\n  }\n\n  // For validation mode we can terminate immediately\n  if (silent) { return true; }\n\n  // We should terminate list on style change. Remember first one to compare.\n  markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n  // Start list\n  listTokIdx = state.tokens.length;\n\n  if (isOrdered) {\n    token       = state.push('ordered_list_open', 'ol', 1);\n    if (markerValue !== 1) {\n      token.attrs = [ [ 'start', markerValue ] ];\n    }\n\n  } else {\n    token       = state.push('bullet_list_open', 'ul', 1);\n  }\n\n  token.map    = listLines = [ nextLine, 0 ];\n  token.markup = String.fromCharCode(markerCharCode);\n\n  //\n  // Iterate list items\n  //\n\n  prevEmptyEnd = false;\n  terminatorRules = state.md.block.ruler.getRules('list');\n\n  oldParentType = state.parentType;\n  state.parentType = 'list';\n\n  while (nextLine < endLine) {\n    pos = posAfterMarker;\n    max = state.eMarks[nextLine];\n\n    initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine]);\n\n    while (pos < max) {\n      ch = state.src.charCodeAt(pos);\n\n      if (ch === 0x09) {\n        offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n      } else if (ch === 0x20) {\n        offset++;\n      } else {\n        break;\n      }\n\n      pos++;\n    }\n\n    contentStart = pos;\n\n    if (contentStart >= max) {\n      // trimming space in \"-    \\n  3\" case, indent is 1 here\n      indentAfterMarker = 1;\n    } else {\n      indentAfterMarker = offset - initial;\n    }\n\n    // If we have more than 4 spaces, the indent is 1\n    // (the rest is just indented code block)\n    if (indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n    // \"  -  test\"\n    //  ^^^^^ - calculating total length of this thing\n    indent = initial + indentAfterMarker;\n\n    // Run subparser & write tokens\n    token        = state.push('list_item_open', 'li', 1);\n    token.markup = String.fromCharCode(markerCharCode);\n    token.map    = itemLines = [ nextLine, 0 ];\n    if (isOrdered) {\n      token.info = state.src.slice(start, posAfterMarker - 1);\n    }\n\n    // change current state, then restore it after parser subcall\n    oldTight = state.tight;\n    oldTShift = state.tShift[nextLine];\n    oldSCount = state.sCount[nextLine];\n\n    //  - example list\n    // ^ listIndent position will be here\n    //   ^ blkIndent position will be here\n    //\n    oldListIndent = state.listIndent;\n    state.listIndent = state.blkIndent;\n    state.blkIndent = indent;\n\n    state.tight = true;\n    state.tShift[nextLine] = contentStart - state.bMarks[nextLine];\n    state.sCount[nextLine] = offset;\n\n    if (contentStart >= max && state.isEmpty(nextLine + 1)) {\n      // workaround for this case\n      // (list item is empty, list terminates before \"foo\"):\n      // ~~~~~~~~\n      //   -\n      //\n      //     foo\n      // ~~~~~~~~\n      state.line = Math.min(state.line + 2, endLine);\n    } else {\n      state.md.block.tokenize(state, nextLine, endLine, true);\n    }\n\n    // If any of list item is tight, mark list as tight\n    if (!state.tight || prevEmptyEnd) {\n      tight = false;\n    }\n    // Item become loose if finish with empty line,\n    // but we should filter last element, because it means list finish\n    prevEmptyEnd = (state.line - nextLine) > 1 && state.isEmpty(state.line - 1);\n\n    state.blkIndent = state.listIndent;\n    state.listIndent = oldListIndent;\n    state.tShift[nextLine] = oldTShift;\n    state.sCount[nextLine] = oldSCount;\n    state.tight = oldTight;\n\n    token        = state.push('list_item_close', 'li', -1);\n    token.markup = String.fromCharCode(markerCharCode);\n\n    nextLine = state.line;\n    itemLines[1] = nextLine;\n\n    if (nextLine >= endLine) { break; }\n\n    //\n    // Try to check if list is terminated or continued.\n    //\n    if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n    // if it's indented more than 3 spaces, it should be a code block\n    if (state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n\n    // fail if terminating block found\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n\n    // fail if list has another type\n    if (isOrdered) {\n      posAfterMarker = skipOrderedListMarker(state, nextLine);\n      if (posAfterMarker < 0) { break; }\n      start = state.bMarks[nextLine] + state.tShift[nextLine];\n    } else {\n      posAfterMarker = skipBulletListMarker(state, nextLine);\n      if (posAfterMarker < 0) { break; }\n    }\n\n    if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n  }\n\n  // Finalize list\n  if (isOrdered) {\n    token = state.push('ordered_list_close', 'ol', -1);\n  } else {\n    token = state.push('bullet_list_close', 'ul', -1);\n  }\n  token.markup = String.fromCharCode(markerCharCode);\n\n  listLines[1] = nextLine;\n  state.line = nextLine;\n\n  state.parentType = oldParentType;\n\n  // mark paragraphs tight if needed\n  if (tight) {\n    markTightParagraphs(state, listTokIdx);\n  }\n\n  return true;\n};\n","'use strict';\n\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n  var ch,\n      destEndPos,\n      destEndLineNo,\n      endLine,\n      href,\n      i,\n      l,\n      label,\n      labelEnd,\n      oldParentType,\n      res,\n      start,\n      str,\n      terminate,\n      terminatorRules,\n      title,\n      lines = 0,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine],\n      nextLine = startLine + 1;\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n  // Simple check to quickly interrupt scan on [link](url) at the start of line.\n  // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n  while (++pos < max) {\n    if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n        state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n      if (pos + 1 === max) { return false; }\n      if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n      break;\n    }\n  }\n\n  endLine = state.lineMax;\n\n  // jump line-by-line until empty one or EOF\n  terminatorRules = state.md.block.ruler.getRules('reference');\n\n  oldParentType = state.parentType;\n  state.parentType = 'reference';\n\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n  max = str.length;\n\n  for (pos = 1; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x5B /* [ */) {\n      return false;\n    } else if (ch === 0x5D /* ] */) {\n      labelEnd = pos;\n      break;\n    } else if (ch === 0x0A /* \\n */) {\n      lines++;\n    } else if (ch === 0x5C /* \\ */) {\n      pos++;\n      if (pos < max && str.charCodeAt(pos) === 0x0A) {\n        lines++;\n      }\n    }\n  }\n\n  if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n  // [label]:   destination   'title'\n  //         ^^^ skip optional whitespace here\n  for (pos = labelEnd + 2; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x0A) {\n      lines++;\n    } else if (isSpace(ch)) {\n      /*eslint no-empty:0*/\n    } else {\n      break;\n    }\n  }\n\n  // [label]:   destination   'title'\n  //            ^^^^^^^^^^^ parse this\n  res = state.md.helpers.parseLinkDestination(str, pos, max);\n  if (!res.ok) { return false; }\n\n  href = state.md.normalizeLink(res.str);\n  if (!state.md.validateLink(href)) { return false; }\n\n  pos = res.pos;\n  lines += res.lines;\n\n  // save cursor state, we could require to rollback later\n  destEndPos = pos;\n  destEndLineNo = lines;\n\n  // [label]:   destination   'title'\n  //                       ^^^ skipping those spaces\n  start = pos;\n  for (; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x0A) {\n      lines++;\n    } else if (isSpace(ch)) {\n      /*eslint no-empty:0*/\n    } else {\n      break;\n    }\n  }\n\n  // [label]:   destination   'title'\n  //                          ^^^^^^^ parse this\n  res = state.md.helpers.parseLinkTitle(str, pos, max);\n  if (pos < max && start !== pos && res.ok) {\n    title = res.str;\n    pos = res.pos;\n    lines += res.lines;\n  } else {\n    title = '';\n    pos = destEndPos;\n    lines = destEndLineNo;\n  }\n\n  // skip trailing spaces until the rest of the line\n  while (pos < max) {\n    ch = str.charCodeAt(pos);\n    if (!isSpace(ch)) { break; }\n    pos++;\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    if (title) {\n      // garbage at the end of the line after title,\n      // but it could still be a valid reference if we roll back\n      title = '';\n      pos = destEndPos;\n      lines = destEndLineNo;\n      while (pos < max) {\n        ch = str.charCodeAt(pos);\n        if (!isSpace(ch)) { break; }\n        pos++;\n      }\n    }\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    // garbage at the end of the line\n    return false;\n  }\n\n  label = normalizeReference(str.slice(1, labelEnd));\n  if (!label) {\n    // CommonMark 0.20 disallows empty labels\n    return false;\n  }\n\n  // Reference can not terminate anything. This check is for safety only.\n  /*istanbul ignore if*/\n  if (silent) { return true; }\n\n  if (typeof state.env.references === 'undefined') {\n    state.env.references = {};\n  }\n  if (typeof state.env.references[label] === 'undefined') {\n    state.env.references[label] = { title: title, href: href };\n  }\n\n  state.parentType = oldParentType;\n\n  state.line = startLine + lines + 1;\n  return true;\n};\n","// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'section',\n  'source',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n];\n","// Regexps to match html elements\n\n'use strict';\n\nvar attr_name     = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted      = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value  = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute   = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag    = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag   = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment     = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing  = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata       = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n                        '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n","// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n  [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n  [ /^<!--/,        /-->/,   true ],\n  [ /^<\\?/,         /\\?>/,   true ],\n  [ /^<![A-Z]/,     />/,     true ],\n  [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n  [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n  [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'),  /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n  var i, nextLine, token, lineText,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (!state.md.options.html) { return false; }\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n  lineText = state.src.slice(pos, max);\n\n  for (i = 0; i < HTML_SEQUENCES.length; i++) {\n    if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n  }\n\n  if (i === HTML_SEQUENCES.length) { return false; }\n\n  if (silent) {\n    // true if this sequence can be a terminator, false otherwise\n    return HTML_SEQUENCES[i][2];\n  }\n\n  nextLine = startLine + 1;\n\n  // If we are here - we detected HTML block.\n  // Let's roll down till block end.\n  if (!HTML_SEQUENCES[i][1].test(lineText)) {\n    for (; nextLine < endLine; nextLine++) {\n      if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n      lineText = state.src.slice(pos, max);\n\n      if (HTML_SEQUENCES[i][1].test(lineText)) {\n        if (lineText.length !== 0) { nextLine++; }\n        break;\n      }\n    }\n  }\n\n  state.line = nextLine;\n\n  token         = state.push('html_block', '', 0);\n  token.map     = [ startLine, nextLine ];\n  token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n  return true;\n};\n","// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n  var ch, level, tmp, token,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  ch  = state.src.charCodeAt(pos);\n\n  if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n  // count heading level\n  level = 1;\n  ch = state.src.charCodeAt(++pos);\n  while (ch === 0x23/* # */ && pos < max && level <= 6) {\n    level++;\n    ch = state.src.charCodeAt(++pos);\n  }\n\n  if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n  if (silent) { return true; }\n\n  // Let's cut tails like '    ###  ' from the end of string\n\n  max = state.skipSpacesBack(max, pos);\n  tmp = state.skipCharsBack(max, 0x23, pos); // #\n  if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n    max = tmp;\n  }\n\n  state.line = startLine + 1;\n\n  token        = state.push('heading_open', 'h' + String(level), 1);\n  token.markup = '########'.slice(0, level);\n  token.map    = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = state.src.slice(pos, max).trim();\n  token.map      = [ startLine, state.line ];\n  token.children = [];\n\n  token        = state.push('heading_close', 'h' + String(level), -1);\n  token.markup = '########'.slice(0, level);\n\n  return true;\n};\n","// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n  var content, terminate, i, l, token, pos, max, level, marker,\n      nextLine = startLine + 1, oldParentType,\n      terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  oldParentType = state.parentType;\n  state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n  // jump line-by-line until empty one or EOF\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    //\n    // Check for underline in setext header\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n\n      if (pos < max) {\n        marker = state.src.charCodeAt(pos);\n\n        if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n          pos = state.skipChars(pos, marker);\n          pos = state.skipSpaces(pos);\n\n          if (pos >= max) {\n            level = (marker === 0x3D/* = */ ? 1 : 2);\n            break;\n          }\n        }\n      }\n    }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  if (!level) {\n    // Didn't find valid underline\n    return false;\n  }\n\n  content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n  state.line = nextLine + 1;\n\n  token          = state.push('heading_open', 'h' + String(level), 1);\n  token.markup   = String.fromCharCode(marker);\n  token.map      = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = content;\n  token.map      = [ startLine, state.line - 1 ];\n  token.children = [];\n\n  token          = state.push('heading_close', 'h' + String(level), -1);\n  token.markup   = String.fromCharCode(marker);\n\n  state.parentType = oldParentType;\n\n  return true;\n};\n","// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine, endLine) {\n  var content, terminate, i, l, token, oldParentType,\n      nextLine = startLine + 1,\n      terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n  oldParentType = state.parentType;\n  state.parentType = 'paragraph';\n\n  // jump line-by-line until empty one or EOF\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n  state.line = nextLine;\n\n  token          = state.push('paragraph_open', 'p', 1);\n  token.map      = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = content;\n  token.map      = [ startLine, state.line ];\n  token.children = [];\n\n  token          = state.push('paragraph_close', 'p', -1);\n\n  state.parentType = oldParentType;\n\n  return true;\n};\n","// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n  var ch, s, start, pos, len, indent, offset, indent_found;\n\n  this.src = src;\n\n  // link to parser instance\n  this.md     = md;\n\n  this.env = env;\n\n  //\n  // Internal state vartiables\n  //\n\n  this.tokens = tokens;\n\n  this.bMarks = [];  // line begin offsets for fast jumps\n  this.eMarks = [];  // line end offsets for fast jumps\n  this.tShift = [];  // offsets of the first non-space characters (tabs not expanded)\n  this.sCount = [];  // indents for each line (tabs expanded)\n\n  // An amount of virtual spaces (tabs expanded) between beginning\n  // of each line (bMarks) and real beginning of that line.\n  //\n  // It exists only as a hack because blockquotes override bMarks\n  // losing information in the process.\n  //\n  // It's used only when expanding tabs, you can think about it as\n  // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n  // means first tab should be expanded to 4-21%4 === 3 spaces.\n  //\n  this.bsCount = [];\n\n  // block parser variables\n  this.blkIndent  = 0; // required block content indent (for example, if we are\n                       // inside a list, it would be positioned after list marker)\n  this.line       = 0; // line index in src\n  this.lineMax    = 0; // lines count\n  this.tight      = false;  // loose/tight mode for lists\n  this.ddIndent   = -1; // indent of the current dd block (-1 if there isn't any)\n  this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n  // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n  // used in lists to determine if they interrupt a paragraph\n  this.parentType = 'root';\n\n  this.level = 0;\n\n  // renderer\n  this.result = '';\n\n  // Create caches\n  // Generate markers.\n  s = this.src;\n  indent_found = false;\n\n  for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n    ch = s.charCodeAt(pos);\n\n    if (!indent_found) {\n      if (isSpace(ch)) {\n        indent++;\n\n        if (ch === 0x09) {\n          offset += 4 - offset % 4;\n        } else {\n          offset++;\n        }\n        continue;\n      } else {\n        indent_found = true;\n      }\n    }\n\n    if (ch === 0x0A || pos === len - 1) {\n      if (ch !== 0x0A) { pos++; }\n      this.bMarks.push(start);\n      this.eMarks.push(pos);\n      this.tShift.push(indent);\n      this.sCount.push(offset);\n      this.bsCount.push(0);\n\n      indent_found = false;\n      indent = 0;\n      offset = 0;\n      start = pos + 1;\n    }\n  }\n\n  // Push fake entry to simplify cache bounds checks\n  this.bMarks.push(s.length);\n  this.eMarks.push(s.length);\n  this.tShift.push(0);\n  this.sCount.push(0);\n  this.bsCount.push(0);\n\n  this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n  var token = new Token(type, tag, nesting);\n  token.block = true;\n\n  if (nesting < 0) this.level--; // closing tag\n  token.level = this.level;\n  if (nesting > 0) this.level++; // opening tag\n\n  this.tokens.push(token);\n  return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n  return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n  for (var max = this.lineMax; from < max; from++) {\n    if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n      break;\n    }\n  }\n  return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n  var ch;\n\n  for (var max = this.src.length; pos < max; pos++) {\n    ch = this.src.charCodeAt(pos);\n    if (!isSpace(ch)) { break; }\n  }\n  return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n  if (pos <= min) { return pos; }\n\n  while (pos > min) {\n    if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n  }\n  return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n  for (var max = this.src.length; pos < max; pos++) {\n    if (this.src.charCodeAt(pos) !== code) { break; }\n  }\n  return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n  if (pos <= min) { return pos; }\n\n  while (pos > min) {\n    if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n  }\n  return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n  var i, lineIndent, ch, first, last, queue, lineStart,\n      line = begin;\n\n  if (begin >= end) {\n    return '';\n  }\n\n  queue = new Array(end - begin);\n\n  for (i = 0; line < end; line++, i++) {\n    lineIndent = 0;\n    lineStart = first = this.bMarks[line];\n\n    if (line + 1 < end || keepLastLF) {\n      // No need for bounds check because we have fake entry on tail.\n      last = this.eMarks[line] + 1;\n    } else {\n      last = this.eMarks[line];\n    }\n\n    while (first < last && lineIndent < indent) {\n      ch = this.src.charCodeAt(first);\n\n      if (isSpace(ch)) {\n        if (ch === 0x09) {\n          lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n        } else {\n          lineIndent++;\n        }\n      } else if (first - lineStart < this.tShift[line]) {\n        // patched tShift masked characters to look like spaces (blockquotes, list markers)\n        lineIndent++;\n      } else {\n        break;\n      }\n\n      first++;\n    }\n\n    if (lineIndent > indent) {\n      // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n      // with indent=2 becomes '  \\tfoobar'\n      queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n    } else {\n      queue[i] = this.src.slice(first, last);\n    }\n  }\n\n  return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler           = require('./ruler');\n\n\nvar _rules = [\n  // First 2 params - rule name & source. Secondary array - list of rules,\n  // which can be terminated by this one.\n  [ 'table',      require('./rules_block/table'),      [ 'paragraph', 'reference' ] ],\n  [ 'code',       require('./rules_block/code') ],\n  [ 'fence',      require('./rules_block/fence'),      [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'hr',         require('./rules_block/hr'),         [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'list',       require('./rules_block/list'),       [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'reference',  require('./rules_block/reference') ],\n  [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'heading',    require('./rules_block/heading'),    [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'lheading',   require('./rules_block/lheading') ],\n  [ 'paragraph',  require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n  /**\n   * ParserBlock#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of block rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (var i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n  }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n  var ok, i, prevLine,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      line = startLine,\n      hasEmptyLines = false,\n      maxNesting = state.md.options.maxNesting;\n\n  while (line < endLine) {\n    state.line = line = state.skipEmptyLines(line);\n    if (line >= endLine) { break; }\n\n    // Termination condition for nested calls.\n    // Nested calls currently used for blockquotes & lists\n    if (state.sCount[line] < state.blkIndent) { break; }\n\n    // If nesting level exceeded - skip tail to the end. That's not ordinary\n    // situation and we should not care about content.\n    if (state.level >= maxNesting) {\n      state.line = endLine;\n      break;\n    }\n\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.line`\n    // - update `state.tokens`\n    // - return true\n    prevLine = state.line;\n\n    for (i = 0; i < len; i++) {\n      ok = rules[i](state, line, endLine, false);\n      if (ok) {\n        if (prevLine >= state.line) {\n          throw new Error(\"block rule didn't increment state.line\");\n        }\n        break;\n      }\n    }\n\n    // this can only happen if user disables paragraph rule\n    if (!ok) throw new Error('none of the block rules matched');\n\n    // set state.tight if we had an empty line before current tag\n    // i.e. latest empty line should not count\n    state.tight = !hasEmptyLines;\n\n    // paragraph might \"eat\" one newline after it in nested lists\n    if (state.isEmpty(state.line - 1)) {\n      hasEmptyLines = true;\n    }\n\n    line = state.line;\n\n    if (line < endLine && state.isEmpty(line)) {\n      hasEmptyLines = true;\n      line++;\n      state.line = line;\n    }\n  }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n  var state;\n\n  if (!src) { return; }\n\n  state = new this.State(src, md, env, outTokens);\n\n  this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n  switch (ch) {\n    case 0x0A/* \\n */:\n    case 0x21/* ! */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2D/* - */:\n    case 0x3A/* : */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true;\n    default:\n      return false;\n  }\n}\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos;\n\n  while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n    pos++;\n  }\n\n  if (pos === state.pos) { return false; }\n\n  if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n  state.pos = pos;\n\n  return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos,\n      idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n  // first char is terminator -> empty text\n  if (idx === 0) { return false; }\n\n  // no terminator -> text till end of string\n  if (idx < 0) {\n    if (!silent) { state.pending += state.src.slice(pos); }\n    state.pos = state.src.length;\n    return true;\n  }\n\n  if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n  state.pos += idx;\n\n  return true;\n};*/\n","// Process links like https://example.org/\n\n'use strict';\n\n\n// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nvar SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;\n\n\nmodule.exports = function linkify(state, silent) {\n  var pos, max, match, proto, link, url, fullUrl, token;\n\n  if (!state.md.options.linkify) return false;\n  if (state.linkLevel > 0) return false;\n\n  pos = state.pos;\n  max = state.posMax;\n\n  if (pos + 3 > max) return false;\n  if (state.src.charCodeAt(pos) !== 0x3A/* : */) return false;\n  if (state.src.charCodeAt(pos + 1) !== 0x2F/* / */) return false;\n  if (state.src.charCodeAt(pos + 2) !== 0x2F/* / */) return false;\n\n  match = state.pending.match(SCHEME_RE);\n  if (!match) return false;\n\n  proto = match[1];\n\n  link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length));\n  if (!link) return false;\n\n  url = link.url;\n\n  // invalid link, but still detected by linkify somehow;\n  // need to check to prevent infinite loop below\n  if (url.length <= proto.length) return false;\n\n  // disallow '*' at the end of the link (conflicts with emphasis)\n  url = url.replace(/\\*+$/, '');\n\n  fullUrl = state.md.normalizeLink(url);\n  if (!state.md.validateLink(fullUrl)) return false;\n\n  if (!silent) {\n    state.pending = state.pending.slice(0, -proto.length);\n\n    token         = state.push('link_open', 'a', 1);\n    token.attrs   = [ [ 'href', fullUrl ] ];\n    token.markup  = 'linkify';\n    token.info    = 'auto';\n\n    token         = state.push('text', '', 0);\n    token.content = state.md.normalizeLinkText(url);\n\n    token         = state.push('link_close', 'a', -1);\n    token.markup  = 'linkify';\n    token.info    = 'auto';\n  }\n\n  state.pos += url.length - proto.length;\n  return true;\n};\n","// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n  var pmax, max, ws, pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n  pmax = state.pending.length - 1;\n  max = state.posMax;\n\n  // '  \\n' -> hardbreak\n  // Lookup in pending chars is bad practice! Don't copy to other rules!\n  // Pending string is stored in concat mode, indexed lookups will cause\n  // convertion to flat mode.\n  if (!silent) {\n    if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n      if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n        // Find whitespaces tail of pending chars.\n        ws = pmax - 1;\n        while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n        state.pending = state.pending.slice(0, ws);\n        state.push('hardbreak', 'br', 0);\n      } else {\n        state.pending = state.pending.slice(0, -1);\n        state.push('softbreak', 'br', 0);\n      }\n\n    } else {\n      state.push('softbreak', 'br', 0);\n    }\n  }\n\n  pos++;\n\n  // skip heading spaces for next line\n  while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n  state.pos = pos;\n  return true;\n};\n","// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n  .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n  var ch1, ch2, origStr, escapedStr, token, pos = state.pos, max = state.posMax;\n\n  if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) return false;\n  pos++;\n\n  // '\\' at the end of the inline block\n  if (pos >= max) return false;\n\n  ch1 = state.src.charCodeAt(pos);\n\n  if (ch1 === 0x0A) {\n    if (!silent) {\n      state.push('hardbreak', 'br', 0);\n    }\n\n    pos++;\n    // skip leading whitespaces from next line\n    while (pos < max) {\n      ch1 = state.src.charCodeAt(pos);\n      if (!isSpace(ch1)) break;\n      pos++;\n    }\n\n    state.pos = pos;\n    return true;\n  }\n\n  escapedStr = state.src[pos];\n\n  if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n    ch2 = state.src.charCodeAt(pos + 1);\n\n    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n      escapedStr += state.src[pos + 1];\n      pos++;\n    }\n  }\n\n  origStr = '\\\\' + escapedStr;\n\n  if (!silent) {\n    token = state.push('text_special', '', 0);\n\n    if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n      token.content = escapedStr;\n    } else {\n      token.content = origStr;\n    }\n\n    token.markup = origStr;\n    token.info   = 'escape';\n  }\n\n  state.pos = pos + 1;\n  return true;\n};\n","// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n  var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n      pos = state.pos,\n      ch = state.src.charCodeAt(pos);\n\n  if (ch !== 0x60/* ` */) { return false; }\n\n  start = pos;\n  pos++;\n  max = state.posMax;\n\n  // scan marker length\n  while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n  marker = state.src.slice(start, pos);\n  openerLength = marker.length;\n\n  if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n    if (!silent) state.pending += marker;\n    state.pos += openerLength;\n    return true;\n  }\n\n  matchEnd = pos;\n\n  // Nothing found in the cache, scan until the end of the line (or until marker is found)\n  while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n    matchEnd = matchStart + 1;\n\n    // scan marker length\n    while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n    closerLength = matchEnd - matchStart;\n\n    if (closerLength === openerLength) {\n      // Found matching closer length.\n      if (!silent) {\n        token     = state.push('code_inline', 'code', 0);\n        token.markup  = marker;\n        token.content = state.src.slice(pos, matchStart)\n          .replace(/\\n/g, ' ')\n          .replace(/^ (.+) $/, '$1');\n      }\n      state.pos = matchEnd;\n      return true;\n    }\n\n    // Some different length found, put it in cache as upper limit of where closer can be found\n    state.backticks[closerLength] = matchStart;\n  }\n\n  // Scanned through the end, didn't find anything\n  state.backticksScanned = true;\n\n  if (!silent) state.pending += marker;\n  state.pos += openerLength;\n  return true;\n};\n","// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n  var i, scanned, token, len, ch,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (silent) { return false; }\n\n  if (marker !== 0x7E/* ~ */) { return false; }\n\n  scanned = state.scanDelims(state.pos, true);\n  len = scanned.length;\n  ch = String.fromCharCode(marker);\n\n  if (len < 2) { return false; }\n\n  if (len % 2) {\n    token         = state.push('text', '', 0);\n    token.content = ch;\n    len--;\n  }\n\n  for (i = 0; i < len; i += 2) {\n    token         = state.push('text', '', 0);\n    token.content = ch + ch;\n\n    state.delimiters.push({\n      marker: marker,\n      length: 0,     // disable \"rule of 3\" length checks meant for emphasis\n      token:  state.tokens.length - 1,\n      end:    -1,\n      open:   scanned.can_open,\n      close:  scanned.can_close\n    });\n  }\n\n  state.pos += scanned.length;\n\n  return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n  var i, j,\n      startDelim,\n      endDelim,\n      token,\n      loneMarkers = [],\n      max = delimiters.length;\n\n  for (i = 0; i < max; i++) {\n    startDelim = delimiters[i];\n\n    if (startDelim.marker !== 0x7E/* ~ */) {\n      continue;\n    }\n\n    if (startDelim.end === -1) {\n      continue;\n    }\n\n    endDelim = delimiters[startDelim.end];\n\n    token         = state.tokens[startDelim.token];\n    token.type    = 's_open';\n    token.tag     = 's';\n    token.nesting = 1;\n    token.markup  = '~~';\n    token.content = '';\n\n    token         = state.tokens[endDelim.token];\n    token.type    = 's_close';\n    token.tag     = 's';\n    token.nesting = -1;\n    token.markup  = '~~';\n    token.content = '';\n\n    if (state.tokens[endDelim.token - 1].type === 'text' &&\n        state.tokens[endDelim.token - 1].content === '~') {\n\n      loneMarkers.push(endDelim.token - 1);\n    }\n  }\n\n  // If a marker sequence has an odd number of characters, it's splitted\n  // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n  // start of the sequence.\n  //\n  // So, we have to move all those markers after subsequent s_close tags.\n  //\n  while (loneMarkers.length) {\n    i = loneMarkers.pop();\n    j = i + 1;\n\n    while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n      j++;\n    }\n\n    j--;\n\n    if (i !== j) {\n      token = state.tokens[j];\n      state.tokens[j] = state.tokens[i];\n      state.tokens[i] = token;\n    }\n  }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n\n  postProcess(state, state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters);\n    }\n  }\n};\n","// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n  var i, scanned, token,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (silent) { return false; }\n\n  if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n  scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n  for (i = 0; i < scanned.length; i++) {\n    token         = state.push('text', '', 0);\n    token.content = String.fromCharCode(marker);\n\n    state.delimiters.push({\n      // Char code of the starting marker (number).\n      //\n      marker: marker,\n\n      // Total length of these series of delimiters.\n      //\n      length: scanned.length,\n\n      // A position of the token this delimiter corresponds to.\n      //\n      token:  state.tokens.length - 1,\n\n      // If this delimiter is matched as a valid opener, `end` will be\n      // equal to its position, otherwise it's `-1`.\n      //\n      end:    -1,\n\n      // Boolean flags that determine if this delimiter could open or close\n      // an emphasis.\n      //\n      open:   scanned.can_open,\n      close:  scanned.can_close\n    });\n  }\n\n  state.pos += scanned.length;\n\n  return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n  var i,\n      startDelim,\n      endDelim,\n      token,\n      ch,\n      isStrong,\n      max = delimiters.length;\n\n  for (i = max - 1; i >= 0; i--) {\n    startDelim = delimiters[i];\n\n    if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n      continue;\n    }\n\n    // Process only opening markers\n    if (startDelim.end === -1) {\n      continue;\n    }\n\n    endDelim = delimiters[startDelim.end];\n\n    // If the previous delimiter has the same marker and is adjacent to this one,\n    // merge those into one strong delimiter.\n    //\n    // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n    //\n    isStrong = i > 0 &&\n               delimiters[i - 1].end === startDelim.end + 1 &&\n               // check that first two markers match and adjacent\n               delimiters[i - 1].marker === startDelim.marker &&\n               delimiters[i - 1].token === startDelim.token - 1 &&\n               // check that last two markers are adjacent (we can safely assume they match)\n               delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n    ch = String.fromCharCode(startDelim.marker);\n\n    token         = state.tokens[startDelim.token];\n    token.type    = isStrong ? 'strong_open' : 'em_open';\n    token.tag     = isStrong ? 'strong' : 'em';\n    token.nesting = 1;\n    token.markup  = isStrong ? ch + ch : ch;\n    token.content = '';\n\n    token         = state.tokens[endDelim.token];\n    token.type    = isStrong ? 'strong_close' : 'em_close';\n    token.tag     = isStrong ? 'strong' : 'em';\n    token.nesting = -1;\n    token.markup  = isStrong ? ch + ch : ch;\n    token.content = '';\n\n    if (isStrong) {\n      state.tokens[delimiters[i - 1].token].content = '';\n      state.tokens[delimiters[startDelim.end + 1].token].content = '';\n      i--;\n    }\n  }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n\n  postProcess(state, state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters);\n    }\n  }\n};\n","// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n  var attrs,\n      code,\n      label,\n      labelEnd,\n      labelStart,\n      pos,\n      res,\n      ref,\n      token,\n      href = '',\n      title = '',\n      oldPos = state.pos,\n      max = state.posMax,\n      start = state.pos,\n      parseReference = true;\n\n  if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n  labelStart = state.pos + 1;\n  labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false; }\n\n  pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // might have found a valid shortcut link, disable reference parsing\n    parseReference = false;\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n    if (pos >= max) { return false; }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = '';\n      }\n\n      // [link](  <href>  \"title\"  )\n      //                ^^ skipping these spaces\n      start = pos;\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n        if (!isSpace(code) && code !== 0x0A) { break; }\n      }\n\n      // [link](  <href>  \"title\"  )\n      //                  ^^^^^^^ parsing link title\n      res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n      if (pos < max && start !== pos && res.ok) {\n        title = res.str;\n        pos = res.pos;\n\n        // [link](  <href>  \"title\"  )\n        //                         ^^ skipping these spaces\n        for (; pos < max; pos++) {\n          code = state.src.charCodeAt(pos);\n          if (!isSpace(code) && code !== 0x0A) { break; }\n        }\n      }\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      // parsing a valid shortcut link failed, fallback to reference\n      parseReference = true;\n    }\n    pos++;\n  }\n\n  if (parseReference) {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false; }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    state.pos = labelStart;\n    state.posMax = labelEnd;\n\n    token        = state.push('link_open', 'a', 1);\n    token.attrs  = attrs = [ [ 'href', href ] ];\n    if (title) {\n      attrs.push([ 'title', title ]);\n    }\n\n    state.linkLevel++;\n    state.md.inline.tokenize(state);\n    state.linkLevel--;\n\n    token        = state.push('link_close', 'a', -1);\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n};\n","// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n  var attrs,\n      code,\n      content,\n      label,\n      labelEnd,\n      labelStart,\n      pos,\n      ref,\n      res,\n      title,\n      token,\n      tokens,\n      start,\n      href = '',\n      oldPos = state.pos,\n      max = state.posMax;\n\n  if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n  if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n  labelStart = state.pos + 2;\n  labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false; }\n\n  pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n    if (pos >= max) { return false; }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = '';\n      }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                ^^ skipping these spaces\n    start = pos;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                  ^^^^^^^ parsing link title\n    res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n    if (pos < max && start !== pos && res.ok) {\n      title = res.str;\n      pos = res.pos;\n\n      // [link](  <href>  \"title\"  )\n      //                         ^^ skipping these spaces\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n        if (!isSpace(code) && code !== 0x0A) { break; }\n      }\n    } else {\n      title = '';\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      state.pos = oldPos;\n      return false;\n    }\n    pos++;\n  } else {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false; }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    content = state.src.slice(labelStart, labelEnd);\n\n    state.md.inline.parse(\n      content,\n      state.md,\n      state.env,\n      tokens = []\n    );\n\n    token          = state.push('image', 'img', 0);\n    token.attrs    = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n    token.children = tokens;\n    token.content  = content;\n\n    if (title) {\n      attrs.push([ 'title', title ]);\n    }\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n};\n","// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE    = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n  var url, fullUrl, token, ch, start, max,\n      pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n  start = state.pos;\n  max = state.posMax;\n\n  for (;;) {\n    if (++pos >= max) return false;\n\n    ch = state.src.charCodeAt(pos);\n\n    if (ch === 0x3C /* < */) return false;\n    if (ch === 0x3E /* > */) break;\n  }\n\n  url = state.src.slice(start + 1, pos);\n\n  if (AUTOLINK_RE.test(url)) {\n    fullUrl = state.md.normalizeLink(url);\n    if (!state.md.validateLink(fullUrl)) { return false; }\n\n    if (!silent) {\n      token         = state.push('link_open', 'a', 1);\n      token.attrs   = [ [ 'href', fullUrl ] ];\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n\n      token         = state.push('text', '', 0);\n      token.content = state.md.normalizeLinkText(url);\n\n      token         = state.push('link_close', 'a', -1);\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n    }\n\n    state.pos += url.length + 2;\n    return true;\n  }\n\n  if (EMAIL_RE.test(url)) {\n    fullUrl = state.md.normalizeLink('mailto:' + url);\n    if (!state.md.validateLink(fullUrl)) { return false; }\n\n    if (!silent) {\n      token         = state.push('link_open', 'a', 1);\n      token.attrs   = [ [ 'href', fullUrl ] ];\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n\n      token         = state.push('text', '', 0);\n      token.content = state.md.normalizeLinkText(url);\n\n      token         = state.push('link_close', 'a', -1);\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n    }\n\n    state.pos += url.length + 2;\n    return true;\n  }\n\n  return false;\n};\n","// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLinkOpen(str) {\n  return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\n\n\nfunction isLetter(ch) {\n  /*eslint no-bitwise:0*/\n  var lc = ch | 0x20; // to lower case\n  return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n  var ch, match, max, token,\n      pos = state.pos;\n\n  if (!state.md.options.html) { return false; }\n\n  // Check start\n  max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n      pos + 2 >= max) {\n    return false;\n  }\n\n  // Quick fail on second char\n  ch = state.src.charCodeAt(pos + 1);\n  if (ch !== 0x21/* ! */ &&\n      ch !== 0x3F/* ? */ &&\n      ch !== 0x2F/* / */ &&\n      !isLetter(ch)) {\n    return false;\n  }\n\n  match = state.src.slice(pos).match(HTML_TAG_RE);\n  if (!match) { return false; }\n\n  if (!silent) {\n    token         = state.push('html_inline', '', 0);\n    token.content = match[0];\n\n    if (isLinkOpen(token.content))  state.linkLevel++;\n    if (isLinkClose(token.content)) state.linkLevel--;\n  }\n  state.pos += match[0].length;\n  return true;\n};\n","// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities          = require('../common/entities');\nvar has               = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint     = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE   = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n  var ch, code, match, token, pos = state.pos, max = state.posMax;\n\n  if (state.src.charCodeAt(pos) !== 0x26/* & */) return false;\n\n  if (pos + 1 >= max) return false;\n\n  ch = state.src.charCodeAt(pos + 1);\n\n  if (ch === 0x23 /* # */) {\n    match = state.src.slice(pos).match(DIGITAL_RE);\n    if (match) {\n      if (!silent) {\n        code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n\n        token         = state.push('text_special', '', 0);\n        token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n        token.markup  = match[0];\n        token.info    = 'entity';\n      }\n      state.pos += match[0].length;\n      return true;\n    }\n  } else {\n    match = state.src.slice(pos).match(NAMED_RE);\n    if (match) {\n      if (has(entities, match[1])) {\n        if (!silent) {\n          token         = state.push('text_special', '', 0);\n          token.content = entities[match[1]];\n          token.markup  = match[0];\n          token.info    = 'entity';\n        }\n        state.pos += match[0].length;\n        return true;\n      }\n    }\n  }\n\n  return false;\n};\n","// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(delimiters) {\n  var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n      isOddMatch, lastJump,\n      openersBottom = {},\n      max = delimiters.length;\n\n  if (!max) return;\n\n  // headerIdx is the first delimiter of the current (where closer is) delimiter run\n  var headerIdx = 0;\n  var lastTokenIdx = -2; // needs any value lower than -1\n  var jumps = [];\n\n  for (closerIdx = 0; closerIdx < max; closerIdx++) {\n    closer = delimiters[closerIdx];\n\n    jumps.push(0);\n\n    // markers belong to same delimiter run if:\n    //  - they have adjacent tokens\n    //  - AND markers are the same\n    //\n    if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n      headerIdx = closerIdx;\n    }\n\n    lastTokenIdx = closer.token;\n\n    // Length is only used for emphasis-specific \"rule of 3\",\n    // if it's not defined (in strikethrough or 3rd party plugins),\n    // we can default it to 0 to disable those checks.\n    //\n    closer.length = closer.length || 0;\n\n    if (!closer.close) continue;\n\n    // Previously calculated lower bounds (previous fails)\n    // for each marker, each delimiter length modulo 3,\n    // and for whether this closer can be an opener;\n    // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n    if (!openersBottom.hasOwnProperty(closer.marker)) {\n      openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n    }\n\n    minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n    openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n    newMinOpenerIdx = openerIdx;\n\n    for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n      opener = delimiters[openerIdx];\n\n      if (opener.marker !== closer.marker) continue;\n\n      if (opener.open && opener.end < 0) {\n\n        isOddMatch = false;\n\n        // from spec:\n        //\n        // If one of the delimiters can both open and close emphasis, then the\n        // sum of the lengths of the delimiter runs containing the opening and\n        // closing delimiters must not be a multiple of 3 unless both lengths\n        // are multiples of 3.\n        //\n        if (opener.close || closer.open) {\n          if ((opener.length + closer.length) % 3 === 0) {\n            if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n              isOddMatch = true;\n            }\n          }\n        }\n\n        if (!isOddMatch) {\n          // If previous delimiter cannot be an opener, we can safely skip\n          // the entire sequence in future checks. This is required to make\n          // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n          //\n          lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n            jumps[openerIdx - 1] + 1 :\n            0;\n\n          jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n          jumps[openerIdx] = lastJump;\n\n          closer.open  = false;\n          opener.end   = closerIdx;\n          opener.close = false;\n          newMinOpenerIdx = -1;\n          // treat next token as start of run,\n          // it optimizes skips in **<...>**a**<...>** pathological case\n          lastTokenIdx = -2;\n          break;\n        }\n      }\n    }\n\n    if (newMinOpenerIdx !== -1) {\n      // If match for this delimiter run failed, we want to set lower bound for\n      // future lookups. This is required to make sure algorithm has linear\n      // complexity.\n      //\n      // See details here:\n      // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n      //\n      openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n    }\n  }\n}\n\n\nmodule.exports = function link_pairs(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n\n  processDelimiters(state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      processDelimiters(tokens_meta[curr].delimiters);\n    }\n  }\n};\n","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function fragments_join(state) {\n  var curr, last,\n      level = 0,\n      tokens = state.tokens,\n      max = state.tokens.length;\n\n  for (curr = last = 0; curr < max; curr++) {\n    // re-calculate levels after emphasis/strikethrough turns some text nodes\n    // into opening/closing tags\n    if (tokens[curr].nesting < 0) level--; // closing tag\n    tokens[curr].level = level;\n    if (tokens[curr].nesting > 0) level++; // opening tag\n\n    if (tokens[curr].type === 'text' &&\n        curr + 1 < max &&\n        tokens[curr + 1].type === 'text') {\n\n      // collapse two adjacent text nodes\n      tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n    } else {\n      if (curr !== last) { tokens[last] = tokens[curr]; }\n\n      last++;\n    }\n  }\n\n  if (curr !== last) {\n    tokens.length = last;\n  }\n};\n","// Inline parser state\n\n'use strict';\n\n\nvar Token          = require('../token');\nvar isWhiteSpace   = require('../common/utils').isWhiteSpace;\nvar isPunctChar    = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n  this.src = src;\n  this.env = env;\n  this.md = md;\n  this.tokens = outTokens;\n  this.tokens_meta = Array(outTokens.length);\n\n  this.pos = 0;\n  this.posMax = this.src.length;\n  this.level = 0;\n  this.pending = '';\n  this.pendingLevel = 0;\n\n  // Stores { start: end } pairs. Useful for backtrack\n  // optimization of pairs parse (emphasis, strikes).\n  this.cache = {};\n\n  // List of emphasis-like delimiters for current tag\n  this.delimiters = [];\n\n  // Stack of delimiter lists for upper level tags\n  this._prev_delimiters = [];\n\n  // backtick length => last seen position\n  this.backticks = {};\n  this.backticksScanned = false;\n\n  // Counter used to disable inline linkify-it execution\n  // inside <a> and markdown links\n  this.linkLevel = 0;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n  var token = new Token('text', '', 0);\n  token.content = this.pending;\n  token.level = this.pendingLevel;\n  this.tokens.push(token);\n  this.pending = '';\n  return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n  if (this.pending) {\n    this.pushPending();\n  }\n\n  var token = new Token(type, tag, nesting);\n  var token_meta = null;\n\n  if (nesting < 0) {\n    // closing tag\n    this.level--;\n    this.delimiters = this._prev_delimiters.pop();\n  }\n\n  token.level = this.level;\n\n  if (nesting > 0) {\n    // opening tag\n    this.level++;\n    this._prev_delimiters.push(this.delimiters);\n    this.delimiters = [];\n    token_meta = { delimiters: this.delimiters };\n  }\n\n  this.pendingLevel = this.level;\n  this.tokens.push(token);\n  this.tokens_meta.push(token_meta);\n  return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n//  - start - position to scan from (it should point at a valid marker);\n//  - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n  var pos = start, lastChar, nextChar, count, can_open, can_close,\n      isLastWhiteSpace, isLastPunctChar,\n      isNextWhiteSpace, isNextPunctChar,\n      left_flanking = true,\n      right_flanking = true,\n      max = this.posMax,\n      marker = this.src.charCodeAt(start);\n\n  // treat beginning of the line as a whitespace\n  lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n  while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n  count = pos - start;\n\n  // treat end of the line as a whitespace\n  nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n  isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n  isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n  isLastWhiteSpace = isWhiteSpace(lastChar);\n  isNextWhiteSpace = isWhiteSpace(nextChar);\n\n  if (isNextWhiteSpace) {\n    left_flanking = false;\n  } else if (isNextPunctChar) {\n    if (!(isLastWhiteSpace || isLastPunctChar)) {\n      left_flanking = false;\n    }\n  }\n\n  if (isLastWhiteSpace) {\n    right_flanking = false;\n  } else if (isLastPunctChar) {\n    if (!(isNextWhiteSpace || isNextPunctChar)) {\n      right_flanking = false;\n    }\n  }\n\n  if (!canSplitWord) {\n    can_open  = left_flanking  && (!right_flanking || isLastPunctChar);\n    can_close = right_flanking && (!left_flanking  || isNextPunctChar);\n  } else {\n    can_open  = left_flanking;\n    can_close = right_flanking;\n  }\n\n  return {\n    can_open:  can_open,\n    can_close: can_close,\n    length:    count\n  };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler           = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n  [ 'text',            require('./rules_inline/text') ],\n  [ 'linkify',         require('./rules_inline/linkify') ],\n  [ 'newline',         require('./rules_inline/newline') ],\n  [ 'escape',          require('./rules_inline/escape') ],\n  [ 'backticks',       require('./rules_inline/backticks') ],\n  [ 'strikethrough',   require('./rules_inline/strikethrough').tokenize ],\n  [ 'emphasis',        require('./rules_inline/emphasis').tokenize ],\n  [ 'link',            require('./rules_inline/link') ],\n  [ 'image',           require('./rules_inline/image') ],\n  [ 'autolink',        require('./rules_inline/autolink') ],\n  [ 'html_inline',     require('./rules_inline/html_inline') ],\n  [ 'entity',          require('./rules_inline/entity') ]\n];\n\n// `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\nvar _rules2 = [\n  [ 'balance_pairs',   require('./rules_inline/balance_pairs') ],\n  [ 'strikethrough',   require('./rules_inline/strikethrough').postProcess ],\n  [ 'emphasis',        require('./rules_inline/emphasis').postProcess ],\n  // rules for pairs separate '**' into its own text tokens, which may be left unused,\n  // rule below merges unused segments back with the rest of the text\n  [ 'fragments_join',  require('./rules_inline/fragments_join') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n  var i;\n\n  /**\n   * ParserInline#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of inline rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n\n  /**\n   * ParserInline#ruler2 -> Ruler\n   *\n   * [[Ruler]] instance. Second ruler used for post-processing\n   * (e.g. in emphasis-like rules).\n   **/\n  this.ruler2 = new Ruler();\n\n  for (i = 0; i < _rules2.length; i++) {\n    this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n  }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n  var ok, i, pos = state.pos,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      maxNesting = state.md.options.maxNesting,\n      cache = state.cache;\n\n\n  if (typeof cache[pos] !== 'undefined') {\n    state.pos = cache[pos];\n    return;\n  }\n\n  if (state.level < maxNesting) {\n    for (i = 0; i < len; i++) {\n      // Increment state.level and decrement it later to limit recursion.\n      // It's harmless to do here, because no tokens are created. But ideally,\n      // we'd need a separate private state variable for this purpose.\n      //\n      state.level++;\n      ok = rules[i](state, true);\n      state.level--;\n\n      if (ok) {\n        if (pos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\"); }\n        break;\n      }\n    }\n  } else {\n    // Too much nesting, just skip until the end of the paragraph.\n    //\n    // NOTE: this will cause links to behave incorrectly in the following case,\n    //       when an amount of `[` is exactly equal to `maxNesting + 1`:\n    //\n    //       [[[[[[[[[[[[[[[[[[[[[foo]()\n    //\n    // TODO: remove this workaround when CM standard will allow nested links\n    //       (we can replace it by preventing links from being parsed in\n    //       validation mode)\n    //\n    state.pos = state.posMax;\n  }\n\n  if (!ok) { state.pos++; }\n  cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n  var ok, i, prevPos,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      end = state.posMax,\n      maxNesting = state.md.options.maxNesting;\n\n  while (state.pos < end) {\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.pos`\n    // - update `state.tokens`\n    // - return true\n    prevPos = state.pos;\n\n    if (state.level < maxNesting) {\n      for (i = 0; i < len; i++) {\n        ok = rules[i](state, false);\n        if (ok) {\n          if (prevPos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\"); }\n          break;\n        }\n      }\n    }\n\n    if (ok) {\n      if (state.pos >= end) { break; }\n      continue;\n    }\n\n    state.pending += state.src[state.pos++];\n  }\n\n  if (state.pending) {\n    state.pushPending();\n  }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n  var i, rules, len;\n  var state = new this.State(str, md, env, outTokens);\n\n  this.tokenize(state);\n\n  rules = this.ruler2.getRules('');\n  len = rules.length;\n\n  for (i = 0; i < len; i++) {\n    rules[i](state);\n  }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n","'use strict';\n\n\nmodule.exports = function (opts) {\n  var re = {};\n  opts = opts || {};\n\n  // Use direct extract instead of `regenerate` to reduse browserified size\n  re.src_Any = require('uc.micro/properties/Any/regex').source;\n  re.src_Cc  = require('uc.micro/categories/Cc/regex').source;\n  re.src_Z   = require('uc.micro/categories/Z/regex').source;\n  re.src_P   = require('uc.micro/categories/P/regex').source;\n\n  // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n  re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n  // \\p{\\Z\\Cc} (white spaces + control)\n  re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n  // Experimental. List of chars, completely prohibited in links\n  // because can separate it from other part of text\n  var text_separators = '[><\\uff5c]';\n\n  // All possible word characters (everything without punctuation, spaces & controls)\n  // Defined via punctuation & spaces to save space\n  // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n  re.src_pseudo_letter       = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n  // The same as abothe but without [0-9]\n  // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n  ////////////////////////////////////////////////////////////////////////////////\n\n  re.src_ip4 =\n\n    '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n  // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n  re.src_auth    = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n  re.src_port =\n\n    '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n  re.src_host_terminator =\n\n    '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' +\n    '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n  re.src_path =\n\n    '(?:' +\n      '[/?#]' +\n        '(?:' +\n          '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n          '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n          '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n          '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n          '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n          \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n          \"\\\\'(?=\" + re.src_pseudo_letter + '|[-])|' +  // allow `I'm_king` if no pair found\n          '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n                                     // github has ... in commit range links,\n                                     // Restrict to\n                                     // - english\n                                     // - percent-encoded\n                                     // - parts of file path\n                                     // - params separator\n                                     // until more examples found.\n          '\\\\.(?!' + re.src_ZCc + '|[.]|$)|' +\n          (opts['---'] ?\n            '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n            :\n            '\\\\-+|'\n          ) +\n          ',(?!' + re.src_ZCc + '|$)|' +       // allow `,,,` in paths\n          ';(?!' + re.src_ZCc + '|$)|' +       // allow `;` if not followed by space-like char\n          '\\\\!+(?!' + re.src_ZCc + '|[!]|$)|' +  // allow `!!!` in paths, but not at the end\n          '\\\\?(?!' + re.src_ZCc + '|[?]|$)' +\n        ')+' +\n      '|\\\\/' +\n    ')?';\n\n  // Allow anything in markdown spec, forbid quote (\") at the first position\n  // because emails enclosed in quotes are far more common\n  re.src_email_name =\n\n    '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n  re.src_xn =\n\n    'xn--[a-z0-9\\\\-]{1,59}';\n\n  // More to read about domain names\n  // http://serverfault.com/questions/638260/\n\n  re.src_domain_root =\n\n    // Allow letters & digits (http://test1)\n    '(?:' +\n      re.src_xn +\n      '|' +\n      re.src_pseudo_letter + '{1,63}' +\n    ')';\n\n  re.src_domain =\n\n    '(?:' +\n      re.src_xn +\n      '|' +\n      '(?:' + re.src_pseudo_letter + ')' +\n      '|' +\n      '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n    ')';\n\n  re.src_host =\n\n    '(?:' +\n    // Don't need IP check, because digits are already allowed in normal domain names\n    //   src_ip4 +\n    // '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n    ')';\n\n  re.tpl_host_fuzzy =\n\n    '(?:' +\n      re.src_ip4 +\n    '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n    ')';\n\n  re.tpl_host_no_ip_fuzzy =\n\n    '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n  re.src_host_strict =\n\n    re.src_host + re.src_host_terminator;\n\n  re.tpl_host_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_host_terminator;\n\n  re.src_host_port_strict =\n\n    re.src_host + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_no_ip_fuzzy_strict =\n\n    re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Main rules\n\n  // Rude test fuzzy links by host, for quick deny\n  re.tpl_host_fuzzy_test =\n\n    'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n  re.tpl_email_fuzzy =\n\n      '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n      '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n  re.tpl_link_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n  re.tpl_link_no_ip_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n  return re;\n};\n","'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    return acc || defaultOptions.hasOwnProperty(k);\n  }, false);\n}\n\n\nvar defaultSchemas = {\n  'http:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.http) {\n        // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.http =  new RegExp(\n          '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n        );\n      }\n      if (self.re.http.test(tail)) {\n        return tail.match(self.re.http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'https:':  'http:',\n  'ftp:':    'http:',\n  '//':      {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.no_http) {\n      // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.no_http =  new RegExp(\n          '^' +\n          self.re.src_auth +\n          // Don't allow single-level domains, because of false positives like '//test'\n          // with code comments\n          '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n          self.re.src_port +\n          self.re.src_host_terminator +\n          self.re.src_path,\n\n          'i'\n        );\n      }\n\n      if (self.re.no_http.test(tail)) {\n        // should not be `://` & `///`, that protects from errors in protocol name\n        if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n        if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n        return tail.match(self.re.no_http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'mailto:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.mailto) {\n        self.re.mailto =  new RegExp(\n          '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n        );\n      }\n      if (self.re.mailto.test(tail)) {\n        return tail.match(self.re.mailto)[0].length;\n      }\n      return 0;\n    }\n  }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n  self.__index__ = -1;\n  self.__text_cache__   = '';\n}\n\nfunction createValidator(re) {\n  return function (text, pos) {\n    var tail = text.slice(pos);\n\n    if (re.test(tail)) {\n      return tail.match(re)[0].length;\n    }\n    return 0;\n  };\n}\n\nfunction createNormalizer() {\n  return function (match, self) {\n    self.normalize(match);\n  };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n  // Load & clone RE patterns.\n  var re = self.re = require('./lib/re')(self.__opts__);\n\n  // Define dynamic patterns\n  var tlds = self.__tlds__.slice();\n\n  self.onCompile();\n\n  if (!self.__tlds_replaced__) {\n    tlds.push(tlds_2ch_src_re);\n  }\n  tlds.push(re.src_xn);\n\n  re.src_tlds = tlds.join('|');\n\n  function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n  re.email_fuzzy      = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n  re.link_fuzzy       = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n  re.host_fuzzy_test  = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n  //\n  // Compile each schema\n  //\n\n  var aliases = [];\n\n  self.__compiled__ = {}; // Reset compiled data\n\n  function schemaError(name, val) {\n    throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n  }\n\n  Object.keys(self.__schemas__).forEach(function (name) {\n    var val = self.__schemas__[name];\n\n    // skip disabled methods\n    if (val === null) { return; }\n\n    var compiled = { validate: null, link: null };\n\n    self.__compiled__[name] = compiled;\n\n    if (isObject(val)) {\n      if (isRegExp(val.validate)) {\n        compiled.validate = createValidator(val.validate);\n      } else if (isFunction(val.validate)) {\n        compiled.validate = val.validate;\n      } else {\n        schemaError(name, val);\n      }\n\n      if (isFunction(val.normalize)) {\n        compiled.normalize = val.normalize;\n      } else if (!val.normalize) {\n        compiled.normalize = createNormalizer();\n      } else {\n        schemaError(name, val);\n      }\n\n      return;\n    }\n\n    if (isString(val)) {\n      aliases.push(name);\n      return;\n    }\n\n    schemaError(name, val);\n  });\n\n  //\n  // Compile postponed aliases\n  //\n\n  aliases.forEach(function (alias) {\n    if (!self.__compiled__[self.__schemas__[alias]]) {\n      // Silently fail on missed schemas to avoid errons on disable.\n      // schemaError(alias, self.__schemas__[alias]);\n      return;\n    }\n\n    self.__compiled__[alias].validate =\n      self.__compiled__[self.__schemas__[alias]].validate;\n    self.__compiled__[alias].normalize =\n      self.__compiled__[self.__schemas__[alias]].normalize;\n  });\n\n  //\n  // Fake record for guessed links\n  //\n  self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n  //\n  // Build schema condition\n  //\n  var slist = Object.keys(self.__compiled__)\n                      .filter(function (name) {\n                        // Filter disabled & fake schemas\n                        return name.length > 0 && self.__compiled__[name];\n                      })\n                      .map(escapeRE)\n                      .join('|');\n  // (?!_) cause 1.5x slowdown\n  self.re.schema_test     = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n  self.re.schema_search   = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n  self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i');\n\n  self.re.pretest = RegExp(\n    '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n    'i'\n  );\n\n  //\n  // Cleanup\n  //\n\n  resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n  var start = self.__index__,\n      end   = self.__last_index__,\n      text  = self.__text_cache__.slice(start, end);\n\n  /**\n   * Match#schema -> String\n   *\n   * Prefix (protocol) for matched string.\n   **/\n  this.schema    = self.__schema__.toLowerCase();\n  /**\n   * Match#index -> Number\n   *\n   * First position of matched string.\n   **/\n  this.index     = start + shift;\n  /**\n   * Match#lastIndex -> Number\n   *\n   * Next position after matched string.\n   **/\n  this.lastIndex = end + shift;\n  /**\n   * Match#raw -> String\n   *\n   * Matched string.\n   **/\n  this.raw       = text;\n  /**\n   * Match#text -> String\n   *\n   * Notmalized text of matched string.\n   **/\n  this.text      = text;\n  /**\n   * Match#url -> String\n   *\n   * Normalized url of matched string.\n   **/\n  this.url       = text;\n}\n\nfunction createMatch(self, shift) {\n  var match = new Match(self, shift);\n\n  self.__compiled__[match.schema].normalize(match, self);\n\n  return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n *   for example). `linkify-it` makes shure that prefix is not preceeded with\n *   alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n *   - _String_ - just alias to existing rule\n *   - _Object_\n *     - _validate_ - validator function (should return matched length on success),\n *       or `RegExp`.\n *     - _normalize_ - optional function to normalize text & url of matched result\n *       (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n *   like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n  if (!(this instanceof LinkifyIt)) {\n    return new LinkifyIt(schemas, options);\n  }\n\n  if (!options) {\n    if (isOptionsObj(schemas)) {\n      options = schemas;\n      schemas = {};\n    }\n  }\n\n  this.__opts__           = assign({}, defaultOptions, options);\n\n  // Cache last tested result. Used to skip repeating steps on next `match` call.\n  this.__index__          = -1;\n  this.__last_index__     = -1; // Next scan position\n  this.__schema__         = '';\n  this.__text_cache__     = '';\n\n  this.__schemas__        = assign({}, defaultSchemas, schemas);\n  this.__compiled__       = {};\n\n  this.__tlds__           = tlds_default;\n  this.__tlds_replaced__  = false;\n\n  this.re = {};\n\n  compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n  this.__schemas__[schema] = definition;\n  compile(this);\n  return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n  this.__opts__ = assign(this.__opts__, options);\n  return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__      = -1;\n\n  if (!text.length) { return false; }\n\n  var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n  // try to scan for link with schema - that's the most simple rule\n  if (this.re.schema_test.test(text)) {\n    re = this.re.schema_search;\n    re.lastIndex = 0;\n    while ((m = re.exec(text)) !== null) {\n      len = this.testSchemaAt(text, m[2], re.lastIndex);\n      if (len) {\n        this.__schema__     = m[2];\n        this.__index__      = m.index + m[1].length;\n        this.__last_index__ = m.index + m[0].length + len;\n        break;\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    // guess schemaless links\n    tld_pos = text.search(this.re.host_fuzzy_test);\n    if (tld_pos >= 0) {\n      // if tld is located after found link - no need to check fuzzy pattern\n      if (this.__index__ < 0 || tld_pos < this.__index__) {\n        if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n          shift = ml.index + ml[1].length;\n\n          if (this.__index__ < 0 || shift < this.__index__) {\n            this.__schema__     = '';\n            this.__index__      = shift;\n            this.__last_index__ = ml.index + ml[0].length;\n          }\n        }\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    // guess schemaless emails\n    at_pos = text.indexOf('@');\n    if (at_pos >= 0) {\n      // We can't skip this check, because this cases are possible:\n      // 192.168.1.1@gmail.com, my.in@example.com\n      if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n        shift = me.index + me[1].length;\n        next  = me.index + me[0].length;\n\n        if (this.__index__ < 0 || shift < this.__index__ ||\n            (shift === this.__index__ && next > this.__last_index__)) {\n          this.__schema__     = 'mailto:';\n          this.__index__      = shift;\n          this.__last_index__ = next;\n        }\n      }\n    }\n  }\n\n  return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n  return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n  // If not supported schema check requested - terminate\n  if (!this.__compiled__[schema.toLowerCase()]) {\n    return 0;\n  }\n  return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n *   protocol-neutral  links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n  var shift = 0, result = [];\n\n  // Try to take previous element from cache, if .test() called before\n  if (this.__index__ >= 0 && this.__text_cache__ === text) {\n    result.push(createMatch(this, shift));\n    shift = this.__last_index__;\n  }\n\n  // Cut head if cache was used\n  var tail = shift ? text.slice(shift) : text;\n\n  // Scan string until end reached\n  while (this.test(tail)) {\n    result.push(createMatch(this, shift));\n\n    tail = tail.slice(this.__last_index__);\n    shift += this.__last_index__;\n  }\n\n  if (result.length) {\n    return result;\n  }\n\n  return null;\n};\n\n\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart(text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__      = -1;\n\n  if (!text.length) return null;\n\n  var m = this.re.schema_at_start.exec(text);\n  if (!m) return null;\n\n  var len = this.testSchemaAt(text, m[2], m[0].length);\n  if (!len) return null;\n\n  this.__schema__     = m[2];\n  this.__index__      = m.index + m[1].length;\n  this.__last_index__ = m.index + m[0].length + len;\n\n  return createMatch(this, 0);\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n *   are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n  list = Array.isArray(list) ? list : [ list ];\n\n  if (!keepOld) {\n    this.__tlds__ = list.slice();\n    this.__tlds_replaced__ = true;\n    compile(this);\n    return this;\n  }\n\n  this.__tlds__ = this.__tlds__.concat(list)\n                                  .sort()\n                                  .filter(function (el, idx, arr) {\n                                    return el !== arr[idx - 1];\n                                  })\n                                  .reverse();\n\n  compile(this);\n  return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n  // Do minimal possible changes by default. Need to collect feedback prior\n  // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n  if (!match.schema) { match.url = 'http://' + match.url; }\n\n  if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n    match.url = 'mailto:' + match.url;\n  }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         false,        // Enable HTML tags in source\n    xhtmlOut:     false,        // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   100            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {},\n    block: {},\n    inline: {}\n  }\n};\n","// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         false,        // Enable HTML tags in source\n    xhtmlOut:     false,        // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   20            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline',\n        'text_join'\n      ]\n    },\n\n    block: {\n      rules: [\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'fragments_join'\n      ]\n    }\n  }\n};\n","// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         true,         // Enable HTML tags in source\n    xhtmlOut:     true,         // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   20            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline',\n        'text_join'\n      ]\n    },\n\n    block: {\n      rules: [\n        'blockquote',\n        'code',\n        'fence',\n        'heading',\n        'hr',\n        'html_block',\n        'lheading',\n        'list',\n        'reference',\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'autolink',\n        'backticks',\n        'emphasis',\n        'entity',\n        'escape',\n        'html_inline',\n        'image',\n        'link',\n        'newline',\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'emphasis',\n        'fragments_join'\n      ]\n    }\n  }\n};\n","// Main parser class\n\n'use strict';\n\n\nvar utils        = require('./common/utils');\nvar helpers      = require('./helpers');\nvar Renderer     = require('./renderer');\nvar ParserCore   = require('./parser_core');\nvar ParserBlock  = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt    = require('linkify-it');\nvar mdurl        = require('mdurl');\nvar punycode     = require('punycode');\n\n\nvar config = {\n  default: require('./presets/default'),\n  zero: require('./presets/zero'),\n  commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n  // url should be normalized at this point, and existing entities are decoded\n  var str = url.trim().toLowerCase();\n\n  return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n  var parsed = mdurl.parse(url, true);\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toASCII(parsed.hostname);\n      } catch (er) { /**/ }\n    }\n  }\n\n  return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n  var parsed = mdurl.parse(url, true);\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toUnicode(parsed.hostname);\n      } catch (er) { /**/ }\n    }\n  }\n\n  // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n  return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n *     md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n *   configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n *   similar to GFM, used when no preset name given. Enables all available rules,\n *   but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n *   all rules disabled. Useful to quickly setup your config via `.enable()`.\n *   For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n *   That's not safe! You may need external sanitizer to protect output from XSS.\n *   It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n *   (`<br />`). This is needed only for full CommonMark compatibility. In real\n *   world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n *   Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__  - `false`. Set `true` to enable [some language-neutral\n *   replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n *   quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n *   pairs, when typographer enabled and smartquotes on. For example, you can\n *   use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n *   `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n *   Highlighter `function (str, lang)` should return escaped HTML. It can also\n *   return empty string if the source was not changed and should be escaped\n *   externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n *   html: true,\n *   linkify: true,\n *   typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n *       } catch (__) {}\n *     }\n *\n *     return ''; // use external default escaping\n *   }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return '<pre class=\"hljs\"><code>' +\n *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n *                '</code></pre>';\n *       } catch (__) {}\n *     }\n *\n *     return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n *   }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n  if (!(this instanceof MarkdownIt)) {\n    return new MarkdownIt(presetName, options);\n  }\n\n  if (!options) {\n    if (!utils.isString(presetName)) {\n      options = presetName || {};\n      presetName = 'default';\n    }\n  }\n\n  /**\n   * MarkdownIt#inline -> ParserInline\n   *\n   * Instance of [[ParserInline]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.inline = new ParserInline();\n\n  /**\n   * MarkdownIt#block -> ParserBlock\n   *\n   * Instance of [[ParserBlock]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.block = new ParserBlock();\n\n  /**\n   * MarkdownIt#core -> Core\n   *\n   * Instance of [[Core]] chain executor. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.core = new ParserCore();\n\n  /**\n   * MarkdownIt#renderer -> Renderer\n   *\n   * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n   * rules for new token types, generated by plugins.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * function myToken(tokens, idx, options, env, self) {\n   *   //...\n   *   return result;\n   * };\n   *\n   * md.renderer.rules['my_token'] = myToken\n   * ```\n   *\n   * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n   **/\n  this.renderer = new Renderer();\n\n  /**\n   * MarkdownIt#linkify -> LinkifyIt\n   *\n   * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n   * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n   * rule.\n   **/\n  this.linkify = new LinkifyIt();\n\n  /**\n   * MarkdownIt#validateLink(url) -> Boolean\n   *\n   * Link validation function. CommonMark allows too much in links. By default\n   * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n   * except some embedded image types.\n   *\n   * You can change this behaviour:\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   * // enable everything\n   * md.validateLink = function () { return true; }\n   * ```\n   **/\n  this.validateLink = validateLink;\n\n  /**\n   * MarkdownIt#normalizeLink(url) -> String\n   *\n   * Function used to encode link url to a machine-readable format,\n   * which includes url-encoding, punycode, etc.\n   **/\n  this.normalizeLink = normalizeLink;\n\n  /**\n   * MarkdownIt#normalizeLinkText(url) -> String\n   *\n   * Function used to decode link url to a human-readable format`\n   **/\n  this.normalizeLinkText = normalizeLinkText;\n\n\n  // Expose utils & helpers for easy acces from plugins\n\n  /**\n   * MarkdownIt#utils -> utils\n   *\n   * Assorted utility functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n   **/\n  this.utils = utils;\n\n  /**\n   * MarkdownIt#helpers -> helpers\n   *\n   * Link components parser functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n   **/\n  this.helpers = utils.assign({}, helpers);\n\n\n  this.options = {};\n  this.configure(presetName);\n\n  if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .set({ html: true, breaks: true })\n *             .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n  utils.assign(this.options, options);\n  return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n  var self = this, presetName;\n\n  if (utils.isString(presets)) {\n    presetName = presets;\n    presets = config[presetName];\n    if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n  }\n\n  if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n  if (presets.options) { self.set(presets.options); }\n\n  if (presets.components) {\n    Object.keys(presets.components).forEach(function (name) {\n      if (presets.components[name].rules) {\n        self[name].ruler.enableOnly(presets.components[name].rules);\n      }\n      if (presets.components[name].rules2) {\n        self[name].ruler2.enableOnly(presets.components[name].rules2);\n      }\n    });\n  }\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .enable(['sub', 'sup'])\n *             .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n  var result = [];\n\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  [ 'core', 'block', 'inline' ].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.enable(list, true));\n  }, this);\n\n  result = result.concat(this.inline.ruler2.enable(list, true));\n\n  var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n  }\n\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n  var result = [];\n\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  [ 'core', 'block', 'inline' ].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.disable(list, true));\n  }, this);\n\n  result = result.concat(this.inline.ruler2.disable(list, true));\n\n  var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n  }\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n *             .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n *               tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n *             });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n  var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n  plugin.apply(plugin, args);\n  return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n  if (typeof src !== 'string') {\n    throw new Error('Input data should be a String');\n  }\n\n  var state = new this.core.State(src, this, env);\n\n  this.core.process(state);\n\n  return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n  env = env || {};\n\n  return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n  var state = new this.core.State(src, this, env);\n\n  state.inlineMode = true;\n  this.core.process(state);\n\n  return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n  env = env || {};\n\n  return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n","'use strict';\n\n\nmodule.exports = require('./lib/');\n","import MarkdownIt, {} from \"markdown-it\";\nimport { computed, defineComponent, h, ref, } from \"vue\";\nconst VueMarkdown = defineComponent({\n    name: \"VueMarkdown\",\n    props: {\n        source: {\n            type: String,\n            required: true,\n        },\n        options: {\n            type: Object,\n            required: false,\n        },\n        plugins: {\n            type: Array,\n            required: false,\n        },\n    },\n    setup(props) {\n        const md = ref(new MarkdownIt(props.options ?? {}));\n        for (const plugin of props.plugins ?? []) {\n            md.value.use(plugin);\n        }\n        const content = computed(() => md.value.render(props.source));\n        return () => h(\"div\", { innerHTML: content.value });\n    },\n});\nexport default VueMarkdown;\n//# sourceMappingURL=VueMarkdown.js.map","<!-- eslint-disable vue/no-v-html -->\n<template>\n  <section v-if=\"!$params.iframe\" class=\"bg-bgr-200 pb-12 pt-4\">\n    <div class=\"container-fluid-md grid gap-2 md:grid-cols-2 md:gap-8\">\n      <article\n        v-for=\"(column, i) in props.why\"\n        :key=\"column.key\"\n        :class=\"'article' + i\"\n      >\n        <WebccHeading\n          :title=\"column.title\"\n          :level=\"4\"\n          :size=\"'2xl'\"\n        ></WebccHeading>\n\n        <vue-markdown\n          class=\"mt-4 text-base\"\n          :source=\"column.description\"\n          @click=\"handleClick\"\n        />\n      </article>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport VueMarkdown from 'vue-markdown-render'\n\nconst props = defineProps<{\n  why: USPColumn[]\n}>()\n\nconst emit = defineEmits<{ 'click:link': [a: HTMLAnchorElement] }>()\n\nfunction handleClick(event: Event) {\n  const targetA = findTargetA(event)\n\n  if (!targetA?.getAttribute('href')) {\n    return\n  }\n\n  emit('click:link', targetA)\n}\n</script>\n","<template>\n  <form\n    v-if=\"\n      confData.siteSettings?.includes('newsletter') &&\n      confData.signupEnabled &&\n      !$params.iframe\n    \"\n    v-track:impression=\"{\n      event: `newsletter:bannerDisplayed`,\n      args: [route.path],\n    }\"\n    :action=\"newsletterAction\"\n    method=\"POST\"\n    class=\"bg-thm\"\n  >\n    <div\n      class=\"mx-auto h-auto max-w-[1920px] justify-center md:flex md:h-72 md:flex-row\"\n    >\n      <div class=\"h-24 md:h-full md:w-1/2\">\n        <NuxtImg\n          loading=\"lazy\"\n          format=\"webp\"\n          src=\"/images/footer-newsletter-signup.png\"\n          alt=\"\"\n          class=\"h-full w-full object-cover\"\n        />\n      </div>\n      <div\n        class=\"mx-auto flex max-w-xl flex-col px-2 py-4 text-center md:ml-0 md:w-1/2 md:px-4 md:py-8\"\n      >\n        <div class=\"mb-6 flex w-full flex-row items-center\">\n          <div\n            class=\"hidden h-[1/2] w-full flex-1 border-b border-thm-contrast sm:block md:hidden lg:block\"\n          ></div>\n          <div\n            class=\"h-auto w-max flex-auto bg-thm text-xl text-thm-contrast sm:mx-2 md:text-2xl\"\n          >\n            {{ $t(`${trPrefix}title`) }}\n          </div>\n          <div\n            class=\"hidden h-[1/2] w-full flex-1 border-b border-thm-contrast sm:block md:hidden lg:block\"\n          ></div>\n        </div>\n        <span class=\"mb-6 text-thm-contrast\">{{ $t(`${trPrefix}text`) }}</span>\n        <div class=\"flex flex-col gap-2 md:flex-row\">\n          <WebccInput\n            v-model=\"emailaddress\"\n            :label=\"`${trPrefix}emailPlaceholder`\"\n            name=\"email\"\n            type=\"email\"\n            classes=\"md:w-2/3\"\n          />\n          <WebccButton\n            variant=\"cta\"\n            size=\"lg\"\n            class=\"md:w-1/3\"\n            @click=\"handleClick\"\n          >\n            <span>{{ $t(`${trPrefix}cta`) }}</span>\n          </WebccButton>\n        </div>\n      </div>\n    </div>\n  </form>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.site.FooterNewsletterSignup.'\n\nconst confData = useConfdata()\nconst route = useRoute()\nconst tracking = useTracking()\nconst { buildNewsletterUrl } = useURLs()\n\nconst emailaddress = ref('')\n\nconst handleClick = () => {\n  tracking.handlers?.newsletter.bannerSubscribe(route.path)\n}\n\nconst newsletterAction = computed(() => {\n  return buildNewsletterUrl()\n})\n</script>\n","<template>\n  <main\n    id=\"page-search\"\n    class=\"bg-bgr shadow-inner\"\n    :data-filters-count=\"Object.keys(state).length\"\n  >\n    <!-- <pre>{{ JSON.stringify(toValue(state), null, 2) }}</pre>\n    <pre>SearchURL: {{ searchUrl?.toString() }}</pre> -->\n    <section class=\"bg-hlt-light text-hlt\">\n      <!-- TODO: Delete \"Redesigned SRP\" bar before release -->\n      <p class=\"container-fluid-lg flex py-3 justify-center\">\n        <span>Redesign</span>\n        <span v-if=\"variant\">, variant {{ variant.name }}</span>\n      </p>\n    </section>\n\n    <header class=\"border-b\">\n      <div class=\"container-fluid-lg py-6\">\n        <RedesignSearchBar />\n      </div>\n    </header>\n\n    <div\n      v-if=\"$params.iframe\"\n      class=\"container-fluid-lg flex flex-row items-center justify-between\"\n    >\n      <SearchBreadcrumb :geo=\"geo\" />\n      <BookmarkLink />\n    </div>\n\n    <section class=\"container-fluid-lg flex gap-6 py-6\">\n      <RedesignFilter v-model=\"state\" class=\"hidden md:block\" />\n\n      <div class=\"w-full\">\n        <header class=\"flex flex-col-reverse md:flex-col\">\n          <section>\n            <SearchResultsHeader :total=\"total\" />\n            <SearchResultsHeaderCount :total=\"total\" />\n          </section>\n          <section\n            class=\"flex items-center gap-2 mt-4 justify-start md:justify-end lg:justify-between\"\n          >\n            <button\n              class=\"flex items-center justify-between rounded-full border border-bgr-300 hover:bg-bgr-100 transition focus:bg-bgr-100 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-thm-hover h-11 px-4 md:hidden text-sm\"\n            >\n              <WebccIcon name=\"searchpage/settings\" class=\"h-4 w-4 mr-2\" />\n              <span>\n                {{ $t('www.components.views.search.area.filters') }}\n              </span>\n            </button>\n            <SearchResultLayoutSwitch v-model=\"layout\" class=\"hidden lg:flex\" />\n            <RedesignSearchSorting\n              v-model=\"state.sorting\"\n              rounded\n              mode=\"right\"\n              class=\"shrink min-w-0\"\n            />\n          </section>\n        </header>\n\n        <main\n          class=\"sticky flex flex-col top-4 w-full mt-4 gap-3\"\n          data-id=\"search-result\"\n          :aria-busy=\"searchResults.isLoading\"\n        >\n          <template v-if=\"searchResults.isLoading || searchResults.total\">\n            <RedesignSearchAreaResults\n              :items=\"searchResults.items\"\n              :loading=\"searchResults.isLoading || searchResults.isFetching\"\n              :layout=\"layout\"\n              :show-trip-tag=\"!!state.dates?.duration\"\n            />\n            <RedesignSearchPagination\n              v-if=\"!searchResults.isLoading\"\n              v-model=\"searchResults.currentPage\"\n              :total=\"searchResults.totalPages\"\n            />\n          </template>\n          <template v-else>\n            <RedesignSearchAreaNoResults v-model=\"state\" />\n          </template>\n        </main>\n      </div>\n    </section>\n\n    <SearchRatingBox :key=\"filtersKey\" />\n    <SearchTeaser v-if=\"!$params.iframe\">\n      <RedesignSearchBreadcrumb :items=\"breadcrumbs\" />\n      <template #searchteaser>\n        <SearchObjectTeasers\n          v-if=\"objectTeasersEnabled\"\n          :key=\"destinationFilterKey\"\n          :show=\"objectTeasersVisible\"\n          :destination=\"destination\"\n        />\n      </template>\n      <template #contentassets>\n        <SearchContentAssets\n          v-if=\"contentAssetsEnabled\"\n          :key=\"destinationFilterKey\"\n          :filter=\"destinationFilter\"\n        />\n      </template>\n    </SearchTeaser>\n    <USPCards :why=\"additionalBody.USPCards.cards\" />\n    <USPWhy\n      :why=\"[additionalBody.USPColumns.left, additionalBody.USPColumns.right]\"\n    />\n    <FooterNewsletterSignup />\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst LAYOUT_DEFAULT = 'list'\n\nconst OBJECT_TEASERS_MIN_RESULTS_TO_DISPLAY = 10\nconst OBJECT_TEASERS_FILTERS_TO_DISPLAY = new Set([\n  'sea',\n  'pool',\n  'pets',\n  'skiing',\n  'familyfriendly',\n])\nconst CONTENT_ASSETS_FILTERS_TO_DISPLAY = new Set([\n  'sea',\n  'pool',\n  'pets',\n  'familyfriendly',\n])\n\nconst confData = useConfdata()\nconst search = useSearch()\nconst ab = useAB()\n\nconst { variant } = useFeature('srp-redesign')\nconst isContentAssetsEnabled = useFlag('content-assets')\n\nconst searchState = useRouteSearchState()\n\nif (!searchState.searchState.value) {\n  throw createError({\n    statusCode: 404,\n    statusMessage: 'Search state is not defined',\n  })\n}\n\nconst state = defineSearchState(searchState.searchState.value)\nconst debouncedState = refDebounced(state, 1000)\nconst searchUrl = useSearchGeneratedUrl(debouncedState)\nconst searchResults = useSearchResults(debouncedState)\nconst breadcrumbs = useSearchDestinationBreadcrumbs()\n\nconst layout = ref<SearchResultLayout>(LAYOUT_DEFAULT)\n\nconst geo = computed(() => search.geoCurrent)\nconst total = computed(() => searchResults.total ?? 0)\nconst additionalBody = computed(() => confData.additionalBody as SearchPageBody)\nconst destination = computed(() => confData.destination)\nconst destinationFilter = computed(() => destination.value?.filters?.[0].key)\nconst destinationFilterKey = computed(() => destination.value.urlPath)\nconst route = useRoute()\n\n// const { page: currentPage } = toRefs(state)\n\nconst filtersKey = computed(() => JSON.stringify(state.value))\nconst objectTeasersEnabled = computed(() =>\n  Boolean(\n    ab.isActive('objectteaser') &&\n      route.path && // handeleing reactivity, see https://jira.migros.net/browse/IHGWEBCC-1382\n      confData.isCanonicalPage(useRequestURL()) &&\n      (!destinationFilter.value ||\n        OBJECT_TEASERS_FILTERS_TO_DISPLAY.has(destinationFilter.value)),\n  ),\n)\nconst objectTeasersVisible = computed(\n  () =>\n    objectTeasersEnabled.value &&\n    total.value >= OBJECT_TEASERS_MIN_RESULTS_TO_DISPLAY,\n)\n\nconst contentAssetsEnabled = computed(() =>\n  Boolean(\n    isContentAssetsEnabled.value &&\n      destination.value?.countryCode &&\n      (!destinationFilter.value ||\n        CONTENT_ASSETS_FILTERS_TO_DISPLAY.has(destinationFilter.value)),\n  ),\n)\n\nwatch(searchUrl, (url, previousUrl) => {\n  if (!url || (previousUrl && url.toString() === previousUrl.toString())) return\n  navigateTo(getUrlFullPath(url))\n})\n\nonMounted(() => {\n  window.onbeforeunload = function () {\n    // Before a page-reload the browser normally memorises the scroll-position, but on the reloaded searchpage this may have unwanted sideeffects cause of dynamic content.\n    // So it is necessary to set the scroll-position to 0 before unload (which leads to position top on reload)\n    window.scrollTo(0, 0)\n  }\n})\n</script>\n","<template>\n  <section class=\"container-fluid-lg pt-4 md:pt-6\">\n    <span v-if=\"title\" class=\"m-0 text-3xl font-normal text-txt md:text-4xl\">{{\n      title\n    }}</span>\n    <span v-else class=\"m-0 text-3xl font-normal text-txt md:text-4xl\">{{\n      $t(`${trPrefix}heading`)\n    }}</span>\n    <WebccHeading\n      v-if=\"subTitles.length\"\n      :level=\"1\"\n      color=\"txt\"\n      size=\"xl\"\n      space=\"mt-3\"\n      class=\"font-normal\"\n    >\n      <div class=\"flex flex-col items-start justify-center\">\n        {{ subTitles[0] }}\n        <br />\n        <span v-if=\"subTitles.length > 1\" class=\"text-lg uppercase\">{{\n          subTitles[1]\n        }}</span>\n        <br />\n        <span v-if=\"subTitles.length > 2\" class=\"text-base\">{{\n          subTitles[2]\n        }}</span>\n      </div>\n    </WebccHeading>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.area.'\n\nconst params = useParams()\nconst search = useSearch()\nconst confData = useConfdata()\n\nconst destinationName = computed(() => getDestinationName(confData.destination))\nconst filterName = computed(() => confData.destination.filters?.[0].name)\nconst heading = computed(() => params.all.heading)\nconst name = computed(() => params.all.name)\nconst h1 = computed(() =>\n  (confData.additionalBody as SearchPageBody).h1.map((line) =>\n    replacePlaceholders(line, { amount: search.total }),\n  ),\n)\nconst title = computed(\n  () => name.value || destinationName.value || filterName.value,\n)\nconst subTitles = computed(() => (heading.value ? [heading.value] : h1.value))\n</script>\n","<template>\n  <section\n    v-if=\"useConfdata().signupEnabled\"\n    class=\"flex w-full flex-wrap items-center justify-center gap-2 rounded bg-thm p-2 text-txt-weakest shadow-md sm:col-span-2 sm:gap-4 md:gap-6 md:text-lg\"\n  >\n    <div class=\"flex flex-row items-center justify-center gap-2\">\n      <WebccIcon\n        name=\"searchpage/newsletter\"\n        filled\n        class=\"h-12 w-12 md:h-16 md:w-16\"\n      />\n      <span class=\"text-center\"\n        ><span>{{ $t(`${trPrefix}text`) }}</span></span\n      >\n    </div>\n    <WebccButton\n      size=\"md\"\n      class=\"w-52\"\n      variant=\"theme\"\n      framed\n      @click=\"toNewsletter\"\n    >\n      <span\n        ><span>{{ $t(`${trPrefix}cta`) }}</span></span\n      >\n    </WebccButton>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.NewsletterSignup.'\n\nfunction toNewsletter() {\n  navigateTo(`${useConfdata().languagePrefix}/newsletter?type=Disruptor`)\n}\n</script>\n","<template>\n  <section\n    v-if=\"id && url\"\n    class=\"mt-8 flex flex-col overflow-hidden rounded shadow\"\n  >\n    <h5 class=\"bg-thm px-4 py-2 text-lg font-medium text-thm-contrast\">\n      {{ $t(`${trPrefix}userRating`) }}\n    </h5>\n\n    <main\n      class=\"flex max-w-xl items-center justify-center space-x-2 self-center py-8\"\n    >\n      <WebccLink anchor target=\"_blank\" :to=\"url\">\n        <img\n          :src=\"`https://emailsignature.trustpilot.com/newsletter/${resource.locale}/1/${id}/text1@2x.png`\"\n          alt=\"Human score\"\n        />\n      </WebccLink>\n\n      <WebccLink anchor target=\"_blank\" :to=\"url\">\n        <img\n          :src=\"`https://emailsignature.trustpilot.com/newsletter/${resource.locale}/1/${id}/stars@2x.png`\"\n          alt=\"Trustpilot Stars\"\n        />\n      </WebccLink>\n\n      <WebccLink anchor target=\"_blank\" :to=\"url\">\n        <img\n          :src=\"`https://emailsignature.trustpilot.com/newsletter/${resource.locale}/1/${id}/text2@2x.png`\"\n          alt=\"number of reviews\"\n        />\n      </WebccLink>\n\n      <WebccLink anchor target=\"_blank\" :to=\"url\">\n        <img\n          src=\"https://emailsignature.trustpilot.com/brand/n/1/logo.png\"\n          alt=\"Trustpilot Logo\"\n          class=\"pb-1\"\n        />\n      </WebccLink>\n    </main>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst linkMap: { [key: string]: { [key: string]: string } } = {\n  'www.interhome.ch': {\n    default: 'https://ch.trustpilot.com/review/www.interhome.ch',\n    fr: 'https://fr.trustpilot.com/review/www.interhome.ch',\n    it: 'https://it.trustpilot.com/review/www.interhome.ch',\n    en: 'https://www.trustpilot.com/review/www.interhome.ch',\n  },\n  'www.interhome.at': {\n    default: 'https://at.trustpilot.com/review/www.interhome.at',\n  },\n  'www.interhome.de': {\n    default: 'https://de.trustpilot.com/review/www.interhome.de',\n  },\n  'www.interhome.fr': {\n    default: 'https://fr.trustpilot.com/review/www.interhome.fr',\n  },\n  'www.interhome.it': {\n    default: 'https://it.trustpilot.com/review/www.interhome.it',\n  },\n  'www.interhome.pl': {\n    default: 'https://pl.trustpilot.com/review/www.interhome.pl',\n  },\n  'www.interhome.nl': {\n    default: 'https://nl.trustpilot.com/review/www.interhome.nl',\n  },\n  'www.interhome.be': {\n    default: 'https://nl-be.trustpilot.com/review/www.interhome.be',\n    fr: 'https://fr-be.trustpilot.com/review/www.interhome.be',\n  },\n  'www.interhome.cz': {\n    default: 'https://cz.trustpilot.com/review/www.interhome.cz',\n  },\n  'www.interhome.es': {\n    default: 'https://es.trustpilot.com/review/www.interhome.es',\n  },\n}\n// TODO: Move to ConfService\nconst tpIDs: { [key: string]: string } = {\n  'www.interhome.de': '530720200000640005784347',\n  'www.interhome.ch': '4bdd5f610000640005061b46',\n  'www.interhome.it': '530720540000640005784349',\n  'www.interhome.cz': '530721880000640005784350',\n  'www.interhome.be': '53072083000064000578434c',\n  'www.interhome.nl': '53071f370000640005784343',\n  'www.interhome.at': '505f75f500006400051be1ad',\n  'www.interhome.fr': '4be696b6000064000509791d',\n  'www.interhome.pl': '5112366c000064000521f2b3',\n  'www.interhome.es': '530720fd000064000578434e',\n}\n\nconst trPrefix = 'www.components.views.details.TrustPilot.'\n\nconst props = defineProps<{ domain: string; resource: Site }>()\n\nconst url = computed(() => {\n  const urls = linkMap[props.domain] || {}\n  if (Object.keys(urls).includes(props.resource.language)) {\n    return urls[props.resource.language]\n  }\n  return urls.default\n})\n\nconst id = computed(() => {\n  return tpIDs[props.domain]\n})\n</script>\n","<template>\n  <div\n    :class=\"[\n      {\n        'border-txt-weak bg-bgr-100': onFocus,\n        'rounded-full': round,\n        rounded: !round,\n        border,\n        shadow,\n      },\n      [sizeclasses],\n    ]\"\n    class=\"relative rounded border-txt-weaker text-txt transition-all duration-200 focus:border-txt-weak\"\n    @mouseover=\"labelHover = true\"\n    @mouseleave=\"labelHover = false\"\n  >\n    <select\n      v-bind=\"$attrs\"\n      :id=\"name\"\n      :name=\"name\"\n      :value=\"modelValue\"\n      class=\"form-select h-full w-full border-none py-0 leading-5 outline-none ring-0 focus:bg-bgr-100 focus:outline-none focus:ring-0\"\n      :class=\"{\n        'bg-none': checkmarks && modelValue,\n        'pt-4': label !== '',\n        'px-3': size !== 'sm',\n        'pl-8 pr-6': icon && !label,\n        'rounded-full': round,\n        rounded: !round,\n        'text-xs': size === 'sm',\n      }\"\n      @change=\"\n        $emit('update:modelValue', ($event.target as HTMLSelectElement).value)\n      \"\n      @focus=\"\n        () => {\n          onFocus = true\n          delayedResize()\n        }\n      \"\n      @blur=\"\n        () => {\n          onFocus = false\n          delayedResize()\n        }\n      \"\n    >\n      <option\n        v-for=\"(o, i) in options\"\n        :key=\"i\"\n        :value=\"valueOf(o)\"\n        :selected=\"valueOf(o) === modelValue\"\n      >\n        {{ o.label !== undefined ? o.label : o }}\n      </option>\n    </select>\n    <label\n      v-if=\"label\"\n      ref=\"input\"\n      v-tooltip=\"{\n        content: $t(label as TranslationKey),\n        triggers: [],\n        shown: showTooltip && labelHover,\n      }\"\n      :for=\"name\"\n      class=\"pointer-events-none absolute left-0 w-full overflow-hidden text-ellipsis whitespace-nowrap pl-3 pr-8 font-medium text-txt-weak transition-all duration-300 hover:bg-thm-hover\"\n      :class=\"labelSizeclasses\"\n    >\n      <WebccIcon\n        v-if=\"icon\"\n        :name=\"icon\"\n        class=\"pointer-events-none absolute top-0 z-1 h-full w-4 text-txt opacity-60\"\n        aria-hidden=\"true\"\n      />\n      <span ref=\"labelText\" :class=\"{ 'pl-6': icon }\">\n        <span>{{ $t(label as TranslationKey) }}</span>\n        <sup v-if=\"required\">*</sup>\n      </span>\n    </label>\n    <WebccIcon\n      v-else-if=\"icon\"\n      :name=\"icon\"\n      class=\"pointer-events-none absolute left-2 top-0 z-1 h-full w-4 text-thm opacity-60\"\n      aria-hidden=\"true\"\n    />\n    <WebccIcon\n      v-if=\"checkmarks && modelValue && valid === true\"\n      name=\"site/tick\"\n      class=\"absolute right-5 top-1/2 h-4 w-4 -translate-y-1/2 text-suc\"\n      fill=\"currentColor\"\n      stroke-color=\"none\"\n      stroke-width=\"2\"\n    />\n    <WebccIcon\n      v-if=\"checkmarks && modelValue && valid === false\"\n      name=\"site/cross\"\n      class=\"absolute right-5 top-1/2 h-4 w-4 -translate-y-1/2 text-err\"\n      fill=\"none\"\n      stroke-color=\"currentColor\"\n      stroke-width=\"2\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\ntype OptionValue = string | number\ntype Option = { label: string; value: OptionValue }\n\ninterface Props {\n  modelValue?: string | string[] | number | number[]\n  options: Option[]\n  required?: boolean\n  checkmarks?: boolean\n  valid?: boolean\n  round?: boolean\n  border?: boolean\n  shadow?: boolean\n  name?: string\n  type?: string\n  icon?: string\n  label?: string\n  size?: 'md' | 'sm'\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  modelValue: '',\n  name: '',\n  type: '',\n  icon: '',\n  label: '',\n  border: true,\n  shadow: false,\n  size: 'md',\n})\n\ndefineEmits<{ (e: 'update:modelValue', value: string): void }>()\n\nconst onFocus = ref(false)\nconst labelHover = ref(false)\nconst labelWidth = ref(-1)\nconst inputWidth = ref(-1)\n\nconst labelText: Ref<HTMLSpanElement | null> = ref(null)\nconst input: Ref<HTMLInputElement | null> = ref(null)\n\nconst sizeclasses = computed(() => {\n  switch (props.size) {\n    case 'md':\n      return props.label === '' ? 'h-11 text-base' : 'h-14 text-base'\n    case 'sm':\n      return props.label === '' ? 'h-8 w-fit text-xs' : 'h-12 w-fit text-xs'\n    default:\n      return ''\n  }\n})\n\nconst labelSizeclasses = computed(() => {\n  if (\n    onFocus.value ||\n    props.modelValue ||\n    props.options.find((o) => o.value === props.modelValue)\n  ) {\n    return 'top-2 translate-y-0 text-xs'\n  }\n  return 'top-1/2 -translate-y-1/2 text-sm'\n})\n\nconst showTooltip = computed(() => {\n  return labelWidth.value > inputWidth.value - 44\n})\n\nonMounted(() => {\n  handleResize()\n  window.addEventListener('resize', handleResize)\n})\n\nonBeforeUnmount(() => {\n  window.removeEventListener('resize', handleResize)\n})\n\nfunction handleResize() {\n  if (labelText.value && input.value) {\n    labelWidth.value = labelText.value.offsetWidth\n    inputWidth.value = input.value.offsetWidth\n  }\n}\n\nfunction delayedResize() {\n  setTimeout(() => {\n    if (labelText.value && input.value) {\n      labelWidth.value = labelText.value.offsetWidth\n      inputWidth.value = input.value.offsetWidth\n    }\n  }, 310)\n}\n\nfunction valueOf(option: Option | OptionValue): OptionValue {\n  return typeof option === 'object' && 'value' in option ? option.value : option\n}\n</script>\n","<template>\n  <div>\n    <div class=\"relative inline-block text-left md:hidden\">\n      <button\n        type=\"button\"\n        class=\"flex items-center rounded-full border-0 border-bgr-200 bg-bgr px-2 py-2 text-xs shadow ring-thm hover:border-transparent hover:ring-2 focus:border-transparent focus:outline-none focus:ring-2\"\n        aria-expanded=\"true\"\n        aria-haspopup=\"true\"\n        @click.stop=\"useToggler().toggle(TOGGLE_KEY)\"\n      >\n        <WebccIcon\n          name=\"searchpage/sorting\"\n          class=\"mr-2 h-4 w-4 shrink-0 text-thm\"\n        />\n        <div v-if=\"modelValue\" class=\"mr-auto\">{{ options[modelValue] }}</div>\n        <div v-else class=\"mr-auto text-txt-weak\">{{ options.default }}</div>\n        <svg\n          class=\"-my-1 -mr-0.5 ml-1 h-5 w-5 text-thm\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 20 20\"\n          fill=\"currentColor\"\n          aria-hidden=\"true\"\n        >\n          <path\n            d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"\n          ></path>\n        </svg>\n      </button>\n      <transition\n        enter-active-class=\"transition ease-out duration-100\"\n        enter-class=\"transform opacity-0 scale-0\"\n        enter-to-class=\"transform opacity-100 scale-100\"\n        leave-active-class=\"transition ease-in duration-75\"\n        leave-class=\"transform opacity-100 scale-100\"\n        leave-to-class=\"transform opacity-0 scale-0\"\n      >\n        <div\n          v-if=\"useToggler().toggles(TOGGLE_KEY).value\"\n          class=\"absolute left-0 z-10 mt-1 origin-top-left rounded-md bg-bgr shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none\"\n          role=\"menu\"\n          aria-orientation=\"vertical\"\n          aria-labelledby=\"menu-button\"\n          tabindex=\"-1\"\n        >\n          <div class=\"py-1\" role=\"none\">\n            <div class=\"px-4 py-1 text-left text-xs text-txt-weak\">\n              {{ options.default }}\n            </div>\n            <button\n              v-for=\"{ value, label } in optionsMobile\"\n              :key=\"value\"\n              type=\"button\"\n              role=\"menuitem\"\n              class=\"flex w-full items-center justify-start px-4 py-1 text-left text-sm text-txt hover:bg-bgr-100 hover:text-txt-stronger focus:bg-bgr-100 focus:text-txt-stronger focus:outline-none\"\n              @click=\"model = value as SortOption\"\n            >\n              <div class=\"mr-auto whitespace-nowrap\">{{ label }}</div>\n            </button>\n          </div>\n        </div>\n      </transition>\n    </div>\n    <div class=\"hidden md:block\">\n      <WebccSelect\n        :key=\"model\"\n        v-model=\"model\"\n        :border=\"false\"\n        round\n        shadow\n        class=\"rounded-full\"\n        size=\"sm\"\n        name=\"sorting\"\n        :options=\"optionsDesktop\"\n      />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst TOGGLE_KEY = 'sorting'\nconst DEFAULT_VALUE = 'default'\n\ntype SortOption = SortingValue | typeof DEFAULT_VALUE\n\nconst props = defineProps<{ modelValue?: SortingValue }>()\n\nconst emit = defineEmits<{ 'update:modelValue': [SortingValue?] }>()\n\nconst trPrefix = 'www.components.views.search.area.'\n\nconst { t } = useI18n()\n\nuseToggler().register(TOGGLE_KEY)\n\nconst options = computed<{ [K in SortOption]?: string }>(() => ({\n  [DEFAULT_VALUE]: t(`${trPrefix}sorting.heading`),\n  recommendation: t(`${trPrefix}sorting.recommendation`),\n  '-lastbookday': t(`${trPrefix}sorting.bestsellers`),\n  age: t(`${trPrefix}sorting.age`),\n  '-averagerating': t(`${trPrefix}sorting.rating`),\n  price: t(`${trPrefix}sorting.priceAsc`),\n  '-price': t(`${trPrefix}sorting.priceDesc`),\n  pax: t(`${trPrefix}sorting.paxAsc`),\n  '-pax': t(`${trPrefix}sorting.paxDesc`),\n}))\n\nconst optionsList = computed(() =>\n  Object.entries(options.value).map(([value, label]) => ({ value, label })),\n)\nconst optionsMobile = computed(() => optionsList.value.slice(1))\nconst optionsDesktop = computed(() =>\n  optionsList.value.slice(props.modelValue ? 1 : 0),\n)\n\nconst model = computed({\n  get() {\n    return props.modelValue ?? DEFAULT_VALUE\n  },\n  set(value: SortOption) {\n    emit('update:modelValue', value === DEFAULT_VALUE ? undefined : value)\n    useToggler().toggle(TOGGLE_KEY, { state: false })\n  },\n})\n</script>\n","<template>\n  <div class=\"relative inline-block w-full text-left\">\n    <button\n      type=\"button\"\n      class=\"inline-flex w-full items-center justify-start rounded border-0 border-bgr-300 bg-bgr px-4 py-1.5 text-left text-sm font-medium text-txt shadow hover:bg-bgr-100 focus:outline-none focus:ring-2 focus:ring-thm active:bg-bgr-50\"\n      aria-expanded=\"true\"\n      aria-haspopup=\"true\"\n      @click.stop=\"useToggler().toggle(filter, { closeOthers: true })\"\n    >\n      <WebccIcon\n        v-if=\"iconPath?.length\"\n        :name=\"iconPath\"\n        class=\"mr-2 h-4 w-4 shrink-0\"\n      />\n      <div v-if=\"label\" class=\"mr-auto\">{{ label }}</div>\n      <div v-else class=\"mr-auto text-txt-weak\">\n        <span>{{ $t(`${trPrefix}${filter}` as TranslationKey) }}</span>\n      </div>\n\n      <svg\n        class=\"-mr-1 ml-2 h-5 w-5\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 20 20\"\n        fill=\"currentColor\"\n        aria-hidden=\"true\"\n      >\n        <path\n          d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"\n        ></path>\n      </svg>\n    </button>\n\n    <transition\n      enter-active-class=\"transition ease-out duration-100\"\n      enter-class=\"transform opacity-0 scale-0\"\n      enter-to-class=\"transform opacity-100 scale-100\"\n      leave-active-class=\"transition ease-in duration-75\"\n      leave-class=\"transform opacity-100 scale-100\"\n      leave-to-class=\"transform opacity-0 scale-0\"\n    >\n      <div\n        v-if=\"useToggler().toggles(filter).value\"\n        class=\"absolute right-0 z-10 w-full origin-top-right border border-bgr-500 bg-bgr shadow-lg focus:outline-none\"\n        role=\"menu\"\n        aria-orientation=\"vertical\"\n        aria-labelledby=\"menu-button\"\n        tabindex=\"-1\"\n      >\n        <!--\n      current styling of pseudo-select\n      class=\"absolute right-0 z-10 mt-0.5 hidden w-full origin-top-right rounded-md bg-bgr shadow-lg ring-1 ring-txt ring-opacity-5 focus:outline-none\"\n       -->\n\n        <div\n          class=\"h-fit max-h-96 overflow-y-auto overflow-x-hidden py-1\"\n          role=\"none\"\n        >\n          <button\n            type=\"button\"\n            role=\"menuitem\"\n            class=\"flex w-full items-center justify-start px-4 py-1 text-left text-sm text-txt hover:bg-bgr-100 hover:text-txt-stronger focus:bg-bgr-100 focus:text-txt-stronger focus:outline-none\"\n            @click=\"select()\"\n          >\n            &#8212;\n          </button>\n          <button\n            v-for=\"o in sortedOptions\"\n            :key=\"o.code\"\n            type=\"button\"\n            role=\"menuitem\"\n            class=\"flex w-full items-center justify-start px-4 py-1 text-left text-sm text-txt hover:bg-bgr-100 hover:text-txt-stronger focus:bg-bgr-100 focus:text-txt-stronger focus:outline-none\"\n            @click=\"select(o)\"\n          >\n            <WebccIcon\n              v-if=\"o?.code && hasIcons\"\n              :name=\"'flags/' + o.code.toLowerCase()\"\n              filled\n              class=\"mr-2 h-4 w-4 shrink-0\"\n            />\n            <div class=\"mr-auto\">{{ o.name }}</div>\n            <small v-if=\"o.count\">({{ o.count }})</small>\n          </button>\n        </div>\n      </div>\n    </transition>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.filter.'\n\nconst props = withDefaults(\n  defineProps<{\n    filter: string\n    options: SearchApiDestFacet[]\n    hasIcons?: boolean\n  }>(),\n  {\n    hasIcons: false,\n  },\n)\nconst emit = defineEmits<{ (e: 'change', value?: string): void }>()\nuseToggler().register(props.filter)\n\nconst iconPath = computed(() => {\n  return `searchpage/${props.filter}`\n})\n\nconst sortedOptions = computed(() => {\n  return Array.from(props.options).sort((a, b) => a.name.localeCompare(b.name))\n})\n\nconst model = computed({\n  get() {\n    return useSearch().filters[props.filter as keyof Params] as string\n  },\n  set(value: string | undefined) {\n    emit('change', value)\n  },\n})\n\nconst label = computed((): string | undefined => {\n  return props.options.find((o) => o.code === model.value)?.name\n})\n\nfunction select(o?: SearchApiDestFacet) {\n  model.value = o?.code\n  useToggler().toggle(props.filter, { closeOthers: false })\n}\n</script>\n","<template>\n  <section class=\"mt-2 py-1\">\n    <!-- <span class=\"mb-1 mt-2 block h-[2px] w-[10%] bg-thm\"></span> -->\n    <p class=\"mb-1 mt-2 text-sm font-medium\" @click=\"toggle\">{{ title }}</p>\n\n    <!-- <WebccButton class=\"w-full\" @click=\"attributesOpen = !attributesOpen\">Ausstattung</WebccButton> -->\n\n    <!-- <h5 class=\"px-1 pt-2 pb-1 text-xs font-semibold text-txt\">{{ title }}</h5> -->\n    <!-- <div v-if=\"open === true\"> -->\n    <!-- <div v-if=\"open !== false\"> -->\n    <section\n      v-if=\"isOpen !== false\"\n      :class=\"frame ? 'w-full rounded bg-bgr px-1 py-1.5 shadow' : ''\"\n    >\n      <slot />\n    </section>\n    <!-- </div> -->\n    <!-- <section class=\"mt-2 p-1\"> -->\n    <!-- <WebccButton class=\"w-full\" @click=\"distancesOpen = !distancesOpen\">Distanzen</WebccButton> -->\n    <!-- </section> -->\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n  defineProps<{\n    title: string\n    open?: boolean\n    frame?: boolean\n    // places: any[]\n  }>(),\n  {\n    open: undefined,\n    frame: false,\n  },\n)\n\nlet isOpen = props.open\n\nfunction toggle() {\n  if (props.open === undefined) return\n  isOpen = !isOpen\n}\n</script>\n","<template>\n  <div\n    v-on-click-outside.bubble=\"onClickOutside\"\n    class=\"flex flex-col w-full bg-bgr md:rounded-lg md:border md:border-bgr-300 md:shadow-lg\"\n  >\n    <header\n      class=\"relative flex flex-row items-center justify-center space-x-4 border-b border-bgr-300 p-4\"\n    >\n      <div\n        class=\"cursor-pointer border-b duration-100 hover:text-thm-hover\"\n        :class=\"\n          flexTrip.flexibleCalendar\n            ? 'border-transparent text-txt-weak'\n            : 'border-thm text-thm'\n        \"\n        @click.stop=\"switchFlexible(false)\"\n      >\n        <span>{{ $t(`${trPrefixSearchDates}calendar`) }}</span>\n      </div>\n      <div\n        class=\"cursor-pointer border-b duration-100 hover:text-thm-hover\"\n        :class=\"\n          flexTrip.flexibleCalendar\n            ? 'border-thm text-thm'\n            : 'border-transparent text-txt-weak'\n        \"\n        @click.stop=\"switchFlexible(true)\"\n      >\n        <span>{{ $t(`${trPrefixSearchDates}flexible`) }}</span>\n      </div>\n      <div class=\"absolute right-5 top-5\" @click=\"close\">\n        <WebccIcon name=\"site/x\" class=\"h-6 w-6 text-txt-weak\" />\n      </div>\n    </header>\n\n    <main class=\"mt-2 mb-[.625rem] py-4 grow overflow-y-auto\">\n      <div v-if=\"flexTrip.flexibleCalendar\">\n        <h2 class=\"mb-2 text-center text-xl font-medium\">\n          {{ $t(`${trPrefixFlexibleDates}h_duration`) }}\n        </h2>\n        <div v-if=\"flexTrip.duration\" class=\"mb-2 text-center text-thm\">\n          {{ flexTrip.durationText }}\n        </div>\n\n        <div\n          class=\"mx-auto mb-4 grid w-fit max-w-[95%] grid-cols-1 items-center justify-items-center gap-4 sm:mb-6 sm:grid-cols-3 sm:gap-6 md:flex md:justify-center\"\n        >\n          <WebccButton\n            v-for=\"duration in presetDurations\"\n            :key=\"duration\"\n            class=\"h-11 w-36 rounded-lg\"\n            variant=\"grey\"\n            framed\n            :class=\"\n              flexTrip.duration === duration ? 'border-bgr-500 bg-bgr-400' : ''\n            \"\n            @click=\"selectDuration(duration)\"\n          >\n            <span class=\"font-medium\">{{\n              flexTrip.getDurationText(duration)\n            }}</span>\n          </WebccButton>\n          <select\n            :value=\"\n              !flexTrip.duration || presetDurations.includes(flexTrip.duration)\n                ? 0\n                : flexTrip.duration\n            \"\n            class=\"h-11 w-36 rounded-lg border border-bgr-300 bg-bgr-100 pr-8 font-medium hover:border-bgr-400 hover:bg-bgr-300 focus:bg-bgr-300 focus:outline-none focus:ring-2 focus:ring-thm focus:ring-offset-2\"\n            @input=\"selectDuration(+($event.target as HTMLInputElement).value)\"\n          >\n            <option disabled hidden class=\"padding-x-4\" selected value=\"0\">\n              {{ $t(`${trPrefixFlexibleDates}custom`) }}\n            </option>\n            <option\n              v-for=\"i in DURATION_MAX\"\n              :key=\"i\"\n              class=\"padding-x-4 text-txt\"\n              :value=\"i\"\n            >\n              {{ $t(`${trPrefixFlexibleDates}night_s`, {}, i) }}\n            </option>\n          </select>\n        </div>\n\n        <h2 class=\"mb-2 text-center text-xl font-medium\">\n          {{ $t(`${trPrefixFlexibleDates}h_range`) }}\n        </h2>\n\n        <div class=\"mb-2 text-center text-thm\">\n          {{ $t(`${trPrefixFlexibleDates}tip_range`) }}\n        </div>\n      </div>\n\n      <div class=\"flex flex-row justify-center\">\n        <WebccDateRangepicker\n          :key=\"flexTrip.updateKey\"\n          v-model=\"flexTrip.range\"\n          :locale=\"$i18n.locale\"\n          :min-length=\"flexTrip.duration ?? DURATION_MIN\"\n          :max-length=\"\n            flexTrip.flexibleCalendar ? DURATION_MAX_FLEX : DURATION_MAX\n          \"\n          @select-start=\"trackArrival\"\n          @update:model-value=\"trackDeparture\"\n        />\n      </div>\n      <div\n        v-if=\"mobile && !flexTrip.flexibleCalendar\"\n        class=\"px-4 w-full box-border text-center\"\n      >\n        <WebccDateRangePlusMinusDays\n          v-model=\"flexTrip.fuzzyness\"\n          class=\"mb-4\"\n        />\n        <span class=\"font-semibold\">{{ flexTrip.tripText }}</span>\n      </div>\n    </main>\n\n    <footer class=\"w-screen pb-4 md:relative md:bottom-auto md:w-auto bg-white\">\n      <div\n        class=\"flex flex-row items-center justify-between border-t border-bgr-300 p-4\"\n      >\n        <WebccButton\n          variant=\"white\"\n          class=\"underline\"\n          :disabled=\"!flexTrip.valid\"\n          @click=\"reset\"\n        >\n          {{ $t(`${trPrefixSearchDates}reset`) }}\n        </WebccButton>\n        <WebccDateRangePlusMinusDays\n          v-if=\"!mobile && !flexTrip.flexibleCalendar\"\n          v-model=\"flexTrip.fuzzyness\"\n        />\n        <WebccButton variant=\"theme\" :disabled=\"!flexTrip.valid\" @click=\"apply\">\n          {{ $t(`${trPrefixSearchDates}apply`) }}\n        </WebccButton>\n      </div>\n    </footer>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { vOnClickOutside } from '@vueuse/components'\n\nconst trPrefixSearchDates = 'www.components.elements.SearchDates.'\nconst trPrefixFlexibleDates = 'www.components.elements.FlexibleDates.'\n\nconst emit = defineEmits<{ close: [] }>()\n\nconst screen = useScreen()\nconst flexTrip = useFlexTrip()\nconst tracking = useTracking()\n\nconst mobile = computed(() => screen.isExtraSmall)\nconst presetDurations = computed(() => [7, 14])\n\nfunction switchFlexible(flexible: boolean) {\n  window.sessionStorage.setItem('flexible-search', flexible ? 'true' : 'false')\n  flexTrip.flexibleCalendar = flexible\n  if (flexible) {\n    const duration = isDateRangeValid(flexTrip.range)\n      ? calculateDuration(flexTrip.range.start, flexTrip.range.end)\n      : undefined\n    flexTrip.changeDuration(duration)\n    flexTrip.fuzzyness = 0\n  } else {\n    nextTick(() => useSearch().setFilter({ duration: undefined }))\n  }\n\n  tracking.handlers?.search.datesModeSwitch(flexible)\n}\n\nfunction selectDuration(duration: number) {\n  tracking.handlers?.search.datesDurationSelectFlex(duration)\n  tracking.handlers?.homepage.datesDurationSelect(duration)\n  flexTrip.changeDuration(duration)\n}\n\nfunction reset() {\n  flexTrip.reset()\n  tracking.handlers?.search.datesClear(flexTrip.flexibleCalendar)\n}\n\nfunction apply() {\n  tracking.handlers?.search.datesApply(flexTrip.flexibleCalendar)\n  close()\n}\n\nfunction close() {\n  emit('close')\n}\n\nfunction onClickOutside() {\n  if (screen.isSmall) return\n\n  close()\n}\n\nfunction trackArrival(arrival?: Date) {\n  if (!arrival) return\n\n  tracking.handlers?.search.datesArrivalSelect(\n    arrival,\n    flexTrip.flexibleCalendar,\n  )\n  tracking.handlers?.homepage.datesArrivalSelect(arrival)\n}\n\nfunction trackDeparture({ start, end }: DateRange) {\n  if (!start || !end) return\n\n  const duration = calculateDuration(start, end)\n  tracking.handlers?.search.datesDurationSelect(\n    duration,\n    flexTrip.flexibleCalendar,\n  )\n  tracking.handlers?.homepage.datesDurationSelect(\n    flexTrip.flexDuration ?? duration,\n  )\n}\n</script>\n","<template>\n  <WebccDateRangepicker\n    :key=\"useFlexTrip().updateKey\"\n    v-model=\"useFlexTrip().range\"\n    v-on-click-outside.bubble=\"onClickOutside\"\n    class=\"border border-bgr-300 rounded-t-[.5rem] rounded-b-[.75rem] shadow-lg\"\n    :locale=\"useL10N().locale\"\n    :min-length=\"DURATION_MIN\"\n    :max-length=\"DURATION_MAX\"\n    @select-start=\"trackArrival\"\n    @update:model-value=\"trackDeparture\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { vOnClickOutside } from '@vueuse/components'\n\nconst emit = defineEmits<{ close: [] }>()\n\nconst tracking = useTracking()\n\nfunction trackArrival(arrival?: Date) {\n  if (!arrival) return\n\n  tracking.handlers?.search.datesArrivalSelect(arrival)\n  tracking.handlers?.homepage.datesArrivalSelect(arrival)\n}\n\nfunction trackDeparture({ start, end }: DateRange) {\n  if (!start || !end) return\n\n  tracking.handlers?.search.datesDurationSelect(calculateDuration(start, end))\n  tracking.handlers?.homepage.datesDurationSelect(calculateDuration(start, end))\n}\n\nfunction onClickOutside() {\n  emit('close')\n}\n</script>\n","<template>\n  <div\n    ref=\"dateRangeSearch\"\n    class=\"z-1 flex justify-center top-0\"\n    :class=\"\n      flexTrip.flexibleSearch ? 'fixed h-dvh md:absolute md:h-auto' : 'absolute'\n    \"\n  >\n    <WebccDateRangeSearchFlex v-if=\"flexTrip.flexibleSearch\" @close=\"close\" />\n\n    <WebccDateRangeSearchSimple v-else @close=\"close\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\ndefineExpose({ focusOnFirstDate })\n\nconst emit = defineEmits<{ close: [] }>()\n\nconst flexTrip = useFlexTrip()\n\nconst dateRangeSearch = ref()\n\nonMounted(async () => {\n  await nextTick()\n  dateRangeSearch.value.setAttribute('tabindex', '-1')\n})\n\nfunction close() {\n  emit('close')\n}\n\nfunction focusOnFirstDate() {\n  dateRangeSearch.value\n    ?.querySelector(\n      `.id-${toDate(flexTrip.range.start ?? new Date())} .vc-day-content`,\n    )\n    ?.focus({ preventScroll: true })\n}\n</script>\n","<template>\n  <div class=\"relative\" @click.stop>\n    <client-only>\n      <WebccDaterangeSearch\n        v-if=\"flexTrip.open\"\n        ref=\"dateRangeSearch\"\n        :class=\"{ 'md:w-[700px]': flexTrip.flexibleSearch }\"\n        @close=\"flexTrip.open = false\"\n      />\n    </client-only>\n\n    <div class=\"space-y-1\">\n      <span\n        v-if=\"flexTrip.flexibleSearch && !flexTrip.fuzzyness\"\n        class=\"mb-2 text-xs text-txt-weak\"\n        >{{ flexTrip.tripText }}</span\n      >\n      <div class=\"relative w-full\">\n        <WebccIcon\n          name=\"site/calendar\"\n          class=\"icon pointer-events-none absolute mx-2 h-full w-4 text-txt opacity-60\"\n          aria-hidden=\"true\"\n        />\n        <input\n          :placeholder=\"$t(`${trPrefix}checkin`)\"\n          readonly\n          class=\"input w-full rounded border-0 border-bgr-300 bg-bgr py-1.5 pl-10 pr-4 text-sm text-txt shadow focus:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger focus:outline-none active:bg-bgr-50\"\n          :value=\"\n            search.filters.checkin\n              ? formatDatetime(search.filters.checkin!, undefined) +\n                flexTrip.fuzzynessText\n              : undefined\n          \"\n          @click.stop=\"openFocusCalendar\"\n          @focus=\"openFocusCalendar\"\n        />\n        <WebccIcon\n          v-if=\"\n            search.filters.checkin &&\n            !(search.filters.checkin === search.filters.checkout)\n          \"\n          name=\"site/x\"\n          class=\"icon absolute right-0 top-0 mx-2 h-full w-4 cursor-pointer fill-current text-txt opacity-60\"\n          @click=\"clearTrip()\"\n        />\n      </div>\n      <div class=\"relative w-full\">\n        <WebccIcon\n          name=\"site/calendar\"\n          class=\"icon pointer-events-none absolute mx-2 h-full w-4 text-txt opacity-60\"\n          aria-hidden=\"true\"\n        />\n        <input\n          :placeholder=\"$t(`${trPrefix}checkout`)\"\n          readonly\n          class=\"input w-full rounded border-0 border-bgr-300 bg-bgr py-1.5 pl-10 pr-4 text-sm text-txt shadow focus:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger focus:outline-none active:bg-bgr-50\"\n          :value=\"\n            search.filters.checkout\n              ? formatDatetime(search.filters.checkout!, undefined) +\n                flexTrip.fuzzynessText\n              : undefined\n          \"\n          @click.stop=\"openFocusCalendar\"\n          @focus=\"flexTrip.open = false\"\n        />\n        <WebccIcon\n          v-if=\"\n            search.filters.checkin &&\n            !(search.filters.checkin === search.filters.checkout)\n          \"\n          name=\"site/x\"\n          class=\"icon absolute right-0 top-0 mx-2 h-full w-4 cursor-pointer fill-current text-txt opacity-60\"\n          @click=\"clearTrip()\"\n        />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.filter.'\n\nconst dateRangeSearch = ref()\nconst search = useSearch()\nconst flexTrip = useFlexTrip()\n\nuseToggler().register('datepicker')\n\nasync function openFocusCalendar() {\n  if (flexTrip.open) return\n\n  flexTrip.open = true\n  await nextTick()\n  ;(document.activeElement as HTMLInputElement)?.blur()\n  dateRangeSearch.value?.focusOnFirstDate()\n}\n\nwatch(\n  () => flexTrip.fuzzyness,\n  (newVal, oldVal) => {\n    if (newVal !== oldVal) {\n      search.setFilter({ duration: search.filters.duration as number })\n    }\n  },\n)\n\nfunction clearTrip() {\n  flexTrip.reset()\n  search.setFilter(flexTrip.filter)\n}\n</script>\n","<template>\n  <select\n    v-model=\"model\"\n    class=\"w-full rounded border-0 bg-bgr px-4 py-1.5 text-sm text-txt shadow focus:bg-bgr-100 focus:text-txt-stronger focus:outline-none focus:ring-2 focus:ring-thm active:bg-bgr-50\"\n    :placeholder=\"filter\"\n  >\n    <option :value=\"undefined\">&#8212;</option>\n    <option\n      v-for=\"{ value, count, label } in options\"\n      :key=\"value\"\n      :value=\"value\"\n    >\n      {{ label }}\n      {{\n        !hideCount && count\n          ? strict ||\n            parseInt(value) >= parseInt(model) ||\n            !model ||\n            isNaN(parseInt(value))\n            ? ` (${count})`\n            : ` (${count}+)`\n          : ''\n      }}\n    </option>\n  </select>\n</template>\n\n<script setup lang=\"ts\">\ntype Option = { value: string; count: number; label: string }\n\nconst props = defineProps<{\n  filter: string\n  options: Option[]\n  hideCount?: boolean\n  strict?: boolean\n}>()\n\nconst search = useSearch()\n\nconst model = computed({\n  get() {\n    return search.filters[props.filter as keyof Params] as string\n  },\n  set(value: string) {\n    search.setFilter({ [props.filter]: value })\n  },\n})\n</script>\n","<template>\n  <select\n    v-model=\"model\"\n    class=\"w-full rounded border-0 border-bgr-300 bg-bgr px-4 py-1.5 text-sm text-txt shadow focus:border-bgr-700 focus:bg-bgr-100 focus:text-txt-strongest focus:outline-none focus:ring-2 focus:ring-thm active:bg-bgr-50\"\n  >\n    <option :value=\"undefined\">&mdash;</option>\n    <option v-for=\"{ key, count } in options\" :key=\"key\" :value=\"key\">\n      {{ $t(`${trPrefix}${key}` as TranslationKey)\n      }}<template v-if=\"count\"> ({{ count }})</template>\n    </option>\n  </select>\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n  defineProps<{\n    filter: string[]\n    counts: { [key: string]: number }\n    showEmpty?: boolean\n    showUncounted?: boolean\n  }>(),\n  {\n    showEmpty: false,\n    showUncounted: false,\n  },\n)\n\nconst trPrefix = `www.components.views.search.filter.`\n\nconst options = computed(() => {\n  return props.filter\n    .map((key) => ({ key, count: props.counts[key] }))\n    .filter(\n      ({ count }) =>\n        count ||\n        (count === 0 && props.showEmpty) ||\n        (!count && count !== 0 && props.showUncounted),\n    )\n})\n\nconst model = computed({\n  get() {\n    return props.filter.find((key) => useSearch().filters[key as keyof Params])\n  },\n  set(value?: string) {\n    const filters = Object.fromEntries(\n      props.filter.map((key) => [key, key === value]),\n    )\n    useSearch().setFilter(filters)\n  },\n})\n</script>\n","<template>\n  <label\n    class=\"-mx-1 flex cursor-pointer items-center justify-between p-1 text-xs hover:bg-bgr-300\"\n  >\n    <!-- <input v-model=\"model\" type=\"checkbox\" v-bind=\"$attrs\" class=\"mx-1\" /> -->\n    <WebccCheckbox v-model=\"model\" v-bind=\"$attrs\" class=\"mx-1\" />\n    <span class=\"ml-1 mr-auto\">{{\n      $t(`www.components.views.search.filter.${filter}` as TranslationKey)\n    }}</span>\n    <span\n      class=\"rounded-full bg-bgr-200 px-1 py-0.5 text-xs font-medium text-txt-strong\"\n      v-text=\"count\"\n    ></span>\n  </label>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  filter: string\n  count?: number\n}>()\n\nconst emit = defineEmits<{\n  (e: 'update:modelValue', value: boolean | string | number): void\n}>()\n\nconst model = computed({\n  get(): boolean | string | number {\n    return (useSearch().filters[props.filter as keyof Params] || false) as\n      | boolean\n      | string\n      | number\n  },\n  set(value: boolean | string | number) {\n    useSearch().setFilter({ [props.filter]: value })\n    emit('update:modelValue', value)\n  },\n})\n</script>\n","<template>\n  <section class=\"w-full rounded bg-bgr px-1 py-1.5 shadow\">\n    <FilterCheckbox\n      v-for=\"f in filters\"\n      :key=\"f\"\n      :filter=\"f\"\n      :count=\"counts[f]\"\n    />\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  filter: string[]\n  counts: { [key: string]: number }\n}>()\n\nconst filters = computed(() => {\n  if (props.counts) {\n    return props.filter.filter((f) => !!props.counts[f])\n  }\n\n  return props.filter\n})\n</script>\n","<template>\n  <div\n    class=\"flex w-full items-center justify-between rounded border-0 bg-bgr text-sm text-txt shadow focus:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger focus:outline-none\"\n  >\n    <button\n      class=\"rounded-l px-4 py-2 text-lg hover:bg-bgr-300\"\n      @click=\"decreaseMaxAmount\"\n    >\n      <WebccIcon class=\"h-5 w-5\" name=\"searchpage/minus\" />\n    </button>\n    <span class=\"flex-grow cursor-default text-center\">{{\n      formatCurrency(maxPrice, undefined, useConfdata().currency)\n    }}</span>\n    <button\n      class=\"rounded-r px-4 py-2 text-lg hover:bg-bgr-300\"\n      @click=\"increaseMaxAmount\"\n    >\n      <WebccIcon class=\"h-5 w-5\" name=\"searchpage/plus\" />\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  filter: string\n}>()\n\nconst model = computed({\n  get() {\n    return useSearch().filters[props.filter as keyof Params] as\n      | number\n      | undefined\n  },\n  set(value) {\n    useSearch().setFilter({ [props.filter]: value })\n  },\n})\n\nconst maxPrice = computed(() => {\n  return useSearch().filters.maxPrice as number\n})\n\nfunction increaseMaxAmount() {\n  model.value = (model.value || 0) + 500\n}\n\nfunction decreaseMaxAmount() {\n  if (model?.value && model.value > 500) {\n    model.value -= 500\n  } else {\n    model.value = undefined\n  }\n}\n</script>\n","<template>\n  <aside class=\"w-64 rounded border border-transparent\">\n    <div class=\"flex flex-row items-center gap-2 px-1\">\n      <WebccIcon name=\"searchpage/settings\" class=\"h-5 w-5 text-thm\" />\n      <span class=\"text-lg text-thm\">{{ $t(`${trPrefix}labels.refine`) }}</span>\n    </div>\n\n    <FilterGroup :title=\"$t(`${trPrefix}labels.where`)\">\n      <FilterDropdown\n        filter=\"country\"\n        has-icons\n        :options=\"countries || []\"\n        class=\"mb-1.5\"\n        @change=\"onCountryChange\"\n      />\n      <FilterDropdown\n        filter=\"region\"\n        :options=\"regions || []\"\n        class=\"mb-1.5\"\n        @change=\"onRegionChange\"\n      />\n      <FilterDropdown\n        filter=\"place\"\n        :options=\"places || []\"\n        @change=\"onPlaceChange\"\n      />\n    </FilterGroup>\n\n    <FilterGroup :title=\"$t(`${trPrefix}labels.when`)\">\n      <FilterDateRange />\n    </FilterGroup>\n\n    <FilterGroup :title=\"$t(`${trPrefix}labels.pax`)\">\n      <template v-for=\"key in NUMBER_FILTERS\" :key=\"key\">\n        <p class=\"mt-2 text-sm font-medium\">{{ $t(`${trPrefix}${key}`) }}</p>\n        <FilterSelect\n          :filter=\"key\"\n          :options=\"facetToNumberOptions(facets?.[key] ?? {})\"\n        />\n      </template>\n    </FilterGroup>\n\n    <FilterGroup :title=\"$t(`${trPrefix}labels.accomtype`)\">\n      <FilterSelectMulti\n        :filter=\"[\n          'house',\n          'apartment',\n          'detached',\n          'villa',\n          'chalet',\n          'farmhouse',\n          'studio',\n        ]\"\n        :counts=\"counts\"\n      />\n    </FilterGroup>\n\n    <FilterGroup\n      v-show=\"\n        counts.casa ||\n        counts.swiss_peak ||\n        counts.workation ||\n        counts.sustainable\n      \"\n      :title=\"$t(`${trPrefix}labels.particular`)\"\n    >\n      <FilterCheckboxes\n        :filter=\"['casa', 'swiss_peak', 'workation', 'sustainable']\"\n        :counts=\"counts\"\n      />\n    </FilterGroup>\n\n    <FilterGroup :title=\"$t(`${trPrefix}stars`)\">\n      <FilterSelect\n        filter=\"stars\"\n        :options=\"facetToNumberOptions(facets?.stars ?? {})\"\n      />\n    </FilterGroup>\n\n    <FilterGroup :title=\"$t(`${trPrefix}labels.pool`)\">\n      <FilterSelectMulti\n        :filter=\"['pool', 'pool_children', 'pool_indoor', 'pool_private']\"\n        :counts=\"counts\"\n      />\n    </FilterGroup>\n\n    <FilterGroup :title=\"$t(`${trPrefix}labels.pet`)\">\n      <FilterCheckboxes :filter=\"['pets']\" :counts=\"counts\" />\n    </FilterGroup>\n\n    <FilterGroup :title=\"$t(`${trPrefix}labels.distances`)\" :open=\"true\">\n      <template v-for=\"key in DISTANCE_FILTERS\" :key=\"key\">\n        <p class=\"px-1 pb-1 pt-2 text-xs font-semibold text-txt\">\n          {{ $t(`${trPrefix}${key}`) }}\n        </p>\n        <FilterSelect\n          :filter=\"key\"\n          strict\n          :options=\"facetToDistanceOptions(facets?.[key] ?? {})\"\n        />\n      </template>\n    </FilterGroup>\n\n    <FilterGroup\n      :title=\"$t(`${trPrefix}labels.facilities`)\"\n      :frame=\"false\"\n      :open=\"true\"\n    >\n      <FilterCheckboxes\n        :filter=\"[\n          'wlan',\n          'aircondition',\n          'parking',\n          'garage',\n          'balcony-or-terrace',\n          'dishwasher',\n          'washingmachine',\n          'tv',\n          'sea_or_lake_view',\n          'bbq',\n          'boat',\n          'cots',\n          'hottub',\n          'fireplace',\n          'sauna',\n          'charging_station',\n        ]\"\n        :counts=\"counts\"\n      />\n    </FilterGroup>\n\n    <FilterGroup :title=\"$t(`${trPrefix}labels.specials`)\">\n      <FilterSelectMulti\n        :filter=\"[\n          'last_minute',\n          'special_offer',\n          'discount-20',\n          'cheapcheap',\n          'early_booker',\n        ]\"\n        :counts=\"counts\"\n        show-uncounted\n      />\n    </FilterGroup>\n\n    <FilterGroup :title=\"$t(`${trPrefix}labels.maxPrice`)\">\n      <FilterStepper filter=\"maxPrice\" />\n    </FilterGroup>\n\n    <FilterGroup :title=\"$t(`${trPrefix}labels.holidaytype`)\">\n      <FilterSelectMulti\n        :filter=\"[\n          'familyfriendly',\n          'holiday_resort',\n          'residence',\n          'citytrips',\n          'utoring',\n        ]\"\n        :counts=\"counts\"\n      />\n    </FilterGroup>\n\n    <FilterGroup\n      v-show=\"counts.fishing || counts.fishing_certified\"\n      :title=\"$t(`${trPrefix}labels.fishing`)\"\n    >\n      <FilterCheckboxes\n        :filter=\"['fishing', 'fishing_certified']\"\n        :counts=\"counts\"\n      />\n    </FilterGroup>\n\n    <FilterGroup :title=\"$t(`${trPrefix}labels.activities`)\">\n      <FilterSelectMulti\n        :filter=\"[\n          'skiing',\n          'hiking',\n          'golfing',\n          'cycling',\n          'wellness',\n          'tennis',\n          'surfing',\n          'sailing',\n          'mountainbiking',\n          'riding',\n          'crosscountryskiing',\n        ]\"\n        :counts=\"counts\"\n      />\n    </FilterGroup>\n  </aside>\n</template>\n\n<script setup lang=\"ts\">\nimport { mapKeys, omit, pick, pickBy, zipObject } from 'lodash-es'\n\nconst trPrefix = 'www.components.views.search.filter.'\nconst trPrefixDistance = 'www.components.views.search.filter.buckets.distances.'\nconst trPrefixLabels = 'www.components.views.search.filter.labels.'\nconst trPrefixSelect = 'www.components.views.search.SearchFilterSelect.'\n\nconst { t } = useI18n()\nconst search = useSearch()\n\nconst props = defineProps<{\n  facets?: SearchApiFacets\n  countries?: SearchApiDestFacet[]\n  regions?: SearchApiDestFacet[]\n  places?: SearchApiDestFacet[]\n}>()\n\nconst THEME_FACET_MAP: Record<string, string> = {\n  swisspeak: 'swiss_peak',\n}\n\nconst counts = computed(() => {\n  const hyphenToUnderscore = (name: string) => name.replace(/[-]/g, '_')\n\n  // TODO remove duplications in counts once naming convention is implemented\n  return omit(\n    {\n      ...props.facets?.activities,\n      ...props.facets?.attributes,\n      ...props.facets?.types,\n      ...mapKeys(props.facets?.attributes, (_, key) => hyphenToUnderscore(key)),\n      ...mapKeys(props.facets?.themes, (_, key) => THEME_FACET_MAP[key] ?? key),\n      ...mapKeys(props.facets?.types, (_, key) => hyphenToUnderscore(key)),\n    },\n    '_other',\n  )\n})\n\nconst NUMBER_FILTERS = Object.keys(\n  NUMBER_PARAMS,\n) as (keyof typeof NUMBER_PARAMS)[]\nconst DISTANCE_FILTERS = Object.keys(\n  DISTANCE_PARAMS,\n) as (keyof typeof DISTANCE_PARAMS)[]\nconst DISTANCE_PRESET_VALUES = [\n  '100',\n  '500',\n  '1000',\n  '2000',\n  '5000',\n  '10000',\n] as const\n\nfunction facetToNumberOptions(facet: Record<string, number>) {\n  const max = Math.max(0, ...Object.keys(facet).map(Number).filter(isFinite))\n  const values = [...Array(max).keys()].map((index) => `${index + 1}`)\n  const buckets = cumulative(\n    { ...zipObject(values), ...facet },\n    { reverse: true },\n  )\n\n  return Object.entries(buckets).map(([value, count], index) => ({\n    value: value === '_other' ? `${index + 1}` : value,\n    count,\n    label: tryParseInt(value)\n      ? t(`${trPrefixLabels}atleast`, { value })\n      : value === '_other'\n        ? t(`${trPrefixSelect}more`)\n        : value,\n  }))\n}\n\nfunction facetToDistanceOptions(facet: Record<string, number>) {\n  const buckets = pick(\n    cumulative(pickBy(facet, Boolean)),\n    DISTANCE_PRESET_VALUES,\n  )\n\n  return Object.entries(buckets).map(([value, count]) => ({\n    value,\n    count,\n    label: t(`${trPrefixDistance}${value}` as TranslationKey),\n  }))\n}\n\nfunction cumulative(\n  facet: Record<string, number | undefined>,\n  options?: { reverse?: boolean },\n) {\n  const entries = Object.entries(facet)\n  if (options?.reverse) entries.reverse()\n\n  let total = 0\n  return Object.fromEntries(\n    entries.map(([value, count]) => [value, (total += count ?? 0)]),\n  )\n}\n\nfunction onCountryChange(country?: string) {\n  search.setFilter({ country, region: undefined, place: undefined })\n}\n\nfunction onRegionChange(region?: string) {\n  search.setFilter({ region, place: undefined })\n}\n\nfunction onPlaceChange(place?: string) {\n  if (place) {\n    const fullPlace = (props.places || []).find((c) => c.code === place)\n    search.setFilter({ place, region: fullPlace?.parentRegionCode })\n  } else {\n    search.setFilter({ place })\n  }\n}\n</script>\n","<template>\n  <div :class=\"classes\">\n    <WebccLoader class=\"p-4\" :message=\"message\" :type=\"type\" :size=\"size\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n  absolute?: boolean\n  rounded?: string\n  message?: string\n  type?: string\n  opacity?: number\n  scrolling?: { onopen: boolean; onclose: boolean }\n  size?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  absolute: false,\n  rounded: 'none',\n  message: '',\n  type: 'circle',\n  opacity: 30,\n  scrolling: () => {\n    return { onopen: true, onclose: true }\n  },\n  size: 'md',\n})\n\nconst classes = computed(() => {\n  let classes = `top-0 left-0 z-[15] flex h-full w-full flex-col items-center justify-center overflow-hidden`\n  switch (props.opacity) {\n    case 0:\n      classes += ' bg-black/0'\n      break\n    case 10:\n      classes += ' bg-black/10'\n      break\n    case 20:\n      classes += ' bg-black/20'\n      break\n    case 40:\n      classes += ' bg-black/40'\n      break\n    case 50:\n      classes += ' bg-black/50'\n      break\n    case 60:\n      classes += ' bg-black/60'\n      break\n    case 70:\n      classes += ' bg-black/70'\n      break\n    case 80:\n      classes += ' bg-black/80'\n      break\n    case 90:\n      classes += ' bg-black/90'\n      break\n    case 30:\n    default:\n      classes += ' bg-black/30'\n      break\n  }\n  if (props.absolute) {\n    classes += ' absolute'\n  } else {\n    classes += ' fixed'\n  }\n  classes += ` rounded-${props.rounded}`\n  return classes\n})\n\nonMounted(() => {\n  if (props.absolute) {\n    return\n  }\n  if (props.scrolling.onopen) {\n    const cW = document.body.clientWidth\n    document.documentElement.classList.add('!overflow-y-hidden')\n    document.body.style.width = `${cW}px`\n  }\n})\n\nonUnmounted(() => {\n  if (props.absolute) {\n    return\n  }\n  if (props.scrolling.onclose) {\n    document.documentElement.classList.remove('!overflow-y-hidden')\n    document.body.style.width = ''\n  }\n})\n</script>\n","<template>\n  <div class=\"my-4 flex flex-row flex-wrap gap-2 align-baseline\">\n    <div\n      v-for=\"{ key, label } in prettyFilters\"\n      :key=\"key\"\n      class=\"mr-1 flex w-fit min-w-[4rem] items-center justify-between rounded-full bg-thm px-2 py-1 text-xs font-semibold uppercase text-thm-contrast last:mr-0 md:h-8\"\n    >\n      <span>{{ label }}</span>\n      <button @click.stop=\"removeFilter(key)\">\n        <WebccIcon name=\"site/x\" class=\"ml-1 h-4 w-4\" />\n      </button>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport mapValues from 'lodash-es/mapValues'\nimport pickBy from 'lodash-es/pickBy'\n\ntype FilterPair = { key: string; label: string }\n\nconst trPrefix = 'www.components.views.search.filter.'\nconst trPrefixDistance = `${trPrefix}buckets.distances.`\n\nconst SKIP_PARAMS = {\n  checkout: undefined,\n  duration: undefined,\n  sorting: undefined,\n}\n\nconst BATCH_RESET: Record<keyof Params, Params> = {\n  checkin: { checkin: undefined, checkout: undefined, duration: undefined },\n  country: { country: undefined, region: undefined, place: undefined },\n  region: { region: undefined, place: undefined },\n}\n\nconst { t } = useI18n()\nconst conf = useConfdata()\nconst search = useSearch()\n\nconst prettyFilters = computed(() => {\n  return pickBy(mapValues(search.filters, toPrettyFilter), Boolean) as Record<\n    string,\n    FilterPair\n  >\n})\n\nfunction toPrettyFilter(\n  value: unknown,\n  key: string,\n  filters: Params,\n): FilterPair | undefined {\n  if (!value || key in SKIP_PARAMS) return\n\n  if (key in DESTINATION_PARAMS)\n    return {\n      key,\n      label: labelFor(\n        key,\n        conf.destination?.[key as keyof typeof DESTINATION_PARAMS] ?? '',\n      ),\n    }\n  if (key in DATE_PARAMS)\n    return {\n      key,\n      label: labelFor('trip', formatDateRange(getTripDateRange(filters))),\n    }\n  if (key in NUMBER_PARAMS || key in STARS_PARAMS || key in TEXT_PARAMS)\n    return { key, label: labelFor(key, value) }\n  if (key in DISTANCE_PARAMS)\n    return {\n      key,\n      label: labelFor(key, t(`${trPrefixDistance}${value}` as TranslationKey)),\n    }\n  if (key in PRICE_PARAMS)\n    return {\n      key,\n      label: labelFor(\n        key,\n        formatCurrency(value as number, undefined, conf.currency),\n      ),\n    }\n\n  return { key, label: labelFor(key) }\n}\n\nfunction labelFor(key: string, value?: unknown) {\n  return [t(`${trPrefix}${key}` as TranslationKey), value]\n    .filter(Boolean)\n    .join(': ')\n}\n\nfunction removeFilter(filter: string) {\n  search.setFilter(BATCH_RESET[filter] ?? { [filter]: undefined })\n}\n</script>\n","import { publicAssetsURL } from '#internal/nuxt/paths';export default publicAssetsURL(\"/images/apartment_classification.png\")","import { publicAssetsURL } from '#internal/nuxt/paths';export default publicAssetsURL(\"/images/resort.png\")","<template>\n  <span class=\"flex\" :class=\"colorClasses\" :title=\"text\">\n    <WebccIcon\n      v-for=\"(icon, index) in icons\"\n      :key=\"index\"\n      :class=\"iconClasses\"\n      :name=\"`reviews/${icon}`\"\n      role=\"img\"\n      aria-hidden=\"true\"\n      focusable=\"false\"\n      :alt=\"text\"\n      :filled=\"false\"\n    />\n  </span>\n</template>\n\n<script setup lang=\"ts\">\ntype RatingColor = 'theme' | 'highlight' | 'grey' | 'white'\ntype RatingSize = '3' | '5'\n\nconst COLOR_CLASSES = {\n  theme: 'text-thm',\n  highlight: 'text-hlt',\n  grey: 'text-txt-weak',\n  white: 'text-txt-contrast',\n} as const\n\nconst props = withDefaults(\n  defineProps<{\n    rating: number\n    color?: RatingColor\n    size?: RatingSize\n  }>(),\n  {\n    color: 'theme',\n    size: '5',\n  },\n)\n\nconst { text } = useRating(() => props.rating)\n\nconst icons = computed(() =>\n  getRatingHearts(props.rating).map((heart) =>\n    heart === 1 ? 'heart' : heart === 0.5 ? 'heart-half' : 'heart-empty',\n  ),\n)\n\nconst iconClasses = computed(\n  () => `mr-1 last:mr-0 h-${props.size} w-${props.size}`,\n)\n\nconst colorClasses = computed(() =>\n  props.rating ? COLOR_CLASSES[props.color] : COLOR_CLASSES.grey,\n)\n</script>\n","<template>\n  <div\n    class=\"flex flex-row flex-wrap items-center justify-end gap-x-2 text-sm font-semibold text-thm\"\n  >\n    <span v-if=\"rounded\">{{ $t(`${trPrefix}labels.${rounded}`) }}</span>\n    <RatingHearts :rating=\"overall\" color=\"theme\" size=\"3\" />\n    <span class=\"flex flex-row justify-end text-xs text-txt\">{{\n      $t(`${trPrefix}review_s`, reviewCount)\n    }}</span>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.Rating.'\n\nconst props = defineProps<{\n  code: string\n  overall: number\n  reviewCount: number\n}>()\n\nconst { rounded } = useRating(() => props.overall)\n</script>\nƒ\n","<template>\n  <section\n    class=\"flex flex-wrap items-start justify-between divide-x divide-gray-300 text-xs sm:text-sm\"\n  >\n    <div class=\"flex flex-grow flex-col items-center\">\n      <WebccIcon\n        name=\"attributes/feature-pax\"\n        class=\"h-6 w-6 fill-current text-thm sm:h-8 sm:w-8\"\n      />\n      <span>{{ $t(`${trPrefix}pax_s`, accom.pax) }}</span>\n    </div>\n\n    <div class=\"flex flex-grow flex-col items-center\">\n      <WebccIcon\n        name=\"attributes/feature-rooms\"\n        class=\"h-6 w-6 fill-current text-thm sm:h-8 sm:w-8\"\n      />\n      <span>{{ $t(`${trPrefix}room_s`, accom.rooms) }}</span>\n    </div>\n\n    <div class=\"flex flex-grow flex-col items-center\">\n      <WebccIcon\n        name=\"attributes/feature-bedrooms\"\n        class=\"h-6 w-6 fill-current text-thm sm:h-8 sm:w-8\"\n      />\n      <span>{{ $t(`${trPrefix}bedroom_s`, accom.bedrooms) }}</span>\n    </div>\n\n    <div class=\"flex flex-grow flex-col items-center\">\n      <WebccIcon\n        name=\"attributes/feature-bathrooms\"\n        class=\"h-6 w-6 fill-current text-thm sm:h-8 sm:w-8\"\n      />\n      <span>{{ $t(`${trPrefix}bathroom_s`, accom.bathrooms) }}</span>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.Features.'\n\ndefineProps<{\n  accom: ResultDocument\n}>()\n</script>\n","<template>\n  <div v-if=\"price\">\n    <div class=\"text-thm\">\n      <!-- new -->\n      <div v-if=\"isPricePerNightEnabled && pricePerNight\">\n        <span class=\"mr-1\">{{ $t(`${trPrefix}from`) }}</span>\n        <span class=\"text-lg font-semibold\">{{\n          formatCurrency(pricePerNight, undefined, currency)\n        }}</span>\n        <span class=\"mr-1\"> / {{ $t(`${trPrefix}night`) }}</span>\n        <span class=\"text-black\">\n          <span>| </span>\n          <span class=\"font-medium\">{{\n            formatCurrency(price, undefined, currency)\n          }}</span>\n          <span>&nbsp;{{ $t(`${trPrefix}total`) }}</span>\n        </span>\n        <span\n          v-if=\"discount\"\n          v-tooltip=\"\n            $t(`${trPrefix}saved`, {\n              amount: formatCurrency(discount, undefined, currency),\n            })\n          \"\n          class=\"ml-2 text-sm text-hlt-hover line-through\"\n        >\n          {{ formatCurrency(origPrice, undefined, currency) }}\n        </span>\n      </div>\n      <!-- normal -->\n      <div v-else>\n        <span class=\"mr-1\">{{ $t(`${trPrefix}from`) }}</span>\n        <span class=\"text-lg font-semibold\">{{\n          formatCurrency(price, undefined, currency)\n        }}</span>\n        <span\n          v-if=\"discount\"\n          v-tooltip=\"\n            $t(`${trPrefix}saved`, {\n              amount: formatCurrency(discount, undefined, currency),\n            })\n          \"\n          class=\"ml-2 text-sm text-hlt-hover line-through\"\n        >\n          {{ formatCurrency(origPrice, undefined, currency) }}\n        </span>\n      </div>\n    </div>\n    <!-- pax -->\n    <div class=\"flex flex-row gap-1 text-xs\">\n      <span v-if=\"pax.length\">{{\n        $t(`${trPrefix}upToPax`, Math.max(...pax))\n      }}</span>\n      <span v-else>Missing Pax Information</span> |\n      <span>{{ formatDateRange(getTripDateRange(props.trip)) }}</span>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.Price.'\n\nconst props = defineProps<{\n  trip: Trip\n  currency: string\n}>()\n\nconst isPricePerNightEnabled = useFlag('SRP-display-price-per-night')\n\nconst { pax, price, reduction, pricePerNight } = toRefs(props.trip)\nconst origPrice = computed(\n  () => price.value / ((100 - (reduction?.value ?? 0)) / 100),\n)\nconst discount = computed(() => origPrice.value - price.value)\n</script>\n","<template>\n  <article\n    class=\"hitboxlayout relative grid min-h-[16rem] w-full gap-x-4 rounded bg-bgr shadow\"\n  >\n    <HitboxGallery\n      class=\"gallery aspect-[4/3]\"\n      :accom=\"accom\"\n      :checkin=\"checkin\"\n      @open=\"openDetailPage\"\n    >\n      <div\n        v-if=\"\n          flexTrip.flexibleCalendar &&\n          checkin &&\n          checkout &&\n          accom.trip?.checkin &&\n          accom.trip?.checkout\n        \"\n        class=\"absolute right-2 top-2 inline-flex flex-row items-center justify-center gap-[10px] rounded bg-bgr p-2 text-right opacity-80 lg:w-auto\"\n      >\n        <span class=\"h-[14px] text-xs font-medium\">{{ dateRageText }}</span>\n      </div>\n    </HitboxGallery>\n    <HitboxTags\n      class=\"absolute -left-2 top-2\"\n      :tags=\"accom.tags || []\"\n      :discount=\"discount\"\n    />\n    <div class=\"features-grid\">\n      <header\n        :class=\"\n          accom.tags && accom.tags.length > 0\n            ? 'justify-between'\n            : 'justify-end'\n        \"\n        class=\"my-2 mr-2 flex h-11 items-center border-b border-bgr-300 pb-1\"\n      >\n        <HitboxBadges class=\"\" :tags=\"accom.tags || []\" />\n        <HitboxRating\n          v-if=\"accom.reviews > 0\"\n          class=\"rating-grid p-1\"\n          :code=\"accom.code\"\n          :overall=\"accom.rating\"\n          :review-count=\"accom.reviews\"\n        />\n      </header>\n      <HitboxBreadcrumb\n        v-if=\"accom.slug\"\n        class=\"\"\n        :accom=\"accom\"\n        :target-url=\"targetUrl\"\n        @open=\"openDetailPage\"\n      />\n\n      <HitboxTitle class=\"my-1\" :accom=\"accom\" :target-url=\"targetUrl\" />\n\n      <!-- TODO: Momentan identisch zu views/details/Features.vue -->\n      <HitboxFeatures class=\"my-4\" :accom=\"accom\" />\n      <WebccFreeCancellationInfo\n        v-if=\"checkin\"\n        v-track:impression=\"{ event: 'search:freeCancellationImpression' }\"\n        :checkin-date=\"checkin\"\n        :free-cancellation-range=\"confData.freeCancellationRange\"\n        :locale=\"$i18n.locale\"\n      />\n    </div>\n    <div class=\"actions-grid flex items-center justify-start\">\n      <WebccButton class=\"m-2\" icon=\"favorites/map\" @click=\"toggleMap\">\n        <span>{{ $t(`${trPrefix}location`) }}</span>\n      </WebccButton>\n      <client-only v-if=\"allowBookmark\">\n        <WebccButton\n          :variant=\"isBookmarked ? 'theme' : ''\"\n          size=\"md\"\n          icon=\"site/bookmark\"\n          :icon-filled=\"!isBookmarked\"\n          @click=\"onBookmarkClick\"\n        >\n          <span>{{\n            $t(`${trPrefix}${isBookmarked ? 'bookmarkDel' : 'bookmarkAdd'}`)\n          }}</span>\n        </WebccButton>\n      </client-only>\n    </div>\n\n    <!-- TODO: MaxPax aus validities?       :duration=\"trip.duration\"\n        :max-pax=\"accommodation.pax.capacity\"\n  -->\n\n    <div class=\"price-grid flex items-center justify-between\">\n      <HitboxPrice\n        v-if=\"accom.trip && accom.trip.price\"\n        class=\"p-0\"\n        :trip=\"accom.trip\"\n        :currency=\"confData.currency\"\n      />\n      <WebccButton variant=\"cta\" size=\"md\" class=\"m-2\" @click=\"ctaClick\">\n        <span>{{ $t(`${trPrefix}discover`) }}</span>\n      </WebccButton>\n    </div>\n\n    <GoogleMaps\n      v-if=\"mapVisibilityState\"\n      :center=\"{ lat: accom.coords.lat, lng: accom.coords.lon }\"\n      :marker=\"accom.name\"\n      class=\"accommodation-map rounded-b pb-[50%]\"\n      :accom=\"accom\"\n      :locale=\"confData.locale\"\n      :domain=\"confData.domain\"\n    />\n  </article>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.hitbox.'\nconst params = useParams()\nconst tracking = useTracking()\nconst bookmarks = useBookmarks()\nconst flexTrip = useFlexTrip()\nconst partner = usePartnerStore()\nconst addToWishlistEvt = useEventBus<AccommodationDto>('addToWishlist')\nconst deleteFromWishlistEvt =\n  useEventBus<AccommodationDto>('deleteFromWishlist')\nconst { buildAccommodationUrl } = useURLs()\n\nconst props = defineProps<{\n  accom: ResultDocument\n  checkin?: Date\n  checkout?: Date\n  pax?: number\n}>()\n\nconst emit = defineEmits<{\n  interaction: [\n    value: {\n      bookmark?: { accom: ResultDocument; state: boolean }\n      map?: boolean\n    },\n  ]\n}>()\n\nconst confData = useConfdata()\n\nconst mapVisibilityState = ref(false)\n\nconst allowBookmark = computed(() => useStorageReady())\nconst isBookmarked = computed(() => bookmarks.has(props.accom.code))\nconst targetUrl = computed(() => buildAccommodationUrl(props.accom))\nconst discount = computed(() => props.accom.trip?.reduction ?? 0)\nconst dateRageText = computed(() =>\n  formatDateRange(getTripDateRange(props.accom.trip ?? {}), 'monthDay'),\n)\n\nasync function onBookmarkClick() {\n  if (partner.id && partner.jwt) {\n    processAsPartner()\n  } else {\n    addToWishlist()\n  }\n}\n\nfunction processAsPartner() {\n  if (isBookmarked.value) {\n    tracking.handlers?.ecommerce.removeFromWishlist([props.accom])\n  } else {\n    tracking.handlers?.ecommerce.addToWishlist([props.accom])\n  }\n  bookmarks.toggle(props.accom.code)\n  emit('interaction', {\n    bookmark: { accom: props.accom, state: isBookmarked.value },\n  })\n}\n\nfunction addToWishlist() {\n  if (isBookmarked.value) {\n    deleteFromWishlistEvt.emit({ code: props.accom.code })\n  } else {\n    addToWishlistEvt.emit({ code: props.accom.code })\n  }\n}\n\nfunction ctaClick() {\n  openDetailPage()\n}\n\nfunction openDetailPage() {\n  tracking.handlers?.ecommerce.selectItem(props.accom)\n  tracking.handlers?.eec.productClick(props.accom)\n  window.open(targetUrl.value, params.iframe ? '_self' : undefined)\n}\n\nfunction toggleMap() {\n  mapVisibilityState.value = !mapVisibilityState.value\n  emit('interaction', { map: mapVisibilityState.value })\n}\n</script>\n\n<style scoped>\n.hitboxlayout {\n  grid-template-columns: minmax(275px, 1fr) 2fr;\n  grid-template-areas:\n    'image features'\n    'footerActions price'\n    'map map';\n}\n\n.gallery {\n  grid-area: image;\n}\n.badges-grid {\n  grid-area: badges;\n}\n.rating-grid {\n  grid-area: rating;\n}\n.breadcrumb-grid {\n  grid-area: breadcrumb;\n}\n.title-grid {\n  grid-area: title;\n}\n.features-grid {\n  grid-area: features;\n}\n.actions-grid {\n  grid-area: footerActions;\n}\n.price-grid {\n  grid-area: price;\n}\n.cta-grid {\n  grid-area: footerCta;\n}\n.accommodation-map {\n  grid-area: map;\n}\n</style>\n","<template>\n  <div>\n    <section class=\"w-full rounded shadow bg-bgr p-4 pb-16\">\n      <WebccHeading :level=\"3\">{{ $t(`${trPrefix}noResults`) }}</WebccHeading>\n      <span>{{ $t(`${trPrefix}modifyFilters`) }}</span>\n      <FilterTags />\n      <WebccButton @click=\"reset\">{{\n        $t(`${trPrefix}removeAllFilters`)\n      }}</WebccButton>\n    </section>\n\n    <section\n      v-for=\"{ key, destination, request, result } in recommendations\"\n      :key=\"key\"\n      class=\"mt-8\"\n    >\n      <h3\n        v-track:impression=\"[\n          { event: 'search:zeroResultsBannerDisplayed' },\n          {\n            event: 'search:results',\n            args: [destination, request, result.docs.length],\n          },\n          { event: 'ecommerce:viewItemList', args: [result.docs, destination] },\n        ]\"\n        class=\"mb-6 px-4 py-3.5 border-2 border-bgr-300 rounded-lg text-xl font-semibold\"\n      >\n        {{ $t(`${trPrefix}noResultsRecommender.${key}`) }}\n      </h3>\n      <div class=\"hidden md:grid gap-4 justify-start\">\n        <HitboxOrig\n          v-for=\"doc in result.docs\"\n          :key=\"`${doc.code}_orig`\"\n          :accom=\"doc\"\n        />\n      </div>\n      <div class=\"md:hidden gap-4 sm:grid sm:grid-cols-2\">\n        <HitboxCard\n          v-for=\"doc in result.docs\"\n          :key=\"`${doc.code}_card`\"\n          :accom=\"doc\"\n        />\n      </div>\n    </section>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { pickBy, zip } from 'lodash-es'\n\nconst trPrefix = 'www.components.views.search.area.'\n\ntype RecommendationKey = 'sameRegion' | 'extendedDates'\n\nconst DISPLAY_COUNT_MAX = 10\nconst FUZZINESS = 3\n\nconst confData = useConfdata()\nconst search = useSearch()\n\nconst requests = computed(() => {\n  const filters = { ...search.filters, pagesize: DISPLAY_COUNT_MAX }\n  const queries: Record<RecommendationKey, Params | undefined> = {\n    sameRegion: filters.place ? { ...filters, place: undefined } : undefined,\n    extendedDates: hasDateParams(filters)\n      ? { ...filters, ...addDatesFuzziness(filters, FUZZINESS) }\n      : undefined,\n  }\n\n  return pickBy(queries, Boolean) as Partial<Record<RecommendationKey, Params>>\n})\n\nconst query = computed(() => ({\n  requests: Object.values(requests.value),\n  language: confData.language,\n}))\n\nconst { data: recommendations } = useSearchMultiQuery(query, {\n  select(results) {\n    return zip(\n      Object.keys(requests.value),\n      Object.values(requests.value),\n      results,\n    )\n      .filter(([, , result]) => result?.docs.length)\n      .slice(0, 1)\n      .map(([key, request, result]) => ({\n        key: key as RecommendationKey,\n        destination: getDestinationForFilter(confData.destination, request!),\n        request: request!,\n        result: result!,\n      }))\n  },\n})\n\nfunction reset() {\n  search.setFilter({}, { reset: true })\n}\n</script>\n","<template>\n  <div\n    class=\"absolute z-[500] -ml-[8.7rem] -mt-96 w-[280px] origin-[center_bottom] cursor-default bg-bgr text-sm text-txt opacity-100\"\n    @click.stop\n    @dblclick.stop\n    @touchstart.stop\n  >\n    <div\n      class=\"relative h-0 w-full overflow-hidden pb-[75%] opacity-100 [background:url(/map/placeholder-object.jpg)_50%/cover_no-repeat]\"\n    >\n      <img v-if=\"image\" class=\"!max-w-full\" :src=\"image\" />\n      <div\n        class=\"absolute bottom-4 left-4 flex flex-row gap-2 text-txt-contrast\"\n      >\n        <WebccIcon\n          v-for=\"index in stars\"\n          :key=\"index\"\n          name=\"detailpage/evaluation-star\"\n          class=\"h-4 w-4\"\n        />\n      </div>\n    </div>\n\n    <header\n      class=\"p-2 after:absolute after:left-1/2 after:top-full after:-ml-[10px] after:border-x-[10px] after:border-t-[10px] after:border-x-transparent after:border-t-white after:content-['']\"\n    >\n      <div class=\"flex flex-row items-center justify-between\">\n        <p v-if=\"title\" class=\"pr-1 text-base\">{{ title }}</p>\n\n        <p\n          v-if=\"rating?.formatted.value\"\n          class=\"ml-1 flex flex-row items-center\"\n        >\n          <WebccIcon name=\"feather/heart\" class=\"h-4 w-4 text-thm\" />\n          <span class=\"ml-1 text-thm\">{{ rating.formatted }}</span>\n          <span class=\"object-card__rating__total\"\n            >&nbsp;{{ rating.delim }}&nbsp;{{ rating.max }}</span\n          >\n        </p>\n      </div>\n\n      <strong v-if=\"price\" class=\"text-thm\">\n        <span class=\"font-semibold text-lg\"\n          ><span>{{ $t(`${trPrefix}priceFrom`) }}</span\n          >&nbsp;{{ formatCurrency(price) }}</span\n        >\n        <span v-if=\"duration\" class=\"object-card__pricing__duration\"\n          >&nbsp;/&nbsp;<span>{{ $t(`${trPrefix}night_s`, duration) }}</span>\n        </span>\n      </strong>\n    </header>\n\n    <footer class=\"flex flex-row justify-between border border-t p-2\">\n      <nav\n        v-if=\"count > 1\"\n        class=\"flex w-full flex-row items-center justify-between pr-2\"\n      >\n        <button class=\"p-2\" @click=\"prevAccommodation\">\n          <WebccIcon name=\"site/chevron-left\" class=\"h-6 w-6\" filled />\n        </button>\n        <span>\n          <span>{{ currentIndex + 1 }}</span>\n          <span>\n            / <span>{{ $t(`${trPrefix}objects`, count) }}</span>\n          </span>\n        </span>\n        <button class=\"p-2\" @click=\"nextAccommodation\">\n          <WebccIcon name=\"site/chevron-right\" class=\"h-6 w-6\" filled />\n        </button>\n      </nav>\n\n      <WebccButton variant=\"cta\" @click=\"openAccommodation\">\n        <span>{{ $t(`${trPrefix}discover`) }}</span>\n      </WebccButton>\n    </footer>\n\n    <button\n      class=\"absolute -right-4 -top-4 rounded-full bg-bgr p-1 hover:bg-thm hover:text-txt-contrast\"\n      @click=\"close\"\n    >\n      <WebccIcon name=\"site/x\" class=\"h-6 w-6\" />\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.InfoWindowLegacy.'\n\nconst { t } = useI18n()\nconst params = useParams()\nconst tracking = useTracking()\n\nconst accommodations = ref<ResultDocument[]>([])\nconst currentIndex = ref(0)\n\ndefineExpose({ accommodations })\n\nconst emit = defineEmits<{\n  close: []\n}>()\n\nconst rating = useRating(() => accommodation.value?.rating ?? 0)\n\nconst count = computed(() => accommodations.value.length ?? 0)\nconst accommodation = computed(() => accommodations.value[currentIndex.value])\nconst stars = computed(() => Math.round(accommodation.value?.stars ?? 0))\nconst price = computed(() => accommodation.value?.trip?.price)\nconst duration = computed(() => accommodation.value?.trip?.duration)\nconst image = computed(\n  () =>\n    accommodation.value?.image &&\n    useURLs().buildImageUrl(accommodation.value?.image.id, 'tr:n-srp_hitbox_l'),\n)\nconst url = computed(\n  () =>\n    accommodation.value &&\n    useURLs().buildAccommodationUrl(accommodation.value).toString(),\n)\n\nconst title = computed(() => {\n  return Object.entries({\n    pax_s: accommodation.value?.pax,\n    room_s: accommodation.value?.rooms,\n  })\n    .filter(([, count]) => count)\n    .map(([key, count]) => t(`${trPrefix}${key}` as TranslationKey, count))\n    .join(' | ')\n})\n\nwatch(accommodations, () => (currentIndex.value = 0))\n\nfunction openAccommodation() {\n  tracking.handlers?.ecommerce.selectItem(accommodation.value)\n  tracking.handlers?.eec.productClick(accommodation.value!)\n  window.open(url.value, params.iframe ? '_self' : '_blank')\n}\n\nfunction nextAccommodation() {\n  currentIndex.value = ++currentIndex.value % count.value\n}\n\nfunction prevAccommodation() {\n  currentIndex.value += currentIndex.value ? -1 : count.value - 1\n}\n\nfunction close() {\n  emit('close')\n}\n</script>\n","interface MapDim {\n  height: number\n  width: number\n}\n\nconst WORLD_DIM = { height: 256, width: 256 }\nconst ZOOM_MAX = 15\n\nfunction latRadOf(lat: number): number {\n  const sin = Math.sin((lat * Math.PI) / 180)\n  const radX2 = Math.log((1 + sin) / (1 - sin)) / 2\n  return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2\n}\n\nfunction calcZoom(mapPx: number, worldPx: number, fraction: number): number {\n  return Math.floor(Math.log(mapPx / worldPx / fraction) / Math.LN2)\n}\n\nexport function calcBoundsZoomLevel(\n  { n, w, s, e }: Bounds,\n  mapDim?: MapDim,\n): number {\n  if (!n || !w || !s || !e) return ZOOM_MAX\n  if (!mapDim) return 1\n\n  const latFraction = (latRadOf(n) - latRadOf(s)) / Math.PI\n\n  const lngDiff = e - w\n  const lngFraction = (lngDiff < 0 ? lngDiff + 360 : lngDiff) / 360\n\n  const latZoom = calcZoom(mapDim.height, WORLD_DIM.height, latFraction)\n  const lngZoom = calcZoom(mapDim.width, WORLD_DIM.width, lngFraction)\n\n  return Math.min(latZoom, lngZoom, ZOOM_MAX)\n}\n\n/**\n * Returns empty bounds with zero values.\n */\nexport function getBoundsEmpty(): Bounds {\n  return { s: 0, w: 0, e: 0, n: 0 }\n}\n\n/**\n * Returns the approximate bounds of Europe.\n */\nexport function getBoundsDefault(): Bounds {\n  return { s: 27, w: -17, n: 71, e: 35 }\n}\n\nexport function getBoundsFromViewport({\n  south,\n  north,\n  east,\n  west,\n}: Viewport): Bounds {\n  return {\n    s: south ?? 0,\n    w: west ?? 0,\n    n: north ?? 0,\n    e: east ?? 0,\n  }\n}\n\nexport function getBoundsFromCoords({\n  top_left: nw,\n  bottom_right: se,\n}: CoordBounds): Bounds {\n  return {\n    s: se?.lat ?? 0,\n    w: nw?.lon ?? 0,\n    n: nw?.lat ?? 0,\n    e: se?.lon ?? 0,\n  }\n}\n\nexport function isViewportValid({\n  south,\n  north,\n  east,\n  west,\n}: Viewport): boolean {\n  return south !== north && east !== west\n}\n","<template>\n  <div>\n    <GoogleMaps\n      ref=\"mapRef\"\n      class=\"h-full w-full\"\n      :locale=\"locale\"\n      :domain=\"domain\"\n      @loaded=\"init\"\n    >\n      <MapSearchInfoWindow\n        v-show=\"infoWindowIsVisible\"\n        ref=\"infoWindowRef\"\n        @close=\"infoWindowIsVisible = false\"\n      />\n    </GoogleMaps>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type MapSearchInfoWindow from './MapSearchInfoWindow.vue'\nimport type GoogleMaps from '~/components/common/functional/GoogleMaps.vue'\n\nconst emit = defineEmits<{\n  updateInfo: [MapUpdates]\n  updateDest: [MapDestination]\n}>()\n\nconst autoMaxZoom = 15\nconst deClusterLevel = 12\nconst mapBoundsPadding = 40\n\nconst mapRef = ref<InstanceType<typeof GoogleMaps>>()\nconst infoWindowRef = ref<InstanceType<typeof MapSearchInfoWindow>>()\n\nconst bounds = ref(getBoundsEmpty())\nconst zoom = ref(calcBoundsZoomLevel(bounds.value))\nconst infoWindow = ref<MapInfoWindow>()\nconst infoWindowIsVisible = ref(false)\nconst map = ref<google.maps.Map>()\nlet markers: MapMarker[] = reactive([])\nconst preventZoomChangeEvent = ref(false)\nconst searchresult = ref<Result>()\nconst searchresultInv = ref<Result>()\n\nconst { viewport, filters } = storeToRefs(useSearch())\nconst { language, locale, domain, salesoffice, currency } =\n  storeToRefs(useConfdata())\n\n/**\n * Need to set the shape variables to undefined,\n * otherwise Google Maps will not hide them despite setMap(null)\n * If make it reactive it will also not hide overlays.\n */\nconst debugInfo: {\n  borderYellow?: google.maps.Rectangle\n  borderRed?: google.maps.Rectangle\n  circle?: google.maps.Circle\n} = {}\n\nconst mapDim = computed(() => {\n  if (!mapRef.value?.wrapper) return undefined\n\n  return {\n    height: mapRef.value.wrapper.offsetHeight - 2 * mapBoundsPadding,\n    width: mapRef.value.wrapper.offsetWidth - 2 * mapBoundsPadding,\n  }\n})\n\nwatch(viewport, init, { deep: true })\nwatch(useSettings(), renderDebugInfo, { deep: true })\nwatch(bounds, renderDebugBorders)\n\nasync function init() {\n  infoWindowIsVisible.value = false\n\n  if (!map.value && mapRef.value?.wrapper) {\n    map.value = new window.google.maps.Map(mapRef.value.wrapper, {\n      center: getCoordEmpty(),\n      zoom: zoom.value,\n      gestureHandling: 'greedy',\n      scrollwheel: false,\n      clickableIcons: false /* map icons are not clickable (POI, ...) */,\n    })\n\n    map.value.addListener('zoom_changed', async () => {\n      if (preventZoomChangeEvent.value) return\n      await triggerMapBoundsSearch()\n    })\n    map.value.addListener('click', () => {\n      infoWindowIsVisible.value = false\n    })\n\n    const { MapOverlay } = await import('./map/google-maps')\n    infoWindow.value = new MapOverlay(infoWindowRef.value?.$el)\n  }\n\n  if (!map.value) return\n\n  await searchForBounds(\n    viewport.value && isViewportValid(viewport.value)\n      ? getBoundsFromViewport(viewport.value)\n      : getBoundsDefault(),\n  )\n\n  renderDebugInfo()\n}\n\nasync function searchForBounds(newBounds: Bounds, newZoom?: number) {\n  bounds.value = newBounds\n  zoom.value = newZoom ?? calcBoundsZoomLevel(newBounds, mapDim.value)\n\n  const hasFiltersByGeo =\n    filters.value?.country || filters.value?.region || filters.value?.place\n  const params = {\n    ...(filters.value ?? {}),\n    ...bounds.value,\n    zoom: zoom.value + useSettings().mapAdditionalBucketZoom,\n  }\n\n  const [result, resultInv] = await Promise.all([\n    search(params),\n    hasFiltersByGeo ? search(inverseGeoParams(params)) : Promise.resolve(ref()), //\n  ])\n\n  searchresult.value = result.value ?? undefined\n  searchresultInv.value = resultInv.value\n\n  if (searchresult.value?.buckets?.length) {\n    bounds.value = getBoundsFromViewport(searchresult.value?.viewport ?? {})\n  }\n\n  if (!newZoom) fitBounds()\n  renderMarkers()\n  clearProposal()\n  if (!newZoom) geoAnalysis()\n}\n\nasync function search(params: Params) {\n  const { data } = await useSearchApi().search({ ...params, page: undefined })\n\n  if (data.value) {\n    data.value.buckets = data.value?._aggregations?.karte?.buckets ?? []\n    data.value.docs = data.value?.docs ?? []\n  }\n\n  return data\n}\n\nfunction inverseGeoParams(params: Params) {\n  const result = { ...params }\n\n  if (result.place) {\n    result.place = `-${result.place}`\n    result.region = undefined\n    result.country = undefined\n  } else if (result.region) {\n    result.region = `-${result.region}`\n    result.country = undefined\n  } else if (result.country) {\n    result.country = `-${result.country}`\n  }\n\n  return result\n}\n\n/**\n * passt die Karte an übergebene bounds an für search mit map bounds (Kartenausschnitt)\n */\nfunction fitBounds() {\n  preventZoomChangeEvent.value = true\n  map.value?.setOptions({ maxZoom: autoMaxZoom })\n\n  const { s, w, n, e } = bounds.value\n  const sw = new window.google.maps.LatLng(s, w)\n  const ne = new window.google.maps.LatLng(n, e)\n  map.value?.fitBounds(new window.google.maps.LatLngBounds(sw, ne), {\n    top: mapBoundsPadding,\n    bottom: mapBoundsPadding,\n    left: mapBoundsPadding,\n    right: mapBoundsPadding,\n  })\n\n  map.value?.setOptions({ maxZoom: undefined })\n  preventZoomChangeEvent.value = false\n}\n\n/**\n * items = docs / buckets to render\n */\nfunction renderMarkers() {\n  const items = prepareItems(searchresult.value, true)\n  const itemsInv = prepareItems(searchresultInv.value, false)\n\n  markers.forEach((marker) => marker.setMap(null)) // remove the old markers\n  markers = [...itemsInv, ...items].map(createMarker)\n  markers.forEach((marker) => marker.setMap(map.value ?? null))\n\n  emit('updateInfo', {\n    zoomMap: map.value?.getZoom(),\n    autoMaxZoom,\n    deClusterLevel,\n    itemsLength: markers.length,\n  })\n}\n\nfunction prepareItems(\n  res: Result | null | undefined,\n  inbound: boolean,\n): MapItem[] {\n  if (!res?.docs) return []\n\n  const { docs } = res\n  let buckets = res.buckets ?? []\n\n  // Switch from buckets to docs wenn Anzahl von Accommodations in all buckets <= 20\n  // Grund: Bei manchen Residenzen haben die Einzelwohnungen abweichende Koordinaten und werden auch bei hohen Zoomstufen nicht aufgelöst\n  if (\n    buckets.reduce((sum, arr) => sum + arr.count, 0) <= 20 &&\n    useSettings().mapDeClustering === 'accosum' &&\n    map.value?.getZoom() &&\n    map.value.getZoom()! > deClusterLevel\n  ) {\n    // Residenzen in Einzel-Docs müssen wieder zusammengefasst werden, sonst werden sie überdeckt\n    const distinctCoords = docs.map((doc) => doc.coords.lat + doc.coords.lon)\n    buckets = docs.map((doc) => {\n      return {\n        count: distinctCoords.filter(\n          (c) => c === doc.coords.lat + doc.coords.lon,\n        ).length,\n        coords: doc.coords,\n        key: '',\n        cardinality: 1,\n      }\n    })\n    buckets = Object.values(\n      buckets.reduce(\n        (acc, obj) => ({\n          ...acc,\n          [(obj.coords?.lat || NaN) + (obj.coords?.lon || NaN)]: obj,\n        }),\n        {},\n      ),\n    )\n  }\n\n  return buckets.map(({ key, bounds, coords, count, cardinality }) => ({\n    country: filters.value?.country,\n    region: filters.value?.region,\n    place: filters.value?.place,\n    lat: Math.round(coords?.lat || NaN),\n    lng: Math.round(coords?.lon || NaN),\n    count: count || 1,\n    cardinality: cardinality || 1,\n    key: key || '',\n    bounds,\n    inbound,\n    zoom: zoom.value,\n    avgLat: coords?.lat,\n    avgLng: coords?.lon,\n  }))\n}\n\nfunction createMarker(item: MapItem) {\n  const options: google.maps.MarkerOptions = {\n    map: map.value,\n    position:\n      item.avgLat && item.avgLng\n        ? { lat: item.avgLat, lng: item.avgLng }\n        : undefined,\n    // title: `${country}/${region}/${place} (${precision}: ${lat}-${lng} => ${count}`,\n    label: {\n      text: item.count.toString(),\n      color: 'white',\n      fontSize: '12px',\n      fontWeight: 'bold',\n    },\n  }\n\n  const path = item.inbound ? '/map/inbound' : '/map/outbound'\n  if (item.cardinality > 1) {\n    options.icon = { url: `${path}/cluster2.png` }\n  } else if (item.count > 1) {\n    options.icon = {\n      url: `${path}/pin-multiple.png`,\n      labelOrigin: new window.google.maps.Point(30, 11),\n    }\n  } else {\n    options.icon = { url: `${path}/pin.png` }\n    options.label = undefined // delete option.label avoided consciously due to performance reasons\n  }\n\n  const marker: MapMarker = new google.maps.Marker(options)\n  marker.key = item.key || ''\n  marker.accommodationCount = item.count\n  marker.coordsCardinality = item.cardinality\n  marker.bounds = item.bounds\n  marker.inbound = item.inbound\n  marker.addListener('click', async () => await handleMarkerClick(marker))\n\n  return marker\n}\n\nasync function handleMarkerClick(marker: MapMarker) {\n  if (\n    marker.accommodationCount &&\n    marker.coordsCardinality &&\n    marker.accommodationCount > 1 &&\n    marker.coordsCardinality > 1\n  ) {\n    zoomAndPanMapTo(marker)\n  } else {\n    await showAccommodation(marker)\n  }\n}\n\nfunction zoomAndPanMapTo(marker: MapMarker) {\n  if (marker.key) {\n    triggerViewportSearch(marker)\n  } else if (map.value?.getZoom()) {\n    const zoom = Math.min(\n      map.value.getZoom()! + 1,\n      marker.coordsCardinality === 1 ? autoMaxZoom : Number.MAX_VALUE,\n    )\n    map.value?.setZoom(zoom)\n    map.value?.panTo(marker.getPosition() ?? getCoordEmpty())\n    triggerMapBoundsSearch()\n  }\n}\n\nasync function triggerMapBoundsSearch() {\n  await searchForBounds(getMapBounds(map.value!), map.value?.getZoom() ?? 0)\n}\n\nasync function triggerViewportSearch(marker: MapMarker) {\n  await searchForBounds(getBoundsFromCoords(marker.bounds ?? {}))\n}\n\nasync function showAccommodation(marker: MapMarker) {\n  if (infoWindowRef.value && map.value) {\n    infoWindow.value?.close()\n    infoWindow.value?.open(\n      map.value,\n      marker.getPosition() ?? getCoordEmpty(),\n      true,\n    )\n    infoWindow.value?.setLoading(true)\n    infoWindowRef.value.accommodations = []\n    infoWindowIsVisible.value = true\n  }\n\n  const data = await search({\n    lat: marker.getPosition()?.lat(),\n    lon: marker.getPosition()?.lng(),\n    pageSize: marker.accommodationCount,\n    language: language.value,\n    currency: currency.value,\n    salesoffice: salesoffice.value?.code,\n    checkin: filters.value.checkin,\n    checkout: filters.value.checkout,\n    duration: filters.value.duration,\n    pax: filters.value.pax,\n  })\n\n  if (infoWindowRef.value && data.value?.docs?.length) {\n    infoWindowRef.value.accommodations = data.value?.docs\n    infoWindow.value?.setLoading(false)\n  }\n}\n\n/*\n * Functions for retrieving the map-zoom-level for specific bounds - called in init-map before rendering the map for the first time\n */\n\nfunction clearProposal() {\n  emit('updateDest', {\n    country: { name: '', code: '' },\n    region: { name: '', code: '' },\n    place: { name: '', code: '' },\n  })\n}\n\nasync function geoAnalysis() {\n  const destProposal = {\n    country: { name: '', code: '' },\n    region: { name: '', code: '' },\n    place: { name: '', code: '' },\n  }\n\n  const geo = searchresult.value?._aggregations?.geo.buckets || []\n  let geoProposal = searchresultInv.value?._aggregations?.geo.buckets || []\n  let searchresultProp = searchresultInv.value\n\n  // Radius-Suche\n  const center = map.value?.getCenter()\n  // TODO: Feintuning\n  // const radius = this.filters.place !== undefined ? 4 : this.filters.region !== undefined ? 40 : 200 // alternativ: 100 - 4 * map.value?.getZoom()\n  const radius =\n    Math.round(\n      ((200 *\n        Math.exp(-0.33 * (map.value?.getZoom() || 1)) *\n        (23 - (map.value?.getZoom() || 1))) /\n        (map.value?.getZoom() || 1)) *\n        1000,\n    ) / 1000\n  console.log('radius', radius)\n\n  let geoRad: Bucket[] = []\n  try {\n    const { data, error } = await useSearchApi().search({\n      lat: center?.lat(),\n      lon: center?.lng(),\n      radius: `${radius}km`,\n    })\n    geoRad = data.value?._aggregations?.geo.buckets || []\n\n    if (error.value) {\n      throw error.value\n    }\n\n    // Wenn die Radius-Suche etwas findet, dann nehmen wir dieses Ergebnis, ansonsten die Ergebnisse der Inv-Suche\n    if (geoRad.length) {\n      geoProposal = geoRad\n      searchresultProp = data.value ?? undefined\n      renderDebugCircle(center, radius)\n    }\n  } catch (error) {\n    console.error(error)\n  }\n\n  if (geoProposal.length) {\n    // geoProposal-Analysis\n\n    if (filters.value?.place) {\n      const placeRegex = '^[A-Z]{2}[0-9]{5}$'\n\n      const geoPlace = geo\n        .filter(({ key }) => key.match(placeRegex))\n        .reduce((prev, curr) => (prev.count >= curr.count ? prev : curr), {\n          key: '',\n          count: 0,\n          cardinality: 0,\n        })\n\n      const geoProposalPlace = geoProposal\n        .filter(({ key }) => key.match(placeRegex))\n        .reduce((prev, curr) => (prev.count >= curr.count ? prev : curr), {\n          key: '',\n          count: 0,\n          cardinality: 0,\n        })\n\n      if (geoProposalPlace.key !== geoPlace.key) {\n        const place = searchresultProp?.facets?.places?.find(\n          (c) => c.code === geoProposalPlace.key,\n        )\n        if (place) {\n          const placeRegion = place?.parentRegionCode || ''\n          const placeCountry = place?.code.substring(0, 2)\n          destProposal.place.name = place?.name || ''\n          destProposal.place.code = place?.code || ''\n          destProposal.region.name =\n            searchresultProp?.facets?.regions?.find(\n              (c) => c.code === placeRegion,\n            )?.name || ''\n          destProposal.region.code = placeRegion\n          destProposal.country.name =\n            searchresultProp?.facets?.countries?.find(\n              (c) => c.code === placeCountry,\n            )?.name || ''\n          destProposal.country.code = placeCountry || ''\n        }\n      }\n    } else if (filters.value?.region) {\n      const regionRegex = '^[A-Z]{2}[0-9]{2}$'\n      const geoRegion = geo\n        .filter(({ key }) => key.match(regionRegex))\n        .reduce((prev, curr) => (prev.count >= curr.count ? prev : curr), {\n          key: '',\n          count: 0,\n          cardinality: 0,\n        })\n\n      const geoProposalRegion = geoProposal\n        .filter(({ key }) => key.match(regionRegex))\n        .reduce((prev, curr) => (prev.count >= curr.count ? prev : curr), {\n          key: '',\n          count: 0,\n          cardinality: 0,\n        })\n\n      if (geoProposalRegion.key !== geoRegion.key) {\n        const region = searchresultProp?.facets?.regions?.find(\n          (c) => c.code === geoProposalRegion.key,\n        )\n        if (region) {\n          const regionCountry = region?.code.substring(0, 2)\n          destProposal.region.name =\n            searchresultProp?.facets?.regions?.find(\n              (c) => c.code === geoProposalRegion.key,\n            )?.name || ''\n          destProposal.region.code = region?.code || ''\n          destProposal.country.name =\n            searchresultProp?.facets?.countries?.find(\n              (c) => c.code === regionCountry,\n            )?.name || ''\n          destProposal.country.code = regionCountry || ''\n        }\n      }\n    } else if (filters.value?.country) {\n      const countryRegex = '^[A-Z]{2}$'\n\n      const geoCountry = geo\n        .filter(({ key }) => key.match(countryRegex))\n        .reduce((prev, curr) => (prev.count >= curr.count ? prev : curr), {\n          key: '',\n          count: 0,\n          cardinality: 0,\n        })\n\n      const geoProposalCountry = geoProposal\n        .filter(({ key }) => key.match(countryRegex))\n        .reduce((prev, curr) => (prev.count >= curr.count ? prev : curr), {\n          key: '',\n          count: 0,\n          cardinality: 0,\n        })\n\n      if (geoProposalCountry.key !== geoCountry.key) {\n        destProposal.country.name =\n          searchresultProp?.facets?.countries?.find(\n            (c) => c.code === geoProposalCountry.key,\n          )?.name || ''\n        destProposal.country.code = geoProposalCountry.key\n      }\n    }\n\n    emit('updateDest', destProposal)\n  }\n}\n\nasync function renderDebugInfo() {\n  if (useSettings().mapShowBounds) {\n    const { CoordMapType } = await import('./map/google-maps')\n    const coordMapType = new CoordMapType(new window.google.maps.Size(256, 256))\n    map.value?.overlayMapTypes.insertAt(0, coordMapType)\n    hideDebugBorders()\n    showDebugBorders(bounds.value, bounds.value)\n  } else {\n    map.value?.overlayMapTypes.removeAt(0)\n    hideDebugBorders()\n    hideDebugCircle()\n  }\n}\n\nfunction renderDebugBorders(newBounds: Bounds, oldBounds: Bounds) {\n  if (!useSettings().mapShowBounds) return\n\n  hideDebugBorders()\n  showDebugBorders(newBounds, oldBounds)\n}\n\nfunction renderDebugCircle(\n  center: google.maps.LatLng | undefined,\n  radius: number,\n) {\n  if (!useSettings().mapShowBounds) return\n\n  hideDebugCircle()\n  showDebugCircle(center, radius)\n}\n\nfunction showDebugBorders(newBounds: Bounds, oldBounds: Bounds) {\n  debugInfo.borderYellow = new google.maps.Rectangle({\n    bounds: new google.maps.LatLngBounds(\n      new google.maps.LatLng(oldBounds.s, oldBounds.w),\n      new google.maps.LatLng(oldBounds.n, oldBounds.e),\n    ),\n    strokeColor: '#FFFF00',\n    strokeWeight: 12,\n    strokeOpacity: 0.8,\n    clickable: false,\n    map: map.value,\n  })\n  debugInfo.borderRed = new google.maps.Rectangle({\n    bounds: new google.maps.LatLngBounds(\n      new google.maps.LatLng(newBounds.s, newBounds.w),\n      new google.maps.LatLng(newBounds.n, newBounds.e),\n    ),\n    strokeColor: '#FF0000',\n    strokeWeight: 2,\n    strokeOpacity: 0.8,\n    clickable: false,\n    map: map.value,\n  })\n}\n\nfunction hideDebugBorders() {\n  debugInfo.borderYellow?.setMap(null)\n  debugInfo.borderYellow = undefined\n  debugInfo.borderRed?.setMap(null)\n  debugInfo.borderRed = undefined\n}\n\nfunction showDebugCircle(\n  center: google.maps.LatLng | undefined,\n  radius: number,\n) {\n  debugInfo.circle = new google.maps.Circle({\n    center,\n    radius: radius * 1000,\n    strokeColor: '#00FF00',\n    strokeOpacity: 1.0,\n    fillOpacity: 0,\n    strokeWeight: 4,\n    clickable: false,\n    map: map.value,\n  })\n}\n\nfunction hideDebugCircle() {\n  debugInfo.circle?.setMap(null)\n  debugInfo.circle = undefined\n}\n\nfunction getCoordEmpty() {\n  return { lat: 0, lng: 0 }\n}\n\nfunction getMapBounds(map: google.maps.Map) {\n  const ne = map.getBounds()?.getNorthEast()\n  const sw = map.getBounds()?.getSouthWest()\n\n  return {\n    s: sw?.lat() ?? 0,\n    w: sw?.lng() ?? 0,\n    n: ne?.lat() ?? 0,\n    e: ne?.lng() ?? 0,\n  }\n}\n</script>\n","<template>\n  <main class=\"relative pb-8\">\n    <!-- MOBIL -->\n    <section\n      class=\"top-0 z-1 bg-bgr-50 md:hidden\"\n      :class=\"mapMode ? 'fixed inset-x-0 mx-auto' : 'sticky '\"\n    >\n      <nav\n        class=\"container-fluid flex items-center justify-between bg-bgr-50 py-2 pt-3 text-sm\"\n      >\n        <button\n          class=\"flex items-center rounded-full border-0 border-bgr-200 bg-bgr px-2 py-2 text-xs shadow ring-thm hover:border-transparent hover:ring-2 focus:border-transparent focus:outline-none focus:ring-2\"\n          @click=\"filterOpen = !filterOpen\"\n        >\n          <WebccIcon name=\"searchpage/settings\" class=\"mx-1 h-4 w-4 text-thm\" />\n          <span class=\"px-1 font-bold\">{{ $t(`${trPrefix}filters`) }}</span>\n        </button>\n        <div class=\"flex items-center\">\n          <SortingDropdown\n            :class=\"{ hidden: mapMode }\"\n            :model-value=\"filters.sorting\"\n            @update:model-value=\"onSort\"\n          />\n\n          <div\n            class=\"ml-2 flex items-center rounded-full border-0 border-bgr-200 bg-bgr px-2 py-2 text-xs shadow ring-thm hover:border-transparent hover:ring-2 focus:border-transparent focus:outline-none focus:ring-2\"\n            @click=\"mapMode = !mapMode\"\n          >\n            <WebccIcon\n              :name=\"mapMode ? 'searchpage/sorting' : 'content/map'\"\n              class=\"mr-1 h-4 w-4 text-thm\"\n            />\n            <span class=\"px-1\">{{\n              $t(`${trPrefix}${mapMode ? 'list' : 'map'}`)\n            }}</span>\n          </div>\n        </div>\n      </nav>\n\n      <div\n        class=\"fixed inset-0 z-[30] bg-black/50 backdrop-blur-xs\"\n        :class=\"{ hidden: !filterOpen }\"\n        @click=\"filterOpen = false\"\n      ></div>\n      <nav\n        class=\"fixed left-0 top-0 z-[30] h-full w-72 transform bg-bgr-100 px-4 py-2 transition-all duration-300 ease-in-out\"\n        :class=\"[\n          filterOpen ? 'translate-x-0' : '-translate-x-full',\n          flexTrip.open ? '' : 'overflow-auto',\n        ]\"\n      >\n        <button\n          v-if=\"!flexTrip.open\"\n          class=\"sticky left-72 top-0.5 z-[50] -mr-2 cursor-pointer rounded-full border-[12px] border-bgr-100 bg-bgr-400 text-txt-weakest hover:bg-bgr-600\"\n          @click=\"filterOpen = !filterOpen\"\n        >\n          <WebccIcon name=\"site/x\" class=\"h-6 w-6 stroke-2 p-0.5\" />\n        </button>\n        <!-- TODO: -->\n        <Filter\n          class=\"relative -top-9\"\n          :filters=\"filters\"\n          :facets=\"facets\"\n          :countries=\"geo.countries\"\n          :regions=\"geoAll.regions\"\n          :places=\"geo.places\"\n        />\n        <WebccButton\n          variant=\"cta\"\n          size=\"md\"\n          class=\"relative -top-2 w-full\"\n          @click=\"filterOpen = false\"\n        >\n          <span>{{ $t(`${trPrefix}heading`) }}</span>\n        </WebccButton>\n      </nav>\n    </section>\n    <!-- END MOBIL -->\n\n    <!-- Filter Desktop & Suchbereich -->\n    <main\n      ref=\"scrollpoint\"\n      class=\"container-fluid-lg relative flex items-start md:gap-6\"\n    >\n      <!-- TODO: -->\n      <Filter\n        :filters=\"filters\"\n        :facets=\"facets\"\n        :countries=\"geo.countries\"\n        :regions=\"geoAll.regions\"\n        :places=\"geo.places\"\n        class=\"mt-4 hidden pt-1 md:block\"\n      />\n\n      <section class=\"sticky top-4 w-full md:mt-4\">\n        <nav\n          class=\"relative flex flex-col flex-wrap items-end justify-between pb-4 sm:flex-row sm:flex-nowrap\"\n        >\n          <WebccHeading\n            v-if=\"total\"\n            :title=\"title\"\n            :level=\"2\"\n            size=\"base\"\n            space=\"mr-auto\"\n          />\n          <div\n            v-if=\"total\"\n            class=\"sticky top-4 ml-auto hidden w-full items-center justify-end sm:w-auto md:flex\"\n          >\n            <SortingDropdown\n              :class=\"{ hidden: mapMode }\"\n              :model-value=\"filters.sorting\"\n              @update:model-value=\"onSort\"\n            />\n            <div\n              class=\"ml-2 flex items-center rounded-full border-0 border-bgr-200 bg-bgr px-2 py-2 text-xs shadow ring-thm hover:border-transparent hover:ring-2 focus:border-transparent focus:outline-none focus:ring-2\"\n            >\n              <WebccSwitch\n                v-model=\"mapMode\"\n                :label-left=\"$t(`${trPrefix}map`) + ''\"\n              />\n            </div>\n          </div>\n        </nav>\n\n        <main class=\"relative\">\n          <div v-if=\"loading\" class=\"absolute h-full w-full\">\n            <div\n              class=\"sticky top-0 h-full max-h-screen min-h-356 w-full\"\n              :class=\"[\n                !total\n                  ? 'bg-gradient-to-b from-bgr-200 to-bgr-50'\n                  : 'z-[15] bg-black/10 backdrop-blur',\n              ]\"\n            >\n              <div\n                v-if=\"!$params.iframe && !total\"\n                class=\"flex flex-col py-8 w-full items-center justify-center\"\n              >\n                <NuxtImg\n                  class=\"h-14 w-full opacity-50 grayscale\"\n                  :src=\"`logos/interhome.svg`\"\n                />\n              </div>\n              <WebccLoaderOverlay\n                absolute\n                :opacity=\"0\"\n                class=\"left-0 mx-auto flex h-full w-full flex-col items-start justify-start\"\n              />\n            </div>\n          </div>\n\n          <SearchAreaNoResult v-if=\"!total && !loading\" />\n\n          <section\n            v-if=\"!total && loading\"\n            class=\"w-full rounded bg-bgr p-4 pb-12\"\n          >\n            <!-- inital search without old result -->\n          </section>\n\n          <template v-else>\n            <!-- List section -->\n            <section\n              v-if=\"total && !mapMode\"\n              class=\"flex w-full flex-col justify-start gap-4\"\n            >\n              <template\n                v-for=\"(doc, i) in docs\"\n                :key=\"JSON.stringify({ code: doc.code, trip: doc.trip })\"\n              >\n                <HitboxOrig\n                  v-track:impression=\"{ event: 'search:objectImpression' }\"\n                  class=\"static hidden md:grid\"\n                  :accom=\"doc\"\n                  :checkin=\"checkin\"\n                  :checkout=\"checkout\"\n                  :pax=\"pax\"\n                  @interaction=\"emit('interaction', $event)\"\n                />\n                <!-- Trustpilot oder Newsletter-Signup > md-->\n                <template v-if=\"!$params.iframe\">\n                  <div\n                    v-if=\"\n                      i === 2 || (docs!.length < 3 && i === docs!.length - 1)\n                    \"\n                    :key=\"i\"\n                    class=\"hidden md:block\"\n                  >\n                    <slot></slot>\n                  </div>\n                </template>\n              </template>\n\n              <div class=\"flex flex-col gap-4 sm:grid sm:grid-cols-2 md:hidden\">\n                <template\n                  v-for=\"(doc, i) in docs\"\n                  :key=\"JSON.stringify({ code: doc.code, trip: doc.trip })\"\n                >\n                  <HitboxCard\n                    v-track:impression=\"{ event: 'search:objectImpression' }\"\n                    class=\"static\"\n                    :accom=\"doc\"\n                    :checkin=\"checkin\"\n                    :checkout=\"checkout\"\n                    :pax=\"pax\"\n                    @to-detailpage=\"onToDetailpage(doc)\"\n                  />\n                  <!-- Trustpilot oder Newsletter-Signup < md -->\n                  <template v-if=\"!$params.iframe\">\n                    <slot\n                      v-if=\"\n                        i === 1 || (docs!.length < 2 && i === docs!.length - 1)\n                      \"\n                    ></slot\n                  ></template>\n                </template>\n              </div>\n\n              <WebccPagination\n                v-if=\"pagesTotal > 1\"\n                class=\"mb-16\"\n                :active=\"pageActive\"\n                :total=\"pagesTotal\"\n                :unique-key=\"JSON.stringify(search.filters)\"\n                @select-page=\"loadPage\"\n              />\n            </section>\n\n            <!-- Map section -->\n            <section\n              v-if=\"total && mapMode\"\n              class=\"fixed inset-0 top-12 z-[50] overflow-hidden rounded shadow md:[position:initial]\"\n            >\n              <div\n                class=\"bg-bgr p-2\"\n                :class=\"\n                  settings.mapShowMapInfo || settings.mapShowProposal\n                    ? 'block'\n                    : 'hidden'\n                \"\n              >\n                <div v-if=\"settings.mapShowMapInfo\" class=\"mb-1 text-sm\">\n                  Zoomstufe Map: {{ testmapInfo.zoomMap }}, AutoMaxZoom Map:\n                  {{ testmapInfo.autoMaxZoom }}, deClusterLevel:\n                  {{ testmapInfo.deClusterLevel }}, Anzahl Marker:\n                  {{ testmapInfo.itemsLength }}\n                </div>\n                <div class=\"text-sm\">\n                  <WebccButton\n                    size=\"sm\"\n                    :label=\"destProposalString\"\n                    @click=\"setDestination\"\n                  />\n                  Vorschlag Destination\n                </div>\n              </div>\n              <MapSearch\n                class=\"h-full w-full md:h-[48rem]\"\n                @update-info=\"testmapInfo = $event\"\n                @update-dest=\"setDestUpdate\"\n              />\n            </section>\n          </template>\n        </main>\n      </section>\n    </main>\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.search.area.'\n\nconst emit = defineEmits<{\n  'toggle-bookmark': [string?]\n  interaction: [\n    { bookmark?: { accom: ResultDocument; state: boolean }; map?: boolean },\n  ]\n}>()\n\nconst confData = useConfdata()\nconst settings = useSettings()\nconst search = useSearch()\nconst flexTrip = useFlexTrip()\nconst tracking = useTracking()\nconst screen = useScreen()\n\nconst mapMode = ref(false)\nconst filterOpen = ref(false)\nconst destProposalString = ref('')\nconst destProposal = ref({ country: '', region: '', place: '' })\nconst testmapInfo = ref<MapUpdates>({\n  zoomMap: 0,\n  autoMaxZoom: 0,\n  deClusterLevel: 0,\n  itemsLength: 0,\n})\n\nconst scrollpoint = ref<HTMLDivElement>()\nconst {\n  docs,\n  total,\n  totalPages,\n  filters,\n  facets,\n  geoAll,\n  geo,\n  geoCurrent,\n  loading,\n} = storeToRefs(search)\n\nconst checkin = computed(() => tryParseDate(filters.value.checkin))\nconst checkout = computed(() => tryParseDate(filters.value.checkout))\nconst pax = computed(() => tryParseInt(filters.value.pax?.toString()) ?? 1)\nconst destination = computed(\n  () =>\n    geoCurrent.value.place ??\n    geoCurrent.value.region ??\n    geoCurrent.value.country,\n)\nconst h2 = computed(() => (confData.additionalBody as SearchPageBody).h2)\nconst title = computed(() =>\n  replacePlaceholders(h2.value, {\n    amount: total.value,\n    destination: destination.value?.name,\n  }),\n)\nconst pageActive = computed(\n  () => tryParseInt(filters.value.page?.toString()) ?? 1,\n)\n\nconst pagesTotal = computed(() => totalPages.value ?? 0)\n\nwatch(() => screen.current, updateHeight)\nwatch(mapMode, updateHeight)\nwatch(mapMode, (value) => tracking.handlers?.search.generalMap(value))\n\nfunction updateHeight() {\n  const [overflow, height] =\n    mapMode.value && screen.isSmall ? ['hidden', '100vh'] : ['auto', 'auto']\n  document.body.style.overflow = overflow\n  document.body.style.height = height\n}\n\nasync function onSort(sorting: SortingValue = 'recommendation') {\n  await search.setFilter({ sorting })\n  tracking.handlers?.search.sorting(sorting)\n}\n\nasync function loadPage(page: number) {\n  tracking.handlers?.search.paging({ current: page, total: pagesTotal.value })\n  await search.setFilter({ page })\n  scrollpoint.value?.scrollIntoView({ behavior: 'smooth' })\n}\n\nfunction setDestUpdate(value: {\n  country: { name: string; code: string }\n  region: { name: string; code: string }\n  place: { name: string; code: string }\n}) {\n  destProposalString.value =\n    [value.country.name, value.region.name, value.place.name]\n      .filter(Boolean)\n      .join(' > ') || ''\n  destProposal.value = {\n    country: value.country.code,\n    region: value.region.code,\n    place: value.place.code,\n  }\n}\n\nasync function setDestination() {\n  await search.setFilter({})\n}\n\nfunction onToDetailpage(doc: ResultDocument) {\n  tracking.handlers?.ecommerce.selectItem(doc)\n  tracking.handlers?.eec.productClick(doc)\n}\n</script>\n","<template>\n  <main\n    id=\"page-search\"\n    class=\"bg-bgr-50 shadow-inner\"\n    :data-filters-count=\"Object.keys(filters).length\"\n  >\n    <SearchHeader />\n\n    <div\n      v-if=\"$params.iframe\"\n      class=\"container-fluid-lg flex flex-row items-center justify-between\"\n    >\n      <SearchBreadcrumb :geo=\"geo\" />\n      <BookmarkLink />\n    </div>\n\n    <!-- <SearchArea v-if=\"ab.isActive('newSearchUI')\" :currency=\"confData.currency\" :domain=\"confData.domain\" :locale=\"useL10N().locale\" /> -->\n\n    <SearchAreaV5 class=\"z-1\" @interaction=\"onInteraction($event)\">\n      <SearchNewsletterSignup\n        v-if=\"\n          confData.signupEnabled &&\n          confData.siteSettings?.includes('newsletter') &&\n          newsletterSignupVisible\n        \"\n      />\n      <DetailsTrustPilot\n        v-else\n        :domain=\"confData.domain\"\n        :resource=\"confData.sites[0]\"\n      />\n    </SearchAreaV5>\n\n    <SearchRatingBox :key=\"filtersKey\" />\n\n    <SearchTeaser v-if=\"!$params.iframe\">\n      <SearchBreadcrumb :geo=\"geo\" />\n      <template #searchteaser>\n        <SearchObjectTeasers\n          v-if=\"objectTeasersEnabled\"\n          :key=\"destinationFilterKey\"\n          :show=\"objectTeasersVisible\"\n          :destination=\"destination\"\n        />\n      </template>\n      <template #contentassets>\n        <SearchContentAssets\n          v-if=\"contentAssetsEnabled\"\n          :key=\"destinationFilterKey\"\n          :filter=\"destinationFilter\"\n        />\n      </template>\n    </SearchTeaser>\n\n    <USPCards :why=\"additionalBody.USPCards.cards\" />\n\n    <USPWhy\n      :why=\"[additionalBody.USPColumns.left, additionalBody.USPColumns.right]\"\n    />\n\n    <FooterNewsletterSignup />\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst OBJECT_TEASERS_MIN_RESULTS_TO_DISPLAY = 10\nconst OBJECT_TEASERS_FILTERS_TO_DISPLAY = new Set([\n  'sea',\n  'pool',\n  'pets',\n  'skiing',\n  'familyfriendly',\n])\n\nconst CONTENT_ASSETS_FILTERS_TO_DISPLAY = new Set([\n  'sea',\n  'pool',\n  'pets',\n  'familyfriendly',\n])\n\nconst route = useRoute()\nconst params = useParams()\nconst confData = useConfdata()\nconst search = useSearch()\nconst ab = useAB()\nconst tracking = useTracking()\nconst flexTrip = useFlexTrip()\n\nconst isContentAssetsEnabled = useFlag('content-assets')\n\nconst newsletterSignupVisible = ref(Math.random() > 0.5)\n\nconst geo = computed(() => search.geoCurrent)\nconst filters = computed(() => removeFalsy(search.filters))\nconst filtersKey = computed(() => JSON.stringify(filters.value))\nconst total = computed(() => search.total ?? 0)\nconst additionalBody = computed(() => confData.additionalBody as SearchPageBody)\nconst destination = computed(() => confData.destination)\nconst destinationFilter = computed(() => destination.value?.filters?.[0].key)\nconst destinationFilterKey = computed(() => destination.value.urlPath)\n\nconst objectTeasersEnabled = computed(() =>\n  Boolean(\n    ab.isActive('objectteaser') &&\n      route.path && // handeleing reactivity, see https://jira.migros.net/browse/IHGWEBCC-1382\n      confData.isCanonicalPage(useRequestURL()) &&\n      (!destinationFilter.value ||\n        OBJECT_TEASERS_FILTERS_TO_DISPLAY.has(destinationFilter.value)),\n  ),\n)\n\nconst objectTeasersVisible = computed(\n  () =>\n    objectTeasersEnabled.value &&\n    total.value >= OBJECT_TEASERS_MIN_RESULTS_TO_DISPLAY,\n)\n\nconst contentAssetsEnabled = computed(() =>\n  Boolean(\n    isContentAssetsEnabled.value &&\n      destination.value?.countryCode &&\n      (!destinationFilter.value ||\n        CONTENT_ASSETS_FILTERS_TO_DISPLAY.has(destinationFilter.value)),\n  ),\n)\nwatch(route, () => window?.scrollTo({ top: 0 }), {\n  deep: true,\n  immediate: true,\n})\n\nwatch(\n  () => flexTrip.filter,\n  (newFilter, oldFilter) => {\n    if (\n      objectsEqual(newFilter, oldFilter) ||\n      Object.values(newFilter).every((v) => !v)\n    )\n      return\n    nextTick(() => search.setFilter(newFilter as unknown as Params))\n  },\n)\n\nwatch(filters, () => (flexTrip.range = getTripDateRange(filters.value)))\n\nwatch(\n  () => search.url,\n  (newValue, oldValue) => {\n    if (!newValue || newValue === oldValue) return\n\n    return navigateTo(\n      getUrlFullPath(addUrlParams(new URL(newValue), params.persistent)),\n    )\n  },\n)\n\nonMounted(() => {\n  window.onbeforeunload = function () {\n    // Before a page-reload the browser normally memorises the scroll-position, but on the reloaded searchpage this may have unwanted sideeffects cause of dynamic content.\n    // So it is necessary to set the scroll-position to 0 before unload (which leads to position top on reload)\n    window.scrollTo(0, 0)\n  }\n})\n\nfunction onInteraction(event: {\n  map?: boolean\n  bookmark?: {\n    accom: ResultDocument\n    state: boolean\n  }\n}) {\n  for (const key in event) {\n    switch (key) {\n      case 'map':\n        tracking.handlers?.search.objectMap(event.map!)\n        break\n      case 'bookmark':\n        tracking.handlers?.search.toggleBookmark({\n          accom: event.bookmark!.accom.code as string,\n          state: event.bookmark!.state as boolean,\n        })\n        break\n    }\n  }\n}\n</script>\n","<template>\n  <label\n    v-on-click-outside=\"close\"\n    class=\"relative flex flex-col sm:col-span-2 md:col-span-1 lg:col-span-3\"\n    data-id=\"destination-field\"\n  >\n    <input\n      v-model=\"text\"\n      class=\"h-12 rounded border border-bgr-300 px-8 placeholder:text-txt-weak focus:outline-none focus:ring-2 focus:ring-thm focus:ring-offset-2 md:px-7 lg:px-8\"\n      :placeholder=\"placeholder ?? $t(`${trPrefix}placeholders.where`)\"\n      autocomplete=\"off\"\n      role=\"combobox\"\n      type=\"text\"\n      aria-autocomplete=\"list\"\n      :aria-expanded=\"isOpen\"\n      @click.stop\n      @focus=\"handleFocus\"\n      @blur=\"handleBlur\"\n      @input=\"handleInput\"\n      @keyup.prevent=\"handleKeyup\"\n    />\n    <div class=\"pointer-events-none absolute left-2 top-[0.9rem]\">\n      <WebccIcon name=\"site/search\" class=\"h-5 w-5 fill-current text-txt\" />\n    </div>\n    <div\n      v-if=\"selectedItem?.label\"\n      class=\"absolute right-2 top-[0.9rem] cursor-pointer opacity-20 hover:opacity-60\"\n      role=\"button\"\n      aria-label=\"Reset destination\"\n      @pointerdown.prevent\n      @click=\"reset\"\n    >\n      <WebccIcon name=\"site/x\" class=\"h-5 w-5 fill-current text-txt\" />\n    </div>\n    <ul\n      v-if=\"isOpen\"\n      class=\"absolute top-14 z-[2] flex w-full flex-col overflow-y-visible rounded bg-bgr shadow-md\"\n      :class=\"items.length ? 'border border-bgr-300' : ''\"\n      role=\"listbox\"\n      aria-label=\"Suggestions list\"\n    >\n      <li\n        v-for=\"(item, i) in items\"\n        :key=\"i\"\n        :class=\"{\n          'mb-2': i === items.length - 1,\n          'bg-bgr-300': item === selectedItem,\n          'even:bg-bgr-100': item !== selectedItem,\n        }\"\n        class=\"flex cursor-pointer justify-between py-2 pl-8 pr-2 text-xs hover:bg-bgr-300\"\n        role=\"option\"\n        tabindex=\"-1\"\n        :aria-label=\"item.label\"\n        :aria-selected=\"item === selectedItem\"\n        @pointerdown.prevent\n        @click.prevent.stop=\"select(item)\"\n      >\n        <WebccIcon\n          :name=\"'flags/' + item.flag\"\n          class=\"absolute left-2 h-4 w-4 shrink-0\"\n          filled\n        />\n        <span :title=\"item.code\">{{ item.label }}</span>\n        <span>{{ $t(`${trPrefix}${item.type}`) }}</span>\n      </li>\n    </ul>\n  </label>\n</template>\n\n<script setup lang=\"ts\">\nimport { vOnClickOutside } from '@vueuse/components'\n\nconst trPrefix = 'www.components.elements.SearchBox.'\n\nconst DEBOUNCE = 300\n\ndefineProps<{ placeholder?: string }>()\n\nconst model = defineModel<AutosuggestItem>()\n\nconst confData = useConfdata()\nconst settings = useSettings()\nconst [isOpen, toggle] = useToggle()\n\nconst text = ref('')\nconst query = ref('')\nconst selectedItem = shallowRef<AutosuggestItem>()\n\nconst { data } = useSearchApiSuggestionsQuery(() => ({ query: query.value }), {\n  enabled: () => !!query.value,\n})\n\nconst defaultItems = computed(() => {\n  const topDestinations = confData.body?.find(\n    (block: Block) => block.component === 'StartTopDestinations',\n  )?.content as TopDestinationsBlockContent | undefined\n  const { countries, regions, allCountries } = topDestinations ?? {}\n\n  return [countries, regions]\n    .flatMap((teasers) => teasers?.slice(0, 3) ?? [])\n    .map((teaser) => mapTeaserToSuggestion(teaser, allCountries ?? []))\n    .filter((suggestion) => !!suggestion)\n    .map(toAutosuggestItem)\n})\n\nconst items = computed(() => {\n  if (!query.value) return defaultItems.value\n  if (!data.value || query.value.length < settings.autosuggestThreshold)\n    return []\n\n  return data.value.map(toAutosuggestItem)\n})\n\nfunction toAutosuggestItem(suggestion: SearchApiSuggestion): AutosuggestItem {\n  return {\n    ...suggestion,\n    flag: suggestion.country.toLowerCase(),\n    path: suggestion.slug,\n    selected: false,\n  }\n}\n\nfunction open() {\n  toggle(true)\n}\n\nfunction close() {\n  toggle(false)\n}\n\nfunction reset() {\n  text.value = ''\n  query.value = ''\n  selectedItem.value = undefined\n  model.value = undefined\n  open()\n}\n\nasync function select(item: AutosuggestItem) {\n  text.value = item.label\n  query.value = item.label\n  selectedItem.value = item\n  model.value = item\n  close()\n}\n\nfunction handleFocus() {\n  open()\n}\n\nfunction handleBlur() {\n  close()\n  // When no suggestion is selected by the user then take a first suggestion.\n  // See https://jira.migros.net/browse/IHGWEBCC-617\n  if (!selectedItem.value && query.value && items.value.length) {\n    select(items.value[0])\n  }\n}\n\nconst handleInput = useDebounceFn(handleTextChange, DEBOUNCE)\n\nasync function handleTextChange() {\n  open()\n  query.value = text.value\n  selectedItem.value = undefined\n  model.value = undefined\n}\n\nasync function handleKeyup({ key }: KeyboardEvent) {\n  switch (key) {\n    case 'ArrowDown':\n    case 'ArrowUp': {\n      open()\n      const direction = key === 'ArrowDown' ? 1 : -1\n      const list = toValue(items.value)\n      const prev = list.indexOf(selectedItem.value!)\n      const nextIndex = prev + direction\n      selectedItem.value =\n        nextIndex === -1\n          ? list[list.length - 1]\n          : (list[prev + direction] ?? list[0])\n      break\n    }\n    case 'Enter':\n      if (!selectedItem.value) break\n      select(selectedItem.value)\n      break\n    case 'Escape':\n      close()\n      break\n    default:\n      break\n  }\n}\n</script>\n","<template>\n  <section data-id=\"search-box\" class=\"flex flex-row gap-2 py-4\">\n    <WebccDestinationPicker\n      v-model=\"selectedItem\"\n      class=\"relative flex w-3/4 flex-col\"\n      :placeholder=\"$t(`${trPrefix}placeholders.geo`)\"\n    />\n\n    <WebccButton variant=\"cta\" class=\"h-12 w-1/4\" @click=\"performSearch\">\n      {{ $t(`${trPrefix}search`) }}\n    </WebccButton>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.elements.SearchBox.'\n\nconst params = useParams()\nconst confData = useConfdata()\nconst tracking = useTracking()\n\nconst selectedItem = shallowRef<AutosuggestItem>()\nwatch(selectedItem, (newValue) => {\n  if (!newValue) return\n\n  tracking.handlers?.qs.autosuggestItemSelected(newValue)\n})\n\nasync function performSearch() {\n  tracking.handlers?.qs.submitSearch({ text: selectedItem.value?.label ?? '' })\n\n  const path = buildPath(\n    confData.languagePrefix,\n    selectedItem.value?.path ?? confData.prefixSearchpage,\n  )\n  const query = asQueryParams(params.persistent)\n  await navigateTo({ path, query })\n}\n</script>\n","<template>\n  <div>\n    <client-only>\n      <VDropdown placement=\"bottom\">\n        <WebccButton\n          icon=\"site/share\"\n          :size=\"size\"\n          class=\"flex items-center\"\n          @click.stop=\";[(open = !open), $emit('open')]\"\n        >\n          <span>{{ $t(`${trPrefix}button`) }}</span>\n        </WebccButton>\n        <template #popper>\n          <div class=\"flex flex-col gap-4 rounded bg-bgr p-4 shadow-lg\">\n            <WebccLink\n              anchor\n              absolute\n              :to=\"`https://www.facebook.com/sharer/sharer.php?u=${target}`\"\n              target=\"_blank\"\n              class=\"rounded-full\"\n            >\n              <WebccIcon\n                class=\"h-10 w-10 text-[#3b5998]\"\n                name=\"social/facebook-share\"\n              />\n            </WebccLink>\n            <WebccLink\n              anchor\n              absolute\n              :to=\"`https://x.com/intent/tweet?text=${target}`\"\n              target=\"_blank\"\n              class=\"rounded-full\"\n            >\n              <WebccIcon\n                class=\"h-10 w-10 text-[#000000]\"\n                name=\"social/x-logo-share\"\n              />\n            </WebccLink>\n            <WebccLink\n              anchor\n              absolute\n              :to=\"`mailto:?body=${target}`\"\n              target=\"_blank\"\n              class=\"rounded-full\"\n              @click.stop=\"useTracking().handlers?.detail.recommendByMail()\"\n            >\n              <WebccIcon class=\"h-10 w-10\" name=\"social/mail-share\" filled />\n            </WebccLink>\n            <WebccLink\n              anchor\n              absolute\n              :to=\"whatsAppLink\"\n              target=\"_blank\"\n              class=\"rounded-full\"\n            >\n              <WebccIcon class=\"h-10 w-10\" name=\"social/whatsapp\" filled />\n            </WebccLink>\n          </div>\n        </template>\n      </VDropdown>\n    </client-only>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.SocialShare.'\n\nconst { t } = useI18n()\n\nwithDefaults(\n  defineProps<{\n    size?: Size\n  }>(),\n  {\n    size: 'md',\n  },\n)\n\ndefineEmits(['open'])\n\nconst target: Ref<string> = ref('')\nconst open: Ref<boolean> = ref(false)\nconst partnerid = usePartner().id\n\nconst whatsAppLink = computed(\n  () =>\n    `https://api.whatsapp.com/send/?text=${t(`${trPrefix}whatsApp`)}${target.value}`,\n)\nonMounted(() => {\n  target.value =\n    window.location.href.split('?')[0] +\n    (partnerid ? `?partnerid=${partnerid}` : '')\n})\n\nonBeforeMount(() => {\n  useToggler().register('socialshare')\n})\n</script>\n","<template>\n  <Breadcrumb :lead=\"lead\" :items=\"items\" :trail=\"trail\" />\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n  defineProps<{\n    accom: TranslatedAccommodation\n    languagePrefix?: string\n  }>(),\n  {\n    languagePrefix: '',\n  },\n)\n\nconst lead = computed<BreadcrumbItem>(() => {\n  return {\n    target: `/`,\n    title: 'Home',\n    tr: 'www.components.views.details.Breadcrumbs.home',\n    content: 'Home',\n  }\n})\n\nconst items = computed<BreadcrumbItem[]>(() => {\n  return [\n    {\n      target: `${props.languagePrefix}/${country.value.slug}`,\n      title: country.value.name,\n      text: country.value.name,\n      content: country.value.name,\n    },\n    {\n      target: `${props.languagePrefix}/${region.value.slug}`,\n      title: region.value.name,\n      text: region.value.name,\n      content: region.value.name,\n    },\n    {\n      target: `${props.languagePrefix}/${place.value.slug}`,\n      title: place.value.name,\n      text: place.value.name,\n      content: place.value.name,\n    },\n  ]\n})\n\nconst trail = computed<BreadcrumbItem>(() => {\n  return {\n    target: `${props.languagePrefix}/${props.accom.slug}`,\n    title: props.accom.code,\n    text: props.accom.code,\n    content: props.accom.code,\n  }\n})\n\nconst country = computed(() => {\n  return props.accom.country\n})\n\nconst region = computed(() => {\n  return props.accom.region\n})\n\nconst place = computed(() => {\n  return props.accom.place\n})\n</script>\n","<template>\n  <section class=\"group relative w-full overflow-hidden rounded-tl\">\n    <LazyImageSlider\n      v-if=\"showSlider\"\n      :images=\"images\"\n      @click=\"onClick\"\n      @slide-change=\"onSlideChange\"\n    />\n    <div class=\"absolute flex h-full w-full items-center justify-center\">\n      <NuxtImg\n        v-if=\"!$params.iframe\"\n        :src=\"`logos/interhome.svg`\"\n        class=\"w-1/4 md:w-1/5\"\n      />\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  accom: TranslatedAccommodation\n  checkin?: Date\n}>()\n\nconst emit = defineEmits<{ 'open-gallery': [id: string] }>()\n\nconst tracking = useTracking()\n\nconst showSlider = ref(false)\n\nconst { images } = useAccomImageCollection(\n  () => toAccomData(props.accom, useSeason(props.checkin)),\n  () => 'tr:w-600,pr-true,c-at_max',\n)\n\nonMounted(() => {\n  showSlider.value = true\n})\n\nfunction onClick(index: number) {\n  emit('open-gallery', images.value[index].id)\n}\n\nfunction onSlideChange() {\n  tracking.handlers?.detail.galleryNavigation()\n}\n</script>\n","<template>\n  <div\n    class=\"mb-4 grid aspect-[2/1] w-full grid-cols-4 grid-rows-2 gap-2 rounded\"\n  >\n    <div\n      class=\"col-start-1 col-end-3 row-start-1 row-end-3 h-full cursor-pointer bg-bgr-100\"\n      @click=\"openGalleryModal(images[0].id)\"\n    >\n      <img\n        class=\"h-full w-full rounded-l object-cover\"\n        :src=\"images[0].src\"\n        :alt=\"images[0].alt\"\n        :title=\"images[0].title\"\n      />\n    </div>\n    <div\n      class=\"col-start-3 col-end-5 row-start-1 row-end-2 h-full cursor-pointer bg-bgr-100\"\n      @click=\"openGalleryModal(images[1].id)\"\n    >\n      <img\n        class=\"h-full w-full rounded-tr object-cover\"\n        :src=\"images[1].src\"\n        :alt=\"images[1].alt\"\n        :title=\"images[1].title\"\n      />\n    </div>\n    <div\n      class=\"col-start-3 col-end-5 row-start-2 row-end-3 cursor-pointer bg-bgr-100 md:col-start-3 md:col-end-4\"\n      @click=\"openGalleryModal(images[2].id)\"\n    >\n      <img\n        class=\"h-full w-full rounded-br object-cover md:rounded-none\"\n        :src=\"images[2].src\"\n        :alt=\"images[2].alt\"\n        :title=\"images[2].title\"\n      />\n    </div>\n    <div\n      class=\"row-start-2 row-end-3 hidden cursor-pointer bg-bgr-100 md:col-start-4 md:col-end-5 md:block\"\n      @click=\"openGalleryModal(images[3].id)\"\n    >\n      <img\n        class=\"h-full w-full rounded-br object-cover\"\n        :src=\"images[3].src\"\n        :alt=\"images[3].alt\"\n        :title=\"images[3].title\"\n      />\n    </div>\n  </div>\n</template>\n<script setup lang=\"ts\">\nconst emit = defineEmits<{ 'open-gallery-modal': [id: string] }>()\n\nconst props = defineProps<{\n  accom: TranslatedAccommodation\n  checkin?: Date\n}>()\n\nconst SIZES = {\n  md: ['h-480', 'w-480', 'w-480', 'w-480'],\n  lg: ['h-640', 'w-640', 'h-320', 'h-320'],\n}\n\nconst screen = useScreen()\n\nconst transformations = computed(() =>\n  (screen.isLarge ? SIZES.lg : SIZES.md).map(\n    (size) => `tr:${size},cm-pad_resize,pr-true`,\n  ),\n)\n\nconst { images } = useAccomImageCollection(\n  () => toAccomData(props.accom, useSeason(props.checkin)),\n  (_, index) => transformations.value.at(index) ?? '',\n)\n\nfunction openGalleryModal(imgId: string) {\n  emit('open-gallery-modal', imgId)\n}\n</script>\n","<template>\n  <Teleport to=\"body\">\n    <div\n      v-bind=\"$attrs\"\n      class=\"fixed inset-0 z-[10] h-full\"\n      aria-labelledby=\"modal-title\"\n      role=\"dialog\"\n      aria-modal=\"true\"\n    >\n      <div\n        class=\"flex h-screen justify-center bg-gray-800 bg-opacity-80 transition-opacity\"\n        :class=\"{ 'items-center': !iframe }\"\n        @click=\"$emit('close')\"\n      >\n        <div :class=\"{ 'mt-8': iframe }\" @click.stop>\n          <!-- TODO: Slot für Header mit fallback value -->\n          <slot />\n          <!-- TODO: Slot für Footer mit fallback value -->\n        </div>\n      </div>\n    </div>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n  defineProps<{\n    iframe?: boolean\n    scrolling?: { onopen: boolean; onclose: boolean }\n  }>(),\n  {\n    iframe: false,\n    scrolling: () => {\n      return { onopen: true, onclose: true }\n    },\n  },\n)\n\ndefineEmits<{ (e: 'close'): void }>()\n\nonMounted(() => {\n  if (props.scrolling.onopen) {\n    document.documentElement.classList.add('!overflow-hidden')\n    document.body.style.maxWidth = `${document.body.clientWidth}px`\n  }\n})\n\nonBeforeUnmount(() => {\n  if (props.scrolling.onclose) {\n    document.documentElement.classList.remove('!overflow-hidden')\n    document.body.style.maxWidth = ''\n  }\n})\n</script>\n","/*!\n  * PhotoSwipe Lightbox 5.4.3 - https://photoswipe.com\n  * (c) 2023 Dmytro Semenov\n  */\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/**\r\n * @template {keyof HTMLElementTagNameMap} T\r\n * @param {string} className\r\n * @param {T} tagName\r\n * @param {Node} [appendToEl]\r\n * @returns {HTMLElementTagNameMap[T]}\r\n */\nfunction createElement(className, tagName, appendToEl) {\n  const el = document.createElement(tagName);\n\n  if (className) {\n    el.className = className;\n  }\n\n  if (appendToEl) {\n    appendToEl.appendChild(el);\n  }\n\n  return el;\n}\n/**\r\n * Get transform string\r\n *\r\n * @param {number} x\r\n * @param {number} [y]\r\n * @param {number} [scale]\r\n * @returns {string}\r\n */\n\nfunction toTransformString(x, y, scale) {\n  let propValue = `translate3d(${x}px,${y || 0}px,0)`;\n\n  if (scale !== undefined) {\n    propValue += ` scale3d(${scale},${scale},1)`;\n  }\n\n  return propValue;\n}\n/**\r\n * Apply width and height CSS properties to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {string | number} w\r\n * @param {string | number} h\r\n */\n\nfunction setWidthHeight(el, w, h) {\n  el.style.width = typeof w === 'number' ? `${w}px` : w;\n  el.style.height = typeof h === 'number' ? `${h}px` : h;\n}\n/** @typedef {LOAD_STATE[keyof LOAD_STATE]} LoadState */\n\n/** @type {{ IDLE: 'idle'; LOADING: 'loading'; LOADED: 'loaded'; ERROR: 'error' }} */\n\nconst LOAD_STATE = {\n  IDLE: 'idle',\n  LOADING: 'loading',\n  LOADED: 'loaded',\n  ERROR: 'error'\n};\n/**\r\n * Check if click or keydown event was dispatched\r\n * with a special key or via mouse wheel.\r\n *\r\n * @param {MouseEvent | KeyboardEvent} e\r\n * @returns {boolean}\r\n */\n\nfunction specialKeyUsed(e) {\n  return 'button' in e && e.button === 1 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey;\n}\n/**\r\n * Parse `gallery` or `children` options.\r\n *\r\n * @param {import('../photoswipe.js').ElementProvider} [option]\r\n * @param {string} [legacySelector]\r\n * @param {HTMLElement | Document} [parent]\r\n * @returns HTMLElement[]\r\n */\n\nfunction getElementsFromOption(option, legacySelector, parent = document) {\n  /** @type {HTMLElement[]} */\n  let elements = [];\n\n  if (option instanceof Element) {\n    elements = [option];\n  } else if (option instanceof NodeList || Array.isArray(option)) {\n    elements = Array.from(option);\n  } else {\n    const selector = typeof option === 'string' ? option : legacySelector;\n\n    if (selector) {\n      elements = Array.from(parent.querySelectorAll(selector));\n    }\n  }\n\n  return elements;\n}\n/**\r\n * Check if variable is PhotoSwipe class\r\n *\r\n * @param {any} fn\r\n * @returns {boolean}\r\n */\n\nfunction isPswpClass(fn) {\n  return typeof fn === 'function' && fn.prototype && fn.prototype.goTo;\n}\n/**\r\n * Check if browser is Safari\r\n *\r\n * @returns {boolean}\r\n */\n\nfunction isSafari() {\n  return !!(navigator.vendor && navigator.vendor.match(/apple/i));\n}\n\n/** @typedef {import('../lightbox/lightbox.js').default} PhotoSwipeLightbox */\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\n\n/** @typedef {import('../photoswipe.js').DataSource} DataSource */\n\n/** @typedef {import('../ui/ui-element.js').UIElementData} UIElementData */\n\n/** @typedef {import('../slide/content.js').default} ContentDefault */\n\n/** @typedef {import('../slide/slide.js').default} Slide */\n\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\n\n/** @typedef {import('../slide/zoom-level.js').default} ZoomLevel */\n\n/** @typedef {import('../slide/get-thumb-bounds.js').Bounds} Bounds */\n\n/**\r\n * Allow adding an arbitrary props to the Content\r\n * https://photoswipe.com/custom-content/#using-webp-image-format\r\n * @typedef {ContentDefault & Record<string, any>} Content\r\n */\n\n/** @typedef {{ x?: number; y?: number }} Point */\n\n/**\r\n * @typedef {Object} PhotoSwipeEventsMap https://photoswipe.com/events/\r\n *\r\n *\r\n * https://photoswipe.com/adding-ui-elements/\r\n *\r\n * @prop {undefined} uiRegister\r\n * @prop {{ data: UIElementData }} uiElementCreate\r\n *\r\n *\r\n * https://photoswipe.com/events/#initialization-events\r\n *\r\n * @prop {undefined} beforeOpen\r\n * @prop {undefined} firstUpdate\r\n * @prop {undefined} initialLayout\r\n * @prop {undefined} change\r\n * @prop {undefined} afterInit\r\n * @prop {undefined} bindEvents\r\n *\r\n *\r\n * https://photoswipe.com/events/#opening-or-closing-transition-events\r\n *\r\n * @prop {undefined} openingAnimationStart\r\n * @prop {undefined} openingAnimationEnd\r\n * @prop {undefined} closingAnimationStart\r\n * @prop {undefined} closingAnimationEnd\r\n *\r\n *\r\n * https://photoswipe.com/events/#closing-events\r\n *\r\n * @prop {undefined} close\r\n * @prop {undefined} destroy\r\n *\r\n *\r\n * https://photoswipe.com/events/#pointer-and-gesture-events\r\n *\r\n * @prop {{ originalEvent: PointerEvent }} pointerDown\r\n * @prop {{ originalEvent: PointerEvent }} pointerMove\r\n * @prop {{ originalEvent: PointerEvent }} pointerUp\r\n * @prop {{ bgOpacity: number }} pinchClose can be default prevented\r\n * @prop {{ panY: number }} verticalDrag can be default prevented\r\n *\r\n *\r\n * https://photoswipe.com/events/#slide-content-events\r\n *\r\n * @prop {{ content: Content }} contentInit\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoad can be default prevented\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoadImage can be default prevented\r\n * @prop {{ content: Content; slide: Slide; isError?: boolean }} loadComplete\r\n * @prop {{ content: Content; slide: Slide }} loadError\r\n * @prop {{ content: Content; width: number; height: number }} contentResize can be default prevented\r\n * @prop {{ content: Content; width: number; height: number; slide: Slide }} imageSizeChange\r\n * @prop {{ content: Content }} contentLazyLoad can be default prevented\r\n * @prop {{ content: Content }} contentAppend can be default prevented\r\n * @prop {{ content: Content }} contentActivate can be default prevented\r\n * @prop {{ content: Content }} contentDeactivate can be default prevented\r\n * @prop {{ content: Content }} contentRemove can be default prevented\r\n * @prop {{ content: Content }} contentDestroy can be default prevented\r\n *\r\n *\r\n * undocumented\r\n *\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} imageClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} bgClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} tapAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} doubleTapAction can be default prevented\r\n *\r\n * @prop {{ originalEvent: KeyboardEvent }} keydown can be default prevented\r\n * @prop {{ x: number; dragging: boolean }} moveMainScroll\r\n * @prop {{ slide: Slide }} firstZoomPan\r\n * @prop {{ slide: Slide | undefined, data: SlideData, index: number }} gettingData\r\n * @prop {undefined} beforeResize\r\n * @prop {undefined} resize\r\n * @prop {undefined} viewportSize\r\n * @prop {undefined} updateScrollOffset\r\n * @prop {{ slide: Slide }} slideInit\r\n * @prop {{ slide: Slide }} afterSetContent\r\n * @prop {{ slide: Slide }} slideLoad\r\n * @prop {{ slide: Slide }} appendHeavy can be default prevented\r\n * @prop {{ slide: Slide }} appendHeavyContent\r\n * @prop {{ slide: Slide }} slideActivate\r\n * @prop {{ slide: Slide }} slideDeactivate\r\n * @prop {{ slide: Slide }} slideDestroy\r\n * @prop {{ destZoomLevel: number, centerPoint: Point | undefined, transitionDuration: number | false | undefined }} beforeZoomTo\r\n * @prop {{ slide: Slide }} zoomPanUpdate\r\n * @prop {{ slide: Slide }} initialZoomPan\r\n * @prop {{ slide: Slide }} calcSlideSize\r\n * @prop {undefined} resolutionChanged\r\n * @prop {{ originalEvent: WheelEvent }} wheel can be default prevented\r\n * @prop {{ content: Content }} contentAppendImage can be default prevented\r\n * @prop {{ index: number; itemData: SlideData }} lazyLoadSlide can be default prevented\r\n * @prop {undefined} lazyLoad\r\n * @prop {{ slide: Slide }} calcBounds\r\n * @prop {{ zoomLevels: ZoomLevel, slideData: SlideData }} zoomLevelsUpdate\r\n *\r\n *\r\n * legacy\r\n *\r\n * @prop {undefined} init\r\n * @prop {undefined} initialZoomIn\r\n * @prop {undefined} initialZoomOut\r\n * @prop {undefined} initialZoomInEnd\r\n * @prop {undefined} initialZoomOutEnd\r\n * @prop {{ dataSource: DataSource | undefined, numItems: number }} numItems\r\n * @prop {{ itemData: SlideData; index: number }} itemData\r\n * @prop {{ index: number, itemData: SlideData, instance: PhotoSwipe }} thumbBounds\r\n */\n\n/**\r\n * @typedef {Object} PhotoSwipeFiltersMap https://photoswipe.com/filters/\r\n *\r\n * @prop {(numItems: number, dataSource: DataSource | undefined) => number} numItems\r\n * Modify the total amount of slides. Example on Data sources page.\r\n * https://photoswipe.com/filters/#numitems\r\n *\r\n * @prop {(itemData: SlideData, index: number) => SlideData} itemData\r\n * Modify slide item data. Example on Data sources page.\r\n * https://photoswipe.com/filters/#itemdata\r\n *\r\n * @prop {(itemData: SlideData, element: HTMLElement, linkEl: HTMLAnchorElement) => SlideData} domItemData\r\n * Modify item data when it's parsed from DOM element. Example on Data sources page.\r\n * https://photoswipe.com/filters/#domitemdata\r\n *\r\n * @prop {(clickedIndex: number, e: MouseEvent, instance: PhotoSwipeLightbox) => number} clickedIndex\r\n * Modify clicked gallery item index.\r\n * https://photoswipe.com/filters/#clickedindex\r\n *\r\n * @prop {(placeholderSrc: string | false, content: Content) => string | false} placeholderSrc\r\n * Modify placeholder image source.\r\n * https://photoswipe.com/filters/#placeholdersrc\r\n *\r\n * @prop {(isContentLoading: boolean, content: Content) => boolean} isContentLoading\r\n * Modify if the content is currently loading.\r\n * https://photoswipe.com/filters/#iscontentloading\r\n *\r\n * @prop {(isContentZoomable: boolean, content: Content) => boolean} isContentZoomable\r\n * Modify if the content can be zoomed.\r\n * https://photoswipe.com/filters/#iscontentzoomable\r\n *\r\n * @prop {(useContentPlaceholder: boolean, content: Content) => boolean} useContentPlaceholder\r\n * Modify if the placeholder should be used for the content.\r\n * https://photoswipe.com/filters/#usecontentplaceholder\r\n *\r\n * @prop {(isKeepingPlaceholder: boolean, content: Content) => boolean} isKeepingPlaceholder\r\n * Modify if the placeholder should be kept after the content is loaded.\r\n * https://photoswipe.com/filters/#iskeepingplaceholder\r\n *\r\n *\r\n * @prop {(contentErrorElement: HTMLElement, content: Content) => HTMLElement} contentErrorElement\r\n * Modify an element when the content has error state (for example, if image cannot be loaded).\r\n * https://photoswipe.com/filters/#contenterrorelement\r\n *\r\n * @prop {(element: HTMLElement, data: UIElementData) => HTMLElement} uiElement\r\n * Modify a UI element that's being created.\r\n * https://photoswipe.com/filters/#uielement\r\n *\r\n * @prop {(thumbnail: HTMLElement | null | undefined, itemData: SlideData, index: number) => HTMLElement} thumbEl\r\n * Modify the thumbnail element from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbel\r\n *\r\n * @prop {(thumbBounds: Bounds | undefined, itemData: SlideData, index: number) => Bounds} thumbBounds\r\n * Modify the thumbnail bounds from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbbounds\r\n *\r\n * @prop {(srcsetSizesWidth: number, content: Content) => number} srcsetSizesWidth\r\n *\r\n * @prop {(preventPointerEvent: boolean, event: PointerEvent, pointerType: string) => boolean} preventPointerEvent\r\n *\r\n */\n\n/**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @typedef {{ fn: PhotoSwipeFiltersMap[T], priority: number }} Filter\r\n */\n\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {PhotoSwipeEventsMap[T] extends undefined ? PhotoSwipeEvent<T> : PhotoSwipeEvent<T> & PhotoSwipeEventsMap[T]} AugmentedEvent\r\n */\n\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {(event: AugmentedEvent<T>) => void} EventCallback\r\n */\n\n/**\r\n * Base PhotoSwipe event object\r\n *\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n */\nclass PhotoSwipeEvent {\n  /**\r\n   * @param {T} type\r\n   * @param {PhotoSwipeEventsMap[T]} [details]\r\n   */\n  constructor(type, details) {\n    this.type = type;\n    this.defaultPrevented = false;\n\n    if (details) {\n      Object.assign(this, details);\n    }\n  }\n\n  preventDefault() {\n    this.defaultPrevented = true;\n  }\n\n}\n/**\r\n * PhotoSwipe base class that can listen and dispatch for events.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox, extended by base.js\r\n */\n\n\nclass Eventable {\n  constructor() {\n    /**\r\n     * @type {{ [T in keyof PhotoSwipeEventsMap]?: ((event: AugmentedEvent<T>) => void)[] }}\r\n     */\n    this._listeners = {};\n    /**\r\n     * @type {{ [T in keyof PhotoSwipeFiltersMap]?: Filter<T>[] }}\r\n     */\n\n    this._filters = {};\n    /** @type {PhotoSwipe | undefined} */\n\n    this.pswp = undefined;\n    /** @type {PhotoSwipeOptions | undefined} */\n\n    this.options = undefined;\n  }\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeFiltersMap[T]} fn\r\n   * @param {number} priority\r\n   */\n\n\n  addFilter(name, fn, priority = 100) {\n    var _this$_filters$name, _this$_filters$name2, _this$pswp;\n\n    if (!this._filters[name]) {\n      this._filters[name] = [];\n    }\n\n    (_this$_filters$name = this._filters[name]) === null || _this$_filters$name === void 0 || _this$_filters$name.push({\n      fn,\n      priority\n    });\n    (_this$_filters$name2 = this._filters[name]) === null || _this$_filters$name2 === void 0 || _this$_filters$name2.sort((f1, f2) => f1.priority - f2.priority);\n    (_this$pswp = this.pswp) === null || _this$pswp === void 0 || _this$pswp.addFilter(name, fn, priority);\n  }\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeFiltersMap[T]} fn\r\n   */\n\n\n  removeFilter(name, fn) {\n    if (this._filters[name]) {\n      // @ts-expect-error\n      this._filters[name] = this._filters[name].filter(filter => filter.fn !== fn);\n    }\n\n    if (this.pswp) {\n      this.pswp.removeFilter(name, fn);\n    }\n  }\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {Parameters<PhotoSwipeFiltersMap[T]>} args\r\n   * @returns {Parameters<PhotoSwipeFiltersMap[T]>[0]}\r\n   */\n\n\n  applyFilters(name, ...args) {\n    var _this$_filters$name3;\n\n    (_this$_filters$name3 = this._filters[name]) === null || _this$_filters$name3 === void 0 || _this$_filters$name3.forEach(filter => {\n      // @ts-expect-error\n      args[0] = filter.fn.apply(this, args);\n    });\n    return args[0];\n  }\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {EventCallback<T>} fn\r\n   */\n\n\n  on(name, fn) {\n    var _this$_listeners$name, _this$pswp2;\n\n    if (!this._listeners[name]) {\n      this._listeners[name] = [];\n    }\n\n    (_this$_listeners$name = this._listeners[name]) === null || _this$_listeners$name === void 0 || _this$_listeners$name.push(fn); // When binding events to lightbox,\n    // also bind events to PhotoSwipe Core,\n    // if it's open.\n\n    (_this$pswp2 = this.pswp) === null || _this$pswp2 === void 0 || _this$pswp2.on(name, fn);\n  }\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {EventCallback<T>} fn\r\n   */\n\n\n  off(name, fn) {\n    var _this$pswp3;\n\n    if (this._listeners[name]) {\n      // @ts-expect-error\n      this._listeners[name] = this._listeners[name].filter(listener => fn !== listener);\n    }\n\n    (_this$pswp3 = this.pswp) === null || _this$pswp3 === void 0 || _this$pswp3.off(name, fn);\n  }\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeEventsMap[T]} [details]\r\n   * @returns {AugmentedEvent<T>}\r\n   */\n\n\n  dispatch(name, details) {\n    var _this$_listeners$name2;\n\n    if (this.pswp) {\n      return this.pswp.dispatch(name, details);\n    }\n\n    const event =\n    /** @type {AugmentedEvent<T>} */\n    new PhotoSwipeEvent(name, details);\n    (_this$_listeners$name2 = this._listeners[name]) === null || _this$_listeners$name2 === void 0 || _this$_listeners$name2.forEach(listener => {\n      listener.call(this, event);\n    });\n    return event;\n  }\n\n}\n\nclass Placeholder {\n  /**\r\n   * @param {string | false} imageSrc\r\n   * @param {HTMLElement} container\r\n   */\n  constructor(imageSrc, container) {\n    // Create placeholder\n    // (stretched thumbnail or simple div behind the main image)\n\n    /** @type {HTMLImageElement | HTMLDivElement | null} */\n    this.element = createElement('pswp__img pswp__img--placeholder', imageSrc ? 'img' : 'div', container);\n\n    if (imageSrc) {\n      const imgEl =\n      /** @type {HTMLImageElement} */\n      this.element;\n      imgEl.decoding = 'async';\n      imgEl.alt = '';\n      imgEl.src = imageSrc;\n      imgEl.setAttribute('role', 'presentation');\n    }\n\n    this.element.setAttribute('aria-hidden', 'true');\n  }\n  /**\r\n   * @param {number} width\r\n   * @param {number} height\r\n   */\n\n\n  setDisplayedSize(width, height) {\n    if (!this.element) {\n      return;\n    }\n\n    if (this.element.tagName === 'IMG') {\n      // Use transform scale() to modify img placeholder size\n      // (instead of changing width/height directly).\n      // This helps with performance, specifically in iOS15 Safari.\n      setWidthHeight(this.element, 250, 'auto');\n      this.element.style.transformOrigin = '0 0';\n      this.element.style.transform = toTransformString(0, 0, width / 250);\n    } else {\n      setWidthHeight(this.element, width, height);\n    }\n  }\n\n  destroy() {\n    var _this$element;\n\n    if ((_this$element = this.element) !== null && _this$element !== void 0 && _this$element.parentNode) {\n      this.element.remove();\n    }\n\n    this.element = null;\n  }\n\n}\n\n/** @typedef {import('./slide.js').default} Slide */\n\n/** @typedef {import('./slide.js').SlideData} SlideData */\n\n/** @typedef {import('../core/base.js').default} PhotoSwipeBase */\n\n/** @typedef {import('../util/util.js').LoadState} LoadState */\n\nclass Content {\n  /**\r\n   * @param {SlideData} itemData Slide data\r\n   * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox instance\r\n   * @param {number} index\r\n   */\n  constructor(itemData, instance, index) {\n    this.instance = instance;\n    this.data = itemData;\n    this.index = index;\n    /** @type {HTMLImageElement | HTMLDivElement | undefined} */\n\n    this.element = undefined;\n    /** @type {Placeholder | undefined} */\n\n    this.placeholder = undefined;\n    /** @type {Slide | undefined} */\n\n    this.slide = undefined;\n    this.displayedImageWidth = 0;\n    this.displayedImageHeight = 0;\n    this.width = Number(this.data.w) || Number(this.data.width) || 0;\n    this.height = Number(this.data.h) || Number(this.data.height) || 0;\n    this.isAttached = false;\n    this.hasSlide = false;\n    this.isDecoding = false;\n    /** @type {LoadState} */\n\n    this.state = LOAD_STATE.IDLE;\n\n    if (this.data.type) {\n      this.type = this.data.type;\n    } else if (this.data.src) {\n      this.type = 'image';\n    } else {\n      this.type = 'html';\n    }\n\n    this.instance.dispatch('contentInit', {\n      content: this\n    });\n  }\n\n  removePlaceholder() {\n    if (this.placeholder && !this.keepPlaceholder()) {\n      // With delay, as image might be loaded, but not rendered\n      setTimeout(() => {\n        if (this.placeholder) {\n          this.placeholder.destroy();\n          this.placeholder = undefined;\n        }\n      }, 1000);\n    }\n  }\n  /**\r\n   * Preload content\r\n   *\r\n   * @param {boolean} isLazy\r\n   * @param {boolean} [reload]\r\n   */\n\n\n  load(isLazy, reload) {\n    if (this.slide && this.usePlaceholder()) {\n      if (!this.placeholder) {\n        const placeholderSrc = this.instance.applyFilters('placeholderSrc', // use  image-based placeholder only for the first slide,\n        // as rendering (even small stretched thumbnail) is an expensive operation\n        this.data.msrc && this.slide.isFirstSlide ? this.data.msrc : false, this);\n        this.placeholder = new Placeholder(placeholderSrc, this.slide.container);\n      } else {\n        const placeholderEl = this.placeholder.element; // Add placeholder to DOM if it was already created\n\n        if (placeholderEl && !placeholderEl.parentElement) {\n          this.slide.container.prepend(placeholderEl);\n        }\n      }\n    }\n\n    if (this.element && !reload) {\n      return;\n    }\n\n    if (this.instance.dispatch('contentLoad', {\n      content: this,\n      isLazy\n    }).defaultPrevented) {\n      return;\n    }\n\n    if (this.isImageContent()) {\n      this.element = createElement('pswp__img', 'img'); // Start loading only after width is defined, as sizes might depend on it.\n      // Due to Safari feature, we must define sizes before srcset.\n\n      if (this.displayedImageWidth) {\n        this.loadImage(isLazy);\n      }\n    } else {\n      this.element = createElement('pswp__content', 'div');\n      this.element.innerHTML = this.data.html || '';\n    }\n\n    if (reload && this.slide) {\n      this.slide.updateContentSize(true);\n    }\n  }\n  /**\r\n   * Preload image\r\n   *\r\n   * @param {boolean} isLazy\r\n   */\n\n\n  loadImage(isLazy) {\n    var _this$data$src, _this$data$alt;\n\n    if (!this.isImageContent() || !this.element || this.instance.dispatch('contentLoadImage', {\n      content: this,\n      isLazy\n    }).defaultPrevented) {\n      return;\n    }\n\n    const imageElement =\n    /** @type HTMLImageElement */\n    this.element;\n    this.updateSrcsetSizes();\n\n    if (this.data.srcset) {\n      imageElement.srcset = this.data.srcset;\n    }\n\n    imageElement.src = (_this$data$src = this.data.src) !== null && _this$data$src !== void 0 ? _this$data$src : '';\n    imageElement.alt = (_this$data$alt = this.data.alt) !== null && _this$data$alt !== void 0 ? _this$data$alt : '';\n    this.state = LOAD_STATE.LOADING;\n\n    if (imageElement.complete) {\n      this.onLoaded();\n    } else {\n      imageElement.onload = () => {\n        this.onLoaded();\n      };\n\n      imageElement.onerror = () => {\n        this.onError();\n      };\n    }\n  }\n  /**\r\n   * Assign slide to content\r\n   *\r\n   * @param {Slide} slide\r\n   */\n\n\n  setSlide(slide) {\n    this.slide = slide;\n    this.hasSlide = true;\n    this.instance = slide.pswp; // todo: do we need to unset slide?\n  }\n  /**\r\n   * Content load success handler\r\n   */\n\n\n  onLoaded() {\n    this.state = LOAD_STATE.LOADED;\n\n    if (this.slide && this.element) {\n      this.instance.dispatch('loadComplete', {\n        slide: this.slide,\n        content: this\n      }); // if content is reloaded\n\n      if (this.slide.isActive && this.slide.heavyAppended && !this.element.parentNode) {\n        this.append();\n        this.slide.updateContentSize(true);\n      }\n\n      if (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR) {\n        this.removePlaceholder();\n      }\n    }\n  }\n  /**\r\n   * Content load error handler\r\n   */\n\n\n  onError() {\n    this.state = LOAD_STATE.ERROR;\n\n    if (this.slide) {\n      this.displayError();\n      this.instance.dispatch('loadComplete', {\n        slide: this.slide,\n        isError: true,\n        content: this\n      });\n      this.instance.dispatch('loadError', {\n        slide: this.slide,\n        content: this\n      });\n    }\n  }\n  /**\r\n   * @returns {Boolean} If the content is currently loading\r\n   */\n\n\n  isLoading() {\n    return this.instance.applyFilters('isContentLoading', this.state === LOAD_STATE.LOADING, this);\n  }\n  /**\r\n   * @returns {Boolean} If the content is in error state\r\n   */\n\n\n  isError() {\n    return this.state === LOAD_STATE.ERROR;\n  }\n  /**\r\n   * @returns {boolean} If the content is image\r\n   */\n\n\n  isImageContent() {\n    return this.type === 'image';\n  }\n  /**\r\n   * Update content size\r\n   *\r\n   * @param {Number} width\r\n   * @param {Number} height\r\n   */\n\n\n  setDisplayedSize(width, height) {\n    if (!this.element) {\n      return;\n    }\n\n    if (this.placeholder) {\n      this.placeholder.setDisplayedSize(width, height);\n    }\n\n    if (this.instance.dispatch('contentResize', {\n      content: this,\n      width,\n      height\n    }).defaultPrevented) {\n      return;\n    }\n\n    setWidthHeight(this.element, width, height);\n\n    if (this.isImageContent() && !this.isError()) {\n      const isInitialSizeUpdate = !this.displayedImageWidth && width;\n      this.displayedImageWidth = width;\n      this.displayedImageHeight = height;\n\n      if (isInitialSizeUpdate) {\n        this.loadImage(false);\n      } else {\n        this.updateSrcsetSizes();\n      }\n\n      if (this.slide) {\n        this.instance.dispatch('imageSizeChange', {\n          slide: this.slide,\n          width,\n          height,\n          content: this\n        });\n      }\n    }\n  }\n  /**\r\n   * @returns {boolean} If the content can be zoomed\r\n   */\n\n\n  isZoomable() {\n    return this.instance.applyFilters('isContentZoomable', this.isImageContent() && this.state !== LOAD_STATE.ERROR, this);\n  }\n  /**\r\n   * Update image srcset sizes attribute based on width and height\r\n   */\n\n\n  updateSrcsetSizes() {\n    // Handle srcset sizes attribute.\n    //\n    // Never lower quality, if it was increased previously.\n    // Chrome does this automatically, Firefox and Safari do not,\n    // so we store largest used size in dataset.\n    if (!this.isImageContent() || !this.element || !this.data.srcset) {\n      return;\n    }\n\n    const image =\n    /** @type HTMLImageElement */\n    this.element;\n    const sizesWidth = this.instance.applyFilters('srcsetSizesWidth', this.displayedImageWidth, this);\n\n    if (!image.dataset.largestUsedSize || sizesWidth > parseInt(image.dataset.largestUsedSize, 10)) {\n      image.sizes = sizesWidth + 'px';\n      image.dataset.largestUsedSize = String(sizesWidth);\n    }\n  }\n  /**\r\n   * @returns {boolean} If content should use a placeholder (from msrc by default)\r\n   */\n\n\n  usePlaceholder() {\n    return this.instance.applyFilters('useContentPlaceholder', this.isImageContent(), this);\n  }\n  /**\r\n   * Preload content with lazy-loading param\r\n   */\n\n\n  lazyLoad() {\n    if (this.instance.dispatch('contentLazyLoad', {\n      content: this\n    }).defaultPrevented) {\n      return;\n    }\n\n    this.load(true);\n  }\n  /**\r\n   * @returns {boolean} If placeholder should be kept after content is loaded\r\n   */\n\n\n  keepPlaceholder() {\n    return this.instance.applyFilters('isKeepingPlaceholder', this.isLoading(), this);\n  }\n  /**\r\n   * Destroy the content\r\n   */\n\n\n  destroy() {\n    this.hasSlide = false;\n    this.slide = undefined;\n\n    if (this.instance.dispatch('contentDestroy', {\n      content: this\n    }).defaultPrevented) {\n      return;\n    }\n\n    this.remove();\n\n    if (this.placeholder) {\n      this.placeholder.destroy();\n      this.placeholder = undefined;\n    }\n\n    if (this.isImageContent() && this.element) {\n      this.element.onload = null;\n      this.element.onerror = null;\n      this.element = undefined;\n    }\n  }\n  /**\r\n   * Display error message\r\n   */\n\n\n  displayError() {\n    if (this.slide) {\n      var _this$instance$option, _this$instance$option2;\n\n      let errorMsgEl = createElement('pswp__error-msg', 'div');\n      errorMsgEl.innerText = (_this$instance$option = (_this$instance$option2 = this.instance.options) === null || _this$instance$option2 === void 0 ? void 0 : _this$instance$option2.errorMsg) !== null && _this$instance$option !== void 0 ? _this$instance$option : '';\n      errorMsgEl =\n      /** @type {HTMLDivElement} */\n      this.instance.applyFilters('contentErrorElement', errorMsgEl, this);\n      this.element = createElement('pswp__content pswp__error-msg-container', 'div');\n      this.element.appendChild(errorMsgEl);\n      this.slide.container.innerText = '';\n      this.slide.container.appendChild(this.element);\n      this.slide.updateContentSize(true);\n      this.removePlaceholder();\n    }\n  }\n  /**\r\n   * Append the content\r\n   */\n\n\n  append() {\n    if (this.isAttached || !this.element) {\n      return;\n    }\n\n    this.isAttached = true;\n\n    if (this.state === LOAD_STATE.ERROR) {\n      this.displayError();\n      return;\n    }\n\n    if (this.instance.dispatch('contentAppend', {\n      content: this\n    }).defaultPrevented) {\n      return;\n    }\n\n    const supportsDecode = ('decode' in this.element);\n\n    if (this.isImageContent()) {\n      // Use decode() on nearby slides\n      //\n      // Nearby slide images are in DOM and not hidden via display:none.\n      // However, they are placed offscreen (to the left and right side).\n      //\n      // Some browsers do not composite the image until it's actually visible,\n      // using decode() helps.\n      //\n      // You might ask \"why dont you just decode() and then append all images\",\n      // that's because I want to show image before it's fully loaded,\n      // as browser can render parts of image while it is loading.\n      // We do not do this in Safari due to partial loading bug.\n      if (supportsDecode && this.slide && (!this.slide.isActive || isSafari())) {\n        this.isDecoding = true; // purposefully using finally instead of then,\n        // as if srcset sizes changes dynamically - it may cause decode error\n\n        /** @type {HTMLImageElement} */\n\n        this.element.decode().catch(() => {}).finally(() => {\n          this.isDecoding = false;\n          this.appendImage();\n        });\n      } else {\n        this.appendImage();\n      }\n    } else if (this.slide && !this.element.parentNode) {\n      this.slide.container.appendChild(this.element);\n    }\n  }\n  /**\r\n   * Activate the slide,\r\n   * active slide is generally the current one,\r\n   * meaning the user can see it.\r\n   */\n\n\n  activate() {\n    if (this.instance.dispatch('contentActivate', {\n      content: this\n    }).defaultPrevented || !this.slide) {\n      return;\n    }\n\n    if (this.isImageContent() && this.isDecoding && !isSafari()) {\n      // add image to slide when it becomes active,\n      // even if it's not finished decoding\n      this.appendImage();\n    } else if (this.isError()) {\n      this.load(false, true); // try to reload\n    }\n\n    if (this.slide.holderElement) {\n      this.slide.holderElement.setAttribute('aria-hidden', 'false');\n    }\n  }\n  /**\r\n   * Deactivate the content\r\n   */\n\n\n  deactivate() {\n    this.instance.dispatch('contentDeactivate', {\n      content: this\n    });\n\n    if (this.slide && this.slide.holderElement) {\n      this.slide.holderElement.setAttribute('aria-hidden', 'true');\n    }\n  }\n  /**\r\n   * Remove the content from DOM\r\n   */\n\n\n  remove() {\n    this.isAttached = false;\n\n    if (this.instance.dispatch('contentRemove', {\n      content: this\n    }).defaultPrevented) {\n      return;\n    }\n\n    if (this.element && this.element.parentNode) {\n      this.element.remove();\n    }\n\n    if (this.placeholder && this.placeholder.element) {\n      this.placeholder.element.remove();\n    }\n  }\n  /**\r\n   * Append the image content to slide container\r\n   */\n\n\n  appendImage() {\n    if (!this.isAttached) {\n      return;\n    }\n\n    if (this.instance.dispatch('contentAppendImage', {\n      content: this\n    }).defaultPrevented) {\n      return;\n    } // ensure that element exists and is not already appended\n\n\n    if (this.slide && this.element && !this.element.parentNode) {\n      this.slide.container.appendChild(this.element);\n    }\n\n    if (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR) {\n      this.removePlaceholder();\n    }\n  }\n\n}\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\n\n/** @typedef {import('../core/base.js').default} PhotoSwipeBase */\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\n\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {PhotoSwipeBase} pswp\r\n * @returns {Point}\r\n */\nfunction getViewportSize(options, pswp) {\n  if (options.getViewportSizeFn) {\n    const newViewportSize = options.getViewportSizeFn(options, pswp);\n\n    if (newViewportSize) {\n      return newViewportSize;\n    }\n  }\n\n  return {\n    x: document.documentElement.clientWidth,\n    // TODO: height on mobile is very incosistent due to toolbar\n    // find a way to improve this\n    //\n    // document.documentElement.clientHeight - doesn't seem to work well\n    y: window.innerHeight\n  };\n}\n/**\r\n * Parses padding option.\r\n * Supported formats:\r\n *\r\n * // Object\r\n * padding: {\r\n *  top: 0,\r\n *  bottom: 0,\r\n *  left: 0,\r\n *  right: 0\r\n * }\r\n *\r\n * // A function that returns the object\r\n * paddingFn: (viewportSize, itemData, index) => {\r\n *  return {\r\n *    top: 0,\r\n *    bottom: 0,\r\n *    left: 0,\r\n *    right: 0\r\n *  };\r\n * }\r\n *\r\n * // Legacy variant\r\n * paddingLeft: 0,\r\n * paddingRight: 0,\r\n * paddingTop: 0,\r\n * paddingBottom: 0,\r\n *\r\n * @param {'left' | 'top' | 'bottom' | 'right'} prop\r\n * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n * @param {Point} viewportSize PhotoSwipe viewport size, for example: { x:800, y:600 }\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {number} index Slide index\r\n * @returns {number}\r\n */\n\nfunction parsePaddingOption(prop, options, viewportSize, itemData, index) {\n  let paddingValue = 0;\n\n  if (options.paddingFn) {\n    paddingValue = options.paddingFn(viewportSize, itemData, index)[prop];\n  } else if (options.padding) {\n    paddingValue = options.padding[prop];\n  } else {\n    const legacyPropName = 'padding' + prop[0].toUpperCase() + prop.slice(1); // @ts-expect-error\n\n    if (options[legacyPropName]) {\n      // @ts-expect-error\n      paddingValue = options[legacyPropName];\n    }\n  }\n\n  return Number(paddingValue) || 0;\n}\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {Point} viewportSize\r\n * @param {SlideData} itemData\r\n * @param {number} index\r\n * @returns {Point}\r\n */\n\nfunction getPanAreaSize(options, viewportSize, itemData, index) {\n  return {\n    x: viewportSize.x - parsePaddingOption('left', options, viewportSize, itemData, index) - parsePaddingOption('right', options, viewportSize, itemData, index),\n    y: viewportSize.y - parsePaddingOption('top', options, viewportSize, itemData, index) - parsePaddingOption('bottom', options, viewportSize, itemData, index)\n  };\n}\n\nconst MAX_IMAGE_WIDTH = 4000;\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\n\n/** @typedef {'fit' | 'fill' | number | ((zoomLevelObject: ZoomLevel) => number)} ZoomLevelOption */\n\n/**\r\n * Calculates zoom levels for specific slide.\r\n * Depends on viewport size and image size.\r\n */\n\nclass ZoomLevel {\n  /**\r\n   * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n   * @param {SlideData} itemData Slide data\r\n   * @param {number} index Slide index\r\n   * @param {PhotoSwipe} [pswp] PhotoSwipe instance, can be undefined if not initialized yet\r\n   */\n  constructor(options, itemData, index, pswp) {\n    this.pswp = pswp;\n    this.options = options;\n    this.itemData = itemData;\n    this.index = index;\n    /** @type { Point | null } */\n\n    this.panAreaSize = null;\n    /** @type { Point | null } */\n\n    this.elementSize = null;\n    this.fit = 1;\n    this.fill = 1;\n    this.vFill = 1;\n    this.initial = 1;\n    this.secondary = 1;\n    this.max = 1;\n    this.min = 1;\n  }\n  /**\r\n   * Calculate initial, secondary and maximum zoom level for the specified slide.\r\n   *\r\n   * It should be called when either image or viewport size changes.\r\n   *\r\n   * @param {number} maxWidth\r\n   * @param {number} maxHeight\r\n   * @param {Point} panAreaSize\r\n   */\n\n\n  update(maxWidth, maxHeight, panAreaSize) {\n    /** @type {Point} */\n    const elementSize = {\n      x: maxWidth,\n      y: maxHeight\n    };\n    this.elementSize = elementSize;\n    this.panAreaSize = panAreaSize;\n    const hRatio = panAreaSize.x / elementSize.x;\n    const vRatio = panAreaSize.y / elementSize.y;\n    this.fit = Math.min(1, hRatio < vRatio ? hRatio : vRatio);\n    this.fill = Math.min(1, hRatio > vRatio ? hRatio : vRatio); // zoom.vFill defines zoom level of the image\n    // when it has 100% of viewport vertical space (height)\n\n    this.vFill = Math.min(1, vRatio);\n    this.initial = this._getInitial();\n    this.secondary = this._getSecondary();\n    this.max = Math.max(this.initial, this.secondary, this._getMax());\n    this.min = Math.min(this.fit, this.initial, this.secondary);\n\n    if (this.pswp) {\n      this.pswp.dispatch('zoomLevelsUpdate', {\n        zoomLevels: this,\n        slideData: this.itemData\n      });\n    }\n  }\n  /**\r\n   * Parses user-defined zoom option.\r\n   *\r\n   * @private\r\n   * @param {'initial' | 'secondary' | 'max'} optionPrefix Zoom level option prefix (initial, secondary, max)\r\n   * @returns { number | undefined }\r\n   */\n\n\n  _parseZoomLevelOption(optionPrefix) {\n    const optionName =\n    /** @type {'initialZoomLevel' | 'secondaryZoomLevel' | 'maxZoomLevel'} */\n    optionPrefix + 'ZoomLevel';\n    const optionValue = this.options[optionName];\n\n    if (!optionValue) {\n      return;\n    }\n\n    if (typeof optionValue === 'function') {\n      return optionValue(this);\n    }\n\n    if (optionValue === 'fill') {\n      return this.fill;\n    }\n\n    if (optionValue === 'fit') {\n      return this.fit;\n    }\n\n    return Number(optionValue);\n  }\n  /**\r\n   * Get zoom level to which image will be zoomed after double-tap gesture,\r\n   * or when user clicks on zoom icon,\r\n   * or mouse-click on image itself.\r\n   * If you return 1 image will be zoomed to its original size.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\n\n\n  _getSecondary() {\n    let currZoomLevel = this._parseZoomLevelOption('secondary');\n\n    if (currZoomLevel) {\n      return currZoomLevel;\n    } // 3x of \"fit\" state, but not larger than original\n\n\n    currZoomLevel = Math.min(1, this.fit * 3);\n\n    if (this.elementSize && currZoomLevel * this.elementSize.x > MAX_IMAGE_WIDTH) {\n      currZoomLevel = MAX_IMAGE_WIDTH / this.elementSize.x;\n    }\n\n    return currZoomLevel;\n  }\n  /**\r\n   * Get initial image zoom level.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\n\n\n  _getInitial() {\n    return this._parseZoomLevelOption('initial') || this.fit;\n  }\n  /**\r\n   * Maximum zoom level when user zooms\r\n   * via zoom/pinch gesture,\r\n   * via cmd/ctrl-wheel or via trackpad.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\n\n\n  _getMax() {\n    // max zoom level is x4 from \"fit state\",\n    // used for zoom gesture and ctrl/trackpad zoom\n    return this._parseZoomLevelOption('max') || Math.max(1, this.fit * 4);\n  }\n\n}\n\n/**\r\n * Lazy-load an image\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox instance\r\n * @param {number} index\r\n * @returns {Content} Image that is being decoded or false.\r\n */\n\nfunction lazyLoadData(itemData, instance, index) {\n  const content = instance.createContentFromData(itemData, index);\n  /** @type {ZoomLevel | undefined} */\n\n  let zoomLevel;\n  const {\n    options\n  } = instance; // We need to know dimensions of the image to preload it,\n  // as it might use srcset, and we need to define sizes\n\n  if (options) {\n    zoomLevel = new ZoomLevel(options, itemData, -1);\n    let viewportSize;\n\n    if (instance.pswp) {\n      viewportSize = instance.pswp.viewportSize;\n    } else {\n      viewportSize = getViewportSize(options, instance);\n    }\n\n    const panAreaSize = getPanAreaSize(options, viewportSize, itemData, index);\n    zoomLevel.update(content.width, content.height, panAreaSize);\n  }\n\n  content.lazyLoad();\n\n  if (zoomLevel) {\n    content.setDisplayedSize(Math.ceil(content.width * zoomLevel.initial), Math.ceil(content.height * zoomLevel.initial));\n  }\n\n  return content;\n}\n/**\r\n * Lazy-loads specific slide.\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * By default, it loads image based on viewport size and initial zoom level.\r\n *\r\n * @param {number} index Slide index\r\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox eventable instance\r\n * @returns {Content | undefined}\r\n */\n\nfunction lazyLoadSlide(index, instance) {\n  const itemData = instance.getItemData(index);\n\n  if (instance.dispatch('lazyLoadSlide', {\n    index,\n    itemData\n  }).defaultPrevented) {\n    return;\n  }\n\n  return lazyLoadData(itemData, instance, index);\n}\n\n/** @typedef {import(\"../photoswipe.js\").default} PhotoSwipe */\n\n/** @typedef {import(\"../slide/slide.js\").SlideData} SlideData */\n\n/**\r\n * PhotoSwipe base class that can retrieve data about every slide.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox\r\n */\n\nclass PhotoSwipeBase extends Eventable {\n  /**\r\n   * Get total number of slides\r\n   *\r\n   * @returns {number}\r\n   */\n  getNumItems() {\n    var _this$options;\n\n    let numItems = 0;\n    const dataSource = (_this$options = this.options) === null || _this$options === void 0 ? void 0 : _this$options.dataSource;\n\n    if (dataSource && 'length' in dataSource) {\n      // may be an array or just object with length property\n      numItems = dataSource.length;\n    } else if (dataSource && 'gallery' in dataSource) {\n      // query DOM elements\n      if (!dataSource.items) {\n        dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\n      }\n\n      if (dataSource.items) {\n        numItems = dataSource.items.length;\n      }\n    } // legacy event, before filters were introduced\n\n\n    const event = this.dispatch('numItems', {\n      dataSource,\n      numItems\n    });\n    return this.applyFilters('numItems', event.numItems, dataSource);\n  }\n  /**\r\n   * @param {SlideData} slideData\r\n   * @param {number} index\r\n   * @returns {Content}\r\n   */\n\n\n  createContentFromData(slideData, index) {\n    return new Content(slideData, this, index);\n  }\n  /**\r\n   * Get item data by index.\r\n   *\r\n   * \"item data\" should contain normalized information that PhotoSwipe needs to generate a slide.\r\n   * For example, it may contain properties like\r\n   * `src`, `srcset`, `w`, `h`, which will be used to generate a slide with image.\r\n   *\r\n   * @param {number} index\r\n   * @returns {SlideData}\r\n   */\n\n\n  getItemData(index) {\n    var _this$options2;\n\n    const dataSource = (_this$options2 = this.options) === null || _this$options2 === void 0 ? void 0 : _this$options2.dataSource;\n    /** @type {SlideData | HTMLElement} */\n\n    let dataSourceItem = {};\n\n    if (Array.isArray(dataSource)) {\n      // Datasource is an array of elements\n      dataSourceItem = dataSource[index];\n    } else if (dataSource && 'gallery' in dataSource) {\n      // dataSource has gallery property,\n      // thus it was created by Lightbox, based on\n      // gallery and children options\n      // query DOM elements\n      if (!dataSource.items) {\n        dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\n      }\n\n      dataSourceItem = dataSource.items[index];\n    }\n\n    let itemData = dataSourceItem;\n\n    if (itemData instanceof Element) {\n      itemData = this._domElementToItemData(itemData);\n    } // Dispatching the itemData event,\n    // it's a legacy verion before filters were introduced\n\n\n    const event = this.dispatch('itemData', {\n      itemData: itemData || {},\n      index\n    });\n    return this.applyFilters('itemData', event.itemData, index);\n  }\n  /**\r\n   * Get array of gallery DOM elements,\r\n   * based on childSelector and gallery element.\r\n   *\r\n   * @param {HTMLElement} galleryElement\r\n   * @returns {HTMLElement[]}\r\n   */\n\n\n  _getGalleryDOMElements(galleryElement) {\n    var _this$options3, _this$options4;\n\n    if ((_this$options3 = this.options) !== null && _this$options3 !== void 0 && _this$options3.children || (_this$options4 = this.options) !== null && _this$options4 !== void 0 && _this$options4.childSelector) {\n      return getElementsFromOption(this.options.children, this.options.childSelector, galleryElement) || [];\n    }\n\n    return [galleryElement];\n  }\n  /**\r\n   * Converts DOM element to item data object.\r\n   *\r\n   * @param {HTMLElement} element DOM element\r\n   * @returns {SlideData}\r\n   */\n\n\n  _domElementToItemData(element) {\n    /** @type {SlideData} */\n    const itemData = {\n      element\n    };\n    const linkEl =\n    /** @type {HTMLAnchorElement} */\n    element.tagName === 'A' ? element : element.querySelector('a');\n\n    if (linkEl) {\n      // src comes from data-pswp-src attribute,\n      // if it's empty link href is used\n      itemData.src = linkEl.dataset.pswpSrc || linkEl.href;\n\n      if (linkEl.dataset.pswpSrcset) {\n        itemData.srcset = linkEl.dataset.pswpSrcset;\n      }\n\n      itemData.width = linkEl.dataset.pswpWidth ? parseInt(linkEl.dataset.pswpWidth, 10) : 0;\n      itemData.height = linkEl.dataset.pswpHeight ? parseInt(linkEl.dataset.pswpHeight, 10) : 0; // support legacy w & h properties\n\n      itemData.w = itemData.width;\n      itemData.h = itemData.height;\n\n      if (linkEl.dataset.pswpType) {\n        itemData.type = linkEl.dataset.pswpType;\n      }\n\n      const thumbnailEl = element.querySelector('img');\n\n      if (thumbnailEl) {\n        var _thumbnailEl$getAttri;\n\n        // msrc is URL to placeholder image that's displayed before large image is loaded\n        // by default it's displayed only for the first slide\n        itemData.msrc = thumbnailEl.currentSrc || thumbnailEl.src;\n        itemData.alt = (_thumbnailEl$getAttri = thumbnailEl.getAttribute('alt')) !== null && _thumbnailEl$getAttri !== void 0 ? _thumbnailEl$getAttri : '';\n      }\n\n      if (linkEl.dataset.pswpCropped || linkEl.dataset.cropped) {\n        itemData.thumbCropped = true;\n      }\n    }\n\n    return this.applyFilters('domItemData', itemData, element, linkEl);\n  }\n  /**\r\n   * Lazy-load by slide data\r\n   *\r\n   * @param {SlideData} itemData Data about the slide\r\n   * @param {number} index\r\n   * @returns {Content} Image that is being decoded or false.\r\n   */\n\n\n  lazyLoadData(itemData, index) {\n    return lazyLoadData(itemData, this, index);\n  }\n\n}\n\n/**\r\n * @template T\r\n * @typedef {import('../types.js').Type<T>} Type<T>\r\n */\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\n\n/** @typedef {import('../photoswipe.js').DataSource} DataSource */\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/** @typedef {import('../slide/content.js').default} Content */\n\n/** @typedef {import('../core/eventable.js').PhotoSwipeEventsMap} PhotoSwipeEventsMap */\n\n/** @typedef {import('../core/eventable.js').PhotoSwipeFiltersMap} PhotoSwipeFiltersMap */\n\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {import('../core/eventable.js').EventCallback<T>} EventCallback<T>\r\n */\n\n/**\r\n * PhotoSwipe Lightbox\r\n *\r\n * - If user has unsupported browser it falls back to default browser action (just opens URL)\r\n * - Binds click event to links that should open PhotoSwipe\r\n * - parses DOM strcture for PhotoSwipe (retrieves large image URLs and sizes)\r\n * - Initializes PhotoSwipe\r\n *\r\n *\r\n * Loader options use the same object as PhotoSwipe, and supports such options:\r\n *\r\n * gallery - Element | Element[] | NodeList | string selector for the gallery element\r\n * children - Element | Element[] | NodeList | string selector for the gallery children\r\n *\r\n */\n\nclass PhotoSwipeLightbox extends PhotoSwipeBase {\n  /**\r\n   * @param {PhotoSwipeOptions} [options]\r\n   */\n  constructor(options) {\n    super();\n    /** @type {PhotoSwipeOptions} */\n\n    this.options = options || {};\n    this._uid = 0;\n    this.shouldOpen = false;\n    /**\r\n     * @private\r\n     * @type {Content | undefined}\r\n     */\n\n    this._preloadedContent = undefined;\n    this.onThumbnailsClick = this.onThumbnailsClick.bind(this);\n  }\n  /**\r\n   * Initialize lightbox, should be called only once.\r\n   * It's not included in the main constructor, so you may bind events before it.\r\n   */\n\n\n  init() {\n    // Bind click events to each gallery\n    getElementsFromOption(this.options.gallery, this.options.gallerySelector).forEach(galleryElement => {\n      galleryElement.addEventListener('click', this.onThumbnailsClick, false);\n    });\n  }\n  /**\r\n   * @param {MouseEvent} e\r\n   */\n\n\n  onThumbnailsClick(e) {\n    // Exit and allow default browser action if:\n    if (specialKeyUsed(e) // ... if clicked with a special key (ctrl/cmd...)\n    || window.pswp) {\n      // ... if PhotoSwipe is already open\n      return;\n    } // If both clientX and clientY are 0 or not defined,\n    // the event is likely triggered by keyboard,\n    // so we do not pass the initialPoint\n    //\n    // Note that some screen readers emulate the mouse position,\n    // so it's not the ideal way to detect them.\n    //\n\n    /** @type {Point | null} */\n\n\n    let initialPoint = {\n      x: e.clientX,\n      y: e.clientY\n    };\n\n    if (!initialPoint.x && !initialPoint.y) {\n      initialPoint = null;\n    }\n\n    let clickedIndex = this.getClickedIndex(e);\n    clickedIndex = this.applyFilters('clickedIndex', clickedIndex, e, this);\n    /** @type {DataSource} */\n\n    const dataSource = {\n      gallery:\n      /** @type {HTMLElement} */\n      e.currentTarget\n    };\n\n    if (clickedIndex >= 0) {\n      e.preventDefault();\n      this.loadAndOpen(clickedIndex, dataSource, initialPoint);\n    }\n  }\n  /**\r\n   * Get index of gallery item that was clicked.\r\n   *\r\n   * @param {MouseEvent} e click event\r\n   * @returns {number}\r\n   */\n\n\n  getClickedIndex(e) {\n    // legacy option\n    if (this.options.getClickedIndexFn) {\n      return this.options.getClickedIndexFn.call(this, e);\n    }\n\n    const clickedTarget =\n    /** @type {HTMLElement} */\n    e.target;\n    const childElements = getElementsFromOption(this.options.children, this.options.childSelector,\n    /** @type {HTMLElement} */\n    e.currentTarget);\n    const clickedChildIndex = childElements.findIndex(child => child === clickedTarget || child.contains(clickedTarget));\n\n    if (clickedChildIndex !== -1) {\n      return clickedChildIndex;\n    } else if (this.options.children || this.options.childSelector) {\n      // click wasn't on a child element\n      return -1;\n    } // There is only one item (which is the gallery)\n\n\n    return 0;\n  }\n  /**\r\n   * Load and open PhotoSwipe\r\n   *\r\n   * @param {number} index\r\n   * @param {DataSource} [dataSource]\r\n   * @param {Point | null} [initialPoint]\r\n   * @returns {boolean}\r\n   */\n\n\n  loadAndOpen(index, dataSource, initialPoint) {\n    // Check if the gallery is already open\n    if (window.pswp || !this.options) {\n      return false;\n    } // Use the first gallery element if dataSource is not provided\n\n\n    if (!dataSource && this.options.gallery && this.options.children) {\n      const galleryElements = getElementsFromOption(this.options.gallery);\n\n      if (galleryElements[0]) {\n        dataSource = {\n          gallery: galleryElements[0]\n        };\n      }\n    } // set initial index\n\n\n    this.options.index = index; // define options for PhotoSwipe constructor\n\n    this.options.initialPointerPos = initialPoint;\n    this.shouldOpen = true;\n    this.preload(index, dataSource);\n    return true;\n  }\n  /**\r\n   * Load the main module and the slide content by index\r\n   *\r\n   * @param {number} index\r\n   * @param {DataSource} [dataSource]\r\n   */\n\n\n  preload(index, dataSource) {\n    const {\n      options\n    } = this;\n\n    if (dataSource) {\n      options.dataSource = dataSource;\n    } // Add the main module\n\n    /** @type {Promise<Type<PhotoSwipe>>[]} */\n\n\n    const promiseArray = [];\n    const pswpModuleType = typeof options.pswpModule;\n\n    if (isPswpClass(options.pswpModule)) {\n      promiseArray.push(Promise.resolve(\n      /** @type {Type<PhotoSwipe>} */\n      options.pswpModule));\n    } else if (pswpModuleType === 'string') {\n      throw new Error('pswpModule as string is no longer supported');\n    } else if (pswpModuleType === 'function') {\n      promiseArray.push(\n      /** @type {() => Promise<Type<PhotoSwipe>>} */\n      options.pswpModule());\n    } else {\n      throw new Error('pswpModule is not valid');\n    } // Add custom-defined promise, if any\n\n\n    if (typeof options.openPromise === 'function') {\n      // allow developers to perform some task before opening\n      promiseArray.push(options.openPromise());\n    }\n\n    if (options.preloadFirstSlide !== false && index >= 0) {\n      this._preloadedContent = lazyLoadSlide(index, this);\n    } // Wait till all promises resolve and open PhotoSwipe\n\n\n    const uid = ++this._uid;\n    Promise.all(promiseArray).then(iterableModules => {\n      if (this.shouldOpen) {\n        const mainModule = iterableModules[0];\n\n        this._openPhotoswipe(mainModule, uid);\n      }\n    });\n  }\n  /**\r\n   * @private\r\n   * @param {Type<PhotoSwipe> | { default: Type<PhotoSwipe> }} module\r\n   * @param {number} uid\r\n   */\n\n\n  _openPhotoswipe(module, uid) {\n    // Cancel opening if UID doesn't match the current one\n    // (if user clicked on another gallery item before current was loaded).\n    //\n    // Or if shouldOpen flag is set to false\n    // (developer may modify it via public API)\n    if (uid !== this._uid && this.shouldOpen) {\n      return;\n    }\n\n    this.shouldOpen = false; // PhotoSwipe is already open\n\n    if (window.pswp) {\n      return;\n    }\n    /**\r\n     * Pass data to PhotoSwipe and open init\r\n     *\r\n     * @type {PhotoSwipe}\r\n     */\n\n\n    const pswp = typeof module === 'object' ? new module.default(this.options) // eslint-disable-line\n    : new module(this.options); // eslint-disable-line\n\n    this.pswp = pswp;\n    window.pswp = pswp; // map listeners from Lightbox to PhotoSwipe Core\n\n    /** @type {(keyof PhotoSwipeEventsMap)[]} */\n\n    Object.keys(this._listeners).forEach(name => {\n      var _this$_listeners$name;\n\n      (_this$_listeners$name = this._listeners[name]) === null || _this$_listeners$name === void 0 || _this$_listeners$name.forEach(fn => {\n        pswp.on(name,\n        /** @type {EventCallback<typeof name>} */\n        fn);\n      });\n    }); // same with filters\n\n    /** @type {(keyof PhotoSwipeFiltersMap)[]} */\n\n    Object.keys(this._filters).forEach(name => {\n      var _this$_filters$name;\n\n      (_this$_filters$name = this._filters[name]) === null || _this$_filters$name === void 0 || _this$_filters$name.forEach(filter => {\n        pswp.addFilter(name, filter.fn, filter.priority);\n      });\n    });\n\n    if (this._preloadedContent) {\n      pswp.contentLoader.addToCache(this._preloadedContent);\n      this._preloadedContent = undefined;\n    }\n\n    pswp.on('destroy', () => {\n      // clean up public variables\n      this.pswp = undefined;\n      delete window.pswp;\n    });\n    pswp.init();\n  }\n  /**\r\n   * Unbinds all events, closes PhotoSwipe if it's open.\r\n   */\n\n\n  destroy() {\n    var _this$pswp;\n\n    (_this$pswp = this.pswp) === null || _this$pswp === void 0 || _this$pswp.destroy();\n    this.shouldOpen = false;\n    this._listeners = {};\n    getElementsFromOption(this.options.gallery, this.options.gallerySelector).forEach(galleryElement => {\n      galleryElement.removeEventListener('click', this.onThumbnailsClick, false);\n    });\n  }\n\n}\n\nexport { PhotoSwipeLightbox as default };\n//# sourceMappingURL=photoswipe-lightbox.esm.js.map\n","<template>\n  <div class=\"relative\">\n    <WebccModal class=\"w-screen\" data-id=\"modal\" @close=\"handleClose\">\n      <div\n        v-if=\"mode === 'multi'\"\n        class=\"relative flex h-screen w-screen flex-col rounded bg-bgr px-4 py-4\"\n        @click.stop\n      >\n        <div\n          class=\"no-print absolute right-5 top-5 mx-auto flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-full\"\n          @click=\"handleGalleryClose\"\n        >\n          <WebccIcon class=\"h-6 w-6\" name=\"site/x\" />\n        </div>\n        <div\n          class=\"no-print mb-4 flex flex-col gap-1 px-4 md:flex-row md:items-center md:px-0\"\n        >\n          <div class=\"w-3/4\">\n            <span class=\"font-semibold text-txt-strongest\">{{\n              $t(`${trPrefix}images`, { n: images.length.toString() })\n            }}</span>\n            <span class=\"font-semibold text-txt-weak\">{{\n              $t(`${trPrefix}clickForFullsize`)\n            }}</span>\n          </div>\n          <div class=\"ml-auto flex gap-2 md:mr-12\">\n            <client-only v-if=\"showBookmark && useStorageReady()\">\n              <WebccButton\n                :variant=\"isBookmarked ? 'theme' : ''\"\n                icon=\"site/bookmark\"\n                icon-filled\n                class=\"flex items-center\"\n                size=\"sm\"\n                @click=\"handleBookmark\"\n              >\n                <span>{{\n                  $t(\n                    `${trPrefix}${isBookmarked ? 'bookmarkDel' : 'bookmarkAdd'}`,\n                  )\n                }}</span>\n              </WebccButton>\n            </client-only>\n            <DetailsSocialShare\n              v-if=\"showSocialShare\"\n              size=\"sm\"\n              @open=\"tracking.handlers?.detail.galleryOpenRecommend()\"\n            />\n          </div>\n        </div>\n        <section\n          id=\"section\"\n          class=\"grid h-full grid-cols-2 gap-2 overflow-y-auto\"\n        >\n          <div\n            v-for=\"(i, index) in images\"\n            :key=\"i.id\"\n            class=\"flex w-full justify-end even:justify-start\"\n          >\n            <img\n              ref=\"image\"\n              loading=\"lazy\"\n              :srcset=\"`${imgM(i.id)}, ${imgL(i.id)}, ${imgXL(i.id)}`\"\n              :src=\"imgDefault(i.id)\"\n              :title=\"i.title\"\n              :alt=\"i.alt\"\n              :sizes=\"sizes\"\n              class=\"swiper-lazy aspect-[4/3] max-h-[540px] cursor-pointer object-cover sm:aspect-[1/1] md:aspect-[4/3]\"\n              @click=\"\n                () => {\n                  openLightbox(index)\n                  tracking.handlers?.detail.galleryImageClick()\n                }\n              \"\n              @load=\"checkScrollTo(i.id, index)\"\n            />\n          </div>\n        </section>\n      </div>\n      <div v-else data-id=\"lightbox\">\n        <a\n          v-for=\"i in images\"\n          :key=\"i.id\"\n          :data-pswp-width=\"1600\"\n          :data-pswp-height=\"1200\"\n          :data-pswp-srcset=\"`${imgM(i.id)}, ${imgL(i.id)}, ${imgXL(i.id)}, ${img2XL(i.id)}`\"\n          :href=\"imgDefault(i.id)\"\n          target=\"_blank\"\n          rel=\"noreferrer\"\n        >\n        </a>\n      </div>\n    </WebccModal>\n    <WebccModal\n      v-if=\"share\"\n      :scrolling=\"{ onopen: false, onclose: false }\"\n      @close=\"share = false\"\n    >\n      <div\n        class=\"container-fluid-sm relative flex flex-col gap-4 rounded bg-bgr p-4\"\n      >\n        <div\n          class=\"absolute right-4 top-4 mx-auto flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-full\"\n          @click=\"share = false\"\n        ></div>\n        <div class=\"flex flex-row items-center justify-between\">\n          <span class=\"text-xl font-semibold\">{{\n            $t(`${trPrefix}share`)\n          }}</span>\n          <WebccIcon class=\"h-6 w-6\" name=\"site/x\" />\n        </div>\n        <div class=\"flex flex-row items-center gap-4\">\n          <div>\n            <img\n              class=\"h-24 rounded shadow\"\n              :src=\"\n                `${useRuntimeConfig().public.imagekitBase}/` +\n                images[0].id +\n                '/tr:h-96,cm-pad_resize,pr-true'\n              \"\n              :alt=\"images[0].alt\"\n              :title=\"images[0].title\"\n            />\n          </div>\n          <span>\n            {{ accom.name }}\n          </span>\n        </div>\n        <div class=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n          <WebccLink\n            anchor\n            absolute\n            :to=\"`https://www.facebook.com/sharer/sharer.php?u=${target}`\"\n            target=\"_blank\"\n            class=\"rounded-md border border-bgr-300 bg-bgr-200 px-4 py-8 text-txt shadow hover:bg-bgr-100 focus:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger\"\n          >\n            <div class=\"flex flex-row items-center gap-2\">\n              <WebccIcon\n                class=\"h-10 w-10 text-[#3b5998]\"\n                name=\"social/facebook-share\"\n              />\n              <span class=\"font-semibold\">{{ $t(`${trPrefix}facebook`) }}</span>\n            </div>\n          </WebccLink>\n          <WebccLink\n            anchor\n            absolute\n            :to=\"`https://x.com/intent/tweet?text=${target}`\"\n            target=\"_blank\"\n            class=\"rounded-md border border-bgr-300 bg-bgr-200 px-4 py-8 text-txt shadow hover:bg-bgr-100 focus:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger\"\n          >\n            <div class=\"flex flex-row items-center gap-2\">\n              <WebccIcon\n                class=\"h-10 w-10 text-[#000000]\"\n                name=\"social/x-logo-share\"\n              />\n              <span class=\"font-semibold\">{{ $t(`${trPrefix}twitter`) }}</span>\n            </div>\n          </WebccLink>\n          <WebccLink\n            anchor\n            absolute\n            :to=\"`mailto:?body=${target}`\"\n            target=\"_blank\"\n            class=\"rounded-md border border-bgr-300 bg-bgr-200 px-4 py-8 text-txt shadow hover:bg-bgr-100 focus:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger\"\n            @click.stop=\"tracking.handlers?.detail.recommendByMail()\"\n          >\n            <div class=\"flex flex-row items-center gap-2\">\n              <WebccIcon class=\"h-10 w-10\" name=\"social/mail-share\" filled />\n              <span class=\"font-semibold\">{{ $t(`${trPrefix}email`) }}</span>\n            </div>\n          </WebccLink>\n          <WebccLink\n            anchor\n            absolute\n            :to=\"whatsAppLink\"\n            target=\"_blank\"\n            class=\"rounded-md border border-bgr-300 bg-bgr-200 px-4 py-8 text-txt shadow hover:bg-bgr-100 focus:border-bgr-700 focus:bg-bgr-100 focus:text-txt-stronger\"\n          >\n            <div class=\"flex flex-row items-center gap-2\">\n              <WebccIcon class=\"h-10 w-10\" name=\"social/whatsapp\" filled />\n              <span class=\"font-semibold\">{{ $t(`${trPrefix}whatsapp`) }}</span>\n            </div>\n          </WebccLink>\n        </div>\n      </div>\n    </WebccModal>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { UIElementData } from 'photoswipe'\nimport PhotoSwipeLightbox from 'photoswipe/lightbox'\nimport 'photoswipe/style.css'\nimport type { TranslatedAccommodationWithPrice } from '~/resources/tracking/ecommerce'\n\nconst trPrefix = 'www.components.views.details.ModalGallery.'\n\nconst { t } = useI18n()\n\ninterface Props {\n  accom: TranslatedAccommodation\n  checkin?: Date\n  scrollToImg?: string\n  isBookmarked?: boolean\n  showBookmark?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  checkin: undefined,\n  scrollToImg: '',\n  isBookmarked: false,\n  showBookmark: true,\n})\n\nconst emit = defineEmits<{\n  close: []\n  'toggle-bookmark': []\n}>()\n\nconst tracking = useTracking()\n\n// Refs\n// const galleryOpen: Ref<boolean> = ref(false)\nconst mode: Ref<string> = ref('multi')\nconst target: Ref<string> = ref('')\nconst share: Ref<boolean> = ref(false)\nconst lightbox: Ref<PhotoSwipeLightbox | null> = ref(null)\nconst image = ref()\nconst { id: partnerid, jwt } = usePartner()\n\nconst addToWishlistEvt = useEventBus<AccommodationDto>('addToWishlist')\nconst deleteFromWishlistEvt =\n  useEventBus<AccommodationDto>('deleteFromWishlist')\n\nonMounted(() => {\n  target.value =\n    window.location.href.split('?')[0] +\n    (partnerid ? `?partnerid=${partnerid}` : '')\n  if (!lightbox.value) {\n    lightbox.value = new PhotoSwipeLightbox({\n      gallery: '[data-id=\"lightbox\"]',\n      children: 'a',\n      pswpModule: () => import('photoswipe'),\n      zoom: false,\n      close: true,\n      bgOpacity: 1,\n      bgClickAction: () => {\n        tracking.handlers?.detail.closeLayers()\n        lightbox.value?.pswp?.close()\n      },\n      clickToCloseNonZoomable: false,\n      appendToEl: document.querySelector('[data-id=\"modal\"]')! as HTMLElement,\n      closeSVG: `<svg class=\"text-txt-contrast\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-x\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>`,\n\n      closeTitle: t(`${trPrefix}close`),\n      arrowPrevTitle: t(`${trPrefix}previous`),\n      arrowNextTitle: t(`${trPrefix}next`),\n      errorMsg: t(`${trPrefix}loadError`),\n    })\n    lightbox.value.addFilter('isContentZoomable', () => {\n      return false\n    })\n    lightbox.value.addFilter(\n      'uiElement',\n      (element: HTMLElement, data: UIElementData) => {\n        if (data.name === 'arrowNext') {\n          element.addEventListener('click', () => {\n            tracking.handlers?.detail.lightboxNextImage()\n          })\n        } else if (data.name === 'arrowPrev') {\n          element.addEventListener('click', () => {\n            tracking.handlers?.detail.lightboxPreviousImage()\n          })\n        } else if (data.name === 'close') {\n          element.addEventListener('click', () => {\n            tracking.handlers?.detail.lightboxClose()\n          })\n        }\n        return element\n      },\n    )\n    lightbox.value.on('close', () => {\n      closeModal()\n    })\n    lightbox.value.on('uiRegister', () => {\n      if (props.showBookmark) {\n        lightbox.value?.pswp?.ui?.registerElement({\n          name: 'bookmark',\n          ariaLabel: '',\n          order: 9,\n          isButton: true,\n          html: props.isBookmarked\n            ? `<svg class=\"text-txt-contrast\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" ><path d=\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"></path></svg>`\n            : `<svg class=\"text-txt-contrast\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-bookmark\"><path d=\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"></path></svg>`,\n          onClick: (_: MouseEvent, el: HTMLElement) => {\n            el.innerHTML = props.isBookmarked\n              ? `<svg class=\"text-txt-contrast\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-bookmark\"><path d=\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"></path></svg>`\n              : `<svg class=\"text-txt-contrast\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" ><path d=\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"></path></svg>`\n            handleBookmark()\n          },\n        })\n      }\n      lightbox.value?.pswp?.ui?.registerElement({\n        name: 'share',\n        ariaLabel: '',\n        order: 9,\n        isButton: true,\n        html: `\n          <svg width=\"20\" height=\"20\" stroke=\"currentColor\" class=\"text-txt-contrast\" xmlns=\"http://www.w3.org/2000/svg\"\txmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 11.3386 11.3386\">\n            <path d=\"M9.09,7.18a1.9015,1.9015,0,0,0-1.5387.8151L4.0483,6.2436A1.8083,1.8083,0,0,0,4.15,5.67a1.8551,1.8551,0,0,0-.1033-.5826l3.502-1.7508A1.88,1.88,0,0,0,9.09,4.16,1.9248,1.9248,0,1,0,7.17,2.23a1.7972,1.7972,0,0,0,.1026.5736L3.7671,4.5557A1.9148,1.9148,0,0,0,2.22,3.74a1.9248,1.9248,0,0,0,0,3.85,1.8778,1.8778,0,0,0,1.551-.8136l3.501,1.75A1.8112,1.8112,0,0,0,7.17,9.1,1.9248,1.9248,0,1,0,9.09,7.18Zm0-6.27a1.3252,1.3252,0,1,1,0,2.65,1.2941,1.2941,0,0,1-1.1757-.7535A1.1659,1.1659,0,0,1,7.77,2.23,1.3221,1.3221,0,0,1,9.09.91ZM2.22,6.99a1.3252,1.3252,0,1,1,1.187-1.9067A1.2287,1.2287,0,0,1,3.55,5.67a1.1753,1.1753,0,0,1-.1509.59A1.2932,1.2932,0,0,1,2.22,6.99Zm6.87,3.44A1.3271,1.3271,0,0,1,7.77,9.1a1.1718,1.1718,0,0,1,.15-.5879,1.313,1.313,0,0,1,1.17-.7324,1.3252,1.3252,0,1,1,0,2.65Z\"/>\n          </svg>`,\n        onClick: () => {\n          if (!share.value) {\n            tracking.handlers?.detail.lightboxOpenRecommend()\n          }\n          share.value = true\n        },\n      })\n    })\n    lightbox.value.init()\n  }\n})\n\nonBeforeUnmount(() => {\n  if (lightbox.value) {\n    lightbox.value?.destroy()\n    lightbox.value = null\n  }\n})\n\nconst showSocialShare = computed(() => {\n  return !useParams().iframe\n})\n\nconst whatsAppLink = computed(\n  () =>\n    `https://api.whatsapp.com/send/?text=${t('www.components.views.details.SocialShare.whatsApp')}${target.value}`,\n)\n\nconst { images } = useAccomImageCollection(() =>\n  toAccomData(props.accom, useSeason(props.checkin)),\n)\n\nconst sizes: ComputedRef<string> = computed(() => {\n  return '(min-width: 769px) 1024px, (min-width: 577px) 768px, 420px'\n})\n\n// Functions\nfunction checkScrollTo(imgId: string, index: number) {\n  if (imgId === props.scrollToImg) {\n    nextTick(() => {\n      if (image.value && image.value[index])\n        image.value[index].scrollIntoView({ behavior: 'smooth' })\n    })\n  }\n}\n\nfunction closeModal() {\n  emit('close')\n}\n\nfunction imgDefault(id: string) {\n  return `${useRuntimeConfig().public.imagekitBase}/${id}/tr:h-450,w-600,pr-true,fo-auto 768w`\n}\n\nfunction img2XL(id: string) {\n  return `${useRuntimeConfig().public.imagekitBase}/${id}/tr:h-1200,w-1600,pr-true,fo-auto 1200w`\n}\n\nfunction imgXL(id: string) {\n  return `${useRuntimeConfig().public.imagekitBase}/${id}/tr:h-540,w-720,pr-true,fo-auto 1024w`\n}\n\nfunction imgL(id: string) {\n  return `${useRuntimeConfig().public.imagekitBase}/${id}/tr:h-450,w-600,pr-true,fo-auto 768w`\n}\n\nfunction imgM(id: string) {\n  return `${useRuntimeConfig().public.imagekitBase}/${id}/tr:h-340,w-450,pr-true,fo-auto 576w`\n}\n\nfunction openLightbox(index: number) {\n  mode.value = 'single'\n  nextTick(() => {\n    const gallery = document.querySelector('[data-id=\"lightbox\"]')\n    if (gallery instanceof HTMLElement) {\n      lightbox.value?.loadAndOpen(index, { gallery })\n    }\n  })\n}\n\nfunction handleBookmark() {\n  if (partnerid && jwt) {\n    processAsPartner()\n  } else {\n    addToWishlist()\n  }\n}\n\nfunction processAsPartner() {\n  const { ecommerce, detail } = tracking.handlers || {}\n  const accom = props.accom as TranslatedAccommodationWithPrice\n\n  if (props.isBookmarked) {\n    ecommerce?.removeFromWishlist([accom])\n    if (mode.value === 'single') detail?.galleryRemoveFavorite()\n  } else {\n    ecommerce?.addToWishlist([accom])\n    if (mode.value === 'single') detail?.galleryAddFavorite()\n  }\n\n  emit('toggle-bookmark')\n}\n\nfunction addToWishlist() {\n  if (props.isBookmarked) {\n    deleteFromWishlistEvt.emit({ code: props.accom.code })\n  } else {\n    addToWishlistEvt.emit({ code: props.accom.code })\n  }\n}\n\nfunction handleClose() {\n  tracking.handlers?.detail.closeLayers()\n  closeModal()\n}\n\nfunction handleGalleryClose() {\n  tracking.handlers?.detail.galleryClose()\n  closeModal()\n}\n</script>\n\n<style>\n.pswp__top-bar {\n  .bg-black-50 {\n    background-color: rgba(0, 0, 0, 0.5);\n  }\n}\n.pswp--touch .pswp__button--arrow {\n  visibility: visible;\n}\n\n@media print {\n  #__nuxt {\n    display: none !important;\n  }\n\n  [data-id='modal'] {\n    position: static !important;\n    overflow: visible !important;\n    box-shadow: none;\n    top: 0;\n    left: 0;\n  }\n\n  img {\n    max-width: 90% !important;\n    height: auto !important;\n  }\n\n  .items-center {\n    align-items: initial !important;\n  }\n\n  .no-print {\n    display: none !important;\n  }\n\n  .h-screen,\n  .h-full {\n    height: auto !important;\n  }\n\n  .overflow-y-auto {\n    overflow-y: initial !important;\n  }\n\n  .py-4,\n  .px-4 {\n    padding: 0 !important;\n  }\n\n  body,\n  html {\n    margin: 0;\n    padding: 0;\n  }\n}\n</style>\n","<template>\n  <div class=\"flex items-center justify-between text-txt-strong\">\n    <h1 class=\"flex flex-wrap items-center\">\n      <span class=\"mr-2 flex items-center\"\n        ><WebccIcon\n          v-for=\"s in accom?.evaluation.stars\"\n          :key=\"s\"\n          name=\"content/evaluation-star\"\n          class=\"mr-1 h-4 w-4\"\n      /></span>\n      <span class=\"mr-2 text-xl font-semibold text-txt-strong md:text-2xl\"\n        >{{ accom?.type.translation }} {{ accom?.name }}</span\n      >\n    </h1>\n    <span\n      v-if=\"showTopRated\"\n      class=\"whitespace-nowrap rounded bg-suc px-2 text-sm font-semibold uppercase text-suc-contrast\"\n      >{{ $t('www.components.views.details.Title.labels.toprated') }}</span\n    >\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst TOP_RATED_THRESHOLD = 4.5\n\nconst props = defineProps<{\n  accom: TranslatedAccommodation\n}>()\n\nconst showTopRated = computed(() => {\n  return props.accom.rating.overall >= TOP_RATED_THRESHOLD\n})\n</script>\n","<template>\n  <section\n    class=\"flex flex-wrap items-start justify-between divide-x divide-gray-300 text-xs sm:text-sm md:text-base\"\n  >\n    <div\n      v-for=\"{ icon, key, count } in features\"\n      :key=\"key\"\n      class=\"flex flex-grow flex-col items-center\"\n    >\n      <WebccIcon\n        :name=\"icon\"\n        class=\"h-6 w-6 fill-current text-thm sm:h-8 sm:w-8\"\n      />\n      <span>{{ $t(key, count) }}</span>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.Features.'\n\nconst props = defineProps<{\n  accom: TranslatedAccommodation\n}>()\n\nconst features = computed<\n  { icon: string; key: TranslationKey; count: number }[]\n>(() => {\n  const { pax, premises } = props.accom\n\n  return [\n    {\n      icon: 'attributes/feature-pax',\n      key: `${trPrefix}pax_s`,\n      count: pax.capacity,\n    },\n    {\n      icon: 'attributes/feature-rooms',\n      key: `${trPrefix}room_s`,\n      count: premises.rooms,\n    },\n    {\n      icon: 'attributes/feature-bedrooms',\n      key: `${trPrefix}bedroom_s`,\n      count: premises.bedrooms,\n    },\n    {\n      icon: 'attributes/feature-bathrooms',\n      key: `${trPrefix}bathroom_s`,\n      count: premises.bathrooms,\n    },\n  ]\n})\n</script>\n","<template>\n  <main class=\"flex flex-wrap\">\n    <!-- views -->\n    <div v-if=\"views.length > 0\" :class=\"viewsWidth\">\n      <WebccHeading\n        bold\n        color=\"txt\"\n        :level=\"5\"\n        :title=\"$t(`${trPrefix}views.heading`)\"\n      />\n      <ul :class=\"viewClasses\">\n        <li\n          v-for=\"view in views\"\n          :key=\"view\"\n          class=\"inline-flex w-full self-start py-1 pr-4 tracking-tight\"\n        >\n          <WebccIcon name=\"attributes/view\" class=\"mr-2 h-5 w-5 text-thm\" />\n          <span>{{ $t(`${trPrefix}views.${view}` as TranslationKey) }}</span>\n        </li>\n      </ul>\n    </div>\n    <!-- distances-->\n    <div v-if=\"sortedDistances.length > 0\" :class=\"distWidth\">\n      <WebccHeading\n        bold\n        color=\"txt\"\n        :level=\"5\"\n        :title=\"$t(`${trPrefix}distances.heading`)\"\n      />\n      <ul :class=\"distClasses\">\n        <li\n          v-for=\"d in sortedDistances\"\n          :key=\"d.name\"\n          class=\"inline-flex w-full self-start py-1 pr-4 tracking-tight\"\n        >\n          <WebccIcon\n            :name=\"`attributes/${d.icon}`\"\n            class=\"mr-2 h-5 w-5 text-thm\"\n          />\n          <span>{{\n            $t(`${trPrefix}distances.${d.name}` as TranslationKey, {\n              distance: distanceWithUnit(d.name),\n            })\n          }}</span>\n        </li>\n      </ul>\n    </div>\n    <!-- attributes -->\n    <div v-if=\"attrs.length > 0\" class=\"order-3 w-full\">\n      <WebccHeading\n        bold\n        color=\"txt\"\n        :level=\"5\"\n        :title=\"$t(`${trPrefix}equipment.heading`)\"\n      />\n      <ul class=\"gap-0 sm:columns-2 lg:flex lg:flex-wrap\">\n        <li\n          v-for=\"a in attrs\"\n          :key=\"a.name\"\n          class=\"inline-flex w-full self-start py-1 pr-4 tracking-tight lg:w-1/3\"\n        >\n          <WebccIcon\n            :name=\"`attributes/${a.icon}`\"\n            class=\"mr-2 h-5 w-5 text-thm\"\n          />\n          <span>{{\n            $t(`${trPrefix}equipment.${a.name}` as TranslationKey)\n          }}</span>\n        </li>\n      </ul>\n    </div>\n    <!-- sustainability attributes -->\n    <div v-if=\"sustattrs.length > 2\" class=\"order-4 w-full\">\n      <WebccHeading\n        bold\n        color=\"txt\"\n        :level=\"5\"\n        :title=\"$t(`${trPrefix}sustainability.heading`)\"\n      />\n      <ul class=\"gap-0 sm:columns-2 lg:flex lg:flex-wrap\">\n        <li\n          v-for=\"a in sustattrs\"\n          :key=\"a.name\"\n          class=\"inline-flex w-full self-start py-1 pr-4 tracking-tight lg:w-1/3\"\n        >\n          <WebccIcon\n            :name=\"`attributes/${a.icon}`\"\n            class=\"mr-2 h-5 w-5 text-thm\"\n          />\n          <span>{{\n            $t(`${trPrefix}sustainability.${a.name}` as TranslationKey)\n          }}</span>\n        </li>\n      </ul>\n    </div>\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.Attributes.'\n\nconst { t } = useI18n()\n\nconst icons: { [key: string]: any } = {\n  lake: 'dist-sea-lake-water',\n  patio: 'balcony',\n  pets_max: 'pets',\n  sea: 'dist-sea-lake-water',\n  single_garage: 'garage',\n  small_pets_max: 'pets',\n  small_pets: 'pets',\n  terrace: 'balcony',\n  whirlpool: 'hottub',\n}\n\nconst displaySchemes: { [key: string]: any } = {\n  '1and1': {\n    viewsWidth: 'w-full sm:w-1/2 lg:w-1/3',\n    distWidth: 'w-full sm:w-1/2 lg:w-2/3',\n    viewClasses: 'gap-0',\n    distClasses: 'gap-0',\n  },\n  '1and2': {\n    viewsWidth: 'w-full sm:w-1/2 lg:w-1/3',\n    distWidth: 'w-full sm:w-1/2 lg:w-2/3',\n    viewClasses: 'gap-0',\n    distClasses: 'gap-0 lg:flex',\n  },\n  '1and3+': {\n    viewsWidth: 'w-full sm:w-1/2 lg:w-1/3',\n    distWidth: 'w-full sm:w-1/2 lg:w-2/3',\n    viewClasses: 'gap-0',\n    distClasses: 'gap-0 lg:columns-2',\n  },\n  '2and1': {\n    viewsWidth: 'w-full sm:w-1/2 lg:w-2/3',\n    distWidth: 'w-full sm:w-1/2 lg:w-1/3',\n    viewClasses: 'columns-1 lg:flex gap-0',\n    distClasses: 'gap-0',\n  },\n  '2and2': {\n    viewsWidth: 'w-full sm:w-1/2 lg:w-1/3',\n    distWidth: 'w-full sm:w-1/2 lg:w-1/3',\n    viewClasses: 'gap-0',\n    distClasses: 'gap-0',\n  },\n  '2and3+': {\n    viewsWidth: 'w-full lg:w-1/3',\n    distWidth: 'w-full lg:w-2/3',\n    viewClasses: 'gap-0 sm:flex lg:block',\n    distClasses: 'gap-0 sm:columns-2',\n  },\n  '2and0': {\n    viewsWidth: 'w-full lg:w-2/3',\n    distWidth: 'w-full lg:w-2/3',\n    viewClasses: 'gap-0 sm:flex',\n    distClasses: 'gap-0 sm:flex',\n  },\n  '3and0': {\n    viewsWidth: 'w-full',\n    distWidth: 'w-full',\n    viewClasses: 'gap-0 sm:columns-2 lg:flex',\n    distClasses: 'gap-0 sm:columns-2 lg:flex',\n  },\n}\n\nconst viewsWidth = ref('w-full')\nconst distWidth = ref('w-full')\nconst viewClasses = ref('gap-0 sm:columns-2 lg:columns-3')\nconst distClasses = ref('gap-0 sm:columns-2 lg:columns-3')\n\ninterface Props {\n  attributes?: TranslatedAccommodation['attributes']\n  distances?: TranslatedAccommodation['distances']\n  themes?: string[]\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  attributes: () => {\n    return {}\n  },\n  distances: () => {\n    return {}\n  },\n  themes: () => [],\n})\n\nconst views = computed(() => {\n  return ['country_view', 'lake_view', 'mountain_view', 'sea_view'].filter(\n    (v) => props.attributes?.[v],\n  )\n})\n\nconst sortedDistances = computed(() => {\n  return ['center', 'public_transport', 'beach', 'sea', 'lake', 'golf', 'ski']\n    .filter((d) => props.distances?.[d] || props.distances?.[d] === 0)\n    .map((d) => ({\n      name: d,\n      distance: props.distances?.[d],\n      icon: icons?.[d] || `dist-${d}`,\n    }))\n})\n\nconst attrs = computed(() => {\n  const allowedAttrs = [\n    ['pets', 'small_pets_max', 'small_pets', 'pets_max'],\n    ['certified_fishing'],\n    [\n      props.attributes?.fishing && props.attributes?.certified_fishing\n        ? ''\n        : 'fishing',\n    ],\n    ['wlan'],\n    ['pool'],\n    ['dishwasher'],\n    ['washingmachine'],\n    ['tv'],\n    ['balcony', 'terrace', 'patio'],\n    ['aircondition'],\n    ['bbq'],\n    ['boat'],\n    ['fireplace'],\n    ['cots'],\n    ['sauna'],\n    ['hottub', 'whirlpool'],\n    ['garage'],\n    ['single_garage'],\n    ['parking'],\n    ['suitable_for_wheelchairs'],\n    ['nonsmoking'],\n    ['no_pets_allowed'],\n    ['workation'],\n  ]\n  return (\n    allowedAttrs\n      .filter((alist) => {\n        return alist.reduce((acc, allowedAttrs) => {\n          return (\n            acc ||\n            !!props.attributes[allowedAttrs] ||\n            props.themes?.includes(allowedAttrs)\n          )\n        }, false)\n      }) // accom muss mind. eines der attribute enthalten\n      // TODO: filter fishing if certified fishing\n      .map((alist) => ({ name: alist[0], icon: icons[alist[0]] || alist[0] }))\n  )\n})\n\nconst sustattrs = computed(() => {\n  const sustattrs = [\n    ['charging_station'],\n    ['double_glazed_windows'],\n    ['ecological_heating_system'],\n    ['green_space_garden'],\n    ['led_bulbs'],\n    ['solar_panels'],\n    ['recycling_station'],\n    ['renewable_electricity'],\n    ['water_efficient_showers', 'water_efficient_toilets'],\n  ]\n  return sustattrs\n    .filter((alist) => {\n      return alist.reduce((acc, sustattr) => {\n        return (\n          acc ||\n          !!props.attributes?.[sustattr] ||\n          props.themes?.includes(sustattr)\n        )\n      }, false)\n    })\n    .map((alist) => ({ name: alist[0], icon: icons[alist[0]] || alist[0] }))\n})\n\nlet scheme = ''\n\nif (views.value.length === 1 && sortedDistances.value.length === 1)\n  scheme = '1and1'\nif (views.value.length === 1 && sortedDistances.value.length <= 2)\n  scheme = '1and2'\nif (views.value.length === 1 && sortedDistances.value.length >= 3)\n  scheme = '1and3+'\nif (views.value.length === 2 && sortedDistances.value.length === 1)\n  scheme = '2and1'\nif (views.value.length === 2 && sortedDistances.value.length === 2)\n  scheme = '2and2'\nif (views.value.length === 2 && sortedDistances.value.length >= 3)\n  scheme = '2and3+'\nif (\n  (views.value.length === 2 && sortedDistances.value.length === 0) ||\n  (views.value.length === 0 && sortedDistances.value.length === 2)\n)\n  scheme = '2and0'\nif (\n  (views.value.length === 3 && sortedDistances.value.length === 0) ||\n  (views.value.length === 0 && sortedDistances.value.length === 3)\n)\n  scheme = '3and0'\n\nif (scheme !== '') {\n  const activeScheme = displaySchemes[scheme]\n\n  viewsWidth.value = activeScheme.viewsWidth\n  distWidth.value = activeScheme.distWidth\n  viewClasses.value = activeScheme.viewClasses\n  distClasses.value = activeScheme.distClasses\n}\n\nfunction distanceWithUnit(distance: string) {\n  const number = props.distances[distance]\n  if (number === 0) {\n    return t(`${trPrefix}distances.closeby`)\n  }\n  if (number < 1000) {\n    return `${formatNumber(number)}\\xA0m`\n  }\n  return `${formatNumber(number / 1000)}\\xA0km`\n}\n</script>\n","<!-- eslint-disable vue/no-v-html -->\n<template>\n  <div>\n    <div class=\"flex items-center\">\n      <WebccIcon\n        name=\"site/note\"\n        class=\"mr-4 h-12 w-12 shrink-0\"\n        :class=\"color(alertType)\"\n      />\n      <div>\n        <div v-if=\"title\" :class=\"color(alertType)\">\n          {{ $t(title as TranslationKey) }}\n        </div>\n        <div v-if=\"contentType === 'tr'\">\n          {{ $t(content as TranslationKey) }}\n        </div>\n        <div v-else-if=\"contentType === 'text'\" v-text=\"content\"></div>\n        <div v-else :class=\"styles\" v-html=\"content\"></div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n  alertType?: string\n  contentType?: string\n  title?: string\n  content?: string\n  styles?: string\n}\n\nwithDefaults(defineProps<Props>(), {\n  alertType: 'info',\n  contentType: 'text',\n  title: '',\n  content: 'Text',\n  styles: '',\n})\n\nfunction color(mType: string) {\n  return mType === 'error' ? 'text-err' : 'text-thm'\n}\n</script>\n","<!-- eslint-disable vue/no-v-html -->\n<template>\n  <div>\n    <div v-if=\"filteredDescriptions.length > 1\" class=\"mb-4\">\n      <ul class=\"flex flex-row justify-start gap-4 border-b border-bgr-400\">\n        <li\n          v-for=\"(d, index) in filteredDescriptions\"\n          :key=\"d.validFrom\"\n          class=\"flex cursor-pointer flex-row justify-center px-4 hover:text-thm\"\n          :class=\"{\n            'relative border-b-2 border-thm after:absolute after:left-1/2 after:top-full after:-ml-1 after:border-l-8 after:border-r-8 after:border-t-8 after:border-thm after:border-l-transparent after:border-r-transparent after:content-[\\'\\']':\n              index === activeIndex,\n          }\"\n          @click=\"clickedIndex = index\"\n        >\n          <span>\n            <template v-if=\"index > 0\">\n              <template v-if=\"index < filteredDescriptions.length - 1\">\n                <span>{{ $t(`${trPrefix}fromto`) }}</span>\n              </template>\n              <template v-else>\n                <span>{{ $t(`${trPrefix}to`) }}</span>\n              </template>\n              {{ formatDatetime(d.validFrom.toString()) }}\n            </template>\n            <template v-if=\"index < filteredDescriptions.length - 1\">\n              <span>{{ $t(`${trPrefix}to`) }}</span\n              >{{ formatDatetime(d.validTo.toString()) }}</template\n            >\n          </span>\n        </li>\n      </ul>\n    </div>\n    <div class=\"content\">\n      <template v-if=\"activeDescription && activeDescription.inside\">\n        <WebccHeading :title=\"$t(`${trPrefix}headings.inside`)\" :level=\"5\" />\n\n        <p\n          v-for=\"descriptionPart in activeDescription.inside\"\n          :key=\"descriptionPart\"\n          class=\"prose max-w-none\"\n          v-html=\"descriptionPart\"\n        ></p>\n      </template>\n\n      <template v-if=\"activeDescription && activeDescription.outside\">\n        <WebccHeading :title=\"$t(`${trPrefix}headings.outside`)\" :level=\"5\" />\n\n        <p\n          v-for=\"descriptionPart in activeDescription.outside\"\n          :key=\"descriptionPart\"\n          class=\"prose-md prose max-w-none\"\n          v-html=\"descriptionPart\"\n        ></p>\n      </template>\n      <!-- TODO: Die 'prose' class sorgt für die style Unterschiede im Textresourcen-Modus -->\n      <p class=\"prose-md prose max-w-none\">\n        {{ $t(`${trPrefix}trustMessage`) }}\n      </p>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.Description.'\n\ninterface Props {\n  descriptions?: Description[]\n  alerts?: Alert[]\n  checkin?: Date\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  descriptions: () => [],\n  alerts: () => [],\n  checkin: undefined,\n})\n\nconst clickedIndex = ref<number | null>(null)\nconst internalCheckIn = ref(props.checkin)\n\n// hu: Die Webcc-Api liefert Inside und Outside-Descriptions unsortiert\n// Mehrfache Inside und Outside-Descriptions haben nicht zwangsläufig identische valid-Dates, deshalb ist ein Abgleich erforderlich\nconst filteredDescriptions: ComputedRef<Description[]> = computed(() => {\n  // erster Durchlauf: finde alle unterschiedlichen validFrom Dates -> Zahl der validFrom Dates gleich Zahl der Abschnitte, finde maxValidTo\n  const startDates: string[] = []\n\n  let maxValidTo = '0000-00-00'\n\n  for (let i = 0; i < props.descriptions.length; i++) {\n    const startDate = props.descriptions[i].validFrom\n    if (!startDates.includes(startDate)) {\n      startDates.push(startDate)\n    }\n    maxValidTo =\n      props.descriptions[i].validTo > maxValidTo\n        ? props.descriptions[i].validTo\n        : maxValidTo\n  }\n  startDates.sort()\n\n  // zweiter Durchlauf: definiere End Dates der Abschnitte.\n  const descSorted: Description[] = []\n  for (let i = 0; i < startDates.length; i++) {\n    const newDescription = {} as Description\n    if (startDates[i + 1]) {\n      newDescription.validFrom = startDates[i]\n      const endDate = daysSub(startDates[i + 1], 1)\n      newDescription.validTo = toDate(endDate)\n    } else {\n      newDescription.validFrom = startDates[i]\n      newDescription.validTo = maxValidTo\n    }\n\n    descSorted.push(newDescription)\n  }\n  // dritter Durchlauf: Suche passende Descriptions zu den Abschnitten\n  for (let i = 0; i < descSorted.length; i++) {\n    let minEndDateInside = maxValidTo\n    let minEndDateOutside = maxValidTo\n    let idxInside = 999\n    let idxOutside = 999\n\n    for (let u = 0; u < props.descriptions.length; u++) {\n      const desc = props.descriptions[u]\n      // inside\n      if (desc.type === 'inside') {\n        if (\n          desc.validFrom <= descSorted[i].validFrom &&\n          desc.validFrom <= minEndDateInside &&\n          desc.validTo >= descSorted[i].validTo\n        ) {\n          idxInside = u\n          minEndDateInside = desc.validFrom\n        }\n      }\n      // outside\n      if (desc.type === 'outside') {\n        if (\n          desc.validFrom <= descSorted[i].validFrom &&\n          desc.validFrom <= minEndDateOutside &&\n          desc.validTo >= descSorted[i].validTo\n        ) {\n          idxOutside = u\n          minEndDateOutside = desc.validFrom\n        }\n      }\n    }\n    if (idxOutside !== 999) {\n      descSorted[i].outside = props.descriptions[idxOutside].value.split('●')\n    }\n    if (idxInside !== 999) {\n      descSorted[i].inside = props.descriptions[idxInside].value.split('●')\n    }\n  }\n  // Exclude descriptions that ended in the past\n  return descSorted.filter((desc) => inFuture(desc.validTo))\n})\n\nconst defaultIndex: ComputedRef<number> = computed(() => {\n  let index = 0\n\n  const date = internalCheckIn.value ? internalCheckIn.value : new Date()\n\n  const isoDate = toDate(date)\n\n  filteredDescriptions.value.forEach((description, i) => {\n    if (description.validFrom <= isoDate && description.validTo >= isoDate) {\n      index = i\n    }\n  })\n  return index\n})\n\nconst activeIndex: ComputedRef<number> = computed(() => {\n  return clickedIndex.value !== null ? clickedIndex.value : defaultIndex.value\n})\n\nconst activeDescription = computed(() => {\n  return filteredDescriptions.value[activeIndex.value]\n})\n\nwatch(internalCheckIn, (nv, ov) => {\n  if (nv !== ov) {\n    clickedIndex.value = null\n  }\n})\n\nonMounted(() => {\n  // console.log(' => DescriptionsLength:', this.descriptions.length)\n  // console.log(' => AccommodationDescription:', this.defaultIndex, this.description)\n  // console.log(' => arrivalDate in Description:', this.checkIn)\n})\n\n// function dateSort(a, b) {\n//   if (a[0] === b[0]) {\n//     return 0\n//   } else {\n//     return a[0] < b[0] ? -1 : 1\n//   }\n// }\n</script>\n\n<style lang=\"postcss\" scoped>\n/* @import '@/assets/styles/common/helpers.scss';\n@import '@/assets/styles/common/basic-vars.scss'; */\n\n/* $arrow-size: 6px; */\n\n.tabs li {\n  font-weight: 700;\n  /* a {\n    color: $color-text;\n  } */\n  /* &.is-active a {\n    color: $color-text-highlight;\n  } */\n}\n\n.tabs .is-active {\n  position: relative;\n}\n.tabs .is-active::before,\n.tabs .is-active::after {\n  content: '';\n  position: absolute;\n}\n.tabs .is-active::before {\n  /* border-bottom: 3px solid $color-company; */\n  bottom: -1px;\n  left: 0;\n  right: 0;\n}\n.tabs .is-active::after {\n  /* border-left: $arrow-size solid green; */\n  /* border-right: $arrow-size solid red; */\n  /* border-top: $arrow-size solid $color-company; */\n  left: 50%;\n  /* margin-left: -$arrow-size; */\n  top: 100%;\n}\n/* } */\n\n/* .content {\n  font-size: $font-size-medium;\n} */\n\nh6 {\n  /* font-size: $font-size-medium; */\n  margin-bottom: 1rem;\n  color: #363636;\n  font-weight: 600;\n  line-height: 1.125;\n}\n.content p:not(:last-child) {\n  margin-bottom: 1rem;\n}\n</style>\n","<template>\n  <div class=\"relative flex flex-col\">\n    <WebccLoaderOverlay v-if=\"loading\" type=\"blocks\" absolute />\n    <button\n      v-if=\"count > 1\"\n      class=\"my-6 inline-block max-w-full rounded border border-thm p-4 text-thm hover:bg-thm hover:text-thm-contrast\"\n      @click=\"toggle\"\n    >\n      <span>{{ $t(`${trPrefix}showAllAccommodations`, count) }}</span>\n    </button>\n    <div v-if=\"open\" class=\"flex flex-row flex-wrap justify-center gap-2\">\n      <WebccLink\n        v-for=\"{ code, slug, name } in accommodations\"\n        :key=\"code\"\n        :to=\"`/${slug ?? ''}`\"\n        anchor\n        class=\"snap-start rounded border-2 border-thm p-2\"\n      >\n        <div class=\"p-2 text-sm\">\n          <strong class=\"mb-2 text-black\">{{ name }}</strong>\n          <span\n            class=\"flex flex-auto items-center text-xs font-bold leading-none text-[#232323]\"\n          >\n            {{ code }}\n          </span>\n        </div>\n      </WebccLink>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.Residence.'\n\nconst props = defineProps<{\n  accom: TranslatedAccommodation\n}>()\n\nconst open = ref(false)\nconst loading = ref(false)\nconst accommodations = ref<ResultDocument[]>([])\n\nconst codes = computed(() => props.accom.house?.accommodations ?? [])\nconst count = computed(() => codes.value.length)\n\nfunction toggle() {\n  useTracking().handlers?.detail.houseAccommodationsClick(props.accom.code)\n\n  open.value = !open.value\n\n  if (open.value) fetch()\n}\n\nasync function fetch() {\n  if (!codes.value.length || accommodations.value.length) return\n\n  loading.value = true\n\n  const { data, pending } = await useSearchApi().search({\n    code: codes.value,\n    pagesize: codes.value.length,\n    language: useConfdata().language,\n  })\n\n  loading.value = pending.value\n  accommodations.value = data.value?.docs ?? []\n}\n</script>\n","<template>\n  <section>\n    <WebccHeading\n      :title=\"\n        $t(`${trPrefix}headings.destination`) +\n        ' ' +\n        (place.main?.name || place.name)\n      \"\n      :level=\"4\"\n    />\n\n    <p v-if=\"general\" class=\"prose-md prose max-w-none\" v-text=\"general\"></p>\n\n    <template v-if=\"summer\">\n      <h6 class=\"mt-2 text-thm\">{{ $t(`${trPrefix}headings.summer`) }}</h6>\n      <p class=\"prose-md prose max-w-none\" v-text=\"summer\"></p>\n    </template>\n\n    <template v-if=\"winter\">\n      <h6 class=\"mt-2 text-thm\">{{ $t(`${trPrefix}headings.winter`) }}</h6>\n      <p class=\"prose-md prose max-w-none\" v-text=\"winter\"></p>\n    </template>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.Description.'\n\nconst props = withDefaults(defineProps<{ place?: TransPlace }>(), {\n  place: () => ({}) as TransPlace,\n})\n\nconst desc = computed(() => {\n  return props.place.desc || {}\n})\n\nconst general = computed(() => {\n  if (!desc.value.general || desc.value.general === 'text missing') {\n    return ''\n  }\n  try {\n    return desc.value.general\n    // return decodeURIComponent(desc.value.general) // .replace(/\\+/g, '%20')) : ''\n  } catch (e) {\n    console.log('error decoding dec.general', e)\n    return desc.value.general\n  }\n})\n\nconst summer = computed(() => {\n  if (desc.value.summer && desc.value.summer !== 'text missing') {\n    return desc.value.summer\n    // return decodeURIComponent(desc.value.summer) // .replace(/\\+/g, '%20')) : ''\n  }\n  return ''\n})\n\nconst winter = computed(() => {\n  if (desc.value.winter && desc.value.winter !== 'text missing') {\n    // let w\n    try {\n      return desc.value.winter\n      // w = decodeURIComponent(desc.value.winter) // .replace(/\\+/g, '%20')) : ''\n      // return w\n    } catch {\n      console.log('error decoding desc.winter', desc.value.winter)\n    }\n    return desc.value.winter\n  }\n  return ''\n})\n</script>\n","<template>\n  <section class=\"w-full\">\n    <!--- Hinweis-Box zur ungenauen Lagedarstellung--->\n    <div\n      v-if=\"accom.coordinates.accuracy !== 'EXACT' && !placeholder\"\n      class=\"flex justify-between text-base font-light\"\n    >\n      <p class=\"pb-2\">{{ $t(`${trPrefix}accuracyHint`) }}</p>\n    </div>\n    <div class=\"h-96 overflow-hidden rounded shadow\">\n      <div v-if=\"placeholder\" class=\"placeholder h-full\">\n        <div\n          class=\"mx-auto my-0 flex h-full w-full max-w-md flex-col items-center justify-center p-4 text-center\"\n        >\n          <p class=\"mb-4 w-64 text-xl font-light text-txt\">\n            {{ $t(`${trPrefix}activation`) }}\n          </p>\n          <WebccButton size=\"md\" variant=\"theme\" @click=\"placeholder = false\">\n            <span>{{ $t(`${trPrefix}activate`) }}</span>\n          </WebccButton>\n        </div>\n      </div>\n      <GoogleMaps\n        v-else\n        :locale=\"useL10N().locale\"\n        :domain=\"useConfdata().domain\"\n        class=\"relative h-full\"\n        :marker=\"accom.name\"\n        :center=\"{ lat: accom.coordinates.lat!, lng: accom.coordinates.lng! }\"\n      />\n      <!--   -->\n    </div>\n\n    <p\n      v-if=\"geoLinks\"\n      class=\"inline-flex flex-wrap items-center space-x-1 py-2 text-base font-light text-txt\"\n    >\n      <WebccIcon\n        name=\"detailpage/pin\"\n        class=\"mr-1 h-4 w-4 fill-current stroke-current\"\n        filled\n      />\n      <WebccLink :to=\"accom.country.slug\">{{ accom.country.name }} </WebccLink>,\n\n      <WebccLink v-if=\"accom.region.main\" :to=\"accom.region.main.slug\"\n        >{{ accom.region.main.name }},\n      </WebccLink>\n      <WebccLink :to=\"accom.region.slug\">{{ accom.region.name }} </WebccLink>,\n\n      <WebccLink v-if=\"accom.place.main\" :to=\"accom.place.main.slug\"\n        >{{ accom.place.main.name }},\n      </WebccLink>\n      <WebccLink :to=\"accom.place.slug\">{{ accom.place.name }}</WebccLink>\n    </p>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.Map.'\n\ninterface Props {\n  accom: TranslatedAccommodation\n  geoLinks?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n  geoLinks: true,\n})\n\nconst placeholder: Ref<boolean> = ref(true)\n</script>\n\n<style lang=\"css\" scoped>\n.placeholder {\n  background: white url('/map/map-placeholder.svg') center/cover no-repeat;\n}\n</style>\n","<template>\n  <section\n    class=\"relative hidden h-48 min-h-[9rem] flex-col justify-between rounded-t-md bg-bgr shadow-md md:flex\"\n  >\n    <header\n      class=\"mx-4 flex justify-between border-b py-4 [&>*]:text-ellipsis [&>*]:whitespace-nowrap\"\n    >\n      <span class=\"text-base font-semibold\">{{ $t(`${trPrefix}title`) }}</span>\n      <div\n        v-tooltip=\"{ content: $t(`${trPrefix}tooltip`) }\"\n        class=\"flex w-fit cursor-help items-center gap-1 text-sm\"\n      >\n        <WebccIcon name=\"site/info\" class=\"h-4 w-4 text-thm\" />\n        <span>{{ $t(`${trPrefix}info`) }}</span>\n      </div>\n    </header>\n\n    <button\n      v-if=\"slider\"\n      class=\"absolute left-4 top-2/3 z-1 -translate-y-1/2 text-txt-weak\"\n      @click=\"sliderprev()\"\n    >\n      <WebccIcon\n        name=\"site/chevron-left\"\n        filled\n        class=\"h-6 w-6 sm:h-8 sm:w-8 md:h-6 md:w-6 lg:h-8 lg:w-8\"\n      />\n    </button>\n    <button\n      v-if=\"slider\"\n      class=\"absolute right-4 top-2/3 z-1 -translate-y-1/2 text-txt-weak\"\n      @click=\"slidernext()\"\n    >\n      <WebccIcon\n        name=\"site/chevron-right\"\n        filled\n        class=\"h-6 w-6 sm:h-8 sm:w-8 md:h-6 md:w-6 lg:h-8 lg:w-8\"\n      />\n    </button>\n\n    <div class=\"mx-14\">\n      <div ref=\"container\" class=\"keen-slider\">\n        <div\n          v-for=\"month in months\"\n          :key=\"month.index\"\n          class=\"keen-slider__slide text-txt-rev flex h-32 max-h-[8rem] cursor-pointer flex-col items-stretch justify-end text-xs font-medium\"\n          :class=\"{\n            disabled:\n              Object.keys(vacancies).length &&\n              !vacancies[Number(month.formatted)],\n          }\"\n          @click=\"$emit('monthclick', month)\"\n        >\n          <div\n            class=\"m-0 block w-[90%] self-center text-center\"\n            :style=\"{ height: `${month.height}px` }\"\n            :class=\"{\n              'bg-thm text-thm-contrast':\n                month.index === current ||\n                (showSecondMonth && month.index === current + 1),\n              'text-txt-rev bg-bgr-400': !month.price,\n              'bg-suc text-suc-contrast':\n                month.price &&\n                !(\n                  month.index === current ||\n                  (showSecondMonth && month.index === current + 1)\n                ),\n            }\"\n          >\n            {{ month.price }}\n          </div>\n          <div\n            class=\"flex h-8 items-center justify-center bg-bgr p-0 text-center text-txt shadow-sm\"\n            :class=\"{ empty: !month.label }\"\n          >\n            {{ month.label }}\n          </div>\n        </div>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport 'keen-slider/keen-slider.min.css'\nimport { useKeenSlider } from 'keen-slider/vue.es'\n\nconst trPrefix = 'www.components.views.details.MonthlyPrices.'\n\ninterface Props {\n  accom: string\n  duration: number\n  pax: number\n  current?: number\n  vacancies?: AvgPrice[]\n  salesoffice?: string\n  locale?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  current: 0,\n  vacancies: () => [],\n  salesoffice: '8080',\n  locale: 'en',\n})\n\ndefineEmits<{\n  (e: 'monthclick', value: PriceMonth): PriceMonth\n}>()\n\nconst current = ref(props.current)\nconst showSecondMonth: Ref<boolean> = ref(\n  import.meta.client ? window.innerWidth >= 640 : false,\n)\nconst numElems: Ref<number> = ref(12)\n\nconst months = computed(() => {\n  const months: PriceMonth[] = props.vacancies.map((m, i) => ({\n    year: m.Year,\n    month: m.Month,\n    formatted: `${m.Year}-${Number(m.Month).toString().padStart(2, '0')}`,\n    label: new Date(m.Year, m.Month - 1).toLocaleString(props.locale, {\n      month: 'short',\n      year: '2-digit',\n    }),\n    price: m.Price,\n    height: Math.ceil(m.Price * scale.value),\n    index: i,\n  }))\n  if (months.length < 12 && Array.isArray(months)) {\n    return months.concat(\n      Array.from({ length: 12 - months.length }, () => ({\n        height: 0,\n      })) as PriceMonth[],\n    )\n  }\n  return months\n})\n\nconst scale = computed(() => {\n  //   Der Skalierungsfaktor, über den die Höhe der einzelnen Monatsbalken berechnet wird.\n  const height = 80\n  const maxPrice = Math.max(...props.vacancies.map((p) => p.Price))\n  return height / maxPrice\n})\n\nwatch(current, (nv, ov) => {\n  if (nv !== ov) {\n    console.log('watcher:', nv, ov, slider.value)\n    slider.value!.moveToIdx(nv)\n  }\n})\n\nconst [container, slider] = useKeenSlider({\n  slides: {\n    number: months.value.length,\n    perView: numElems.value,\n    spacing: 8,\n  },\n  mode: 'free',\n  loop: false,\n})\n\nonMounted(() => {\n  calcNumElems()\n\n  setTimeout(() => {\n    slider.value!.update({\n      slides: {\n        number: months.value.length,\n        perView: numElems.value,\n        spacing: 8,\n      },\n    })\n  }, 1000)\n  window.onresize = (event) => {\n    calcNumElems()\n    slider.value!.update({\n      slides: {\n        number: months.value.length,\n        perView: numElems.value,\n        spacing: 8,\n      },\n    })\n    showSecondMonth.value = (event.currentTarget as Window)?.innerWidth >= 640\n  }\n})\n\nonBeforeUnmount(() => {\n  if (slider.value) slider.value.destroy()\n})\n\nfunction calcNumElems() {\n  const width = container.value?.parentElement?.clientWidth\n  if (width) {\n    numElems.value = Math.floor(width / 48)\n  } else {\n    console.log('width not found for numElems')\n  }\n}\n\nfunction sliderprev() {\n  console.log('sliderprev')\n  useTracking().handlers?.detail.monthlyPricesPrevious()\n  slider.value!.prev()\n}\n\nfunction slidernext() {\n  console.log('slidernext')\n  useTracking().handlers?.detail.monthlyPricesNext()\n  slider.value!.next()\n}\n</script>\n","<template>\n  <WebccSelect\n    v-cloak\n    v-model=\"model\"\n    icon=\"attributes/feature-pax\"\n    :label=\"label\"\n    :disabled=\"disabled\"\n    :options=\"options\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n  defineProps<{\n    modelValue: number\n    max: number\n    prefix: string\n    label?: string\n    disabled?: boolean\n  }>(),\n  {},\n)\n\nconst trPrefix = props.prefix\n\nconst { t } = useI18n()\n\nconst emit = defineEmits<{\n  (e: 'update:modelValue', value: number): number\n}>()\n\nconst model = computed({\n  get() {\n    return props.modelValue || props.max\n  },\n  set(value) {\n    emit('update:modelValue', value)\n  },\n})\n\nconst options = computed(() => {\n  return [...Array(props.max).keys()].map((index) => ({\n    label: t(`${trPrefix}person_s` as TranslationKey, index + 1),\n    value: index + 1,\n  }))\n})\n</script>\n\n<style scoped></style>\n","import type { TranslationsType } from '~/translations/master'\n\nexport enum VacancyDayStatus {\n  Clickable = 'Clickable',\n  ClickableNoVacancies = 'ClickableNoVacancies',\n  Available = 'Available',\n  Unavailable = 'Unavailable',\n  Neutral = 'Neutral',\n  Invalid = 'Invalid',\n}\n\nexport interface TooltipParams {\n  key: keyof typeof TranslationsType.www.components.views.details.Calendar | ''\n  count?: number\n}\n\nexport function useVacancyDays(\n  days: VacancyDay[],\n  selectedStartDate: Ref<Date | undefined>,\n) {\n  const firstPossibleStart = daysAdd(new Date(), 1)\n  const minDate = computed(() => selectedStartDate.value ?? firstPossibleStart)\n  const maxRange = computed(() => DURATION_MAX)\n\n  function dayOf(date?: Date): VacancyDay | undefined {\n    return date && days.find((day) => datesEqual(day.date, date))\n  }\n\n  function getSpecialDates(): Date[] {\n    return days\n      .filter((day) => day.specials?.length)\n      .map(({ date }) => parse(date))\n      .filter(isClickable)\n  }\n\n  function getAvailableDates(): Date[] | undefined {\n    if (!selectedStartDate.value) return undefined\n\n    return Array.from(Array(maxRange.value + 1).keys())\n      .map((i) => daysAdd(minDate.value, i))\n      .filter(isClickable)\n  }\n\n  function getStatus(date: Date): VacancyDayStatus {\n    const day = dayOf(date)\n    if (!day) {\n      return VacancyDayStatus.Invalid\n    }\n\n    if (selectedStartDate.value) {\n      if (datesEqual(date, minDate.value)) {\n        return VacancyDayStatus.Clickable\n      }\n      if (\n        !dateBetween(\n          date,\n          minDate.value,\n          daysAdd(minDate.value, maxRange.value),\n        )\n      ) {\n        return VacancyDayStatus.Unavailable\n      }\n      if (\n        day.isTripEnd &&\n        dayOf(minDate.value)?.durations?.includes(diff(date, minDate.value))\n      ) {\n        return VacancyDayStatus.Clickable\n      }\n      return VacancyDayStatus.Unavailable\n    }\n    if (day.isTripStart) {\n      return VacancyDayStatus.Clickable\n    }\n    if (day.isTripInner || day.isTripEnd) {\n      return VacancyDayStatus.Available\n    }\n    return VacancyDayStatus.Unavailable\n  }\n\n  function isClickable(date: Date): boolean {\n    return getStatus(date) === VacancyDayStatus.Clickable\n  }\n\n  function getTooltip(date?: Date): TooltipParams {\n    if (!date) {\n      return { key: '', count: 0 }\n    }\n\n    const day = dayOf(date)\n    if (!day) {\n      return { key: '', count: 0 }\n    }\n\n    if (selectedStartDate.value) {\n      const minDay = dayOf(minDate.value)!\n      const daysDiff = diff(date, minDate.value)\n      if (datesEqual(date, minDate.value)) {\n        return { key: 'selectedArrival_s', count: minDay.minStay }\n      }\n      if (dateBefore(date, new Date())) {\n        return { key: 'dateInPast' }\n      }\n      if (dateBefore(date, minDate.value)) {\n        return { key: 'arrivalBeforeDeparture' }\n      }\n      if (minDay.minStay! > daysDiff) {\n        return { key: 'noDepartureMinStay_s', count: minDay.minStay }\n      }\n      if (minDay.maxStay! < daysDiff) {\n        return { key: 'noDepartureMaxStay_s', count: minDay.maxStay }\n      }\n      if (!day.isTripEnd) {\n        return { key: 'noDeparture' }\n      }\n      if (!minDay.durations?.includes(daysDiff)) {\n        return { key: 'noDeparture' }\n      }\n      return { key: 'departureAvailable' }\n    }\n    if (day.isTripStart && day.isTripEnd) {\n      return { key: 'arrivalDeparture_s', count: day.minStay }\n    }\n    if (day.isTripStart) {\n      return { key: 'arrival_s', count: day.minStay }\n    }\n    if (day.isTripInner) {\n      return { key: 'noArrival' }\n    }\n    if (day.isTripEnd) {\n      return { key: 'departureOnly' }\n    }\n    return { key: 'notAvailable' }\n  }\n\n  function getDurations(): number[] {\n    return dayOf(selectedStartDate.value)?.durations ?? []\n  }\n\n  return {\n    firstPossibleStart,\n    firstPossibleStartDate: firstPossibleStart,\n    minDate,\n    maxRange,\n    getSpecialDates,\n    getAvailableDates,\n    getStatus,\n    isClickable,\n    getTooltip,\n    getDurations,\n  }\n}\n","<template>\n  <div class=\"root ih\">\n    <DetailsMonthlyPrices\n      v-if=\"useAB().isActive('monthlyPrices')\"\n      :accom=\"accomCode\"\n      :current=\"current\"\n      :duration=\"duration\"\n      :pax=\"modelValue?.pax || 1\"\n      :vacancies=\"vacancies.months\"\n      :locale=\"locale\"\n      @monthclick=\"gotoMonth\"\n    />\n\n    <header class=\"pb-4 block md:hidden\">\n      <DetailsPaxSelector\n        v-model=\"pax\"\n        class=\"w-48\"\n        :max=\"paxUpTo\"\n        :prefix=\"'www.components.views.details.MobileBar.'\"\n        @click.stop\n      />\n    </header>\n\n    <div class=\"relative rounded bg-bgr p-4\" @click.stop>\n      <header\n        class=\"hidden md:flex mt-6 flex-wrap items-center justify-between border-b pb-3\"\n      >\n        <h3 class=\"hidden text-base font-semibold text-txt md:block\">\n          {{ $t(`${trPrefix}headline.${mode}`) }}\n        </h3>\n        <!-- TODO: Verhalten nach einer Auswahl verbessern -> Wert anzeigen, Änderungen ermöglichen -->\n        <WebccSelect\n          v-model=\"duration\"\n          name=\"duration\"\n          :options=\"durationOptions\"\n          :disabled=\"!durationOptions.length\"\n          size=\"sm\"\n          class=\"min-w-1/4\"\n          @click=\"onDurationOpen\"\n        />\n      </header>\n\n      <main class=\"flex w-full justify-center py-2\">\n        <client-only>\n          <WebccDateRangepicker\n            ref=\"calendar\"\n            v-model=\"range\"\n            :locale=\"locale\"\n            :vacancies=\"vacancies\"\n            @update-page=\"onUpdatePageDates\"\n          />\n        </client-only>\n        <!-- <client-only>\n          <WebccTripPicker ref=\"calendar\" v-model=\"range\" inline :locale=\"locale\" :vacancies=\"vacancies\" @update-page=\"onUpdatePageDates\" />\n        </client-only> -->\n      </main>\n\n      <footer\n        v-track:impression.20=\"'detail:calendarImpression'\"\n        class=\"hidden md:block mt-2 border-t pt-3\"\n      >\n        <h4 class=\"mb-4 text-base font-semibold text-txt\">\n          {{ $t(`${trPrefix}legend.title`) }}\n        </h4>\n        <ul\n          class=\"grid w-full gap-4\"\n          style=\"grid-template-columns: repeat(auto-fill, minmax(350px, 1fr))\"\n        >\n          <li class=\"flex flex-row items-center justify-start gap-2\">\n            <div\n              class=\"flex h-8 w-8 flex-row items-center justify-center rounded-sm !border-0 bg-suc text-[14px] font-semibold\"\n            >\n              11\n            </div>\n            <span>{{ $t(`${trPrefix}legend.${mode}`) }}</span>\n          </li>\n          <li class=\"flex flex-row items-center justify-start gap-2\">\n            <div\n              class=\"relative flex h-8 w-8 flex-row items-center justify-center rounded-sm !border-0 bg-suc p-1 text-[14px] font-semibold before:absolute before:-right-px before:-top-px before:flex before:h-4 before:w-4 before:items-center before:justify-center before:rounded-[50%] before:bg-hlt-hover before:text-xs before:text-bgr before:content-['%']\"\n            >\n              11\n            </div>\n            <span>{{ $t(`${trPrefix}legend.discount`) }}</span>\n          </li>\n          <li class=\"flex flex-row items-center justify-start gap-2\">\n            <div\n              class=\"flex h-8 w-8 flex-row items-center justify-center rounded-sm !border-0 bg-suc-reduced text-[14px] font-semibold\"\n            >\n              11\n            </div>\n            <span>{{ $t(`${trPrefix}legend.no${mode}`) }}</span>\n          </li>\n          <li class=\"flex flex-row items-center justify-start gap-2\">\n            <div\n              class=\"flex h-8 w-8 flex-row items-center justify-center rounded-sm !border-0 text-[14px] font-semibold line-through opacity-30\"\n            >\n              11\n            </div>\n            <span>{{ $t(`${trPrefix}legend.disabled`) }}</span>\n          </li>\n        </ul>\n      </footer>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type WebccTripPicker from '@/components/@ihgroup/components/WebccTripPicker.vue'\n\nconst trPrefix = 'www.components.views.details.Vacancy.'\n\nconst { t } = useI18n()\n\ninterface Props {\n  modelValue: TripUpdate | null\n  accomCode?: string\n  vacancies: Trips\n  paxUpTo: number\n}\n\ninterface SelectionMonth {\n  year: number\n  month: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  modelValue: null,\n  accomCode: '',\n  vacancies: () => ({}) as Trips,\n  paxUpTo: 1,\n})\n\nconst emit = defineEmits<{\n  'update:modelValue': [TripUpdate]\n}>()\n\nconst monthFrom: Ref<SelectionMonth | null> = ref(null)\nconst monthTo: Ref<SelectionMonth | null> = ref(null)\nconst arrivalSelected = ref(false)\nconst calendar: Ref<typeof WebccTripPicker | null> = ref(null)\n\nconst locale = computed(() => useL10N().locale)\nconst mode = computed(() => (arrivalSelected.value ? 'departure' : 'arrival'))\n\nconst pax = computed({\n  get() {\n    return props.modelValue?.pax || props.paxUpTo\n  },\n  set(value) {\n    emit('update:modelValue', { pax: parseInt(value.toString()) })\n  },\n})\n\nconst range = computed({\n  get() {\n    const { checkin, checkout } = props.modelValue ?? {}\n    const [start, end] = [checkin, checkout].map(tryParseDate)\n\n    return { start, end }\n  },\n  set(range) {\n    useTracking().handlers?.detail.datepickerInteraction('dateSelected')\n\n    if (!range) return\n    if (!range.start || !range.end) return console.error('Invalid range', range)\n\n    const [checkin, checkout] = [range.start, range.end]\n    emit('update:modelValue', { checkin, checkout })\n    arrivalSelected.value = false\n  },\n})\n\nconst duration = computed({\n  get() {\n    return getTripDuration(props.modelValue ?? {}) ?? DURATION_DEFAULT\n  },\n  set(value) {\n    if (!range.value.start) return\n\n    emit('update:modelValue', {\n      checkout: calculateCheckoutDate(range.value.start, value),\n    })\n    useTracking().handlers?.detail.calendarDurationSelect(value)\n  },\n})\n\nconst durationOptions = computed(() => {\n  const duration = useVacancyDays(\n    props.vacancies.days,\n    ref(range.value.start),\n  ).getDurations()\n  return duration.map((value) => ({\n    value,\n    label: t(`${trPrefix}night_s`, value),\n  }))\n})\n\nconst current = computed(() => {\n  const from = new Date(props.vacancies.dateFrom)\n  const to = new Date(props.vacancies.dateTo)\n  const foo = {\n    first: {\n      year: from.getFullYear(),\n      month: from.getMonth() + 1,\n      index: from.getFullYear() * 12 + from.getMonth() + 1,\n    },\n    current: Object.assign(monthFrom.value ?? {}, {\n      index: (monthFrom.value?.year ?? 0) * 12 + (monthFrom.value?.month ?? 0),\n    }),\n    last: {\n      year: to.getFullYear(),\n      month: to.getMonth() + 1,\n      index: to.getFullYear() * 12 + to.getMonth() + 1,\n    },\n  }\n  return foo.current.index - foo.first.index\n})\n\nfunction onDurationOpen() {\n  // TODO: check, warum @click=\"onDurationOpen\" auch bei onDurationChange getriggert wird\n  useTracking().handlers?.detail.calendarDurationOpened()\n}\n\nfunction onUpdatePageDates(from: SelectionMonth, to: SelectionMonth) {\n  monthFrom.value = from\n  monthTo.value = to\n  console.log('onUpdatePageDates', from.month, to.month)\n}\n\nfunction gotoMonth(month: PriceMonth) {\n  useTracking().handlers?.detail.monthlyPricesSelect({\n    formatted: month.formatted,\n  })\n  // const calendar = this.$refs.calendar\n  // calendar.value?.gotoMonth(month)\n}\n</script>\n","<template>\n  <div class=\"flex flex-wrap items-start md:flex-nowrap md:justify-between\">\n    <div class=\"flex grow justify-between sm:justify-start md:w-3/5\">\n      <div\n        class=\"flex grow items-center font-semibold sm:w-1/2 sm:grow-0 md:w-2/3 md:grow md:font-normal\"\n      >\n        <label\n          v-if=\"service.name && service.name.length > 0\"\n          class=\"text-txt\"\n          :class=\"{ 'cursor-help': tooltip }\"\n          :for=\"service.code\"\n          @mouseenter=\"showTooltip(service.code)\"\n          @mouseleave=\"hideTooltip(service.code)\"\n        >\n          <span class=\"mr-2\">{{ service.name }}</span>\n          <WebccIcon\n            v-if=\"service.description && service.description.length > 0\"\n            :id=\"service.code\"\n            v-tooltip=\"{ content: !tooltip ? '' : tooltip, html: true }\"\n            name=\"site/info\"\n            class=\"mb-[3px] inline h-4 w-4 text-thm\"\n            :class=\"{ 'cursor-help': tooltip }\"\n          />\n        </label>\n\n        <div v-if=\"service.validFrom && service.validTo\" class=\"ml-2\">\n          ({{ formatDatetime(service.validFrom) }} -\n          {{ formatDatetime(service.validTo) }})\n        </div>\n        <div v-else-if=\"service.validFrom\" class=\"ml-2\">\n          (<span>{{ $t(`${trPrefix}from`) }}</span>\n          {{ formatDatetime(service.validFrom) }})\n        </div>\n        <div v-else-if=\"service.validTo\" class=\"ml-2\">\n          (<span>{{ $t(`${trPrefix}to`) }}</span>\n          {{ formatDatetime(service.validTo) }})\n        </div>\n      </div>\n\n      <div\n        class=\"items-center text-right font-semibold sm:w-1/4 md:mx-6 md:font-normal\"\n      >\n        {{\n          service.priceBase\n            ? formatCurrency(service.priceBase, '2-digits', service.currency)\n            : ''\n        }}\n      </div>\n    </div>\n    <div class=\"flex w-full flex-wrap items-center md:w-2/5\">\n      <div v-if=\"service.code === 'INSZ'\">\n        <p>{{ $t(`${trPrefix}inszRecommendation`) }}</p>\n        <WebccLink anchor class=\"text-thm\" :to=\"inszLink\" target=\"_blank\"\n          ><span>{{ $t(`${trPrefix}inszInformation`) }}</span></WebccLink\n        >\n      </div>\n      <div v-else-if=\"service.code === 'CO2'\">\n        <p>{{ service.paymentInfo }}</p>\n        <WebccIcon\n          name=\"detailpage/hearttree\"\n          class=\"inline-flex align-middle h-4 w-4 text-suc\"\n          filled\n        />\n        <span>&nbsp;</span>\n        <WebccLink anchor class=\"text-thm\" :to=\"co2Link\" target=\"_blank\"\n          ><span>{{ $t(`${trPrefix}co2Information`) }}</span></WebccLink\n        >\n      </div>\n      <div v-else-if=\"service.code === 'SUSU'\">\n        <p>{{ service.paymentInfo }}</p>\n        <WebccLink anchor class=\"text-thm\" :to=\"susu2Link\" target=\"_blank\"\n          ><span>{{ $t(`${trPrefix}susuInformation`) }}</span></WebccLink\n        >\n      </div>\n      <div v-else>{{ service.paymentInfo }}</div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst tracking = useTracking()\nconst trPrefix = 'www.components.views.details.Services.'\n\nconst props = defineProps<{\n  service: Service\n  links: Links\n}>()\n\nconst inszLink = computed(() => {\n  return props.links.travelInsurance?.href\n})\n\nconst co2Link = computed(() => {\n  return props.links.sustainability?.href\n})\n// laut HHDWBCC-4427/4429 zunächst auch auf sustainability\nconst susu2Link = computed(() => {\n  return props.links.sustainability?.href\n})\nconst tooltip = computed(() => {\n  if (!props.service.description) {\n    return ''\n  }\n  const tt = props.service.description\n    .replace(/•/g, '<br />•')\n    .replace(/ %/g, '&nbsp;%')\n  return tt\n})\n\nfunction showTooltip(id: string) {\n  if (document.getElementById(id)) {\n    const mouseenterEvent = new Event('mouseenter')\n    document.getElementById(id)?.dispatchEvent(mouseenterEvent)\n    tracking.handlers?.detail.mouseoverCostoverviewInfo(props.service.code)\n  }\n}\n\nfunction hideTooltip(id: string) {\n  if (document.getElementById(id)) {\n    const mouseleaveEvent = new Event('mouseleave')\n    document.getElementById(id)?.dispatchEvent(mouseleaveEvent)\n  }\n}\n</script>\n","<template>\n  <section>\n    <div\n      class=\"relative rounded border-0 bg-bgr p-4 text-sm leading-4 shadow md:leading-5\"\n    >\n      <Alert\n        v-if=\"services.length === 0\"\n        alert-type=\"info\"\n        content-type=\"tr\"\n        title=\"www.components.ui.alert.note\"\n        :content=\"`${trPrefix}chooseTravelPeriod`\"\n      ></Alert>\n      <WebccLoaderOverlay\n        v-if=\"loading\"\n        type=\"blocks\"\n        absolute\n        :message=\"$t(`${trPrefix}loading`)\"\n      />\n\n      <div v-if=\"inPriceIncluded.length > 0\" class=\"mb-4 border-b\">\n        <span class=\"text-highlight font-semibold leading-6\">{{\n          $t(`${trPrefix}included`)\n        }}</span>\n        <div class=\"flex flex-col gap-4 py-5\">\n          <div\n            v-for=\"service in inPriceIncluded\"\n            :key=\"service.code\"\n            class=\"flex items-start gap-2 text-base sm:font-medium\"\n          >\n            <div class=\"flex h-6 items-center\">\n              <WebccIcon name=\"site/tick\" class=\"h-5 w-5 text-suc\" />\n            </div>\n            {{ service.name }}\n          </div>\n        </div>\n      </div>\n\n      <div v-for=\"group in groups\" :key=\"group.key\">\n        <h5 class=\"text-highlight font-semibold leading-6\">\n          {{ $t(`${trPrefix}${group.key}` as TranslationKey) }}\n        </h5>\n        <div>\n          <template v-for=\"service in group.services\" :key=\"service.code\">\n            <DetailsServiceItem\n              :links=\"links\"\n              class=\"px-4 py-2 odd:bg-bgr-100\"\n              :service=\"service\"\n            />\n          </template>\n        </div>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst SERVICE_ORDER = ['N1', 'N2', 'N4', 'Y5', 'Y4', 'Y2', 'Y6']\n\nconst SERVICE_GROUPS = {\n  extracostsOnPlace: ['Y4'],\n  optionalServices: ['N1', 'N4', 'Y5'],\n  selfOrganised: ['Y6'],\n}\n\nconst trPrefix = 'www.components.views.details.Services.'\n\nconst props = withDefaults(\n  defineProps<{\n    services: Service[]\n    links: Links\n    loading: boolean\n  }>(),\n  {\n    loading: false,\n    links: () => ({}) as Links,\n    services: () => [],\n  },\n)\n\nconst groups = computed(() =>\n  Object.entries(SERVICE_GROUPS)\n    .map(([key, types]) => ({\n      key,\n      services: props.services\n        .filter(({ type }) => types.includes(type))\n        .sort(sortServices),\n    }))\n    .filter(({ services }) => services.length),\n)\n\nconst inPriceIncluded = computed(() => {\n  return props.services\n    .filter((service) => ['Y1', 'Y2', 'N2'].includes(service.type))\n    .sort(sortServices)\n})\n\nfunction sortServices(s1: Service, s2: Service) {\n  if (s1.id === 'SUSU' || s2.id === 'SUSU') return s1.id === 'SUSU' ? 1 : -1\n  if (s1.isInsurance && !s2.isInsurance) return -1\n  if (!s1.isInsurance && s2.isInsurance) return 1\n\n  return SERVICE_ORDER.indexOf(s1.type) - SERVICE_ORDER.indexOf(s2.type)\n}\n</script>\n","<template>\n  <div class=\"flex flex-col align-middle p-3 w-full text-txt md:flex-row\">\n    <template v-for=\"({ type, title, isActive }, index) in items\" :key=\"index\">\n      <div\n        v-if=\"type === 'dot'\"\n        class=\"relative inline-flex items-center content-start justify-start flex-none h-10 md:flex-col md:h-auto\"\n      >\n        <span class=\"md:h-11\"></span>\n        <WebccIcon\n          name=\"site/stepper-point\"\n          filled\n          class=\"justify-center w-5 h-5 p-0.5\"\n          :class=\"isActive ? 'text-thm' : 'text-txt-weaker'\"\n        />\n        <span\n          class=\"ml-2 text-sm font-semibold md:ml-0 md:pt-2 md:max-w-20 md:text-center\"\n          >{{ title }}</span\n        >\n      </div>\n      <div\n        v-else\n        class=\"flex-row-reverse md:flex-col inline-flex md:w-full md:-mx-10 self-start items-center\"\n      >\n        <span\n          class=\"ml-2 text-sm text-left md:h-[3.25rem] md:pb-3 md:text-center md:content-end\"\n          :class=\"isActive ? 'font-medium md:font-semibold' : 'font-normal'\"\n          >{{ title }}</span\n        >\n        <span\n          class=\"mx-2 -my-4 w-0.5 h-14 md:mx-0 md:my-0 md:w-full md:h-1\"\n          :class=\"isActive ? 'bg-thm' : 'bg-bgr-100'\"\n        />\n      </div>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.CancelConditions.'\n\nconst { t, locale } = useI18n()\n\nconst props = defineProps<{\n  conditions: CancelCondition[]\n  checkin: Date\n}>()\n\nconst items = computed(() => {\n  const today = new Date()\n\n  return props.conditions\n    .toSorted((a, b) => b.daysBefore - a.daysBefore)\n    .map(({ from, to, percent }) => {\n      const start = daysSub(props.checkin, from ?? 999)\n      const end = daysSub(props.checkin, to ?? 0)\n      const refund = 100 - percent\n      const isActive =\n        dateBetween(today, start, end) ||\n        datesEqual(today, start) ||\n        datesEqual(today, end)\n      return { start: from ? start : undefined, end, isActive, refund }\n    })\n    .map(({ start, end, isActive, refund }, index, steps) => [\n      {\n        type: 'dot',\n        title: start\n          ? `${t(`${trPrefix}from`)} ${formatDate(start)}`\n          : `${t(`${trPrefix}until`)} ${formatDate(end)}`,\n        isActive: isActive || steps[index - 1]?.isActive,\n      },\n      {\n        type: 'connector',\n        title: refund\n          ? `${refund}% ${t(`${trPrefix}refund`)}`\n          : t(`${trPrefix}noRefund`),\n        isActive,\n      },\n    ])\n    .concat([\n      { type: 'dot', title: `${formatDate(props.checkin)}`, isActive: false },\n    ])\n    .flat()\n})\n\nfunction formatDate(date: Date): string {\n  return date.toLocaleDateString(locale, {\n    day: '2-digit',\n    month: 'short',\n    year: 'numeric',\n  })\n}\n</script>\n","<template>\n  <div class=\"rounded bg-bgr p-5 shadow\">\n    <WebccFreeCancellationInfo\n      v-if=\"trip.checkin\"\n      v-track:impression=\"{ event: 'search:freeCancellationImpression' }\"\n      :checkin-date=\"trip.checkin\"\n      :free-cancellation-range=\"getFreeCancellationRange(props.conditions)\"\n      class=\"mb-3\"\n      :locale=\"useL10N().locale\"\n    />\n    <WebccCancellationStepper\n      v-if=\"conditions.length\"\n      :conditions=\"conditions\"\n      :checkin=\"trip.checkin\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  conditions: CancelCondition[]\n  trip: { checkin: Date }\n}>()\n</script>\n","<template>\n  <ul>\n    <li v-for=\"(overall, key) in details\" :key=\"key\">\n      <div v-if=\"overall\" class=\"flex items-center py-2 gap-2\">\n        <RatingHearts class=\"text-thm\" :rating=\"overall\" />\n        <span>{{ $t(`${trPrefix}${key}`) }}</span>\n      </div>\n    </li>\n  </ul>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.reviews.Summary.'\n\nconst props = defineProps<{\n  condition: number\n  cleanliness: number\n  service: number\n}>()\n\nconst details = computed(() => ({\n  overallCondition: props.condition,\n  overallCleanliness: props.cleanliness,\n  overallService: props.service,\n}))\n</script>\n","<template>\n  <article class=\"overflow-hidden rounded bg-bgr shadow\">\n    <header\n      class=\"flex flex-wrap items-center justify-between gap-2 bg-thm px-4 py-2 text-txt-contrast\"\n    >\n      <RatingHearts :rating=\"rating\" color=\"white\" />\n      <span class=\"mr-auto text-base font-semibold\">{{\n        rounded ? $t(`${trPrefix}labels.${rounded}`) : ''\n      }}</span>\n      <span>{{ $t(`${trPrefix}overallRating`) }}</span>\n      <p class=\"pl-2 text-lg\">\n        <span>{{ formatted }}</span>\n        <small class=\"opacity-50\">{{ delim }} {{ max }}</small>\n      </p>\n    </header>\n\n    <ReviewDetails\n      :condition=\"condition\"\n      :cleanliness=\"cleanliness\"\n      :service=\"service\"\n      class=\"p-2 px-4 text-sm\"\n    />\n\n    <p class=\"text-center text-sm leading-10 text-txt\">\n      <span>{{ $t(`${trPrefix}basedOn_s`, reviewCount) }}</span>\n    </p>\n  </article>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.reviews.Summary.'\n\nconst props = defineProps<{\n  rating: number\n  condition: number\n  cleanliness: number\n  service: number\n  reviewCount: number\n}>()\n\nconst { rounded, formatted, delim, max } = useRating(() => props.rating)\n</script>\n","<template>\n  <div class=\"mt-4 flex items-center justify-end rounded bg-bgr p-4 shadow\">\n    <div class=\"w-full md:w-1/3\">\n      <WebccSelect\n        :label=\"$t(`${trPrefix}filters`)\"\n        component=\"WebccSelect\"\n        name=\"travelwith\"\n        :model-value=\"filterTravelWith\"\n        :options=\"filters\"\n        @update:model-value=\"onFilterChange\"\n      />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.Reviews.'\n\nconst { t } = useI18n()\n\nconst props = withDefaults(\n  defineProps<{\n    filterTravelWith: string\n    reviews: Review[]\n  }>(),\n  {\n    filterTravelWith: 'all',\n  },\n)\n\nconst emit = defineEmits<{\n  update: [string]\n}>()\n\nconst filters = computed(() => {\n  const types = [\n    ...new Set(\n      props.reviews\n        .map((review) => review.travelWith)\n        .filter((review) => review !== ''),\n    ),\n  ]\n  const result = [{ value: 'all', label: t(`${trPrefix}all`) }]\n  for (const type of types) {\n    result.push({\n      value: type,\n      label: t(`${trPrefix}${type}` as TranslationKey),\n    })\n  }\n  return result\n})\n\nfunction onFilterChange(newvalue: string) {\n  const travelWith = newvalue\n  console.log('t', travelWith)\n  emit('update', travelWith)\n}\n</script>\n","<template>\n  <article class=\"relative overflow-hidden rounded bg-bgr shadow\">\n    <WebccLoaderOverlay v-if=\"loadTranslation\" size=\"sm\" absolute />\n\n    <header class=\"flex items-center justify-between bg-bgr-200 px-4 py-2\">\n      <RatingHearts\n        :rating=\"review.rating\"\n        color=\"theme\"\n        class=\"flex-grow md:flex-grow-0\"\n      />\n\n      <span class=\"hidden flex-grow pl-3 text-base font-medium md:block\">{{\n        customizedReview?.title\n      }}</span>\n\n      <span class=\"mr-4\"\n        >{{ review.customer.firstname }} {{ review.customer.lastname }}</span\n      >\n\n      <WebccIcon\n        filled\n        :name=\"'flags/' + review.customer.country.toLowerCase()\"\n        class=\"mr-2 h-6 w-6\"\n      />\n\n      <button aria-label=\"more\" @click=\"toggleDetails()\">\n        <WebccIcon\n          filled\n          :name=\"`site/chevron-${showDetails ? 'up' : 'down'}`\"\n          class=\"h-6 w-6 stroke-1\"\n        />\n      </button>\n    </header>\n\n    <transition v-if=\"hasReviewDetails\" name=\"fade\">\n      <ReviewDetails\n        v-show=\"showDetails\"\n        :condition=\"review.detailRating.generalPropertyCondition\"\n        :cleanliness=\"review.detailRating.cleanlinessInGeneral\"\n        :service=\"review.detailRating.customerServiceInGeneral\"\n        class=\"list-none bg-bgr-200 px-4 py-3 text-sm\"\n      />\n    </transition>\n\n    <main class=\"prose prose-sm prose-neutral max-w-none p-3\">\n      <WebccButton\n        v-if=\"displayTranslationButton\"\n        size=\"sm\"\n        class=\"float-right mb-2 ml-2\"\n        :title=\"$t(`${trPrefix}byDeepl`)\"\n        @click=\"toggleTranslation\"\n      >\n        <span>{{\n          $t(`${trPrefix}${showTranslation ? 'backToOriginal' : 'translate'}`)\n        }}</span>\n      </WebccButton>\n      {{ customizedReview?.text }}\n      <template v-if=\"showTips && showDetails && review.tips\">\n        <h5 class=\"pt-4 text-base font-semibold\">\n          <span>{{ $t(`${trPrefix}travelTips`) }}</span\n          >:\n        </h5>\n        <p>{{ customizedReview?.tips }}</p>\n      </template>\n      <div\n        v-if=\"customizedReview?.replyText\"\n        class=\"py-3 pl-12 pr-6\"\n        style=\"padding: 0.8em 1.5em 0.8em 3em\"\n      >\n        <h4 class=\"mb-2 text-sm text-thm\">{{ $t(`${trPrefix}response`) }}</h4>\n        {{ customizedReview.replyText }}\n      </div>\n    </main>\n\n    <footer class=\"py-1 text-center text-sm text-txt\">\n      <span>{{ $t(`${trPrefix}reviewDate`, { date: reviewDate }) }}</span>\n      /\n      <span v-if=\"travelWith\">{{\n        $t(`${trPrefix}stayWith`, { with: travelWith, month: month })\n      }}</span>\n      <span v-else>{{ $t(`${trPrefix}stay`, { month }) }}</span>\n    </footer>\n  </article>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.reviews.Item.'\n\nconst { t } = useI18n()\n\ninterface Props {\n  review: Review\n  showNavigation?: boolean\n  locale?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  showNavigation: true,\n  locale: 'de',\n})\n\nconst showDetails: Ref<boolean> = ref(false)\nconst showTips: Ref<boolean> = ref(true)\nconst showTranslation: Ref<boolean> = ref(false)\nconst translatedReview: Ref<ReviewTranslation | null> = ref(null)\nconst translationDone: Ref<boolean> = ref(false)\nconst loadTranslation: Ref<boolean> = ref(false)\nconst { language } = useL10N()\n\nconst customizedReview = computed(() => {\n  if (showTranslation.value && translationDone.value) {\n    return {\n      text: translatedReview.value?.body.text,\n      tips: translatedReview.value?.tips.text,\n      replyText: translatedReview.value?.reply.text,\n      title: translatedReview.value?.title.text,\n    }\n  }\n  return {\n    text: props.review?.text,\n    tips: props.review?.tips,\n    replyText: props.review?.replyText,\n    title: props.review?.title,\n  }\n})\n\nconst travelWith = computed(() => {\n  return props.review.travelWith\n    ? t(`${trPrefix}${props.review.travelWith}` as TranslationKey)\n    : ''\n})\n\n// const flagIcon = computed(() => {\n//   return props.review.reviewCountry ? '/static/svg/flags.svg#' : '' // props.review.reviewCountry.toLowerCase() : ''\n// })\n\nconst month = computed(() => {\n  const date = new Date(props.review.arrivalDate)\n  return `${date.toLocaleString(props.locale, { month: 'long' })} ${date.getFullYear()}`\n})\n\nconst hasReviewDetails = computed(() => {\n  return (\n    !!props.review.detailRating.generalPropertyCondition ||\n    !!props.review.detailRating.cleanlinessInGeneral ||\n    !!props.review.detailRating.customerServiceInGeneral\n  )\n})\n\nconst reviewDate = computed(() => {\n  return new Date(props.review.published).toLocaleString(props.locale, {\n    year: 'numeric',\n    month: 'long',\n    day: 'numeric',\n  })\n})\n\nconst displayTranslationButton = computed(() => {\n  // Translation nur, wenn title oder text vorhanden -> diesen Check auf jeden Fall beibehalten\n  // review.language allein leider nicht verlässlich, deshalb Prüfung auf mehrere Kriterien -> bleibt aber Restunsicherheit, ggf. verzichten\n  return !!(\n    (props.review.title || props.review.text) &&\n    // // ggf. auf die folgenden Checks verzichten\n    (props.review.language.toLowerCase() !== language.toLowerCase() ||\n      props.review.customer.language.toLowerCase() !== language.toLowerCase())\n  )\n})\n\nfunction toggleDetails() {\n  if (showDetails.value) {\n    useTracking().handlers?.common.reviewsDetailsClosed()\n  } else {\n    useTracking().handlers?.common.reviewsDetailsOpened()\n  }\n  showDetails.value = !showDetails.value\n}\n\nfunction toggleTranslation() {\n  if (showTranslation.value) {\n    useTracking().handlers?.common.reviewsHideTranslation()\n  } else {\n    useTracking().handlers?.common.reviewsShowTranslation()\n  }\n  showTranslation.value = !showTranslation.value\n  if (translationDone.value === false) {\n    translateReview()\n  }\n}\n\nasync function translateReview() {\n  loadTranslation.value = true\n  const targetlang = language\n  const obj = {\n    title: props.review.title.replace(/\\r?\\n?/g, ''),\n    body: props.review.text.replace(/\\r?\\n?/g, ''),\n    tips: props.review.tips?.replace(/\\r?\\n?/g, '') || '',\n    targetlang,\n    reply: props.review.replyText?.replace(/'/g, ' ') || '',\n  }\n  try {\n    translatedReview.value = await useReviews().translate(obj)\n    translationDone.value = true\n  } catch (error) {\n    console.error(error)\n  } finally {\n    loadTranslation.value = false\n  }\n}\n</script>\n","<template>\n  <section\n    class=\"container-fluid-lg flex-col items-start justify-between md:flex\"\n  >\n    <main class=\"md:w-2/3\">\n      <div\n        v-if=\"rating?.numReviews === 0\"\n        class=\"relative rounded border-0 bg-bgr p-4 text-sm leading-4 shadow md:leading-5\"\n      >\n        <Alert\n          alert-type=\"info\"\n          content-type=\"tr\"\n          title=\"www.components.ui.alert.note\"\n          :content=\"`${trPrefix}review_s`\"\n        ></Alert>\n      </div>\n      <template v-if=\"rating?.overall\">\n        <ReviewSummary\n          :rating=\"rating.overall\"\n          :condition=\"rating.avgDetails!.avgCondition\"\n          :cleanliness=\"rating.avgDetails!.avgCleanliness\"\n          :service=\"rating.avgDetails!.avgService\"\n          :review-count=\"rating.numReviews\"\n        />\n        <ReviewFilter\n          :filter-travel-with=\"filter\"\n          :reviews=\"sorted\"\n          @update=\"onFilterChange\"\n        />\n      </template>\n      <template v-if=\"loading\"\n        ><span>{{ $t(`${trPrefix}loading`) }}</span></template\n      >\n      <template v-else>\n        <ReviewItem\n          v-for=\"(review, index) in filtered\"\n          :key=\"'review' + index\"\n          :locale=\"$i18n.locale\"\n          class=\"mt-8 last:mb-8\"\n          :review=\"review\"\n        />\n      </template>\n    </main>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.Reviews.'\n\nconst props = defineProps<{\n  code: string\n}>()\n\nconst webccApi = useWebccApi()\n\nconst filter = ref('all')\nconst { code } = toRefs(props)\n\nconst { data: rating, status } = await useAsyncData(\n  () => webccApi.accommodationReviews(code.value),\n  { watch: [code] },\n)\n\nconst loading = computed(() => status.value === 'pending')\nconst sorted = computed(\n  () =>\n    rating.value?.reviews?.toSorted((review1, review2) =>\n      review1.arrivalDate > review2.arrivalDate ? -1 : 1,\n    ) ?? [],\n)\nconst filtered = computed(() =>\n  filter.value === 'all'\n    ? sorted.value\n    : sorted.value.filter((r) => r.travelWith === filter.value),\n)\n\nfunction onFilterChange(travelWith: string) {\n  filter.value = travelWith\n}\n</script>\n","<template>\n  <div class=\"pr-2\">\n    <div v-if=\"reviewCount\" itemscope itemtype=\"http://schema.org/Product\">\n      <span itemprop=\"name\" :content=\"code\"></span>\n      <div\n        itemprop=\"aggregateRating\"\n        itemscope\n        itemtype=\"http://schema.org/AggregateRating\"\n      >\n        <span itemprop=\"worstRating\" content=\"1\"></span>\n        <span itemprop=\"bestRating\" content=\"5\"></span>\n        <span itemprop=\"ratingCount\" :content=\"reviewCount\"></span>\n        <span itemprop=\"ratingValue\" :content=\"formatted\"></span>\n      </div>\n    </div>\n    <button class=\"w-full\" :disabled=\"!value\" @click=\"onClick\">\n      <div class=\"flex flex-wrap items-center justify-between min-h-6\">\n        <RatingHearts\n          :rating=\"value\"\n          :color=\"value ? 'theme' : 'grey'\"\n          size=\"5\"\n        />\n        <span v-if=\"rounded\" class=\"text-thm\">{{\n          $t(`${trPrefix}labels.${rounded}`)\n        }}</span>\n      </div>\n      <div class=\"mt-2 flex flex-wrap items-center justify-between\">\n        <span class=\"text-start\">{{\n          $t(`${trPrefix}review_s`, reviewCount)\n        }}</span>\n        <span v-if=\"formatted\" class=\"flex-shrink-0\">\n          <span class=\"text-thm\">{{ formatted }}</span>\n          <span class=\"text-weak\">{{ delim }} {{ max }}</span>\n        </span>\n      </div>\n    </button>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nconst trPrefix = 'www.components.views.details.Rating.'\n\nconst props = defineProps<{\n  code: string\n  overall: number\n  reviewCount: number\n}>()\n\nconst emit = defineEmits<{\n  'rating-click': []\n}>()\n\nconst tracking = useTracking()\n\nconst { value, rounded, formatted, delim, max } = useRating(() => props.overall)\n\nfunction onClick() {\n  tracking.handlers?.detail.ratingHeartsClick(props.overall)\n  emit('rating-click')\n}\n</script>\n","export enum CheckPriceState {\n  Loading = 'LOADING',\n  Available = 'OK',\n  OnRequest = 'RQ',\n  Example = 'EX',\n  NotAvailable = 'NA',\n}\n\nexport function useCheckPrice(minPrice: ComputedRef<AccomPrice | null>) {\n  const { language, currency, salesoffice } = storeToRefs(useConfdata())\n  const partner = usePartner()\n  const result = ref<CheckPrice | null>(null)\n  const error = ref<Error | null>(null)\n\n  const optionPossible = computed(() => !!result.value?.optionCondition)\n  const services = computed(() => result.value?.services ?? [])\n  const alerts = computed(() => result.value?.alerts ?? [])\n  const cancelConditions = computed(() => result.value?.cancelConditions ?? [])\n\n  const price: ComputedRef<AccomPrice> = computed(() => {\n    if (!result.value) return {}\n\n    return {\n      regularPrice: result.value.price.regularRentalPrice,\n      price: result.value.price.customerTotalPrice,\n      reduction: result.value.price.specialPriceReduction * -1,\n      special: result.value.price.specialDescription,\n    }\n  })\n\n  const state: ComputedRef<CheckPriceState> = computed(() => {\n    if (error.value) return CheckPriceState.NotAvailable\n    if (result.value) return result.value.stateCode as CheckPriceState\n    if (minPrice.value) return CheckPriceState.Example\n\n    return CheckPriceState.Loading\n  })\n\n  async function loadFinal(\n    accommodation: string,\n    checkin: Date,\n    checkout: Date,\n    adults: number,\n  ) {\n    const headers: Headers = new Headers()\n    if (partner.jwt) headers.append('jwt', partner.jwt)\n\n    result.value = null\n    error.value = null\n\n    const response = await useFetch<CheckPrice>(\n      '/webcc-api/v1/booking/checkPrice/final',\n      {\n        params: {\n          accommodation,\n          checkin: toServerDate(checkin),\n          checkout: toServerDate(checkout),\n          adults,\n          salesoffice: salesoffice.value?.code,\n          language: language.value,\n          currency: currency.value,\n          partnerId: partner.id || undefined,\n        },\n        headers,\n      },\n    )\n\n    result.value = response.data.value\n    error.value = response.error.value\n  }\n\n  return {\n    result,\n    error,\n    state,\n    price,\n    optionPossible,\n    services,\n    alerts,\n    cancelConditions,\n    loadFinal,\n  }\n}\n","<template>\n  <div>\n    <div\n      v-if=\"vacancyOpen\"\n      class=\"fixed inset-0 z-1 bg-gray-900 bg-opacity-90 transition-opacity\"\n      aria-hidden=\"true\"\n      @click=\"toggleVacancyPopover\"\n    ></div>\n    <VDropdown\n      :aria-id=\"areaId\"\n      :delay=\"0\"\n      placement=\"left\"\n      :triggers=\"[]\"\n      :shown=\"vacancyOpen\"\n      :auto-hide=\"false\"\n      :distance=\"10\"\n      @click.stop\n    >\n      <section\n        class=\"relative mb-4 mt-8 rounded bg-bgr p-4 shadow\"\n        :class=\"{ 'z-1': vacancyOpen }\"\n      >\n        <!-- no PriceData -->\n        <!-- TODO: Bei fehlgeschlagenem CheckPrice führt das dazu, dass über die sidebar kein neues Datum ausgewählt werden kann -->\n        <div v-if=\"state === CheckPriceState.NotAvailable\">\n          <!-- Titel -->\n          <p class=\"mb-8 border-b-2 pb-2 text-sm\" :class=\"titleClass\">\n            {{ $t(`${trPrefix}messages.${props.state}`) }}\n          </p>\n          <WebccButton class=\"w-full\" variant=\"cta\" size=\"lg\">\n            <span>{{ $t(`${trPrefix}button.labels.NA`) }}</span>\n          </WebccButton>\n        </div>\n        <div v-else-if=\"!vacancies\">\n          <WebccButton class=\"w-full\" variant=\"cta\" size=\"lg\">\n            <span>{{ $t(`${trPrefix}button.labels.NA`) }}</span>\n          </WebccButton>\n        </div>\n        <div v-else>\n          <!-- Titel -->\n          <p class=\"border-b-2 pb-2 text-sm\" :class=\"titleClass\">\n            {{ $t(`${trPrefix}messages.${props.state}`) }}\n          </p>\n          <!-- Datumsfelder -->\n          <div class=\"mt-6 flex h-12 flex-nowrap\">\n            <label\n              class=\"mr-4 flex-shrink text-sm tracking-wider text-txt-weak\"\n            >\n              <!-- Hier haben wir auch Probleme bei der Datumsdarstellung -->\n              <WebccInput\n                v-cloak\n                v-model=\"checkin\"\n                name=\"checkin\"\n                :label=\"$t(`${trPrefix}labels.checkin`)\"\n                icon=\"site/calendar\"\n                :placeholder=\"$t(`${trPrefix}placeholder`)\"\n                readonly\n                @click=\"handleDateClick(true)\"\n              />\n            </label>\n            <label class=\"text-sm tracking-wider text-txt-weak\">\n              <WebccInput\n                v-cloak\n                v-model=\"checkout\"\n                name=\"checkout\"\n                :label=\"$t(`${trPrefix}labels.checkout`)\"\n                icon=\"site/calendar\"\n                :placeholder=\"$t(`${trPrefix}placeholder`)\"\n                readonly\n                @click=\"handleDateClick(false)\"\n              />\n            </label>\n          </div>\n          <!-- Pax-Select -->\n          <div class=\"mt-4\">\n            <label class=\"text-sm tracking-wider text-txt-weak\">\n              <DetailsPaxSelector\n                v-model=\"pax\"\n                v-tooltip=\"{\n                  content: !trip.checkin ? tooltips.paxSelect : '',\n                  html: true,\n                }\"\n                :max=\"paxUpTo\"\n                :prefix=\"trPrefix\"\n                :label=\"$t(`${trPrefix}labels.pax`)\"\n                :disabled=\"!trip.checkin\"\n              />\n            </label>\n          </div>\n\n          <!-- Beispielzeitraum MinPrice -->\n          <div class=\"mt-6 min-h-[6rem]\">\n            <div\n              v-if=\"!trip.checkin && price.checkin\"\n              class=\"text-left text-sm\"\n            >\n              <span>{{ $t(`${trPrefix}eg`) }}</span>\n              {{ formatDateRange(getTripDateRange(price)) }}\n            </div>\n            <!-- PricePerNight -->\n            <dl\n              v-if=\"pricePerNight\"\n              v-cloak\n              class=\"mt-1 flex flex-wrap justify-between text-sm\"\n            >\n              <dt class=\"mr-2\">{{ $t(`${trPrefix}price.base`) }}</dt>\n              <dd class=\"grow text-right text-sm font-normal\">\n                {{\n                  formatCurrency(\n                    pricePerNight,\n                    {\n                      minimumFractionDigits: 2,\n                      maximumFractionDigits: 2,\n                      useGrouping: false,\n                    },\n                    currency,\n                  )\n                }}\n              </dd>\n            </dl>\n            <!-- Price -->\n            <div\n              v-if=\"price.price\"\n              class=\"flex flex-wrap items-end justify-between align-baseline text-lg font-semibold text-[#676767]\"\n            >\n              <span class=\"mr-2 text-sm leading-6\">{{\n                $t(`${trPrefix}price.total`, { duration: duration.toString() })\n              }}</span>\n              <span class=\"grow text-right text-[#676767]\">\n                <span v-if=\"!trip.checkin\" class=\"text-sm\">{{\n                  $t(`${trPrefix}priceFrom`)\n                }}</span>\n                {{ formatCurrency(price.price, undefined, currency) }}\n              </span>\n            </div>\n            <!-- SpecialPriceReduction -->\n            <div\n              v-if=\"price.reduction\"\n              class=\"mt-1 divide-x divide-double text-right text-sm text-hlt-hover\"\n            >\n              <span class=\"pr-2 line-through\">{{\n                formatCurrency(price.regularPrice!, undefined, currency)\n              }}</span>\n              <span class=\"pl-2\">\n                {{ formatCurrency(price.reduction, undefined, currency) }}\n                <span>{{ $t(`${trPrefix}saved`) }}</span>\n              </span>\n            </div>\n\n            <!-- Nebenkosten-Link und Belegungshinweis -->\n            <div v-if=\"state === CheckPriceState.Available\" class=\"mt-4\">\n              <p class=\"text-sm\">\n                <span>{{ $t(`${trPrefix}priceOccupancy`) }}</span\n                >:\n                <span>{{ $t(`${trPrefix}person_s`, pax) }}</span>\n              </p>\n\n              <p\n                class=\"mt-1 flex cursor-pointer text-sm\"\n                @click=\"emit('scrollto', 'costsRef')\"\n              >\n                <span>{{ $t(`${trPrefix}toOverview`) }}</span>\n                <span>&nbsp;</span>\n                <span>{{ $t(`${trPrefix}additionalCosts`) }}</span>\n                <span\n                  ><WebccIcon\n                    class=\"!block h-7 w-7 text-[#676767]\"\n                    name=\"site/chevron-right\"\n                    filled\n                /></span>\n              </p>\n            </div>\n            <WebccFreeCancellationInfo\n              v-if=\"trip.checkin\"\n              v-track:impression=\"{\n                event: 'search:freeCancellationImpression',\n              }\"\n              :checkin-date=\"new Date(trip.checkin)\"\n              :free-cancellation-range=\"freeCancellationRange\"\n              :full-parent-width=\"true\"\n              class=\"mt-2\"\n              :locale=\"useL10N().locale\"\n            />\n          </div>\n          <!-- buttons -->\n          <div class=\"m-auto mt-6 w-full text-center text-sm lg:w-5/6\">\n            <!-- booking button -->\n            <WebccButton\n              class=\"w-full\"\n              variant=\"cta\"\n              size=\"lg\"\n              :disabled=\"!price.price\"\n              @click=\"onBookingClick(false)\"\n            >\n              <span>{{ $t(`${trPrefix}button.labels.${state}`) }}</span>\n            </WebccButton>\n            <!-- option button -->\n            <WebccButton\n              v-if=\"optionPossible\"\n              class=\"mt-4 w-full\"\n              variant=\"cta\"\n              size=\"lg\"\n              @click=\"onBookingClick(true)\"\n            >\n              <span>{{ $t(`${trPrefix}button.labels.OP`) }}</span>\n            </WebccButton>\n            <small class=\"block pt-2 leading-tight text-[#676767]\">{{\n              $t(`${trPrefix}summary`)\n            }}</small>\n          </div>\n          <WebccLoaderOverlay\n            v-if=\"state === CheckPriceState.Loading\"\n            absolute\n            type=\"blocks\"\n            :message=\"$t(`${trPrefix}messages.LOADING`)\"\n          />\n        </div>\n      </section>\n      <template #popper>\n        <div v-if=\"vacancies\" class=\"relative\">\n          <DetailsVacancy\n            v-model=\"trip\"\n            class=\"top-6 min-w-[22rem] rounded p-2\"\n            :vacancies=\"vacancies\"\n            :pax-up-to=\"paxUpTo\"\n          />\n          <button\n            class=\"absolute right-4 top-4 cursor-pointer rounded-full bg-black/40 text-white hover:bg-black/60\"\n            @click=\"toggleVacancyPopover\"\n          >\n            <WebccIcon name=\"site/x\" class=\"h-6 w-6 stroke-2 p-0.5\" />\n          </button>\n        </div>\n      </template>\n    </VDropdown>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.Sidebar.'\n\nconst { t } = useI18n()\n\nconst vacancyOpen: Ref<boolean> = ref(false)\n\ninterface Props {\n  modelValue?: TripUpdate\n  state: CheckPriceState\n  price: AccomPrice\n  vacancies?: Trips | null\n  paxUpTo?: number\n  optionPossible?: boolean\n  accommodation: TranslatedAccommodation\n  freeCancellationRange: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  modelValue: () => ({}) as TripUpdate,\n  price: () => ({}) as AccomPrice,\n  vacancies: () => ({}) as Trips,\n  paxUpTo: 1,\n  optionPossible: false,\n  freeCancellationRange: 0,\n})\n\nconst emit = defineEmits<{\n  'update:modelValue': [TripUpdate]\n  book: [BookingOptions]\n  scrollto: [string]\n}>()\n\nconst areaId = useId()\n\nconst titleClasses: Record<string, string> = {\n  [CheckPriceState.Available]: 'border-suc',\n  [CheckPriceState.OnRequest]: 'border-wrn',\n  [CheckPriceState.NotAvailable]: 'border-err',\n  [CheckPriceState.Example]: 'border-bgr-300',\n  [CheckPriceState.Loading]: 'border-bgr-300',\n}\n\nconst vacancyPopover = computed(() => useAB().isActive('vacancypopover'))\nconst titleClass = computed(() => titleClasses[props.state])\nconst currency = computed(() => useConfdata().currency)\nconst checkin = computed(() =>\n  props.modelValue.checkin\n    ? formatDatetime(toDate(props.modelValue.checkin))\n    : '',\n)\nconst checkout = computed(() =>\n  props.modelValue.checkout\n    ? formatDatetime(toDate(props.modelValue.checkout))\n    : '',\n)\nconst duration = computed(\n  () =>\n    getTripDuration(props.modelValue) ??\n    props.price.duration ??\n    DURATION_DEFAULT,\n)\n\nconst pax = computed({\n  get() {\n    return props.modelValue.pax || props.paxUpTo\n  },\n  set(value) {\n    emit('update:modelValue', { pax: parseInt(value.toString()) })\n  },\n})\n\nconst trip = computed({\n  get() {\n    return props.modelValue\n  },\n  set(value) {\n    emit('update:modelValue', value)\n    toggleVacancyPopover()\n  },\n})\n\nconst pricePerNight = computed(() => {\n  if (props.price.price && pax.value && duration.value) {\n    return props.price.price / pax.value / duration.value\n  }\n  return 0\n})\n\nconst tooltips = computed(() => {\n  return {\n    costOverview: false,\n    paxSelect: `${t(`${trPrefix}paxNoDuration`)}<br />${t(`${trPrefix}paxAfterDuration`)}`,\n    currency: 'fake',\n  }\n})\n\nfunction handleDateClick(trackDateClick: boolean) {\n  if (trackDateClick) {\n    useTracking().handlers?.detail.sidebarDateClick()\n    useTracking().handlers?.detail.sidebarArrivalDate(props.modelValue.checkin)\n  }\n  if (vacancyPopover.value) {\n    toggleVacancyPopover()\n  } else {\n    emit('scrollto', 'vacanciesRef')\n  }\n}\n\nfunction onBookingClick(isOption: boolean) {\n  if (\n    props.state === CheckPriceState.Available ||\n    props.state === CheckPriceState.OnRequest\n  ) {\n    useTracking().handlers?.ecommerce.addToCart(\n      Object.assign(props.accommodation, props.price, props.modelValue),\n    )\n    emit('book', { isOption })\n  } else if (!vacancyOpen.value && vacancyPopover.value) {\n    toggleVacancyPopover()\n  } else {\n    emit('scrollto', 'vacanciesRef')\n  }\n}\n\nfunction toggleVacancyPopover() {\n  if (vacancyOpen.value) {\n    document.body.classList.remove('overflow-hidden', 'pr-[15px]')\n  } else {\n    document.body.classList.add('overflow-hidden', 'pr-[15px]')\n  }\n  vacancyOpen.value = !vacancyOpen.value\n}\n</script>\n","<template>\n  <section\n    v-if=\"useL10N().language !== 'de' && !$params.iframe\"\n    class=\"relative bottom-0 mt-12 rounded bg-bgr px-9 pb-4 pt-0 shadow\"\n  >\n    <header\n      class=\"left-[10%] right-[10%] -mb-2 inline-table w-full -translate-y-1/2 cursor-default whitespace-normal rounded bg-thm p-1 text-center text-sm font-normal text-txt-contrast\"\n    >\n      <span>{{ $t(`${trPrefix}furtherQuestions`) }}</span>\n      <br />\n      <small class=\"text-txt-contrast\">{{ $t(`${trPrefix}24_7`) }}</small>\n    </header>\n\n    <p class=\"font-semibold\">{{ $t(`${trPrefix}contactUs`) }}</p>\n\n    <p class=\"my-2\">\n      <WebccLink\n        anchor\n        class=\"flex items-center text-xl font-bold text-thm\"\n        :to=\"'tel:' + phone.replace(' ', '')\"\n        @click=\"useTracking().handlers?.detail.contactClick('Phone')\"\n      >\n        <WebccIcon\n          name=\"detailpage/phone-duplicate-telefon\"\n          class=\"mr-3 inline-block h-6 w-6\"\n        />\n        {{ phone }}\n      </WebccLink>\n    </p>\n    <p class=\"my-2\">\n      <WebccLink\n        anchor\n        class=\"flex items-center text-base text-thm\"\n        :to=\"'mailto:' + email\"\n        @click=\"useTracking().handlers?.detail.contactClick('Email')\"\n      >\n        <WebccIcon\n          name=\"detailpage/mail-duplicate\"\n          class=\"mr-3 inline-block h-6 w-6\"\n        />\n        {{ email }}\n      </WebccLink>\n    </p>\n\n    <p class=\"my-3 text-sm\">{{ $t(`${trPrefix}counsel`) }}</p>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.SidebarContactCard.'\n\ndefineProps<{\n  phone: string\n  email: string\n}>()\n\n// const generalRequestExists = computed(() => {\n//   return props.generalRequestUrl && props.generalRequestUrl.substring(0, 1) !== '?'\n// })\n</script>\n","<template>\n  <div\n    :class=\"{\n      'rounded-tr-lg':\n        (!isOpen.value && state !== CheckPriceState.Available) || isOpen.value,\n    }\"\n    class=\"fixed bottom-0 z-1 w-full rounded-tl-lg bg-bgr shadow-[0_15px_15px_15px_rgba(0,0,0,0.3)] md:hidden\"\n  >\n    <template v-if=\"!isOpen.value && state === CheckPriceState.Available\">\n      <div\n        class=\"absolute -top-6 right-0 h-6 cursor-pointer rounded-tl-lg bg-bgr-400 px-2 py-1 text-xs text-white\"\n        @click.stop=\"toggle\"\n      >\n        {{ $t(`${trPrefix}changeDate`) }}\n      </div>\n    </template>\n    <div\n      v-if=\"vacancies && isOpen.value\"\n      class=\"relative h-0 overflow-hidden transition-height duration-700\"\n      :class=\"{ 'h-[25rem]': isOpen.value }\"\n    >\n      <button\n        class=\"absolute right-2 top-2 cursor-pointer rounded-full bg-black/40 text-txt-contrast hover:bg-black/60\"\n        @click.stop=\"toggle\"\n      >\n        <WebccIcon name=\"site/x\" class=\"h-6 w-6 stroke-2 p-0.5\" />\n      </button>\n\n      <DetailsVacancy\n        v-model=\"trip\"\n        class=\"top-6 w-full rounded p-2\"\n        :vacancies=\"vacancies\"\n        :pax-up-to=\"paxUpTo\"\n      />\n    </div>\n\n    <!-- Price -->\n    <div\n      :class=\"{ 'rounded-tl-none rounded-tr-none': isOpen.value }\"\n      class=\"rounded-tl-lg rounded-tr-lg px-2 py-2\"\n    >\n      <div class=\"float-right ml-2 flex grow-0 flex-col\">\n        <!-- booking button -->\n        <WebccButton\n          class=\"min-w-[10rem]\"\n          variant=\"cta\"\n          size=\"sm\"\n          @click.stop=\"onBookingClick(false)\"\n        >\n          <span>{{ $t(`${trPrefix}button.labels.${state}`) }}</span>\n        </WebccButton>\n        <!-- option button -->\n        <WebccButton\n          v-if=\"optionPossible\"\n          class=\"mt-2\"\n          variant=\"cta\"\n          size=\"sm\"\n          @click.stop=\"onBookingClick(true)\"\n        >\n          <span>{{ $t(`${trPrefix}button.labels.OP`) }}</span>\n        </WebccButton>\n      </div>\n      <div class=\"mr-2 text-base font-semibold text-[#676767]\">\n        <p class=\"min-h-[1.5rem]\">\n          <span v-if=\"!isTripSelected\">{{ $t(`${trPrefix}priceFrom`) }}</span>\n          {{ formattedPrice }}\n        </p>\n        <p class=\"text-sm font-normal\">\n          <span v-if=\"!isTripSelected\">{{ $t(`${trPrefix}eg`) }}</span>\n          {{ formattedRange }}\n        </p>\n      </div>\n      <div class=\"text-sm text-[#676767]\">\n        <span>{{ $t(`${trPrefix}upToPax`, trip.pax) }}</span> /\n        <span\n          v-tooltip=\"additionalCostsTooltip\"\n          class=\"cursor-pointer\"\n          @mouseenter.stop=\"onAdditionalCostsTooltipMouseEnter\"\n        >\n          <span>{{ $t(`${trPrefix}additionalCosts`) }}</span>\n          <WebccIcon\n            class=\"inline-flex relative top-1 h-4 w-4 text-thm\"\n            name=\"site/info\"\n          />\n        </span>\n      </div>\n      <WebccFreeCancellationInfo\n        v-if=\"trip.checkin\"\n        v-track:impression=\"{ event: 'search:freeCancellationImpression' }\"\n        :checkin-date=\"new Date(trip.checkin)\"\n        :free-cancellation-range=\"freeCancellationRange\"\n        class=\"mt-2\"\n        :locale=\"useL10N().locale\"\n      />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.MobileBar.'\n\nconst { t } = useI18n()\n\ninterface Props {\n  modelValue?: TripUpdate\n  state: CheckPriceState\n  price: AccomPrice\n  vacancies?: Trips | null\n  paxUpTo?: number\n  optionPossible?: boolean\n  accommodation: TranslatedAccommodation\n  freeCancellationRange: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  modelValue: () => ({}) as TripUpdate,\n  price: () => ({}) as AccomPrice,\n  vacancies: () => ({}) as Trips,\n  paxUpTo: 1,\n  optionPossible: false,\n  freeCancellationRange: 0,\n})\n\nconst emit = defineEmits<{\n  'update:modelValue': [TripUpdate]\n  book: [BookingOptions]\n}>()\n\nconst toggleName = 'bottomAvailabilityCard'\nuseToggler().register(toggleName)\n\nconst currency = computed(() => useConfdata().currency)\nconst isOpen = computed(() => useToggler().toggles(toggleName))\n\nconst isTripSelected = computed(() => !!props.modelValue?.checkin)\nconst range = computed(() =>\n  isTripSelected.value ? props.modelValue : props.price,\n)\nconst formattedRange = computed(() =>\n  formatDateRange(getTripDateRange(range.value)),\n)\nconst formattedPrice = computed(() =>\n  formatCurrency(props.price.price!, undefined, currency.value),\n)\n\nconst trip = computed({\n  get() {\n    return props.modelValue\n  },\n  set(value) {\n    emit('update:modelValue', value)\n    if (isTripSelected.value) toggle()\n  },\n})\n\nconst additionalCostsTooltip = computed(() => {\n  const dependentPrice = t(`${trPrefix}tooltip.dependentPrice`)\n  const priceAfterInput = t(`${trPrefix}tooltip.priceAfterInput`)\n  const addCosts = t(`${trPrefix}tooltip.addCosts`)\n  const addCostsLong = t(`${trPrefix}tooltip.addCostsLong`)\n\n  const content = [\n    `<b>${dependentPrice}</b>`,\n    priceAfterInput,\n    `<b>${addCosts}</b>`,\n    addCostsLong,\n  ].join('<br/>')\n\n  return { content, html: true, triggers: ['hover', 'click'] }\n})\n\nfunction toggle() {\n  useToggler().toggle(toggleName)\n}\n\nfunction onBookingClick(isOption: boolean) {\n  if (props.state === CheckPriceState.Available) {\n    emit('book', { isOption })\n  } else {\n    toggle()\n  }\n}\n\nfunction onAdditionalCostsTooltipMouseEnter() {\n  useTracking().handlers?.detail.tooltipAdditionalCosts()\n}\n</script>\n","export function createBookingPending(\n  accommodation: TranslatedAccommodation,\n  trip: TripParams,\n  options?: BookingOptions,\n): BookingPending {\n  return {\n    accom: {\n      code: accommodation.code,\n      name: accommodation.name,\n      slug: accommodation.slug,\n      country: { code: accommodation.country?.code },\n      type: { translation: accommodation.type.translation },\n      evaluation: { stars: accommodation.evaluation.stars },\n      image: ((useSeason() === 's'\n        ? accommodation.media?.images_s\n        : accommodation.media?.images_w) ?? [])[0],\n    },\n    trip: {\n      checkin: toDate(trip.checkin),\n      checkout: toDate(trip.checkout),\n      duration: calculateDuration(trip.checkin, trip.checkout),\n      pax: trip.pax,\n    },\n    isOption: options?.isOption,\n    timestamp: new Date().toISOString(),\n  }\n}\n","export function useBookingsPending() {\n  const lastBookingStorage = useLocalStorage<{\n    value?: BookingPending\n    expire: null\n  } | null>('vuejs__lastBooking', { expire: null })\n\n  const last = computed({\n    get() {\n      if (!useStorageReady()) return\n\n      return lastBookingStorage.value?.value\n    },\n    set(value: BookingPending | undefined) {\n      if (!useStorageReady()) return\n\n      lastBookingStorage.value = { value, expire: null } // expire null means never\n    },\n  })\n\n  function save(booking: BookingPending): void {\n    last.value = booking\n  }\n\n  async function getLast(): Promise<BookingPending | undefined> {\n    if (last.value && !(await verify(last.value))) dismissLast()\n\n    return last.value\n  }\n\n  function dismissLast(): void {\n    last.value = undefined\n  }\n\n  async function verify({\n    accom,\n    trip,\n    timestamp,\n  }: BookingPending): Promise<boolean> {\n    if (inPast(trip.checkin) || daysBefore(timestamp || '0') <= -7) return false\n\n    const { error } = await useWebccApi().accommodationCheckTrip(accom.code, {\n      checkin: trip.checkin,\n      checkout: trip.checkout,\n      adults: trip.pax,\n      language: useL10N().language,\n      currency: useConfdata().currency,\n      salesoffice: useConfdata().salesoffice?.code || '2048',\n    })\n\n    return !error.value\n  }\n\n  return { save, getLast, dismissLast }\n}\n","<template>\n  <div class=\"bg-bgr-50\">\n    <div\n      class=\"container-fluid-lg flex flex-row-reverse flex-wrap items-baseline\"\n    >\n      <div class=\"ml-2 flex py-2.5\">\n        <client-only>\n          <WebccButton\n            v-if=\"actions.includes('bookmark') && useStorageReady()\"\n            :variant=\"isBookmarked ? 'theme' : ''\"\n            icon=\"site/bookmark\"\n            :icon-filled=\"true\"\n            class=\"flex items-center\"\n            size=\"md\"\n            @click=\"handleBookmark()\"\n          >\n            <span>{{\n              $t(`${trPrefix}${isBookmarked ? 'bookmarkDel' : 'bookmarkAdd'}`)\n            }}</span>\n          </WebccButton>\n        </client-only>\n        <DetailsSocialShare\n          v-if=\"actions.includes('share') && showSocialShare\"\n          class=\"ml-2\"\n          @open=\"tracking.handlers?.detail.openRecommendationLayer()\"\n        />\n      </div>\n      <DetailsBreadcrumbs\n        v-if=\"showBreadcrumbs\"\n        :accom=\"accommodation!\"\n        :language-prefix=\"languagePrefix\"\n        class=\"flex-grow\"\n      />\n    </div>\n\n    <div class=\"container-fluid-lg relative\">\n      <DetailsGallery\n        v-if=\"noFacettedGallery\"\n        :accom=\"accommodation\"\n        :checkin=\"trip.checkin\"\n        class=\"mb-4 aspect-[4/3] rounded bg-bgr-100 shadow sm:aspect-[2/1]\"\n        @open-gallery=\"toggleGallery($event, 'imageClick')\"\n      />\n      <FacettedGallery\n        v-else\n        :checkin=\"trip.checkin\"\n        class=\"rounded\"\n        :accom=\"accommodation\"\n        @open-gallery-modal=\"toggleGallery($event, 'imageClick')\"\n      />\n      <div\n        v-if=\"Object.keys(accommodation!.media.items).length > 0\"\n        class=\"flex w-full justify-center sm:absolute sm:bottom-4 sm:left-4 sm:w-48\"\n      >\n        <WebccButton\n          variant=\"theme\"\n          outline\n          class=\"w-48\"\n          size=\"md\"\n          @click=\"toggleGallery('', 'allImages')\"\n        >\n          <span>{{\n            $t('www.components.views.details.ModalGallery.open')\n          }}</span>\n        </WebccButton>\n      </div>\n    </div>\n\n    <div class=\"container-fluid-lg\">\n      <DetailsModalGallery\n        v-if=\"galleryModalOpen\"\n        :accom=\"accommodation!\"\n        :checkin=\"trip.checkin\"\n        :scroll-to-img=\"scrollToImg\"\n        :is-bookmarked=\"isBookmarked\"\n        :show-bookmark=\"actions.includes('bookmark')\"\n        @close=\"toggleGallery('', '')\"\n        @toggle-bookmark=\"toggleBookmark()\"\n      />\n      <DetailsTitle\n        :accom=\"accommodation!\"\n        class=\"mb-1.5 mt-4 md:mb-4 md:w-2/3\"\n      />\n    </div>\n\n    <div class=\"container-fluid-lg items-stretch justify-between md:flex\">\n      <main class=\"md:w-2/3\">\n        <div\n          v-if=\"accommodation && accommodation.rating.overall > 0\"\n          class=\"mb-3 mt-1 flex cursor-pointer flex-row items-center justify-start gap-1 text-sm font-semibold text-thm md:hidden\"\n          @click=\"scrollto('reviewsRef')\"\n        >\n          <span class=\"flex\">\n            <WebccIcon\n              name=\"reviews/heart\"\n              class=\"h-3 w-3\"\n              role=\"img\"\n              aria-hidden=\"true\"\n              focusable=\"false\"\n              :alt=\"rating.text.value\"\n            />\n          </span>\n          <span class=\"\"> {{ rating.text }} </span>\n          <span class=\"flex items-center\">\n            (\n            <span>{{\n              $t(`${trPrefix}review_s`, accommodation.rating.numReviews)\n            }}</span>\n            )\n          </span>\n        </div>\n\n        <section class=\"mb-4 flex flex-col items-center\">\n          <div\n            v-if=\"showDescriptionsDerived\"\n            class=\"mb-8 w-full bg-bgr px-4 py-6 font-semibold shadow\"\n          >\n            {{ descriptionsDerived.headline }}\n          </div>\n          <DetailsFeatures class=\"w-full\" :accom=\"accommodation!\" />\n        </section>\n\n        <DetailsAttributes\n          v-track:impression=\"'detail:attributeImpression'\"\n          :themes=\"accommodation?.themes\"\n          :attributes=\"accommodation?.attributes\"\n          :distances=\"accommodation?.distances\"\n        />\n        <div\n          v-if=\"alerts.length > 0\"\n          class=\"relative mt-4 space-y-4 rounded border-0 bg-bgr p-4 text-sm leading-4 shadow md:leading-5\"\n        >\n          <Alert\n            v-for=\"(alert, i) in alerts\"\n            :key=\"i\"\n            alert-type=\"info\"\n            content-type=\"text\"\n            :title=\"alert.title\"\n            :content=\"alert.content\"\n          ></Alert>\n        </div>\n\n        <WebccHeading\n          :title=\"$t(`${trPrefix}headings.description`)\"\n          :level=\"3\"\n          icon=\"detailpage/document\"\n        />\n        <!-- <DetailsDescription v-track:impression=\"'detail:descriptionImpression'\" :descriptions=\"accommodation?.descriptions\" :check-in=\"trip.checkin\" /> -->\n        <component\n          :is=\"showDescriptionsDerived ? 'WebccExpandable' : 'span'\"\n          :class=\"\n            showDescriptionsDerived ? 'w-full bg-bgr px-5 py-6 shadow' : ''\n          \"\n          @expand=\"\n            () =>\n              showDescriptionsDerived\n                ? tracking.handlers?.detail.showDescriptionText()\n                : undefined\n          \"\n        >\n          <div v-if=\"showDescriptionsDerived\" class=\"mb-8 leading-7\">\n            {{ descriptionsDerived.description }}\n          </div>\n          <DetailsDescription\n            v-track:impression=\"'detail:descriptionImpression'\"\n            :descriptions=\"accommodation?.descriptions\"\n            :checkin=\"trip.checkin\"\n          />\n        </component>\n\n        <DetailsResidence :accom=\"accommodation\" />\n\n        <DetailsDestinationDescription :place=\"accommodation?.place\" />\n\n        <WebccHeading\n          :title=\"$t(`${trPrefix}headings.map`)\"\n          :level=\"3\"\n          icon=\"detailpage/map\"\n        />\n        <DetailsMap\n          v-track:impression=\"'detail:mapImpression'\"\n          :accom=\"accommodation!\"\n        />\n\n        <template v-if=\"vacancies\">\n          <WebccHeading\n            id=\"vacancies\"\n            class=\"hidden md:flex\"\n            :title=\"$t(`${trPrefix}headings.availability`)\"\n            :level=\"3\"\n            icon=\"site/calendar\"\n          />\n          <DetailsVacancy\n            ref=\"vacanciesRef\"\n            class=\"w-full rounded p-2 md:p-0 md:shadow\"\n            :vacancies=\"vacancies\"\n            :pax-up-to=\"paxUpTo\"\n            :model-value=\"trip\"\n            @update:model-value=\"onUpdateTrip\"\n          />\n        </template>\n\n        <WebccHeading\n          :title=\"$t(`${trPrefix}headings.costoverview`)\"\n          :level=\"3\"\n          icon=\"detailpage/document\"\n        />\n        <DetailsServices\n          id=\"costs\"\n          ref=\"costsRef\"\n          v-track:impression=\"'detail:costOverviewImpression'\"\n          :links=\"navigationLinks!\"\n          :services=\"services\"\n          :loading=\"false\"\n        />\n\n        <template v-if=\"cancelConditions.length\">\n          <!-- TODO: ab test später wieder rein? -->\n          <WebccHeading\n            :title=\"$t('www.components.views.details.CancelConditions.heading')\"\n            :level=\"3\"\n            icon=\"detailpage/document\"\n          />\n          <DetailsCancelConditions\n            v-if=\"trip.checkin\"\n            :conditions=\"cancelConditions\"\n            :trip=\"{ checkin: new Date(trip.checkin) }\"\n          />\n        </template>\n\n        <WebccHeading\n          :title=\"$t('www.components.views.PageDetails.headings.reviews')\"\n          :level=\"3\"\n          icon=\"detailpage/like\"\n        />\n        <DetailsReviews\n          id=\"reviews\"\n          ref=\"reviewsRef\"\n          v-track:impression=\"'detail:reviewsImpression'\"\n          :code=\"accommodation!.code\"\n          :rating=\"accommodation?.rating\"\n          :reviews=\"[]\"\n        />\n        <template\n          v-if=\"showLabels && (casa || swisspeakResort || swissTourism || lso)\"\n        >\n          <WebccHeading\n            :title=\"$t(`${trPrefix}headings.advantages`)\"\n            :level=\"3\"\n          />\n          <DetailsLabelInfo\n            :accom=\"accommodation\"\n            :content=\"(confData.additionalBody as DetailpageBody).badges\"\n            :casa=\"casa\"\n            :lso=\"lso\"\n            :swisspeak-resort=\"swisspeakResort\"\n            :swiss-tourism=\"swissTourism\"\n          />\n        </template>\n      </main>\n\n      <aside class=\"hidden md:block md:w-1/3 md:pl-6\">\n        <DetailsRating\n          :code=\"accommodation?.code\"\n          :overall=\"accommodation?.rating.overall\"\n          :review-count=\"accommodation?.rating.numReviews\"\n          class=\"pr-2\"\n          @rating-click=\"scrollto('reviewsRef')\"\n        />\n        <div class=\"sticky top-4\">\n          <DetailsSidebarAvailabilityCard\n            ref=\"sidebarRef\"\n            :accommodation=\"accommodation\"\n            :state=\"state\"\n            :free-cancellation-range=\"freeCancellationRange\"\n            :price=\"minPrice || price\"\n            :option-possible=\"optionPossible\"\n            :pax-up-to=\"paxUpTo\"\n            :vacancies=\"vacancies\"\n            :model-value=\"trip\"\n            @update:model-value=\"onUpdateTrip\"\n            @book=\"book\"\n            @scrollto=\"scrollto\"\n          />\n          <DetailsSidebarContactCard\n            v-if=\"showContactCard\"\n            :phone=\"salesoffice!.phone\"\n            :email=\"salesoffice!.email\"\n          />\n        </div>\n      </aside>\n    </div>\n\n    <DetailsBottomAvailabilityCard\n      class=\"fixed bottom-0 z-5\"\n      :accommodation=\"accommodation\"\n      :state=\"state\"\n      :free-cancellation-range=\"freeCancellationRange\"\n      :price=\"minPrice || price\"\n      :option-possible=\"optionPossible\"\n      :pax-up-to=\"paxUpTo\"\n      :vacancies=\"vacancies\"\n      :model-value=\"trip\"\n      @update:model-value=\"onUpdateTrip\"\n      @book=\"book\"\n      @scrollto=\"scrollto\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { storeToRefs } from 'pinia'\nimport type { TranslatedAccommodationWithPrice } from '~/resources/tracking/ecommerce'\n\nconst trPrefix = 'www.components.views.PageDetails.'\n\ntype ActionType = 'bookmark' | 'share'\n\nwithDefaults(\n  defineProps<{\n    showLabels?: boolean\n    showContactCard?: boolean\n    showBreadcrumbs?: boolean\n    actions?: ActionType[]\n  }>(),\n  {\n    showLabels: true,\n    showContactCard: true,\n    showBreadcrumbs: true,\n    actions: () => ['bookmark', 'share'],\n  },\n)\n\nconst params = useParams()\nconst route = useRoute()\nconst confData = useConfdata()\nconst partner = usePartner()\nconst { languagePrefix, salesoffice } = storeToRefs(confData)\nconst tracking = useTracking()\nconst screen = useScreen()\nconst addToWishlistEvt = useEventBus<AccommodationDto>('addToWishlist')\nconst deleteFromWishlistEvt =\n  useEventBus<AccommodationDto>('deleteFromWishlist')\n\nconst vacancies = ref<Trips>()\nconst queryParams = params.all\n\nconst showSocialShare = computed(() => {\n  return !params.iframe\n})\n\nconst accommodation = computed(\n  () => confData.baseData as TranslatedAccommodation,\n)\nawait loadAccommodation()\nconst trip = ref<TripUpdate>({\n  checkin: tryParseDate(queryParams.checkin?.toString()),\n  checkout: tryParseDate(queryParams.checkout?.toString()),\n  pax:\n    tryParseInt(queryParams.pax?.toString()) ??\n    vacancies.value?.minPriceTrip?.paxUpTo ??\n    1,\n})\nconst galleryModalOpen = ref(false)\nconst scrollImg = ref('')\n\nconst vacanciesRef = ref()\nconst costsRef = ref()\nconst reviewsRef = ref()\nconst sidebarRef = ref()\n\nconst minPrice: ComputedRef<AccomPrice | null> = computed(() => {\n  const minPriceTrip = vacancies.value?.minPriceTrip\n  if (trip.value?.checkin || !minPriceTrip) return null\n  const { price, regular, checkin, duration } = minPriceTrip\n\n  return {\n    price,\n    reduction: regular - price,\n    regularPrice: regular,\n    checkin,\n    checkout: toDate(calculateCheckoutDate(checkin, duration)),\n    duration,\n  }\n})\n\nconst checkPrice = useCheckPrice(minPrice)\nconst { state, price, optionPossible, services, cancelConditions } = checkPrice\n\nconst navigationLinks = computed(() => useConfdata().links)\nconst season = computed(() => useSeason(trip.value!.checkin))\nconst scrollToImg = computed(() => scrollImg.value)\nconst freeCancellationRange = computed(() =>\n  getFreeCancellationRange(cancelConditions.value),\n)\nconst isBookmarked = computed(() =>\n  useBookmarks().raw.includes(accommodation.value!.code),\n)\nconst rating = useRating(() => accommodation.value.rating.overall)\n\nconst noFacettedGallery = computed(() => {\n  const key = `images_${season.value}`\n  return (\n    screen.isExtraSmall ||\n    (accommodation.value?.media[key as keyof Media] as string[]).length <= 3\n  )\n})\n\nconst paxUpTo = computed(() => {\n  const validities = accommodation.value?.pax.validities ?? []\n  const checkin = trip.value.checkin && toServerDate(trip.value.checkin)\n\n  const [validity] =\n    validities.length > 1 && checkin\n      ? validities.filter(\n          ({ from, to }) =>\n            (!from && checkin <= to) ||\n            (from <= checkin && checkin <= to) ||\n            (from <= checkin && !to),\n        )\n      : validities\n\n  return validity?.value ?? accommodation.value?.pax.capacity\n})\n\nconst alerts = computed(() => {\n  return checkPrice.alerts.value.map(({ validFrom, validTo, description }) => ({\n    title: 'www.components.ui.alert.importantObjectNote',\n    content: `${new Date(validFrom)} - ${new Date(validTo)}: ${description}`,\n  }))\n})\n\nconst casa = computed(() => {\n  return accommodation.value?.themes.includes('casa') ?? false\n})\n\nconst swisspeakResort = computed(() => {\n  return accommodation.value?.themes.includes('swiss_peak') ?? false\n})\n\nconst swissTourism = computed(() => {\n  return (\n    accommodation.value?.country.code === 'CH' &&\n    accommodation.value.evaluation.stars > 0\n  )\n})\n\nconst lso = computed(() => {\n  return !!(\n    accommodation.value?.buyingOfficeCode &&\n    accommodation.value.buyingOfficeCode !== '000' &&\n    accommodation.value.buyingOfficeCode.length === 5\n  )\n})\n\nconst descriptionsDerived = computed(() => {\n  return {\n    headline: accommodation.value?.descriptionsDerived?.headline,\n    description: accommodation.value?.descriptionsDerived?.description,\n  }\n})\n\nconst showDescriptionsDerived = computed(() => {\n  return (\n    useAB().isActive('chatGPT_PDP') &&\n    descriptionsDerived.value.headline &&\n    descriptionsDerived.value.description\n  )\n})\n\nif (trip.value?.checkin) await getCheckPriceFinal()\n\nonMounted(() => {\n  nextTick(() => {\n    const tripValue = { ...trip.value }\n    if (!tripValue.checkin || !tripValue.checkout) {\n      delete tripValue.checkin\n      delete tripValue.checkout\n    }\n    tracking.handlers?.ecommerce.viewItem({\n      ...accommodation.value,\n      ...(price.value?.price ? price.value : minPrice.value),\n      ...tripValue,\n    } as TranslatedAccommodationWithPrice)\n    tracking.handlers?.eec.productDetailImpression({\n      ...(price.value?.price ? price.value : minPrice.value),\n      ...tripValue,\n    })\n  })\n})\n\nasync function loadAccommodation() {\n  vacancies.value =\n    (await useAccommodation(accommodation.value.code).getVacancies()) ??\n    undefined\n}\n\nasync function getCheckPriceFinal() {\n  const { code } = accommodation.value ?? {}\n  const { checkin, checkout, pax } = trip.value\n  if (!code || !checkin || !checkout || !pax) return\n\n  await checkPrice.loadFinal(code, checkin, checkout, pax)\n  tracking.handlers?.ecommerce.viewItem({\n    ...accommodation.value,\n    ...price.value,\n    ...trip.value,\n  } as TranslatedAccommodationWithPrice)\n}\n\nasync function onUpdateTrip({ checkin, checkout, pax }: TripUpdate) {\n  if (checkin) trip.value!.checkin = checkin\n  if (checkout) trip.value!.checkout = checkout\n  if (pax) {\n    trip.value!.pax = pax\n    tracking.handlers?.detail.paxSelected(pax)\n  }\n  if (!trip.value.pax || (paxUpTo.value && paxUpTo.value < trip.value.pax!)) {\n    trip.value.pax = paxUpTo.value\n  }\n  updateURL()\n  await getCheckPriceFinal()\n}\n\nfunction updateURL() {\n  const { checkin, checkout, pax } = trip.value\n\n  return navigateTo({\n    path: route.path,\n    query: {\n      checkin: checkin && toDate(checkin),\n      checkout: checkout && toDate(checkout),\n      pax: pax && checkin && checkout ? pax : undefined,\n      partnerid: partner.id || undefined,\n      ...params.persistent,\n    },\n  })\n}\n\nfunction book(options: BookingOptions) {\n  if (!isTripValid(trip.value)) return\n\n  const booking = {\n    ...createBookingPending(accommodation.value, trip.value, options),\n    // Saving the booking URL for compatibility with webсс-booking.\n    // It would probably be better to store only the booking data and create the URL dynamically.\n    url: useURLs()\n      .buildBookingUrl(accommodation.value, trip.value, options)\n      .toString(),\n  }\n  useBookingsPending().save(booking)\n  window.location.href = booking.url\n}\n\nfunction scrollto(section: string) {\n  console.log('scrollto', section)\n\n  switch (section) {\n    case 'vacanciesRef':\n      vacanciesRef.value?.$el.scrollIntoView({ behaviour: 'smooth' })\n      break\n    case 'costsRef':\n      costsRef.value?.$el.scrollIntoView({ behaviour: 'smooth' })\n      break\n    case 'reviewsRef':\n      reviewsRef.value?.$el.scrollIntoView({ behaviour: 'smooth' })\n      break\n    case 'sidebarRef':\n      sidebarRef.value?.$el.scrollIntoView({ behaviour: 'smooth' })\n      break\n    default:\n      break\n  }\n}\n\nfunction handleBookmark() {\n  const data = {\n    ...accommodation.value,\n    ...price.value,\n    ...trip.value,\n  } as TranslatedAccommodationWithPrice\n  if (!data.price || !data.checkin || !data.checkout) {\n    data.price = minPrice.value?.price\n    data.regularPrice = minPrice.value?.regularPrice\n    data.checkin = tryParseDate(minPrice.value?.checkin) as Date & string\n    data.checkout = tryParseDate(minPrice.value?.checkout) as Date & string\n  }\n\n  if (partner.id && partner.jwt) {\n    processAsPartner(data)\n  } else {\n    addToWishlist()\n  }\n}\n\nfunction processAsPartner(data: TranslatedAccommodationWithPrice) {\n  if (isBookmarked.value) {\n    tracking.handlers?.ecommerce.removeFromWishlist([data])\n    tracking.handlers?.detail.deleteFromWishlist(accommodation.value.code)\n  } else {\n    tracking.handlers?.ecommerce.addToWishlist([data])\n    tracking.handlers?.detail.addToWishlist(accommodation.value.code)\n  }\n  toggleBookmark()\n}\n\nfunction addToWishlist() {\n  if (isBookmarked.value) {\n    deleteFromWishlistEvt.emit({ code: accommodation.value.code })\n  } else {\n    addToWishlistEvt.emit({ code: accommodation.value.code })\n  }\n}\n\nfunction toggleBookmark() {\n  useBookmarks().toggle(accommodation.value!.code)\n}\n\nfunction toggleGallery(img: string, eventName: string) {\n  galleryModalOpen.value = !galleryModalOpen.value\n  scrollImg.value = img\n  if (galleryModalOpen.value) {\n    document.body.classList.add('overflow-hidden')\n  } else {\n    document.body.classList.remove('overflow-hidden')\n  }\n\n  if (eventName !== '') {\n    tracking.handlers?.detail[eventName as 'imageClick' | 'allImages']()\n  }\n}\n</script>\n","<template>\n  <div\n    v-if=\"visible\"\n    v-impression:detail:linkedObjectsTeaserViewed.100\n    class=\"flex flex-col gap-4 rounded-lg border border-bgr-200 bg-bgr p-6 shadow\"\n  >\n    <h2 class=\"text-2xl font-medium\">\n      {{ $t('www.components.views.details.LinkedObjects.title') }}\n    </h2>\n    <div\n      class=\"flex flex-col gap-2 sm:grid sm:grid-cols-2 md:grid-cols-3 md:gap-10\"\n    >\n      <HitboxCard\n        v-for=\"accom in objects\"\n        :key=\"accom.code\"\n        :breadcrumb-links=\"false\"\n        class=\"w-full\"\n        :accom=\"accom\"\n        :transformations=\"IMAGE_TRANSFORMATIONS\"\n        @to-detailpage=\"onPropertyClick\"\n      />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst IMAGE_TRANSFORMATIONS = {\n  xl: 'tr:n-srp_hitbox_l',\n  lg: 'tr:n-srp_hitbox_l',\n  md: 'tr:n-srp_hitbox_l',\n}\n\nconst props = defineProps<{\n  code: string\n}>()\n\nconst confData = useConfdata()\nconst searchApi = useSearchApi()\nconst tracking = useTracking()\n\nconst visible = computed(() => result.value && result.value.totalHits >= 3)\nconst objects = computed(() => result.value?.docs.slice(0, 3) ?? [])\n\nconst { data: result } = await useAsyncData(\n  () => searchApi.getLinkedObjects(props.code, confData.language),\n  {\n    watch: [() => props.code, () => confData.language],\n    server: false,\n  },\n)\n\nfunction onPropertyClick() {\n  tracking.handlers?.detail.linkedObjectsTeaserClicked()\n}\n</script>\n","<template>\n  <section\n    v-if=\"!$params.iframe\"\n    class=\"container-fluid-lg\"\n    :class=\"sectionclasses\"\n  >\n    <div class=\"flex items-center md:justify-center\">\n      <h2\n        class=\"text-large mr-2 grow text-thm sm:text-xl md:text-center md:text-2xl\"\n        :class=\"headlineclasses\"\n      >\n        {{ icons.headline }}\n      </h2>\n      <WebccButton\n        variant=\"theme\"\n        size=\"sm\"\n        class=\"ml-auto\"\n        :class=\"buttonclasses\"\n        @click=\"toInfos\"\n      >\n        {{ icons.linkLabel }}\n      </WebccButton>\n    </div>\n\n    <ul\n      class=\"mt-2 grid min-h-[3rem] w-full justify-center space-x-2 bg-bgr-100 px-1 sm:min-h-[13rem] sm:grid-cols-3 md:min-h-[8rem] md:grid-cols-6\"\n    >\n      <li\n        v-for=\"(usp, i) in icons.items\"\n        :key=\"i\"\n        class=\"items-center py-1 sm:flex sm:flex-col md:py-4\"\n        :class=\"showRandomField === usp.key ? 'flex flex-row' : 'hidden'\"\n      >\n        <WebccIcon\n          :name=\"`usp/${usp.key}`\"\n          class=\"m-2 h-9 w-9 fill-current stroke-none text-thm sm:h-10 sm:w-10 md:h-11 md:w-11\"\n        />\n        <span class=\"px-1 text-center text-sm sm:text-sm\">{{ usp.label }}</span>\n      </li>\n    </ul>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{ icons: USPBar; boxed?: boolean }>()\n\nconst fields = ref([\n  { field: 'car', mobileAllowed: false },\n  { field: 'privacy', mobileAllowed: true },\n  { field: 'independence', mobileAllowed: true },\n  { field: 'cleaning', mobileAllowed: false },\n  { field: 'key', mobileAllowed: true },\n  { field: 'support', mobileAllowed: true },\n])\n\nconst showRandomField = ref('')\n\nonMounted(() => {\n  const allowed = fields.value.filter((f) => f.mobileAllowed)\n  showRandomField.value =\n    allowed[Math.floor(Math.random() * allowed.length)].field\n})\n\nconst sectionclasses = computed(() => {\n  return props.boxed ? 'pt-2 mt-2 md:mt-8 rounded shadow' : 'mt-2 md:mt-4'\n})\nconst headlineclasses = computed(() => {\n  return props.boxed ? 'ml-2 md:ml-0' : ''\n})\nconst buttonclasses = computed(() => {\n  return props.boxed ? 'mr-2 md:mr-0 md:right-2' : 'md:right-0'\n})\n\nfunction toInfos() {\n  window.scrollTo(0, 0)\n  navigateTo(props.icons.link.href)\n}\n</script>\n","<template>\n  <Transition name=\"fade\" appear>\n    <div\n      v-if=\"visible\"\n      class=\"fixed bottom-24 h-auto w-full px-8 md:bottom-8 md:left-8 md:w-[26.25rem] md:px-0\"\n    >\n      <div\n        class=\"flex flex-col gap-6 rounded-lg border bg-bgr p-4 shadow-[0_0_16px_8px_rgba(0,0,0,0.12)] transition-all\"\n      >\n        <header class=\"flex\">\n          <span class=\"text-xl font-medium\">{{ $t(`${trPrefix}title`) }}</span>\n          <div\n            class=\"ml-auto cursor-pointer hover:opacity-60\"\n            @click.stop=\"setStatus('refused')\"\n          >\n            <WebccIcon\n              name=\"site/x\"\n              class=\"h-5 w-5 fill-current text-gray-500\"\n            />\n          </div>\n        </header>\n        <span>{{ $t(`${trPrefix}text`) }}</span>\n        <div class=\"flex w-full justify-between\">\n          <WebccButton\n            variant=\"white\"\n            outline\n            @click.stop=\"setStatus('postponed')\"\n          >\n            <span class=\"font-medium text-gray-500\">{{\n              $t(`${trPrefix}buttons.postpone`)\n            }}</span>\n          </WebccButton>\n          <WebccLink absolute anchor :to=\"url\" target=\"_blank\">\n            <WebccButton variant=\"theme\" @click.stop=\"setStatus('opened')\">\n              <span class=\"font-medium text-white\">{{\n                $t(`${trPrefix}buttons.open`)\n              }}</span>\n            </WebccButton>\n          </WebccLink>\n        </div>\n      </div>\n    </div>\n  </Transition>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.details.UserSurvey.'\n\nconst { visible, url } = storeToRefs(useUserSurvey())\nconst { show, setStatus } = useUserSurvey()\nconst { open: consentVisible } = storeToRefs(useConsent())\n\nwatch(consentVisible, display)\n\nonMounted(display)\n\nfunction display() {\n  if (!consentVisible.value) show()\n}\n</script>\n\n<style scoped>\n.fade-enter-active,\n.fade-leave-active {\n  transition: all 0.5s ease;\n}\n\n.fade-enter,\n.fade-leave-to {\n  opacity: 0;\n  transform: translateX(-30px);\n}\n@media screen and (max-width: 575px) {\n  .fade-enter,\n  .fade-leave-to {\n    opacity: 0;\n    transform: translateY(30px);\n  }\n}\n</style>\n","export function getAccommodationDestination({\n  country,\n  region,\n  place,\n}: TranslatedAccommodation): Destination {\n  return {\n    countryCode: country.code,\n    country: country.name,\n    regionCode: region.code,\n    region: region.name,\n    placeCode: place.code,\n    place: place.name,\n  } as Destination\n}\n\nexport function getResultDocumentDestination({\n  country,\n  region,\n  place,\n}: ResultDocument): Destination {\n  return { country, region, place } as Destination\n}\n","<template>\n  <div ref=\"topRef\" class=\"bg-bgr-50\">\n    <div\n      v-if=\"!params.iframe && !ab.isActive('dp-quicksearch')\"\n      class=\"bg-thm mb-2\"\n    >\n      <SearchBox class=\"container-fluid-lg\" />\n    </div>\n\n    <div\n      v-if=\"params.iframe\"\n      class=\"container-fluid-lg flex flex-row items-center justify-end pt-4\"\n    >\n      <BookmarkLink />\n    </div>\n\n    <DetailsAccommodation :show-contact-card=\"isContactBoxEnabled\" />\n\n    <div class=\"container-fluid-lg mb-4\">\n      <DetailsTrustPilot\n        :domain=\"confData.domain\"\n        :resource=\"confData.sites[0]\"\n      />\n    </div>\n\n    <div class=\"container-fluid-lg mb-4\">\n      <DetailsLinkedObjects :code=\"accommodation.code\" />\n    </div>\n\n    <TeaserSubDestinations\n      v-if=\"accommodation\"\n      class=\"container-fluid-lg mb-4\"\n      :destination=\"destination\"\n    />\n\n    <BlocksUSPCorona\n      v-if=\"additionalBody.USPBar\"\n      boxed\n      :icons=\"additionalBody.USPBar\"\n    />\n\n    <USPCards :why=\"additionalBody.USPCards.cards\" />\n\n    <USPWhy\n      :why=\"[additionalBody.USPColumns.left, additionalBody.USPColumns.right]\"\n    />\n\n    <client-only v-if=\"ab.isActive('userSurveyJotform')\">\n      <DetailsUserSurvey />\n    </client-only>\n\n    <FooterNewsletterSignup />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst params = useParams()\nconst confData = useConfdata()\nconst ab = useAB()\n\nconst isContactBoxEnabled = useFlag('pdp-contact-box')\n\nconst topRef = ref()\nconst screenSize = ref<ScreenSize>('sm')\n\nconst additionalBody = computed(() => confData.additionalBody as DetailpageBody)\nconst accommodation = computed(\n  () => confData.baseData as TranslatedAccommodation,\n)\nconst destination = computed(() =>\n  getAccommodationDestination(accommodation.value),\n)\n\nonMounted(async () => {\n  if (!window.location.hash) {\n    window.scrollTo({ top: 0 })\n  }\n\n  nextTick(() => {\n    document.documentElement.style.scrollBehavior = 'auto' // 'smooth'\n    if (params.iframe && !window.location.hash) {\n      topRef.value?.scrollIntoView({ behavior: 'smooth' })\n    }\n    setScreenSize()\n    window.addEventListener('resize', setScreenSize)\n  })\n})\n\nonBeforeUnmount(() => {\n  document.removeEventListener('resize', setScreenSize)\n})\n\nfunction setScreenSize() {\n  screenSize.value = useScreen().current\n}\n</script>\n","<template>\n  <main>\n    <div\n      v-for=\"(block, i) in blocks\"\n      :key=\"i\"\n      :class=\"{\n        'container-fluid-lg': !CUSTOM_BACKGROUND_COMPONENTS.has(\n          block.component,\n        ),\n      }\"\n    >\n      <component :is=\"`Blocks${block.component}`\" :block=\"block\" />\n    </div>\n    <FooterNewsletterSignup />\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst blocks = computed(() => useConfdata().body as Block[])\n\nconst CUSTOM_BACKGROUND_COMPONENTS = new Set([\n  'LandingTextWithImage',\n  'LandingTextCarousel',\n  'LandingImageCarouselWithText',\n  'LandingTeasers',\n  'LandingMarkdown',\n  'LandingH1',\n])\n\nonMounted(() => {\n  window.scrollTo({ top: 0 })\n})\n</script>\n","import { publicAssetsURL } from '#internal/nuxt/paths';export default publicAssetsURL(\"/images/teaser_kundenbewertungen.jpg\")","<template>\n  <section id=\"teaser-top\" class=\"container-fluid-lg bg-thm\">\n    <div class=\"flex items-stretch\">\n      <div class=\"w-2/3 flex-auto flex-col p-6 text-txt-contrast md:w-1/2\">\n        <h1>\n          <span class=\"text-xl font-semibold md:text-3xl\">{{\n            $t(`${trPrefix}title`)\n          }}</span>\n          <div class=\"mt-5 text-lg\">{{ $t(`${trPrefix}niceObjects`) }}</div>\n        </h1>\n        <h2 class=\"mb-4 font-semibold\">\n          {{ $t(`${trPrefix}chooseFromObjects`) }}\n        </h2>\n\n        <WebccLink\n          class=\"cursor-pointer rounded bg-cta px-3 py-1.5 font-bold text-xl text-cta-contrast hover:bg-cta-hover focus:outline-none disabled:cursor-not-allowed disabled:shadow-none md:px-4\"\n          variant=\"cta\"\n          :to=\"searchUrl\"\n        >\n          <span>{{ $t(`${trPrefix}cta`) }}</span>\n        </WebccLink>\n      </div>\n\n      <img\n        class=\"hidden object-cover sm:w-1/4 md:block\"\n        src=\"/images/teaser_kundenbewertungen.jpg\"\n        alt=\"\"\n      />\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.reviews.SearchTeaserTop.'\n\ndefineProps<{\n  count: number\n  destination: string\n  searchUrl: string\n}>()\n</script>\n","<template>\n  <WebccBreadcrumb :lead=\"lead\" :items=\"items\" />\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.reviews.Breadcrumb.'\n\nconst props = defineProps<{\n  geo?: { country?: string; region?: string; place?: string }\n  reviewpagePrefix: string\n  accomSlug: string\n  accomCode: string\n}>()\n\nconst lead = computed(() => {\n  return {\n    target: `/${props.reviewpagePrefix}`,\n    title: 'allReviews',\n    tr: `${trPrefix}allReviews`,\n    content: 'allReviews',\n  }\n})\nconst items = computed(() => {\n  const items = []\n  const country = props.geo?.country\n  const region = props.geo?.region\n  const place = props.geo?.place\n  let countryPath\n  let regionPath\n  let placePath\n  const slug = props.accomSlug.split('/')\n  if (country) {\n    countryPath = `${props.reviewpagePrefix}/${slug.slice(0, 1)}`\n    items.push({\n      target: countryPath,\n      title: country,\n      text: country,\n      content: country,\n    })\n  }\n  if (region) {\n    regionPath = `${countryPath}/${slug.slice(1, 2)}`\n    items.push({\n      target: regionPath,\n      title: region,\n      text: region,\n      content: region,\n    })\n  }\n  if (place) {\n    placePath = `${regionPath}/${slug.slice(2, 3)}`\n    items.push({ target: placePath, title: place, text: place, content: place })\n  }\n  items.push({\n    target: props.accomSlug,\n    title: props.accomCode,\n    text: props.accomCode,\n    content: props.accomCode,\n  })\n  return items\n})\n</script>\n","<template>\n  <main>\n    <div class=\"container-fluid-lg flex flex-col gap-x-4\">\n      <div>\n        <template v-if=\"!iframe\">\n          <ReviewTeaserTop\n            :count=\"1\"\n            :destination=\"additionalBody.destination\"\n            :search-url=\"additionalBody.searchurl\"\n          />\n          <section class=\"mb-10 bg-thm px-6\">\n            <SearchBox />\n          </section>\n        </template>\n        <div v-else class=\"flex flex-row items-center justify-between py-4\">\n          <SearchBreadcrumb :geo=\"geo\" />\n          <BookmarkLink />\n        </div>\n      </div>\n      <div class=\"flex flex-col w-full md:flex-row gap-x-4\">\n        <section class=\"w-full md:w-3/5 grow shrink relative\">\n          <WebccLoaderOverlay v-if=\"loading\" :opacity=\"10\" absolute />\n          <div ref=\"scrollpoint\">\n            <ReviewSummary\n              v-if=\"rating\"\n              :rating=\"rating.overall\"\n              :condition=\"rating.property\"\n              :cleanliness=\"rating.cleanliness\"\n              :service=\"rating.service\"\n              :review-count=\"reviewCount\"\n            />\n            <!-- TODO: Aktuell nicht verwendbar, da clientseitig immer nur eine Seite an reviews bekannst ist -->\n            <!-- <ReviewFilter :filter-travel-with=\"filterTravelWith\" :reviews=\"reviews\" @update=\"onFilterChange\" /> -->\n            <ReviewsList\n              :reviewpage-prefix=\"confData.prefixReviewspage || ''\"\n              :locale=\"confData.locale || ''\"\n              :reviews=\"reviews\"\n            />\n          </div>\n          <!-- Key is needed due to nuxt having issues with properly reinitializing identical components on subsequent pages  -->\n          <WebccPagination\n            :key=\"useRequestURL().pathname\"\n            class=\"mb-16\"\n            :active=\"page\"\n            :total=\"totalPages\"\n            :visible=\"7\"\n            @select-page=\"loadReviewPage\"\n          />\n        </section>\n        <aside class=\"w-full md:w-80 lg:w-96 shrink-0 justify-self-center\">\n          <div class=\"relative border-2 border-solid p-6 md:mt-4 mb-4\">\n            <div\n              class=\"absolute left-1/2 top-0 w-3/4 rounded bg-thm py-1 [transform:translate(-50%,-50%)]\"\n            >\n              <p class=\"text-center text-txt-contrast\">\n                {{ $t(`${trPrefix}userReviews`) }}\n              </p>\n            </div>\n            <h2 class=\"mb-2 text-2xl font-semibold\">\n              {{ $t(`${trPrefix}guaranteedGenuine`) }}\n            </h2>\n            <p>{{ $t(`${trPrefix}guaranteedGenuineText`) }}</p>\n          </div>\n        </aside>\n      </div>\n    </div>\n    <BlocksUSPCorona\n      v-if=\"additionalBody.USPBar\"\n      boxed\n      :icons=\"additionalBody.USPBar\"\n    />\n    <USPCards :why=\"additionalBody.USPCards.cards\" />\n    <USPWhy\n      :why=\"[additionalBody.USPColumns.left, additionalBody.USPColumns.right]\"\n    />\n    <FooterNewsletterSignup />\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.PageReviews.'\n\nconst params = useParams()\nconst confData = useConfdata()\nconst { reviews, loading, rating, reviewCount, totalPages } =\n  toRefs(useReviews())\n\nloading.value = true\nconst page = ref(parseInt(params.all.page as string) || 1)\nconst additionalBody = computed(\n  () => confData.additionalBody as ReviewspageBody,\n)\nconst { iframe } = params\nconst scrollpoint = ref<HTMLElement | null>(null)\n\nconst geo = computed(\n  (): { country?: TrDest; region?: TrDest; place?: TrDest } => {\n    const { destination } = confData\n    const reviewDestination = reviews.value[0]?.dest\n    if (!destination || !reviewDestination) {\n      return {}\n    }\n    const slug = reviewDestination.slug.split('/')\n    const countrySlug = `/${slug.slice(0, 1)}`\n    const regionSlug = slug.slice(1, 2).toString()\n    const placeSlug = slug.slice(2, 3).toString()\n    return {\n      country: destination.country\n        ? {\n            slug: countrySlug,\n            name: destination.country,\n          }\n        : undefined,\n      region: destination.region\n        ? {\n            slug: regionSlug,\n            name: destination.region,\n          }\n        : undefined,\n      place: destination.place\n        ? {\n            slug: placeSlug,\n            name: destination.place,\n          }\n        : undefined,\n    }\n  },\n)\n\nasync function loadReviewPage(inpage: number) {\n  const { countryCode, regionCode, placeCode } = confData.destination\n\n  await useReviews().loadReviews(inpage, {\n    country: countryCode,\n    region: regionCode,\n    place: placeCode,\n  })\n\n  navigateTo({\n    path: useRequestURL().pathname,\n    query: { ...params.all, page: inpage },\n  })\n\n  page.value = inpage\n  scrollpoint?.value?.scrollIntoView({ behavior: 'smooth' })\n}\n\nonMounted(async () => {\n  await loadReviewPage(page.value)\n})\n</script>\n","<template>\n  <WebccBreadcrumb :lead=\"lead\" :items=\"items\" class=\"py-3\" />\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.favorites.Breadcrumbs.'\n\nconst { t } = useI18n()\n\nconst lead = computed<BreadcrumbItem>(() => {\n  return {\n    target: '/',\n    title: 'Home',\n    tr: `${trPrefix}home`,\n    content: 'Home',\n  }\n})\n\nconst items = computed<BreadcrumbItem[]>(() => {\n  return [\n    {\n      target: '',\n      title: t(`${trPrefix}favorites`),\n      tr: `${trPrefix}favorites`,\n      content: t(`${trPrefix}favorites`),\n    },\n  ]\n})\n</script>\n","<template>\n  <div v-if=\"show\" class=\"flex flex-col rounded border-2 border-thm shadow-lg\">\n    <div class=\"flex flex-row bg-thm py-2 pl-2\">\n      <WebccIcon name=\"site/info\" class=\"h-6 w-6 text-bgr\" />\n    </div>\n    <div class=\"flex flex-col bg-bgr p-2\">\n      <span class=\"text-thm\">{{ $t(`${trPrefix}heading`) }}</span>\n      <span>{{ $t(`${trPrefix}info`) }}</span>\n    </div>\n    <div class=\"flex flex-row justify-center bg-bgr p-2\">\n      <WebccButton @click=\"$emit('hide')\">\n        <span>{{ $t(`${trPrefix}ok`) }}</span>\n      </WebccButton>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.favorites.Infobox.'\n\ndefineProps<{\n  show?: boolean\n}>()\n\ndefineEmits<{ (e: 'hide'): void }>()\n</script>\n","<template>\n  <div class=\"mb-4 rounded bg-suc p-4 font-semibold text-suc-contrast\">\n    {{ $t('www.components.views.favorites.Success.text') }}\n  </div>\n</template>\n\n<script setup lang=\"ts\"></script>\n","export function arraysEqual(a: any[], b: any[]) {\n  return (\n    Array.isArray(a) &&\n    Array.isArray(b) &&\n    a.length === b.length &&\n    a.every((val, index) => val === b[index])\n  )\n}\n","<template>\n  <div class=\"w-full\">\n    <div\n      class=\"flex\"\n      :class=\"{\n        'flex-col': labelPosition === 'top',\n        'flex-col-reverse': labelPosition === 'bottom',\n        'sm:flex-row sm:items-center sm:gap-4': labelPosition === 'left',\n        'sm:flex-row-reverse sm:items-center sm:gap-4':\n          labelPosition === 'right',\n      }\"\n    >\n      <component\n        :is=\"resolvedComponent\"\n        :id=\"name\"\n        ref=\"component\"\n        v-model=\"model\"\n        :valid=\"fieldErrors?.[name] && fieldErrors[name].length === 0\"\n        :required=\"!!required\"\n        :label=\"label\"\n        :name=\"name\"\n        :type=\"type\"\n        :options=\"normalizedOptions\"\n        v-bind=\"$attrs\"\n        @change=\"\n          ($event: Event) => {\n            validate(($event.target as HTMLInputElement).value)\n          }\n        \"\n      />\n    </div>\n    <div v-for=\"e in fieldErrors?.[name]\" :key=\"e\" class=\"text-sm text-err\">\n      <span v-if=\"trDirect\">{{ e }}</span>\n      <span v-else>{{\n        $t(`plugins.form.Formfield.${e}` as TranslationKey)\n      }}</span>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  fieldErrorsKey,\n  formdataKey,\n  registerKey,\n  setFieldErrorsKey,\n  setKey,\n} from './InjectionKeys'\n\nconst set = inject(setKey)\nconst formdata = inject(formdataKey)\nconst fieldErrors = inject(fieldErrorsKey)\nconst setFieldErrors = inject(setFieldErrorsKey)\nconst register = inject(registerKey)\n\ninterface Props {\n  trPrefix?: string\n  labelPosition?: 'top' | 'bottom' | 'left' | 'right'\n  options?: Array<any>\n  trDirect?: boolean\n  type?: string\n  label?: string\n  name: string\n  required?: boolean | string\n  modelValue?: string | number | boolean | Array<any> | object\n  pattern?: RegExp\n  // Has to be a globally registered component name that supports basic input functions like \"onchange\" and \"value\".\n  component: string\n  validators?: Function[]\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  trPrefix: 'plugins.form.Formfield.',\n  labelPosition: 'top',\n  options: () => [],\n  type: 'text',\n  label: '',\n  required: false,\n  modelValue: undefined,\n  pattern: undefined,\n  validators: () => [],\n})\n\ndefineExpose({ validate })\n\nconst emit = defineEmits<{\n  'update:modelValue': [\n    value: string | number | boolean | object | any[] | undefined,\n  ]\n  input: [value: string | number | boolean | object | any[] | undefined]\n  submit: [value: string | number | boolean | object | any[] | undefined]\n}>()\n\nconst validationState: Ref<{\n  errors: string[]\n  isValid: boolean | undefined\n  value: string | number | boolean | object | any[] | undefined\n}> = ref({\n  errors: [],\n  isValid: undefined,\n  value: undefined,\n})\n\nconst resolvedComponent = computed(() => {\n  return resolveComponent(props.component)\n})\n\nconst model = computed({\n  get() {\n    return formdata ? formdata[props.name] : props.modelValue\n  },\n  set(value) {\n    if (set) {\n      set(props.name, value)\n    }\n    validationState.value.errors = []\n    validationState.value.isValid = undefined\n    if (setFieldErrors) {\n      setFieldErrors(props.name, [])\n    } else if (fieldErrors) {\n      fieldErrors[props.name] = []\n    }\n    emit('input', value)\n    emit('update:modelValue', value)\n  },\n})\n\nconst normalizedOptions = computed(() => {\n  if (!props.options) {\n    return []\n  }\n  const normalizedOptions: { value: string | number; label: string }[] = []\n  props.options.forEach((option) => {\n    if (typeof option === 'object') {\n      for (const key in option) {\n        normalizedOptions.push({ value: key, label: option[key] })\n      }\n    } else {\n      normalizedOptions.push({ value: option, label: option })\n    }\n  })\n  return normalizedOptions\n})\nconst rules = computed(() => {\n  const rules = props.validators || []\n  if (props.pattern) {\n    rules.push((v: string) => props.pattern!.test(v) || 'unmatchedPattern')\n  }\n  if (props.type === 'daterange' && props.required) {\n    rules.push(\n      (v: { start: string; end: string }) =>\n        v.start !== v.end ||\n        `${typeof props.required === 'string' ? props.required : 'required'}=>stop`,\n    )\n  }\n  if (props.required) {\n    rules.unshift(\n      (v: string) =>\n        !!v ||\n        `${typeof props.required === 'string' ? props.required : 'required'}=>stop`,\n    )\n  }\n  return rules\n})\n\nif (formdata && !Object.keys(formdata).includes(props.name)) {\n  console.error('Unknown Form element:', props.name)\n}\n\nonMounted(async () => {\n  if (register) {\n    register(props.name, getCurrentInstance()!)\n  }\n\n  if (typeof model.value !== 'object' && model.value) {\n    await validate(model.value)\n    // Special handling for daterange objects\n  } else if (\n    typeof model.value === 'object' &&\n    Object.values(model.value).some((v) => v)\n  ) {\n    await validate(model.value)\n  }\n})\n\nasync function errors(v: string | number | boolean | object | undefined) {\n  const errors = []\n  for (const i in rules.value) {\n    const validOrMessage = await rules.value[i](v)\n    if (validOrMessage !== true) {\n      const [message, stop] = validOrMessage.split('=>')\n      errors.push(message)\n      if (stop === 'stop') {\n        return errors\n      }\n    }\n  }\n  return errors\n}\n\nasync function validate(v: string | number | boolean | object | undefined) {\n  if (v === undefined) {\n    v = model.value\n  }\n\n  const e = await errors(v)\n  const validation = {\n    value: v,\n    isValid: e.length === 0,\n    errors: e,\n  }\n\n  if (!arraysEqual(validationState.value.errors, validation.errors)) {\n    if (setFieldErrors) {\n      setFieldErrors(props.name, validation.errors)\n    } else if (fieldErrors) {\n      fieldErrors[props.name] = validation.errors\n    }\n  }\n  validationState.value = validation\n  return validationState\n}\n</script>\n","<template>\n  <div>\n    <client-only>\n      <div\n        ref=\"captchaRef\"\n        :data-expired-callback=\"updateTokenFunctionName\"\n        :data-callback=\"updateTokenFunctionName\"\n        :data-sitekey=\"sitekey\"\n        :data-size=\"size\"\n      ></div>\n    </client-only>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * The reCAPTCHA v2 widget.\n *\n * Using explicit rendering to be able to render multiple reCAPTCHA widgets, not just the first one.\n *\n * @see {@link https://developers.google.com/recaptcha/docs/display#explicit_render | Explicitly render the reCAPTCHA widget}\n */\n\nimport { nanoid } from 'nanoid'\n\ntype WindowWithReCAPTCHA = Window &\n  typeof globalThis &\n  Record<string, Function> & { grecaptcha: any }\n\nconst props = defineProps<{\n  modelValue: string\n  locale: string\n}>()\n\nconst emit = defineEmits<{ 'update:modelValue': [string?] }>()\n\nconst captchaRef = ref()\n\nconst uid = ref(nanoid().replace(/[^a-zA-Z0-9]/g, ''))\nconst size = ref(useScreen().isExtraSmall ? 'compact' : 'normal') // not a computed due to warnings on SSR\n\nconst loadCaptchaFunctionName = computed(() => `loadCaptcha_${uid.value}`)\nconst updateTokenFunctionName = computed(() => `updateToken_${uid.value}`)\nconst windowWithReCAPTCHA = computed(() => window as WindowWithReCAPTCHA)\nconst sitekey = computed(() => useRuntimeConfig().public.recaptcha.v2SiteKey)\n\nconst value = computed({\n  get() {\n    return props.modelValue\n  },\n  set(value) {\n    emit('update:modelValue', value)\n  },\n})\n\nonMounted(() => {\n  // The callback functions must be defined before the reCAPTCHA API loads.\n  windowWithReCAPTCHA.value[loadCaptchaFunctionName.value] = loadCaptcha\n  windowWithReCAPTCHA.value[updateTokenFunctionName.value] = updateToken\n\n  useHead({\n    script: [\n      {\n        src: `https://www.google.com/recaptcha/api.js?hl=${props.locale}&onload=${loadCaptchaFunctionName.value}&render=explicit`,\n        async: true,\n        defer: true,\n        tagPosition: 'bodyClose',\n      },\n    ],\n  })\n})\n\nonBeforeUnmount(() => {\n  delete windowWithReCAPTCHA.value[loadCaptchaFunctionName.value]\n  delete windowWithReCAPTCHA.value[updateTokenFunctionName.value]\n})\n\nfunction loadCaptcha() {\n  windowWithReCAPTCHA.value.grecaptcha.render(captchaRef.value, {\n    sitekey: sitekey.value,\n  })\n}\n\nfunction updateToken(token: string) {\n  value.value = token\n}\n</script>\n","<script lang=\"ts\">\nexport default {\n  props: {\n    tag: { type: String, default: 'span' },\n    path: { type: String, required: true },\n    prefix: { type: String, default: '' },\n  },\n  setup(props) {\n    const { t } = useI18n()\n    const slots = useSlots()\n\n    const translation = t((props.prefix + props.path) as TranslationKey)\n\n    const children: VNode[] = []\n    const combined: (string | VNode | undefined)[] = []\n\n    const splitTranslation = translation.split(/{.+?}/g) // split translation so we only have the text parts left\n    const matches = translation.matchAll(/{(.+?)}/g) // gather the parts to be replaced\n\n    ;[...matches].forEach((match) => {\n      // Use content of capture group for VNode creation. Do nothing if placeholder is missing\n      if (slots[match[1]]) {\n        children.push(slots[match[1]]!()[0])\n      } else {\n        const text = `An issue occurred with textresource '${props.path}' in locale '${useL10N().locale}'. An unknown placeholder '${\n          match[1]\n        }' was passed in, but only these placeholders '${Object.keys(slots)}' are defined.`\n        console.error(text)\n        // $sentry.captureException(new Error(text))\n      }\n    })\n\n    splitTranslation.forEach((t) => {\n      combined.push(t) // insert one VNode after each text part\n      combined.push(children.shift()) // This will insert undefined for the last iteration, which will be ignored in the output.\n    })\n\n    return () => h(props.tag, [combined])\n  },\n}\n</script>\n","<template>\n  <div class=\"mt-4 border\">\n    <div class=\"p-6 text-err\">\n      {{ $t('www.components.views.favorites.Error.text') }}\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\"></script>\n","<template>\n  <form ref=\"form\" novalidate @submit.prevent.stop=\"submit\">\n    <slot />\n  </form>\n</template>\n\n<script setup lang=\"ts\">\nimport type { Formdata } from './InjectionKeys'\nimport {\n  fieldErrorsKey,\n  formdataKey,\n  registerKey,\n  resetKey,\n  setFieldErrorsKey,\n  setKey,\n  submitKey,\n} from './InjectionKeys'\n\nconst props = defineProps<{ modelValue: Formdata }>()\n\nconst emit = defineEmits<{\n  'update:modelValue': [value: Formdata]\n  input: [value: Formdata]\n  submit: [value: Formdata]\n}>()\n\nconst formdata = ref({ ...props.modelValue })\nconst fieldErrors: Ref<Record<string, string[]>> = ref({})\nconst formFields: Ref<Record<string, any>> = ref({})\n\nconst form: Ref<HTMLFormElement | null> = ref(null)\n\nfunction scrollToError() {\n  // get allErrors\n  const errors = Object.entries(fieldErrors.value)\n    .filter((entry) => entry.every((entry) => entry.length > 0))\n    .map((entry) => entry[0])\n\n  for (const error of errors) {\n    const el = form.value?.querySelector(`[name=${error}]`)\n    if (el) {\n      el.scrollIntoView({ block: 'start', behavior: 'smooth' })\n      ;(el.querySelector('input, select, textarea') as HTMLInputElement)?.focus(\n        { preventScroll: true },\n      )\n      break\n    }\n  }\n}\n\nfunction registerFormField(name: string, formField: any) {\n  formFields.value[name] = formField\n}\n\nfunction setField(field: string, value: any) {\n  formdata.value[field as keyof typeof formdata.value] = value\n  emit('update:modelValue', { ...formdata.value })\n}\n\nfunction reset() {\n  formdata.value = { ...props.modelValue }\n  fieldErrors.value = {}\n}\n\nasync function validate() {\n  for (const field in formFields.value) {\n    const validationState = await formFields.value[field].exposed.validate()\n    setFieldErrors(field, validationState.value.errors)\n  }\n  return !hasErrors()\n}\n\nfunction setFieldErrors(\n  field: keyof typeof fieldErrors.value,\n  errors: string[],\n) {\n  fieldErrors.value[field] = errors\n}\n\nfunction hasErrors() {\n  for (const field in fieldErrors.value) {\n    if (fieldErrors.value[field]?.length > 0) {\n      return true\n    }\n  }\n  return false\n}\n\nasync function submit() {\n  if (await validate()) {\n    emit('submit', { ...formdata.value })\n    return true\n  }\n  scrollToError()\n  return false\n}\n\nprovide(setKey, setField)\nprovide(resetKey, reset)\nprovide(submitKey, submit)\nprovide(formdataKey, formdata.value)\nprovide(fieldErrorsKey, fieldErrors.value)\nprovide(setFieldErrorsKey, setFieldErrors)\nprovide(registerKey, registerFormField)\n</script>\n","export function useValidation() {\n  async function email(email: string) {\n    const { data } = await useFetch<EmailValidation>(\n      `/validation-api/v1/emails/${email}`,\n      {\n        params: { hashprefix: `ihcu` },\n      },\n    )\n\n    return data.value\n  }\n\n  return { email }\n}\n","<template>\n  <WebccModal v-if=\"show\" @close=\"$emit('close')\">\n    <WebccLoaderOverlay\n      v-if=\"loading\"\n      :scrolling=\"{ onclose: false, onopen: false }\"\n    />\n    <div\n      class=\"max-w-2xl rounded bg-bgr p-2\"\n      @click=\"useToggler().toggle('datepicker', { state: false })\"\n    >\n      <div class=\"flex items-center justify-end bg-bgr py-2\">\n        <div\n          class=\"flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-full bg-bgr-200\"\n          @click=\"$emit('close')\"\n        >\n          <WebccIcon class=\"h-6 w-6\" name=\"site/x\" />\n        </div>\n      </div>\n      <FavSuccess v-if=\"success\" />\n      <WebccForm\n        v-if=\"!success\"\n        ref=\"formRef\"\n        v-model=\"formdata\"\n        class=\"flex max-h-[80vh] flex-col gap-4 overflow-y-auto px-4\"\n        @submit=\"sendCatalog\"\n      >\n        <span class=\"text-xl font-semibold text-thm\">{{\n          $t(`${trPrefix}title`)\n        }}</span>\n        <span>{{ $t(`${trPrefix}fillForm`) }}</span>\n        <span class=\"mt-2 text-txt-weak\">{{\n          $t('plugins.form.Formfield.requiredInfo')\n        }}</span>\n        <WebccFormfield\n          component=\"WebccSelect\"\n          :label=\"`${trPrefix}salutation`\"\n          name=\"salutation\"\n          required\n          class=\"max-w-xs\"\n          type=\"radio\"\n          :options=\"[{ F: $t(`${trPrefix}ms`) }, { M: $t(`${trPrefix}mr`) }]\"\n          @input=\"error = false\"\n        />\n        <WebccFormfield\n          component=\"WebccInput\"\n          :label=\"`${trPrefix}firstname`\"\n          name=\"firstname\"\n          required\n          type=\"text\"\n          @input=\"error = false\"\n        />\n        <WebccFormfield\n          component=\"WebccInput\"\n          :label=\"`${trPrefix}lastname`\"\n          name=\"lastname\"\n          required\n          type=\"text\"\n          @input=\"error = false\"\n        />\n        <WebccFormfield\n          component=\"WebccInput\"\n          :label=\"`${trPrefix}email`\"\n          name=\"email\"\n          required\n          type=\"email\"\n          @input=\"\n            () => {\n              error = false\n              emailError = false\n            }\n          \"\n        />\n        <WebccFormfield\n          component=\"WebccSelect\"\n          :options=\"paxOptions\"\n          :label=\"`${trPrefix}pax`\"\n          name=\"pax\"\n          required\n          type=\"select\"\n          @input=\"error = false\"\n        />\n        <WebccFormfield\n          component=\"WebccDateRangepicker\"\n          :label=\"$t(`${trPrefix}dates`)\"\n          name=\"range\"\n          required\n          inline\n          type=\"daterange\"\n          :locale=\"useL10N().locale\"\n          @click.stop\n          @input=\"error = false\"\n        />\n        <WebccCaptcha\n          v-if=\"!useRuntimeConfig().public.recaptcha.disabled\"\n          v-model=\"captcha\"\n          :locale=\"useL10N().locale\"\n        />\n        <WebccFormfield\n          v-if=\"useConfdata().signupEnabled\"\n          component=\"WebccCheckbox\"\n          :label=\"`${trPrefix}newsletter`\"\n          name=\"newsletter\"\n          type=\"checkbox\"\n          @input=\"error = false\"\n        />\n        <hr />\n\n        <TextHTML\n          path=\"gdprNewsletter\"\n          tag=\"aside\"\n          class=\"text-sm\"\n          :prefix=\"trPrefix\"\n        >\n          <template #dse>\n            <WebccLink\n              anchor\n              target=\"_blank\"\n              class=\"text-thm\"\n              :to=\"privacyPolicy\"\n            >\n              <span>{{ $t(`${trPrefix}privacyPolicy`) }}</span>\n            </WebccLink>\n          </template>\n        </TextHTML>\n\n        <hr />\n        <TextHTML\n          path=\"gdprRegular\"\n          tag=\"aside\"\n          class=\"text-sm\"\n          :prefix=\"trPrefix\"\n        >\n          <template #dse>\n            <WebccLink\n              anchor\n              target=\"_blank\"\n              class=\"text-thm\"\n              :to=\"privacyPolicy\"\n            >\n              <span>{{ $t(`${trPrefix}privacyPolicy`) }}</span>\n            </WebccLink>\n          </template>\n        </TextHTML>\n        <div v-if=\"emailError\" class=\"mt-4 border\">\n          <div class=\"p-6 text-err\">{{ $t(`${trPrefix}emailError`) }}</div>\n        </div>\n        <FavError v-if=\"error\" />\n        <WebccButton variant=\"cta\" :disabled=\"!captcha\">\n          <span>{{ $t(`${trPrefix}send`) }}</span>\n        </WebccButton>\n      </WebccForm>\n    </div>\n  </WebccModal>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.favorites.Actions.catalog.'\n\nconst props = defineProps<{\n  show?: boolean\n  accoms: ResultDocument[]\n  language: string\n  salesOfficeId: string\n  privacyPolicy: string\n}>()\n\ndefineEmits<{ (e: 'close'): void }>()\n\nconst formRef = ref<HTMLFormElement>()\n\nconst captcha = ref('')\nconst loading = ref(false)\nconst success = ref(false)\nconst error = ref(false)\nconst emailError = ref(false)\n\nconst formdata = ref({\n  salutation: '',\n  firstname: '',\n  lastname: '',\n  email: '',\n  pax: 1,\n  range: {} as DateRange,\n  newsletter: false,\n})\n\nconst paxOptions = computed(() => [...Array(48)].map((_, index) => index + 1))\n\nasync function sendCatalog() {\n  loading.value = true\n  try {\n    // validation API\n    const emailValidationResult = await useValidation().email(\n      formdata.value.email,\n    )\n    if (emailValidationResult!.score < 3) {\n      loading.value = false\n      emailError.value = true\n      return\n    }\n  } catch (error) {\n    console.error(error)\n    emailError.value = true\n    loading.value = false\n    return\n  }\n\n  const response = await useBookmarks().createPersonalCatalog({\n    ...formdata.value,\n    checkin: formdata.value.range.start && toDate(formdata.value.range.start),\n    checkout: formdata.value.range.end && toDate(formdata.value.range.end),\n    captcha: captcha.value,\n    accom: props.accoms.slice(0, 100).map(({ code }) => code),\n  })\n\n  loading.value = false\n  success.value = !response.error.value\n  error.value = !!response.error.value\n\n  if (error.value) {\n    nextTick(() => {\n      formRef.value!.form.scrollTop = formRef.value!.form.scrollHeight\n    })\n  }\n}\n</script>\n","<template>\n  <div class=\"flex flex-col gap-4\">\n    <button\n      class=\"flex flex-row items-center justify-center gap-1 rounded-lg border bg-thm p-2 text-thm-contrast hover:bg-thm-hover\"\n      @click=\"showModal = !showModal\"\n    >\n      <span>{{ $t(`${trPrefix}catalog.create`) }}</span>\n    </button>\n    <button\n      class=\"flex flex-row items-center justify-center gap-1 rounded-lg border bg-thm p-2 text-thm-contrast hover:bg-thm-hover\"\n      @click=\"$emit('clear-favorites')\"\n    >\n      <span>{{ $t(`${trPrefix}removeAll`) }}</span>\n    </button>\n    <FavPersonalCatalog\n      :show=\"showModal\"\n      :privacy-policy=\"privacyPolicy\"\n      :accoms=\"accoms\"\n      :language=\"language\"\n      :sales-office-id=\"salesOfficeId\"\n      @close=\"showModal = false\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.views.favorites.Actions.'\n\ndefineProps<{\n  accoms: ResultDocument[]\n  language: string\n  salesOfficeId: string\n  privacyPolicy: string\n}>()\n\ndefineEmits<{ (e: 'clear-favorites'): void }>()\n\nconst showModal = ref(false)\n</script>\n","<template>\n  <div class=\"bg-bgr-50\">\n    <section class=\"flex justify-center\">\n      <h1\n        class=\"container-fluid-lg flex h-20 items-center bg-thm pl-8 text-3xl text-bgr\"\n      >\n        {{ $t(`${trPrefix}title`) }}\n      </h1>\n    </section>\n\n    <div\n      class=\"container-fluid-lg relative mb-12 mt-4 flex flex-col text-sm lg:text-base\"\n    >\n      <FavBreadcrumbs />\n\n      <div\n        v-if=\"favorites.length > 0\"\n        class=\"mt-4 flex flex-col-reverse gap-4 bg-bgr-50 md:flex-row\"\n      >\n        <main\n          class=\"grid w-full grid-cols-1 gap-4 sm:grid-cols-2 md:w-3/4 md:grid-cols-1\"\n        >\n          <HitboxOrig\n            v-for=\"item in filteredList\"\n            :key=\"item.code + '_orig'\"\n            class=\"hidden md:grid\"\n            :accom=\"item\"\n          />\n          <HitboxCard\n            v-for=\"item in filteredList\"\n            :key=\"item.code + '_card'\"\n            class=\"block md:hidden\"\n            :accom=\"item\"\n          />\n        </main>\n        <aside\n          class=\"sticky inset-0 -ml-4 min-w-[100vw] bg-bgr pb-4 pt-4 md:ml-0 md:w-1/4 md:min-w-0 md:bg-bgr-50 md:pb-0\"\n        >\n          <div class=\"sticky top-4 mx-4 md:mx-0\">\n            <FavInfobox\n              :show=\"paxDependentPrice && !hideInfobox\"\n              class=\"mb-4\"\n              @hide=\"hideInfobox = true\"\n            />\n            <FavActions\n              :accoms=\"favorites\"\n              class=\"my-0\"\n              :language=\"confData.language!\"\n              :partner-id=\"partner.id\"\n              :sales-office-id=\"confData.salesoffice?.code || ''\"\n              :privacy-policy=\"confData.links?.privacyPolicy?.href || ''\"\n              @clear-favorites=\"clearFavorites\"\n            />\n          </div>\n        </aside>\n      </div>\n\n      <div v-else-if=\"!pending\" class=\"pt-8 text-lg\">\n        {{ $t(`${trPrefix}noList`) }}\n      </div>\n      <div v-else class=\"mt-48\">\n        <WebccLoaderOverlay absolute />\n      </div>\n    </div>\n    <BlocksUSPCorona\n      v-if=\"additionalBody.USPBar\"\n      boxed\n      :icons=\"additionalBody.USPBar\"\n    />\n    <USPCards\n      v-if=\"additionalBody.USPCards\"\n      :why=\"additionalBody.USPCards.cards\"\n    />\n    <USPWhy\n      v-if=\"additionalBody.USPColumns\"\n      :why=\"[additionalBody.USPColumns.left, additionalBody.USPColumns.right]\"\n    />\n    <FooterNewsletterSignup />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.pages.favorites.'\n\ndefineProps<{}>()\n\nconst { t } = useI18n()\nconst confData = useConfdata()\nconst partner = usePartner()\nconst bookmarks = useBookmarks()\nconst tracking = useTracking()\nconst searchApi = useSearchApi()\n\nconst favorites = ref<ResultDocument[]>([])\nconst facets = ref({})\nconst sortorder = ref('age')\nconst hideInfobox = ref(false)\nconst pending = ref(true)\n\nconst additionalBody = computed(\n  () => confData.additionalBody as FavoritespageBody,\n)\n\nonMounted(async () => {\n  await nextTick(async () => {\n    let ids = bookmarks.raw\n    const url = new URL(window.location.href)\n    if (url.searchParams.has('recommendationId')) {\n      try {\n        await bookmarks.loadPersonalCatalog(\n          url.searchParams.get('recommendationId')!,\n        )\n        ids = bookmarks.catalog!\n      } catch (error) {\n        console.error(error)\n      }\n    }\n    if (ids.length === 0) {\n      pending.value = false\n      return\n    }\n    const params: { code: string[]; pagesize: number; locale: string } = {\n      code: ids,\n      pagesize: 0,\n      locale: confData.locale,\n    }\n    params.pagesize = bookmarks.count\n    try {\n      const { data } = await searchApi.search({\n        code: ids,\n        pagesize: ids.length,\n        language: confData.language,\n      })\n\n      let index = 1\n      data.value?.docs?.forEach((doc) => {\n        ;(doc as ResultDocument & { position: number }).position = index++\n      })\n\n      favorites.value = (data.value?.docs as ResultDocument[]) ?? []\n      facets.value = data.value?.facets ?? {}\n\n      tracking.handlers?.ecommerce.viewItemList(favorites.value)\n      tracking.handlers?.eec.productImpression(favorites.value)\n    } catch (error) {\n      console.error(error)\n    } finally {\n      pending.value = false\n    }\n  })\n})\n\n// the check for occupancy-pricing is disabled because it's not clear if it's still needed and what information/text has to be shown\nconst paxDependentPrice = computed(() => {\n  return false\n})\n\nconst filteredList = computed(() => {\n  return favorites.value.toSorted((elem1, elem2) => {\n    switch (sortorder.value) {\n      case 'ih':\n        return 1\n      case 'rating':\n        return elem1.rating < elem2.rating ? 1 : -1\n      case 'priceAsc':\n        if (!elem1.trip?.price || !elem2.trip?.price) {\n          return 1\n        }\n        return elem1.trip.price > elem2.trip.price ? 1 : -1\n      case 'priceDesc':\n        if (!elem1.trip?.price || !elem2.trip?.price) {\n          return 1\n        }\n        return elem1.trip.price < elem2.trip.price ? 1 : -1\n      case 'paxAsc':\n        return elem1.pax > elem2.pax ? 1 : -1\n      case 'paxDesc':\n        return elem1.pax < elem2.pax ? 1 : -1\n      default:\n        return 1\n    }\n  })\n})\n\nfunction clearFavorites() {\n  if (window.confirm(t(`${trPrefix}removeAll`))) {\n    bookmarks.clear()\n    favorites.value.forEach((accom) => {\n      tracking.handlers?.ecommerce.removeFromWishlist([accom])\n    })\n    favorites.value = []\n  }\n}\n</script>\n","const HASH_PLACEHOLDER = ':hash'\n\nexport function useEmails() {\n  const query = computed(() => useRoute().query)\n  const path = computed(() => useRoute().path.split('/'))\n  const hash = computed(() => path.value[2] || HASH_PLACEHOLDER)\n  const action = computed(() => _parseAction(path.value[3]))\n  const queryAction = computed(() =>\n    _parseAction(query.value.action?.toString() ?? ''),\n  )\n\n  const defaultParams = computed(() => ({\n    ip: useState('clientIP').value as string,\n    language: useL10N().language,\n    salesoffice: useConfdata().salesoffice?.code,\n  }))\n\n  function _parseAction(text: string): EmailsAction | undefined {\n    if (text === 'newsletter-unsubscribe') return 'unsubscribe'\n    if (['confirm', 'unsubscribe', 'optin'].includes(text))\n      return text as EmailsAction\n    return undefined\n  }\n\n  function getActionUrl(\n    action: EmailsAction,\n    options?: { canonical: boolean },\n  ) {\n    return options?.canonical\n      ? `/emails/${hash.value}/${action === 'unsubscribe' ? 'newsletter-unsubscribe' : action}`\n      : `/emails/${hash.value}?action=${action}`\n  }\n\n  async function subscribe(params: {\n    email: string\n    captcha: string\n    salutation: string\n    firstname: string\n    lastname: string\n  }) {\n    return await useWebccApi().emailsSubscribe({\n      ...defaultParams.value,\n      brand: 'ih', // TODO remove\n      type: 'CU',\n      ...params,\n    })\n  }\n\n  async function unsubscribe(reason: number) {\n    return await useWebccApi().emailsUnsubscribe({\n      ...defaultParams.value,\n      email: hash.value,\n      reason,\n    })\n  }\n\n  async function confirm() {\n    return await useWebccApi().emailsConfirm({\n      ...defaultParams.value,\n      hash: hash.value,\n    })\n  }\n\n  async function optIn() {\n    return await useWebccApi().emailsOptIn({\n      ...defaultParams.value,\n      hash: hash.value,\n    })\n  }\n\n  return {\n    hash,\n    action,\n    queryAction,\n    getActionUrl,\n    subscribe,\n    unsubscribe,\n    confirm,\n    optIn,\n  }\n}\n","<template>\n  <div class=\"bg-bgr-50\">\n    <main class=\"container-fluid-md min-h-2/3-screen py-4\">\n      <WebccHeading :level=\"1\" space=\"mt-8 mb-4\" class=\"text-center\">\n        <span>{{ $t(`${trPrefix}title`) }}</span>\n      </WebccHeading>\n\n      <section class=\"relative min-h-1/4-screen rounded bg-bgr p-4 shadow\">\n        <WebccLoaderOverlay v-if=\"loading\" absolute rounded=\"md\" />\n\n        <template v-if=\"success\">\n          <article>\n            <WebccHeading :level=\"2\">\n              <span>{{ $t(`${trPrefix}success.heading`) }}</span>\n            </WebccHeading>\n            <main class=\"flex flex-col gap-2\">\n              <span>{{ $t(`${trPrefix}success.transmission`) }}</span>\n              <span>{{ $t(`${trPrefix}success.continue`) }}</span>\n              <WebccButton class=\"mt-4 w-fit\" @click=\"toStartpage\">\n                <span>{{ $t(`${trPrefix}success.inspiration`) }}</span>\n              </WebccButton>\n            </main>\n          </article>\n        </template>\n\n        <WebccForm v-else v-model=\"formdata\" class=\"md:ml-32\" @submit=\"submit\">\n          <WebccHeading :level=\"3\" space=\"my-4\">\n            <span>{{ $t(`${trPrefix}sub`) }}</span>\n          </WebccHeading>\n\n          <p class=\"mb-8\">\n            <span>{{ $t(`${trPrefix}orderText`) }}</span>\n            <span>{{ $t(`${trPrefix}orderUnsubscribePossible`) }}</span>\n          </p>\n\n          <p class=\"my-2 text-txt-weak\">\n            {{ $t('plugins.form.Formfield.requiredInfo') }}\n          </p>\n          <WebccFormfield\n            component=\"WebccSelect\"\n            class=\"mb-2 max-w-xs\"\n            :label=\"$t(`${trPrefix}salutation`)\"\n            name=\"salutation\"\n            type=\"radio\"\n            :options=\"[\n              { '1': $t(`${trPrefix}mr`) },\n              { '2': $t(`${trPrefix}ms`) },\n            ]\"\n          />\n\n          <WebccFormfield\n            component=\"WebccInput\"\n            label-position=\"left\"\n            class=\"mb-2 max-w-lg\"\n            :label=\"$t(`${trPrefix}firstname`)\"\n            name=\"firstname\"\n            type=\"text\"\n          />\n\n          <WebccFormfield\n            component=\"WebccInput\"\n            label-position=\"left\"\n            class=\"mb-2 max-w-lg\"\n            :label=\"$t(`${trPrefix}lastname`)\"\n            name=\"lastname\"\n            type=\"text\"\n          />\n\n          <WebccFormfield\n            ref=\"email\"\n            component=\"WebccInput\"\n            label-position=\"left\"\n            class=\"mb-2 max-w-lg\"\n            :label=\"$t(`${trPrefix}email`)\"\n            name=\"email\"\n            required\n            type=\"email\"\n            @input=\"emailError = false\"\n          />\n\n          <WebccCaptcha\n            v-model=\"captcha\"\n            class=\"mt-6 mb-8\"\n            :locale=\"useConfdata().locale!\"\n          />\n\n          <TextHTML\n            path=\"gdpr\"\n            tag=\"p\"\n            class=\"mb-6 max-w-3xl text-sm text-txt\"\n            :prefix=\"trPrefix\"\n            placeholder-pattern=\"dse\"\n          >\n            <template #dse>\n              <WebccLink\n                anchor\n                target=\"_blank\"\n                class=\"text-thm\"\n                :to=\"useConfdata().links?.privacyPolicy?.href\"\n              >\n                <span>{{ $t(`${trPrefix}privacyPolicy`) }}</span>\n              </WebccLink>\n            </template>\n          </TextHTML>\n\n          <div\n            v-if=\"emailError\"\n            class=\"my-4 rounded border border-err p-4 text-err\"\n          >\n            {{ $t(`${trPrefix}emailError`) }}\n          </div>\n          <div\n            v-else-if=\"success === false\"\n            class=\"my-4 rounded border border-err p-4 text-err\"\n          >\n            {{ $t(`${trPrefix}error`) }}\n          </div>\n\n          <WebccButton variant=\"cta\" size=\"lg\" :disabled=\"!captcha\" class=\"\">\n            <span>{{ $t(`${trPrefix}submit`) }}</span>\n          </WebccButton>\n        </WebccForm>\n      </section>\n    </main>\n    <FooterNewsletterSignup />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { Formdata } from '~/components/@ihgroup/form/InjectionKeys'\n\nconst trPrefix = 'www.pages.newsletter.'\n\nconst formdata = ref({\n  salutation: '5', // wenn der User nichts auswählt, soll eine \"5\" an V5 / FOCUS gesendet werden\n  firstname: '',\n  lastname: '',\n  email: useState('email').value as string,\n})\n\nconst success: Ref<boolean | null> = ref(null)\nconst loading: Ref<boolean | null> = ref(false)\nconst captcha: Ref<string> = ref('')\nconst emailError: Ref<boolean | null> = ref(false)\nconst registrationType: Ref<string> = ref(\n  useRoute().query.type?.toString() || '',\n)\n\nif (import.meta.server) {\n  try {\n    useState('email').value = useRequestEvent()!.context.email\n  } catch (error) {\n    console.error(error)\n  }\n}\n\nasync function submit(form: Formdata) {\n  formdata.value = form as {\n    salutation: string\n    firstname: string\n    lastname: string\n    email: string\n  }\n  loading.value = true\n\n  let heid = ''\n\n  try {\n    // validation API\n    const emailValidationResult = await useValidation().email(\n      formdata.value.email,\n    )\n    heid = emailValidationResult!.hashPrefix!\n    if (emailValidationResult!.score < 3) {\n      emailError.value = true\n      loading.value = false\n      return\n    }\n  } catch (error) {\n    console.error(error)\n    emailError.value = true\n    loading.value = false\n    return\n  }\n\n  const { error, pending } = await useEmails().subscribe({\n    ...formdata.value,\n    captcha: captcha.value,\n  })\n\n  loading.value = pending.value\n  success.value = !error.value\n\n  if (success.value) {\n    useTracking().handlers?.newsletter.registration(registrationType.value)\n    useTracking().handlers?.newsletter.registrationHeID({\n      type: registrationType.value,\n      heid,\n    })\n  } else {\n    useTracking().handlers?.newsletter.registrationFailed()\n    useTracking().handlers?.newsletter.registrationFailedAdditional()\n  }\n}\n\nonMounted(() => {\n  scrollTo(0, 0)\n})\n\nasync function toStartpage() {\n  await navigateTo('/')\n}\n</script>\n","<template>\n  <main class=\"container-fluid-md my-8\">\n    <WebccHeading\n      :level=\"1\"\n      :title=\"$t(`${trPrefix}title`)\"\n      space=\"mb-4\"\n      class=\"text-center\"\n    />\n\n    <section\n      class=\"relative min-h-1/4-screen rounded bg-bgr p-4 text-txt shadow\"\n    >\n      <div v-if=\"success === true\" class=\"\">\n        <WebccHeading\n          :level=\"2\"\n          :title=\"$t(`${trPrefix}success.heading`)\"\n          space=\"my-2\"\n        />\n        <p>{{ $t(`${trPrefix}success.text`) }}</p>\n      </div>\n\n      <div v-else-if=\"success === false\" class=\"\">\n        <WebccHeading :level=\"2\" :title=\"$t(`${trPrefix}error.heading`)\" />\n        <p>{{ $t(`${trPrefix}error.text`) }}</p>\n      </div>\n\n      <WebccLoaderOverlay v-else absolute rounded=\"md\" />\n    </section>\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.pages.emails._hash.confirm.'\n\nconst success = ref<boolean>()\n\nonMounted(async () => {\n  const { error } = await useEmails().confirm()\n\n  success.value = !error.value\n})\n</script>\n","<template>\n  <main class=\"container-fluid-md my-8\">\n    <WebccHeading\n      :level=\"1\"\n      :title=\"$t(`${trPrefix}title`)\"\n      space=\"mb-4\"\n      class=\"text-center\"\n    />\n\n    <section\n      class=\"relative min-h-1/4-screen rounded bg-bgr p-4 text-txt shadow\"\n    >\n      <div v-if=\"success === true\" class=\"\">\n        <WebccHeading\n          :level=\"2\"\n          :title=\"$t(`${trPrefix}success.heading`)\"\n          space=\"my-2\"\n        />\n        <p>{{ $t(`${trPrefix}success.text`) }}</p>\n      </div>\n\n      <div v-else-if=\"success === false\" class=\"\">\n        <WebccHeading :level=\"2\" :title=\"$t(`${trPrefix}error.heading`)\" />\n        <p>{{ $t(`${trPrefix}error.text`) }}</p>\n      </div>\n\n      <WebccLoaderOverlay v-else absolute rounded=\"md\" />\n    </section>\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.pages.emails._hash.optin.'\n\nconst success = ref<boolean>()\n\nonMounted(async () => {\n  const { error } = await useEmails().optIn()\n\n  success.value = !error.value\n\n  if (!success.value) return\n\n  useTracking().handlers?.newsletter.optIn()\n  useTracking().handlers?.newsletter.optInHeID(useEmails().hash.value)\n})\n</script>\n","<template>\n  <main class=\"container-fluid-md my-8\">\n    <WebccHeading\n      :level=\"1\"\n      :title=\"$t(`${trPrefix}title`)\"\n      space=\"mb-4\"\n      class=\"text-center\"\n    />\n\n    <section class=\"relative min-h-1/4-screen rounded bg-bgr p-4 shadow\">\n      <template v-if=\"success === undefined\">\n        <span class=\"mt-8 text-lg font-light text-thm\">{{\n          $t(`${trPrefix}heading`)\n        }}</span>\n\n        <div\n          class=\"mb-4 mt-4 flex flex-col items-stretch justify-center space-y-4\"\n        >\n          <label\n            v-for=\"{ value, label } in options\"\n            :key=\"value\"\n            class=\"mt-3 inline-flex items-center rounded bg-bgr-50 px-4 py-2 text-txt-contrast shadow hover:bg-bgr-100 active:bg-bgr-200\"\n          >\n            <input\n              v-model=\"reason\"\n              type=\"radio\"\n              class=\"h-6 w-6 cursor-pointer rounded-3xl text-thm focus:ring-bgr active:ring-thm\"\n              :value=\"value\"\n            />\n\n            <div class=\"ml-4 text-txt\">\n              <p class=\"text-txt-weak\">{{ label }}</p>\n            </div>\n          </label>\n        </div>\n        <WebccButton variant=\"cta\" size=\"lg\" class=\"\" @click=\"submit\">\n          <span>{{ $t(`${trPrefix}submit`) }}</span>\n        </WebccButton>\n\n        <WebccLoaderOverlay v-if=\"loading\" absolute rounded=\"md\" />\n      </template>\n\n      <template v-else>\n        <template v-if=\"success === true\">\n          <WebccHeading\n            :level=\"2\"\n            :title=\"$t(`${trPrefix}success.heading`)\"\n            space=\"my-2\"\n          />\n          <p>{{ $t(`${trPrefix}success.text`) }}</p>\n        </template>\n        <article v-else class=\"text-center\">\n          <WebccHeading\n            :level=\"2\"\n            :title=\"$t(`${trPrefix}error.heading`)\"\n            space=\"my-2\"\n          />\n          <p class=\"text-lg font-light text-txt\">\n            {{ $t(`${trPrefix}error.note`) }}\n          </p>\n        </article>\n      </template>\n    </section>\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.pages.emails._hash.unsubscribe.'\n\nconst { t } = useI18n()\n\nconst reason = ref(1)\nconst loading = ref(false)\nconst success = ref<boolean>()\n\nconst { hash } = useEmails()\n\nconst options = computed(() => [\n  { value: 3, label: t(`${trPrefix}options.frequency`) },\n  { value: 4, label: t(`${trPrefix}options.topics`) },\n  { value: 5, label: t(`${trPrefix}options.needs`) },\n  { value: 6, label: t(`${trPrefix}options.newsletters`) },\n  { value: 2, label: t(`${trPrefix}options.noreason`) },\n])\n\nonMounted(() => {\n  useTracking().handlers?.newsletter.unsubscribe(hash.value)\n})\n\nasync function submit() {\n  const { error, pending } = await useEmails().unsubscribe(reason.value)\n\n  loading.value = pending.value\n  success.value = !error.value\n\n  if (!success.value) return\n\n  useTracking().handlers?.newsletter.unsubscribeSubmit(hash.value)\n}\n</script>\n","<template>\n  <main class=\"container-fluid-md my-8\">\n    <WebccHeading\n      :level=\"1\"\n      title=\"Email-Verwaltung\"\n      space=\"mb-4\"\n      class=\"text-center\"\n    />\n    <section class=\"relative min-h-1/4-screen rounded bg-bgr p-4 shadow\">\n      <p>\n        Auf dieser Seite kann die Emailadresse mit folgendem Hash verwaltet\n        werden.\n      </p>\n      <p>Hash: {{ hash }}</p>\n      <ul class=\"mt-8 list-inside list-disc space-y-4\">\n        <li\n          v-for=\"[action, { label, url }] in Object.entries(actions)\"\n          :key=\"action\"\n        >\n          <WebccButton class=\"mr-1\" :label=\"label\" @click=\"navigateTo(url)\" />\n          <WebccLink anchor :to=\"url\">{{ url }}</WebccLink>\n        </li>\n      </ul>\n      <ul\n        v-if=\"useConfdata().signupEnabled\"\n        class=\"mt-16 list-inside list-disc\"\n      >\n        <li>\n          <WebccLink :to=\"`/newsletter`\">Zur Newsletter-Anmeldung</WebccLink>\n        </li>\n        <li>\n          <WebccLink anchor :to=\"actions.unsubscribe.url\"\n            >Diese Email vom Newsletter abmelden</WebccLink\n          >\n        </li>\n      </ul>\n    </section>\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst actions = computed(() => ({\n  confirm: { label: 'Confirm', url: getActionUrl('confirm') },\n  unsubscribe: { label: 'Unsubscribe', url: getActionUrl('unsubscribe') },\n  optin: { label: 'Opt-in', url: getActionUrl('optin') },\n}))\n\nconst { hash, getActionUrl } = useEmails()\n</script>\n","<template>\n  <div class=\"bg-bgr\">\n    <section class=\"flex min-h-2/3-screen items-stretch bg-bgr-50 py-4\">\n      <EmailsConfirm v-if=\"action === 'confirm'\" />\n      <EmailsOptin v-else-if=\"action === 'optin'\" />\n      <EmailsUnsubscribe v-else-if=\"action === 'unsubscribe'\" />\n      <EmailsActions v-else />\n    </section>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst { action, queryAction, getActionUrl } = useEmails()\n\nif (queryAction.value) {\n  await navigateTo(getActionUrl(queryAction.value, { canonical: true }))\n}\n</script>\n","<template>\n  <HeadlessListbox v-model=\"selectedOption\">\n    <div class=\"relative\">\n      <HeadlessListboxButton\n        :id=\"`${id}-listbox-btn`\"\n        class=\"relative ml-2 flex items-center rounded border border-bgr-300 p-2 pr-8 text-sm font-semibold text-txt-strongest duration-200 hover:cursor-pointer hover:bg-bgr-100 focus:outline-none md:ml-3\"\n      >\n        <span :class=\"{ uppercase: toUpperCase }\">{{\n          hasKey\n            ? selectedOption[objectKey as keyof typeof selectedOption]\n            : selectedOption\n        }}</span>\n        <span\n          class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\"\n        >\n          <WebccIcon\n            name=\"site/chevron-down\"\n            filled\n            class=\"h-5 w-5 text-bgr-500\"\n            aria-hidden=\"true\"\n          />\n        </span>\n      </HeadlessListboxButton>\n\n      <transition\n        leave-active-class=\"transition duration-100 ease-in\"\n        leave-from-class=\"opacity-100\"\n        leave-to-class=\"opacity-0\"\n      >\n        <HeadlessListboxOptions\n          class=\"absolute z-10 mt-1 w-full overflow-auto rounded bg-bgr py-1 text-base shadow-lg ring-1 ring-bgr-300 focus:outline-none sm:text-sm\"\n        >\n          <HeadlessListboxOption\n            v-for=\"(option, index) in allOptions\"\n            v-slot=\"{ active, selected }\"\n            :key=\"\n              hasKey\n                ? (option[objectKey as keyof typeof option] as string)\n                : option + ' ' + index\n            \"\n            :value=\"option\"\n            as=\"template\"\n            @click=\"\n              () =>\n                emit(\n                  'onChange',\n                  hasKey ? option[objectKey as keyof typeof option] : option,\n                )\n            \"\n          >\n            <li\n              :class=\"[\n                active ? 'bg-thm-light text-thm' : 'text-txt-strong',\n                'relative cursor-default select-none py-1 pl-10 pr-4',\n              ]\"\n            >\n              <span\n                :class=\"[\n                  selected ? 'font-medium' : 'font-normal',\n                  'block',\n                  { uppercase: toUpperCase },\n                ]\"\n                >{{\n                  hasKey ? option[objectKey as keyof typeof option] : option\n                }}</span\n              >\n              <span\n                v-if=\"selected\"\n                class=\"absolute inset-y-0 left-0 flex items-center pl-3 text-thm\"\n              >\n                <WebccIcon\n                  name=\"site/tick\"\n                  class=\"h-3 w-3 fill-thm\"\n                  aria-hidden=\"true\"\n                />\n              </span>\n            </li>\n          </HeadlessListboxOption>\n        </HeadlessListboxOptions>\n      </transition>\n    </div>\n  </HeadlessListbox>\n</template>\n\n<script setup generic=\"T extends string | number | object\" lang=\"ts\">\nconst emit = defineEmits(['onChange'])\nconst id = useId()\nconst props = defineProps<{\n  selectedValue: string | number\n  allOptions: T[]\n  objectKey?: string\n  hasKey: boolean\n  toUpperCase: boolean\n}>()\n\n// If the selected value is not in the options, set the first option as selected\nconst selectedOption = computed(() => {\n  let option = props.allOptions.find((option: T) => {\n    return props.hasKey\n      ? option[props.objectKey as keyof typeof option] === props.selectedValue\n      : option === props.selectedValue\n  })\n\n  if (!option) {\n    option = props.hasKey\n      ? props.allOptions[0][props.objectKey as keyof typeof option]\n      : props.allOptions[0]\n  }\n\n  return option\n})\n</script>\n","<template>\n  <header class=\"container-fluid-lg flex items-center justify-between py-4\">\n    <WebccCompanyLogo\n      target=\"_self\"\n      :anchor=\"false\"\n      :caption=\"logoCaption\"\n      class=\"font-light\"\n      :href=\"logoHref\"\n      @click=\"useTracking().handlers?.header.headerItemClick('homepage')\"\n    />\n    <div class=\"flex items-center md:items-end self-end\">\n      <HeaderSelect\n        v-if=\"sites && sites?.length > 1\"\n        :selected-value=\"language!\"\n        :all-options=\"sites\"\n        :has-key=\"true\"\n        object-key=\"language\"\n        :to-upper-case=\"true\"\n        @on-change=\"changeLanguage\"\n      />\n      <HeaderSelect\n        v-if=\"currencies && currencies.length > 1\"\n        :selected-value=\"confCurrency!\"\n        :all-options=\"currencies\"\n        :has-key=\"false\"\n        :to-upper-case=\"true\"\n        @on-change=\"changeCurrency\"\n      />\n    </div>\n  </header>\n</template>\n\n<script setup lang=\"ts\">\nconst {\n  currencies,\n  language,\n  sites,\n  logoCaption,\n  currency: confCurrency,\n} = storeToRefs(useConfdata())\n\nconst logoHref = computed(() => useRequestURL().pathname)\n\nfunction changeLanguage(lang: string) {\n  useTracking().handlers?.header.languageSwitch(lang)\n\n  const url = useRequestURL()\n  url.pathname = [lang, ...url.pathname.split('/').slice(2)].join('/')\n  window.location.href = url.href\n}\n\nfunction changeCurrency(currency: string) {\n  useTracking().handlers?.header.currencySwitch(currency)\n\n  const url = useRequestURL()\n  url.searchParams.set('currency', currency)\n  window.location.href = url.href\n}\n</script>\n","<template>\n  <div>\n    <footer class=\"flex flex-col bg-bgr-100 p-4\">\n      <div class=\"flex flex-wrap justify-center\">\n        <button\n          v-for=\"(item, index) in menu\"\n          :key=\"index\"\n          class=\"m-4 hover:text-thm\"\n          @click=\"showModal(item)\"\n        >\n          <span>{{ item.title }}</span>\n        </button>\n        <button\n          class=\"m-4 hover:text-thm\"\n          @click=\"useConsent().configOpen = true\"\n        >\n          <span>{{ $t(`${trPrefix}cookieSettings`) }}</span>\n        </button>\n      </div>\n    </footer>\n\n    <WebccModal v-if=\"activeItem\" @close=\"hideModal\">\n      <div class=\"max-h-[80vh] max-w-xl overflow-y-auto bg-bgr p-6 rounded-md\">\n        <header\n          class=\"relative flex min-w-[300px] shrink-0 items-center justify-between pb-8\"\n        >\n          <h1 class=\"text-xl font-medium\">{{ activeItem.title }}</h1>\n          <button\n            class=\"pointer-events-auto relative inline-block h-6 w-6 shrink-0 grow-0 cursor-pointer select-none appearance-none rounded-xl border-0 bg-bgr-300 p-1 align-top outline-none\"\n            aria-label=\"close\"\n            @click=\"hideModal\"\n          >\n            <svg\n              class=\"h-4 w-4 text-txt-contrast\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              fill=\"none\"\n              viewBox=\"0 0 24 24\"\n              stroke=\"currentColor\"\n              aria-hidden=\"true\"\n            >\n              <path\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n                stroke-width=\"2\"\n                d=\"M6 18L18 6M6 6l12 12\"\n              />\n            </svg>\n          </button>\n        </header>\n\n        <Blocks :blocks=\"activeItem.content\" />\n      </div>\n    </WebccModal>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.footer.'\n\ninterface MenuItem {\n  title: string\n  content: Block[]\n}\n\nconst MENU_BLOCKS = [\n  1, // Conditions\n  0, // Imprint\n  2, // Privacy policy\n]\n\nconst activeItem = ref<MenuItem>()\n\nconst body = computed(() => useConfdata().body ?? [])\nconst menu = computed(() =>\n  MENU_BLOCKS.map((index) => toMenuItem(body.value[index].content.content)),\n)\n\nfunction toMenuItem(blocks: Block[]): MenuItem {\n  return {\n    title: blocks.find(({ component }) => component === 'Heading')?.content\n      .title,\n    content: blocks.filter(({ component }) => component !== 'Heading'),\n  }\n}\n\nfunction showModal(item: MenuItem) {\n  activeItem.value = item\n}\n\nfunction hideModal() {\n  activeItem.value = undefined\n}\n</script>\n","<template>\n  <div>\n    <Colors :colors=\"useColors().colors\" />\n\n    <MyRentHeader class=\"mb-1\" />\n\n    <DetailsAccommodation\n      v-if=\"useConfdata().baseData?.code\"\n      :actions=\"['share']\"\n      :show-breadcrumbs=\"false\"\n      :show-contact-card=\"false\"\n      :show-labels=\"false\"\n    />\n    <div v-else class=\"flex h-24 flex-col justify-center bg-bgr-50\">\n      <div class=\"container-fluid-lg flex items-baseline gap-2\">\n        <span class=\"text-lg font-semibold\">{{\n          $t('www.components.views.PageDetails.invalidCode')\n        }}</span>\n      </div>\n    </div>\n\n    <MyRentFooter />\n  </div>\n</template>\n","<template>\n  <main class=\"flex w-full flex-col items-center bg-bgr-100\">\n    <h1\n      class=\"mb-4 mt-4 text-center text-3xl font-normal leading-normal text-thm\"\n    >\n      {{ $t('errors.title') }}\n    </h1>\n    <article\n      class=\"mx-2 my-4 w-full max-w-screen-md rounded bg-bgr p-4 text-txt shadow-md md:w-full\"\n    >\n      <h4 class=\"text-xl text-err\">{{ $t('errors.messages.notFound') }}</h4>\n    </article>\n    <FooterNewsletterSignup />\n  </main>\n</template>\n\n<script setup lang=\"ts\"></script>\n","<template>\n  <div v-if=\"isEnabled\" class=\"bg-hlt-light\">\n    <div class=\"container-fluid-lg text-txt flex justify-between py-6\">\n      <p v-html=\"$t('plugins.components.GeneralInfobar.text')\" />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst isEnabled = useFlag('general-alert')\n</script>\n","<template>\n  <div v-if=\"usePartner().jwt && !$params.iframe\" class=\"bg-hlt-light\">\n    <div\n      class=\"container-fluid-xl text-txt flex justify-between py-3.5 text-sm\"\n    >\n      <div>\n        <span>{{ $t(`${trPrefix}id`) }}</span\n        >: <strong>{{ usePartner().id }}</strong>\n      </div>\n      <div>\n        <WebccLink\n          anchor\n          class=\"mr-10 underline hover:no-underline\"\n          to=\"https://partners.interhome.group/portal\"\n        >\n          <span>{{ $t(`${trPrefix}portal`) }}</span>\n        </WebccLink>\n        <WebccLink\n          anchor\n          class=\"mr-10 underline hover:no-underline\"\n          to=\"/booking/logout/\"\n        >\n          <span>{{ $t(`${trPrefix}logout`) }}</span>\n        </WebccLink>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'plugins.components.B2BInfobar.'\n</script>\n","<template>\n  <WebccLink\n    v-for=\"announcement in announcements\"\n    :key=\"announcement.name\"\n    v-track:impression=\"{\n      event: 'announcements:display',\n      args: [announcement],\n    }\"\n    :to=\"announcement.link.href\"\n    anchor\n    target=\"_blank\"\n    class=\"flex items-center justify-center p-6 bg-thm-light\"\n    @click=\"handleClick(announcement)\"\n  >\n    <WebccIcon\n      v-if=\"announcement.icon\"\n      :name=\"`site/${announcement.icon}`\"\n      class=\"h-8 w-8 shrink-0 mr-2 sm:mr-4\"\n    />\n\n    <p class=\"text-sm sm:text-base\">{{ announcement.text }}</p>\n\n    <WebccIcon name=\"site/arrow-right\" class=\"h-4 w-4 shrink-0 ml-2\" />\n  </WebccLink>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{ announcements: Announcement[] }>()\n\nconst tracking = useTracking()\n\nconst announcements = computed(() => props.announcements.slice(0, 1))\n\nfunction handleClick(announcement: Announcement) {\n  tracking.handlers?.announcements.open(announcement)\n}\n</script>\n","<template>\n  <!-- Mobile menu -->\n  <div class=\"absolute inset-0 z-[1000] flex flex-col bg-bgr md:hidden\">\n    <div\n      v-if=\"siteSettings?.includes('contactinfo')\"\n      class=\"pointer-events-none flex items-center justify-center pt-4 text-sm font-light text-txt-strong\"\n    >\n      <span class=\"pointer-events-auto\">{{ $t(`${trPrefix}hereForYou`) }}</span>\n      <WebccLink\n        :to=\"props.links?.contact?.href\"\n        class=\"pointer-events-auto ml-3 underline underline-offset-1\"\n        @click=\"tracking.handlers?.header.headerItemClick('contactus')\"\n        ><span>{{ $t(`${trPrefix}contactUs`) }}</span>\n      </WebccLink>\n    </div>\n    <div class=\"flex justify-end border-b border-bgr-200 p-3\">\n      <button\n        class=\"rounded p-1 hover:bg-bgr-100 focus:outline-none active:bg-bgr-100 sm:ml-2 sm:p-2 md:hidden\"\n        @click.stop=\"toggling.toggle('menu')\"\n      >\n        <WebccIcon class=\"h-7 w-7 text-txt-weak\" name=\"site/x\" />\n      </button>\n    </div>\n    <ul class=\"mt-3 flex flex-col space-y-4\">\n      <li\n        v-for=\"item in props.menu\"\n        :key=\"item.id + 'link'\"\n        class=\"whitespace-no-wrap cursor-pointer rounded text-txt-strongest hover:bg-bgr-100\"\n      >\n        <WebccLink\n          anchor\n          :to=\"item.href\"\n          :hash=\"item.hash\"\n          :target=\"item.target\"\n          class=\"block px-4 py-2 pb-4 md:text-center\"\n          @click=\"\n            tracking.handlers?.header.sitenavigationClick(\n              item.id as\n                | 'partner'\n                | 'lso'\n                | 'topcountries'\n                | 'inspirations'\n                | 'homeowner',\n            )\n          \"\n          >{{ item.label }}</WebccLink\n        >\n      </li>\n    </ul>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { storeToRefs } from 'pinia'\n\nconst trPrefix = 'www.components.site.Header.'\n\nconst { siteSettings } = storeToRefs(useConfdata())\nconst toggling = useToggler()\nconst tracking = useTracking()\n\nconst props = defineProps<{\n  menu?: HeaderMenuItem[]\n  links?: Links\n}>()\n\n// @TODO if its just to block scrolling there is vueuse useScrollLock @see ConsentBanner.vue\nonMounted(() => {\n  const cW = document.body.clientWidth\n  document.documentElement.classList.add('!overflow-y-hidden')\n  document.documentElement.style.width = `${cW}px`\n})\n\nonBeforeUnmount(() => {\n  document.documentElement.classList.remove('!overflow-y-hidden')\n  document.documentElement.style.width = ''\n})\n</script>\n","<template>\n  <nav class=\"-left-4 text-txt md:relative md:flex md:flex-wrap\">\n    <!-- Desktop menu -->\n    <ul class=\"hidden md:flex\">\n      <li\n        v-for=\"item in menuItems\"\n        :key=\"item.id + 'link'\"\n        class=\"whitespace-no-wrap cursor-pointer rounded text-txt-strongest hover:bg-bgr-100\"\n      >\n        <WebccLink\n          anchor\n          :to=\"item.href\"\n          :hash=\"item.hash\"\n          :target=\"item.target\"\n          class=\"block px-4 py-2 md:text-center\"\n          @click=\"trackNavigation(item)\"\n          >{{ item.label }}</WebccLink\n        >\n      </li>\n    </ul>\n    <transition name=\"fly\">\n      <MobileNavigation\n        v-if=\"toggling.toggles('menu').value\"\n        :menu=\"menuItems\"\n        :links=\"props.links\"\n      />\n    </transition>\n  </nav>\n</template>\n\n<script setup lang=\"ts\">\nconst toggling = useToggler()\nconst tracking = useTracking()\n\nconst props = defineProps<{\n  menu?: MenuNavItem[]\n  links?: Links\n}>()\n\nonBeforeMount(() => {\n  toggling.register('menu')\n})\n\nconst menuItems = computed(() => {\n  return (props.menu || []).map(({ label, link }, index) => {\n    const [href, hash] = link.href.split('#')\n\n    return { id: index.toString(), hash, label, href, target: '' }\n  })\n})\n\nconst trackNavigation = (item: HeaderMenuItem) => {\n  tracking.handlers?.header.sitenavigationClick(\n    item.id as\n      | 'partner'\n      | 'lso'\n      | 'topcountries'\n      | 'inspirations'\n      | 'homeowner',\n  )\n  tracking.handlers?.homepage.headerSiteNavigation(item)\n}\n</script>\n\n<style>\n/* Menu transition */\n.fly-enter-active {\n  animation: fly 0.3s ease-in-out;\n}\n\n.fly-leave-active {\n  animation: fly 0.3s ease-in-out reverse;\n}\n\n@keyframes fly {\n  0% {\n    transform: translateY(100vh);\n  }\n  100% {\n    transform: translateY(0);\n  }\n}\n</style>\n","<template>\n  <HeaderSelect\n    :selected-value=\"confData.language\"\n    :all-options=\"confData.sites\"\n    :has-key=\"true\"\n    object-key=\"language\"\n    :to-upper-case=\"true\"\n    @on-change=\"changeLanguage\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nconst { buildRedirectUrl } = useURLs()\nconst confData = useConfdata()\nconst tracking = useTracking()\n\nfunction changeLanguage(lang: string) {\n  const localeUrl = confData.getLocalizedUrl(lang)\n  if (!localeUrl) return\n\n  tracking.handlers?.header.languageSwitch(lang)\n  tracking.handlers?.homepage.headerSelectLanguage(lang)\n  navigateTo(buildRedirectUrl(localeUrl).toString(), { external: true })\n}\n</script>\n","<template>\n  <div\n    class=\"w-full h-fit border border-bgr-200 shadow-lg rounded flex px-4 py-3 sm:p-6 items-center gap-4\"\n  >\n    <div\n      class=\"shrink-0 size-12 sm:size-14 md:size-16 xl:size-20 rounded-full overflow-hidden bg-thm flex items-center justify-center\"\n    >\n      <img\n        v-if=\"profileImg\"\n        :src=\"'data:image/png;base64,' + profileImg\"\n        :alt=\"title\"\n      />\n      <span v-else-if=\"initials\" class=\"text-lg lg:text-2xl text-bgr\">{{\n        initials\n      }}</span>\n      <WebccIcon v-else name=\"account/user\" class=\"size-8 text-bgr\" />\n    </div>\n    <div class=\"overflow-hidden\">\n      <span class=\"text-base sm:text-xl md:text-2xl\">{{\n        name || $t(`${trPrefix}name`)\n      }}</span>\n      <div class=\"flex items-center text-txt-weak\">\n        <WebccIcon\n          name=\"account/mail\"\n          class=\"size-4 text-txt-weak shrink-0 mr-2 hidden sm:flex\"\n        />\n        <p class=\"text-sm sm:text-base truncate\" :title=\"email\">{{ email }}</p>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.site.Header.user.'\nconst { t } = useI18n()\n\nconst { email, name, initials, profileImg } = storeToRefs(useUser())\n\nconst title = computed(() => name.value || t(`${trPrefix}name`))\n</script>\n\n<style scoped></style>\n","import * as Mo from \"vue\";\nimport { inject as ll, provide as sl, shallowRef as Mn, watchEffect as ge, readonly as Ka, customRef as rl, ref as I, computed as $, watch as te, nextTick as oe, getCurrentScope as fr, onScopeDispose as il, effectScope as ul, unref as o, onBeforeUnmount as Vn, onMounted as le, isRef as Xe, reactive as Ma, getCurrentInstance as vt, onUpdated as dl, Fragment as we, defineComponent as x, toRefs as ae, renderSlot as _, onBeforeUpdate as vr, toHandlerKey as mr, camelize as cl, toRef as hr, onUnmounted as Be, mergeProps as k, h as pt, Comment as pl, cloneVNode as Fn, openBlock as b, createBlock as S, withCtx as y, createVNode as q, createCommentVNode as ce, withKeys as ie, Teleport as jt, normalizeProps as H, guardReactiveProps as j, normalizeStyle as ke, withModifiers as ue, createElementBlock as ve, withDirectives as Ha, vShow as Ln, createElementVNode as Ue, toDisplayString as De, createTextVNode as me, mergeDefaults as fl, watchPostEffect as yr, renderList as va, markRaw as gr, watchSyncEffect as br, resolveDynamicComponent as Ge, toHandlers as Nn, triggerRef as Vo, useSlots as Wa, onBeforeMount as vl, vModelSelect as Cr, toRaw as wr } from \"vue\";\nimport { CalendarDateTime as _r, CalendarDate as xr, DateFormatter as lt, today as Sr, getLocalTimeZone as zn, isEqualMonth as Fo, isSameDay as Te, isEqualDay as Ee, isToday as ml, isSameMonth as hl } from \"@internationalized/date\";\nimport { k as ra, t as Fe, j as yl, d as _t, n as Sa, m as Le, l as Pt, o as Er, x as gl, u as Pr, r as Dr } from \"./calendar-ChFCRr4K.js\";\nimport { useFloating as $r, autoUpdate as Br, offset as Ir, flip as Lo, shift as Tr, limitShift as Rr, size as Ar, arrow as Or, hide as kr } from \"@floating-ui/vue\";\nimport { NumberFormatter as Mr, NumberParser as Vr } from \"@internationalized/number\";\nfunction Q(a, t) {\n  const e = typeof a == \"string\" && !t ? `${a}Context` : t, n = Symbol(e);\n  return [(r) => {\n    const i = ll(n, r);\n    if (i || i === null)\n      return i;\n    throw new Error(\n      `Injection \\`${n.toString()}\\` not found. Component must be used within ${Array.isArray(a) ? `one of the following components: ${a.join(\n        \", \"\n      )}` : `\\`${a}\\``}`\n    );\n  }, (r) => (sl(n, r), r)];\n}\nfunction Kt(a, t, e) {\n  const n = e.originalEvent.target, l = new CustomEvent(a, {\n    bubbles: !1,\n    cancelable: !0,\n    detail: e\n  });\n  t && n.addEventListener(a, t, { once: !0 }), n.dispatchEvent(l);\n}\nfunction Ht(a, t = Number.NEGATIVE_INFINITY, e = Number.POSITIVE_INFINITY) {\n  return Math.min(Math.max(a, t), e);\n}\nfunction Ea(a, t) {\n  let e = a;\n  const n = t.toString(), l = n.indexOf(\".\"), s = l >= 0 ? n.length - l : 0;\n  if (s > 0) {\n    const r = 10 ** s;\n    e = Math.round(e * r) / r;\n  }\n  return e;\n}\nfunction Fr(a, t, e, n) {\n  t = Number(t), e = Number(e);\n  const l = (a - (Number.isNaN(t) ? 0 : t)) % n;\n  let s = Ea(Math.abs(l) * 2 >= n ? a + Math.sign(l) * (n - Math.abs(l)) : a - l, n);\n  return Number.isNaN(t) ? !Number.isNaN(e) && s > e && (s = Math.floor(Ea(e / n, n)) * n) : s < t ? s = t : !Number.isNaN(e) && s > e && (s = t + Math.floor(Ea((e - t) / n, n)) * n), s = Ea(s, n), s;\n}\nfunction Lr(a) {\n  return a && a.__esModule && Object.prototype.hasOwnProperty.call(a, \"default\") ? a.default : a;\n}\nvar Nr = function a(t, e) {\n  if (t === e) return !0;\n  if (t && e && typeof t == \"object\" && typeof e == \"object\") {\n    if (t.constructor !== e.constructor) return !1;\n    var n, l, s;\n    if (Array.isArray(t)) {\n      if (n = t.length, n != e.length) return !1;\n      for (l = n; l-- !== 0; )\n        if (!a(t[l], e[l])) return !1;\n      return !0;\n    }\n    if (t.constructor === RegExp) return t.source === e.source && t.flags === e.flags;\n    if (t.valueOf !== Object.prototype.valueOf) return t.valueOf() === e.valueOf();\n    if (t.toString !== Object.prototype.toString) return t.toString() === e.toString();\n    if (s = Object.keys(t), n = s.length, n !== Object.keys(e).length) return !1;\n    for (l = n; l-- !== 0; )\n      if (!Object.prototype.hasOwnProperty.call(e, s[l])) return !1;\n    for (l = n; l-- !== 0; ) {\n      var r = s[l];\n      if (!a(t[r], e[r])) return !1;\n    }\n    return !0;\n  }\n  return t !== t && e !== e;\n};\nconst Ye = /* @__PURE__ */ Lr(Nr);\nfunction zr(a, t) {\n  if (a.length !== t.length)\n    return !1;\n  for (let e = 0; e < a.length; e++)\n    if (a[e] !== t[e])\n      return !1;\n  return !0;\n}\nfunction Et(a, t, e) {\n  const n = a.findIndex((i) => Ye(i, t)), l = a.findIndex((i) => Ye(i, e));\n  if (n === -1 || l === -1)\n    return [];\n  const [s, r] = [n, l].sort((i, u) => i - u);\n  return a.slice(s, r + 1);\n}\nconst ma = typeof document < \"u\";\nfunction zt(a) {\n  return a == null;\n}\nfunction Ut(a) {\n  const { defaultValue: t, defaultPlaceholder: e, granularity: n = \"day\" } = a;\n  if (Array.isArray(t) && t.length)\n    return t.at(-1).copy();\n  if (t && !Array.isArray(t))\n    return t.copy();\n  if (e)\n    return e.copy();\n  const l = /* @__PURE__ */ new Date(), s = l.getFullYear(), r = l.getMonth() + 1, i = l.getDate();\n  return [\"hour\", \"minute\", \"second\"].includes(n ?? \"day\") ? new _r(s, r, i, 0, 0, 0) : new xr(s, r, i);\n}\nconst Kr = [\n  \"ach\",\n  \"af\",\n  \"am\",\n  \"an\",\n  \"ar\",\n  \"ast\",\n  \"az\",\n  \"be\",\n  \"bg\",\n  \"bn\",\n  \"br\",\n  \"bs\",\n  \"ca\",\n  \"cak\",\n  \"ckb\",\n  \"cs\",\n  \"cy\",\n  \"da\",\n  \"de\",\n  \"dsb\",\n  \"el\",\n  \"en\",\n  \"eo\",\n  \"es\",\n  \"et\",\n  \"eu\",\n  \"fa\",\n  \"ff\",\n  \"fi\",\n  \"fr\",\n  \"fy\",\n  \"ga\",\n  \"gd\",\n  \"gl\",\n  \"he\",\n  \"hr\",\n  \"hsb\",\n  \"hu\",\n  \"ia\",\n  \"id\",\n  \"it\",\n  \"ja\",\n  \"ka\",\n  \"kk\",\n  \"kn\",\n  \"ko\",\n  \"lb\",\n  \"lo\",\n  \"lt\",\n  \"lv\",\n  \"meh\",\n  \"ml\",\n  \"ms\",\n  \"nl\",\n  \"nn\",\n  \"no\",\n  \"oc\",\n  \"pl\",\n  \"pt\",\n  \"rm\",\n  \"ro\",\n  \"ru\",\n  \"sc\",\n  \"scn\",\n  \"sk\",\n  \"sl\",\n  \"sr\",\n  \"sv\",\n  \"szl\",\n  \"tg\",\n  \"th\",\n  \"tr\",\n  \"uk\",\n  \"zh-CN\",\n  \"zh-TW\"\n], Hr = [\"year\", \"month\", \"day\"], hn = {\n  ach: { year: \"mwaka\", month: \"dwe\", day: \"nino\" },\n  af: { year: \"jjjj\", month: \"mm\", day: \"dd\" },\n  am: { year: \"ዓዓዓዓ\", month: \"ሚሜ\", day: \"ቀቀ\" },\n  an: { year: \"aaaa\", month: \"mm\", day: \"dd\" },\n  ar: { year: \"سنة\", month: \"شهر\", day: \"يوم\" },\n  ast: { year: \"aaaa\", month: \"mm\", day: \"dd\" },\n  az: { year: \"iiii\", month: \"aa\", day: \"gg\" },\n  be: { year: \"гггг\", month: \"мм\", day: \"дд\" },\n  bg: { year: \"гггг\", month: \"мм\", day: \"дд\" },\n  bn: { year: \"yyyy\", month: \"মিমি\", day: \"dd\" },\n  br: { year: \"bbbb\", month: \"mm\", day: \"dd\" },\n  bs: { year: \"gggg\", month: \"mm\", day: \"dd\" },\n  ca: { year: \"aaaa\", month: \"mm\", day: \"dd\" },\n  cak: { year: \"jjjj\", month: \"ii\", day: \"q'q'\" },\n  ckb: { year: \"ساڵ\", month: \"مانگ\", day: \"ڕۆژ\" },\n  cs: { year: \"rrrr\", month: \"mm\", day: \"dd\" },\n  cy: { year: \"bbbb\", month: \"mm\", day: \"dd\" },\n  da: { year: \"åååå\", month: \"mm\", day: \"dd\" },\n  de: { year: \"jjjj\", month: \"mm\", day: \"tt\" },\n  dsb: { year: \"llll\", month: \"mm\", day: \"źź\" },\n  el: { year: \"εεεε\", month: \"μμ\", day: \"ηη\" },\n  en: { year: \"yyyy\", month: \"mm\", day: \"dd\" },\n  eo: { year: \"jjjj\", month: \"mm\", day: \"tt\" },\n  es: { year: \"aaaa\", month: \"mm\", day: \"dd\" },\n  et: { year: \"aaaa\", month: \"kk\", day: \"pp\" },\n  eu: { year: \"uuuu\", month: \"hh\", day: \"ee\" },\n  fa: { year: \"سال\", month: \"ماه\", day: \"روز\" },\n  ff: { year: \"hhhh\", month: \"ll\", day: \"ññ\" },\n  fi: { year: \"vvvv\", month: \"kk\", day: \"pp\" },\n  fr: { year: \"aaaa\", month: \"mm\", day: \"jj\" },\n  fy: { year: \"jjjj\", month: \"mm\", day: \"dd\" },\n  ga: { year: \"bbbb\", month: \"mm\", day: \"ll\" },\n  gd: { year: \"bbbb\", month: \"mm\", day: \"ll\" },\n  gl: { year: \"aaaa\", month: \"mm\", day: \"dd\" },\n  he: { year: \"שנה\", month: \"חודש\", day: \"יום\" },\n  hr: { year: \"gggg\", month: \"mm\", day: \"dd\" },\n  hsb: { year: \"llll\", month: \"mm\", day: \"dd\" },\n  hu: { year: \"éééé\", month: \"hh\", day: \"nn\" },\n  ia: { year: \"aaaa\", month: \"mm\", day: \"dd\" },\n  id: { year: \"tttt\", month: \"bb\", day: \"hh\" },\n  it: { year: \"aaaa\", month: \"mm\", day: \"gg\" },\n  ja: { year: \" 年 \", month: \"月\", day: \"日\" },\n  ka: { year: \"წწწწ\", month: \"თთ\", day: \"რრ\" },\n  kk: { year: \"жжжж\", month: \"аа\", day: \"кк\" },\n  kn: { year: \"ವವವವ\", month: \"ಮಿಮೀ\", day: \"ದಿದಿ\" },\n  ko: { year: \"연도\", month: \"월\", day: \"일\" },\n  lb: { year: \"jjjj\", month: \"mm\", day: \"dd\" },\n  lo: { year: \"ປປປປ\", month: \"ດດ\", day: \"ວວ\" },\n  lt: { year: \"mmmm\", month: \"mm\", day: \"dd\" },\n  lv: { year: \"gggg\", month: \"mm\", day: \"dd\" },\n  meh: { year: \"aaaa\", month: \"mm\", day: \"dd\" },\n  ml: { year: \"വർഷം\", month: \"മാസം\", day: \"തീയതി\" },\n  ms: { year: \"tttt\", month: \"mm\", day: \"hh\" },\n  nl: { year: \"jjjj\", month: \"mm\", day: \"dd\" },\n  nn: { year: \"åååå\", month: \"mm\", day: \"dd\" },\n  no: { year: \"åååå\", month: \"mm\", day: \"dd\" },\n  oc: { year: \"aaaa\", month: \"mm\", day: \"jj\" },\n  pl: { year: \"rrrr\", month: \"mm\", day: \"dd\" },\n  pt: { year: \"aaaa\", month: \"mm\", day: \"dd\" },\n  rm: { year: \"oooo\", month: \"mm\", day: \"dd\" },\n  ro: { year: \"aaaa\", month: \"ll\", day: \"zz\" },\n  ru: { year: \"гггг\", month: \"мм\", day: \"дд\" },\n  sc: { year: \"aaaa\", month: \"mm\", day: \"dd\" },\n  scn: { year: \"aaaa\", month: \"mm\", day: \"jj\" },\n  sk: { year: \"rrrr\", month: \"mm\", day: \"dd\" },\n  sl: { year: \"llll\", month: \"mm\", day: \"dd\" },\n  sr: { year: \"гггг\", month: \"мм\", day: \"дд\" },\n  sv: { year: \"åååå\", month: \"mm\", day: \"dd\" },\n  szl: { year: \"rrrr\", month: \"mm\", day: \"dd\" },\n  tg: { year: \"сссс\", month: \"мм\", day: \"рр\" },\n  th: { year: \"ปปปป\", month: \"ดด\", day: \"วว\" },\n  tr: { year: \"yyyy\", month: \"aa\", day: \"gg\" },\n  uk: { year: \"рррр\", month: \"мм\", day: \"дд\" },\n  \"zh-CN\": { year: \"年\", month: \"月\", day: \"日\" },\n  \"zh-TW\": { year: \"年\", month: \"月\", day: \"日\" }\n};\nfunction Wr(a) {\n  if (No(a))\n    return hn[a];\n  {\n    const t = qr(a);\n    return No(t) ? hn[t] : hn.en;\n  }\n}\nfunction yn(a, t, e) {\n  return jr(a) ? Wr(e)[a] : Gr(a) ? t : Ur(a) ? \"––\" : \"\";\n}\nfunction No(a) {\n  return Kr.includes(a);\n}\nfunction jr(a) {\n  return Hr.includes(a);\n}\nfunction Ur(a) {\n  return a === \"hour\" || a === \"minute\" || a === \"second\";\n}\nfunction Gr(a) {\n  return a === \"era\" || a === \"dayPeriod\";\n}\nfunction qr(a) {\n  return Intl.Locale ? new Intl.Locale(a).language : a.split(\"-\")[0];\n}\nconst Kn = [\"day\", \"month\", \"year\"], bl = [\"hour\", \"minute\", \"second\", \"dayPeriod\"], Cl = [...Kn, ...bl];\nfunction Yr(a) {\n  return Kn.includes(a);\n}\nfunction wl(a) {\n  return Cl.includes(a);\n}\nfunction Xr(a, t) {\n  const e = {\n    year: \"numeric\",\n    month: \"2-digit\",\n    day: \"2-digit\",\n    hour: \"2-digit\",\n    minute: \"2-digit\",\n    second: \"2-digit\",\n    timeZoneName: \"short\",\n    hourCycle: t === 24 ? \"h24\" : void 0,\n    hour12: t === 24 ? !1 : void 0\n  };\n  return a === \"day\" && (delete e.second, delete e.hour, delete e.minute, delete e.timeZoneName), a === \"hour\" && (delete e.minute, delete e.second), a === \"minute\" && delete e.second, e;\n}\nfunction _l(a) {\n  const t = a.querySelector(\"[data-selected]\");\n  if (t)\n    return t.focus();\n  const e = a.querySelector(\"[data-today]\");\n  if (e)\n    return e.focus();\n  const n = a.querySelector(\"[data-radix-vue-calendar-day]\");\n  if (n)\n    return n.focus();\n}\nfunction Zr(a, t) {\n  var e;\n  const n = Mn();\n  return ge(() => {\n    n.value = a();\n  }, {\n    ...t,\n    flush: (e = void 0) != null ? e : \"sync\"\n  }), Ka(n);\n}\nfunction Jr(a, t) {\n  let e, n, l;\n  const s = I(!0), r = () => {\n    s.value = !0, l();\n  };\n  te(a, r, { flush: \"sync\" });\n  const i = typeof t == \"function\" ? t : t.get, u = typeof t == \"function\" ? void 0 : t.set, d = rl((c, p) => (n = c, l = p, {\n    get() {\n      return s.value && (e = i(), s.value = !1), n(), e;\n    },\n    set(f) {\n      u == null || u(f);\n    }\n  }));\n  return Object.isExtensible(d) && (d.trigger = r), d;\n}\nfunction mt(a) {\n  return fr() ? (il(a), !0) : !1;\n}\nfunction ia() {\n  const a = /* @__PURE__ */ new Set(), t = (l) => {\n    a.delete(l);\n  };\n  return {\n    on: (l) => {\n      a.add(l);\n      const s = () => t(l);\n      return mt(s), {\n        off: s\n      };\n    },\n    off: t,\n    trigger: (...l) => Promise.all(Array.from(a).map((s) => s(...l)))\n  };\n}\nfunction Qr(a) {\n  let t = !1, e;\n  const n = ul(!0);\n  return (...l) => (t || (e = n.run(() => a(...l)), t = !0), e);\n}\nfunction xl(a) {\n  let t = 0, e, n;\n  const l = () => {\n    t -= 1, n && t <= 0 && (n.stop(), e = void 0, n = void 0);\n  };\n  return (...s) => (t += 1, e || (n = ul(!0), e = n.run(() => a(...s))), mt(l), e);\n}\nfunction Ke(a) {\n  return typeof a == \"function\" ? a() : o(a);\n}\nfunction ei(a) {\n  if (!Xe(a))\n    return Ma(a);\n  const t = new Proxy({}, {\n    get(e, n, l) {\n      return o(Reflect.get(a.value, n, l));\n    },\n    set(e, n, l) {\n      return Xe(a.value[n]) && !Xe(l) ? a.value[n].value = l : a.value[n] = l, !0;\n    },\n    deleteProperty(e, n) {\n      return Reflect.deleteProperty(a.value, n);\n    },\n    has(e, n) {\n      return Reflect.has(a.value, n);\n    },\n    ownKeys() {\n      return Object.keys(a.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: !0,\n        configurable: !0\n      };\n    }\n  });\n  return Ma(t);\n}\nfunction Sl(a) {\n  return ei($(a));\n}\nconst qe = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst ti = (a) => typeof a < \"u\", ai = (a) => a != null, ni = Object.prototype.toString, oi = (a) => ni.call(a) === \"[object Object]\", Va = () => {\n}, zo = /* @__PURE__ */ li();\nfunction li() {\n  var a, t;\n  return qe && ((a = window == null ? void 0 : window.navigator) == null ? void 0 : a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((t = window == null ? void 0 : window.navigator) == null ? void 0 : t.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\nfunction El(a, t) {\n  function e(...n) {\n    return new Promise((l, s) => {\n      Promise.resolve(a(() => t.apply(this, n), { fn: t, thisArg: this, args: n })).then(l).catch(s);\n    });\n  }\n  return e;\n}\nconst Pl = (a) => a();\nfunction si(a, t = {}) {\n  let e, n, l = Va;\n  const s = (i) => {\n    clearTimeout(i), l(), l = Va;\n  };\n  return (i) => {\n    const u = Ke(a), d = Ke(t.maxWait);\n    return e && s(e), u <= 0 || d !== void 0 && d <= 0 ? (n && (s(n), n = null), Promise.resolve(i())) : new Promise((c, p) => {\n      l = t.rejectOnCancel ? p : c, d && !n && (n = setTimeout(() => {\n        e && s(e), n = null, c(i());\n      }, d)), e = setTimeout(() => {\n        n && s(n), n = null, c(i());\n      }, u);\n    });\n  };\n}\nfunction ri(a = Pl) {\n  const t = I(!0);\n  function e() {\n    t.value = !1;\n  }\n  function n() {\n    t.value = !0;\n  }\n  const l = (...s) => {\n    t.value && a(...s);\n  };\n  return { isActive: Ka(t), pause: e, resume: n, eventFilter: l };\n}\nfunction Dl(a) {\n  return vt();\n}\nfunction $t(a, t = 1e4) {\n  return rl((e, n) => {\n    let l = Ke(a), s;\n    const r = () => setTimeout(() => {\n      l = Ke(a), n();\n    }, Ke(t));\n    return mt(() => {\n      clearTimeout(s);\n    }), {\n      get() {\n        return e(), l;\n      },\n      set(i) {\n        l = i, n(), clearTimeout(s), s = r();\n      }\n    };\n  });\n}\nfunction Hn(a, t = 200, e = {}) {\n  return El(\n    si(t, e),\n    a\n  );\n}\nfunction ii(a, t, e = {}) {\n  const {\n    eventFilter: n = Pl,\n    ...l\n  } = e;\n  return te(\n    a,\n    El(\n      n,\n      t\n    ),\n    l\n  );\n}\nfunction Ko(a, t, e = {}) {\n  const {\n    eventFilter: n,\n    ...l\n  } = e, { eventFilter: s, pause: r, resume: i, isActive: u } = ri(n);\n  return { stop: ii(\n    a,\n    t,\n    {\n      ...l,\n      eventFilter: s\n    }\n  ), pause: r, resume: i, isActive: u };\n}\nfunction ui(a, t, ...[e]) {\n  const {\n    flush: n = \"sync\",\n    deep: l = !1,\n    immediate: s = !0,\n    direction: r = \"both\",\n    transform: i = {}\n  } = e || {}, u = [], d = \"ltr\" in i && i.ltr || ((f) => f), c = \"rtl\" in i && i.rtl || ((f) => f);\n  return (r === \"both\" || r === \"ltr\") && u.push(Ko(\n    a,\n    (f) => {\n      u.forEach((v) => v.pause()), t.value = d(f), u.forEach((v) => v.resume());\n    },\n    { flush: n, deep: l, immediate: s }\n  )), (r === \"both\" || r === \"rtl\") && u.push(Ko(\n    t,\n    (f) => {\n      u.forEach((v) => v.pause()), a.value = c(f), u.forEach((v) => v.resume());\n    },\n    { flush: n, deep: l, immediate: s }\n  )), () => {\n    u.forEach((f) => f.stop());\n  };\n}\nfunction di(a, t) {\n  Dl() && Vn(a, t);\n}\nfunction ci(a, t = !0, e) {\n  Dl() ? le(a, e) : t ? a() : oe(a);\n}\nfunction Wn(a, t, e = {}) {\n  const {\n    immediate: n = !0\n  } = e, l = I(!1);\n  let s = null;\n  function r() {\n    s && (clearTimeout(s), s = null);\n  }\n  function i() {\n    l.value = !1, r();\n  }\n  function u(...d) {\n    r(), l.value = !0, s = setTimeout(() => {\n      l.value = !1, s = null, a(...d);\n    }, Ke(t));\n  }\n  return n && (l.value = !0, qe && u()), mt(i), {\n    isPending: Ka(l),\n    start: u,\n    stop: i\n  };\n}\nfunction pi(a = 1e3, t = {}) {\n  const {\n    controls: e = !1,\n    callback: n\n  } = t, l = Wn(\n    n ?? Va,\n    a,\n    t\n  ), s = $(() => !l.isPending.value);\n  return e ? {\n    ready: s,\n    ...l\n  } : s;\n}\nfunction fi(a, t, e) {\n  const n = te(a, (...l) => (oe(() => n()), t(...l)), e);\n  return n;\n}\nfunction $e(a) {\n  var t;\n  const e = Ke(a);\n  return (t = e == null ? void 0 : e.$el) != null ? t : e;\n}\nconst Gt = qe ? window : void 0;\nfunction Ne(...a) {\n  let t, e, n, l;\n  if (typeof a[0] == \"string\" || Array.isArray(a[0]) ? ([e, n, l] = a, t = Gt) : [t, e, n, l] = a, !t)\n    return Va;\n  Array.isArray(e) || (e = [e]), Array.isArray(n) || (n = [n]);\n  const s = [], r = () => {\n    s.forEach((c) => c()), s.length = 0;\n  }, i = (c, p, f, v) => (c.addEventListener(p, f, v), () => c.removeEventListener(p, f, v)), u = te(\n    () => [$e(t), Ke(l)],\n    ([c, p]) => {\n      if (r(), !c)\n        return;\n      const f = oi(p) ? { ...p } : p;\n      s.push(\n        ...e.flatMap((v) => n.map((g) => i(c, v, g, f)))\n      );\n    },\n    { immediate: !0, flush: \"post\" }\n  ), d = () => {\n    u(), r();\n  };\n  return mt(d), d;\n}\nfunction vi(a) {\n  return typeof a == \"function\" ? a : typeof a == \"string\" ? (t) => t.key === a : Array.isArray(a) ? (t) => a.includes(t.key) : () => !0;\n}\nfunction jn(...a) {\n  let t, e, n = {};\n  a.length === 3 ? (t = a[0], e = a[1], n = a[2]) : a.length === 2 ? typeof a[1] == \"object\" ? (t = !0, e = a[0], n = a[1]) : (t = a[0], e = a[1]) : (t = !0, e = a[0]);\n  const {\n    target: l = Gt,\n    eventName: s = \"keydown\",\n    passive: r = !1,\n    dedupe: i = !1\n  } = n, u = vi(t);\n  return Ne(l, s, (c) => {\n    c.repeat && Ke(i) || u(c) && e(c);\n  }, r);\n}\nfunction ja() {\n  const a = I(!1), t = vt();\n  return t && le(() => {\n    a.value = !0;\n  }, t), a;\n}\nfunction $l(a) {\n  const t = ja();\n  return $(() => (t.value, !!a()));\n}\nfunction Bl(a, t, e = {}) {\n  const { window: n = Gt, ...l } = e;\n  let s;\n  const r = $l(() => n && \"MutationObserver\" in n), i = () => {\n    s && (s.disconnect(), s = void 0);\n  }, u = $(() => {\n    const f = Ke(a), v = (Array.isArray(f) ? f : [f]).map($e).filter(ai);\n    return new Set(v);\n  }), d = te(\n    () => u.value,\n    (f) => {\n      i(), r.value && f.size && (s = new MutationObserver(t), f.forEach((v) => s.observe(v, l)));\n    },\n    { immediate: !0, flush: \"post\" }\n  ), c = () => s == null ? void 0 : s.takeRecords(), p = () => {\n    i(), d();\n  };\n  return mt(p), {\n    isSupported: r,\n    stop: p,\n    takeRecords: c\n  };\n}\nfunction mi(a = {}) {\n  var t;\n  const {\n    window: e = Gt,\n    deep: n = !0,\n    triggerOnRemoval: l = !1\n  } = a, s = (t = a.document) != null ? t : e == null ? void 0 : e.document, r = () => {\n    var d;\n    let c = s == null ? void 0 : s.activeElement;\n    if (n)\n      for (; c != null && c.shadowRoot; )\n        c = (d = c == null ? void 0 : c.shadowRoot) == null ? void 0 : d.activeElement;\n    return c;\n  }, i = I(), u = () => {\n    i.value = r();\n  };\n  return e && (Ne(e, \"blur\", (d) => {\n    d.relatedTarget === null && u();\n  }, !0), Ne(e, \"focus\", u, !0)), l && Bl(s, (d) => {\n    d.filter((c) => c.removedNodes.length).map((c) => Array.from(c.removedNodes)).flat().forEach((c) => {\n      c === i.value && u();\n    });\n  }, {\n    childList: !0,\n    subtree: !0\n  }), u(), i;\n}\nfunction Il(a, t = {}) {\n  const {\n    immediate: e = !0,\n    fpsLimit: n = void 0,\n    window: l = Gt\n  } = t, s = I(!1), r = n ? 1e3 / n : null;\n  let i = 0, u = null;\n  function d(f) {\n    if (!s.value || !l)\n      return;\n    i || (i = f);\n    const v = f - i;\n    if (r && v < r) {\n      u = l.requestAnimationFrame(d);\n      return;\n    }\n    i = f, a({ delta: v, timestamp: f }), u = l.requestAnimationFrame(d);\n  }\n  function c() {\n    !s.value && l && (s.value = !0, i = 0, u = l.requestAnimationFrame(d));\n  }\n  function p() {\n    s.value = !1, u != null && l && (l.cancelAnimationFrame(u), u = null);\n  }\n  return e && c(), mt(p), {\n    isActive: Ka(s),\n    pause: p,\n    resume: c\n  };\n}\nfunction hi(a) {\n  return JSON.parse(JSON.stringify(a));\n}\nfunction yi(a) {\n  const t = vt(), e = Jr(\n    () => null,\n    () => t.proxy.$el\n  );\n  return dl(e.trigger), le(e.trigger), e;\n}\nfunction Ze(a, t, e = {}) {\n  const { window: n = Gt, ...l } = e;\n  let s;\n  const r = $l(() => n && \"ResizeObserver\" in n), i = () => {\n    s && (s.disconnect(), s = void 0);\n  }, u = $(() => Array.isArray(a) ? a.map((p) => $e(p)) : [$e(a)]), d = te(\n    u,\n    (p) => {\n      if (i(), r.value && n) {\n        s = new ResizeObserver(t);\n        for (const f of p)\n          f && s.observe(f, l);\n      }\n    },\n    { immediate: !0, flush: \"post\" }\n  ), c = () => {\n    i(), d();\n  };\n  return mt(c), {\n    isSupported: r,\n    stop: c\n  };\n}\nfunction gi(a, t = {}) {\n  const e = mi(t), n = $(() => $e(a));\n  return { focused: $(() => n.value && e.value ? n.value.contains(e.value) : !1) };\n}\nfunction Tl(a = yi()) {\n  const t = Mn(), e = () => {\n    const n = $e(a);\n    n && (t.value = n.parentElement);\n  };\n  return ci(e), te(() => Ke(a), e), t;\n}\nfunction ne(a, t, e, n = {}) {\n  var l, s, r;\n  const {\n    clone: i = !1,\n    passive: u = !1,\n    eventName: d,\n    deep: c = !1,\n    defaultValue: p,\n    shouldEmit: f\n  } = n, v = vt(), g = e || (v == null ? void 0 : v.emit) || ((l = v == null ? void 0 : v.$emit) == null ? void 0 : l.bind(v)) || ((r = (s = v == null ? void 0 : v.proxy) == null ? void 0 : s.$emit) == null ? void 0 : r.bind(v == null ? void 0 : v.proxy));\n  let m = d;\n  t || (t = \"modelValue\"), m = m || `update:${t.toString()}`;\n  const w = (h) => i ? typeof i == \"function\" ? i(h) : hi(h) : h, C = () => ti(a[t]) ? w(a[t]) : p, D = (h) => {\n    f ? f(h) && g(m, h) : g(m, h);\n  };\n  if (u) {\n    const h = C(), E = I(h);\n    let P = !1;\n    return te(\n      () => a[t],\n      (B) => {\n        P || (P = !0, E.value = w(B), oe(() => P = !1));\n      }\n    ), te(\n      E,\n      (B) => {\n        !P && (B !== a[t] || c) && D(B);\n      },\n      { deep: c }\n    ), E;\n  } else\n    return $({\n      get() {\n        return C();\n      },\n      set(h) {\n        D(h);\n      }\n    });\n}\nfunction Ua(a) {\n  return a ? a.flatMap((t) => t.type === we ? Ua(t.children) : [t]) : [];\n}\nconst bi = [\"INPUT\", \"TEXTAREA\"];\nfunction Bt(a, t, e, n = {}) {\n  if (!t || n.enableIgnoredElement && bi.includes(t.nodeName))\n    return null;\n  const {\n    arrowKeyOptions: l = \"both\",\n    attributeName: s = \"[data-radix-vue-collection-item]\",\n    itemsArray: r = [],\n    loop: i = !0,\n    dir: u = \"ltr\",\n    preventScroll: d = !0,\n    focus: c = !1\n  } = n, [p, f, v, g, m, w] = [\n    a.key === \"ArrowRight\",\n    a.key === \"ArrowLeft\",\n    a.key === \"ArrowUp\",\n    a.key === \"ArrowDown\",\n    a.key === \"Home\",\n    a.key === \"End\"\n  ], C = v || g, D = p || f;\n  if (!m && !w && (!C && !D || l === \"vertical\" && D || l === \"horizontal\" && C))\n    return null;\n  const h = e ? Array.from(e.querySelectorAll(s)) : r;\n  if (!h.length)\n    return null;\n  d && a.preventDefault();\n  let E = null;\n  return D || C ? E = Rl(h, t, {\n    goForward: C ? g : u === \"ltr\" ? p : f,\n    loop: i\n  }) : m ? E = h.at(0) || null : w && (E = h.at(-1) || null), c && (E == null || E.focus()), E;\n}\nfunction Rl(a, t, e, n = a.length) {\n  if (--n === 0)\n    return null;\n  const l = a.indexOf(t), s = e.goForward ? l + 1 : l - 1;\n  if (!e.loop && (s < 0 || s >= a.length))\n    return null;\n  const r = (s + a.length) % a.length, i = a[r];\n  return i ? i.hasAttribute(\"disabled\") && i.getAttribute(\"disabled\") !== \"false\" ? Rl(\n    a,\n    i,\n    e,\n    n\n  ) : i : null;\n}\nfunction gn(a) {\n  if (a === null || typeof a != \"object\")\n    return !1;\n  const t = Object.getPrototypeOf(a);\n  return t !== null && t !== Object.prototype && Object.getPrototypeOf(t) !== null || Symbol.iterator in a ? !1 : Symbol.toStringTag in a ? Object.prototype.toString.call(a) === \"[object Module]\" : !0;\n}\nfunction Pn(a, t, e = \".\", n) {\n  if (!gn(t))\n    return Pn(a, {}, e, n);\n  const l = Object.assign({}, t);\n  for (const s in a) {\n    if (s === \"__proto__\" || s === \"constructor\")\n      continue;\n    const r = a[s];\n    r != null && (n && n(l, s, r, e) || (Array.isArray(r) && Array.isArray(l[s]) ? l[s] = [...r, ...l[s]] : gn(r) && gn(l[s]) ? l[s] = Pn(\n      r,\n      l[s],\n      (e ? `${e}.` : \"\") + s.toString(),\n      n\n    ) : l[s] = r));\n  }\n  return l;\n}\nfunction Ci(a) {\n  return (...t) => (\n    // eslint-disable-next-line unicorn/no-array-reduce\n    t.reduce((e, n) => Pn(e, n, \"\", a), {})\n  );\n}\nconst wi = Ci(), [Ga, _i] = Q(\"ConfigProvider\"), mv = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"ConfigProvider\",\n  props: {\n    dir: { default: \"ltr\" },\n    scrollBody: { type: [Boolean, Object], default: !0 },\n    nonce: { default: void 0 },\n    useId: { type: Function, default: void 0 }\n  },\n  setup(a) {\n    const t = a, { dir: e, scrollBody: n, nonce: l } = ae(t);\n    return _i({\n      dir: e,\n      scrollBody: n,\n      nonce: l,\n      useId: t.useId\n    }), (s, r) => _(s.$slots, \"default\");\n  }\n});\nlet xi = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\", Si = (a = 21) => {\n  let t = \"\", e = a;\n  for (; e--; )\n    t += xi[Math.random() * 64 | 0];\n  return t;\n};\nconst Ei = xl(() => {\n  const a = I(/* @__PURE__ */ new Map()), t = I(), e = $(() => {\n    for (const r of a.value.values())\n      if (r)\n        return !0;\n    return !1;\n  }), n = Ga({\n    scrollBody: I(!0)\n  });\n  let l = null;\n  const s = () => {\n    document.body.style.paddingRight = \"\", document.body.style.marginRight = \"\", document.body.style.pointerEvents = \"\", document.body.style.removeProperty(\"--scrollbar-width\"), document.body.style.overflow = t.value ?? \"\", zo && (l == null || l()), t.value = void 0;\n  };\n  return te(e, (r, i) => {\n    var p;\n    if (!qe)\n      return;\n    if (!r) {\n      i && s();\n      return;\n    }\n    t.value === void 0 && (t.value = document.body.style.overflow);\n    const u = window.innerWidth - document.documentElement.clientWidth, d = { padding: u, margin: 0 }, c = (p = n.scrollBody) != null && p.value ? typeof n.scrollBody.value == \"object\" ? wi({\n      padding: n.scrollBody.value.padding === !0 ? u : n.scrollBody.value.padding,\n      margin: n.scrollBody.value.margin === !0 ? u : n.scrollBody.value.margin\n    }, d) : d : { padding: 0, margin: 0 };\n    u > 0 && (document.body.style.paddingRight = typeof c.padding == \"number\" ? `${c.padding}px` : String(c.padding), document.body.style.marginRight = typeof c.margin == \"number\" ? `${c.margin}px` : String(c.margin), document.body.style.setProperty(\"--scrollbar-width\", `${u}px`), document.body.style.overflow = \"hidden\"), zo && (l = Ne(\n      document,\n      \"touchmove\",\n      (f) => {\n        var v;\n        f.target === document.documentElement && (f.touches.length > 1 || (v = f.preventDefault) == null || v.call(f));\n      },\n      { passive: !1 }\n    )), oe(() => {\n      document.body.style.pointerEvents = \"none\", document.body.style.overflow = \"hidden\";\n    });\n  }, { immediate: !0, flush: \"sync\" }), a;\n});\nfunction ha(a) {\n  const t = Si(6), e = Ei();\n  e.value.set(t, a ?? !1);\n  const n = $({\n    get: () => e.value.get(t) ?? !1,\n    set: (l) => e.value.set(t, l)\n  });\n  return di(() => {\n    e.value.delete(t);\n  }), n;\n}\nconst Pi = \"data-radix-vue-collection-item\";\nfunction Me(a, t = Pi) {\n  const e = a ?? Symbol();\n  return { createCollection: (s) => {\n    const r = I([]);\n    function i() {\n      const u = $e(s);\n      return u ? r.value = Array.from(\n        u.querySelectorAll(`[${t}]:not([data-disabled])`)\n      ) : r.value = [];\n    }\n    return vr(() => {\n      r.value = [];\n    }), le(i), dl(i), te(() => s == null ? void 0 : s.value, i, { immediate: !0 }), sl(e, r), r;\n  }, injectCollection: () => ll(e, I([])) };\n}\nfunction Un(a) {\n  const t = I(a);\n  function e() {\n    return t.value;\n  }\n  function n(m) {\n    t.value = m;\n  }\n  function l(m, w) {\n    return new lt(t.value, w).format(m);\n  }\n  function s(m, w = !0) {\n    return ra(m) && w ? l(Fe(m), {\n      dateStyle: \"long\",\n      timeStyle: \"long\"\n    }) : l(Fe(m), {\n      dateStyle: \"long\"\n    });\n  }\n  function r(m, w = {}) {\n    return new lt(t.value, { month: \"long\", year: \"numeric\", ...w }).format(m);\n  }\n  function i(m, w = {}) {\n    return new lt(t.value, { month: \"long\", ...w }).format(m);\n  }\n  function u() {\n    const m = Sr(zn());\n    return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].map((C) => ({ label: i(Fe(m.set({ month: C }))), value: C }));\n  }\n  function d(m, w = {}) {\n    return new lt(t.value, { year: \"numeric\", ...w }).format(m);\n  }\n  function c(m, w) {\n    return yl(m) ? new lt(t.value, {\n      ...w,\n      timeZone: m.timeZone\n    }).formatToParts(Fe(m)) : new lt(t.value, w).formatToParts(Fe(m));\n  }\n  function p(m, w = \"narrow\") {\n    return new lt(t.value, { weekday: w }).format(m);\n  }\n  function f(m) {\n    var D;\n    return ((D = new lt(t.value, {\n      hour: \"numeric\",\n      minute: \"numeric\"\n    }).formatToParts(m).find((h) => h.type === \"dayPeriod\")) == null ? void 0 : D.value) === \"PM\" ? \"PM\" : \"AM\";\n  }\n  const v = {\n    year: \"numeric\",\n    month: \"numeric\",\n    day: \"numeric\",\n    hour: \"numeric\",\n    minute: \"numeric\",\n    second: \"numeric\"\n  };\n  function g(m, w, C = {}) {\n    const D = { ...v, ...C }, E = c(m, D).find((P) => P.type === w);\n    return E ? E.value : \"\";\n  }\n  return {\n    setLocale: n,\n    getLocale: e,\n    fullMonth: i,\n    fullYear: d,\n    fullMonthAndYear: r,\n    toParts: c,\n    custom: l,\n    part: g,\n    dayPeriod: f,\n    selectedDate: s,\n    dayOfWeek: p,\n    getMonths: u\n  };\n}\nfunction be(a) {\n  const t = Ga({\n    dir: I(\"ltr\")\n  });\n  return $(() => {\n    var e;\n    return (a == null ? void 0 : a.value) || ((e = t.dir) == null ? void 0 : e.value) || \"ltr\";\n  });\n}\nfunction Re(a) {\n  const t = vt(), e = t == null ? void 0 : t.type.emits, n = {};\n  return e != null && e.length || console.warn(\n    `No emitted event found. Please check component: ${t == null ? void 0 : t.type.__name}`\n  ), e == null || e.forEach((l) => {\n    n[mr(cl(l))] = (...s) => a(l, ...s);\n  }), n;\n}\nlet bn = 0;\nfunction Gn() {\n  ge((a) => {\n    if (!qe)\n      return;\n    const t = document.querySelectorAll(\"[data-radix-focus-guard]\");\n    document.body.insertAdjacentElement(\n      \"afterbegin\",\n      t[0] ?? Ho()\n    ), document.body.insertAdjacentElement(\n      \"beforeend\",\n      t[1] ?? Ho()\n    ), bn++, a(() => {\n      bn === 1 && document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((e) => e.remove()), bn--;\n    });\n  });\n}\nfunction Ho() {\n  const a = document.createElement(\"span\");\n  return a.setAttribute(\"data-radix-focus-guard\", \"\"), a.tabIndex = 0, a.style.cssText = \"outline: none; opacity: 0; position: fixed; pointer-events: none\", a;\n}\nfunction Je(a) {\n  return $(() => {\n    var t;\n    return Ke(a) ? !!((t = $e(a)) != null && t.closest(\"form\")) : !0;\n  });\n}\nfunction It(a) {\n  const t = vt(), e = Object.keys((t == null ? void 0 : t.type.props) ?? {}).reduce((l, s) => {\n    const r = (t == null ? void 0 : t.type.props[s]).default;\n    return r !== void 0 && (l[s] = r), l;\n  }, {}), n = hr(a);\n  return $(() => {\n    const l = {}, s = (t == null ? void 0 : t.vnode.props) ?? {};\n    return Object.keys(s).forEach((r) => {\n      l[cl(r)] = s[r];\n    }), Object.keys({ ...e, ...l }).reduce((r, i) => (n.value[i] !== void 0 && (r[i] = n.value[i]), r), {});\n  });\n}\nfunction xe(a, t) {\n  const e = It(a), n = t ? Re(t) : {};\n  return $(() => ({\n    ...e.value,\n    ...n\n  }));\n}\nfunction R() {\n  const a = vt(), t = I(), e = $(() => {\n    var r, i;\n    return [\"#text\", \"#comment\"].includes((r = t.value) == null ? void 0 : r.$el.nodeName) ? (i = t.value) == null ? void 0 : i.$el.nextElementSibling : $e(t);\n  }), n = Object.assign({}, a.exposed), l = {};\n  for (const r in a.props)\n    Object.defineProperty(l, r, {\n      enumerable: !0,\n      configurable: !0,\n      get: () => a.props[r]\n    });\n  if (Object.keys(n).length > 0)\n    for (const r in n)\n      Object.defineProperty(l, r, {\n        enumerable: !0,\n        configurable: !0,\n        get: () => n[r]\n      });\n  Object.defineProperty(l, \"$el\", {\n    enumerable: !0,\n    configurable: !0,\n    get: () => a.vnode.el\n  }), a.exposed = l;\n  function s(r) {\n    t.value = r, !(r instanceof Element || !r) && (Object.defineProperty(l, \"$el\", {\n      enumerable: !0,\n      configurable: !0,\n      get: () => r.$el\n    }), a.exposed = l);\n  }\n  return { forwardRef: s, currentRef: t, currentElement: e };\n}\nfunction Al(a, t) {\n  const e = $t(!1, 300), n = I(null), l = ia();\n  function s() {\n    n.value = null, e.value = !1;\n  }\n  function r(i, u) {\n    const d = i.currentTarget, c = { x: i.clientX, y: i.clientY }, p = Di(c, d.getBoundingClientRect()), f = $i(c, p), v = Bi(u.getBoundingClientRect()), g = Ti([...f, ...v]);\n    n.value = g, e.value = !0;\n  }\n  return ge((i) => {\n    if (a.value && t.value) {\n      const u = (c) => r(c, t.value), d = (c) => r(c, a.value);\n      a.value.addEventListener(\"pointerleave\", u), t.value.addEventListener(\"pointerleave\", d), i(() => {\n        var c, p;\n        (c = a.value) == null || c.removeEventListener(\"pointerleave\", u), (p = t.value) == null || p.removeEventListener(\"pointerleave\", d);\n      });\n    }\n  }), ge((i) => {\n    var u;\n    if (n.value) {\n      const d = (c) => {\n        var w, C;\n        if (!n.value)\n          return;\n        const p = c.target, f = { x: c.clientX, y: c.clientY }, v = ((w = a.value) == null ? void 0 : w.contains(p)) || ((C = t.value) == null ? void 0 : C.contains(p)), g = !Ii(f, n.value), m = p.hasAttribute(\"data-grace-area-trigger\");\n        v ? s() : (g || m) && (s(), l.trigger());\n      };\n      (u = a.value) == null || u.ownerDocument.addEventListener(\"pointermove\", d), i(() => {\n        var c;\n        return (c = a.value) == null ? void 0 : c.ownerDocument.removeEventListener(\"pointermove\", d);\n      });\n    }\n  }), {\n    isPointerInTransit: e,\n    onPointerExit: l.on\n  };\n}\nfunction Di(a, t) {\n  const e = Math.abs(t.top - a.y), n = Math.abs(t.bottom - a.y), l = Math.abs(t.right - a.x), s = Math.abs(t.left - a.x);\n  switch (Math.min(e, n, l, s)) {\n    case s:\n      return \"left\";\n    case l:\n      return \"right\";\n    case e:\n      return \"top\";\n    case n:\n      return \"bottom\";\n    default:\n      throw new Error(\"unreachable\");\n  }\n}\nfunction $i(a, t, e = 5) {\n  const n = [];\n  switch (t) {\n    case \"top\":\n      n.push(\n        { x: a.x - e, y: a.y + e },\n        { x: a.x + e, y: a.y + e }\n      );\n      break;\n    case \"bottom\":\n      n.push(\n        { x: a.x - e, y: a.y - e },\n        { x: a.x + e, y: a.y - e }\n      );\n      break;\n    case \"left\":\n      n.push(\n        { x: a.x + e, y: a.y - e },\n        { x: a.x + e, y: a.y + e }\n      );\n      break;\n    case \"right\":\n      n.push(\n        { x: a.x - e, y: a.y - e },\n        { x: a.x - e, y: a.y + e }\n      );\n      break;\n  }\n  return n;\n}\nfunction Bi(a) {\n  const { top: t, right: e, bottom: n, left: l } = a;\n  return [\n    { x: l, y: t },\n    { x: e, y: t },\n    { x: e, y: n },\n    { x: l, y: n }\n  ];\n}\nfunction Ii(a, t) {\n  const { x: e, y: n } = a;\n  let l = !1;\n  for (let s = 0, r = t.length - 1; s < t.length; r = s++) {\n    const i = t[s].x, u = t[s].y, d = t[r].x, c = t[r].y;\n    u > n != c > n && e < (d - i) * (n - u) / (c - u) + i && (l = !l);\n  }\n  return l;\n}\nfunction Ti(a) {\n  const t = a.slice();\n  return t.sort((e, n) => e.x < n.x ? -1 : e.x > n.x ? 1 : e.y < n.y ? -1 : e.y > n.y ? 1 : 0), Ri(t);\n}\nfunction Ri(a) {\n  if (a.length <= 1)\n    return a.slice();\n  const t = [];\n  for (let n = 0; n < a.length; n++) {\n    const l = a[n];\n    for (; t.length >= 2; ) {\n      const s = t[t.length - 1], r = t[t.length - 2];\n      if ((s.x - r.x) * (l.y - r.y) >= (s.y - r.y) * (l.x - r.x))\n        t.pop();\n      else break;\n    }\n    t.push(l);\n  }\n  t.pop();\n  const e = [];\n  for (let n = a.length - 1; n >= 0; n--) {\n    const l = a[n];\n    for (; e.length >= 2; ) {\n      const s = e[e.length - 1], r = e[e.length - 2];\n      if ((s.x - r.x) * (l.y - r.y) >= (s.y - r.y) * (l.x - r.x))\n        e.pop();\n      else break;\n    }\n    e.push(l);\n  }\n  return e.pop(), t.length === 1 && e.length === 1 && t[0].x === e[0].x && t[0].y === e[0].y ? t : t.concat(e);\n}\nvar Ai = function(a) {\n  if (typeof document > \"u\")\n    return null;\n  var t = Array.isArray(a) ? a[0] : a;\n  return t.ownerDocument.body;\n}, Ft = /* @__PURE__ */ new WeakMap(), Pa = /* @__PURE__ */ new WeakMap(), Da = {}, Cn = 0, Ol = function(a) {\n  return a && (a.host || Ol(a.parentNode));\n}, Oi = function(a, t) {\n  return t.map(function(e) {\n    if (a.contains(e))\n      return e;\n    var n = Ol(e);\n    return n && a.contains(n) ? n : (console.error(\"aria-hidden\", e, \"in not contained inside\", a, \". Doing nothing\"), null);\n  }).filter(function(e) {\n    return !!e;\n  });\n}, ki = function(a, t, e, n) {\n  var l = Oi(t, Array.isArray(a) ? a : [a]);\n  Da[e] || (Da[e] = /* @__PURE__ */ new WeakMap());\n  var s = Da[e], r = [], i = /* @__PURE__ */ new Set(), u = new Set(l), d = function(p) {\n    !p || i.has(p) || (i.add(p), d(p.parentNode));\n  };\n  l.forEach(d);\n  var c = function(p) {\n    !p || u.has(p) || Array.prototype.forEach.call(p.children, function(f) {\n      if (i.has(f))\n        c(f);\n      else\n        try {\n          var v = f.getAttribute(n), g = v !== null && v !== \"false\", m = (Ft.get(f) || 0) + 1, w = (s.get(f) || 0) + 1;\n          Ft.set(f, m), s.set(f, w), r.push(f), m === 1 && g && Pa.set(f, !0), w === 1 && f.setAttribute(e, \"true\"), g || f.setAttribute(n, \"true\");\n        } catch (C) {\n          console.error(\"aria-hidden: cannot operate on \", f, C);\n        }\n    });\n  };\n  return c(t), i.clear(), Cn++, function() {\n    r.forEach(function(p) {\n      var f = Ft.get(p) - 1, v = s.get(p) - 1;\n      Ft.set(p, f), s.set(p, v), f || (Pa.has(p) || p.removeAttribute(n), Pa.delete(p)), v || p.removeAttribute(e);\n    }), Cn--, Cn || (Ft = /* @__PURE__ */ new WeakMap(), Ft = /* @__PURE__ */ new WeakMap(), Pa = /* @__PURE__ */ new WeakMap(), Da = {});\n  };\n}, Mi = function(a, t, e) {\n  e === void 0 && (e = \"data-aria-hidden\");\n  var n = Array.from(Array.isArray(a) ? a : [a]), l = Ai(a);\n  return l ? (n.push.apply(n, Array.from(l.querySelectorAll(\"[aria-live]\"))), ki(n, l, e, \"aria-hidden\")) : function() {\n    return null;\n  };\n};\nfunction ya(a) {\n  let t;\n  te(() => $e(a), (e) => {\n    e ? t = Mi(e) : t && t();\n  }), Be(() => {\n    t && t();\n  });\n}\nlet Vi = 0;\nfunction he(a, t = \"radix\") {\n  if (a)\n    return a;\n  const e = Ga({ useId: void 0 });\n  return Mo.useId ? `${t}-${Mo.useId()}` : e.useId ? `${t}-${e.useId()}` : `${t}-${++Vi}`;\n}\nfunction Fi(a, t) {\n  const e = I(), n = (s, r) => {\n    if (t.multiple && Array.isArray(a.value))\n      if (t.selectionBehavior === \"replace\")\n        a.value = [s], e.value = s;\n      else {\n        const i = a.value.findIndex((u) => r(u));\n        i !== -1 ? a.value.splice(i, 1) : a.value.push(s);\n      }\n    else\n      t.selectionBehavior === \"replace\" ? a.value = { ...s } : !Array.isArray(a.value) && r(a.value) ? a.value = void 0 : a.value = { ...s };\n    return a.value;\n  };\n  function l(s, r, i, u) {\n    var f;\n    if (!(e != null && e.value) || !t.multiple || !Array.isArray(a.value))\n      return;\n    const c = (f = i().filter((v) => v.ref.dataset.disabled !== \"\").find((v) => v.ref === r)) == null ? void 0 : f.value;\n    if (!c)\n      return;\n    let p = null;\n    switch (s) {\n      case \"prev\":\n      case \"next\": {\n        p = Et(u, e.value, c);\n        break;\n      }\n      case \"first\": {\n        p = Et(u, e.value, u == null ? void 0 : u[0]);\n        break;\n      }\n      case \"last\": {\n        p = Et(u, e.value, u == null ? void 0 : u[u.length - 1]);\n        break;\n      }\n    }\n    a.value = p;\n  }\n  return {\n    firstValue: e,\n    onSelectItem: n,\n    handleMultipleReplace: l\n  };\n}\nfunction kl(a) {\n  const t = I(), e = $(() => {\n    var l;\n    return ((l = t.value) == null ? void 0 : l.width) ?? 0;\n  }), n = $(() => {\n    var l;\n    return ((l = t.value) == null ? void 0 : l.height) ?? 0;\n  });\n  return le(() => {\n    const l = $e(a);\n    if (l) {\n      t.value = { width: l.offsetWidth, height: l.offsetHeight };\n      const s = new ResizeObserver((r) => {\n        if (!Array.isArray(r) || !r.length)\n          return;\n        const i = r[0];\n        let u, d;\n        if (\"borderBoxSize\" in i) {\n          const c = i.borderBoxSize, p = Array.isArray(c) ? c[0] : c;\n          u = p.inlineSize, d = p.blockSize;\n        } else\n          u = l.offsetWidth, d = l.offsetHeight;\n        t.value = { width: u, height: d };\n      });\n      return s.observe(l, { box: \"border-box\" }), () => s.unobserve(l);\n    } else\n      t.value = void 0;\n  }), {\n    width: e,\n    height: n\n  };\n}\nfunction Ml(a, t) {\n  const e = I(a);\n  function n(s) {\n    return t[e.value][s] ?? e.value;\n  }\n  return {\n    state: e,\n    dispatch: (s) => {\n      e.value = n(s);\n    }\n  };\n}\nfunction ga(a) {\n  const t = $t(\"\", 1e3);\n  return {\n    search: t,\n    handleTypeaheadSearch: (l, s) => {\n      var f, v;\n      if (!(a != null && a.value) && !s)\n        return;\n      t.value = t.value + l;\n      const r = (a == null ? void 0 : a.value) ?? s, i = document.activeElement, u = ((v = (f = r.find((g) => g === i)) == null ? void 0 : f.textContent) == null ? void 0 : v.trim()) ?? \"\", d = r.map((g) => {\n        var m;\n        return ((m = g.textContent) == null ? void 0 : m.trim()) ?? \"\";\n      }), c = Yn(d, t.value, u), p = r.find(\n        (g) => {\n          var m;\n          return ((m = g.textContent) == null ? void 0 : m.trim()) === c;\n        }\n      );\n      return p && p.focus(), p;\n    },\n    resetTypeahead: () => {\n      t.value = \"\";\n    }\n  };\n}\nfunction qn(a, t) {\n  return a.map((e, n) => a[(t + n) % a.length]);\n}\nfunction Yn(a, t, e) {\n  const l = t.length > 1 && Array.from(t).every((d) => d === t[0]) ? t[0] : t, s = e ? a.indexOf(e) : -1;\n  let r = qn(a, Math.max(s, 0));\n  l.length === 1 && (r = r.filter((d) => d !== e));\n  const u = r.find(\n    (d) => d.toLowerCase().startsWith(l.toLowerCase())\n  );\n  return u !== e ? u : void 0;\n}\nfunction hv(a, t) {\n  return {\n    inheritAttrs: !1,\n    name: `${a.__name ?? \"\"}Wrapper`,\n    setup(e, n) {\n      return () => {\n        const l = typeof (t == null ? void 0 : t.props) == \"function\" ? t == null ? void 0 : t.props(n.attrs) : t == null ? void 0 : t.props, { forwardRef: s } = R(), r = k(l, n.attrs);\n        return pt(a, { ...r, ref: s }, n.slots);\n      };\n    }\n  };\n}\nfunction Qe() {\n  return {\n    ALT: \"Alt\",\n    ARROW_DOWN: \"ArrowDown\",\n    ARROW_LEFT: \"ArrowLeft\",\n    ARROW_RIGHT: \"ArrowRight\",\n    ARROW_UP: \"ArrowUp\",\n    BACKSPACE: \"Backspace\",\n    CAPS_LOCK: \"CapsLock\",\n    CONTROL: \"Control\",\n    DELETE: \"Delete\",\n    END: \"End\",\n    ENTER: \"Enter\",\n    ESCAPE: \"Escape\",\n    F1: \"F1\",\n    F10: \"F10\",\n    F11: \"F11\",\n    F12: \"F12\",\n    F2: \"F2\",\n    F3: \"F3\",\n    F4: \"F4\",\n    F5: \"F5\",\n    F6: \"F6\",\n    F7: \"F7\",\n    F8: \"F8\",\n    F9: \"F9\",\n    HOME: \"Home\",\n    META: \"Meta\",\n    PAGE_DOWN: \"PageDown\",\n    PAGE_UP: \"PageUp\",\n    SHIFT: \"Shift\",\n    SPACE: \" \",\n    TAB: \"Tab\",\n    CTRL: \"Control\",\n    ASTERISK: \"*\",\n    SPACE_CODE: \"Space\"\n  };\n}\nconst Xn = x({\n  name: \"PrimitiveSlot\",\n  inheritAttrs: !1,\n  setup(a, { attrs: t, slots: e }) {\n    return () => {\n      var u, d;\n      if (!e.default)\n        return null;\n      const n = Ua(e.default()), l = n.findIndex((c) => c.type !== pl);\n      if (l === -1)\n        return n;\n      const s = n[l];\n      (u = s.props) == null || delete u.ref;\n      const r = s.props ? k(t, s.props) : t;\n      t.class && ((d = s.props) != null && d.class) && delete s.props.class;\n      const i = Fn(s, r);\n      for (const c in r)\n        c.startsWith(\"on\") && (i.props || (i.props = {}), i.props[c] = r[c]);\n      return n.length === 1 ? i : (n[l] = i, n);\n    };\n  }\n}), O = x({\n  name: \"Primitive\",\n  inheritAttrs: !1,\n  props: {\n    asChild: {\n      type: Boolean,\n      default: !1\n    },\n    as: {\n      type: [String, Object],\n      default: \"div\"\n    }\n  },\n  setup(a, { attrs: t, slots: e }) {\n    const n = a.asChild ? \"template\" : a.as;\n    return typeof n == \"string\" && [\"area\", \"img\", \"input\"].includes(n) ? () => pt(n, t) : n !== \"template\" ? () => pt(a.as, t, { default: e.default }) : () => pt(Xn, t, { default: e.default });\n  }\n});\nfunction Ae() {\n  const a = I(), t = $(() => {\n    var e, n;\n    return [\"#text\", \"#comment\"].includes((e = a.value) == null ? void 0 : e.$el.nodeName) ? (n = a.value) == null ? void 0 : n.$el.nextElementSibling : $e(a);\n  });\n  return {\n    primitiveElement: a,\n    currentElement: t\n  };\n}\nconst [Vl, Li] = Q(\"CollapsibleRoot\"), Ni = /* @__PURE__ */ x({\n  __name: \"CollapsibleRoot\",\n  props: {\n    defaultOpen: { type: Boolean, default: !1 },\n    open: { type: Boolean, default: void 0 },\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:open\"],\n  setup(a, { expose: t, emit: e }) {\n    const n = a, s = ne(n, \"open\", e, {\n      defaultValue: n.defaultOpen,\n      passive: n.open === void 0\n    }), r = ne(n, \"disabled\");\n    return Li({\n      contentId: \"\",\n      disabled: r,\n      open: s,\n      onOpenToggle: () => {\n        s.value = !s.value;\n      }\n    }), t({ open: s }), R(), (i, u) => (b(), S(o(O), {\n      as: i.as,\n      \"as-child\": n.asChild,\n      \"data-state\": n.open ? \"open\" : \"closed\",\n      \"data-disabled\": n.disabled ? \"\" : void 0\n    }, {\n      default: y(() => [\n        _(i.$slots, \"default\", { open: o(s) })\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"data-state\", \"data-disabled\"]));\n  }\n}), zi = /* @__PURE__ */ x({\n  __name: \"CollapsibleTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = Vl();\n    return (n, l) => {\n      var s, r;\n      return b(), S(o(O), {\n        type: n.as === \"button\" ? \"button\" : void 0,\n        as: n.as,\n        \"as-child\": t.asChild,\n        \"aria-controls\": o(e).contentId,\n        \"aria-expanded\": o(e).open.value,\n        \"data-state\": o(e).open.value ? \"open\" : \"closed\",\n        \"data-disabled\": (s = o(e).disabled) != null && s.value ? \"\" : void 0,\n        disabled: (r = o(e).disabled) == null ? void 0 : r.value,\n        onClick: o(e).onOpenToggle\n      }, {\n        default: y(() => [\n          _(n.$slots, \"default\")\n        ]),\n        _: 3\n      }, 8, [\"type\", \"as\", \"as-child\", \"aria-controls\", \"aria-expanded\", \"data-state\", \"data-disabled\", \"disabled\", \"onClick\"]);\n    };\n  }\n});\nfunction Ki(a, t) {\n  const e = I({}), n = I(\"none\"), l = a.value ? \"mounted\" : \"unmounted\", { state: s, dispatch: r } = Ml(l, {\n    mounted: {\n      UNMOUNT: \"unmounted\",\n      ANIMATION_OUT: \"unmountSuspended\"\n    },\n    unmountSuspended: {\n      MOUNT: \"mounted\",\n      ANIMATION_END: \"unmounted\"\n    },\n    unmounted: {\n      MOUNT: \"mounted\"\n    }\n  }), i = (v) => {\n    var g;\n    if (qe) {\n      const m = new CustomEvent(v, { bubbles: !1, cancelable: !1 });\n      (g = t.value) == null || g.dispatchEvent(m);\n    }\n  };\n  te(\n    a,\n    async (v, g) => {\n      var w;\n      const m = g !== v;\n      if (await oe(), m) {\n        const C = n.value, D = $a(t.value);\n        v ? (r(\"MOUNT\"), i(\"enter\"), D === \"none\" && i(\"after-enter\")) : D === \"none\" || ((w = e.value) == null ? void 0 : w.display) === \"none\" ? (r(\"UNMOUNT\"), i(\"leave\"), i(\"after-leave\")) : g && C !== D ? (r(\"ANIMATION_OUT\"), i(\"leave\")) : (r(\"UNMOUNT\"), i(\"after-leave\"));\n      }\n    },\n    { immediate: !0 }\n  );\n  const u = (v) => {\n    const g = $a(t.value), m = g.includes(\n      v.animationName\n    ), w = s.value === \"mounted\" ? \"enter\" : \"leave\";\n    v.target === t.value && m && (i(`after-${w}`), r(\"ANIMATION_END\")), v.target === t.value && g === \"none\" && r(\"ANIMATION_END\");\n  }, d = (v) => {\n    v.target === t.value && (n.value = $a(t.value));\n  }, c = te(\n    t,\n    (v, g) => {\n      v ? (e.value = getComputedStyle(v), v.addEventListener(\"animationstart\", d), v.addEventListener(\"animationcancel\", u), v.addEventListener(\"animationend\", u)) : (r(\"ANIMATION_END\"), g == null || g.removeEventListener(\"animationstart\", d), g == null || g.removeEventListener(\"animationcancel\", u), g == null || g.removeEventListener(\"animationend\", u));\n    },\n    { immediate: !0 }\n  ), p = te(s, () => {\n    const v = $a(t.value);\n    n.value = s.value === \"mounted\" ? v : \"none\";\n  });\n  return Be(() => {\n    c(), p();\n  }), {\n    isPresent: $(\n      () => [\"mounted\", \"unmountSuspended\"].includes(s.value)\n    )\n  };\n}\nfunction $a(a) {\n  return a && getComputedStyle(a).animationName || \"none\";\n}\nconst Pe = x({\n  name: \"Presence\",\n  props: {\n    present: {\n      type: Boolean,\n      required: !0\n    },\n    forceMount: {\n      type: Boolean\n    }\n  },\n  slots: {},\n  setup(a, { slots: t, expose: e }) {\n    var d;\n    const { present: n, forceMount: l } = ae(a), s = I(), { isPresent: r } = Ki(n, s);\n    e({ present: r });\n    let i = t.default({ present: r });\n    i = Ua(i || []);\n    const u = vt();\n    if (i && (i == null ? void 0 : i.length) > 1) {\n      const c = (d = u == null ? void 0 : u.parent) != null && d.type.name ? `<${u.parent.type.name} />` : \"component\";\n      throw new Error(\n        [\n          `Detected an invalid children for \\`${c}\\` for  \\`Presence\\` component.`,\n          \"\",\n          \"Note: Presence works similarly to `v-if` directly, but it waits for animation/transition to finished before unmounting. So it expect only one direct child of valid VNode type.\",\n          \"You can apply a few solutions:\",\n          [\n            \"Provide a single child element so that `presence` directive attach correctly.\",\n            \"Ensure the first child is an actual element instead of a raw text node or comment node.\"\n          ].map((p) => `  - ${p}`).join(`\n`)\n        ].join(`\n`)\n      );\n    }\n    return () => l.value || n.value || r.value ? pt(t.default({ present: r })[0], {\n      ref: (c) => {\n        const p = $e(c);\n        return typeof (p == null ? void 0 : p.hasAttribute) > \"u\" || (p != null && p.hasAttribute(\"data-radix-popper-content-wrapper\") ? s.value = p.firstElementChild : s.value = p), p;\n      }\n    }) : null;\n  }\n}), Hi = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"CollapsibleContent\",\n  props: {\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = Vl();\n    e.contentId || (e.contentId = he(void 0, \"radix-vue-collapsible-content\"));\n    const n = I(), { forwardRef: l, currentElement: s } = R(), r = I(0), i = I(0), u = $(() => e.open.value), d = I(u.value), c = I();\n    return te(\n      () => {\n        var p;\n        return [u.value, (p = n.value) == null ? void 0 : p.present];\n      },\n      async () => {\n        await oe();\n        const p = s.value;\n        if (!p)\n          return;\n        c.value = c.value || {\n          transitionDuration: p.style.transitionDuration,\n          animationName: p.style.animationName\n        }, p.style.transitionDuration = \"0s\", p.style.animationName = \"none\";\n        const f = p.getBoundingClientRect();\n        i.value = f.height, r.value = f.width, d.value || (p.style.transitionDuration = c.value.transitionDuration, p.style.animationName = c.value.animationName);\n      },\n      {\n        immediate: !0\n      }\n    ), le(() => {\n      requestAnimationFrame(() => {\n        d.value = !1;\n      });\n    }), (p, f) => (b(), S(o(Pe), {\n      ref_key: \"presentRef\",\n      ref: n,\n      present: p.forceMount || o(e).open.value,\n      \"force-mount\": !0\n    }, {\n      default: y(() => {\n        var v, g;\n        return [\n          q(o(O), k(p.$attrs, {\n            id: o(e).contentId,\n            ref: o(l),\n            \"as-child\": t.asChild,\n            as: p.as,\n            \"data-state\": o(e).open.value ? \"open\" : \"closed\",\n            \"data-disabled\": (v = o(e).disabled) != null && v.value ? \"\" : void 0,\n            hidden: !((g = n.value) != null && g.present),\n            style: {\n              \"--radix-collapsible-content-height\": `${i.value}px`,\n              \"--radix-collapsible-content-width\": `${r.value}px`\n            }\n          }), {\n            default: y(() => {\n              var m;\n              return [\n                (m = n.value) != null && m.present ? _(p.$slots, \"default\", { key: 0 }) : ce(\"\", !0)\n              ];\n            }),\n            _: 3\n          }, 16, [\"id\", \"as-child\", \"as\", \"data-state\", \"data-disabled\", \"hidden\", \"style\"])\n        ];\n      }),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n});\nfunction Fl({ type: a, defaultValue: t, modelValue: e }) {\n  const n = e || t;\n  if (zt(a) && zt(e) && zt(t))\n    throw new Error(\"Either the `type` or the `value` or `default-value` prop must be defined.\");\n  if (e !== void 0 && t !== void 0 && typeof e != typeof t)\n    throw new Error(\n      `Invalid prop \\`value\\` of value \\`${e}\\` supplied, should be the same type as the \\`defaultValue\\` prop, which is \\`${t}\\`. The \\`value\\` prop must be:\n  ${a === \"single\" ? \"- a string\" : a === \"multiple\" ? \"- an array of strings\" : `- a string\n- an array of strings`}\n  - \\`undefined\\``\n    );\n  const l = e !== void 0 || t !== void 0;\n  if (a && l) {\n    const s = Array.isArray(e) || Array.isArray(t), r = e !== void 0 ? \"modelValue\" : \"defaultValue\", i = r === \"modelValue\" ? typeof e : typeof t;\n    if (a === \"single\" && s)\n      return console.error(`Invalid prop \\`${r}\\` of type ${i} supplied with type \\`single\\`. The \\`modelValue\\` prop must be a string or \\`undefined\\`.\n    You can remove the \\`type\\` prop to let the component infer the type from the ${r} prop.`), \"multiple\";\n    if (a === \"multiple\" && !s)\n      return console.error(`Invalid prop \\`${r}\\` of type ${i} supplied with type \\`multiple\\`. The \\`modelValue\\` prop must be an array of strings or \\`undefined\\`.\n    You can remove the \\`type\\` prop to let the component infer the type from the ${r} prop.`), \"single\";\n  }\n  return l ? Array.isArray(n) ? \"multiple\" : \"single\" : a;\n}\nfunction Wi({ type: a, defaultValue: t, modelValue: e }) {\n  return a || Fl({ type: a, defaultValue: t, modelValue: e });\n}\nfunction ji({ type: a, defaultValue: t }) {\n  return t !== void 0 ? t : a === \"single\" ? void 0 : [];\n}\nfunction Ll(a, t) {\n  const e = I(Wi(a)), n = ne(a, \"modelValue\", t, {\n    defaultValue: ji(a),\n    passive: a.modelValue === void 0,\n    deep: !0\n  });\n  te(\n    () => [a.type, a.modelValue, a.defaultValue],\n    () => {\n      const r = Fl(a);\n      e.value !== r && (e.value = r);\n    },\n    { immediate: !0 }\n  );\n  function l(r) {\n    if (e.value === \"single\")\n      n.value = r === n.value ? void 0 : r;\n    else {\n      const i = [...n.value || []];\n      if (i.includes(r)) {\n        const u = i.findIndex((d) => d === r);\n        i.splice(u, 1);\n      } else\n        i.push(r);\n      n.value = i;\n    }\n  }\n  const s = $(() => e.value === \"single\");\n  return {\n    modelValue: n,\n    type: e,\n    changeModelValue: l,\n    isSingle: s\n  };\n}\nconst [qa, Ui] = Q(\"AccordionRoot\"), yv = /* @__PURE__ */ x({\n  __name: \"AccordionRoot\",\n  props: {\n    collapsible: { type: Boolean, default: !1 },\n    disabled: { type: Boolean, default: !1 },\n    dir: {},\n    orientation: { default: \"vertical\" },\n    asChild: { type: Boolean },\n    as: {},\n    type: {},\n    modelValue: {},\n    defaultValue: {}\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { dir: l, disabled: s } = ae(e), r = be(l), { modelValue: i, changeModelValue: u, isSingle: d } = Ll(e, n), { forwardRef: c, currentElement: p } = R();\n    return Ui({\n      disabled: s,\n      direction: r,\n      orientation: e.orientation,\n      parentElement: p,\n      isSingle: d,\n      collapsible: e.collapsible,\n      modelValue: i,\n      changeModelValue: u\n    }), (f, v) => (b(), S(o(O), {\n      ref: o(c),\n      \"as-child\": f.asChild,\n      as: f.as\n    }, {\n      default: y(() => [\n        _(f.$slots, \"default\", { modelValue: o(i) })\n      ]),\n      _: 3\n    }, 8, [\"as-child\", \"as\"]));\n  }\n}), [Zn, Gi] = Q(\"AccordionItem\"), gv = /* @__PURE__ */ x({\n  __name: \"AccordionItem\",\n  props: {\n    disabled: { type: Boolean },\n    value: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a, { expose: t }) {\n    const e = a, n = qa(), l = $(\n      () => n.isSingle.value ? e.value === n.modelValue.value : Array.isArray(n.modelValue.value) && n.modelValue.value.includes(e.value)\n    ), s = $(() => n.disabled.value || e.disabled || n.isSingle.value && l.value && !n.collapsible), r = $(() => s.value ? \"\" : void 0), i = $(\n      () => l.value ? \"open\" : \"closed\"\n      /* Closed */\n    );\n    t({ open: l, dataDisabled: r });\n    const { currentRef: u, currentElement: d } = R();\n    Gi({\n      open: l,\n      dataState: i,\n      disabled: s,\n      dataDisabled: r,\n      triggerId: \"\",\n      currentRef: u,\n      currentElement: d,\n      value: $(() => e.value)\n    });\n    function c(p) {\n      Bt(\n        p,\n        d.value,\n        n.parentElement.value,\n        {\n          arrowKeyOptions: n.orientation,\n          dir: n.direction.value,\n          focus: !0\n        }\n      );\n    }\n    return (p, f) => (b(), S(o(Ni), {\n      \"data-orientation\": o(n).orientation,\n      \"data-disabled\": r.value,\n      \"data-state\": i.value,\n      disabled: s.value,\n      open: l.value,\n      as: e.as,\n      \"as-child\": e.asChild,\n      onKeydown: ie(c, [\"up\", \"down\", \"left\", \"right\", \"home\", \"end\"])\n    }, {\n      default: y(() => [\n        _(p.$slots, \"default\", { open: l.value })\n      ]),\n      _: 3\n    }, 8, [\"data-orientation\", \"data-disabled\", \"data-state\", \"disabled\", \"open\", \"as\", \"as-child\"]));\n  }\n}), bv = /* @__PURE__ */ x({\n  __name: \"AccordionContent\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = qa(), n = Zn();\n    return R(), (l, s) => (b(), S(o(Hi), {\n      role: \"region\",\n      hidden: !o(n).open.value,\n      \"as-child\": t.asChild,\n      \"aria-labelledby\": o(n).triggerId,\n      \"data-state\": o(n).dataState.value,\n      \"data-disabled\": o(n).dataDisabled.value,\n      \"data-orientation\": o(e).orientation,\n      style: { \"--radix-accordion-content-width\": \"var(--radix-collapsible-content-width)\", \"--radix-accordion-content-height\": \"var(--radix-collapsible-content-height)\" }\n    }, {\n      default: y(() => [\n        _(l.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"hidden\", \"as-child\", \"aria-labelledby\", \"data-state\", \"data-disabled\", \"data-orientation\"]));\n  }\n}), Cv = /* @__PURE__ */ x({\n  __name: \"AccordionHeader\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"h3\" }\n  },\n  setup(a) {\n    const t = a, e = qa(), n = Zn();\n    return R(), (l, s) => (b(), S(o(O), {\n      as: t.as,\n      \"as-child\": t.asChild,\n      \"data-orientation\": o(e).orientation,\n      \"data-state\": o(n).dataState.value,\n      \"data-disabled\": o(n).dataDisabled.value\n    }, {\n      default: y(() => [\n        _(l.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"data-orientation\", \"data-state\", \"data-disabled\"]));\n  }\n}), wv = /* @__PURE__ */ x({\n  __name: \"AccordionTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = qa(), n = Zn();\n    n.triggerId || (n.triggerId = he(void 0, \"radix-vue-accordion-trigger\"));\n    function l() {\n      n.disabled.value || e.changeModelValue(n.value.value);\n    }\n    return (s, r) => (b(), S(o(zi), {\n      id: o(n).triggerId,\n      ref: o(n).currentRef,\n      \"data-radix-vue-collection-item\": \"\",\n      as: t.as,\n      \"as-child\": t.asChild,\n      \"aria-disabled\": o(n).disabled.value || void 0,\n      \"aria-expanded\": o(n).open.value || !1,\n      \"data-disabled\": o(n).dataDisabled.value,\n      \"data-orientation\": o(e).orientation,\n      \"data-state\": o(n).dataState.value,\n      disabled: o(n).disabled.value,\n      onClick: l\n    }, {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"id\", \"as\", \"as-child\", \"aria-disabled\", \"aria-expanded\", \"data-disabled\", \"data-orientation\", \"data-state\", \"disabled\"]));\n  }\n}), [et, qi] = Q(\"DialogRoot\"), Yi = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"DialogRoot\",\n  props: {\n    open: { type: Boolean, default: void 0 },\n    defaultOpen: { type: Boolean, default: !1 },\n    modal: { type: Boolean, default: !0 }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, l = ne(e, \"open\", t, {\n      defaultValue: e.defaultOpen,\n      passive: e.open === void 0\n    }), s = I(), r = I(), { modal: i } = ae(e);\n    return qi({\n      open: l,\n      modal: i,\n      openModal: () => {\n        l.value = !0;\n      },\n      onOpenChange: (u) => {\n        l.value = u;\n      },\n      onOpenToggle: () => {\n        l.value = !l.value;\n      },\n      contentId: \"\",\n      titleId: \"\",\n      descriptionId: \"\",\n      triggerElement: s,\n      contentElement: r\n    }), (u, d) => _(u.$slots, \"default\", { open: o(l) });\n  }\n}), Xi = /* @__PURE__ */ x({\n  __name: \"DialogTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = et(), { forwardRef: n, currentElement: l } = R();\n    return e.contentId || (e.contentId = he(void 0, \"radix-vue-dialog-content\")), le(() => {\n      e.triggerElement.value = l.value;\n    }), (s, r) => (b(), S(o(O), k(t, {\n      ref: o(n),\n      type: s.as === \"button\" ? \"button\" : void 0,\n      \"aria-haspopup\": \"dialog\",\n      \"aria-expanded\": o(e).open.value || !1,\n      \"aria-controls\": o(e).open.value ? o(e).contentId : void 0,\n      \"data-state\": o(e).open.value ? \"open\" : \"closed\",\n      onClick: o(e).onOpenToggle\n    }), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"type\", \"aria-expanded\", \"aria-controls\", \"data-state\", \"onClick\"]));\n  }\n}), ht = /* @__PURE__ */ x({\n  __name: \"Teleport\",\n  props: {\n    to: { default: \"body\" },\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = ja();\n    return (e, n) => o(t) || e.forceMount ? (b(), S(jt, {\n      key: 0,\n      to: e.to,\n      disabled: e.disabled\n    }, [\n      _(e.$slots, \"default\")\n    ], 8, [\"to\", \"disabled\"])) : ce(\"\", !0);\n  }\n}), _v = /* @__PURE__ */ x({\n  __name: \"DialogPortal\",\n  props: {\n    to: {},\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(ht), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Zi = \"dismissableLayer.pointerDownOutside\", Ji = \"dismissableLayer.focusOutside\";\nfunction Nl(a, t) {\n  const e = t.closest(\n    \"[data-dismissable-layer]\"\n  ), n = a.dataset.dismissableLayer === \"\" ? a : a.querySelector(\n    \"[data-dismissable-layer]\"\n  ), l = Array.from(\n    a.ownerDocument.querySelectorAll(\"[data-dismissable-layer]\")\n  );\n  return !!(e && n === e || l.indexOf(n) < l.indexOf(e));\n}\nfunction zl(a, t) {\n  var s;\n  const e = ((s = t == null ? void 0 : t.value) == null ? void 0 : s.ownerDocument) ?? (globalThis == null ? void 0 : globalThis.document), n = I(!1), l = I(() => {\n  });\n  return ge((r) => {\n    if (!qe)\n      return;\n    const i = async (d) => {\n      const c = d.target;\n      if (t != null && t.value) {\n        if (Nl(t.value, c)) {\n          n.value = !1;\n          return;\n        }\n        if (d.target && !n.value) {\n          let p = function() {\n            Kt(\n              Zi,\n              a,\n              f\n            );\n          };\n          const f = { originalEvent: d };\n          d.pointerType === \"touch\" ? (e.removeEventListener(\"click\", l.value), l.value = p, e.addEventListener(\"click\", l.value, {\n            once: !0\n          })) : p();\n        } else\n          e.removeEventListener(\"click\", l.value);\n        n.value = !1;\n      }\n    }, u = window.setTimeout(() => {\n      e.addEventListener(\"pointerdown\", i);\n    }, 0);\n    r(() => {\n      window.clearTimeout(u), e.removeEventListener(\"pointerdown\", i), e.removeEventListener(\"click\", l.value);\n    });\n  }), {\n    onPointerDownCapture: () => n.value = !0\n  };\n}\nfunction Kl(a, t) {\n  var l;\n  const e = ((l = t == null ? void 0 : t.value) == null ? void 0 : l.ownerDocument) ?? (globalThis == null ? void 0 : globalThis.document), n = I(!1);\n  return ge((s) => {\n    if (!qe)\n      return;\n    const r = async (i) => {\n      t != null && t.value && (await oe(), !(!t.value || Nl(t.value, i.target)) && i.target && !n.value && Kt(\n        Ji,\n        a,\n        { originalEvent: i }\n      ));\n    };\n    e.addEventListener(\"focusin\", r), s(() => e.removeEventListener(\"focusin\", r));\n  }), {\n    onFocusCapture: () => n.value = !0,\n    onBlurCapture: () => n.value = !1\n  };\n}\nconst je = Ma({\n  layersRoot: /* @__PURE__ */ new Set(),\n  layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n  branches: /* @__PURE__ */ new Set()\n}), yt = /* @__PURE__ */ x({\n  __name: \"DismissableLayer\",\n  props: {\n    disableOutsidePointerEvents: { type: Boolean, default: !1 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"dismiss\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { forwardRef: l, currentElement: s } = R(), r = $(\n      () => {\n        var g;\n        return ((g = s.value) == null ? void 0 : g.ownerDocument) ?? globalThis.document;\n      }\n    ), i = $(() => je.layersRoot), u = $(() => s.value ? Array.from(i.value).indexOf(s.value) : -1), d = $(() => je.layersWithOutsidePointerEventsDisabled.size > 0), c = $(() => {\n      const g = Array.from(i.value), [m] = [...je.layersWithOutsidePointerEventsDisabled].slice(-1), w = g.indexOf(m);\n      return u.value >= w;\n    }), p = zl(async (g) => {\n      const m = [...je.branches].some(\n        (w) => w == null ? void 0 : w.contains(g.target)\n      );\n      !c.value || m || (n(\"pointerDownOutside\", g), n(\"interactOutside\", g), await oe(), g.defaultPrevented || n(\"dismiss\"));\n    }, s), f = Kl((g) => {\n      [...je.branches].some(\n        (w) => w == null ? void 0 : w.contains(g.target)\n      ) || (n(\"focusOutside\", g), n(\"interactOutside\", g), g.defaultPrevented || n(\"dismiss\"));\n    }, s);\n    jn(\"Escape\", (g) => {\n      u.value === i.value.size - 1 && (n(\"escapeKeyDown\", g), g.defaultPrevented || n(\"dismiss\"));\n    });\n    let v;\n    return ge((g) => {\n      s.value && (e.disableOutsidePointerEvents && (je.layersWithOutsidePointerEventsDisabled.size === 0 && (v = r.value.body.style.pointerEvents, r.value.body.style.pointerEvents = \"none\"), je.layersWithOutsidePointerEventsDisabled.add(s.value)), i.value.add(s.value), g(() => {\n        e.disableOutsidePointerEvents && je.layersWithOutsidePointerEventsDisabled.size === 1 && (r.value.body.style.pointerEvents = v);\n      }));\n    }), ge((g) => {\n      g(() => {\n        s.value && (i.value.delete(s.value), je.layersWithOutsidePointerEventsDisabled.delete(s.value));\n      });\n    }), (g, m) => (b(), S(o(O), {\n      ref: o(l),\n      \"as-child\": g.asChild,\n      as: g.as,\n      \"data-dismissable-layer\": \"\",\n      style: ke({\n        pointerEvents: d.value ? c.value ? \"auto\" : \"none\" : void 0\n      }),\n      onFocusCapture: o(f).onFocusCapture,\n      onBlurCapture: o(f).onBlurCapture,\n      onPointerdownCapture: o(p).onPointerDownCapture\n    }, {\n      default: y(() => [\n        _(g.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as-child\", \"as\", \"style\", \"onFocusCapture\", \"onBlurCapture\", \"onPointerdownCapture\"]));\n  }\n}), Qi = /* @__PURE__ */ x({\n  __name: \"DismissableLayerBranch\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { forwardRef: e, currentElement: n } = R();\n    return le(() => {\n      je.branches.add(n.value);\n    }), Be(() => {\n      je.branches.delete(n.value);\n    }), (l, s) => (b(), S(o(O), k({ ref: o(e) }, t), {\n      default: y(() => [\n        _(l.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), wn = \"focusScope.autoFocusOnMount\", _n = \"focusScope.autoFocusOnUnmount\", Wo = { bubbles: !1, cancelable: !0 };\nfunction Oa(a, { select: t = !1 } = {}) {\n  const e = document.activeElement;\n  for (const n of a)\n    if (dt(n, { select: t }), document.activeElement !== e)\n      return !0;\n}\nfunction eu(a) {\n  const t = Jn(a), e = jo(t, a), n = jo(t.reverse(), a);\n  return [e, n];\n}\nfunction Jn(a) {\n  const t = [], e = document.createTreeWalker(a, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (n) => {\n      const l = n.tagName === \"INPUT\" && n.type === \"hidden\";\n      return n.disabled || n.hidden || l ? NodeFilter.FILTER_SKIP : n.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n    }\n  });\n  for (; e.nextNode(); ) t.push(e.currentNode);\n  return t;\n}\nfunction jo(a, t) {\n  for (const e of a)\n    if (!tu(e, { upTo: t }))\n      return e;\n}\nfunction tu(a, { upTo: t }) {\n  if (getComputedStyle(a).visibility === \"hidden\")\n    return !0;\n  for (; a; ) {\n    if (t !== void 0 && a === t)\n      return !1;\n    if (getComputedStyle(a).display === \"none\")\n      return !0;\n    a = a.parentElement;\n  }\n  return !1;\n}\nfunction au(a) {\n  return a instanceof HTMLInputElement && \"select\" in a;\n}\nfunction dt(a, { select: t = !1 } = {}) {\n  if (a && a.focus) {\n    const e = document.activeElement;\n    a.focus({ preventScroll: !0 }), a !== e && au(a) && t && a.select();\n  }\n}\nconst nu = Qr(() => I([]));\nfunction ou() {\n  const a = nu();\n  return {\n    add(t) {\n      const e = a.value[0];\n      t !== e && (e == null || e.pause()), a.value = Uo(a.value, t), a.value.unshift(t);\n    },\n    remove(t) {\n      var e;\n      a.value = Uo(a.value, t), (e = a.value[0]) == null || e.resume();\n    }\n  };\n}\nfunction Uo(a, t) {\n  const e = [...a], n = e.indexOf(t);\n  return n !== -1 && e.splice(n, 1), e;\n}\nfunction lu(a) {\n  return a.filter((t) => t.tagName !== \"A\");\n}\nconst Ya = /* @__PURE__ */ x({\n  __name: \"FocusScope\",\n  props: {\n    loop: { type: Boolean, default: !1 },\n    trapped: { type: Boolean, default: !1 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"mountAutoFocus\", \"unmountAutoFocus\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { currentRef: l, currentElement: s } = R(), r = I(null), i = ou(), u = Ma({\n      paused: !1,\n      pause() {\n        this.paused = !0;\n      },\n      resume() {\n        this.paused = !1;\n      }\n    });\n    ge((c) => {\n      if (!qe)\n        return;\n      const p = s.value;\n      if (!e.trapped)\n        return;\n      function f(w) {\n        if (u.paused || !p)\n          return;\n        const C = w.target;\n        p.contains(C) ? r.value = C : dt(r.value, { select: !0 });\n      }\n      function v(w) {\n        if (u.paused || !p)\n          return;\n        const C = w.relatedTarget;\n        C !== null && (p.contains(C) || dt(r.value, { select: !0 }));\n      }\n      function g(w) {\n        p.contains(r.value) || dt(p);\n      }\n      document.addEventListener(\"focusin\", f), document.addEventListener(\"focusout\", v);\n      const m = new MutationObserver(g);\n      p && m.observe(p, { childList: !0, subtree: !0 }), c(() => {\n        document.removeEventListener(\"focusin\", f), document.removeEventListener(\"focusout\", v), m.disconnect();\n      });\n    }), ge(async (c) => {\n      const p = s.value;\n      if (await oe(), !p)\n        return;\n      i.add(u);\n      const f = document.activeElement;\n      if (!p.contains(f)) {\n        const g = new CustomEvent(wn, Wo);\n        p.addEventListener(wn, (m) => n(\"mountAutoFocus\", m)), p.dispatchEvent(g), g.defaultPrevented || (Oa(lu(Jn(p)), {\n          select: !0\n        }), document.activeElement === f && dt(p));\n      }\n      c(() => {\n        p.removeEventListener(wn, (w) => n(\"mountAutoFocus\", w));\n        const g = new CustomEvent(_n, Wo), m = (w) => {\n          n(\"unmountAutoFocus\", w);\n        };\n        p.addEventListener(_n, m), p.dispatchEvent(g), setTimeout(() => {\n          g.defaultPrevented || dt(f ?? document.body, { select: !0 }), p.removeEventListener(_n, m), i.remove(u);\n        }, 0);\n      });\n    });\n    function d(c) {\n      if (!e.loop && !e.trapped || u.paused)\n        return;\n      const p = c.key === \"Tab\" && !c.altKey && !c.ctrlKey && !c.metaKey, f = document.activeElement;\n      if (p && f) {\n        const v = c.currentTarget, [g, m] = eu(v);\n        g && m ? !c.shiftKey && f === m ? (c.preventDefault(), e.loop && dt(g, { select: !0 })) : c.shiftKey && f === g && (c.preventDefault(), e.loop && dt(m, { select: !0 })) : f === v && c.preventDefault();\n      }\n    }\n    return (c, p) => (b(), S(o(O), {\n      ref_key: \"currentRef\",\n      ref: l,\n      tabindex: \"-1\",\n      \"as-child\": c.asChild,\n      as: c.as,\n      onKeydown: d\n    }, {\n      default: y(() => [\n        _(c.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as-child\", \"as\"]));\n  }\n}), su = \"menu.itemSelect\", Dn = [\"Enter\", \" \"], ru = [\"ArrowDown\", \"PageUp\", \"Home\"], Hl = [\"ArrowUp\", \"PageDown\", \"End\"], iu = [...ru, ...Hl], uu = {\n  ltr: [...Dn, \"ArrowRight\"],\n  rtl: [...Dn, \"ArrowLeft\"]\n}, du = {\n  ltr: [\"ArrowLeft\"],\n  rtl: [\"ArrowRight\"]\n};\nfunction Qn(a) {\n  return a ? \"open\" : \"closed\";\n}\nfunction Fa(a) {\n  return a === \"indeterminate\";\n}\nfunction eo(a) {\n  return Fa(a) ? \"indeterminate\" : a ? \"checked\" : \"unchecked\";\n}\nfunction $n(a) {\n  const t = document.activeElement;\n  for (const e of a)\n    if (e === t || (e.focus(), document.activeElement !== t))\n      return;\n}\nfunction cu(a, t) {\n  const { x: e, y: n } = a;\n  let l = !1;\n  for (let s = 0, r = t.length - 1; s < t.length; r = s++) {\n    const i = t[s].x, u = t[s].y, d = t[r].x, c = t[r].y;\n    u > n != c > n && e < (d - i) * (n - u) / (c - u) + i && (l = !l);\n  }\n  return l;\n}\nfunction pu(a, t) {\n  if (!t)\n    return !1;\n  const e = { x: a.clientX, y: a.clientY };\n  return cu(e, t);\n}\nfunction ua(a) {\n  return a.pointerType === \"mouse\";\n}\nconst fu = \"DialogTitle\", vu = \"DialogContent\";\nfunction mu({\n  titleName: a = fu,\n  contentName: t = vu,\n  componentLink: e = \"dialog.html#title\",\n  titleId: n,\n  descriptionId: l,\n  contentElement: s\n}) {\n  const r = `Warning: \\`${t}\\` requires a \\`${a}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${a}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://www.radix-vue.com/components/${e}`, i = `Warning: Missing \\`Description\\` or \\`aria-describedby=\"undefined\"\\` for ${t}.`;\n  le(() => {\n    var c;\n    document.getElementById(n) || console.warn(r);\n    const d = (c = s.value) == null ? void 0 : c.getAttribute(\"aria-describedby\");\n    l && d && (document.getElementById(l) || console.warn(i));\n  });\n}\nconst Wl = /* @__PURE__ */ x({\n  __name: \"DialogContentImpl\",\n  props: {\n    forceMount: { type: Boolean },\n    trapFocus: { type: Boolean },\n    disableOutsidePointerEvents: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = et(), { forwardRef: s, currentElement: r } = R();\n    return l.titleId || (l.titleId = he(void 0, \"radix-vue-dialog-title\")), l.descriptionId || (l.descriptionId = he(void 0, \"radix-vue-dialog-description\")), le(() => {\n      l.contentElement = r, document.activeElement !== document.body && (l.triggerElement.value = document.activeElement);\n    }), process.env.NODE_ENV !== \"production\" && mu({\n      titleName: \"DialogTitle\",\n      contentName: \"DialogContent\",\n      componentLink: \"dialog.html#title\",\n      titleId: l.titleId,\n      descriptionId: l.descriptionId,\n      contentElement: r\n    }), (i, u) => (b(), S(o(Ya), {\n      \"as-child\": \"\",\n      loop: \"\",\n      trapped: e.trapFocus,\n      onMountAutoFocus: u[5] || (u[5] = (d) => n(\"openAutoFocus\", d)),\n      onUnmountAutoFocus: u[6] || (u[6] = (d) => n(\"closeAutoFocus\", d))\n    }, {\n      default: y(() => [\n        q(o(yt), k({\n          id: o(l).contentId,\n          ref: o(s),\n          as: i.as,\n          \"as-child\": i.asChild,\n          \"disable-outside-pointer-events\": i.disableOutsidePointerEvents,\n          role: \"dialog\",\n          \"aria-describedby\": o(l).descriptionId,\n          \"aria-labelledby\": o(l).titleId,\n          \"data-state\": o(Qn)(o(l).open.value)\n        }, i.$attrs, {\n          onDismiss: u[0] || (u[0] = (d) => o(l).onOpenChange(!1)),\n          onEscapeKeyDown: u[1] || (u[1] = (d) => n(\"escapeKeyDown\", d)),\n          onFocusOutside: u[2] || (u[2] = (d) => n(\"focusOutside\", d)),\n          onInteractOutside: u[3] || (u[3] = (d) => n(\"interactOutside\", d)),\n          onPointerDownOutside: u[4] || (u[4] = (d) => n(\"pointerDownOutside\", d))\n        }), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"id\", \"as\", \"as-child\", \"disable-outside-pointer-events\", \"aria-describedby\", \"aria-labelledby\", \"data-state\"])\n      ]),\n      _: 3\n    }, 8, [\"trapped\"]));\n  }\n}), hu = /* @__PURE__ */ x({\n  __name: \"DialogContentModal\",\n  props: {\n    forceMount: { type: Boolean },\n    trapFocus: { type: Boolean },\n    disableOutsidePointerEvents: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = et(), s = Re(n), { forwardRef: r, currentElement: i } = R();\n    return ya(i), (u, d) => (b(), S(Wl, k({ ...e, ...o(s) }, {\n      ref: o(r),\n      \"trap-focus\": o(l).open.value,\n      \"disable-outside-pointer-events\": !0,\n      onCloseAutoFocus: d[0] || (d[0] = (c) => {\n        var p;\n        c.defaultPrevented || (c.preventDefault(), (p = o(l).triggerElement.value) == null || p.focus());\n      }),\n      onPointerDownOutside: d[1] || (d[1] = (c) => {\n        const p = c.detail.originalEvent, f = p.button === 0 && p.ctrlKey === !0;\n        (p.button === 2 || f) && c.preventDefault();\n      }),\n      onFocusOutside: d[2] || (d[2] = (c) => {\n        c.preventDefault();\n      })\n    }), {\n      default: y(() => [\n        _(u.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"trap-focus\"]));\n  }\n}), yu = /* @__PURE__ */ x({\n  __name: \"DialogContentNonModal\",\n  props: {\n    forceMount: { type: Boolean },\n    trapFocus: { type: Boolean },\n    disableOutsidePointerEvents: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    R();\n    const s = et(), r = I(!1), i = I(!1);\n    return (u, d) => (b(), S(Wl, k({ ...e, ...o(l) }, {\n      \"trap-focus\": !1,\n      \"disable-outside-pointer-events\": !1,\n      onCloseAutoFocus: d[0] || (d[0] = (c) => {\n        var p;\n        c.defaultPrevented || (r.value || (p = o(s).triggerElement.value) == null || p.focus(), c.preventDefault()), r.value = !1, i.value = !1;\n      }),\n      onInteractOutside: d[1] || (d[1] = (c) => {\n        var v;\n        c.defaultPrevented || (r.value = !0, c.detail.originalEvent.type === \"pointerdown\" && (i.value = !0));\n        const p = c.target;\n        ((v = o(s).triggerElement.value) == null ? void 0 : v.contains(p)) && c.preventDefault(), c.detail.originalEvent.type === \"focusin\" && i.value && c.preventDefault();\n      })\n    }), {\n      default: y(() => [\n        _(u.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), gu = /* @__PURE__ */ x({\n  __name: \"DialogContent\",\n  props: {\n    forceMount: { type: Boolean },\n    trapFocus: { type: Boolean },\n    disableOutsidePointerEvents: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = et(), s = Re(n), { forwardRef: r } = R();\n    return (i, u) => (b(), S(o(Pe), {\n      present: i.forceMount || o(l).open.value\n    }, {\n      default: y(() => [\n        o(l).modal.value ? (b(), S(hu, k({\n          key: 0,\n          ref: o(r)\n        }, { ...e, ...o(s), ...i.$attrs }), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16)) : (b(), S(yu, k({\n          key: 1,\n          ref: o(r)\n        }, { ...e, ...o(s), ...i.$attrs }), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16))\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), bu = /* @__PURE__ */ x({\n  __name: \"DialogOverlayImpl\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = et();\n    return ha(!0), R(), (e, n) => (b(), S(o(O), {\n      as: e.as,\n      \"as-child\": e.asChild,\n      \"data-state\": o(t).open.value ? \"open\" : \"closed\",\n      style: { \"pointer-events\": \"auto\" }\n    }, {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"data-state\"]));\n  }\n}), Cu = /* @__PURE__ */ x({\n  __name: \"DialogOverlay\",\n  props: {\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = et(), { forwardRef: e } = R();\n    return (n, l) => {\n      var s;\n      return (s = o(t)) != null && s.modal.value ? (b(), S(o(Pe), {\n        key: 0,\n        present: n.forceMount || o(t).open.value\n      }, {\n        default: y(() => [\n          q(bu, k(n.$attrs, {\n            ref: o(e),\n            as: n.as,\n            \"as-child\": n.asChild\n          }), {\n            default: y(() => [\n              _(n.$slots, \"default\")\n            ]),\n            _: 3\n          }, 16, [\"as\", \"as-child\"])\n        ]),\n        _: 3\n      }, 8, [\"present\"])) : ce(\"\", !0);\n    };\n  }\n}), jl = /* @__PURE__ */ x({\n  __name: \"DialogClose\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = et();\n    return (n, l) => (b(), S(o(O), k(t, {\n      type: n.as === \"button\" ? \"button\" : void 0,\n      onClick: l[0] || (l[0] = (s) => o(e).onOpenChange(!1))\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"type\"]));\n  }\n}), wu = /* @__PURE__ */ x({\n  __name: \"DialogTitle\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"h2\" }\n  },\n  setup(a) {\n    const t = a, e = et();\n    return R(), (n, l) => (b(), S(o(O), k(t, {\n      id: o(e).titleId\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"id\"]));\n  }\n}), _u = /* @__PURE__ */ x({\n  __name: \"DialogDescription\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"p\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = et();\n    return (n, l) => (b(), S(o(O), k(t, {\n      id: o(e).descriptionId\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"id\"]));\n  }\n}), xv = /* @__PURE__ */ x({\n  __name: \"AlertDialogRoot\",\n  props: {\n    open: { type: Boolean },\n    defaultOpen: { type: Boolean }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t);\n    return R(), (s, r) => (b(), S(o(Yi), k(o(l), { modal: !0 }), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Sv = /* @__PURE__ */ x({\n  __name: \"AlertDialogTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(Xi), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Ev = /* @__PURE__ */ x({\n  __name: \"AlertDialogPortal\",\n  props: {\n    to: {},\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(ht), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), [xu, Su] = Q(\"AlertDialogContent\"), Pv = /* @__PURE__ */ x({\n  __name: \"AlertDialogContent\",\n  props: {\n    forceMount: { type: Boolean },\n    trapFocus: { type: Boolean },\n    disableOutsidePointerEvents: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    R();\n    const s = I();\n    return Su({\n      onCancelElementChange: (r) => {\n        s.value = r;\n      }\n    }), (r, i) => (b(), S(o(gu), k({ ...e, ...o(l) }, {\n      role: \"alertdialog\",\n      onPointerDownOutside: i[0] || (i[0] = ue(() => {\n      }, [\"prevent\"])),\n      onInteractOutside: i[1] || (i[1] = ue(() => {\n      }, [\"prevent\"])),\n      onOpenAutoFocus: i[2] || (i[2] = () => {\n        oe(() => {\n          var u;\n          (u = s.value) == null || u.focus({\n            preventScroll: !0\n          });\n        });\n      })\n    }), {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Dv = /* @__PURE__ */ x({\n  __name: \"AlertDialogOverlay\",\n  props: {\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(Cu), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), $v = /* @__PURE__ */ x({\n  __name: \"AlertDialogCancel\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = xu(), { forwardRef: n, currentElement: l } = R();\n    return le(() => {\n      e.onCancelElementChange(l.value);\n    }), (s, r) => (b(), S(o(jl), k(t, { ref: o(n) }), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Bv = /* @__PURE__ */ x({\n  __name: \"AlertDialogTitle\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"h2\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(wu), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Iv = /* @__PURE__ */ x({\n  __name: \"AlertDialogDescription\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"p\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(_u), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Tv = /* @__PURE__ */ x({\n  __name: \"AlertDialogAction\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(jl), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Rv = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"AspectRatio\",\n  props: {\n    ratio: { default: 1 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { forwardRef: e } = R(), n = $(() => 1 / t.ratio * 100);\n    return (l, s) => (b(), ve(\"div\", {\n      style: ke(`position: relative; width: 100%; padding-bottom: ${n.value}%`),\n      \"data-radix-aspect-ratio-wrapper\": \"\"\n    }, [\n      q(o(O), k({\n        ref: o(e),\n        \"as-child\": l.asChild,\n        as: l.as,\n        style: { position: \"absolute\", inset: \"0px\" }\n      }, l.$attrs), {\n        default: y(() => [\n          _(l.$slots, \"default\", { aspect: n.value })\n        ]),\n        _: 3\n      }, 16, [\"as-child\", \"as\"])\n    ], 4));\n  }\n}), [Ul, Eu] = Q(\"AvatarRoot\"), Av = /* @__PURE__ */ x({\n  __name: \"AvatarRoot\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    return R(), Eu({\n      imageLoadingStatus: I(\"loading\")\n    }), (t, e) => (b(), S(o(O), {\n      \"as-child\": t.asChild,\n      as: t.as\n    }, {\n      default: y(() => [\n        _(t.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as-child\", \"as\"]));\n  }\n});\nfunction Pu(a) {\n  const t = I(\"idle\"), e = I(!1), n = (l) => () => {\n    e.value && (t.value = l);\n  };\n  return le(() => {\n    e.value = !0, te(a, (l) => {\n      if (!l)\n        t.value = \"error\";\n      else {\n        const s = new window.Image();\n        t.value = \"loading\", s.onload = n(\"loaded\"), s.onerror = n(\"error\"), s.src = l;\n      }\n    }, { immediate: !0 });\n  }), Be(() => {\n    e.value = !1;\n  }), t;\n}\nconst Ov = /* @__PURE__ */ x({\n  __name: \"AvatarImage\",\n  props: {\n    src: {},\n    asChild: { type: Boolean },\n    as: { default: \"img\" }\n  },\n  emits: [\"loadingStatusChange\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { src: l } = ae(e);\n    R();\n    const s = Ul(), r = Pu(l);\n    return te(\n      r,\n      (i) => {\n        n(\"loadingStatusChange\", i), i !== \"idle\" && (s.imageLoadingStatus.value = i);\n      },\n      { immediate: !0 }\n    ), (i, u) => Ha((b(), S(o(O), {\n      role: \"img\",\n      \"as-child\": i.asChild,\n      as: i.as,\n      src: o(l)\n    }, {\n      default: y(() => [\n        _(i.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as-child\", \"as\", \"src\"])), [\n      [Ln, o(r) === \"loaded\"]\n    ]);\n  }\n}), kv = /* @__PURE__ */ x({\n  __name: \"AvatarFallback\",\n  props: {\n    delayMs: { default: 0 },\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = a, e = Ul();\n    R();\n    const n = I(!1);\n    let l;\n    return te(e.imageLoadingStatus, (s) => {\n      s === \"loading\" && (n.value = !1, t.delayMs ? l = setTimeout(() => {\n        n.value = !0, clearTimeout(l);\n      }, t.delayMs) : n.value = !0);\n    }, { immediate: !0 }), (s, r) => n.value && o(e).imageLoadingStatus.value !== \"loaded\" ? (b(), S(o(O), {\n      key: 0,\n      \"as-child\": s.asChild,\n      as: s.as\n    }, {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as-child\", \"as\"])) : ce(\"\", !0);\n  }\n});\nfunction Du(a) {\n  function t(n) {\n    return Array.isArray(a.date.value) ? a.date.value.some((l) => Te(l, n)) : a.date.value ? Te(a.date.value, n) : !1;\n  }\n  const e = $(\n    () => {\n      var n, l, s, r;\n      if (Array.isArray(a.date.value)) {\n        if (!a.date.value.length)\n          return !1;\n        for (const i of a.date.value)\n          if ((n = a.isDateDisabled) != null && n.call(a, i) || (l = a.isDateUnavailable) != null && l.call(a, i))\n            return !0;\n      } else {\n        if (!a.date.value)\n          return !1;\n        if ((s = a.isDateDisabled) != null && s.call(a, a.date.value) || (r = a.isDateUnavailable) != null && r.call(a, a.date.value))\n          return !0;\n      }\n      return !1;\n    }\n  );\n  return {\n    isDateSelected: t,\n    isInvalid: e\n  };\n}\nfunction $u(a, t) {\n  const e = t(a), n = e.compare(a), l = {};\n  return n >= 7 && (l.day = 1), n >= Pt(a) && (l.month = 1), e.set({ ...l });\n}\nfunction Bu(a, t) {\n  const e = t(a), n = a.compare(e), l = {};\n  return n >= 7 && (l.day = 35), n >= Pt(a) && (l.month = 13), e.set({ ...l });\n}\nfunction Iu(a, t) {\n  return t(a);\n}\nfunction Tu(a, t) {\n  return t(a);\n}\nfunction Gl(a) {\n  const t = Un(a.locale.value), e = $(() => {\n    const m = {\n      calendar: a.placeholder.value.calendar.identifier\n    };\n    return a.placeholder.value.calendar.identifier === \"gregory\" && a.placeholder.value.era === \"BC\" && (m.era = \"short\"), m;\n  }), n = I(_t({\n    dateObj: a.placeholder.value,\n    weekStartsOn: a.weekStartsOn.value,\n    locale: a.locale.value,\n    fixedWeeks: a.fixedWeeks.value,\n    numberOfMonths: a.numberOfMonths.value\n  })), l = $(() => n.value.map((m) => m.value));\n  function s(m) {\n    return !l.value.some((w) => Fo(m, w));\n  }\n  const r = (m = \"month\", w) => {\n    if (!a.maxValue.value || !n.value.length)\n      return !1;\n    if (a.disabled.value)\n      return !0;\n    const C = n.value[n.value.length - 1].value;\n    if (w || a.nextPage.value) {\n      const h = $u(C, w || a.nextPage.value);\n      return Sa(h, a.maxValue.value);\n    }\n    if (m === \"year\") {\n      const h = C.add({ years: 1 }).set({ day: 1, month: 1 });\n      return Sa(h, a.maxValue.value);\n    }\n    const D = C.add({ months: 1 }).set({ day: 1 });\n    return Sa(D, a.maxValue.value);\n  }, i = (m = \"month\", w) => {\n    if (!a.minValue.value || !n.value.length)\n      return !1;\n    if (a.disabled.value)\n      return !0;\n    const C = n.value[0].value;\n    if (w || a.prevPage.value) {\n      const h = Bu(C, w || a.prevPage.value);\n      return Le(h, a.minValue.value);\n    }\n    if (m === \"year\") {\n      const h = C.subtract({ years: 1 }).set({ day: 35, month: 13 });\n      return Le(h, a.minValue.value);\n    }\n    const D = C.subtract({ months: 1 }).set({ day: 35 });\n    return Le(D, a.minValue.value);\n  };\n  function u(m) {\n    var w;\n    return !!((w = a.isDateDisabled) != null && w.call(a, m) || a.disabled.value || a.maxValue.value && Sa(m, a.maxValue.value) || a.minValue.value && Le(m, a.minValue.value));\n  }\n  const d = (m) => {\n    var w;\n    return !!((w = a.isDateUnavailable) != null && w.call(a, m));\n  }, c = $(() => n.value.length ? n.value[0].rows[0].map((m) => t.dayOfWeek(Fe(m), a.weekdayFormat.value)) : []), p = (m = \"month\", w) => {\n    const C = n.value[0].value;\n    if (w || a.nextPage.value) {\n      const E = Iu(C, w || a.nextPage.value), P = _t({\n        dateObj: E,\n        weekStartsOn: a.weekStartsOn.value,\n        locale: a.locale.value,\n        fixedWeeks: a.fixedWeeks.value,\n        numberOfMonths: a.numberOfMonths.value\n      });\n      n.value = P;\n      const B = {};\n      if (!w) {\n        const T = P[0].value.compare(C);\n        T >= Pt(C) && (B.day = 1), T >= 365 && (B.month = 1);\n      }\n      a.placeholder.value = P[0].value.set({ ...B });\n      return;\n    }\n    const D = m === \"month\" ? C.add({ months: a.pagedNavigation.value ? a.numberOfMonths.value : 1 }) : C.add({ years: 1 }), h = _t({\n      dateObj: D,\n      weekStartsOn: a.weekStartsOn.value,\n      locale: a.locale.value,\n      fixedWeeks: a.fixedWeeks.value,\n      numberOfMonths: a.numberOfMonths.value\n    });\n    n.value = h, a.placeholder.value = h[0].value.set({ day: 1 });\n  }, f = (m = \"month\", w) => {\n    const C = n.value[0].value;\n    if (w || a.prevPage.value) {\n      const E = Tu(C, w || a.prevPage.value), P = _t({\n        dateObj: E,\n        weekStartsOn: a.weekStartsOn.value,\n        locale: a.locale.value,\n        fixedWeeks: a.fixedWeeks.value,\n        numberOfMonths: a.numberOfMonths.value\n      });\n      n.value = P;\n      const B = {};\n      if (!w) {\n        const T = C.compare(P[0].value);\n        T >= Pt(C) && (B.day = 1), T >= 365 && (B.month = 1);\n      }\n      a.placeholder.value = P[0].value.set({ ...B });\n      return;\n    }\n    const D = m === \"month\" ? C.subtract({ months: a.pagedNavigation.value ? a.numberOfMonths.value : 1 }) : C.subtract({ years: 1 }), h = _t({\n      dateObj: D,\n      weekStartsOn: a.weekStartsOn.value,\n      locale: a.locale.value,\n      fixedWeeks: a.fixedWeeks.value,\n      numberOfMonths: a.numberOfMonths.value\n    });\n    n.value = h, a.placeholder.value = h[0].value.set({ day: 1 });\n  };\n  te(a.placeholder, (m) => {\n    l.value.some((w) => Fo(w, m)) || (n.value = _t({\n      dateObj: m,\n      weekStartsOn: a.weekStartsOn.value,\n      locale: a.locale.value,\n      fixedWeeks: a.fixedWeeks.value,\n      numberOfMonths: a.numberOfMonths.value\n    }));\n  }), te([a.locale, a.weekStartsOn, a.fixedWeeks, a.numberOfMonths], () => {\n    n.value = _t({\n      dateObj: a.placeholder.value,\n      weekStartsOn: a.weekStartsOn.value,\n      locale: a.locale.value,\n      fixedWeeks: a.fixedWeeks.value,\n      numberOfMonths: a.numberOfMonths.value\n    });\n  });\n  const v = $(() => {\n    if (!n.value.length)\n      return \"\";\n    if (a.locale.value !== t.getLocale() && t.setLocale(a.locale.value), n.value.length === 1) {\n      const B = n.value[0].value;\n      return `${t.fullMonthAndYear(Fe(B), e.value)}`;\n    }\n    const m = Fe(n.value[0].value), w = Fe(n.value[n.value.length - 1].value), C = t.fullMonth(m, e.value), D = t.fullMonth(w, e.value), h = t.fullYear(m, e.value), E = t.fullYear(w, e.value);\n    return h === E ? `${C} - ${D} ${E}` : `${C} ${h} - ${D} ${E}`;\n  }), g = $(() => `${a.calendarLabel.value ?? \"Event Date\"}, ${v.value}`);\n  return {\n    isDateDisabled: u,\n    isDateUnavailable: d,\n    isNextButtonDisabled: r,\n    isPrevButtonDisabled: i,\n    grid: n,\n    weekdays: c,\n    visibleView: l,\n    isOutsideVisibleView: s,\n    formatter: t,\n    nextPage: p,\n    prevPage: f,\n    headingValue: v,\n    fullCalendarLabel: g\n  };\n}\nconst Ru = { style: { border: \"0px\", clip: \"rect(0px, 0px, 0px, 0px)\", \"clip-path\": \"inset(50%)\", height: \"1px\", margin: \"-1px\", overflow: \"hidden\", padding: \"0px\", position: \"absolute\", \"white-space\": \"nowrap\", width: \"1px\" } }, Au = {\n  role: \"heading\",\n  \"aria-level\": \"2\"\n}, [qt, Ou] = Q(\"CalendarRoot\"), ku = /* @__PURE__ */ x({\n  __name: \"CalendarRoot\",\n  props: {\n    modelValue: {},\n    multiple: { type: Boolean, default: !1 },\n    defaultValue: { default: void 0 },\n    defaultPlaceholder: {},\n    placeholder: { default: void 0 },\n    pagedNavigation: { type: Boolean, default: !1 },\n    preventDeselect: { type: Boolean, default: !1 },\n    weekStartsOn: { default: 0 },\n    weekdayFormat: { default: \"narrow\" },\n    calendarLabel: {},\n    fixedWeeks: { type: Boolean, default: !1 },\n    maxValue: {},\n    minValue: {},\n    locale: { default: \"en\" },\n    numberOfMonths: { default: 1 },\n    disabled: { type: Boolean, default: !1 },\n    readonly: { type: Boolean, default: !1 },\n    initialFocus: { type: Boolean, default: !1 },\n    isDateDisabled: { type: Function, default: void 0 },\n    isDateUnavailable: { type: Function, default: void 0 },\n    dir: {},\n    nextPage: {},\n    prevPage: {},\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  emits: [\"update:modelValue\", \"update:placeholder\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, {\n      locale: l,\n      disabled: s,\n      readonly: r,\n      initialFocus: i,\n      pagedNavigation: u,\n      weekStartsOn: d,\n      weekdayFormat: c,\n      fixedWeeks: p,\n      multiple: f,\n      minValue: v,\n      maxValue: g,\n      numberOfMonths: m,\n      preventDeselect: w,\n      isDateDisabled: C,\n      isDateUnavailable: D,\n      calendarLabel: h,\n      defaultValue: E,\n      nextPage: P,\n      prevPage: B,\n      dir: T\n    } = ae(e), { primitiveElement: M, currentElement: V } = Ae(), A = be(T), F = ne(e, \"modelValue\", n, {\n      defaultValue: E.value,\n      passive: e.modelValue === void 0\n    }), U = Ut({\n      defaultPlaceholder: e.placeholder,\n      defaultValue: F.value\n    }), W = ne(e, \"placeholder\", n, {\n      defaultValue: e.defaultPlaceholder ?? U.copy(),\n      passive: e.placeholder === void 0\n    });\n    function ee(de) {\n      W.value = de.copy();\n    }\n    const {\n      fullCalendarLabel: L,\n      headingValue: G,\n      isDateDisabled: N,\n      isDateUnavailable: z,\n      isNextButtonDisabled: Y,\n      isPrevButtonDisabled: K,\n      weekdays: J,\n      isOutsideVisibleView: Z,\n      nextPage: re,\n      prevPage: X,\n      formatter: se,\n      grid: pe\n    } = Gl({\n      locale: l,\n      placeholder: W,\n      weekStartsOn: d,\n      fixedWeeks: p,\n      numberOfMonths: m,\n      minValue: v,\n      maxValue: g,\n      disabled: s,\n      weekdayFormat: c,\n      pagedNavigation: u,\n      isDateDisabled: C.value,\n      isDateUnavailable: D.value,\n      calendarLabel: h,\n      nextPage: P,\n      prevPage: B\n    }), {\n      isInvalid: _e,\n      isDateSelected: Se\n    } = Du({\n      date: F,\n      isDateDisabled: N,\n      isDateUnavailable: z\n    });\n    te(F, (de) => {\n      if (Array.isArray(de) && de.length) {\n        const Ie = de[de.length - 1];\n        Ie && !Ee(W.value, Ie) && ee(Ie);\n      } else !Array.isArray(de) && de && !Ee(W.value, de) && ee(de);\n    });\n    function ye(de) {\n      if (f.value) {\n        if (Array.isArray(F.value)) {\n          if (!F.value) {\n            F.value = [de.copy()];\n            return;\n          }\n          if (F.value.findIndex((Oe) => Te(Oe, de)) === -1)\n            F.value = [...F.value, de];\n          else if (!w.value) {\n            const Oe = F.value.filter((ze) => !Te(ze, de));\n            if (!Oe.length) {\n              W.value = de.copy(), F.value = void 0;\n              return;\n            }\n            F.value = Oe.map((ze) => ze.copy());\n          }\n        }\n      } else {\n        if (!F.value) {\n          F.value = de.copy();\n          return;\n        }\n        !w.value && Ee(F.value, de) ? (W.value = de.copy(), F.value = void 0) : F.value = de.copy();\n      }\n    }\n    return le(() => {\n      i.value && _l(V.value);\n    }), Ou({\n      isDateUnavailable: z,\n      dir: A,\n      isDateDisabled: N,\n      locale: l,\n      formatter: se,\n      modelValue: F,\n      placeholder: W,\n      disabled: s,\n      initialFocus: i,\n      pagedNavigation: u,\n      weekStartsOn: d,\n      weekdayFormat: c,\n      fixedWeeks: p,\n      multiple: f,\n      numberOfMonths: m,\n      readonly: r,\n      preventDeselect: w,\n      fullCalendarLabel: L,\n      headingValue: G,\n      isInvalid: _e,\n      isDateSelected: Se,\n      isNextButtonDisabled: Y,\n      isPrevButtonDisabled: K,\n      isOutsideVisibleView: Z,\n      nextPage: re,\n      prevPage: X,\n      parentElement: V,\n      onPlaceholderChange: ee,\n      onDateChange: ye\n    }), (de, Ie) => (b(), S(o(O), {\n      ref_key: \"primitiveElement\",\n      ref: M,\n      as: de.as,\n      \"as-child\": de.asChild,\n      role: \"application\",\n      \"aria-label\": o(L),\n      \"data-readonly\": o(r) ? \"\" : void 0,\n      \"data-disabled\": o(s) ? \"\" : void 0,\n      \"data-invalid\": o(_e) ? \"\" : void 0,\n      dir: o(A)\n    }, {\n      default: y(() => [\n        _(de.$slots, \"default\", {\n          date: o(W),\n          grid: o(pe),\n          weekDays: o(J),\n          weekStartsOn: o(d),\n          locale: o(l),\n          fixedWeeks: o(p)\n        }),\n        Ue(\"div\", Ru, [\n          Ue(\"div\", Au, De(o(L)), 1)\n        ])\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"aria-label\", \"data-readonly\", \"data-disabled\", \"data-invalid\", \"dir\"]));\n  }\n}), Mu = /* @__PURE__ */ x({\n  __name: \"CalendarHeader\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Vu = /* @__PURE__ */ x({\n  __name: \"CalendarHeading\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a, e = qt();\n    return (n, l) => (b(), S(o(O), k(t, {\n      \"data-disabled\": o(e).disabled.value ? \"\" : void 0\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\", {\n          headingValue: o(e).headingValue.value\n        }, () => [\n          me(De(o(e).headingValue.value), 1)\n        ])\n      ]),\n      _: 3\n    }, 16, [\"data-disabled\"]));\n  }\n}), Fu = /* @__PURE__ */ x({\n  __name: \"CalendarGrid\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"table\" }\n  },\n  setup(a) {\n    const t = a, e = qt(), n = $(() => e.disabled.value ? !0 : void 0), l = $(() => e.readonly.value ? !0 : void 0);\n    return (s, r) => (b(), S(o(O), k(t, {\n      tabindex: \"-1\",\n      role: \"grid\",\n      \"aria-readonly\": l.value,\n      \"aria-disabled\": n.value,\n      \"data-readonly\": l.value && \"\",\n      \"data-disabled\": n.value && \"\"\n    }), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"aria-readonly\", \"aria-disabled\", \"data-readonly\", \"data-disabled\"]));\n  }\n}), Lu = /* @__PURE__ */ x({\n  __name: \"CalendarCell\",\n  props: {\n    date: {},\n    asChild: { type: Boolean },\n    as: { default: \"td\" }\n  },\n  setup(a) {\n    const t = qt();\n    return (e, n) => {\n      var l, s;\n      return b(), S(o(O), {\n        as: e.as,\n        \"as-child\": e.asChild,\n        role: \"gridcell\",\n        \"aria-selected\": o(t).isDateSelected(e.date) ? !0 : void 0,\n        \"aria-disabled\": o(t).isDateDisabled(e.date) || ((s = (l = o(t)).isDateUnavailable) == null ? void 0 : s.call(l, e.date)),\n        \"data-disabled\": o(t).isDateDisabled(e.date) ? \"\" : void 0\n      }, {\n        default: y(() => [\n          _(e.$slots, \"default\")\n        ]),\n        _: 3\n      }, 8, [\"as\", \"as-child\", \"aria-selected\", \"aria-disabled\", \"data-disabled\"]);\n    };\n  }\n}), Nu = /* @__PURE__ */ x({\n  __name: \"CalendarHeadCell\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"th\" }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), zu = /* @__PURE__ */ x({\n  __name: \"CalendarNext\",\n  props: {\n    step: { default: \"month\" },\n    nextPage: {},\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = $(() => n.disabled.value || n.isNextButtonDisabled(t.step, t.nextPage)), n = qt();\n    return (l, s) => (b(), S(o(O), {\n      as: t.as,\n      \"as-child\": t.asChild,\n      \"aria-label\": \"Next page\",\n      type: l.as === \"button\" ? \"button\" : void 0,\n      \"aria-disabled\": e.value || void 0,\n      \"data-disabled\": e.value || void 0,\n      disabled: e.value,\n      onClick: s[0] || (s[0] = (r) => o(n).nextPage(t.step, t.nextPage))\n    }, {\n      default: y(() => [\n        _(l.$slots, \"default\", {}, () => [\n          me(\"Next page\")\n        ])\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"type\", \"aria-disabled\", \"data-disabled\", \"disabled\"]));\n  }\n}), Ku = /* @__PURE__ */ x({\n  __name: \"CalendarPrev\",\n  props: {\n    step: { default: \"month\" },\n    prevPage: {},\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = $(() => n.disabled.value || n.isPrevButtonDisabled(t.step, t.prevPage)), n = qt();\n    return (l, s) => (b(), S(o(O), {\n      \"aria-label\": \"Previous page\",\n      as: t.as,\n      \"as-child\": t.asChild,\n      type: l.as === \"button\" ? \"button\" : void 0,\n      \"aria-disabled\": e.value || void 0,\n      \"data-disabled\": e.value || void 0,\n      disabled: e.value,\n      onClick: s[0] || (s[0] = (r) => o(n).prevPage(t.step, t.prevPage))\n    }, {\n      default: y(() => [\n        _(l.$slots, \"default\", {}, () => [\n          me(\"Prev page\")\n        ])\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"type\", \"aria-disabled\", \"data-disabled\", \"disabled\"]));\n  }\n}), Hu = /* @__PURE__ */ x({\n  __name: \"CalendarGridHead\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"thead\" }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), k(t, { \"aria-hidden\": \"true\" }), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Wu = /* @__PURE__ */ x({\n  __name: \"CalendarGridBody\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"tbody\" }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), ju = /* @__PURE__ */ x({\n  __name: \"CalendarGridRow\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"tr\" }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Uu = /* @__PURE__ */ x({\n  __name: \"CalendarCellTrigger\",\n  props: {\n    day: {},\n    month: {},\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a, e = Qe(), n = qt(), { primitiveElement: l, currentElement: s } = Ae(), r = $(() => t.day.day.toLocaleString(n.locale.value)), i = $(() => n.formatter.custom(Fe(t.day), {\n      weekday: \"long\",\n      month: \"long\",\n      day: \"numeric\",\n      year: \"numeric\"\n    })), u = $(() => n.isDateDisabled(t.day)), d = $(\n      () => {\n        var h;\n        return (h = n.isDateUnavailable) == null ? void 0 : h.call(n, t.day);\n      }\n    ), c = $(() => ml(t.day, zn())), p = $(() => !hl(t.day, t.month)), f = $(\n      () => n.isOutsideVisibleView(t.day)\n    ), v = $(() => !n.disabled.value && Te(t.day, n.placeholder.value)), g = $(() => n.isDateSelected(t.day)), m = \"[data-radix-vue-calendar-cell-trigger]:not([data-disabled]):not([data-outside-month]):not([data-outside-visible-months])\";\n    function w(h) {\n      var E;\n      n.readonly.value || n.isDateDisabled(h) || (E = n.isDateUnavailable) != null && E.call(n, h) || n.onDateChange(h);\n    }\n    function C() {\n      w(t.day);\n    }\n    function D(h) {\n      h.preventDefault(), h.stopPropagation();\n      const E = n.parentElement.value, P = E ? Array.from(E.querySelectorAll(m)) : [];\n      let T = P.indexOf(s.value);\n      const M = 7, V = n.dir.value === \"rtl\" ? -1 : 1;\n      switch (h.code) {\n        case e.ARROW_RIGHT:\n          T += V;\n          break;\n        case e.ARROW_LEFT:\n          T -= V;\n          break;\n        case e.ARROW_UP:\n          T -= M;\n          break;\n        case e.ARROW_DOWN:\n          T += M;\n          break;\n        case e.ENTER:\n        case e.SPACE_CODE:\n          w(t.day);\n          return;\n        default:\n          return;\n      }\n      if (T >= 0 && T < P.length) {\n        P[T].focus();\n        return;\n      }\n      if (T < 0) {\n        if (n.isPrevButtonDisabled(\"month\"))\n          return;\n        n.prevPage(), oe(() => {\n          const A = E ? Array.from(E.querySelectorAll(m)) : [];\n          A[A.length - Math.abs(T)].focus();\n        });\n        return;\n      }\n      if (T >= P.length) {\n        if (n.isNextButtonDisabled(\"month\"))\n          return;\n        n.nextPage(), oe(() => {\n          (E ? Array.from(E.querySelectorAll(m)) : [])[T - P.length].focus();\n        });\n      }\n    }\n    return (h, E) => (b(), S(o(O), k({\n      ref_key: \"primitiveElement\",\n      ref: l\n    }, t, {\n      role: \"button\",\n      \"aria-label\": i.value,\n      \"data-radix-vue-calendar-cell-trigger\": \"\",\n      \"aria-disabled\": p.value || u.value || d.value ? !0 : void 0,\n      \"data-selected\": g.value ? !0 : void 0,\n      \"data-value\": h.day.toString(),\n      \"data-disabled\": u.value || p.value ? \"\" : void 0,\n      \"data-unavailable\": d.value ? \"\" : void 0,\n      \"data-today\": c.value ? \"\" : void 0,\n      \"data-outside-view\": p.value ? \"\" : void 0,\n      \"data-outside-visible-view\": f.value ? \"\" : void 0,\n      \"data-focused\": v.value ? \"\" : void 0,\n      tabindex: v.value ? 0 : p.value || u.value ? void 0 : -1,\n      onClick: C,\n      onKeydown: [\n        ie(D, [\"up\", \"down\", \"left\", \"right\", \"space\", \"enter\"]),\n        E[0] || (E[0] = ie(ue(() => {\n        }, [\"prevent\"]), [\"enter\"]))\n      ]\n    }), {\n      default: y(() => [\n        _(h.$slots, \"default\", { dayValue: r.value }, () => [\n          me(De(r.value), 1)\n        ])\n      ]),\n      _: 3\n    }, 16, [\"aria-label\", \"aria-disabled\", \"data-selected\", \"data-value\", \"data-disabled\", \"data-unavailable\", \"data-today\", \"data-outside-view\", \"data-outside-visible-view\", \"data-focused\", \"tabindex\"]));\n  }\n});\nfunction La(a) {\n  return a === \"indeterminate\";\n}\nfunction ql(a) {\n  return La(a) ? \"indeterminate\" : a ? \"checked\" : \"unchecked\";\n}\nconst Gu = [\"value\", \"checked\", \"name\", \"disabled\", \"required\"], [qu, Yu] = Q(\"CheckboxRoot\"), Mv = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"CheckboxRoot\",\n  props: {\n    defaultChecked: { type: Boolean },\n    checked: { type: [Boolean, String], default: void 0 },\n    disabled: { type: Boolean },\n    required: { type: Boolean },\n    name: {},\n    value: { default: \"on\" },\n    id: {},\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  emits: [\"update:checked\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { disabled: l } = ae(e), s = ne(e, \"checked\", n, {\n      defaultValue: e.defaultChecked,\n      passive: e.checked === void 0\n    }), { forwardRef: r, currentElement: i } = R(), u = Je(i), d = $(() => {\n      var c;\n      return e.id && i.value ? (c = document.querySelector(`[for=\"${e.id}\"]`)) == null ? void 0 : c.innerText : void 0;\n    });\n    return Yu({\n      disabled: l,\n      state: s\n    }), (c, p) => (b(), ve(we, null, [\n      q(o(O), k(c.$attrs, {\n        id: c.id,\n        ref: o(r),\n        role: \"checkbox\",\n        \"as-child\": e.asChild,\n        as: c.as,\n        type: c.as === \"button\" ? \"button\" : void 0,\n        \"aria-checked\": o(La)(o(s)) ? \"mixed\" : o(s),\n        \"aria-required\": !1,\n        \"aria-label\": c.$attrs[\"aria-label\"] || d.value,\n        \"data-state\": o(ql)(o(s)),\n        \"data-disabled\": o(l) ? \"\" : void 0,\n        disabled: o(l),\n        onKeydown: ie(ue(() => {\n        }, [\"prevent\"]), [\"enter\"]),\n        onClick: p[0] || (p[0] = (f) => s.value = o(La)(o(s)) ? !0 : !o(s))\n      }), {\n        default: y(() => [\n          _(c.$slots, \"default\", { checked: o(s) })\n        ]),\n        _: 3\n      }, 16, [\"id\", \"as-child\", \"as\", \"type\", \"aria-checked\", \"aria-label\", \"data-state\", \"data-disabled\", \"disabled\", \"onKeydown\"]),\n      o(u) ? (b(), ve(\"input\", {\n        key: 0,\n        type: \"checkbox\",\n        tabindex: \"-1\",\n        \"aria-hidden\": \"true\",\n        value: c.value,\n        checked: !!o(s),\n        name: e.name,\n        disabled: e.disabled,\n        required: e.required,\n        style: {\n          transform: \"translateX(-100%)\",\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          opacity: 0,\n          margin: 0\n        }\n      }, null, 8, Gu)) : ce(\"\", !0)\n    ], 64));\n  }\n}), Vv = /* @__PURE__ */ x({\n  __name: \"CheckboxIndicator\",\n  props: {\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const { forwardRef: t } = R(), e = qu();\n    return (n, l) => (b(), S(o(Pe), {\n      present: n.forceMount || o(La)(o(e).state.value) || o(e).state.value === !0\n    }, {\n      default: y(() => [\n        q(o(O), k({\n          ref: o(t),\n          \"data-state\": o(ql)(o(e).state.value),\n          \"data-disabled\": o(e).disabled.value ? \"\" : void 0,\n          style: { pointerEvents: \"none\" },\n          \"as-child\": n.asChild,\n          as: n.as\n        }, n.$attrs), {\n          default: y(() => [\n            _(n.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"data-state\", \"data-disabled\", \"as-child\", \"as\"])\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), [Yl, Xu] = Q(\"PopperRoot\"), Tt = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"PopperRoot\",\n  setup(a) {\n    const t = I();\n    return Xu({\n      anchor: t,\n      onAnchorChange: (e) => t.value = e\n    }), (e, n) => _(e.$slots, \"default\");\n  }\n}), Rt = /* @__PURE__ */ x({\n  __name: \"PopperAnchor\",\n  props: {\n    element: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { forwardRef: e, currentElement: n } = R(), l = Yl();\n    return ge(() => {\n      l.onAnchorChange(t.element ?? n.value);\n    }), (s, r) => (b(), S(o(O), {\n      ref: o(e),\n      as: s.as,\n      \"as-child\": s.asChild\n    }, {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\"]));\n  }\n});\nfunction Zu(a) {\n  return a !== null;\n}\nfunction Ju(a) {\n  return {\n    name: \"transformOrigin\",\n    options: a,\n    fn(t) {\n      var w, C, D;\n      const { placement: e, rects: n, middlewareData: l } = t, r = ((w = l.arrow) == null ? void 0 : w.centerOffset) !== 0, i = r ? 0 : a.arrowWidth, u = r ? 0 : a.arrowHeight, [d, c] = Bn(e), p = { start: \"0%\", center: \"50%\", end: \"100%\" }[c], f = (((C = l.arrow) == null ? void 0 : C.x) ?? 0) + i / 2, v = (((D = l.arrow) == null ? void 0 : D.y) ?? 0) + u / 2;\n      let g = \"\", m = \"\";\n      return d === \"bottom\" ? (g = r ? p : `${f}px`, m = `${-u}px`) : d === \"top\" ? (g = r ? p : `${f}px`, m = `${n.floating.height + u}px`) : d === \"right\" ? (g = `${-u}px`, m = r ? p : `${v}px`) : d === \"left\" && (g = `${n.floating.width + u}px`, m = r ? p : `${v}px`), { data: { x: g, y: m } };\n    }\n  };\n}\nfunction Bn(a) {\n  const [t, e = \"center\"] = a.split(\"-\");\n  return [t, e];\n}\nconst Xl = {\n  side: \"bottom\",\n  sideOffset: 0,\n  align: \"center\",\n  alignOffset: 0,\n  arrowPadding: 0,\n  avoidCollisions: !0,\n  collisionBoundary: () => [],\n  collisionPadding: 0,\n  sticky: \"partial\",\n  hideWhenDetached: !1,\n  updatePositionStrategy: \"optimized\",\n  prioritizePosition: !1\n}, [Qu, ed] = Q(\"PopperContent\"), Dt = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"PopperContent\",\n  props: /* @__PURE__ */ fl({\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  }, {\n    ...Xl\n  }),\n  emits: [\"placed\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = Yl(), { forwardRef: s, currentElement: r } = R(), i = I(), u = I(), { width: d, height: c } = kl(u), p = $(\n      () => e.side + (e.align !== \"center\" ? `-${e.align}` : \"\")\n    ), f = $(() => typeof e.collisionPadding == \"number\" ? e.collisionPadding : { top: 0, right: 0, bottom: 0, left: 0, ...e.collisionPadding }), v = $(() => Array.isArray(e.collisionBoundary) ? e.collisionBoundary : [e.collisionBoundary]), g = $(() => ({\n      padding: f.value,\n      boundary: v.value.filter(Zu),\n      // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n      altBoundary: v.value.length > 0\n    })), m = Zr(() => [\n      Ir({\n        mainAxis: e.sideOffset + c.value,\n        alignmentAxis: e.alignOffset\n      }),\n      e.prioritizePosition && e.avoidCollisions && Lo({\n        ...g.value\n      }),\n      e.avoidCollisions && Tr({\n        mainAxis: !0,\n        crossAxis: !!e.prioritizePosition,\n        limiter: e.sticky === \"partial\" ? Rr() : void 0,\n        ...g.value\n      }),\n      !e.prioritizePosition && e.avoidCollisions && Lo({\n        ...g.value\n      }),\n      Ar({\n        ...g.value,\n        apply: ({ elements: A, rects: F, availableWidth: U, availableHeight: W }) => {\n          const { width: ee, height: L } = F.reference, G = A.floating.style;\n          G.setProperty(\n            \"--radix-popper-available-width\",\n            `${U}px`\n          ), G.setProperty(\n            \"--radix-popper-available-height\",\n            `${W}px`\n          ), G.setProperty(\n            \"--radix-popper-anchor-width\",\n            `${ee}px`\n          ), G.setProperty(\n            \"--radix-popper-anchor-height\",\n            `${L}px`\n          );\n        }\n      }),\n      u.value && Or({ element: u.value, padding: e.arrowPadding }),\n      Ju({\n        arrowWidth: d.value,\n        arrowHeight: c.value\n      }),\n      e.hideWhenDetached && kr({ strategy: \"referenceHidden\", ...g.value })\n    ]), { floatingStyles: w, placement: C, isPositioned: D, middlewareData: h } = $r(\n      l.anchor,\n      i,\n      {\n        strategy: \"fixed\",\n        placement: p,\n        whileElementsMounted: (...A) => Br(...A, {\n          animationFrame: e.updatePositionStrategy === \"always\"\n        }),\n        middleware: m\n      }\n    ), E = $(\n      () => Bn(C.value)[0]\n    ), P = $(\n      () => Bn(C.value)[1]\n    );\n    yr(() => {\n      D.value && n(\"placed\");\n    });\n    const B = $(\n      () => {\n        var A;\n        return ((A = h.value.arrow) == null ? void 0 : A.centerOffset) !== 0;\n      }\n    ), T = I(\"\");\n    ge(() => {\n      r.value && (T.value = window.getComputedStyle(r.value).zIndex);\n    });\n    const M = $(() => {\n      var A;\n      return ((A = h.value.arrow) == null ? void 0 : A.x) ?? 0;\n    }), V = $(() => {\n      var A;\n      return ((A = h.value.arrow) == null ? void 0 : A.y) ?? 0;\n    });\n    return ed({\n      placedSide: E,\n      onArrowChange: (A) => u.value = A,\n      arrowX: M,\n      arrowY: V,\n      shouldHideArrow: B\n    }), (A, F) => {\n      var U, W, ee;\n      return b(), ve(\"div\", {\n        ref_key: \"floatingRef\",\n        ref: i,\n        \"data-radix-popper-content-wrapper\": \"\",\n        style: ke({\n          ...o(w),\n          transform: o(D) ? o(w).transform : \"translate(0, -200%)\",\n          // keep off the page when measuring\n          minWidth: \"max-content\",\n          zIndex: T.value,\n          \"--radix-popper-transform-origin\": [\n            (U = o(h).transformOrigin) == null ? void 0 : U.x,\n            (W = o(h).transformOrigin) == null ? void 0 : W.y\n          ].join(\" \"),\n          // hide the content if using the hide middleware and should be hidden\n          // set visibility to hidden and disable pointer events so the UI behaves\n          // as if the PopperContent isn't there at all\n          ...((ee = o(h).hide) == null ? void 0 : ee.referenceHidden) && {\n            visibility: \"hidden\",\n            pointerEvents: \"none\"\n          }\n        })\n      }, [\n        q(o(O), k({ ref: o(s) }, A.$attrs, {\n          \"as-child\": e.asChild,\n          as: A.as,\n          \"data-side\": E.value,\n          \"data-align\": P.value,\n          style: {\n            // if the PopperContent hasn't been placed yet (not all measurements done)\n            // we prevent animations so that users's animation don't kick in too early referring wrong sides\n            animation: o(D) ? void 0 : \"none\"\n          }\n        }), {\n          default: y(() => [\n            _(A.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"as-child\", \"as\", \"data-side\", \"data-align\", \"style\"])\n      ], 4);\n    };\n  }\n}), td = /* @__PURE__ */ Ue(\"polygon\", { points: \"0,0 30,0 15,10\" }, null, -1), ad = /* @__PURE__ */ x({\n  __name: \"Arrow\",\n  props: {\n    width: { default: 10 },\n    height: { default: 5 },\n    asChild: { type: Boolean },\n    as: { default: \"svg\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(O), k(t, {\n      width: e.width,\n      height: e.height,\n      viewBox: e.asChild ? void 0 : \"0 0 30 10\",\n      preserveAspectRatio: e.asChild ? void 0 : \"none\"\n    }), {\n      default: y(() => [\n        _(e.$slots, \"default\", {}, () => [\n          td\n        ])\n      ]),\n      _: 3\n    }, 16, [\"width\", \"height\", \"viewBox\", \"preserveAspectRatio\"]));\n  }\n}), nd = {\n  top: \"bottom\",\n  right: \"left\",\n  bottom: \"top\",\n  left: \"right\"\n}, Yt = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"PopperArrow\",\n  props: {\n    width: {},\n    height: {},\n    asChild: { type: Boolean },\n    as: { default: \"svg\" }\n  },\n  setup(a) {\n    const { forwardRef: t } = R(), e = Qu(), n = $(() => nd[e.placedSide.value]);\n    return (l, s) => {\n      var r, i, u, d;\n      return b(), ve(\"span\", {\n        ref: (c) => {\n          o(e).onArrowChange(c);\n        },\n        style: ke({\n          position: \"absolute\",\n          left: (r = o(e).arrowX) != null && r.value ? `${(i = o(e).arrowX) == null ? void 0 : i.value}px` : void 0,\n          top: (u = o(e).arrowY) != null && u.value ? `${(d = o(e).arrowY) == null ? void 0 : d.value}px` : void 0,\n          [n.value]: 0,\n          transformOrigin: {\n            top: \"\",\n            right: \"0 0\",\n            bottom: \"center 0\",\n            left: \"100% 0\"\n          }[o(e).placedSide.value],\n          transform: {\n            top: \"translateY(100%)\",\n            right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n            bottom: \"rotate(180deg)\",\n            left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n          }[o(e).placedSide.value],\n          visibility: o(e).shouldHideArrow.value ? \"hidden\" : void 0\n        })\n      }, [\n        q(ad, k(l.$attrs, {\n          ref: o(t),\n          style: {\n            display: \"block\"\n          },\n          as: l.as,\n          \"as-child\": l.asChild,\n          width: l.width,\n          height: l.height\n        }), {\n          default: y(() => [\n            _(l.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"as\", \"as-child\", \"width\", \"height\"])\n      ], 4);\n    };\n  }\n}), Xt = /* @__PURE__ */ x({\n  __name: \"VisuallyHidden\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    return R(), (t, e) => (b(), S(o(O), {\n      as: t.as,\n      \"as-child\": t.asChild,\n      style: {\n        // See: https://github.com/twbs/bootstrap/blob/master/scss/mixins/_screen-reader.scss\n        position: \"absolute\",\n        border: 0,\n        width: \"1px\",\n        display: \"inline-block\",\n        height: \"1px\",\n        padding: 0,\n        margin: \"-1px\",\n        overflow: \"hidden\",\n        clip: \"rect(0, 0, 0, 0)\",\n        whiteSpace: \"nowrap\",\n        wordWrap: \"normal\"\n      }\n    }, {\n      default: y(() => [\n        _(t.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\"]));\n  }\n}), to = /* @__PURE__ */ x({\n  __name: \"VisuallyHiddenInput\",\n  props: {\n    name: {},\n    value: {},\n    required: { type: Boolean },\n    disabled: { type: Boolean }\n  },\n  setup(a) {\n    const t = a, e = $(() => typeof t.value == \"string\" || typeof t.value == \"number\" || typeof t.value == \"boolean\" ? [{ name: t.name, value: t.value }] : typeof t.value == \"object\" && Array.isArray(t.value) ? t.value.flatMap((n, l) => typeof n == \"object\" ? Object.entries(n).map(([s, r]) => ({ name: `[${l}][${t.name}][${s}]`, value: r })) : { name: `[${t.name}][${l}]`, value: n }) : t.value !== null && typeof t.value == \"object\" && !Array.isArray(t.value) ? Object.entries(t.value).map(([n, l]) => ({ name: `[${t.name}][${n}]`, value: l })) : []);\n    return (n, l) => (b(!0), ve(we, null, va(e.value, (s) => (b(), S(Xt, {\n      key: s.name,\n      as: \"input\",\n      type: \"hidden\",\n      hidden: \"\",\n      readonly: \"\",\n      name: s.name,\n      value: s.value,\n      required: n.required,\n      disabled: n.disabled\n    }, null, 8, [\"name\", \"value\", \"required\", \"disabled\"]))), 128));\n  }\n}), od = \"data-radix-vue-collection-item\", [ao, ld] = Q(\"CollectionProvider\");\nfunction ba(a = od) {\n  const t = I(/* @__PURE__ */ new Map()), e = I(), n = ld({\n    collectionRef: e,\n    itemMap: t,\n    attrName: a\n  }), { getItems: l } = Jt(n), s = $(() => Array.from(n.itemMap.value.values())), r = $(() => n.itemMap.value.size);\n  return { getItems: l, reactiveItems: s, itemMapSize: r };\n}\nconst Ca = x({\n  name: \"CollectionSlot\",\n  setup(a, { slots: t }) {\n    const e = ao(), { primitiveElement: n, currentElement: l } = Ae();\n    return te(l, () => {\n      e.collectionRef.value = l.value;\n    }), () => pt(Xn, { ref: n }, t);\n  }\n}), Zt = x({\n  name: \"CollectionItem\",\n  inheritAttrs: !1,\n  props: {\n    value: {\n      // It accepts any value\n      validator: () => !0\n    }\n  },\n  setup(a, { slots: t, attrs: e }) {\n    const n = ao(), { primitiveElement: l, currentElement: s } = Ae();\n    return ge((r) => {\n      if (s.value) {\n        const i = gr(s.value);\n        n.itemMap.value.set(i, { ref: s.value, value: a.value }), r(() => n.itemMap.value.delete(i));\n      }\n    }), () => pt(Xn, { ...e, [n.attrName]: \"\", ref: l }, t);\n  }\n});\nfunction Jt(a) {\n  const t = a ?? ao();\n  return { getItems: () => {\n    const n = t.collectionRef.value;\n    if (!n)\n      return [];\n    const l = Array.from(n.querySelectorAll(`[${t.attrName}]`));\n    return Array.from(t.itemMap.value.values()).sort(\n      (i, u) => l.indexOf(i.ref) - l.indexOf(u.ref)\n    );\n  } };\n}\nconst [nt, sd] = Q(\"ComboboxRoot\"), Fv = /* @__PURE__ */ x({\n  __name: \"ComboboxRoot\",\n  props: {\n    modelValue: {},\n    defaultValue: {},\n    open: { type: Boolean, default: void 0 },\n    defaultOpen: { type: Boolean },\n    searchTerm: {},\n    selectedValue: {},\n    multiple: { type: Boolean },\n    disabled: { type: Boolean },\n    name: {},\n    dir: {},\n    filterFunction: {},\n    displayValue: {},\n    resetSearchTermOnBlur: { type: Boolean, default: !0 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\", \"update:open\", \"update:searchTerm\", \"update:selectedValue\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { multiple: l, disabled: s, dir: r } = ae(e), i = be(r), u = ne(e, \"searchTerm\", n, {\n      // @ts-expect-error ignore the type error here\n      defaultValue: \"\",\n      passive: e.searchTerm === void 0\n    }), d = ne(e, \"modelValue\", n, {\n      // @ts-expect-error ignore the type error here\n      defaultValue: e.defaultValue ?? l.value ? [] : void 0,\n      passive: e.modelValue === void 0,\n      deep: !0\n    }), c = ne(e, \"open\", n, {\n      defaultValue: e.defaultOpen,\n      passive: e.open === void 0\n    }), p = ne(e, \"selectedValue\", n, {\n      defaultValue: void 0,\n      passive: e.selectedValue === void 0\n    });\n    async function f(L) {\n      var G, N;\n      c.value = L, await oe(), L ? (d.value && (Array.isArray(d.value) && l.value ? p.value = (G = h().find((z) => {\n        var Y, K;\n        return ((K = (Y = z.ref) == null ? void 0 : Y.dataset) == null ? void 0 : K.state) === \"checked\";\n      })) == null ? void 0 : G.value : p.value = d.value), await oe(), (N = m.value) == null || N.focus(), W()) : (g.value = !1, e.resetSearchTermOnBlur && M());\n    }\n    function v(L) {\n      if (Array.isArray(d.value) && l.value) {\n        const G = d.value.findIndex((z) => Ye(z, L)), N = [...d.value];\n        G === -1 ? N.push(L) : N.splice(G, 1), d.value = N;\n      } else\n        d.value = L, f(!1);\n    }\n    const g = I(!1), m = I(), w = I(), { forwardRef: C, currentElement: D } = R(), { getItems: h, reactiveItems: E, itemMapSize: P } = ba(\"data-radix-vue-combobox-item\"), B = I([]);\n    te(() => P.value, () => {\n      B.value = h().map((L) => L.value);\n    }, {\n      immediate: !0,\n      flush: \"post\"\n    });\n    const T = $(() => {\n      if (g.value) {\n        if (e.filterFunction)\n          return e.filterFunction(B.value, u.value);\n        const L = B.value.filter((G) => typeof G == \"string\");\n        if (L.length)\n          return L.filter((G) => {\n            var N;\n            return G.toLowerCase().includes((N = u.value) == null ? void 0 : N.toLowerCase());\n          });\n      }\n      return B.value;\n    });\n    function M() {\n      !l.value && d.value && !Array.isArray(d.value) ? e.displayValue ? u.value = e.displayValue(d.value) : typeof d.value != \"object\" ? u.value = d.value.toString() : u.value = \"\" : u.value = \"\";\n    }\n    const V = $(() => T.value.findIndex((L) => Ye(L, p.value))), A = $(() => {\n      var L;\n      return (L = E.value.find((G) => Ye(G.value, p.value))) == null ? void 0 : L.ref;\n    }), F = $(() => JSON.stringify(d.value));\n    te(F, async () => {\n      await oe(), await oe(), M();\n    }, {\n      // If searchTerm is provided with value during initialization, we don't reset it immediately\n      immediate: !e.searchTerm\n    }), te(() => [T.value.length, u.value.length], async ([L, G], [N, z]) => {\n      await oe(), await oe(), L && (z > G || V.value === -1) && (p.value = T.value[0]);\n    });\n    const U = Je(D);\n    function W() {\n      var L;\n      A.value instanceof Element && ((L = A.value) == null || L.scrollIntoView({ block: \"nearest\" }));\n    }\n    function ee() {\n      A.value instanceof Element && A.value.focus && A.value.focus();\n    }\n    return sd({\n      searchTerm: u,\n      modelValue: d,\n      // @ts-expect-error ignoring\n      onValueChange: v,\n      isUserInputted: g,\n      multiple: l,\n      disabled: s,\n      open: c,\n      onOpenChange: f,\n      filteredOptions: T,\n      contentId: \"\",\n      inputElement: m,\n      selectedElement: A,\n      onInputElementChange: (L) => m.value = L,\n      onInputNavigation: async (L) => {\n        const G = V.value;\n        G === 0 && L === \"up\" || G === T.value.length - 1 && L === \"down\" || (G === -1 && T.value.length || L === \"home\" ? p.value = T.value[0] : L === \"end\" ? p.value = T.value[T.value.length - 1] : p.value = T.value[L === \"up\" ? G - 1 : G + 1], await oe(), W(), ee(), oe(() => {\n          var N;\n          return (N = m.value) == null ? void 0 : N.focus({ preventScroll: !0 });\n        }));\n      },\n      onInputEnter: async (L) => {\n        var G;\n        T.value.length && p.value && A.value instanceof Element && (L.preventDefault(), L.stopPropagation(), (G = A.value) == null || G.click());\n      },\n      selectedValue: p,\n      onSelectedValueChange: (L) => p.value = L,\n      parentElement: D,\n      contentElement: w,\n      onContentElementChange: (L) => w.value = L\n    }), (L, G) => (b(), S(o(Tt), null, {\n      default: y(() => [\n        q(o(O), k({\n          ref: o(C),\n          style: {\n            pointerEvents: o(c) ? \"auto\" : void 0\n          },\n          as: L.as,\n          \"as-child\": L.asChild,\n          dir: o(i)\n        }, L.$attrs), {\n          default: y(() => [\n            _(L.$slots, \"default\", {\n              open: o(c),\n              modelValue: o(d)\n            }),\n            o(U) && e.name ? (b(), S(o(to), {\n              key: 0,\n              name: e.name,\n              value: o(d)\n            }, null, 8, [\"name\", \"value\"])) : ce(\"\", !0)\n          ]),\n          _: 3\n        }, 16, [\"style\", \"as\", \"as-child\", \"dir\"])\n      ]),\n      _: 3\n    }));\n  }\n}), Lv = /* @__PURE__ */ x({\n  __name: \"ComboboxInput\",\n  props: {\n    type: { default: \"text\" },\n    disabled: { type: Boolean },\n    autoFocus: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"input\" }\n  },\n  setup(a) {\n    const t = a, e = nt(), { forwardRef: n, currentElement: l } = R();\n    le(() => {\n      const c = l.value.nodeName === \"INPUT\" ? l.value : l.value.querySelector(\"input\");\n      c && (e.onInputElementChange(c), setTimeout(() => {\n        t.autoFocus && (c == null || c.focus());\n      }, 1));\n    });\n    const s = $(() => t.disabled || e.disabled.value || !1), r = I();\n    br(() => {\n      var c;\n      return r.value = (c = e.selectedElement.value) == null ? void 0 : c.id;\n    });\n    function i(c) {\n      e.open.value ? e.onInputNavigation(c.key === \"ArrowUp\" ? \"up\" : \"down\") : e.onOpenChange(!0);\n    }\n    function u(c) {\n      e.open.value && e.onInputNavigation(c.key === \"Home\" ? \"home\" : \"end\");\n    }\n    function d(c) {\n      var p;\n      e.searchTerm.value = (p = c.target) == null ? void 0 : p.value, e.open.value || e.onOpenChange(!0), e.isUserInputted.value = !0;\n    }\n    return (c, p) => (b(), S(o(O), {\n      ref: o(n),\n      as: c.as,\n      \"as-child\": c.asChild,\n      type: c.type,\n      disabled: s.value,\n      value: o(e).searchTerm.value,\n      \"aria-expanded\": o(e).open.value,\n      \"aria-controls\": o(e).contentId,\n      \"aria-disabled\": s.value ?? void 0,\n      \"aria-activedescendant\": r.value,\n      \"aria-autocomplete\": \"list\",\n      role: \"combobox\",\n      autocomplete: \"false\",\n      onInput: d,\n      onKeydown: [\n        ie(ue(i, [\"prevent\"]), [\"down\", \"up\"]),\n        ie(o(e).onInputEnter, [\"enter\"]),\n        ie(ue(u, [\"prevent\"]), [\"home\", \"end\"])\n      ]\n    }, {\n      default: y(() => [\n        _(c.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"type\", \"disabled\", \"value\", \"aria-expanded\", \"aria-controls\", \"aria-disabled\", \"aria-activedescendant\", \"onKeydown\"]));\n  }\n}), Nv = /* @__PURE__ */ x({\n  __name: \"ComboboxAnchor\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const { forwardRef: t } = R();\n    return (e, n) => (b(), S(o(Rt), { \"as-child\": \"\" }, {\n      default: y(() => [\n        q(o(O), k({\n          ref: o(t),\n          \"as-child\": e.asChild,\n          as: e.as\n        }, e.$attrs), {\n          default: y(() => [\n            _(e.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"as-child\", \"as\"])\n      ]),\n      _: 3\n    }));\n  }\n}), zv = /* @__PURE__ */ x({\n  __name: \"ComboboxTrigger\",\n  props: {\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = nt(), n = $(() => t.disabled || e.disabled.value || !1);\n    return (l, s) => (b(), S(o(O), k(t, {\n      type: l.as === \"button\" ? \"button\" : void 0,\n      tabindex: \"-1\",\n      \"aria-label\": \"Show popup\",\n      \"aria-haspopup\": \"listbox\",\n      \"aria-expanded\": o(e).open.value,\n      \"aria-controls\": o(e).contentId,\n      \"data-state\": o(e).open.value ? \"open\" : \"closed\",\n      disabled: n.value,\n      \"data-disabled\": n.value ? \"\" : void 0,\n      \"aria-disabled\": n.value ?? void 0,\n      onClick: s[0] || (s[0] = (r) => o(e).onOpenChange(!o(e).open.value))\n    }), {\n      default: y(() => [\n        _(l.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"type\", \"aria-expanded\", \"aria-controls\", \"data-state\", \"disabled\", \"data-disabled\", \"aria-disabled\"]));\n  }\n}), Kv = /* @__PURE__ */ x({\n  __name: \"ComboboxCancel\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = nt();\n    function n() {\n      var l;\n      e.searchTerm.value = \"\", (l = e.inputElement.value) == null || l.focus();\n    }\n    return (l, s) => (b(), S(o(O), k({\n      type: l.as === \"button\" ? \"button\" : void 0\n    }, t, {\n      tabindex: \"-1\",\n      onClick: n\n    }), {\n      default: y(() => [\n        _(l.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"type\"]));\n  }\n}), [Zl, rd] = Q(\"ComboboxGroup\"), Hv = /* @__PURE__ */ x({\n  __name: \"ComboboxGroup\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { currentRef: e, currentElement: n } = R(), l = he(void 0, \"radix-vue-combobox-group\"), s = nt(), r = I(!1);\n    function i() {\n      if (!n.value)\n        return;\n      const u = n.value.querySelectorAll(\"[data-radix-vue-combobox-item]:not([data-hidden])\");\n      r.value = !!u.length;\n    }\n    return Bl(n, () => {\n      oe(() => {\n        i();\n      });\n    }, { childList: !0 }), te(() => s.searchTerm.value, () => {\n      oe(() => {\n        i();\n      });\n    }, { immediate: !0 }), rd({\n      id: l\n    }), (u, d) => Ha((b(), S(o(O), k(t, {\n      ref_key: \"currentRef\",\n      ref: e,\n      role: \"group\",\n      \"aria-labelledby\": o(l)\n    }), {\n      default: y(() => [\n        _(u.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"aria-labelledby\"])), [\n      [Ln, r.value]\n    ]);\n  }\n}), Wv = /* @__PURE__ */ x({\n  __name: \"ComboboxLabel\",\n  props: {\n    for: {},\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = Zl({ id: \"\" });\n    return (n, l) => (b(), S(o(O), k(t, {\n      id: o(e).id\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"id\"]));\n  }\n}), [id, ud] = Q(\"ComboboxContent\"), dd = /* @__PURE__ */ x({\n  __name: \"ComboboxContentImpl\",\n  props: {\n    position: { default: \"inline\" },\n    bodyLock: { type: Boolean },\n    dismissable: { type: Boolean, default: !0 },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {},\n    disableOutsidePointerEvents: { type: Boolean }\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { position: l } = ae(e), s = nt();\n    ha(e.bodyLock);\n    const { forwardRef: r, currentElement: i } = R();\n    ya(s.parentElement);\n    const u = $(() => e.position === \"popper\" ? e : {}), d = It(u.value);\n    function c(f) {\n      s.onSelectedValueChange(\"\");\n    }\n    le(() => {\n      s.onContentElementChange(i.value);\n    });\n    const p = {\n      // Ensure border-box for floating-ui calculations\n      boxSizing: \"border-box\",\n      \"--radix-combobox-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n      \"--radix-combobox-content-available-width\": \"var(--radix-popper-available-width)\",\n      \"--radix-combobox-content-available-height\": \"var(--radix-popper-available-height)\",\n      \"--radix-combobox-trigger-width\": \"var(--radix-popper-anchor-width)\",\n      \"--radix-combobox-trigger-height\": \"var(--radix-popper-anchor-height)\"\n    };\n    return ud({ position: l }), (f, v) => (b(), S(o(Ca), null, {\n      default: y(() => [\n        f.dismissable ? (b(), S(o(yt), {\n          key: 0,\n          \"as-child\": \"\",\n          \"disable-outside-pointer-events\": f.disableOutsidePointerEvents,\n          onDismiss: v[0] || (v[0] = (g) => o(s).onOpenChange(!1)),\n          onFocusOutside: v[1] || (v[1] = (g) => {\n            var m;\n            (m = o(s).parentElement.value) != null && m.contains(g.target) && g.preventDefault(), n(\"focusOutside\", g);\n          }),\n          onInteractOutside: v[2] || (v[2] = (g) => n(\"interactOutside\", g)),\n          onEscapeKeyDown: v[3] || (v[3] = (g) => n(\"escapeKeyDown\", g)),\n          onPointerDownOutside: v[4] || (v[4] = (g) => {\n            var m;\n            (m = o(s).parentElement.value) != null && m.contains(g.target) && g.preventDefault(), n(\"pointerDownOutside\", g);\n          })\n        }, {\n          default: y(() => [\n            (b(), S(Ge(o(l) === \"popper\" ? o(Dt) : o(O)), k({ ...f.$attrs, ...o(d) }, {\n              id: o(s).contentId,\n              ref: o(r),\n              role: \"listbox\",\n              \"data-state\": o(s).open.value ? \"open\" : \"closed\",\n              style: {\n                // flex layout so we can place the scroll buttons properly\n                display: \"flex\",\n                flexDirection: \"column\",\n                // reset the outline by default as the content MAY get focused\n                outline: \"none\",\n                ...o(l) === \"popper\" ? p : {}\n              },\n              onPointerleave: c\n            }), {\n              default: y(() => [\n                _(f.$slots, \"default\")\n              ]),\n              _: 3\n            }, 16, [\"id\", \"data-state\", \"style\"]))\n          ]),\n          _: 3\n        }, 8, [\"disable-outside-pointer-events\"])) : (b(), S(Ge(o(l) === \"popper\" ? o(Dt) : o(O)), k({ key: 1 }, { ...f.$attrs, ...u.value }, {\n          id: o(s).contentId,\n          ref: o(r),\n          role: \"listbox\",\n          \"data-state\": o(s).open.value ? \"open\" : \"closed\",\n          style: {\n            // flex layout so we can place the scroll buttons properly\n            display: \"flex\",\n            flexDirection: \"column\",\n            // reset the outline by default as the content MAY get focused\n            outline: \"none\",\n            ...o(l) === \"popper\" ? p : {}\n          },\n          onPointerleave: c\n        }), {\n          default: y(() => [\n            _(f.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"id\", \"data-state\", \"style\"]))\n      ]),\n      _: 3\n    }));\n  }\n}), jv = /* @__PURE__ */ x({\n  __name: \"ComboboxContent\",\n  props: {\n    forceMount: { type: Boolean },\n    position: {},\n    bodyLock: { type: Boolean },\n    dismissable: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {},\n    disableOutsidePointerEvents: { type: Boolean }\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t), { forwardRef: s } = R(), r = nt();\n    return r.contentId || (r.contentId = he(void 0, \"radix-vue-combobox-content\")), (i, u) => (b(), S(o(Pe), {\n      present: i.forceMount || o(r).open.value\n    }, {\n      default: y(() => [\n        q(dd, k({ ...o(l), ...i.$attrs }, { ref: o(s) }), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16)\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), Uv = /* @__PURE__ */ x({\n  __name: \"ComboboxEmpty\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = nt(), n = $(() => e.filteredOptions.value.length === 0);\n    return (l, s) => n.value ? (b(), S(o(O), H(k({ key: 0 }, t)), {\n      default: y(() => [\n        _(l.$slots, \"default\", {}, () => [\n          me(\"No options\")\n        ])\n      ]),\n      _: 3\n    }, 16)) : ce(\"\", !0);\n  }\n});\nfunction Xa(a) {\n  const t = Ga({\n    nonce: I()\n  });\n  return $(() => {\n    var e;\n    return (a == null ? void 0 : a.value) || ((e = t.nonce) == null ? void 0 : e.value);\n  });\n}\nconst Gv = /* @__PURE__ */ x({\n  __name: \"ComboboxViewport\",\n  props: {\n    nonce: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { forwardRef: e } = R(), { nonce: n } = ae(t), l = Xa(n);\n    return (s, r) => (b(), ve(we, null, [\n      q(o(O), k({ ...s.$attrs, ...t }, {\n        ref: o(e),\n        \"data-radix-combobox-viewport\": \"\",\n        role: \"presentation\",\n        style: {\n          // we use position: 'relative' here on the `viewport` so that when we call\n          // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n          // (independent of the scrollUpButton).\n          position: \"relative\",\n          flex: 1,\n          overflow: \"auto\"\n        }\n      }), {\n        default: y(() => [\n          _(s.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16),\n      q(o(O), {\n        as: \"style\",\n        nonce: o(l)\n      }, {\n        default: y(() => [\n          me(\" /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-radix-combobox-viewport] { scrollbar-width:none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } [data-radix-combobox-viewport]::-webkit-scrollbar { display: none; } \")\n        ]),\n        _: 1\n      }, 8, [\"nonce\"])\n    ], 64));\n  }\n}), [cd, pd] = Q(\"ComboboxItem\"), fd = \"combobox.select\", qv = /* @__PURE__ */ x({\n  __name: \"ComboboxItem\",\n  props: {\n    value: {},\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { disabled: l } = ae(e), s = nt();\n    Zl({ id: \"\", options: I([]) });\n    const { forwardRef: r } = R(), i = $(\n      () => {\n        var m, w;\n        return s.multiple.value && Array.isArray(s.modelValue.value) ? (m = s.modelValue.value) == null ? void 0 : m.some((C) => Ye(C, e.value)) : Ye((w = s.modelValue) == null ? void 0 : w.value, e.value);\n      }\n    ), u = $(() => Ye(s.selectedValue.value, e.value)), d = he(void 0, \"radix-vue-combobox-item\"), c = he(void 0, \"radix-vue-combobox-option\"), p = $(() => s.isUserInputted.value ? s.searchTerm.value === \"\" || !!s.filteredOptions.value.find((m) => Ye(m, e.value)) : !0);\n    async function f(m) {\n      n(\"select\", m), !(m != null && m.defaultPrevented) && !l.value && m && s.onValueChange(e.value);\n    }\n    function v(m) {\n      if (!m)\n        return;\n      const w = { originalEvent: m, value: e.value };\n      Kt(fd, f, w);\n    }\n    async function g(m) {\n      await oe(), !m.defaultPrevented && s.onSelectedValueChange(e.value);\n    }\n    if (e.value === \"\")\n      throw new Error(\n        \"A <ComboboxItem /> must have a value prop that is not an empty string. This is because the Combobox value can be set to an empty string to clear the selection and show the placeholder.\"\n      );\n    return pd({\n      isSelected: i\n    }), (m, w) => (b(), S(o(Zt), { value: m.value }, {\n      default: y(() => [\n        Ha(q(o(O), {\n          id: o(c),\n          ref: o(r),\n          role: \"option\",\n          tabindex: \"-1\",\n          \"aria-labelledby\": o(d),\n          \"data-highlighted\": u.value ? \"\" : void 0,\n          \"aria-selected\": i.value,\n          \"data-state\": i.value ? \"checked\" : \"unchecked\",\n          \"aria-disabled\": o(l) || void 0,\n          \"data-disabled\": o(l) ? \"\" : void 0,\n          as: m.as,\n          \"as-child\": m.asChild,\n          \"data-hidden\": p.value ? void 0 : !0,\n          onClick: v,\n          onPointermove: g\n        }, {\n          default: y(() => [\n            _(m.$slots, \"default\", {}, () => [\n              me(De(m.value), 1)\n            ])\n          ]),\n          _: 3\n        }, 8, [\"id\", \"aria-labelledby\", \"data-highlighted\", \"aria-selected\", \"data-state\", \"aria-disabled\", \"data-disabled\", \"as\", \"as-child\", \"data-hidden\"]), [\n          [Ln, p.value]\n        ])\n      ]),\n      _: 3\n    }, 8, [\"value\"]));\n  }\n}), Yv = /* @__PURE__ */ x({\n  __name: \"ComboboxItemIndicator\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = cd();\n    return (n, l) => o(e).isSelected.value ? (b(), S(o(O), k({\n      key: 0,\n      \"aria-hidden\": \"true\"\n    }, t), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16)) : ce(\"\", !0);\n  }\n}), Xv = /* @__PURE__ */ x({\n  __name: \"ComboboxSeparator\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(O), k(t, { \"aria-hidden\": \"true\" }), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Zv = /* @__PURE__ */ x({\n  __name: \"ComboboxArrow\",\n  props: {\n    width: { default: 10 },\n    height: { default: 5 },\n    asChild: { type: Boolean },\n    as: { default: \"svg\" }\n  },\n  setup(a) {\n    const t = a, e = nt(), n = id();\n    return R(), (l, s) => o(e).open.value && o(n).position.value === \"popper\" ? (b(), S(o(Yt), H(k({ key: 0 }, t)), {\n      default: y(() => [\n        _(l.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16)) : ce(\"\", !0);\n  }\n}), Jv = /* @__PURE__ */ x({\n  __name: \"ComboboxPortal\",\n  props: {\n    to: {},\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(ht), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Za = /* @__PURE__ */ x({\n  __name: \"MenuAnchor\",\n  props: {\n    element: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Rt), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), no = /* @__PURE__ */ x({\n  __name: \"MenuArrow\",\n  props: {\n    width: {},\n    height: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Yt), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n});\nfunction vd() {\n  const a = I(!1);\n  return le(() => {\n    Ne(\"keydown\", () => {\n      a.value = !0;\n    }, { capture: !0, passive: !0 }), Ne([\"pointerdown\", \"pointermove\"], () => {\n      a.value = !1;\n    }, { capture: !0, passive: !0 });\n  }), a;\n}\nconst md = xl(vd), [At, Jl] = Q([\"MenuRoot\", \"MenuSub\"], \"MenuContext\"), [wa, hd] = Q(\"MenuRoot\"), oo = /* @__PURE__ */ x({\n  __name: \"MenuRoot\",\n  props: {\n    open: { type: Boolean, default: !1 },\n    dir: {},\n    modal: { type: Boolean, default: !0 }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { modal: l, dir: s } = ae(e), r = be(s), i = ne(e, \"open\", n), u = I(), d = md();\n    return Jl({\n      open: i,\n      onOpenChange: (c) => {\n        i.value = c;\n      },\n      content: u,\n      onContentChange: (c) => {\n        u.value = c;\n      }\n    }), hd({\n      onClose: () => {\n        i.value = !1;\n      },\n      isUsingKeyboardRef: d,\n      dir: r,\n      modal: l\n    }), (c, p) => (b(), S(o(Tt), null, {\n      default: y(() => [\n        _(c.$slots, \"default\")\n      ]),\n      _: 3\n    }));\n  }\n}), yd = \"rovingFocusGroup.onEntryFocus\", gd = { bubbles: !1, cancelable: !0 }, Ja = {\n  ArrowLeft: \"prev\",\n  ArrowUp: \"prev\",\n  ArrowRight: \"next\",\n  ArrowDown: \"next\",\n  PageUp: \"first\",\n  Home: \"first\",\n  PageDown: \"last\",\n  End: \"last\"\n};\nfunction bd(a, t) {\n  return t !== \"rtl\" ? a : a === \"ArrowLeft\" ? \"ArrowRight\" : a === \"ArrowRight\" ? \"ArrowLeft\" : a;\n}\nfunction Ql(a, t, e) {\n  const n = bd(a.key, e);\n  if (!(t === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(n)) && !(t === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(n)))\n    return Ja[n];\n}\nfunction es(a, t = !1, e) {\n  const n = (e == null ? void 0 : e.activeElement) ?? document.activeElement;\n  for (const l of a)\n    if (l === n || (l.focus({ preventScroll: t }), document.activeElement !== n))\n      return;\n}\nfunction Cd(a, t) {\n  return a.map((e, n) => a[(t + n) % a.length]);\n}\nconst [wd, _d] = Q(\"RovingFocusGroup\"), Ot = /* @__PURE__ */ x({\n  __name: \"RovingFocusGroup\",\n  props: {\n    orientation: { default: void 0 },\n    dir: {},\n    loop: { type: Boolean, default: !1 },\n    currentTabStopId: {},\n    defaultCurrentTabStopId: {},\n    preventScrollOnEntryFocus: { type: Boolean, default: !1 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"entryFocus\", \"update:currentTabStopId\"],\n  setup(a, { expose: t, emit: e }) {\n    const n = a, l = e, { loop: s, orientation: r, dir: i } = ae(n), u = be(i), d = ne(n, \"currentTabStopId\", l, {\n      defaultValue: n.defaultCurrentTabStopId,\n      passive: n.currentTabStopId === void 0\n    }), c = I(!1), p = I(!1), f = I(0), { getItems: v } = ba();\n    function g(w) {\n      const C = !p.value;\n      if (w.currentTarget && w.target === w.currentTarget && C && !c.value) {\n        const D = new CustomEvent(yd, gd);\n        if (w.currentTarget.dispatchEvent(D), l(\"entryFocus\", D), !D.defaultPrevented) {\n          const h = v().map((T) => T.ref).filter((T) => T.dataset.disabled !== \"\"), E = h.find((T) => T.getAttribute(\"data-active\") === \"true\"), P = h.find(\n            (T) => T.id === d.value\n          ), B = [E, P, ...h].filter(\n            Boolean\n          );\n          es(B, n.preventScrollOnEntryFocus);\n        }\n      }\n      p.value = !1;\n    }\n    function m() {\n      setTimeout(() => {\n        p.value = !1;\n      }, 1);\n    }\n    return t({\n      getItems: v\n    }), _d({\n      loop: s,\n      dir: u,\n      orientation: r,\n      currentTabStopId: d,\n      onItemFocus: (w) => {\n        d.value = w;\n      },\n      onItemShiftTab: () => {\n        c.value = !0;\n      },\n      onFocusableItemAdd: () => {\n        f.value++;\n      },\n      onFocusableItemRemove: () => {\n        f.value--;\n      }\n    }), (w, C) => (b(), S(o(Ca), null, {\n      default: y(() => [\n        q(o(O), {\n          tabindex: c.value || f.value === 0 ? -1 : 0,\n          \"data-orientation\": o(r),\n          as: w.as,\n          \"as-child\": w.asChild,\n          dir: o(u),\n          style: { outline: \"none\" },\n          onMousedown: C[0] || (C[0] = (D) => p.value = !0),\n          onMouseup: m,\n          onFocus: g,\n          onBlur: C[1] || (C[1] = (D) => c.value = !1)\n        }, {\n          default: y(() => [\n            _(w.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"tabindex\", \"data-orientation\", \"as\", \"as-child\", \"dir\"])\n      ]),\n      _: 3\n    }));\n  }\n}), kt = /* @__PURE__ */ x({\n  __name: \"RovingFocusItem\",\n  props: {\n    tabStopId: {},\n    focusable: { type: Boolean, default: !0 },\n    active: { type: Boolean, default: !0 },\n    allowShiftKey: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = a, e = wd(), n = $(() => t.tabStopId || he()), l = $(\n      () => e.currentTabStopId.value === n.value\n    ), { getItems: s } = Jt(), { primitiveElement: r, currentElement: i } = Ae(), u = $(() => {\n      var c;\n      return (c = i.value) == null ? void 0 : c.getRootNode();\n    });\n    le(() => {\n      t.focusable && e.onFocusableItemAdd();\n    }), Be(() => {\n      t.focusable && e.onFocusableItemRemove();\n    });\n    function d(c) {\n      if (c.key === \"Tab\" && c.shiftKey) {\n        e.onItemShiftTab();\n        return;\n      }\n      if (c.target !== c.currentTarget)\n        return;\n      const p = Ql(\n        c,\n        e.orientation.value,\n        e.dir.value\n      );\n      if (p !== void 0) {\n        if (c.metaKey || c.ctrlKey || c.altKey || !t.allowShiftKey && c.shiftKey)\n          return;\n        c.preventDefault();\n        let f = [...s().map((v) => v.ref).filter((v) => v.dataset.disabled !== \"\")];\n        if (p === \"last\")\n          f.reverse();\n        else if (p === \"prev\" || p === \"next\") {\n          p === \"prev\" && f.reverse();\n          const v = f.indexOf(\n            c.currentTarget\n          );\n          f = e.loop.value ? Cd(f, v + 1) : f.slice(v + 1);\n        }\n        oe(() => es(f, !1, u.value));\n      }\n    }\n    return (c, p) => (b(), S(o(Zt), null, {\n      default: y(() => [\n        q(o(O), {\n          ref_key: \"primitiveElement\",\n          ref: r,\n          tabindex: l.value ? 0 : -1,\n          \"data-orientation\": o(e).orientation.value,\n          \"data-active\": c.active,\n          \"data-disabled\": c.focusable ? void 0 : \"\",\n          as: c.as,\n          \"as-child\": c.asChild,\n          onMousedown: p[0] || (p[0] = (f) => {\n            c.focusable ? o(e).onItemFocus(n.value) : f.preventDefault();\n          }),\n          onFocus: p[1] || (p[1] = (f) => o(e).onItemFocus(n.value)),\n          onKeydown: d\n        }, {\n          default: y(() => [\n            _(c.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"tabindex\", \"data-orientation\", \"data-active\", \"data-disabled\", \"as\", \"as-child\"])\n      ]),\n      _: 3\n    }));\n  }\n}), [lo, xd] = Q(\"MenuContent\"), so = /* @__PURE__ */ x({\n  __name: \"MenuContentImpl\",\n  props: /* @__PURE__ */ fl({\n    loop: { type: Boolean },\n    disableOutsidePointerEvents: { type: Boolean },\n    disableOutsideScroll: { type: Boolean },\n    trapFocus: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  }, {\n    ...Xl\n  }),\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"entryFocus\", \"openAutoFocus\", \"closeAutoFocus\", \"dismiss\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = At(), s = wa(), { trapFocus: r, disableOutsidePointerEvents: i, loop: u } = ae(e);\n    Gn(), ha(i.value);\n    const d = I(\"\"), c = I(0), p = I(0), f = I(null), v = I(\"right\"), g = I(0), m = I(null), { createCollection: w } = Me(), { forwardRef: C, currentElement: D } = R(), h = w(D);\n    te(D, (A) => {\n      l.onContentChange(A);\n    });\n    const { handleTypeaheadSearch: E } = ga(h);\n    Be(() => {\n      window.clearTimeout(c.value);\n    });\n    function P(A) {\n      var U, W;\n      return v.value === ((U = f.value) == null ? void 0 : U.side) && pu(A, (W = f.value) == null ? void 0 : W.area);\n    }\n    async function B(A) {\n      var F;\n      n(\"openAutoFocus\", A), !A.defaultPrevented && (A.preventDefault(), (F = D.value) == null || F.focus({\n        preventScroll: !0\n      }));\n    }\n    function T(A) {\n      if (A.defaultPrevented)\n        return;\n      const U = A.target.closest(\"[data-radix-menu-content]\") === A.currentTarget, W = A.ctrlKey || A.altKey || A.metaKey, ee = A.key.length === 1, L = Bt(\n        A,\n        document.activeElement,\n        D.value,\n        {\n          loop: u.value,\n          arrowKeyOptions: \"vertical\",\n          dir: s == null ? void 0 : s.dir.value,\n          focus: !0,\n          attributeName: \"[data-radix-vue-collection-item]:not([data-disabled])\"\n        }\n      );\n      if (L)\n        return L == null ? void 0 : L.focus();\n      if (A.code === \"Space\" || (U && (A.key === \"Tab\" && A.preventDefault(), !W && ee && E(A.key)), A.target !== D.value) || !iu.includes(A.key))\n        return;\n      A.preventDefault();\n      const G = h.value;\n      Hl.includes(A.key) && G.reverse(), $n(G);\n    }\n    function M(A) {\n      var F, U;\n      (U = (F = A == null ? void 0 : A.currentTarget) == null ? void 0 : F.contains) != null && U.call(F, A.target) || (window.clearTimeout(c.value), d.value = \"\");\n    }\n    function V(A) {\n      var W;\n      if (!ua(A))\n        return;\n      const F = A.target, U = g.value !== A.clientX;\n      if ((W = A == null ? void 0 : A.currentTarget) != null && W.contains(F) && U) {\n        const ee = A.clientX > g.value ? \"right\" : \"left\";\n        v.value = ee, g.value = A.clientX;\n      }\n    }\n    return xd({\n      onItemEnter: (A) => !!P(A),\n      onItemLeave: (A) => {\n        var F;\n        P(A) || ((F = D.value) == null || F.focus(), m.value = null);\n      },\n      onTriggerLeave: (A) => !!P(A),\n      searchRef: d,\n      pointerGraceTimerRef: p,\n      onPointerGraceIntentChange: (A) => {\n        f.value = A;\n      }\n    }), (A, F) => (b(), S(o(Ya), {\n      \"as-child\": \"\",\n      trapped: o(r),\n      onMountAutoFocus: B,\n      onUnmountAutoFocus: F[7] || (F[7] = (U) => n(\"closeAutoFocus\", U))\n    }, {\n      default: y(() => [\n        q(o(yt), {\n          \"as-child\": \"\",\n          \"disable-outside-pointer-events\": o(i),\n          onEscapeKeyDown: F[2] || (F[2] = (U) => n(\"escapeKeyDown\", U)),\n          onPointerDownOutside: F[3] || (F[3] = (U) => n(\"pointerDownOutside\", U)),\n          onFocusOutside: F[4] || (F[4] = (U) => n(\"focusOutside\", U)),\n          onInteractOutside: F[5] || (F[5] = (U) => n(\"interactOutside\", U)),\n          onDismiss: F[6] || (F[6] = (U) => n(\"dismiss\"))\n        }, {\n          default: y(() => [\n            q(o(Ot), {\n              \"current-tab-stop-id\": m.value,\n              \"onUpdate:currentTabStopId\": F[0] || (F[0] = (U) => m.value = U),\n              \"as-child\": \"\",\n              orientation: \"vertical\",\n              dir: o(s).dir.value,\n              loop: o(u),\n              onEntryFocus: F[1] || (F[1] = (U) => {\n                n(\"entryFocus\", U), o(s).isUsingKeyboardRef.value || U.preventDefault();\n              })\n            }, {\n              default: y(() => [\n                q(o(Dt), {\n                  ref: o(C),\n                  role: \"menu\",\n                  as: A.as,\n                  \"as-child\": A.asChild,\n                  \"aria-orientation\": \"vertical\",\n                  \"data-radix-menu-content\": \"\",\n                  \"data-state\": o(Qn)(o(l).open.value),\n                  dir: o(s).dir.value,\n                  side: A.side,\n                  \"side-offset\": A.sideOffset,\n                  align: A.align,\n                  \"align-offset\": A.alignOffset,\n                  \"avoid-collisions\": A.avoidCollisions,\n                  \"collision-boundary\": A.collisionBoundary,\n                  \"collision-padding\": A.collisionPadding,\n                  \"arrow-padding\": A.arrowPadding,\n                  \"prioritize-position\": A.prioritizePosition,\n                  sticky: A.sticky,\n                  \"hide-when-detached\": A.hideWhenDetached,\n                  onKeydown: T,\n                  onBlur: M,\n                  onPointermove: V\n                }, {\n                  default: y(() => [\n                    _(A.$slots, \"default\")\n                  ]),\n                  _: 3\n                }, 8, [\"as\", \"as-child\", \"data-state\", \"dir\", \"side\", \"side-offset\", \"align\", \"align-offset\", \"avoid-collisions\", \"collision-boundary\", \"collision-padding\", \"arrow-padding\", \"prioritize-position\", \"sticky\", \"hide-when-detached\"])\n              ]),\n              _: 3\n            }, 8, [\"current-tab-stop-id\", \"dir\", \"loop\"])\n          ]),\n          _: 3\n        }, 8, [\"disable-outside-pointer-events\"])\n      ]),\n      _: 3\n    }, 8, [\"trapped\"]));\n  }\n}), ts = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"MenuItemImpl\",\n  props: {\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = lo(), { forwardRef: n } = R(), l = I(!1);\n    async function s(i) {\n      if (!i.defaultPrevented && ua(i)) {\n        if (t.disabled)\n          e.onItemLeave(i);\n        else if (!e.onItemEnter(i)) {\n          const d = i.currentTarget;\n          d == null || d.focus({ preventScroll: !0 });\n        }\n      }\n    }\n    async function r(i) {\n      await oe(), !i.defaultPrevented && ua(i) && e.onItemLeave(i);\n    }\n    return (i, u) => (b(), S(o(Zt), null, {\n      default: y(() => [\n        q(o(O), k({\n          ref: o(n),\n          role: \"menuitem\",\n          tabindex: \"-1\"\n        }, i.$attrs, {\n          as: i.as,\n          \"as-child\": i.asChild,\n          \"data-radix-vue-collection-item\": \"\",\n          \"aria-disabled\": i.disabled || void 0,\n          \"data-disabled\": i.disabled ? \"\" : void 0,\n          \"data-highlighted\": l.value ? \"\" : void 0,\n          onPointermove: s,\n          onPointerleave: r,\n          onFocus: u[0] || (u[0] = async (d) => {\n            await oe(), !(d.defaultPrevented || i.disabled) && (l.value = !0);\n          }),\n          onBlur: u[1] || (u[1] = async (d) => {\n            await oe(), !d.defaultPrevented && (l.value = !1);\n          })\n        }), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"as\", \"as-child\", \"aria-disabled\", \"data-disabled\", \"data-highlighted\"])\n      ]),\n      _: 3\n    }));\n  }\n}), _a = /* @__PURE__ */ x({\n  __name: \"MenuItem\",\n  props: {\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { forwardRef: l, currentElement: s } = R(), r = wa(), i = lo(), u = I(!1);\n    async function d() {\n      const c = s.value;\n      if (!e.disabled && c) {\n        const p = new CustomEvent(su, {\n          bubbles: !0,\n          cancelable: !0\n        });\n        n(\"select\", p), await oe(), p.defaultPrevented ? u.value = !1 : r.onClose();\n      }\n    }\n    return (c, p) => (b(), S(ts, k(e, {\n      ref: o(l),\n      onClick: d,\n      onPointerdown: p[0] || (p[0] = () => {\n        u.value = !0;\n      }),\n      onPointerup: p[1] || (p[1] = async (f) => {\n        var v;\n        await oe(), !f.defaultPrevented && (u.value || (v = f.currentTarget) == null || v.click());\n      }),\n      onKeydown: p[2] || (p[2] = async (f) => {\n        const v = o(i).searchRef.value !== \"\";\n        c.disabled || v && f.key === \" \" || o(Dn).includes(f.key) && (f.currentTarget.click(), f.preventDefault());\n      })\n    }), {\n      default: y(() => [\n        _(c.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), [Sd, as] = Q(\n  [\"MenuCheckboxItem\", \"MenuRadioItem\"],\n  \"MenuItemIndicatorContext\"\n), ro = /* @__PURE__ */ x({\n  __name: \"MenuItemIndicator\",\n  props: {\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = Sd({\n      checked: I(!1)\n    });\n    return (e, n) => (b(), S(o(Pe), {\n      present: e.forceMount || o(Fa)(o(t).checked.value) || o(t).checked.value === !0\n    }, {\n      default: y(() => [\n        q(o(O), {\n          as: e.as,\n          \"as-child\": e.asChild,\n          \"data-state\": o(eo)(o(t).checked.value)\n        }, {\n          default: y(() => [\n            _(e.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"as\", \"as-child\", \"data-state\"])\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), io = /* @__PURE__ */ x({\n  __name: \"MenuCheckboxItem\",\n  props: {\n    checked: { type: [Boolean, String], default: !1 },\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\", \"update:checked\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = ne(e, \"checked\", n);\n    return as({ checked: l }), (s, r) => (b(), S(_a, k({ role: \"menuitemcheckbox\" }, e, {\n      \"aria-checked\": o(Fa)(o(l)) ? \"mixed\" : o(l),\n      \"data-state\": o(eo)(o(l)),\n      onSelect: r[0] || (r[0] = async (i) => {\n        n(\"select\", i), o(Fa)(o(l)) ? l.value = !0 : l.value = !o(l);\n      })\n    }), {\n      default: y(() => [\n        _(s.$slots, \"default\", { checked: o(l) })\n      ]),\n      _: 3\n    }, 16, [\"aria-checked\", \"data-state\"]));\n  }\n}), Ed = /* @__PURE__ */ x({\n  __name: \"MenuRootContentModal\",\n  props: {\n    loop: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"entryFocus\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = xe(e, n), s = At(), { forwardRef: r, currentElement: i } = R();\n    return ya(i), (u, d) => (b(), S(so, k(o(l), {\n      ref: o(r),\n      \"trap-focus\": o(s).open.value,\n      \"disable-outside-pointer-events\": o(s).open.value,\n      \"disable-outside-scroll\": !0,\n      onDismiss: d[0] || (d[0] = (c) => o(s).onOpenChange(!1)),\n      onFocusOutside: d[1] || (d[1] = ue((c) => n(\"focusOutside\", c), [\"prevent\"]))\n    }), {\n      default: y(() => [\n        _(u.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"trap-focus\", \"disable-outside-pointer-events\"]));\n  }\n}), Pd = /* @__PURE__ */ x({\n  __name: \"MenuRootContentNonModal\",\n  props: {\n    loop: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"entryFocus\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t), s = At();\n    return (r, i) => (b(), S(so, k(o(l), {\n      \"trap-focus\": !1,\n      \"disable-outside-pointer-events\": !1,\n      \"disable-outside-scroll\": !1,\n      onDismiss: i[0] || (i[0] = (u) => o(s).onOpenChange(!1))\n    }), {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), uo = /* @__PURE__ */ x({\n  __name: \"MenuContent\",\n  props: {\n    forceMount: { type: Boolean },\n    loop: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"entryFocus\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t), s = At(), r = wa();\n    return (i, u) => (b(), S(o(Pe), {\n      present: i.forceMount || o(s).open.value\n    }, {\n      default: y(() => [\n        o(r).modal.value ? (b(), S(Ed, H(k({ key: 0 }, { ...i.$attrs, ...o(l) })), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16)) : (b(), S(Pd, H(k({ key: 1 }, { ...i.$attrs, ...o(l) })), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16))\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), Qa = /* @__PURE__ */ x({\n  __name: \"MenuGroup\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), k({ role: \"group\" }, t), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), co = /* @__PURE__ */ x({\n  __name: \"MenuLabel\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), po = /* @__PURE__ */ x({\n  __name: \"MenuPortal\",\n  props: {\n    to: {},\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(ht), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), [Dd, $d] = Q(\"MenuRadioGroup\"), fo = /* @__PURE__ */ x({\n  __name: \"MenuRadioGroup\",\n  props: {\n    modelValue: { default: \"\" },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, l = ne(e, \"modelValue\", t);\n    return $d({\n      modelValue: l,\n      onValueChange: (s) => {\n        l.value = s;\n      }\n    }), (s, r) => (b(), S(Qa, H(j(e)), {\n      default: y(() => [\n        _(s.$slots, \"default\", { modelValue: o(l) })\n      ]),\n      _: 3\n    }, 16));\n  }\n}), vo = /* @__PURE__ */ x({\n  __name: \"MenuRadioItem\",\n  props: {\n    value: {},\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { value: l } = ae(e), s = Dd(), r = $(\n      () => s.modelValue.value === (l == null ? void 0 : l.value)\n    );\n    return as({ checked: r }), (i, u) => (b(), S(_a, k({ role: \"menuitemradio\" }, e, {\n      \"aria-checked\": r.value,\n      \"data-state\": o(eo)(r.value),\n      onSelect: u[0] || (u[0] = async (d) => {\n        n(\"select\", d), o(s).onValueChange(o(l));\n      })\n    }), {\n      default: y(() => [\n        _(i.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"aria-checked\", \"data-state\"]));\n  }\n}), mo = /* @__PURE__ */ x({\n  __name: \"MenuSeparator\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), k(t, {\n      role: \"separator\",\n      \"aria-orientation\": \"horizontal\"\n    }), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), [ns, Bd] = Q(\"MenuSub\"), ho = /* @__PURE__ */ x({\n  __name: \"MenuSub\",\n  props: {\n    open: { type: Boolean, default: void 0 }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, l = ne(e, \"open\", t, {\n      defaultValue: !1,\n      passive: e.open === void 0\n    }), s = At(), r = I(), i = I();\n    return ge((u) => {\n      (s == null ? void 0 : s.open.value) === !1 && (l.value = !1), u(() => l.value = !1);\n    }), Jl({\n      open: l,\n      onOpenChange: (u) => {\n        l.value = u;\n      },\n      content: i,\n      onContentChange: (u) => {\n        i.value = u;\n      }\n    }), Bd({\n      triggerId: \"\",\n      contentId: \"\",\n      trigger: r,\n      onTriggerChange: (u) => {\n        r.value = u;\n      }\n    }), (u, d) => (b(), S(o(Tt), null, {\n      default: y(() => [\n        _(u.$slots, \"default\")\n      ]),\n      _: 3\n    }));\n  }\n}), yo = /* @__PURE__ */ x({\n  __name: \"MenuSubContent\",\n  props: {\n    forceMount: { type: Boolean },\n    loop: { type: Boolean },\n    sideOffset: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean, default: !0 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"entryFocus\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t), s = At(), r = wa(), i = ns(), { forwardRef: u, currentElement: d } = R();\n    return i.contentId || (i.contentId = he(void 0, \"radix-vue-menu-sub-content\")), (c, p) => (b(), S(o(Pe), {\n      present: c.forceMount || o(s).open.value\n    }, {\n      default: y(() => [\n        q(so, k(o(l), {\n          id: o(i).contentId,\n          ref: o(u),\n          \"aria-labelledby\": o(i).triggerId,\n          align: \"start\",\n          side: o(r).dir.value === \"rtl\" ? \"left\" : \"right\",\n          \"disable-outside-pointer-events\": !1,\n          \"disable-outside-scroll\": !1,\n          \"trap-focus\": !1,\n          onOpenAutoFocus: p[0] || (p[0] = ue((f) => {\n            var v;\n            o(r).isUsingKeyboardRef.value && ((v = o(d)) == null || v.focus());\n          }, [\"prevent\"])),\n          onCloseAutoFocus: p[1] || (p[1] = ue(() => {\n          }, [\"prevent\"])),\n          onFocusOutside: p[2] || (p[2] = (f) => {\n            f.defaultPrevented || f.target !== o(i).trigger.value && o(s).onOpenChange(!1);\n          }),\n          onEscapeKeyDown: p[3] || (p[3] = (f) => {\n            o(r).onClose(), f.preventDefault();\n          }),\n          onKeydown: p[4] || (p[4] = (f) => {\n            var m, w;\n            const v = (m = f.currentTarget) == null ? void 0 : m.contains(f.target), g = o(du)[o(r).dir.value].includes(f.key);\n            v && g && (o(s).onOpenChange(!1), (w = o(i).trigger.value) == null || w.focus(), f.preventDefault());\n          })\n        }), {\n          default: y(() => [\n            _(c.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"id\", \"aria-labelledby\", \"side\"])\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), go = /* @__PURE__ */ x({\n  __name: \"MenuSubTrigger\",\n  props: {\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = At(), n = wa(), l = ns(), s = lo(), r = I(null);\n    l.triggerId || (l.triggerId = he(void 0, \"radix-vue-menu-sub-trigger\"));\n    function i() {\n      r.value && window.clearTimeout(r.value), r.value = null;\n    }\n    Be(() => {\n      i();\n    });\n    function u(p) {\n      !ua(p) || s.onItemEnter(p) || !t.disabled && !e.open.value && !r.value && (s.onPointerGraceIntentChange(null), r.value = window.setTimeout(() => {\n        e.onOpenChange(!0), i();\n      }, 100));\n    }\n    async function d(p) {\n      var v, g;\n      if (!ua(p))\n        return;\n      i();\n      const f = (v = e.content.value) == null ? void 0 : v.getBoundingClientRect();\n      if (f != null && f.width) {\n        const m = (g = e.content.value) == null ? void 0 : g.dataset.side, w = m === \"right\", C = w ? -5 : 5, D = f[w ? \"left\" : \"right\"], h = f[w ? \"right\" : \"left\"];\n        s.onPointerGraceIntentChange({\n          area: [\n            // Apply a bleed on clientX to ensure that our exit point is\n            // consistently within polygon bounds\n            { x: p.clientX + C, y: p.clientY },\n            { x: D, y: f.top },\n            { x: h, y: f.top },\n            { x: h, y: f.bottom },\n            { x: D, y: f.bottom }\n          ],\n          side: m\n        }), window.clearTimeout(s.pointerGraceTimerRef.value), s.pointerGraceTimerRef.value = window.setTimeout(\n          () => s.onPointerGraceIntentChange(null),\n          300\n        );\n      } else {\n        if (s.onTriggerLeave(p))\n          return;\n        s.onPointerGraceIntentChange(null);\n      }\n    }\n    async function c(p) {\n      var v;\n      const f = s.searchRef.value !== \"\";\n      t.disabled || f && p.key === \" \" || uu[n.dir.value].includes(p.key) && (e.onOpenChange(!0), await oe(), (v = e.content.value) == null || v.focus(), p.preventDefault());\n    }\n    return (p, f) => (b(), S(Za, { \"as-child\": \"\" }, {\n      default: y(() => [\n        q(ts, k(t, {\n          id: o(l).triggerId,\n          ref: (v) => {\n            var g;\n            (g = o(l)) == null || g.onTriggerChange(v == null ? void 0 : v.$el);\n          },\n          \"aria-haspopup\": \"menu\",\n          \"aria-expanded\": o(e).open.value,\n          \"aria-controls\": o(l).contentId,\n          \"data-state\": o(Qn)(o(e).open.value),\n          onClick: f[0] || (f[0] = async (v) => {\n            t.disabled || v.defaultPrevented || (v.currentTarget.focus(), o(e).open.value || o(e).onOpenChange(!0));\n          }),\n          onPointermove: u,\n          onPointerleave: d,\n          onKeydown: c\n        }), {\n          default: y(() => [\n            _(p.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"id\", \"aria-expanded\", \"aria-controls\", \"data-state\"])\n      ]),\n      _: 3\n    }));\n  }\n}), [os, Id] = Q(\"ContextMenuRoot\"), Qv = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"ContextMenuRoot\",\n  props: {\n    dir: {},\n    modal: { type: Boolean, default: !0 }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { dir: l, modal: s } = ae(e);\n    R();\n    const r = be(l), i = I(!1);\n    return Id({\n      open: i,\n      onOpenChange: (u) => {\n        i.value = u;\n      },\n      dir: r,\n      modal: s\n    }), te(i, (u) => {\n      n(\"update:open\", u);\n    }), (u, d) => (b(), S(o(oo), {\n      open: i.value,\n      \"onUpdate:open\": d[0] || (d[0] = (c) => i.value = c),\n      dir: o(r),\n      modal: o(s)\n    }, {\n      default: y(() => [\n        _(u.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"open\", \"dir\", \"modal\"]));\n  }\n});\nfunction Go(a) {\n  return a.pointerType !== \"mouse\";\n}\nconst em = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"ContextMenuTrigger\",\n  props: {\n    disabled: { type: Boolean, default: !1 },\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = a, { disabled: e } = ae(t), { forwardRef: n } = R(), l = os(), s = I({ x: 0, y: 0 }), r = $(() => ({\n      getBoundingClientRect: () => ({\n        width: 0,\n        height: 0,\n        left: s.value.x,\n        right: s.value.x,\n        top: s.value.y,\n        bottom: s.value.y,\n        ...s.value\n      })\n    })), i = I(0);\n    function u() {\n      window.clearTimeout(i.value);\n    }\n    function d(v) {\n      s.value = { x: v.clientX, y: v.clientY }, l.onOpenChange(!0);\n    }\n    async function c(v) {\n      e.value || (await oe(), v.defaultPrevented || (u(), d(v), v.preventDefault()));\n    }\n    async function p(v) {\n      e.value || (await oe(), Go(v) && !v.defaultPrevented && (u(), i.value = window.setTimeout(() => d(v), 700)));\n    }\n    async function f(v) {\n      e.value || (await oe(), Go(v) && !v.defaultPrevented && u());\n    }\n    return (v, g) => (b(), ve(we, null, [\n      q(o(Za), {\n        as: \"template\",\n        element: r.value\n      }, null, 8, [\"element\"]),\n      q(o(O), k({\n        ref: o(n),\n        as: v.as,\n        \"as-child\": v.asChild,\n        \"data-state\": o(l).open.value ? \"open\" : \"closed\",\n        \"data-disabled\": o(e) ? \"\" : void 0,\n        style: {\n          WebkitTouchCallout: \"none\"\n        }\n      }, v.$attrs, {\n        onContextmenu: c,\n        onPointerdown: p,\n        onPointermove: f,\n        onPointercancel: f,\n        onPointerup: f\n      }), {\n        default: y(() => [\n          _(v.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16, [\"as\", \"as-child\", \"data-state\", \"data-disabled\"])\n    ], 64));\n  }\n}), tm = /* @__PURE__ */ x({\n  __name: \"ContextMenuPortal\",\n  props: {\n    to: {},\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(po), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), am = /* @__PURE__ */ x({\n  __name: \"ContextMenuContent\",\n  props: {\n    forceMount: { type: Boolean },\n    loop: { type: Boolean },\n    alignOffset: { default: 0 },\n    avoidCollisions: { type: Boolean, default: !0 },\n    collisionBoundary: { default: () => [] },\n    collisionPadding: { default: 0 },\n    sticky: { default: \"partial\" },\n    hideWhenDetached: { type: Boolean, default: !1 },\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t);\n    R();\n    const s = os(), r = I(!1);\n    return (i, u) => (b(), S(o(uo), k(o(l), {\n      side: \"right\",\n      \"side-offset\": 2,\n      align: \"start\",\n      style: {\n        \"--radix-context-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n        \"--radix-context-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n        \"--radix-context-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n        \"--radix-context-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n        \"--radix-context-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n      },\n      onCloseAutoFocus: u[0] || (u[0] = (d) => {\n        !d.defaultPrevented && r.value && d.preventDefault(), r.value = !1;\n      }),\n      onInteractOutside: u[1] || (u[1] = (d) => {\n        !d.defaultPrevented && !o(s).modal.value && (r.value = !0);\n      })\n    }), {\n      default: y(() => [\n        _(i.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), nm = /* @__PURE__ */ x({\n  __name: \"ContextMenuArrow\",\n  props: {\n    width: { default: 10 },\n    height: { default: 5 },\n    asChild: { type: Boolean },\n    as: { default: \"svg\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(no), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), om = /* @__PURE__ */ x({\n  __name: \"ContextMenuItem\",\n  props: {\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    return R(), (s, r) => (b(), S(o(_a), H(j({ ...e, ...o(l) })), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), lm = /* @__PURE__ */ x({\n  __name: \"ContextMenuGroup\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(Qa), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), sm = /* @__PURE__ */ x({\n  __name: \"ContextMenuSeparator\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(mo), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), rm = /* @__PURE__ */ x({\n  __name: \"ContextMenuCheckboxItem\",\n  props: {\n    checked: { type: [Boolean, String] },\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\", \"update:checked\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    return R(), (s, r) => (b(), S(o(io), H(j({ ...e, ...o(l) })), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), im = /* @__PURE__ */ x({\n  __name: \"ContextMenuItemIndicator\",\n  props: {\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(ro), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), um = /* @__PURE__ */ x({\n  __name: \"ContextMenuLabel\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(co), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), dm = /* @__PURE__ */ x({\n  __name: \"ContextMenuRadioGroup\",\n  props: {\n    modelValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    return R(), (s, r) => (b(), S(o(fo), H(j({ ...e, ...o(l) })), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), cm = /* @__PURE__ */ x({\n  __name: \"ContextMenuRadioItem\",\n  props: {\n    value: {},\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    return R(), (s, r) => (b(), S(o(vo), H(j({ ...e, ...o(l) })), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), pm = /* @__PURE__ */ x({\n  __name: \"ContextMenuSub\",\n  props: {\n    defaultOpen: { type: Boolean },\n    open: { type: Boolean, default: void 0 }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t;\n    R();\n    const l = ne(e, \"open\", n, {\n      defaultValue: e.defaultOpen,\n      passive: e.open === void 0\n    });\n    return (s, r) => (b(), S(o(ho), {\n      open: o(l),\n      \"onUpdate:open\": r[0] || (r[0] = (i) => Xe(l) ? l.value = i : null)\n    }, {\n      default: y(() => [\n        _(s.$slots, \"default\", { open: o(l) })\n      ]),\n      _: 3\n    }, 8, [\"open\"]));\n  }\n}), fm = /* @__PURE__ */ x({\n  __name: \"ContextMenuSubContent\",\n  props: {\n    forceMount: { type: Boolean },\n    loop: { type: Boolean },\n    sideOffset: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"entryFocus\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t);\n    return R(), (s, r) => (b(), S(o(yo), k(o(l), { style: {\n      \"--radix-context-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n      \"--radix-context-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n      \"--radix-context-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n      \"--radix-context-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n      \"--radix-context-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n    } }), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), vm = /* @__PURE__ */ x({\n  __name: \"ContextMenuSubTrigger\",\n  props: {\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(go), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Td = [\"hour\", \"minute\", \"second\"];\nfunction Lt(a) {\n  const { formatter: t } = a, e = Kn.map((n) => [n, a.value[n]]);\n  if (\"hour\" in a.value) {\n    const n = bl.map((s) => s === \"dayPeriod\" ? [s, t.dayPeriod(Fe(a.value))] : [s, a.value[s]]), l = [...e, ...n];\n    return Object.fromEntries(l);\n  }\n  return Object.fromEntries(e);\n}\nfunction ls(a) {\n  const t = Cl.map((e) => e === \"dayPeriod\" ? [e, \"AM\"] : [e, null]).filter(([e]) => e === \"literal\" || e === null ? !1 : a === \"day\" ? !Td.includes(e) && e !== \"dayPeriod\" : !0);\n  return Object.fromEntries(t);\n}\nfunction Rd(a) {\n  const { segmentValues: t, formatter: e, locale: n } = a;\n  function l(r) {\n    if (\"hour\" in t) {\n      const i = t[r];\n      return i !== null ? r === \"day\" && t.month !== null ? e.part(a.dateRef.set({ [r]: i, month: t.month }), r, {\n        hourCycle: a.hourCycle === 24 ? \"h24\" : void 0\n      }) : e.part(a.dateRef.set({ [r]: i }), r, {\n        hourCycle: a.hourCycle === 24 ? \"h24\" : void 0\n      }) : yn(r, \"\", n.value);\n    } else {\n      if (Yr(r)) {\n        const i = t[r];\n        return i !== null ? r === \"day\" && t.month !== null ? e.part(a.dateRef.set({ [r]: i, month: t.month }), r) : e.part(a.dateRef.set({ [r]: i }), r) : yn(r, \"\", n.value);\n      }\n      return \"\";\n    }\n  }\n  return Object.keys(t).reduce((r, i) => {\n    if (!wl(i))\n      return r;\n    if (\"hour\" in t && i === \"dayPeriod\") {\n      const u = t[i];\n      u !== null ? r[i] = u : r[i] = yn(i, \"AM\", n.value);\n    } else\n      r[i] = l(i);\n    return r;\n  }, {});\n}\nfunction Ad(a) {\n  const { granularity: t, formatter: e, contentObj: n, hideTimeZone: l, hourCycle: s } = a;\n  return e.toParts(a.dateRef, Xr(t, s)).map((u) => [\"literal\", \"timeZoneName\", null].includes(u.type) || !wl(u.type) ? {\n    part: u.type,\n    value: u.value\n  } : {\n    part: u.type,\n    value: n[u.type]\n  }).filter((u) => !(u.part === null || u.value === null || u.part === \"timeZoneName\" && (!yl(a.dateRef) || l)));\n}\nfunction In(a) {\n  const t = Rd(a), e = Ad({\n    contentObj: t,\n    ...a\n  });\n  return {\n    obj: t,\n    arr: e\n  };\n}\nfunction tt(a) {\n  const t = Qe();\n  return a === t.ARROW_RIGHT || a === t.ARROW_LEFT;\n}\nfunction xt(a) {\n  return !Number.isNaN(Number.parseInt(a));\n}\nfunction st(a) {\n  const t = Qe();\n  return !!([\n    t.ENTER,\n    t.ARROW_UP,\n    t.ARROW_DOWN,\n    t.ARROW_LEFT,\n    t.ARROW_RIGHT,\n    t.BACKSPACE,\n    t.SPACE,\n    \"a\",\n    \"A\",\n    \"p\",\n    \"P\"\n  ].includes(a) || xt(a));\n}\nfunction Na(a) {\n  return Array.from(a.querySelectorAll(\"[data-radix-vue-date-field-segment]\")).filter((t) => t.getAttribute(\"data-radix-vue-date-field-segment\") !== \"literal\");\n}\nconst Od = [\"id\", \"value\", \"name\", \"disabled\", \"required\"], [kd, Md] = Q(\"DateFieldRoot\"), Vd = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"DateFieldRoot\",\n  props: {\n    defaultValue: { default: void 0 },\n    defaultPlaceholder: {},\n    placeholder: { default: void 0 },\n    modelValue: {},\n    hourCycle: {},\n    granularity: {},\n    hideTimeZone: { type: Boolean },\n    maxValue: {},\n    minValue: {},\n    locale: { default: \"en\" },\n    disabled: { type: Boolean, default: !1 },\n    readonly: { type: Boolean, default: !1 },\n    isDateUnavailable: { type: Function, default: void 0 },\n    name: {},\n    required: { type: Boolean },\n    id: {},\n    dir: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\", \"update:placeholder\"],\n  setup(a, { expose: t, emit: e }) {\n    const n = a, l = e, { locale: s, disabled: r, readonly: i, isDateUnavailable: u, granularity: d, defaultValue: c, dir: p } = ae(n), f = Un(n.locale), v = be(p), { primitiveElement: g, currentElement: m } = Ae(), w = I(/* @__PURE__ */ new Set());\n    le(() => {\n      Na(m.value).forEach((z) => w.value.add(z));\n    });\n    const C = ne(n, \"modelValue\", l, {\n      defaultValue: c.value,\n      passive: n.modelValue === void 0\n    }), D = Ut({\n      defaultPlaceholder: n.placeholder,\n      granularity: d.value,\n      defaultValue: C.value\n    }), h = ne(n, \"placeholder\", l, {\n      defaultValue: n.defaultPlaceholder ?? D.copy(),\n      passive: n.placeholder === void 0\n    }), E = $(() => n.granularity ? ra(h.value) ? n.granularity : \"day\" : ra(h.value) ? \"minute\" : \"day\"), P = $(() => {\n      var z;\n      return C.value ? !!((z = u.value) != null && z.call(u, C.value) || n.minValue && Le(C.value, n.minValue) || n.maxValue && Le(n.maxValue, C.value)) : !1;\n    }), B = ls(E.value), T = I(C.value ? { ...Lt({ value: C.value, formatter: f }) } : { ...B }), M = $(() => In({\n      granularity: E.value,\n      dateRef: h.value,\n      formatter: f,\n      hideTimeZone: n.hideTimeZone,\n      hourCycle: n.hourCycle,\n      segmentValues: T.value,\n      locale: s\n    })), V = $(() => M.value.arr), A = $(() => V.value.filter(({ part: z }) => z !== \"literal\"));\n    te(s, (z) => {\n      f.getLocale() !== z && (f.setLocale(z), oe(() => {\n        w.value.clear(), Na(m.value).forEach((Y) => w.value.add(Y));\n      }));\n    }), te(C, (z) => {\n      z !== void 0 && (!Ee(h.value, z) || h.value.compare(z) !== 0) && (h.value = z.copy());\n    }), te([C, s], ([z]) => {\n      z !== void 0 ? T.value = { ...Lt({ value: z, formatter: f }) } : Object.values(T.value).every((Y) => Y === null) && (T.value = { ...B });\n    });\n    const F = I(null), U = $(() => Array.from(w.value).findIndex((z) => {\n      var Y;\n      return z.getAttribute(\"data-radix-vue-date-field-segment\") === ((Y = F.value) == null ? void 0 : Y.getAttribute(\"data-radix-vue-date-field-segment\"));\n    })), W = $(() => {\n      const z = v.value === \"rtl\" ? -1 : 1;\n      return (z < 0 ? U.value < 0 : U.value > w.value.size - 1) ? null : Array.from(w.value)[U.value + z];\n    }), ee = $(() => {\n      const z = v.value === \"rtl\" ? -1 : 1;\n      return (z > 0 ? U.value < 0 : U.value > w.value.size - 1) ? null : Array.from(w.value)[U.value - z];\n    }), L = Qe();\n    function G(z) {\n      var Y, K;\n      tt(z.key) && (z.key === L.ARROW_LEFT && ((Y = ee.value) == null || Y.focus()), z.key === L.ARROW_RIGHT && ((K = W.value) == null || K.focus()));\n    }\n    function N(z) {\n      F.value = z;\n    }\n    return Md({\n      isDateUnavailable: u.value,\n      locale: s,\n      modelValue: C,\n      placeholder: h,\n      disabled: r,\n      formatter: f,\n      hourCycle: n.hourCycle,\n      readonly: i,\n      segmentValues: T,\n      isInvalid: P,\n      segmentContents: A,\n      elements: w,\n      setFocusedElement: N,\n      focusNext() {\n        var z;\n        (z = W.value) == null || z.focus();\n      }\n    }), t({\n      /** Helper to set the focused element inside the DateField */\n      setFocusedElement: N\n    }), (z, Y) => (b(), ve(we, null, [\n      q(o(O), k(z.$attrs, {\n        ref_key: \"primitiveElement\",\n        ref: g,\n        role: \"group\",\n        \"aria-disabled\": o(r) ? !0 : void 0,\n        \"data-disabled\": o(r) ? \"\" : void 0,\n        \"data-readonly\": o(i) ? \"\" : void 0,\n        \"data-invalid\": P.value ? \"\" : void 0,\n        dir: o(v),\n        onKeydown: ie(G, [\"left\", \"right\"])\n      }), {\n        default: y(() => [\n          _(z.$slots, \"default\", {\n            modelValue: o(C),\n            segments: V.value,\n            isInvalid: P.value\n          })\n        ]),\n        _: 3\n      }, 16, [\"aria-disabled\", \"data-disabled\", \"data-readonly\", \"data-invalid\", \"dir\"]),\n      Ue(\"input\", {\n        id: z.id,\n        type: \"text\",\n        tabindex: \"-1\",\n        \"aria-hidden\": \"true\",\n        value: o(C) ? o(C).toString() : \"\",\n        name: z.name,\n        disabled: o(r),\n        required: z.required,\n        style: {\n          transform: \"translateX(-100%)\",\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          opacity: 0,\n          margin: 0\n        },\n        onFocus: Y[0] || (Y[0] = (K) => {\n          var J, Z;\n          return (Z = (J = Array.from(w.value)) == null ? void 0 : J[0]) == null ? void 0 : Z.focus();\n        })\n      }, null, 40, Od)\n    ], 64));\n  }\n});\nfunction Mt(a) {\n  return {\n    role: \"spinbutton\",\n    contenteditable: !0,\n    tabindex: a.disabled ? void 0 : 0,\n    spellcheck: !1,\n    inputmode: \"numeric\",\n    autocorrect: \"off\",\n    enterkeyhint: \"next\",\n    style: \"caret-color: transparent;\"\n  };\n}\nfunction Fd(a) {\n  const { segmentValues: t, placeholder: e } = a, n = t.day === null, l = t.day ? e.set({ day: t.day }) : e, s = l.day, r = 1, i = Pt(l), u = n ? \"Empty\" : `${s}`;\n  return {\n    ...Mt(a),\n    \"aria-label\": \"day,\",\n    \"aria-valuemin\": r,\n    \"aria-valuemax\": i,\n    \"aria-valuenow\": s,\n    \"aria-valuetext\": u,\n    \"data-placeholder\": n ? \"\" : void 0\n  };\n}\nfunction Ld(a) {\n  const { segmentValues: t, placeholder: e, formatter: n } = a, l = t.month === null, s = t.month ? e.set({ month: t.month }) : e, r = s.month, i = 1, u = 12, d = l ? \"Empty\" : `${r} - ${n.fullMonth(Fe(s))}`;\n  return {\n    ...Mt(a),\n    \"aria-label\": \"month, \",\n    contenteditable: !0,\n    \"aria-valuemin\": i,\n    \"aria-valuemax\": u,\n    \"aria-valuenow\": r,\n    \"aria-valuetext\": d,\n    \"data-placeholder\": l ? \"\" : void 0\n  };\n}\nfunction Nd(a) {\n  const { segmentValues: t, placeholder: e } = a, n = t.year === null, l = t.year ? e.set({ year: t.year }) : e, s = 1, r = 9999, i = l.year, u = n ? \"Empty\" : `${i}`;\n  return {\n    ...Mt(a),\n    \"aria-label\": \"year, \",\n    \"aria-valuemin\": s,\n    \"aria-valuemax\": r,\n    \"aria-valuenow\": i,\n    \"aria-valuetext\": u,\n    \"data-placeholder\": n ? \"\" : void 0\n  };\n}\nfunction zd(a) {\n  const { segmentValues: t, hourCycle: e, placeholder: n } = a;\n  if (!(\"hour\" in t) || !(\"hour\" in n))\n    return {};\n  const l = t.hour === null, s = t.hour ? n.set({ hour: t.hour }) : n, r = e === 12 ? 1 : 0, i = e === 12 ? 12 : 23, u = s.hour, d = l ? \"Empty\" : `${u} ${t.dayPeriod ?? \"\"}`;\n  return {\n    ...Mt(a),\n    \"aria-label\": \"hour, \",\n    \"aria-valuemin\": r,\n    \"aria-valuemax\": i,\n    \"aria-valuenow\": u,\n    \"aria-valuetext\": d,\n    \"data-placeholder\": l ? \"\" : void 0\n  };\n}\nfunction Kd(a) {\n  const { segmentValues: t, placeholder: e } = a;\n  if (!(\"minute\" in t) || !(\"minute\" in e))\n    return {};\n  const n = t.minute === null, s = (t.minute ? e.set({ minute: t.minute }) : e).minute, r = 0, i = 59, u = n ? \"Empty\" : `${s}`;\n  return {\n    ...Mt(a),\n    \"aria-label\": \"minute, \",\n    \"aria-valuemin\": r,\n    \"aria-valuemax\": i,\n    \"aria-valuenow\": s,\n    \"aria-valuetext\": u,\n    \"data-placeholder\": n ? \"\" : void 0\n  };\n}\nfunction Hd(a) {\n  const { segmentValues: t, placeholder: e } = a;\n  if (!(\"second\" in t) || !(\"second\" in e))\n    return {};\n  const n = t.second === null, s = (t.second ? e.set({ second: t.second }) : e).second, r = 0, i = 59, u = n ? \"Empty\" : `${s}`;\n  return {\n    ...Mt(a),\n    \"aria-label\": \"second, \",\n    \"aria-valuemin\": r,\n    \"aria-valuemax\": i,\n    \"aria-valuenow\": s,\n    \"aria-valuetext\": u,\n    \"data-placeholder\": n ? \"\" : void 0\n  };\n}\nfunction Wd(a) {\n  const { segmentValues: t } = a;\n  if (!(\"dayPeriod\" in t))\n    return {};\n  const e = 0, n = 12, l = t.hour ? t.hour > 12 ? t.hour - 12 : t.hour : 0, s = t.dayPeriod ?? \"AM\";\n  return {\n    ...Mt(a),\n    inputmode: \"text\",\n    \"aria-label\": \"AM/PM\",\n    \"aria-valuemin\": e,\n    \"aria-valuemax\": n,\n    \"aria-valuenow\": l,\n    \"aria-valuetext\": s\n  };\n}\nfunction jd(a) {\n  return {\n    \"aria-hidden\": !0,\n    \"data-segment\": \"literal\"\n  };\n}\nfunction Ud(a) {\n  return {\n    role: \"textbox\",\n    \"aria-label\": \"timezone, \",\n    \"data-readonly\": !0,\n    \"data-segment\": \"timeZoneName\",\n    tabindex: a.disabled ? void 0 : 0,\n    style: \"caret-color: transparent;\"\n  };\n}\nconst Gd = {\n  day: {\n    attrs: Fd\n  },\n  month: {\n    attrs: Ld\n  },\n  year: {\n    attrs: Nd\n  },\n  hour: {\n    attrs: zd\n  },\n  minute: {\n    attrs: Kd\n  },\n  second: {\n    attrs: Hd\n  },\n  dayPeriod: {\n    attrs: Wd\n  },\n  literal: {\n    attrs: jd\n  },\n  timeZoneName: {\n    attrs: Ud\n  }\n};\nfunction ss(a) {\n  const t = Qe();\n  function e({ e: h, part: E, dateRef: P, prevValue: B }) {\n    const T = h.key === t.ARROW_UP ? 1 : -1, M = 0, V = 59;\n    if (B === null)\n      return T > 0 ? M : V;\n    const A = [E, T];\n    return P.set({ [E]: B }).cycle(...A)[E];\n  }\n  function n(h) {\n    if (a.hasLeftFocus.value = !1, h === null)\n      return h;\n    const E = h.toString();\n    return E.length === 1 ? (a.modelValue.value = void 0, null) : Number.parseInt(E.slice(0, -1));\n  }\n  function l({ e: h, part: E, dateRef: P, prevValue: B, hourCycle: T }) {\n    const M = h.key === t.ARROW_UP ? 1 : -1;\n    if (B === null)\n      return P[E];\n    if (E === \"hour\" && \"hour\" in P) {\n      const A = [E, M, { hourCycle: T }];\n      return P.set({ [E]: B }).cycle(...A)[E];\n    }\n    const V = [E, M];\n    return E === \"day\" && a.segmentValues.value.month !== null ? P.set({ [E]: B, month: a.segmentValues.value.month }).cycle(...V)[E] : P.set({ [E]: B }).cycle(...V)[E];\n  }\n  function s(h, E, P) {\n    let B = !1;\n    const T = Math.floor(h / 10);\n    if (a.hasLeftFocus.value && (a.hasLeftFocus.value = !1, P = null), P === null)\n      return E === 0 ? (a.lastKeyZero.value = !0, { value: null, moveToNext: B }) : ((a.lastKeyZero.value || E > T) && (B = !0), a.lastKeyZero.value = !1, { value: E, moveToNext: B });\n    const M = P.toString().length, V = Number.parseInt(P.toString() + E.toString());\n    return M === 2 || V > h ? ((E > T || V > h) && (B = !0), { value: E, moveToNext: B }) : (B = !0, { value: V, moveToNext: B });\n  }\n  function r(h, E) {\n    let B = !1;\n    const T = Math.floor(59 / 10);\n    if (a.hasLeftFocus.value && (a.hasLeftFocus.value = !1, E = null), E === null)\n      return h === 0 ? (a.lastKeyZero.value = !0, { value: 0, moveToNext: B }) : ((a.lastKeyZero.value || h > T) && (B = !0), a.lastKeyZero.value = !1, { value: h, moveToNext: B });\n    const M = E.toString().length, V = Number.parseInt(E.toString() + h.toString());\n    return M === 2 || V > 59 ? (h > T && (B = !0), { value: h, moveToNext: B }) : (B = !0, { value: V, moveToNext: B });\n  }\n  function i(h, E) {\n    let B = !1;\n    const T = Math.floor(24 / 10);\n    if (a.hasLeftFocus.value && (a.hasLeftFocus.value = !1, E = null), E === null)\n      return h === 0 ? (a.lastKeyZero.value = !0, { value: 0, moveToNext: B }) : ((a.lastKeyZero.value || h > T) && (B = !0), a.lastKeyZero.value = !1, { value: h, moveToNext: B });\n    const M = E.toString().length, V = Number.parseInt(E.toString() + h.toString());\n    return M === 2 || V > 24 ? (h > T && (B = !0), { value: h, moveToNext: B }) : (B = !0, { value: V, moveToNext: B });\n  }\n  function u(h, E) {\n    let P = !1;\n    if (a.hasLeftFocus.value && (a.hasLeftFocus.value = !1, E = null), E === null)\n      return { value: h === 0 ? 1 : h, moveToNext: P };\n    const B = E.toString() + h.toString();\n    return B.length > 4 ? { value: h === 0 ? 1 : h, moveToNext: P } : (B.length === 4 && (P = !0), { value: Number.parseInt(B), moveToNext: P });\n  }\n  const d = $(() => Gd[a.part].attrs({\n    disabled: a.disabled.value,\n    placeholder: a.placeholder.value,\n    hourCycle: a.hourCycle,\n    segmentValues: a.segmentValues.value,\n    formatter: a.formatter\n  }));\n  function c(h) {\n    if (!st(h.key) || tt(h.key))\n      return;\n    const E = a.segmentValues.value.day;\n    if (h.key === t.ARROW_DOWN || h.key === t.ARROW_UP) {\n      a.segmentValues.value.day = l({ e: h, part: \"day\", dateRef: a.placeholder.value, prevValue: E });\n      return;\n    }\n    if (xt(h.key)) {\n      const P = Number.parseInt(h.key), B = a.segmentValues.value.month, T = B ? Pt(a.placeholder.value.set({ month: B })) : Pt(a.placeholder.value), { value: M, moveToNext: V } = s(T, P, E);\n      a.segmentValues.value.day = M, V && a.focusNext();\n    }\n    h.key === t.BACKSPACE && (a.hasLeftFocus.value = !1, a.segmentValues.value.day = n(E));\n  }\n  function p(h) {\n    if (!st(h.key) || tt(h.key))\n      return;\n    const E = a.segmentValues.value.month;\n    if (h.key === t.ARROW_DOWN || h.key === t.ARROW_UP) {\n      a.segmentValues.value.month = l({ e: h, part: \"month\", dateRef: a.placeholder.value, prevValue: E });\n      return;\n    }\n    if (xt(h.key)) {\n      const P = Number.parseInt(h.key), { value: B, moveToNext: T } = s(12, P, E);\n      a.segmentValues.value.month = B, T && a.focusNext();\n    }\n    h.key === t.BACKSPACE && (a.hasLeftFocus.value = !1, a.segmentValues.value.month = n(E));\n  }\n  function f(h) {\n    if (!st(h.key) || tt(h.key))\n      return;\n    const E = a.segmentValues.value.year;\n    if (h.key === t.ARROW_DOWN || h.key === t.ARROW_UP) {\n      a.segmentValues.value.year = l({ e: h, part: \"year\", dateRef: a.placeholder.value, prevValue: E });\n      return;\n    }\n    if (xt(h.key)) {\n      const P = Number.parseInt(h.key), { value: B, moveToNext: T } = u(P, E);\n      a.segmentValues.value.year = B, T && a.focusNext();\n    }\n    h.key === t.BACKSPACE && (a.hasLeftFocus.value = !1, a.segmentValues.value.year = n(E));\n  }\n  function v(h) {\n    const E = a.placeholder.value;\n    if (!st(h.key) || tt(h.key) || !(\"hour\" in E) || !(\"hour\" in a.segmentValues.value))\n      return;\n    const P = a.segmentValues.value.hour, B = a.hourCycle;\n    if (h.key === t.ARROW_UP || h.key === t.ARROW_DOWN) {\n      a.segmentValues.value.hour = l({ e: h, part: \"hour\", dateRef: a.placeholder.value, prevValue: P, hourCycle: B }), \"dayPeriod\" in a.segmentValues.value && (a.segmentValues.value.hour < 12 ? a.segmentValues.value.dayPeriod = \"AM\" : a.segmentValues.value.hour && (a.segmentValues.value.dayPeriod = \"PM\"));\n      return;\n    }\n    if (xt(h.key)) {\n      const T = Number.parseInt(h.key), { value: M, moveToNext: V } = i(T, P);\n      \"dayPeriod\" in a.segmentValues.value && M && M > 12 ? a.segmentValues.value.dayPeriod = \"PM\" : \"dayPeriod\" in a.segmentValues.value && M && (a.segmentValues.value.dayPeriod = \"AM\"), a.segmentValues.value.hour = M, V && a.focusNext();\n    }\n    h.key === t.BACKSPACE && (a.hasLeftFocus.value = !1, a.segmentValues.value.hour = n(P));\n  }\n  function g(h) {\n    const E = a.placeholder.value;\n    if (!st(h.key) || tt(h.key) || !(\"minute\" in E) || !(\"minute\" in a.segmentValues.value))\n      return;\n    const P = a.segmentValues.value.minute;\n    if (a.segmentValues.value.minute = e({ e: h, part: \"minute\", dateRef: a.placeholder.value, prevValue: P }), xt(h.key)) {\n      const B = Number.parseInt(h.key), { value: T, moveToNext: M } = r(B, P);\n      a.segmentValues.value.minute = T, M && a.focusNext();\n    }\n    h.key === t.BACKSPACE && (a.hasLeftFocus.value = !1, a.segmentValues.value.minute = n(P));\n  }\n  function m(h) {\n    const E = a.placeholder.value;\n    if (!st(h.key) || tt(h.key) || !(\"second\" in E) || !(\"second\" in a.segmentValues.value))\n      return;\n    const P = a.segmentValues.value.second;\n    if (a.segmentValues.value.second = e({ e: h, part: \"second\", dateRef: a.placeholder.value, prevValue: P }), xt(h.key)) {\n      const B = Number.parseInt(h.key), { value: T, moveToNext: M } = r(B, P);\n      a.segmentValues.value.second = T, M && a.focusNext();\n    }\n    h.key === t.BACKSPACE && (a.hasLeftFocus.value = !1, a.segmentValues.value.second = n(P));\n  }\n  function w(h) {\n    if (!((!st(h.key) || tt(h.key)) && h.key !== \"a\" && h.key !== \"p\" || !(\"hour\" in a.placeholder.value) || !(\"dayPeriod\" in a.segmentValues.value))) {\n      if (h.key === t.ARROW_UP || h.key === t.ARROW_DOWN) {\n        if (a.segmentValues.value.dayPeriod === \"AM\") {\n          a.segmentValues.value.dayPeriod = \"PM\", a.segmentValues.value.hour = a.segmentValues.value.hour + 12;\n          return;\n        }\n        a.segmentValues.value.dayPeriod = \"AM\", a.segmentValues.value.hour = a.segmentValues.value.hour - 12;\n        return;\n      }\n      if ([\"a\", \"A\"].includes(h.key) && a.segmentValues.value.dayPeriod !== \"AM\") {\n        a.segmentValues.value.dayPeriod = \"AM\", a.segmentValues.value.hour = a.segmentValues.value.hour - 12;\n        return;\n      }\n      [\"p\", \"P\"].includes(h.key) && a.segmentValues.value.dayPeriod !== \"PM\" && (a.segmentValues.value.dayPeriod = \"PM\", a.segmentValues.value.hour = a.segmentValues.value.hour + 12);\n    }\n  }\n  function C(h) {\n    a.disabled.value && h.preventDefault();\n  }\n  function D(h) {\n    const E = a.disabled.value, P = a.readonly.value;\n    if (h.key !== t.TAB && h.preventDefault(), E || P)\n      return;\n    if ({\n      day: c,\n      month: p,\n      year: f,\n      hour: v,\n      minute: g,\n      second: m,\n      dayPeriod: w,\n      timeZoneName: () => {\n      }\n    }[a.part](h), ![t.ARROW_LEFT, t.ARROW_RIGHT].includes(h.key) && h.key !== t.TAB && h.key !== t.SHIFT && st(h.key) && Object.values(a.segmentValues.value).every((T) => T !== null)) {\n      const T = { ...a.segmentValues.value };\n      let M = a.placeholder.value.copy();\n      Object.keys(T).forEach((V) => {\n        const A = T[V];\n        M = M.set({ [V]: A });\n      }), a.modelValue.value = M.copy();\n    }\n  }\n  return {\n    handleSegmentClick: C,\n    handleSegmentKeydown: D,\n    attributes: d\n  };\n}\nconst qd = /* @__PURE__ */ x({\n  __name: \"DateFieldInput\",\n  props: {\n    part: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = kd(), n = I(!0), l = I(!1), {\n      handleSegmentClick: s,\n      handleSegmentKeydown: r,\n      attributes: i\n    } = ss({\n      hasLeftFocus: n,\n      lastKeyZero: l,\n      placeholder: e.placeholder,\n      hourCycle: e.hourCycle,\n      segmentValues: e.segmentValues,\n      formatter: e.formatter,\n      part: t.part,\n      disabled: e.disabled,\n      readonly: e.readonly,\n      focusNext: e.focusNext,\n      modelValue: e.modelValue\n    }), u = $(() => e.disabled.value), d = $(() => e.readonly.value), c = $(() => e.isInvalid.value);\n    return (p, f) => (b(), S(o(O), k({\n      as: p.as,\n      \"as-child\": p.asChild\n    }, o(i), {\n      contenteditable: u.value || d.value ? !1 : p.part !== \"literal\",\n      \"data-radix-vue-date-field-segment\": p.part,\n      \"aria-disabled\": u.value ? !0 : void 0,\n      \"aria-readonly\": d.value ? !0 : void 0,\n      \"data-disabled\": u.value ? \"\" : void 0,\n      \"data-invalid\": c.value ? \"\" : void 0,\n      \"aria-invalid\": c.value ? !0 : void 0\n    }, Nn(p.part !== \"literal\" ? {\n      mousedown: o(s),\n      keydown: o(r),\n      focusout: () => {\n        n.value = !0;\n      },\n      focusin: (v) => {\n        o(e).setFocusedElement(v.target);\n      }\n    } : {})), {\n      default: y(() => [\n        _(p.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"as\", \"as-child\", \"contenteditable\", \"data-radix-vue-date-field-segment\", \"aria-disabled\", \"aria-readonly\", \"data-disabled\", \"data-invalid\", \"aria-invalid\"]));\n  }\n}), mm = /* @__PURE__ */ x({\n  __name: \"DatePickerHeader\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Mu), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), hm = /* @__PURE__ */ x({\n  __name: \"DatePickerHeading\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Vu), H(j(t)), {\n      default: y(({ headingValue: l }) => [\n        _(e.$slots, \"default\", { headingValue: l }, () => [\n          me(De(l), 1)\n        ])\n      ]),\n      _: 3\n    }, 16));\n  }\n}), ym = /* @__PURE__ */ x({\n  __name: \"DatePickerGrid\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Fu), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), gm = /* @__PURE__ */ x({\n  __name: \"DatePickerCell\",\n  props: {\n    date: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Lu), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), bm = /* @__PURE__ */ x({\n  __name: \"DatePickerHeadCell\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Nu), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Cm = /* @__PURE__ */ x({\n  __name: \"DatePickerNext\",\n  props: {\n    step: {},\n    nextPage: { type: Function },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(zu), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), wm = /* @__PURE__ */ x({\n  __name: \"DatePickerPrev\",\n  props: {\n    step: {},\n    prevPage: { type: Function },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Ku), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), _m = /* @__PURE__ */ x({\n  __name: \"DatePickerGridHead\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Hu), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), xm = /* @__PURE__ */ x({\n  __name: \"DatePickerGridBody\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Wu), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Sm = /* @__PURE__ */ x({\n  __name: \"DatePickerGridRow\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(ju), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Em = /* @__PURE__ */ x({\n  __name: \"DatePickerCellTrigger\",\n  props: {\n    day: {},\n    month: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Uu), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Pm = /* @__PURE__ */ x({\n  __name: \"DatePickerInput\",\n  props: {\n    part: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(qd), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), [bo, Yd] = Q(\"DatePickerRoot\"), Dm = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"DatePickerRoot\",\n  props: {\n    defaultValue: { default: void 0 },\n    defaultPlaceholder: {},\n    placeholder: { default: void 0 },\n    modelValue: {},\n    hourCycle: {},\n    granularity: {},\n    hideTimeZone: { type: Boolean },\n    maxValue: {},\n    minValue: {},\n    locale: { default: \"en\" },\n    disabled: { type: Boolean, default: !1 },\n    readonly: { type: Boolean, default: !1 },\n    isDateUnavailable: { type: Function, default: void 0 },\n    name: {},\n    required: { type: Boolean },\n    id: {},\n    dir: {},\n    asChild: { type: Boolean },\n    as: {},\n    defaultOpen: { type: Boolean, default: !1 },\n    open: { type: Boolean, default: void 0 },\n    modal: { type: Boolean, default: !1 },\n    isDateDisabled: { type: Function, default: void 0 },\n    pagedNavigation: { type: Boolean, default: !1 },\n    weekStartsOn: { default: 0 },\n    weekdayFormat: { default: \"narrow\" },\n    fixedWeeks: { type: Boolean, default: !1 },\n    numberOfMonths: { default: 1 },\n    preventDeselect: { type: Boolean, default: !1 }\n  },\n  emits: [\"update:modelValue\", \"update:placeholder\", \"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, {\n      locale: l,\n      disabled: s,\n      readonly: r,\n      pagedNavigation: i,\n      weekStartsOn: u,\n      weekdayFormat: d,\n      fixedWeeks: c,\n      numberOfMonths: p,\n      preventDeselect: f,\n      isDateDisabled: v,\n      isDateUnavailable: g,\n      defaultOpen: m,\n      modal: w,\n      id: C,\n      name: D,\n      required: h,\n      minValue: E,\n      maxValue: P,\n      granularity: B,\n      hideTimeZone: T,\n      hourCycle: M,\n      defaultValue: V,\n      dir: A\n    } = ae(e), F = be(A), U = ne(e, \"modelValue\", n, {\n      defaultValue: V.value,\n      passive: e.modelValue === void 0\n    }), W = $(() => Ut({\n      defaultPlaceholder: e.placeholder,\n      granularity: e.granularity,\n      defaultValue: U.value\n    })), ee = ne(e, \"placeholder\", n, {\n      defaultValue: e.defaultPlaceholder ?? W.value.copy(),\n      passive: e.placeholder === void 0\n    }), L = ne(e, \"open\", n, {\n      defaultValue: m.value,\n      passive: e.open === void 0\n    }), G = I();\n    return Yd({\n      isDateUnavailable: g.value,\n      isDateDisabled: v.value,\n      locale: l,\n      disabled: s,\n      pagedNavigation: i,\n      weekStartsOn: u,\n      weekdayFormat: d,\n      fixedWeeks: c,\n      numberOfMonths: p,\n      readonly: r,\n      preventDeselect: f,\n      modelValue: U,\n      placeholder: ee,\n      defaultOpen: m,\n      modal: w,\n      open: L,\n      id: C,\n      name: D,\n      required: h,\n      minValue: E,\n      maxValue: P,\n      granularity: B,\n      hideTimeZone: T,\n      hourCycle: M,\n      dateFieldRef: G,\n      dir: F,\n      onDateChange(N) {\n        !N || !U.value ? U.value = N : !f.value && Te(U.value, N) ? U.value = void 0 : U.value = N.copy();\n      },\n      onPlaceholderChange(N) {\n        Ee(N, ee.value) || (ee.value = N.copy());\n      }\n    }), (N, z) => (b(), S(o(ms), {\n      open: o(L),\n      \"onUpdate:open\": z[0] || (z[0] = (Y) => Xe(L) ? L.value = Y : null),\n      \"default-open\": o(m),\n      modal: o(w)\n    }, {\n      default: y(() => [\n        _(N.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"open\", \"default-open\", \"modal\"]));\n  }\n}), $m = /* @__PURE__ */ x({\n  __name: \"DatePickerCalendar\",\n  setup(a) {\n    const t = bo();\n    return (e, n) => (b(), S(o(ku), k({\n      isDateDisabled: o(t).isDateDisabled,\n      isDateUnavailable: o(t).isDateUnavailable,\n      minValue: o(t).minValue.value,\n      maxValue: o(t).maxValue.value,\n      locale: o(t).locale.value,\n      disabled: o(t).disabled.value,\n      pagedNavigation: o(t).pagedNavigation.value,\n      weekStartsOn: o(t).weekStartsOn.value,\n      weekdayFormat: o(t).weekdayFormat.value,\n      fixedWeeks: o(t).fixedWeeks.value,\n      numberOfMonths: o(t).numberOfMonths.value,\n      readonly: o(t).readonly.value,\n      preventDeselect: o(t).preventDeselect.value,\n      dir: o(t).dir.value\n    }, {\n      \"model-value\": o(t).modelValue.value,\n      placeholder: o(t).placeholder.value,\n      \"initial-focus\": \"\",\n      multiple: !1,\n      \"onUpdate:modelValue\": n[0] || (n[0] = (l) => {\n        l && o(t).modelValue.value && o(Ee)(l, o(t).modelValue.value) || o(t).onDateChange(l);\n      }),\n      \"onUpdate:placeholder\": n[1] || (n[1] = (l) => {\n        o(Ee)(l, o(t).placeholder.value) || o(t).onPlaceholderChange(l);\n      })\n    }), {\n      default: y(({ weekDays: l, grid: s, date: r, weekStartsOn: i, locale: u, fixedWeeks: d }) => [\n        _(e.$slots, \"default\", {\n          date: r,\n          grid: s,\n          weekDays: l,\n          weekStartsOn: i,\n          locale: u,\n          fixedWeeks: d\n        })\n      ]),\n      _: 3\n    }, 16, [\"model-value\", \"placeholder\"]));\n  }\n}), Bm = /* @__PURE__ */ x({\n  __name: \"DatePickerField\",\n  setup(a) {\n    const t = bo();\n    return (e, n) => (b(), S(o(Vd), k({\n      ref: o(t).dateFieldRef,\n      \"model-value\": o(t).modelValue.value,\n      placeholder: o(t).placeholder.value\n    }, {\n      id: o(t).id.value,\n      name: o(t).name.value,\n      disabled: o(t).disabled.value,\n      minValue: o(t).minValue.value,\n      maxValue: o(t).maxValue.value,\n      readonly: o(t).readonly.value,\n      hourCycle: o(t).hourCycle.value,\n      granularity: o(t).granularity.value,\n      hideTimeZone: o(t).hideTimeZone.value,\n      locale: o(t).locale.value,\n      isDateUnavailable: o(t).isDateUnavailable,\n      required: o(t).required.value,\n      dir: o(t).dir.value\n    }, {\n      \"onUpdate:modelValue\": n[0] || (n[0] = (l) => {\n        l && o(t).modelValue.value && o(Ee)(o(t).modelValue.value, l) && l.compare(o(t).modelValue.value) === 0 || o(t).onDateChange(l);\n      }),\n      \"onUpdate:placeholder\": n[1] || (n[1] = (l) => {\n        o(Ee)(o(t).placeholder.value, l) && l.compare(o(t).placeholder.value) === 0 || o(t).onPlaceholderChange(l);\n      })\n    }), {\n      default: y(({ segments: l, modelValue: s }) => [\n        _(e.$slots, \"default\", {\n          segments: l,\n          modelValue: s\n        })\n      ]),\n      _: 3\n    }, 16, [\"model-value\", \"placeholder\"]));\n  }\n}), Im = /* @__PURE__ */ x({\n  __name: \"DatePickerAnchor\",\n  props: {\n    element: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(_s), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Tm = /* @__PURE__ */ x({\n  __name: \"DatePickerArrow\",\n  props: {\n    width: {},\n    height: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Cs), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Rm = /* @__PURE__ */ x({\n  __name: \"DatePickerClose\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(ws), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Am = /* @__PURE__ */ x({\n  __name: \"DatePickerTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = bo();\n    return (n, l) => (b(), S(o(hs), k({ \"data-radix-vue-date-field-segment\": \"trigger\" }, t, {\n      disabled: o(e).disabled.value,\n      onFocusin: l[0] || (l[0] = (s) => {\n        var r;\n        (r = o(e).dateFieldRef.value) == null || r.setFocusedElement(s.target);\n      })\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"disabled\"]));\n  }\n}), Om = /* @__PURE__ */ x({\n  __name: \"DatePickerContent\",\n  props: {\n    forceMount: { type: Boolean },\n    trapFocus: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {},\n    disableOutsidePointerEvents: { type: Boolean }\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t);\n    return (s, r) => (b(), S(o(ys), null, {\n      default: y(() => [\n        q(o(bs), H(j({ ...o(l), ...s.$attrs })), {\n          default: y(() => [\n            _(s.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16)\n      ]),\n      _: 3\n    }));\n  }\n}), km = /* @__PURE__ */ x({\n  __name: \"DateRangePickerHeader\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(up), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Mm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerHeading\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(dp), H(j(t)), {\n      default: y(({ headingValue: l }) => [\n        _(e.$slots, \"default\", { headingValue: l }, () => [\n          me(De(l), 1)\n        ])\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Vm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerGrid\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(cp), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Fm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerCell\",\n  props: {\n    date: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(pp), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Lm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerHeadCell\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(fp), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Nm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerNext\",\n  props: {\n    step: {},\n    nextPage: { type: Function },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(vp), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), zm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerPrev\",\n  props: {\n    step: {},\n    prevPage: { type: Function },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(mp), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Km = /* @__PURE__ */ x({\n  __name: \"DateRangePickerGridHead\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(hp), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Hm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerGridBody\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(yp), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Wm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerGridRow\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(gp), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), jm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerCellTrigger\",\n  props: {\n    day: {},\n    month: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(bp), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Um = /* @__PURE__ */ x({\n  __name: \"DateRangePickerInput\",\n  props: {\n    part: {},\n    type: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(tc), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), [Co, Xd] = Q(\"DateRangePickerRoot\"), Gm = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"DateRangePickerRoot\",\n  props: {\n    defaultValue: { default: () => ({ start: void 0, end: void 0 }) },\n    defaultPlaceholder: {},\n    placeholder: { default: void 0 },\n    modelValue: {},\n    hourCycle: {},\n    granularity: {},\n    hideTimeZone: { type: Boolean },\n    maxValue: {},\n    minValue: {},\n    locale: { default: \"en\" },\n    disabled: { type: Boolean, default: !1 },\n    readonly: { type: Boolean, default: !1 },\n    isDateUnavailable: { type: Function, default: void 0 },\n    name: {},\n    required: { type: Boolean },\n    id: {},\n    dir: {},\n    asChild: { type: Boolean },\n    as: {},\n    defaultOpen: { type: Boolean, default: !1 },\n    open: { type: Boolean, default: void 0 },\n    modal: { type: Boolean, default: !1 },\n    isDateDisabled: { type: Function, default: void 0 },\n    pagedNavigation: { type: Boolean, default: !1 },\n    weekStartsOn: { default: 0 },\n    weekdayFormat: { default: \"narrow\" },\n    fixedWeeks: { type: Boolean, default: !1 },\n    numberOfMonths: { default: 1 },\n    preventDeselect: { type: Boolean, default: !1 }\n  },\n  emits: [\"update:modelValue\", \"update:placeholder\", \"update:startValue\", \"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, {\n      locale: l,\n      disabled: s,\n      readonly: r,\n      pagedNavigation: i,\n      weekStartsOn: u,\n      weekdayFormat: d,\n      fixedWeeks: c,\n      numberOfMonths: p,\n      preventDeselect: f,\n      isDateDisabled: v,\n      isDateUnavailable: g,\n      defaultOpen: m,\n      modal: w,\n      id: C,\n      name: D,\n      required: h,\n      minValue: E,\n      maxValue: P,\n      granularity: B,\n      hideTimeZone: T,\n      hourCycle: M,\n      dir: V\n    } = ae(e), A = be(V), F = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue ?? { start: void 0, end: void 0 },\n      passive: e.modelValue === void 0\n    }), U = Ut({\n      defaultPlaceholder: e.placeholder,\n      granularity: e.granularity,\n      defaultValue: F.value.start\n    }), W = ne(e, \"placeholder\", n, {\n      defaultValue: e.defaultPlaceholder ?? U.copy(),\n      passive: e.placeholder === void 0\n    }), ee = ne(e, \"open\", n, {\n      defaultValue: m.value,\n      passive: e.open === void 0\n    }), L = I();\n    return Xd({\n      isDateUnavailable: g.value,\n      isDateDisabled: v.value,\n      locale: l,\n      disabled: s,\n      pagedNavigation: i,\n      weekStartsOn: u,\n      weekdayFormat: d,\n      fixedWeeks: c,\n      numberOfMonths: p,\n      readonly: r,\n      preventDeselect: f,\n      modelValue: F,\n      placeholder: W,\n      defaultOpen: m,\n      modal: w,\n      open: ee,\n      id: C,\n      name: D,\n      required: h,\n      minValue: E,\n      maxValue: P,\n      granularity: B,\n      hideTimeZone: T,\n      hourCycle: M,\n      dateFieldRef: L,\n      dir: A,\n      onStartValueChange(G) {\n        n(\"update:startValue\", G);\n      },\n      onDateChange(G) {\n        var N, z;\n        F.value = { start: (N = G.start) == null ? void 0 : N.copy(), end: (z = G.end) == null ? void 0 : z.copy() };\n      },\n      onPlaceholderChange(G) {\n        W.value = G.copy();\n      }\n    }), (G, N) => (b(), S(o(ms), {\n      open: o(ee),\n      \"onUpdate:open\": N[0] || (N[0] = (z) => Xe(ee) ? ee.value = z : null),\n      \"default-open\": o(m),\n      modal: o(w)\n    }, {\n      default: y(() => [\n        _(G.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"open\", \"default-open\", \"modal\"]));\n  }\n}), qm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerCalendar\",\n  setup(a) {\n    const t = Co();\n    return (e, n) => (b(), S(o(ip), k({\n      isDateDisabled: o(t).isDateDisabled,\n      isDateUnavailable: o(t).isDateUnavailable,\n      locale: o(t).locale.value,\n      disabled: o(t).disabled.value,\n      pagedNavigation: o(t).pagedNavigation.value,\n      weekStartsOn: o(t).weekStartsOn.value,\n      weekdayFormat: o(t).weekdayFormat.value,\n      fixedWeeks: o(t).fixedWeeks.value,\n      numberOfMonths: o(t).numberOfMonths.value,\n      readonly: o(t).readonly.value,\n      preventDeselect: o(t).preventDeselect.value,\n      minValue: o(t).minValue.value,\n      maxValue: o(t).maxValue.value,\n      dir: o(t).dir.value\n    }, {\n      \"initial-focus\": \"\",\n      \"model-value\": o(t).modelValue.value,\n      placeholder: o(t).placeholder.value,\n      \"onUpdate:startValue\": n[0] || (n[0] = (l) => {\n        o(t).onStartValueChange(l);\n      }),\n      \"onUpdate:modelValue\": n[1] || (n[1] = (l) => {\n        l.start && o(t).modelValue.value.start && l.end && o(t).modelValue.value.end && o(Ee)(l.start, o(t).modelValue.value.start) && o(Ee)(l.end, o(t).modelValue.value.end) || o(t).onDateChange(l);\n      }),\n      \"onUpdate:placeholder\": n[2] || (n[2] = (l) => {\n        o(Ee)(l, o(t).placeholder.value) || o(t).onPlaceholderChange(l);\n      })\n    }), {\n      default: y(({ weekDays: l, grid: s, date: r, weekStartsOn: i, locale: u, fixedWeeks: d }) => [\n        _(e.$slots, \"default\", {\n          date: r,\n          grid: s,\n          weekDays: l,\n          weekStartsOn: i,\n          locale: u,\n          fixedWeeks: d\n        })\n      ]),\n      _: 3\n    }, 16, [\"model-value\", \"placeholder\"]));\n  }\n}), Ym = /* @__PURE__ */ x({\n  __name: \"DateRangePickerField\",\n  setup(a) {\n    const t = Co();\n    return (e, n) => (b(), S(o(ec), k({\n      ref: o(t).dateFieldRef,\n      \"model-value\": o(t).modelValue.value,\n      placeholder: o(t).placeholder.value\n    }, {\n      id: o(t).id.value,\n      name: o(t).name.value,\n      disabled: o(t).disabled.value,\n      minValue: o(t).minValue.value,\n      maxValue: o(t).maxValue.value,\n      readonly: o(t).readonly.value,\n      hourCycle: o(t).hourCycle.value,\n      granularity: o(t).granularity.value,\n      hideTimeZone: o(t).hideTimeZone.value,\n      locale: o(t).locale.value,\n      isDateUnavailable: o(t).isDateUnavailable,\n      required: o(t).required.value,\n      dir: o(t).dir.value\n    }, {\n      \"onUpdate:modelValue\": n[0] || (n[0] = (l) => {\n        l.start && o(t).modelValue.value.start && l.end && o(t).modelValue.value.end && l.start.compare(o(t).modelValue.value.start) === 0 && l.end.compare(o(t).modelValue.value.end) === 0 || o(t).onDateChange(l);\n      }),\n      \"onUpdate:placeholder\": n[1] || (n[1] = (l) => {\n        o(Ee)(l, o(t).placeholder.value) && l.compare(o(t).placeholder.value) === 0 || o(t).onPlaceholderChange(l);\n      })\n    }), {\n      default: y(({ segments: l, modelValue: s }) => [\n        _(e.$slots, \"default\", {\n          segments: l,\n          modelValue: s\n        })\n      ]),\n      _: 3\n    }, 16, [\"model-value\", \"placeholder\"]));\n  }\n}), Xm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerAnchor\",\n  props: {\n    element: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(_s), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Zm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerArrow\",\n  props: {\n    width: {},\n    height: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(Cs), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Jm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerClose\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(ws), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Qm = /* @__PURE__ */ x({\n  __name: \"DateRangePickerTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = Co();\n    return (n, l) => (b(), S(o(hs), k({ \"data-radix-vue-date-field-segment\": \"trigger\" }, t, {\n      disabled: o(e).disabled.value,\n      onFocusin: l[0] || (l[0] = (s) => {\n        var r;\n        (r = o(e).dateFieldRef.value) == null || r.setFocusedElement(s.target);\n      })\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"disabled\"]));\n  }\n}), eh = /* @__PURE__ */ x({\n  __name: \"DateRangePickerContent\",\n  props: {\n    forceMount: { type: Boolean },\n    trapFocus: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {},\n    disableOutsidePointerEvents: { type: Boolean }\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t);\n    return (s, r) => (b(), S(o(ys), null, {\n      default: y(() => [\n        q(o(bs), H(j({ ...o(l), ...s.$attrs })), {\n          default: y(() => [\n            _(s.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16)\n      ]),\n      _: 3\n    }));\n  }\n}), Zd = [\"id\", \"value\", \"name\", \"disabled\", \"required\"], [Jd, Qd] = Q(\"DateRangeFieldRoot\"), ec = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"DateRangeFieldRoot\",\n  props: {\n    defaultValue: { default: void 0 },\n    defaultPlaceholder: {},\n    placeholder: { default: void 0 },\n    modelValue: {},\n    hourCycle: {},\n    granularity: {},\n    hideTimeZone: { type: Boolean },\n    maxValue: {},\n    minValue: {},\n    locale: { default: \"en\" },\n    disabled: { type: Boolean, default: !1 },\n    readonly: { type: Boolean, default: !1 },\n    isDateUnavailable: { type: Function, default: void 0 },\n    name: {},\n    required: { type: Boolean },\n    id: {},\n    dir: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\", \"update:placeholder\"],\n  setup(a, { expose: t, emit: e }) {\n    var Z, re;\n    const n = a, l = e, { locale: s, disabled: r, readonly: i, isDateUnavailable: u, dir: d } = ae(n), c = Un(n.locale), { primitiveElement: p, currentElement: f } = Ae(), v = I(/* @__PURE__ */ new Set()), g = be(d);\n    le(() => {\n      Na(f.value).forEach((X) => v.value.add(X));\n    });\n    const m = ne(n, \"modelValue\", l, {\n      defaultValue: n.defaultValue ?? { start: void 0, end: void 0 },\n      passive: n.modelValue === void 0\n    }), w = Ut({\n      defaultPlaceholder: n.placeholder,\n      granularity: n.granularity,\n      defaultValue: m.value.start\n    }), C = ne(n, \"placeholder\", l, {\n      defaultValue: n.defaultPlaceholder ?? w.copy(),\n      passive: n.placeholder === void 0\n    }), D = $(() => n.granularity ? ra(C.value) ? n.granularity : \"day\" : ra(C.value) ? \"minute\" : \"day\"), h = $(() => {\n      var X;\n      return m.value.start ? !!((X = u.value) != null && X.call(u, m.value.start) || n.minValue && Le(m.value.start, n.minValue) || n.maxValue && Le(n.maxValue, m.value.start)) : !1;\n    }), E = $(() => {\n      var X;\n      return m.value.end ? !!((X = u.value) != null && X.call(u, m.value.end) || n.minValue && Le(m.value.end, n.minValue) || n.maxValue && Le(n.maxValue, m.value.end)) : !1;\n    }), P = $(() => h.value || E.value ? !0 : !m.value.start || !m.value.end ? !1 : !Er(m.value.start, m.value.end) || u.value !== void 0 && !gl(\n      m.value.start,\n      m.value.end,\n      u.value,\n      void 0\n    )), B = ls(D.value), T = I(m.value.start ? { ...Lt({ value: m.value.start, formatter: c }) } : { ...B }), M = I(m.value.end ? { ...Lt({ value: m.value.end, formatter: c }) } : { ...B }), V = $(() => In({\n      granularity: D.value,\n      dateRef: C.value,\n      formatter: c,\n      hideTimeZone: n.hideTimeZone,\n      hourCycle: n.hourCycle,\n      segmentValues: T.value,\n      locale: s\n    })), A = $(() => In({\n      granularity: D.value,\n      dateRef: C.value,\n      formatter: c,\n      hideTimeZone: n.hideTimeZone,\n      hourCycle: n.hourCycle,\n      segmentValues: M.value,\n      locale: s\n    })), F = $(() => ({\n      start: V.value.arr,\n      end: A.value.arr\n    })), U = $(() => ({ start: F.value.start.filter(({ part: X }) => X !== \"literal\"), end: F.value.end.filter(({ part: X }) => X !== \"literal\") })), W = I((Z = m.value.start) == null ? void 0 : Z.copy()), ee = I((re = m.value.end) == null ? void 0 : re.copy());\n    te([W, ee], ([X, se]) => {\n      m.value = { start: X == null ? void 0 : X.copy(), end: se == null ? void 0 : se.copy() };\n    }), te(m, (X) => {\n      X.start && X.end && ((!W.value || X.start.compare(W.value) !== 0) && (W.value = X.start.copy()), (!ee.value || X.end.compare(ee.value) !== 0) && (ee.value = X.end.copy()));\n    }), te([W, s], ([X]) => {\n      X !== void 0 ? T.value = { ...Lt({ value: X, formatter: c }) } : Object.values(T.value).every((se) => se === null) && (T.value = { ...B });\n    }), te(s, (X) => {\n      c.getLocale() !== X && (c.setLocale(X), oe(() => {\n        v.value.clear(), Na(f.value).forEach((se) => v.value.add(se));\n      }));\n    }), te(m, (X) => {\n      X.start !== void 0 && (!Ee(C.value, X.start) || C.value.compare(X.start) !== 0) && (C.value = X.start.copy());\n    }), te([ee, s], ([X]) => {\n      X !== void 0 ? M.value = { ...Lt({ value: X, formatter: c }) } : Object.values(M.value).every((se) => se === null) && (M.value = { ...B });\n    });\n    const L = I(null), G = $(() => Array.from(v.value).findIndex((X) => {\n      var se, pe;\n      return X.getAttribute(\"data-radix-vue-date-field-segment\") === ((se = L.value) == null ? void 0 : se.getAttribute(\"data-radix-vue-date-field-segment\")) && X.getAttribute(\"data-radix-vue-date-range-field-segment-type\") === ((pe = L.value) == null ? void 0 : pe.getAttribute(\"data-radix-vue-date-range-field-segment-type\"));\n    })), N = $(() => {\n      const X = g.value === \"rtl\" ? -1 : 1;\n      return (X < 0 ? G.value < 0 : G.value > v.value.size - 1) ? null : Array.from(v.value)[G.value + X];\n    }), z = $(() => {\n      const X = g.value === \"rtl\" ? -1 : 1;\n      return (X > 0 ? G.value < 0 : G.value > v.value.size - 1) ? null : Array.from(v.value)[G.value - X];\n    }), Y = Qe();\n    function K(X) {\n      var se, pe;\n      tt(X.key) && (X.key === Y.ARROW_LEFT && ((se = z.value) == null || se.focus()), X.key === Y.ARROW_RIGHT && ((pe = N.value) == null || pe.focus()));\n    }\n    function J(X) {\n      L.value = X;\n    }\n    return Qd({\n      isDateUnavailable: u.value,\n      locale: s,\n      startValue: W,\n      endValue: ee,\n      placeholder: C,\n      disabled: r,\n      formatter: c,\n      hourCycle: n.hourCycle,\n      readonly: i,\n      segmentValues: { start: T, end: M },\n      isInvalid: P,\n      segmentContents: U,\n      elements: v,\n      setFocusedElement: J,\n      focusNext() {\n        var X;\n        (X = N.value) == null || X.focus();\n      }\n    }), t({\n      setFocusedElement: J\n    }), (X, se) => {\n      var pe, _e;\n      return b(), ve(we, null, [\n        q(o(O), k(X.$attrs, {\n          ref_key: \"primitiveElement\",\n          ref: p,\n          role: \"group\",\n          \"aria-disabled\": o(r) ? !0 : void 0,\n          \"data-disabled\": o(r) ? \"\" : void 0,\n          \"data-readonly\": o(i) ? \"\" : void 0,\n          \"data-invalid\": P.value ? \"\" : void 0,\n          dir: o(g),\n          onKeydown: ie(K, [\"left\", \"right\"])\n        }), {\n          default: y(() => [\n            _(X.$slots, \"default\", {\n              modelValue: o(m),\n              segments: F.value\n            })\n          ]),\n          _: 3\n        }, 16, [\"aria-disabled\", \"data-disabled\", \"data-readonly\", \"data-invalid\", \"dir\"]),\n        Ue(\"input\", {\n          id: X.id,\n          type: \"text\",\n          tabindex: \"-1\",\n          \"aria-hidden\": \"true\",\n          value: `${(pe = o(m).start) == null ? void 0 : pe.toString()} - ${(_e = o(m).end) == null ? void 0 : _e.toString()}`,\n          name: X.name,\n          disabled: o(r),\n          required: X.required,\n          style: {\n            transform: \"translateX(-100%)\",\n            position: \"absolute\",\n            pointerEvents: \"none\",\n            opacity: 0,\n            margin: 0\n          },\n          onFocus: se[0] || (se[0] = (Se) => {\n            var ye, de;\n            return (de = (ye = Array.from(v.value)) == null ? void 0 : ye[0]) == null ? void 0 : de.focus();\n          })\n        }, null, 40, Zd)\n      ], 64);\n    };\n  }\n}), tc = /* @__PURE__ */ x({\n  __name: \"DateRangeFieldInput\",\n  props: {\n    part: {},\n    type: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = Jd(), n = I(!0), l = I(!1), {\n      handleSegmentClick: s,\n      handleSegmentKeydown: r,\n      attributes: i\n    } = ss({\n      hasLeftFocus: n,\n      lastKeyZero: l,\n      placeholder: e.placeholder,\n      hourCycle: e.hourCycle,\n      segmentValues: e.segmentValues[t.type],\n      formatter: e.formatter,\n      part: t.part,\n      disabled: e.disabled,\n      readonly: e.readonly,\n      focusNext: e.focusNext,\n      modelValue: t.type === \"start\" ? e.startValue : e.endValue\n    }), u = $(() => e.disabled.value), d = $(() => e.readonly.value), c = $(() => e.isInvalid.value);\n    return (p, f) => (b(), S(o(O), k({\n      as: p.as,\n      \"as-child\": p.asChild\n    }, o(i), {\n      contenteditable: u.value || d.value ? !1 : p.part !== \"literal\",\n      \"data-radix-vue-date-field-segment\": p.part,\n      \"aria-disabled\": u.value ? !0 : void 0,\n      \"aria-readonly\": d.value ? !0 : void 0,\n      \"data-disabled\": u.value ? \"\" : void 0,\n      \"data-radix-vue-date-range-field-segment-type\": p.type,\n      \"data-invalid\": c.value ? \"\" : void 0,\n      \"aria-invalid\": c.value ? !0 : void 0\n    }, Nn(p.part !== \"literal\" ? {\n      mousedown: o(s),\n      keydown: o(r),\n      focusout: () => {\n        n.value = !0;\n      },\n      focusin: (v) => {\n        o(e).setFocusedElement(v.target);\n      }\n    } : {})), {\n      default: y(() => [\n        _(p.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"as\", \"as-child\", \"contenteditable\", \"data-radix-vue-date-field-segment\", \"aria-disabled\", \"aria-readonly\", \"data-disabled\", \"data-radix-vue-date-range-field-segment-type\", \"data-invalid\", \"aria-invalid\"]));\n  }\n}), [rs, ac] = Q(\"DropdownMenuRoot\"), th = /* @__PURE__ */ x({\n  __name: \"DropdownMenuRoot\",\n  props: {\n    defaultOpen: { type: Boolean },\n    open: { type: Boolean, default: void 0 },\n    dir: {},\n    modal: { type: Boolean, default: !0 }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t;\n    R();\n    const l = ne(e, \"open\", n, {\n      defaultValue: e.defaultOpen,\n      passive: e.open === void 0\n    }), s = I(), { modal: r, dir: i } = ae(e), u = be(i);\n    return ac({\n      open: l,\n      onOpenChange: (d) => {\n        l.value = d;\n      },\n      onOpenToggle: () => {\n        l.value = !l.value;\n      },\n      triggerId: \"\",\n      triggerElement: s,\n      contentId: \"\",\n      modal: r,\n      dir: u\n    }), (d, c) => (b(), S(o(oo), {\n      open: o(l),\n      \"onUpdate:open\": c[0] || (c[0] = (p) => Xe(l) ? l.value = p : null),\n      dir: o(u),\n      modal: o(r)\n    }, {\n      default: y(() => [\n        _(d.$slots, \"default\", { open: o(l) })\n      ]),\n      _: 3\n    }, 8, [\"open\", \"dir\", \"modal\"]));\n  }\n}), ah = /* @__PURE__ */ x({\n  __name: \"DropdownMenuTrigger\",\n  props: {\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = rs(), { forwardRef: n, currentElement: l } = R();\n    return le(() => {\n      e.triggerElement = l;\n    }), e.triggerId || (e.triggerId = he(void 0, \"radix-vue-dropdown-menu-trigger\")), (s, r) => (b(), S(o(Za), { \"as-child\": \"\" }, {\n      default: y(() => [\n        q(o(O), {\n          id: o(e).triggerId,\n          ref: o(n),\n          type: s.as === \"button\" ? \"button\" : void 0,\n          \"as-child\": t.asChild,\n          as: s.as,\n          \"aria-haspopup\": \"menu\",\n          \"aria-expanded\": o(e).open.value,\n          \"aria-controls\": o(e).open.value ? o(e).contentId : void 0,\n          \"data-disabled\": s.disabled ? \"\" : void 0,\n          disabled: s.disabled,\n          \"data-state\": o(e).open.value ? \"open\" : \"closed\",\n          onClick: r[0] || (r[0] = async (i) => {\n            var u;\n            !s.disabled && i.button === 0 && i.ctrlKey === !1 && ((u = o(e)) == null || u.onOpenToggle(), await oe(), o(e).open.value && i.preventDefault());\n          }),\n          onKeydown: r[1] || (r[1] = ie(\n            (i) => {\n              s.disabled || ([\"Enter\", \" \"].includes(i.key) && o(e).onOpenToggle(), i.key === \"ArrowDown\" && o(e).onOpenChange(!0), [\"Enter\", \" \", \"ArrowDown\"].includes(i.key) && i.preventDefault());\n            },\n            [\"enter\", \"space\", \"arrow-down\"]\n          ))\n        }, {\n          default: y(() => [\n            _(s.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"id\", \"type\", \"as-child\", \"as\", \"aria-expanded\", \"aria-controls\", \"data-disabled\", \"disabled\", \"data-state\"])\n      ]),\n      _: 3\n    }));\n  }\n}), nh = /* @__PURE__ */ x({\n  __name: \"DropdownMenuPortal\",\n  props: {\n    to: {},\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(po), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), oh = /* @__PURE__ */ x({\n  __name: \"DropdownMenuContent\",\n  props: {\n    forceMount: { type: Boolean },\n    loop: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t);\n    R();\n    const s = rs(), r = I(!1);\n    function i(u) {\n      u.defaultPrevented || (r.value || setTimeout(() => {\n        var d;\n        (d = s.triggerElement.value) == null || d.focus();\n      }, 0), r.value = !1, u.preventDefault());\n    }\n    return s.contentId || (s.contentId = he(void 0, \"radix-vue-dropdown-menu-content\")), (u, d) => {\n      var c;\n      return b(), S(o(uo), k(o(l), {\n        id: o(s).contentId,\n        \"aria-labelledby\": (c = o(s)) == null ? void 0 : c.triggerId,\n        style: {\n          \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n          \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n          \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n          \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n          \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n        },\n        onCloseAutoFocus: i,\n        onInteractOutside: d[0] || (d[0] = (p) => {\n          var m;\n          if (p.defaultPrevented) return;\n          const f = p.detail.originalEvent, v = f.button === 0 && f.ctrlKey === !0, g = f.button === 2 || v;\n          (!o(s).modal.value || g) && (r.value = !0), (m = o(s).triggerElement.value) != null && m.contains(p.target) && p.preventDefault();\n        })\n      }), {\n        default: y(() => [\n          _(u.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16, [\"id\", \"aria-labelledby\"]);\n    };\n  }\n}), lh = /* @__PURE__ */ x({\n  __name: \"DropdownMenuArrow\",\n  props: {\n    width: { default: 10 },\n    height: { default: 5 },\n    asChild: { type: Boolean },\n    as: { default: \"svg\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(no), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), sh = /* @__PURE__ */ x({\n  __name: \"DropdownMenuItem\",\n  props: {\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    return R(), (s, r) => (b(), S(o(_a), H(j({ ...e, ...o(l) })), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), rh = /* @__PURE__ */ x({\n  __name: \"DropdownMenuGroup\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(Qa), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), ih = /* @__PURE__ */ x({\n  __name: \"DropdownMenuSeparator\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(mo), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), uh = /* @__PURE__ */ x({\n  __name: \"DropdownMenuCheckboxItem\",\n  props: {\n    checked: { type: [Boolean, String] },\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\", \"update:checked\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    return R(), (s, r) => (b(), S(o(io), H(j({ ...e, ...o(l) })), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), dh = /* @__PURE__ */ x({\n  __name: \"DropdownMenuItemIndicator\",\n  props: {\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(ro), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), ch = /* @__PURE__ */ x({\n  __name: \"DropdownMenuLabel\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(co), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), ph = /* @__PURE__ */ x({\n  __name: \"DropdownMenuRadioGroup\",\n  props: {\n    modelValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    return R(), (s, r) => (b(), S(o(fo), H(j({ ...e, ...o(l) })), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), fh = /* @__PURE__ */ x({\n  __name: \"DropdownMenuRadioItem\",\n  props: {\n    value: {},\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t);\n    return R(), (s, r) => (b(), S(o(vo), H(j(o(l))), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), vh = /* @__PURE__ */ x({\n  __name: \"DropdownMenuSub\",\n  props: {\n    defaultOpen: { type: Boolean },\n    open: { type: Boolean, default: void 0 }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, l = ne(e, \"open\", t, {\n      passive: e.open === void 0,\n      defaultValue: e.defaultOpen ?? !1\n    });\n    return R(), (s, r) => (b(), S(o(ho), {\n      open: o(l),\n      \"onUpdate:open\": r[0] || (r[0] = (i) => Xe(l) ? l.value = i : null)\n    }, {\n      default: y(() => [\n        _(s.$slots, \"default\", { open: o(l) })\n      ]),\n      _: 3\n    }, 8, [\"open\"]));\n  }\n}), mh = /* @__PURE__ */ x({\n  __name: \"DropdownMenuSubContent\",\n  props: {\n    forceMount: { type: Boolean },\n    loop: { type: Boolean },\n    sideOffset: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"entryFocus\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t);\n    return R(), (s, r) => (b(), S(o(yo), k(o(l), { style: {\n      \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n      \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n      \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n      \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n      \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n    } }), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), hh = /* @__PURE__ */ x({\n  __name: \"DropdownMenuSubTrigger\",\n  props: {\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(go), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), nc = [\"value\", \"name\", \"disabled\", \"required\"], [Qt, oc] = Q(\"EditableRoot\"), yh = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"EditableRoot\",\n  props: {\n    defaultValue: {},\n    modelValue: {},\n    placeholder: { default: \"Enter text...\" },\n    dir: {},\n    disabled: { type: Boolean, default: !1 },\n    readonly: { type: Boolean },\n    activationMode: { default: \"focus\" },\n    selectOnFocus: { type: Boolean, default: !1 },\n    submitMode: { default: \"blur\" },\n    startWithEditMode: { type: Boolean },\n    maxLength: {},\n    autoResize: { type: Boolean, default: !1 },\n    id: {},\n    name: {},\n    required: { type: Boolean, default: !1 },\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  emits: [\"update:modelValue\", \"submit\", \"update:state\"],\n  setup(a, { expose: t, emit: e }) {\n    const n = a, l = e, {\n      id: s,\n      name: r,\n      defaultValue: i,\n      startWithEditMode: u,\n      placeholder: d,\n      maxLength: c,\n      disabled: p,\n      dir: f,\n      submitMode: v,\n      activationMode: g,\n      selectOnFocus: m,\n      readonly: w,\n      autoResize: C,\n      required: D\n    } = ae(n), h = I(), E = be(f), P = I(u.value ?? !1), B = ne(n, \"modelValue\", l, {\n      defaultValue: i.value ?? \"\",\n      passive: n.modelValue === void 0\n    }), { primitiveElement: T, currentElement: M } = Ae(), V = Je(M), A = $(() => typeof d.value == \"string\" ? { edit: d.value, preview: d.value } : d.value), F = I(B.value);\n    function U() {\n      B.value = F.value, P.value = !1, l(\"update:state\", \"cancel\");\n    }\n    function W() {\n      P.value = !0, l(\"update:state\", \"edit\");\n    }\n    function ee() {\n      F.value = B.value, P.value = !1, l(\"update:state\", \"submit\"), l(\"submit\", B.value);\n    }\n    function L() {\n      P.value && (v.value === \"blur\" || v.value === \"both\" ? ee() : U());\n    }\n    const G = zl(() => L(), M), N = Kl(() => L(), M), z = $(() => B.value === \"\");\n    return t({\n      /** Function to submit the value of the editable */\n      submit: ee,\n      /** Function to cancel the value of the editable */\n      cancel: U,\n      /** Function to set the editable in edit mode */\n      edit: W\n    }), oc({\n      id: s,\n      name: r,\n      disabled: p,\n      isEditing: P,\n      maxLength: c,\n      modelValue: B,\n      placeholder: A,\n      edit: W,\n      cancel: U,\n      submit: ee,\n      activationMode: g,\n      submitMode: v,\n      selectOnFocus: m,\n      inputRef: h,\n      startWithEditMode: u,\n      isEmpty: z,\n      readonly: w,\n      autoResize: C\n    }), (Y, K) => (b(), ve(we, null, [\n      q(o(O), k(Y.$attrs, {\n        ref_key: \"primitiveElement\",\n        ref: T,\n        as: Y.as,\n        \"as-child\": Y.asChild,\n        dir: o(E),\n        onFocusCapture: o(N).onFocusCapture,\n        onBlurCapture: o(N).onBlurCapture,\n        onPointerdownCapture: o(G).onPointerDownCapture\n      }), {\n        default: y(() => [\n          _(Y.$slots, \"default\", {\n            modelValue: o(B),\n            isEditing: P.value,\n            isEmpty: z.value,\n            submit: ee,\n            cancel: U,\n            edit: W\n          })\n        ]),\n        _: 3\n      }, 16, [\"as\", \"as-child\", \"dir\", \"onFocusCapture\", \"onBlurCapture\", \"onPointerdownCapture\"]),\n      o(V) ? (b(), ve(\"input\", {\n        key: 0,\n        type: \"text\",\n        tabindex: \"-1\",\n        \"aria-hidden\": \"true\",\n        value: o(B),\n        name: o(r),\n        disabled: o(p),\n        required: o(D),\n        style: {\n          transform: \"translateX(-100%)\",\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          opacity: 0,\n          margin: 0\n        }\n      }, null, 8, nc)) : ce(\"\", !0)\n    ], 64));\n  }\n}), gh = /* @__PURE__ */ x({\n  __name: \"EditableArea\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a, e = Qt();\n    return (n, l) => (b(), S(o(O), k(t, {\n      \"data-placeholder-shown\": o(e).isEditing.value ? void 0 : \"\",\n      \"data-focus\": o(e).isEditing.value ? \"\" : void 0,\n      \"data-focused\": o(e).isEditing.value ? \"\" : void 0,\n      \"data-empty\": o(e).isEmpty.value ? \"\" : void 0,\n      \"data-readonly\": o(e).readonly.value ? \"\" : void 0,\n      \"data-disabled\": o(e).disabled.value ? \"\" : void 0,\n      style: o(e).autoResize.value ? { display: \"inline-grid\" } : void 0\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"data-placeholder-shown\", \"data-focus\", \"data-focused\", \"data-empty\", \"data-readonly\", \"data-disabled\", \"style\"]));\n  }\n}), bh = /* @__PURE__ */ x({\n  __name: \"EditableInput\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"input\" }\n  },\n  setup(a) {\n    const t = a, e = Qe(), n = Qt(), l = $(() => n.disabled.value), s = $(() => {\n      var d;\n      return (d = n.placeholder.value) == null ? void 0 : d.edit;\n    }), { primitiveElement: r, currentElement: i } = Ae();\n    le(() => {\n      var d, c;\n      n.inputRef.value = i.value, n.startWithEditMode.value && ((d = n.inputRef.value) == null || d.focus({ preventScroll: !0 }), n.selectOnFocus.value && ((c = n.inputRef.value) == null || c.select()));\n    }), te(n.isEditing, (d) => {\n      d && oe(() => {\n        var c, p;\n        (c = n.inputRef.value) == null || c.focus({ preventScroll: !0 }), n.selectOnFocus.value && ((p = n.inputRef.value) == null || p.select());\n      });\n    });\n    function u(d) {\n      (n.submitMode.value === \"enter\" || n.submitMode.value === \"both\") && d.key === e.ENTER && !d.shiftKey && !d.metaKey && n.submit();\n    }\n    return (d, c) => (b(), S(o(O), k({\n      ref_key: \"primitiveElement\",\n      ref: r\n    }, t, {\n      value: o(n).modelValue.value,\n      placeholder: s.value,\n      disabled: l.value,\n      maxlength: o(n).maxLength.value,\n      \"data-disabled\": l.value ? \"\" : void 0,\n      \"data-readonly\": o(n).readonly.value ? \"\" : void 0,\n      readonly: o(n).readonly.value,\n      \"aria-label\": \"editable input\",\n      hidden: o(n).autoResize.value ? void 0 : !o(n).isEditing.value,\n      style: o(n).autoResize.value ? { all: \"unset\", gridArea: \"1 / 1 / auto / auto\", visibility: o(n).isEditing.value ? void 0 : \"hidden\" } : void 0,\n      onInput: c[0] || (c[0] = (p) => o(n).modelValue.value = p.target.value),\n      onKeydown: [\n        ie(u, [\"enter\", \"space\"]),\n        ie(o(n).cancel, [\"esc\"])\n      ]\n    }), {\n      default: y(() => [\n        _(d.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"value\", \"placeholder\", \"disabled\", \"maxlength\", \"data-disabled\", \"data-readonly\", \"readonly\", \"hidden\", \"style\", \"onKeydown\"]));\n  }\n}), Ch = /* @__PURE__ */ x({\n  __name: \"EditablePreview\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = a, e = Qt(), n = $(() => {\n      var r;\n      return (r = e.placeholder.value) == null ? void 0 : r.preview;\n    });\n    function l() {\n      e.activationMode.value === \"focus\" && e.edit();\n    }\n    function s() {\n      e.activationMode.value === \"dblclick\" && e.edit();\n    }\n    return (r, i) => (b(), S(o(O), k(t, {\n      tabindex: \"0\",\n      \"data-placeholder-shown\": o(e).isEditing.value ? void 0 : \"\",\n      hidden: o(e).autoResize.value ? void 0 : o(e).isEditing.value,\n      style: o(e).autoResize.value ? {\n        whiteSpace: \"pre\",\n        userSelect: \"none\",\n        gridArea: \"1 / 1 / auto / auto\",\n        visibility: o(e).isEditing.value ? \"hidden\" : void 0,\n        overflow: \"hidden\",\n        textOverflow: \"ellipsis\"\n      } : void 0,\n      onFocusin: l,\n      onDblclick: s\n    }), {\n      default: y(() => [\n        _(r.$slots, \"default\", {}, () => [\n          me(De(o(e).modelValue.value || n.value), 1)\n        ])\n      ]),\n      _: 3\n    }, 16, [\"data-placeholder-shown\", \"hidden\", \"style\"]));\n  }\n}), wh = /* @__PURE__ */ x({\n  __name: \"EditableSubmitTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = Qt();\n    return (n, l) => (b(), S(o(O), k(t, {\n      \"aria-label\": \"submit\",\n      \"aria-disabled\": o(e).disabled.value ? \"\" : void 0,\n      \"data-disabled\": o(e).disabled.value ? \"\" : void 0,\n      disabled: o(e).disabled.value,\n      type: n.as === \"button\" ? \"button\" : void 0,\n      hidden: o(e).isEditing.value ? void 0 : \"\",\n      onClick: o(e).submit\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\", {}, () => [\n          me(\"Submit\")\n        ])\n      ]),\n      _: 3\n    }, 16, [\"aria-disabled\", \"data-disabled\", \"disabled\", \"type\", \"hidden\", \"onClick\"]));\n  }\n}), _h = /* @__PURE__ */ x({\n  __name: \"EditableCancelTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = Qt();\n    return (n, l) => (b(), S(o(O), k(t, {\n      \"aria-label\": \"cancel\",\n      \"aria-disabled\": o(e).disabled.value ? \"\" : void 0,\n      \"data-disabled\": o(e).disabled.value ? \"\" : void 0,\n      disabled: o(e).disabled.value,\n      type: n.as === \"button\" ? \"button\" : void 0,\n      hidden: o(e).isEditing.value ? void 0 : \"\",\n      onClick: o(e).cancel\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\", {}, () => [\n          me(\"Cancel\")\n        ])\n      ]),\n      _: 3\n    }, 16, [\"aria-disabled\", \"data-disabled\", \"disabled\", \"type\", \"hidden\", \"onClick\"]));\n  }\n}), xh = /* @__PURE__ */ x({\n  __name: \"EditableEditTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = Qt();\n    return (n, l) => (b(), S(o(O), k(t, {\n      \"aria-label\": \"edit\",\n      \"aria-disabled\": o(e).disabled.value ? \"\" : void 0,\n      \"data-disabled\": o(e).disabled.value ? \"\" : void 0,\n      disabled: o(e).disabled.value,\n      type: n.as === \"button\" ? \"button\" : void 0,\n      hidden: o(e).isEditing.value ? \"\" : void 0,\n      onClick: o(e).edit\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\", {}, () => [\n          me(\"Edit\")\n        ])\n      ]),\n      _: 3\n    }, 16, [\"aria-disabled\", \"data-disabled\", \"disabled\", \"type\", \"hidden\", \"onClick\"]));\n  }\n}), [wo, lc] = Q(\"HoverCardRoot\"), Sh = /* @__PURE__ */ x({\n  __name: \"HoverCardRoot\",\n  props: {\n    defaultOpen: { type: Boolean, default: !1 },\n    open: { type: Boolean, default: void 0 },\n    openDelay: { default: 700 },\n    closeDelay: { default: 300 }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { openDelay: l, closeDelay: s } = ae(e);\n    R();\n    const r = ne(e, \"open\", n, {\n      defaultValue: e.defaultOpen,\n      passive: e.open === void 0\n    }), i = I(0), u = I(0), d = I(!1), c = I(!1), p = I(!1), f = I();\n    function v() {\n      clearTimeout(u.value), i.value = window.setTimeout(() => r.value = !0, l.value);\n    }\n    function g() {\n      clearTimeout(i.value), !d.value && !c.value && (u.value = window.setTimeout(() => r.value = !1, s.value));\n    }\n    function m() {\n      r.value = !1;\n    }\n    return lc({\n      open: r,\n      onOpenChange(w) {\n        r.value = w;\n      },\n      onOpen: v,\n      onClose: g,\n      onDismiss: m,\n      hasSelectionRef: d,\n      isPointerDownOnContentRef: c,\n      isPointerInTransitRef: p,\n      triggerElement: f\n    }), (w, C) => (b(), S(o(Tt), null, {\n      default: y(() => [\n        _(w.$slots, \"default\", { open: o(r) })\n      ]),\n      _: 3\n    }));\n  }\n});\nfunction Tn(a) {\n  return (t) => t.pointerType === \"touch\" ? void 0 : a();\n}\nfunction sc(a) {\n  const t = [], e = document.createTreeWalker(a, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (n) => n.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP\n  });\n  for (; e.nextNode(); ) t.push(e.currentNode);\n  return t;\n}\nconst Eh = /* @__PURE__ */ x({\n  __name: \"HoverCardTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"a\" }\n  },\n  setup(a) {\n    const { forwardRef: t, currentElement: e } = R(), n = wo();\n    n.triggerElement = e;\n    function l() {\n      setTimeout(() => {\n        !n.isPointerInTransitRef.value && !n.open.value && n.onClose();\n      }, 0);\n    }\n    return (s, r) => (b(), S(o(Rt), { \"as-child\": \"\" }, {\n      default: y(() => [\n        q(o(O), {\n          ref: o(t),\n          \"as-child\": s.asChild,\n          as: s.as,\n          \"data-state\": o(n).open.value ? \"open\" : \"closed\",\n          \"data-grace-area-trigger\": \"\",\n          onPointerenter: r[0] || (r[0] = (i) => o(Tn)(o(n).onOpen)(i)),\n          onPointerleave: r[1] || (r[1] = (i) => o(Tn)(l)(i)),\n          onFocus: r[2] || (r[2] = (i) => o(n).onOpen()),\n          onBlur: r[3] || (r[3] = (i) => o(n).onClose())\n        }, {\n          default: y(() => [\n            _(s.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"as-child\", \"as\", \"data-state\"])\n      ]),\n      _: 3\n    }));\n  }\n}), Ph = /* @__PURE__ */ x({\n  __name: \"HoverCardPortal\",\n  props: {\n    to: {},\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(ht), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), rc = /* @__PURE__ */ x({\n  __name: \"HoverCardContentImpl\",\n  props: {\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = It(e), { forwardRef: s, currentElement: r } = R(), i = wo(), { isPointerInTransit: u, onPointerExit: d } = Al(i.triggerElement, r);\n    ui(i.isPointerInTransitRef, u, { direction: \"rtl\" }), d(() => {\n      i.onClose();\n    });\n    const c = I(!1);\n    let p;\n    ge((v) => {\n      if (c.value) {\n        const g = document.body;\n        p = g.style.userSelect || g.style.webkitUserSelect, g.style.userSelect = \"none\", g.style.webkitUserSelect = \"none\", v(() => {\n          g.style.userSelect = p, g.style.webkitUserSelect = p;\n        });\n      }\n    });\n    function f() {\n      c.value = !1, i.isPointerDownOnContentRef.value = !1, oe(() => {\n        var g;\n        ((g = document.getSelection()) == null ? void 0 : g.toString()) !== \"\" && (i.hasSelectionRef.value = !0);\n      });\n    }\n    return le(() => {\n      r.value && (document.addEventListener(\"pointerup\", f), sc(r.value).forEach((g) => g.setAttribute(\"tabindex\", \"-1\")));\n    }), Be(() => {\n      document.removeEventListener(\"pointerup\", f), i.hasSelectionRef.value = !1, i.isPointerDownOnContentRef.value = !1;\n    }), (v, g) => (b(), S(o(yt), {\n      \"as-child\": \"\",\n      \"disable-outside-pointer-events\": !1,\n      onEscapeKeyDown: g[1] || (g[1] = (m) => n(\"escapeKeyDown\", m)),\n      onPointerDownOutside: g[2] || (g[2] = (m) => n(\"pointerDownOutside\", m)),\n      onFocusOutside: g[3] || (g[3] = ue((m) => n(\"focusOutside\", m), [\"prevent\"])),\n      onDismiss: o(i).onDismiss\n    }, {\n      default: y(() => [\n        q(o(Dt), k({ ...o(l), ...v.$attrs }, {\n          ref: o(s),\n          \"data-state\": o(i).open.value ? \"open\" : \"closed\",\n          style: {\n            userSelect: c.value ? \"text\" : void 0,\n            // Safari requires prefix\n            WebkitUserSelect: c.value ? \"text\" : void 0,\n            // re-namespace exposed content custom properties\n            \"--radix-hover-card-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n            \"--radix-hover-card-content-available-width\": \"var(--radix-popper-available-width)\",\n            \"--radix-hover-card-content-available-height\": \"var(--radix-popper-available-height)\",\n            \"--radix-hover-card-trigger-width\": \"var(--radix-popper-anchor-width)\",\n            \"--radix-hover-card-trigger-height\": \"var(--radix-popper-anchor-height)\"\n          },\n          onPointerdown: g[0] || (g[0] = (m) => {\n            m.currentTarget.contains(m.target) && (c.value = !0), o(i).hasSelectionRef.value = !1, o(i).isPointerDownOnContentRef.value = !0;\n          })\n        }), {\n          default: y(() => [\n            _(v.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"data-state\", \"style\"])\n      ]),\n      _: 3\n    }, 8, [\"onDismiss\"]));\n  }\n}), Dh = /* @__PURE__ */ x({\n  __name: \"HoverCardContent\",\n  props: {\n    forceMount: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t), { forwardRef: s } = R(), r = wo();\n    return (i, u) => (b(), S(o(Pe), {\n      present: i.forceMount || o(r).open.value\n    }, {\n      default: y(() => [\n        q(rc, k(o(l), {\n          ref: o(s),\n          onPointerenter: u[0] || (u[0] = (d) => o(Tn)(o(r).onOpen)(d))\n        }), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16)\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), $h = /* @__PURE__ */ x({\n  __name: \"HoverCardArrow\",\n  props: {\n    width: { default: 10 },\n    height: { default: 5 },\n    asChild: { type: Boolean },\n    as: { default: \"svg\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(Yt), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Bh = /* @__PURE__ */ x({\n  __name: \"Label\",\n  props: {\n    for: {},\n    asChild: { type: Boolean },\n    as: { default: \"label\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(O), k(t, {\n      onMousedown: n[0] || (n[0] = (l) => {\n        !l.defaultPrevented && l.detail > 1 && l.preventDefault();\n      })\n    }), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n});\nfunction ic(a) {\n  return a == null ? void 0 : a.querySelector(\"[data-state=checked]\");\n}\nfunction uc(a, t, e) {\n  return a === void 0 ? !1 : Array.isArray(a) ? a.some((n) => Wt(n, t, e)) : Wt(a, t, e);\n}\nfunction Wt(a, t, e) {\n  return a === void 0 || t === void 0 ? !1 : typeof a == \"string\" ? a === t : typeof e == \"function\" ? e(a, t) : typeof e == \"string\" ? (a == null ? void 0 : a[e]) === (t == null ? void 0 : t[e]) : Ye(a, t);\n}\nconst [en, dc] = Q(\"ListboxRoot\"), Ih = /* @__PURE__ */ x({\n  __name: \"ListboxRoot\",\n  props: {\n    modelValue: {},\n    defaultValue: {},\n    multiple: { type: Boolean },\n    orientation: { default: \"vertical\" },\n    dir: {},\n    disabled: { type: Boolean },\n    selectionBehavior: { default: \"toggle\" },\n    highlightOnHover: { type: Boolean },\n    by: {},\n    name: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\", \"highlight\", \"entryFocus\", \"leave\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { multiple: l, highlightOnHover: s, orientation: r, disabled: i, selectionBehavior: u, dir: d } = ae(e), { getItems: c } = ba(), { handleTypeaheadSearch: p } = ga(), { primitiveElement: f, currentElement: v } = Ae(), g = Qe(), m = be(d), w = Je(v), C = I(), D = I(!1), h = I(!0), E = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue ?? (l.value ? [] : void 0),\n      passive: e.modelValue === void 0,\n      deep: !0\n    });\n    function P(K) {\n      if (D.value = !0, Array.isArray(E.value)) {\n        const J = E.value.findIndex((Z) => Wt(Z, K, e.by));\n        if (e.selectionBehavior === \"toggle\") {\n          const Z = [...E.value];\n          J === -1 ? Z.push(K) : Z.splice(J, 1), E.value = Z;\n        } else\n          E.value = [K], C.value = K;\n      } else\n        e.selectionBehavior === \"toggle\" && Wt(E.value, K, e.by) ? E.value = void 0 : E.value = K;\n      setTimeout(() => {\n        D.value = !1;\n      }, 1);\n    }\n    const B = I(null), T = I(null), M = I(!1), V = ia(), A = ia();\n    function F() {\n      return c().map((K) => K.ref).filter((K) => K.dataset.disabled !== \"\");\n    }\n    function U(K) {\n      if (!K)\n        return;\n      B.value = K, B.value.focus(), B.value.scrollIntoView({ block: \"nearest\" });\n      const J = c().find((Z) => Z.ref === K);\n      n(\"highlight\", J);\n    }\n    function W(K) {\n      B.value && B.value.click();\n    }\n    function ee(K) {\n      if (D.value = !0, M.value)\n        A.trigger(K);\n      else {\n        const J = K.altKey || K.ctrlKey || K.metaKey;\n        if (J && K.key === \"a\" && l.value) {\n          const Z = c(), re = Z.map((X) => X.value);\n          E.value = [...re], K.preventDefault(), U(Z[Z.length - 1].ref);\n        } else if (!J) {\n          const Z = p(K.key, F());\n          Z && U(Z);\n        }\n      }\n      setTimeout(() => {\n        D.value = !1;\n      }, 1);\n    }\n    function L(K) {\n      const J = B.value;\n      J != null && J.isConnected && (T.value = J), B.value = null, n(\"leave\", K);\n    }\n    function G(K) {\n      var Z, re;\n      const J = new CustomEvent(\"listbox.entryFocus\", { bubbles: !1, cancelable: !0 });\n      if ((Z = K.currentTarget) == null || Z.dispatchEvent(J), n(\"entryFocus\", J), !J.defaultPrevented)\n        if (T.value)\n          U(T.value);\n        else {\n          const X = (re = F()) == null ? void 0 : re[0];\n          U(X);\n        }\n    }\n    function N(K) {\n      const J = Ql(K, r.value, m.value);\n      if (!J)\n        return;\n      let Z = F();\n      if (B.value) {\n        if (J === \"last\")\n          Z.reverse();\n        else if (J === \"prev\" || J === \"next\") {\n          J === \"prev\" && Z.reverse();\n          const re = Z.indexOf(B.value);\n          Z = Z.slice(re + 1);\n        }\n        z(K, Z[0]);\n      }\n      if (Z.length) {\n        const re = !B.value && J === \"prev\" ? Z.length - 1 : 0;\n        U(Z[re]);\n      }\n      if (M.value)\n        return A.trigger(K);\n    }\n    function z(K, J) {\n      var re;\n      if (!(M.value || e.selectionBehavior !== \"replace\" || !l.value || !Array.isArray(E.value) || (K.altKey || K.ctrlKey || K.metaKey) && !K.shiftKey) && K.shiftKey) {\n        const X = c().filter((_e) => _e.ref.dataset.disabled !== \"\");\n        let se = (re = X.find((_e) => _e.ref === J)) == null ? void 0 : re.value;\n        if (K.key === g.END ? se = X[X.length - 1].value : K.key === g.HOME && (se = X[0].value), !se || !C.value)\n          return;\n        const pe = Et(X.map((_e) => _e.value), C.value, se);\n        E.value = pe;\n      }\n    }\n    async function Y(K) {\n      if (M.value)\n        V.trigger(K);\n      else {\n        await oe();\n        const Z = F().find((re) => re.dataset.state === \"checked\");\n        Z && U(Z);\n      }\n    }\n    return te(E, () => {\n      D.value || oe(() => {\n        Y();\n      });\n    }, { immediate: !0, deep: !0 }), dc({\n      modelValue: E,\n      // @ts-expect-error ignoring\n      onValueChange: P,\n      multiple: l,\n      orientation: r,\n      dir: m,\n      disabled: i,\n      highlightOnHover: s,\n      highlightedElement: B,\n      isVirtual: M,\n      virtualFocusHook: V,\n      virtualKeydownHook: A,\n      by: e.by,\n      firstValue: C,\n      selectionBehavior: u,\n      focusable: h,\n      onLeave: L,\n      onEnter: G,\n      onChangeHighlight: U,\n      onKeydownEnter: W,\n      onKeydownNavigation: N,\n      onKeydownTypeAhead: ee\n    }), (K, J) => (b(), S(o(O), {\n      ref_key: \"primitiveElement\",\n      ref: f,\n      as: K.as,\n      \"as-child\": K.asChild,\n      dir: o(m),\n      \"data-disabled\": o(i) ? \"\" : void 0,\n      onPointerleave: L,\n      onFocusout: J[0] || (J[0] = async (Z) => {\n        const re = Z.relatedTarget || Z.target;\n        await oe(), B.value && !o(v).contains(re) && L(Z);\n      })\n    }, {\n      default: y(() => [\n        _(K.$slots, \"default\", { modelValue: o(E) }),\n        o(w) && e.name ? (b(), S(o(to), {\n          key: 0,\n          name: e.name,\n          value: o(E)\n        }, null, 8, [\"name\", \"value\"])) : ce(\"\", !0)\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"dir\", \"data-disabled\"]));\n  }\n}), Th = /* @__PURE__ */ x({\n  __name: \"ListboxContent\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = en(), e = $t(!1, 10);\n    return (n, l) => (b(), S(o(Ca), null, {\n      default: y(() => [\n        q(o(O), {\n          role: \"listbox\",\n          as: n.as,\n          \"as-child\": n.asChild,\n          tabindex: o(t).focusable.value ? o(t).highlightedElement.value ? \"-1\" : \"0\" : void 0,\n          \"aria-orientation\": o(t).orientation.value,\n          \"aria-multiselectable\": !!o(t).multiple.value,\n          \"data-orientation\": o(t).orientation.value,\n          onMousedown: l[0] || (l[0] = ue((s) => e.value = !0, [\"left\"])),\n          onFocus: l[1] || (l[1] = (s) => {\n            o(e) || o(t).onEnter(s);\n          }),\n          onKeydown: [\n            l[2] || (l[2] = ie(ue((s) => {\n              o(t).focusable.value && o(t).onKeydownNavigation(s);\n            }, [\"prevent\"]), [\"down\", \"up\", \"left\", \"right\", \"home\", \"end\"])),\n            ie(o(t).onKeydownEnter, [\"enter\"]),\n            o(t).onKeydownTypeAhead\n          ]\n        }, {\n          default: y(() => [\n            _(n.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"as\", \"as-child\", \"tabindex\", \"aria-orientation\", \"aria-multiselectable\", \"data-orientation\", \"onKeydown\"])\n      ]),\n      _: 3\n    }));\n  }\n}), Rh = /* @__PURE__ */ x({\n  __name: \"ListboxFilter\",\n  props: {\n    modelValue: {},\n    autoFocus: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"input\" }\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, l = ne(e, \"modelValue\", t, {\n      defaultValue: \"\",\n      passive: e.modelValue === void 0\n    }), s = en();\n    s.focusable.value = !1;\n    const { primitiveElement: r, currentElement: i } = Ae();\n    return le(() => {\n      setTimeout(() => {\n        var u;\n        e.autoFocus && ((u = i.value) == null || u.focus());\n      }, 1);\n    }), (u, d) => (b(), S(o(O), {\n      ref_key: \"primitiveElement\",\n      ref: r,\n      as: u.as,\n      \"as-child\": u.asChild,\n      value: o(l),\n      disabled: o(s).disabled.value ? \"\" : void 0,\n      \"data-disabled\": o(s).disabled.value ? \"\" : void 0,\n      type: \"text\",\n      onKeydown: [\n        ie(ue(o(s).onKeydownNavigation, [\"prevent\"]), [\"down\", \"up\", \"left\", \"right\", \"home\", \"end\"]),\n        ie(o(s).onKeydownEnter, [\"enter\"])\n      ],\n      onInput: d[0] || (d[0] = (c) => {\n        l.value = c.target.value;\n      })\n    }, {\n      default: y(() => [\n        _(u.$slots, \"default\", { modelValue: o(l) })\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"value\", \"disabled\", \"data-disabled\", \"onKeydown\"]));\n  }\n}), cc = \"listbox.select\", [pc, fc] = Q(\"ListboxItem\"), Ah = /* @__PURE__ */ x({\n  __name: \"ListboxItem\",\n  props: {\n    value: {},\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  emits: [\"select\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { forwardRef: l, currentElement: s } = R(), r = he(void 0, \"radix-vue-listbox-item\"), i = en(), u = $(() => s.value === i.highlightedElement.value), d = $(() => uc(i.modelValue.value, e.value, i.by)), c = $(() => i.disabled.value || e.disabled);\n    async function p(v) {\n      n(\"select\", v), !(v != null && v.defaultPrevented) && !c.value && v && (i.onValueChange(e.value), i.onChangeHighlight(v.target));\n    }\n    function f(v) {\n      const g = { originalEvent: v, value: e.value };\n      Kt(cc, p, g);\n    }\n    return fc({\n      isSelected: d\n    }), (v, g) => (b(), S(o(Zt), { value: v.value }, {\n      default: y(() => [\n        q(o(O), {\n          id: o(r),\n          ref: o(l),\n          role: \"option\",\n          tabindex: o(i).focusable.value ? u.value ? \"0\" : \"-1\" : void 0,\n          \"aria-selected\": d.value,\n          as: v.as,\n          \"as-child\": v.asChild,\n          disabled: c.value ? \"\" : void 0,\n          \"data-disabled\": c.value ? \"\" : void 0,\n          \"data-highlighted\": u.value ? \"\" : void 0,\n          \"data-state\": d.value ? \"checked\" : \"unchecked\",\n          onClick: f,\n          onKeydown: ie(ue(f, [\"prevent\"]), [\"space\"]),\n          onPointermove: g[0] || (g[0] = (m) => {\n            o(i).highlightOnHover.value ? o(i).onChangeHighlight(o(s)) : o(i).focusable.value || o(i).onChangeHighlight(o(s));\n          })\n        }, {\n          default: y(() => [\n            _(v.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"id\", \"tabindex\", \"aria-selected\", \"as\", \"as-child\", \"disabled\", \"data-disabled\", \"data-highlighted\", \"data-state\", \"onKeydown\"])\n      ]),\n      _: 3\n    }, 8, [\"value\"]));\n  }\n}), Oh = /* @__PURE__ */ x({\n  __name: \"ListboxItemIndicator\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = pc();\n    return (n, l) => o(e).isSelected.value ? (b(), S(o(O), k({\n      key: 0,\n      \"aria-hidden\": \"true\"\n    }, t), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16)) : ce(\"\", !0);\n  }\n});\nfunction na(a, t, e) {\n  let n = e.initialDeps ?? [], l;\n  return () => {\n    var s, r, i, u;\n    let d;\n    e.key && ((s = e.debug) != null && s.call(e)) && (d = Date.now());\n    const c = a();\n    if (!(c.length !== n.length || c.some((v, g) => n[g] !== v)))\n      return l;\n    n = c;\n    let f;\n    if (e.key && ((r = e.debug) != null && r.call(e)) && (f = Date.now()), l = t(...c), e.key && ((i = e.debug) != null && i.call(e))) {\n      const v = Math.round((Date.now() - d) * 100) / 100, g = Math.round((Date.now() - f) * 100) / 100, m = g / 16, w = (C, D) => {\n        for (C = String(C); C.length < D; )\n          C = \" \" + C;\n        return C;\n      };\n      console.info(\n        `%c⏱ ${w(g, 5)} /${w(v, 5)} ms`,\n        `\n            font-size: .6rem;\n            font-weight: bold;\n            color: hsl(${Math.max(\n          0,\n          Math.min(120 - 120 * m, 120)\n        )}deg 100% 31%);`,\n        e == null ? void 0 : e.key\n      );\n    }\n    return (u = e == null ? void 0 : e.onChange) == null || u.call(e, l), l;\n  };\n}\nfunction xn(a, t) {\n  if (a === void 0)\n    throw new Error(\"Unexpected undefined\");\n  return a;\n}\nconst vc = (a, t) => Math.abs(a - t) < 1, mc = (a, t, e) => {\n  let n;\n  return function(...l) {\n    a.clearTimeout(n), n = a.setTimeout(() => t.apply(this, l), e);\n  };\n}, hc = (a) => a, yc = (a) => {\n  const t = Math.max(a.startIndex - a.overscan, 0), e = Math.min(a.endIndex + a.overscan, a.count - 1), n = [];\n  for (let l = t; l <= e; l++)\n    n.push(l);\n  return n;\n}, gc = (a, t) => {\n  const e = a.scrollElement;\n  if (!e)\n    return;\n  const n = a.targetWindow;\n  if (!n)\n    return;\n  const l = (r) => {\n    const { width: i, height: u } = r;\n    t({ width: Math.round(i), height: Math.round(u) });\n  };\n  if (l(e.getBoundingClientRect()), !n.ResizeObserver)\n    return () => {\n    };\n  const s = new n.ResizeObserver((r) => {\n    const i = r[0];\n    if (i != null && i.borderBoxSize) {\n      const u = i.borderBoxSize[0];\n      if (u) {\n        l({ width: u.inlineSize, height: u.blockSize });\n        return;\n      }\n    }\n    l(e.getBoundingClientRect());\n  });\n  return s.observe(e, { box: \"border-box\" }), () => {\n    s.unobserve(e);\n  };\n}, qo = {\n  passive: !0\n}, bc = typeof window > \"u\" ? !0 : \"onscrollend\" in window, Cc = (a, t) => {\n  const e = a.scrollElement;\n  if (!e)\n    return;\n  const n = a.targetWindow;\n  if (!n)\n    return;\n  let l = 0;\n  const s = bc ? () => {\n  } : mc(\n    n,\n    () => {\n      t(l, !1);\n    },\n    a.options.isScrollingResetDelay\n  ), r = (d) => () => {\n    l = e[a.options.horizontal ? \"scrollLeft\" : \"scrollTop\"], s(), t(l, d);\n  }, i = r(!0), u = r(!1);\n  return u(), e.addEventListener(\"scroll\", i, qo), e.addEventListener(\"scrollend\", u, qo), () => {\n    e.removeEventListener(\"scroll\", i), e.removeEventListener(\"scrollend\", u);\n  };\n}, wc = (a, t, e) => {\n  if (t != null && t.borderBoxSize) {\n    const n = t.borderBoxSize[0];\n    if (n)\n      return Math.round(\n        n[e.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n      );\n  }\n  return Math.round(\n    a.getBoundingClientRect()[e.options.horizontal ? \"width\" : \"height\"]\n  );\n}, _c = (a, {\n  adjustments: t = 0,\n  behavior: e\n}, n) => {\n  var l, s;\n  const r = a + t;\n  (s = (l = n.scrollElement) == null ? void 0 : l.scrollTo) == null || s.call(l, {\n    [n.options.horizontal ? \"left\" : \"top\"]: r,\n    behavior: e\n  });\n};\nclass xc {\n  constructor(t) {\n    this.unsubs = [], this.scrollElement = null, this.targetWindow = null, this.isScrolling = !1, this.scrollToIndexTimeoutId = null, this.measurementsCache = [], this.itemSizeCache = /* @__PURE__ */ new Map(), this.pendingMeasuredCacheIndexes = [], this.scrollRect = null, this.scrollOffset = null, this.scrollDirection = null, this.scrollAdjustments = 0, this.elementsCache = /* @__PURE__ */ new Map(), this.observer = /* @__PURE__ */ (() => {\n      let e = null;\n      const n = () => e || (!this.targetWindow || !this.targetWindow.ResizeObserver ? null : e = new this.targetWindow.ResizeObserver((l) => {\n        l.forEach((s) => {\n          this._measureElement(s.target, s);\n        });\n      }));\n      return {\n        disconnect: () => {\n          var l;\n          return (l = n()) == null ? void 0 : l.disconnect();\n        },\n        observe: (l) => {\n          var s;\n          return (s = n()) == null ? void 0 : s.observe(l, { box: \"border-box\" });\n        },\n        unobserve: (l) => {\n          var s;\n          return (s = n()) == null ? void 0 : s.unobserve(l);\n        }\n      };\n    })(), this.range = null, this.setOptions = (e) => {\n      Object.entries(e).forEach(([n, l]) => {\n        typeof l > \"u\" && delete e[n];\n      }), this.options = {\n        debug: !1,\n        initialOffset: 0,\n        overscan: 1,\n        paddingStart: 0,\n        paddingEnd: 0,\n        scrollPaddingStart: 0,\n        scrollPaddingEnd: 0,\n        horizontal: !1,\n        getItemKey: hc,\n        rangeExtractor: yc,\n        onChange: () => {\n        },\n        measureElement: wc,\n        initialRect: { width: 0, height: 0 },\n        scrollMargin: 0,\n        gap: 0,\n        indexAttribute: \"data-index\",\n        initialMeasurementsCache: [],\n        lanes: 1,\n        isScrollingResetDelay: 150,\n        enabled: !0,\n        ...e\n      };\n    }, this.notify = (e, n) => {\n      var l, s;\n      const { startIndex: r, endIndex: i } = this.range ?? {\n        startIndex: void 0,\n        endIndex: void 0\n      }, u = this.calculateRange();\n      (e || r !== (u == null ? void 0 : u.startIndex) || i !== (u == null ? void 0 : u.endIndex)) && ((s = (l = this.options).onChange) == null || s.call(l, this, n));\n    }, this.cleanup = () => {\n      this.unsubs.filter(Boolean).forEach((e) => e()), this.unsubs = [], this.scrollElement = null, this.targetWindow = null, this.observer.disconnect(), this.elementsCache.clear();\n    }, this._didMount = () => () => {\n      this.cleanup();\n    }, this._willUpdate = () => {\n      var e;\n      const n = this.options.enabled ? this.options.getScrollElement() : null;\n      if (this.scrollElement !== n) {\n        if (this.cleanup(), !n) {\n          this.notify(!1, !1);\n          return;\n        }\n        this.scrollElement = n, this.scrollElement && \"ownerDocument\" in this.scrollElement ? this.targetWindow = this.scrollElement.ownerDocument.defaultView : this.targetWindow = ((e = this.scrollElement) == null ? void 0 : e.window) ?? null, this._scrollToOffset(this.getScrollOffset(), {\n          adjustments: void 0,\n          behavior: void 0\n        }), this.unsubs.push(\n          this.options.observeElementRect(this, (l) => {\n            this.scrollRect = l, this.notify(!1, !1);\n          })\n        ), this.unsubs.push(\n          this.options.observeElementOffset(this, (l, s) => {\n            this.scrollAdjustments = 0, this.scrollDirection = s ? this.getScrollOffset() < l ? \"forward\" : \"backward\" : null, this.scrollOffset = l;\n            const r = this.isScrolling;\n            this.isScrolling = s, this.notify(r !== s, s);\n          })\n        );\n      }\n    }, this.getSize = () => this.options.enabled ? (this.scrollRect = this.scrollRect ?? this.options.initialRect, this.scrollRect[this.options.horizontal ? \"width\" : \"height\"]) : (this.scrollRect = null, 0), this.getScrollOffset = () => this.options.enabled ? (this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset == \"function\" ? this.options.initialOffset() : this.options.initialOffset), this.scrollOffset) : (this.scrollOffset = null, 0), this.getFurthestMeasurement = (e, n) => {\n      const l = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map();\n      for (let r = n - 1; r >= 0; r--) {\n        const i = e[r];\n        if (l.has(i.lane))\n          continue;\n        const u = s.get(\n          i.lane\n        );\n        if (u == null || i.end > u.end ? s.set(i.lane, i) : i.end < u.end && l.set(i.lane, !0), l.size === this.options.lanes)\n          break;\n      }\n      return s.size === this.options.lanes ? Array.from(s.values()).sort((r, i) => r.end === i.end ? r.index - i.index : r.end - i.end)[0] : void 0;\n    }, this.getMeasurementOptions = na(\n      () => [\n        this.options.count,\n        this.options.paddingStart,\n        this.options.scrollMargin,\n        this.options.getItemKey,\n        this.options.enabled\n      ],\n      (e, n, l, s, r) => (this.pendingMeasuredCacheIndexes = [], {\n        count: e,\n        paddingStart: n,\n        scrollMargin: l,\n        getItemKey: s,\n        enabled: r\n      }),\n      {\n        key: !1\n      }\n    ), this.getMeasurements = na(\n      () => [this.getMeasurementOptions(), this.itemSizeCache],\n      ({ count: e, paddingStart: n, scrollMargin: l, getItemKey: s, enabled: r }, i) => {\n        var u;\n        if (!r)\n          return this.measurementsCache = [], this.itemSizeCache.clear(), [];\n        this.measurementsCache.length === 0 && (this.measurementsCache = this.options.initialMeasurementsCache, this.measurementsCache.forEach((p) => {\n          this.itemSizeCache.set(p.key, p.size);\n        }));\n        const d = this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n        this.pendingMeasuredCacheIndexes = [];\n        const c = this.measurementsCache.slice(0, d);\n        for (let p = d; p < e; p++) {\n          let f = (u = this.measurementsCache[p]) == null ? void 0 : u.measureElement;\n          f || (f = (E) => {\n            const P = s(p), B = this.elementsCache.get(P);\n            if (!E) {\n              B && (this.observer.unobserve(B), this.elementsCache.delete(P));\n              return;\n            }\n            B !== E && (B && this.observer.unobserve(B), this.observer.observe(E), this.elementsCache.set(P, E)), E.isConnected && this.resizeItem(\n              p,\n              this.options.measureElement(E, void 0, this)\n            );\n          });\n          const v = s(p), g = this.options.lanes === 1 ? c[p - 1] : this.getFurthestMeasurement(c, p), m = g ? g.end + this.options.gap : n + l, w = i.get(v), C = typeof w == \"number\" ? w : this.options.estimateSize(p), D = m + C, h = g ? g.lane : p % this.options.lanes;\n          c[p] = {\n            index: p,\n            start: m,\n            size: C,\n            end: D,\n            key: v,\n            lane: h,\n            measureElement: f\n          };\n        }\n        return this.measurementsCache = c, c;\n      },\n      {\n        key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n        debug: () => this.options.debug\n      }\n    ), this.calculateRange = na(\n      () => [this.getMeasurements(), this.getSize(), this.getScrollOffset()],\n      (e, n, l) => this.range = e.length > 0 && n > 0 ? Sc({\n        measurements: e,\n        outerSize: n,\n        scrollOffset: l\n      }) : null,\n      {\n        key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n        debug: () => this.options.debug\n      }\n    ), this.getIndexes = na(\n      () => [\n        this.options.rangeExtractor,\n        this.calculateRange(),\n        this.options.overscan,\n        this.options.count\n      ],\n      (e, n, l, s) => n === null ? [] : e({\n        startIndex: n.startIndex,\n        endIndex: n.endIndex,\n        overscan: l,\n        count: s\n      }),\n      {\n        key: process.env.NODE_ENV !== \"production\" && \"getIndexes\",\n        debug: () => this.options.debug\n      }\n    ), this.indexFromElement = (e) => {\n      const n = this.options.indexAttribute, l = e.getAttribute(n);\n      return l ? parseInt(l, 10) : (console.warn(\n        `Missing attribute name '${n}={index}' on measured element.`\n      ), -1);\n    }, this._measureElement = (e, n) => {\n      const l = this.indexFromElement(e), s = this.getMeasurements()[l];\n      if (!s || !e.isConnected) {\n        this.elementsCache.forEach((i, u) => {\n          i === e && (this.observer.unobserve(e), this.elementsCache.delete(u));\n        });\n        return;\n      }\n      const r = this.elementsCache.get(s.key);\n      r !== e && (r && this.observer.unobserve(r), this.observer.observe(e), this.elementsCache.set(s.key, e)), this.resizeItem(l, this.options.measureElement(e, n, this));\n    }, this.resizeItem = (e, n) => {\n      const l = this.getMeasurements()[e];\n      if (!l)\n        return;\n      const s = this.itemSizeCache.get(l.key) ?? l.size, r = n - s;\n      r !== 0 && ((this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(l, r, this) : l.start < this.getScrollOffset() + this.scrollAdjustments) && (process.env.NODE_ENV !== \"production\" && this.options.debug && console.info(\"correction\", r), this._scrollToOffset(this.getScrollOffset(), {\n        adjustments: this.scrollAdjustments += r,\n        behavior: void 0\n      })), this.pendingMeasuredCacheIndexes.push(l.index), this.itemSizeCache = new Map(this.itemSizeCache.set(l.key, n)), this.notify(!0, !1));\n    }, this.measureElement = (e) => {\n      e && this._measureElement(e, void 0);\n    }, this.getVirtualItems = na(\n      () => [this.getIndexes(), this.getMeasurements()],\n      (e, n) => {\n        const l = [];\n        for (let s = 0, r = e.length; s < r; s++) {\n          const i = e[s], u = n[i];\n          l.push(u);\n        }\n        return l;\n      },\n      {\n        key: process.env.NODE_ENV !== \"production\" && \"getIndexes\",\n        debug: () => this.options.debug\n      }\n    ), this.getVirtualItemForOffset = (e) => {\n      const n = this.getMeasurements();\n      if (n.length !== 0)\n        return xn(\n          n[is(\n            0,\n            n.length - 1,\n            (l) => xn(n[l]).start,\n            e\n          )]\n        );\n    }, this.getOffsetForAlignment = (e, n) => {\n      const l = this.getSize(), s = this.getScrollOffset();\n      n === \"auto\" && (e <= s ? n = \"start\" : e >= s + l ? n = \"end\" : n = \"start\"), n === \"start\" ? e = e : n === \"end\" ? e = e - l : n === \"center\" && (e = e - l / 2);\n      const r = this.options.horizontal ? \"scrollWidth\" : \"scrollHeight\", u = (this.scrollElement ? \"document\" in this.scrollElement ? this.scrollElement.document.documentElement[r] : this.scrollElement[r] : 0) - l;\n      return Math.max(Math.min(u, e), 0);\n    }, this.getOffsetForIndex = (e, n = \"auto\") => {\n      e = Math.max(0, Math.min(e, this.options.count - 1));\n      const l = this.getMeasurements()[e];\n      if (!l)\n        return;\n      const s = this.getSize(), r = this.getScrollOffset();\n      if (n === \"auto\")\n        if (l.end >= r + s - this.options.scrollPaddingEnd)\n          n = \"end\";\n        else if (l.start <= r + this.options.scrollPaddingStart)\n          n = \"start\";\n        else\n          return [r, n];\n      const i = n === \"end\" ? l.end + this.options.scrollPaddingEnd : l.start - this.options.scrollPaddingStart;\n      return [this.getOffsetForAlignment(i, n), n];\n    }, this.isDynamicMode = () => this.elementsCache.size > 0, this.cancelScrollToIndex = () => {\n      this.scrollToIndexTimeoutId !== null && this.targetWindow && (this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId), this.scrollToIndexTimeoutId = null);\n    }, this.scrollToOffset = (e, { align: n = \"start\", behavior: l } = {}) => {\n      this.cancelScrollToIndex(), l === \"smooth\" && this.isDynamicMode() && console.warn(\n        \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n      ), this._scrollToOffset(this.getOffsetForAlignment(e, n), {\n        adjustments: void 0,\n        behavior: l\n      });\n    }, this.scrollToIndex = (e, { align: n = \"auto\", behavior: l } = {}) => {\n      e = Math.max(0, Math.min(e, this.options.count - 1)), this.cancelScrollToIndex(), l === \"smooth\" && this.isDynamicMode() && console.warn(\n        \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n      );\n      const s = this.getOffsetForIndex(e, n);\n      if (!s) return;\n      const [r, i] = s;\n      this._scrollToOffset(r, { adjustments: void 0, behavior: l }), l !== \"smooth\" && this.isDynamicMode() && this.targetWindow && (this.scrollToIndexTimeoutId = this.targetWindow.setTimeout(() => {\n        if (this.scrollToIndexTimeoutId = null, this.elementsCache.has(\n          this.options.getItemKey(e)\n        )) {\n          const [d] = xn(\n            this.getOffsetForIndex(e, i)\n          );\n          vc(d, this.getScrollOffset()) || this.scrollToIndex(e, { align: i, behavior: l });\n        } else\n          this.scrollToIndex(e, { align: i, behavior: l });\n      }));\n    }, this.scrollBy = (e, { behavior: n } = {}) => {\n      this.cancelScrollToIndex(), n === \"smooth\" && this.isDynamicMode() && console.warn(\n        \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n      ), this._scrollToOffset(this.getScrollOffset() + e, {\n        adjustments: void 0,\n        behavior: n\n      });\n    }, this.getTotalSize = () => {\n      var e;\n      const n = this.getMeasurements();\n      let l;\n      return n.length === 0 ? l = this.options.paddingStart : l = this.options.lanes === 1 ? ((e = n[n.length - 1]) == null ? void 0 : e.end) ?? 0 : Math.max(\n        ...n.slice(-this.options.lanes).map((s) => s.end)\n      ), l - this.options.scrollMargin + this.options.paddingEnd;\n    }, this._scrollToOffset = (e, {\n      adjustments: n,\n      behavior: l\n    }) => {\n      this.options.scrollToFn(e, { behavior: l, adjustments: n }, this);\n    }, this.measure = () => {\n      var e, n;\n      this.itemSizeCache = /* @__PURE__ */ new Map(), (n = (e = this.options).onChange) == null || n.call(e, this, !1);\n    }, this.setOptions(t);\n  }\n}\nconst is = (a, t, e, n) => {\n  for (; a <= t; ) {\n    const l = (a + t) / 2 | 0, s = e(l);\n    if (s < n)\n      a = l + 1;\n    else if (s > n)\n      t = l - 1;\n    else\n      return l;\n  }\n  return a > 0 ? a - 1 : 0;\n};\nfunction Sc({\n  measurements: a,\n  outerSize: t,\n  scrollOffset: e\n}) {\n  const n = a.length - 1, s = is(0, n, (i) => a[i].start, e);\n  let r = s;\n  for (; r < n && a[r].end < e + t; )\n    r++;\n  return { startIndex: s, endIndex: r };\n}\nfunction Ec(a) {\n  const t = new xc(o(a)), e = Mn(t), n = t._didMount();\n  return te(\n    () => o(a).getScrollElement(),\n    (l) => {\n      l && t._willUpdate();\n    },\n    {\n      immediate: !0\n    }\n  ), te(\n    () => o(a),\n    (l) => {\n      t.setOptions({\n        ...l,\n        onChange: (s, r) => {\n          var i;\n          Vo(e), (i = l.onChange) == null || i.call(l, s, r);\n        }\n      }), t._willUpdate(), Vo(e);\n    },\n    {\n      immediate: !0\n    }\n  ), il(n), e;\n}\nfunction us(a) {\n  return Ec(\n    $(() => ({\n      observeElementRect: gc,\n      observeElementOffset: Cc,\n      scrollToFn: _c,\n      ...o(a)\n    }))\n  );\n}\nconst kh = /* @__PURE__ */ x({\n  __name: \"ListboxVirtualizer\",\n  props: {\n    options: {},\n    estimateSize: {},\n    textContent: { type: Function }\n  },\n  setup(a) {\n    const t = a, e = Wa(), n = en(), l = Tl(), { getItems: s } = Jt();\n    n.isVirtual.value = !0;\n    const r = $(() => {\n      const f = l.value;\n      if (f) {\n        const v = window.getComputedStyle(f);\n        return {\n          start: Number.parseFloat(v.paddingBlockStart || v.paddingTop),\n          end: Number.parseFloat(v.paddingBlockEnd || v.paddingBottom)\n        };\n      } else\n        return { start: 0, end: 0 };\n    }), i = us(\n      {\n        get scrollPaddingStart() {\n          return r.value.start;\n        },\n        get scrollPaddingEnd() {\n          return r.value.end;\n        },\n        get count() {\n          return t.options.length;\n        },\n        get horizontal() {\n          return n.orientation.value === \"horizontal\";\n        },\n        estimateSize() {\n          return t.estimateSize ?? 28;\n        },\n        getScrollElement() {\n          return l.value;\n        },\n        overscan: 12\n      }\n    ), u = $(() => i.value.getVirtualItems().map((f) => ({\n      item: f,\n      is: Fn(e.default({\n        option: t.options[f.index],\n        virtualizer: i.value,\n        virtualItem: f\n      })[0], {\n        key: `${f.key}`,\n        \"data-index\": f.index,\n        \"aria-setsize\": t.options.length,\n        \"aria-posinset\": f.index + 1,\n        style: {\n          position: \"absolute\",\n          top: 0,\n          left: 0,\n          transform: `translateY(${f.start}px)`,\n          overflowAnchor: \"none\"\n        }\n      })\n    })));\n    n.virtualFocusHook.on((f) => {\n      const v = t.options.findIndex((g) => Array.isArray(n.modelValue.value) ? Wt(g, n.modelValue.value[0], n.by) : Wt(g, n.modelValue.value, n.by));\n      v !== -1 && (f == null || f.preventDefault(), i.value.scrollToIndex(v, { align: \"start\" }), requestAnimationFrame(() => {\n        const g = ic(l.value);\n        g && f && (g == null || g.focus());\n      }));\n    });\n    const d = $t(\"\", 1e3), c = $(() => {\n      const f = (v) => t.textContent ? t.textContent(v) : v.toString().toLowerCase();\n      return t.options.map((v, g) => ({\n        index: g,\n        textContent: f(v)\n      }));\n    });\n    function p(f, v) {\n      var C, D, h, E;\n      if (!((C = n.firstValue) != null && C.value) || !n.multiple.value || !Array.isArray(n.modelValue.value))\n        return;\n      const m = (D = s().filter((P) => P.ref.dataset.disabled !== \"\").find((P) => P.ref === n.highlightedElement.value)) == null ? void 0 : D.value;\n      if (!m)\n        return;\n      let w = null;\n      switch (v) {\n        case \"prev\":\n        case \"next\": {\n          w = Et(t.options, n.firstValue.value, m);\n          break;\n        }\n        case \"first\": {\n          w = Et(t.options, n.firstValue.value, (h = t.options) == null ? void 0 : h[0]);\n          break;\n        }\n        case \"last\": {\n          w = Et(t.options, n.firstValue.value, (E = t.options) == null ? void 0 : E[t.options.length - 1]);\n          break;\n        }\n      }\n      n.modelValue.value = w;\n    }\n    return n.virtualKeydownHook.on((f) => {\n      var w;\n      const v = f.altKey || f.ctrlKey || f.metaKey;\n      if (f.key === \"Tab\" && !v)\n        return;\n      let m = Ja[f.key];\n      if (v && f.key === \"a\" && n.multiple.value ? (f.preventDefault(), n.modelValue.value = [...t.options], m = \"last\") : f.shiftKey && m && p(f, m), [\"first\", \"last\"].includes(m)) {\n        f.preventDefault();\n        const C = m === \"first\" ? 0 : t.options.length - 1;\n        i.value.scrollToIndex(C), requestAnimationFrame(() => {\n          const D = s(), h = m === \"first\" ? D[0] : D[D.length - 1];\n          n.onChangeHighlight(h.ref);\n        });\n      } else if (!m && !v) {\n        d.value += f.key;\n        const C = Number((w = document.activeElement) == null ? void 0 : w.getAttribute(\"data-index\")), D = c.value[C].textContent, h = c.value.map((B) => B.textContent), E = Yn(h, d.value, D), P = c.value.find((B) => B.textContent === E);\n        P && (i.value.scrollToIndex(P.index, { align: \"start\" }), requestAnimationFrame(() => {\n          const B = l.value.querySelector(`[data-index=\"${P.index}\"]`);\n          B instanceof HTMLElement && n.onChangeHighlight(B);\n        }));\n      }\n    }), (f, v) => (b(), ve(\"div\", {\n      \"data-radix-vue-virtualizer\": \"\",\n      style: ke({\n        position: \"relative\",\n        width: \"100%\",\n        height: `${o(i).getTotalSize()}px`\n      })\n    }, [\n      (b(!0), ve(we, null, va(u.value, ({ is: g, item: m }) => (b(), S(Ge(g), {\n        key: m.index\n      }))), 128))\n    ], 4));\n  }\n}), [Pc, Dc] = Q(\"ListboxGroup\"), Mh = /* @__PURE__ */ x({\n  __name: \"ListboxGroup\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = he(void 0, \"radix-vue-listbox-group\");\n    return Dc({ id: e }), (n, l) => (b(), S(o(O), k({ role: \"group\" }, t, { \"aria-labelledby\": o(e) }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"aria-labelledby\"]));\n  }\n}), Vh = /* @__PURE__ */ x({\n  __name: \"ListboxGroupLabel\",\n  props: {\n    for: {},\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a, e = Pc({ id: \"\" });\n    return (n, l) => (b(), S(o(O), k(t, {\n      id: o(e).id\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"id\"]));\n  }\n}), [tn, $c] = Q(\"MenubarRoot\"), Fh = /* @__PURE__ */ x({\n  __name: \"MenubarRoot\",\n  props: {\n    modelValue: {},\n    defaultValue: {},\n    dir: {},\n    loop: { type: Boolean, default: !1 }\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { forwardRef: l, currentElement: s } = R(), { createCollection: r } = Me(\"menubar\");\n    r(s);\n    const i = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue ?? \"\",\n      passive: e.modelValue === void 0\n    }), u = I(null), { dir: d, loop: c } = ae(e), p = be(d);\n    return $c({\n      modelValue: i,\n      dir: p,\n      loop: c,\n      onMenuOpen: (f) => {\n        i.value = f, u.value = f;\n      },\n      onMenuClose: () => {\n        i.value = \"\";\n      },\n      onMenuToggle: (f) => {\n        i.value = i.value ? \"\" : f, u.value = f;\n      }\n    }), (f, v) => (b(), S(o(Ot), {\n      \"current-tab-stop-id\": u.value,\n      \"onUpdate:currentTabStopId\": v[0] || (v[0] = (g) => u.value = g),\n      orientation: \"horizontal\",\n      loop: o(c),\n      dir: o(p),\n      \"as-child\": \"\"\n    }, {\n      default: y(() => [\n        q(o(O), {\n          ref: o(l),\n          role: \"menubar\"\n        }, {\n          default: y(() => [\n            _(f.$slots, \"default\", { modelValue: o(i) })\n          ]),\n          _: 3\n        }, 512)\n      ]),\n      _: 3\n    }, 8, [\"current-tab-stop-id\", \"loop\", \"dir\"]));\n  }\n}), [_o, Bc] = Q(\"MenubarMenu\"), Lh = /* @__PURE__ */ x({\n  __name: \"MenubarMenu\",\n  props: {\n    value: {}\n  },\n  setup(a) {\n    const e = he(a.value), n = tn();\n    R();\n    const l = I(), s = I(!1), r = $(() => n.modelValue.value === e);\n    return te(r, () => {\n      r.value || (s.value = !1);\n    }), Bc({\n      value: e,\n      triggerElement: l,\n      triggerId: e,\n      contentId: \"\",\n      wasKeyboardTriggerOpenRef: s\n    }), (i, u) => (b(), S(o(oo), {\n      open: r.value,\n      modal: !1,\n      dir: o(n).dir.value,\n      \"onUpdate:open\": u[0] || (u[0] = (d) => {\n        d || o(n).onMenuClose();\n      })\n    }, {\n      default: y(() => [\n        _(i.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"open\", \"dir\"]));\n  }\n}), Nh = /* @__PURE__ */ x({\n  __name: \"MenubarTrigger\",\n  props: {\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = tn(), e = _o(), { forwardRef: n, currentElement: l } = R(), s = I(!1), r = $(() => t.modelValue.value === e.value);\n    return le(() => {\n      e.triggerElement = l;\n    }), (i, u) => (b(), S(o(kt), {\n      \"as-child\": \"\",\n      focusable: !i.disabled,\n      \"tab-stop-id\": o(e).value\n    }, {\n      default: y(() => [\n        q(o(Za), { \"as-child\": \"\" }, {\n          default: y(() => [\n            q(o(O), {\n              id: o(e).triggerId,\n              ref: o(n),\n              as: i.as,\n              type: i.as === \"button\" ? \"button\" : void 0,\n              role: \"menuitem\",\n              \"aria-haspopup\": \"menu\",\n              \"aria-expanded\": r.value,\n              \"aria-controls\": r.value ? o(e).contentId : void 0,\n              \"data-highlighted\": s.value ? \"\" : void 0,\n              \"data-state\": r.value ? \"open\" : \"closed\",\n              \"data-disabled\": i.disabled ? \"\" : void 0,\n              disabled: i.disabled,\n              \"data-value\": o(e).value,\n              \"data-radix-vue-collection-item\": \"\",\n              onPointerdown: u[0] || (u[0] = (d) => {\n                !i.disabled && d.button === 0 && d.ctrlKey === !1 && (o(t).onMenuOpen(o(e).value), r.value || d.preventDefault());\n              }),\n              onPointerenter: u[1] || (u[1] = () => {\n                var c;\n                !!o(t).modelValue.value && !r.value && (o(t).onMenuOpen(o(e).value), (c = o(l)) == null || c.focus());\n              }),\n              onKeydown: u[2] || (u[2] = ie((d) => {\n                i.disabled || ([\"Enter\", \" \"].includes(d.key) && o(t).onMenuToggle(o(e).value), d.key === \"ArrowDown\" && o(t).onMenuOpen(o(e).value), [\"Enter\", \" \", \"ArrowDown\"].includes(d.key) && (o(e).wasKeyboardTriggerOpenRef.value = !0, d.preventDefault()));\n              }, [\"enter\", \"space\", \"arrow-down\"])),\n              onFocus: u[3] || (u[3] = (d) => s.value = !0),\n              onBlur: u[4] || (u[4] = (d) => s.value = !1)\n            }, {\n              default: y(() => [\n                _(i.$slots, \"default\")\n              ]),\n              _: 3\n            }, 8, [\"id\", \"as\", \"type\", \"aria-expanded\", \"aria-controls\", \"data-highlighted\", \"data-state\", \"data-disabled\", \"disabled\", \"data-value\"])\n          ]),\n          _: 3\n        })\n      ]),\n      _: 3\n    }, 8, [\"focusable\", \"tab-stop-id\"]));\n  }\n}), zh = /* @__PURE__ */ x({\n  __name: \"MenubarPortal\",\n  props: {\n    to: {},\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(po), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Kh = /* @__PURE__ */ x({\n  __name: \"MenubarContent\",\n  props: {\n    forceMount: { type: Boolean },\n    loop: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: { default: \"start\" },\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t);\n    R();\n    const s = tn(), r = _o();\n    r.contentId || (r.contentId = he(void 0, \"radix-vue-menubar-content\"));\n    const { injectCollection: i } = Me(\"menubar\"), u = i(), d = I(!1);\n    function c(p) {\n      const v = p.target.hasAttribute(\n        \"data-radix-menubar-subtrigger\"\n      ), m = (s.dir.value === \"rtl\" ? \"ArrowRight\" : \"ArrowLeft\") === p.key;\n      if (!m && v)\n        return;\n      let C = u.value.map((E) => E.dataset.value);\n      m && C.reverse();\n      const D = C.indexOf(r.value);\n      C = s.loop.value ? qn(C, D + 1) : C.slice(D + 1);\n      const [h] = C;\n      h && s.onMenuOpen(h);\n    }\n    return (p, f) => (b(), S(o(uo), k(o(l), {\n      id: o(r).contentId,\n      \"data-radix-menubar-content\": \"\",\n      \"aria-labelledby\": o(r).triggerId,\n      style: {\n        \"--radix-menubar-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n        \"--radix-menubar-content-available-width\": \"var(--radix-popper-available-width)\",\n        \"--radix-menubar-content-available-height\": \"var(--radix-popper-available-height)\",\n        \"--radix-menubar-trigger-width\": \"var(--radix-popper-anchor-width)\",\n        \"--radix-menubar-trigger-height\": \"var(--radix-popper-anchor-height)\"\n      },\n      onCloseAutoFocus: f[0] || (f[0] = (v) => {\n        var m;\n        !!!o(s).modelValue.value && !d.value && ((m = o(r).triggerElement.value) == null || m.focus()), d.value = !1, v.preventDefault();\n      }),\n      onFocusOutside: f[1] || (f[1] = (v) => {\n        const g = v.target;\n        o(u).some((w) => w.contains(g)) && v.preventDefault();\n      }),\n      onInteractOutside: f[2] || (f[2] = (v) => {\n        d.value = !0;\n      }),\n      onEntryFocus: f[3] || (f[3] = (v) => {\n        o(r).wasKeyboardTriggerOpenRef.value || v.preventDefault();\n      }),\n      onKeydown: ie(c, [\"arrow-right\", \"arrow-left\"])\n    }), {\n      default: y(() => [\n        _(p.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"id\", \"aria-labelledby\"]));\n  }\n}), Hh = /* @__PURE__ */ x({\n  __name: \"MenubarArrow\",\n  props: {\n    width: { default: 10 },\n    height: { default: 5 },\n    asChild: { type: Boolean },\n    as: { default: \"svg\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(no), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Wh = /* @__PURE__ */ x({\n  __name: \"MenubarItem\",\n  props: {\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    return R(), (s, r) => (b(), S(o(_a), H(j({ ...e, ...o(l) })), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), jh = /* @__PURE__ */ x({\n  __name: \"MenubarGroup\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(Qa), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Uh = /* @__PURE__ */ x({\n  __name: \"MenubarSeparator\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(mo), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Gh = /* @__PURE__ */ x({\n  __name: \"MenubarCheckboxItem\",\n  props: {\n    checked: { type: [Boolean, String] },\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\", \"update:checked\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    return R(), (s, r) => (b(), S(o(io), H(j({ ...e, ...o(l) })), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), qh = /* @__PURE__ */ x({\n  __name: \"MenubarItemIndicator\",\n  props: {\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(ro), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Yh = /* @__PURE__ */ x({\n  __name: \"MenubarLabel\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(co), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Xh = /* @__PURE__ */ x({\n  __name: \"MenubarRadioGroup\",\n  props: {\n    modelValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, l = Re(t);\n    return R(), (s, r) => (b(), S(o(fo), H(j({ ...e, ...o(l) })), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Zh = /* @__PURE__ */ x({\n  __name: \"MenubarRadioItem\",\n  props: {\n    value: {},\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"select\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t);\n    return R(), (s, r) => (b(), S(o(vo), H(j(o(l))), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Jh = /* @__PURE__ */ x({\n  __name: \"MenubarSub\",\n  props: {\n    defaultOpen: { type: Boolean },\n    open: { type: Boolean, default: void 0 }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t;\n    R();\n    const l = ne(e, \"open\", n, {\n      defaultValue: e.defaultOpen ?? !1,\n      passive: e.open === void 0\n    });\n    return (s, r) => (b(), S(o(ho), {\n      open: o(l),\n      \"onUpdate:open\": r[0] || (r[0] = (i) => Xe(l) ? l.value = i : null)\n    }, {\n      default: y(() => [\n        _(s.$slots, \"default\", { open: o(l) })\n      ]),\n      _: 3\n    }, 8, [\"open\"]));\n  }\n}), Qh = /* @__PURE__ */ x({\n  __name: \"MenubarSubContent\",\n  props: {\n    forceMount: { type: Boolean },\n    loop: { type: Boolean },\n    sideOffset: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"entryFocus\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const l = xe(a, t);\n    R();\n    const { injectCollection: s } = Me(\"menubar\"), r = tn(), i = _o(), u = s();\n    function d(c) {\n      if (c.target.hasAttribute(\n        \"data-radix-menubar-subtrigger\"\n      ))\n        return;\n      let v = u.value.map((w) => w.dataset.value);\n      const g = v.indexOf(i.value);\n      v = r.loop.value ? qn(v, g + 1) : v.slice(g + 1);\n      const [m] = v;\n      m && r.onMenuOpen(m);\n    }\n    return (c, p) => (b(), S(o(yo), k(o(l), {\n      \"data-radix-menubar-content\": \"\",\n      style: {\n        \"--radix-menubar-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n        \"--radix-menubar-content-available-width\": \"var(--radix-popper-available-width)\",\n        \"--radix-menubar-content-available-height\": \"var(--radix-popper-available-height)\",\n        \"--radix-menubar-trigger-width\": \"var(--radix-popper-anchor-width)\",\n        \"--radix-menubar-trigger-height\": \"var(--radix-popper-anchor-height)\"\n      },\n      onKeydown: ie(d, [\"arrow-right\"])\n    }), {\n      default: y(() => [\n        _(c.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), ey = /* @__PURE__ */ x({\n  __name: \"MenubarSubTrigger\",\n  props: {\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(go), k(t, { \"data-radix-menubar-subtrigger\": \"\" }), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), [gt, ds] = Q([\"NavigationMenuRoot\", \"NavigationMenuSub\"], \"NavigationMenuContext\"), ty = /* @__PURE__ */ x({\n  __name: \"NavigationMenuRoot\",\n  props: {\n    modelValue: { default: void 0 },\n    defaultValue: {},\n    dir: {},\n    orientation: { default: \"horizontal\" },\n    delayDuration: { default: 200 },\n    skipDelayDuration: { default: 300 },\n    disableClickTrigger: { type: Boolean, default: !1 },\n    disableHoverTrigger: { type: Boolean, default: !1 },\n    asChild: { type: Boolean },\n    as: { default: \"nav\" }\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, l = ne(e, \"modelValue\", t, {\n      defaultValue: e.defaultValue ?? \"\",\n      passive: e.modelValue === void 0\n    }), s = I(\"\"), { forwardRef: r, currentElement: i } = R(), u = I(), d = I(), { createCollection: c } = Me(\"nav\");\n    c(u);\n    const { delayDuration: p, skipDelayDuration: f, dir: v, disableClickTrigger: g, disableHoverTrigger: m } = ae(e), w = be(v), C = $t(!1, f), D = $(() => l.value !== \"\" || C.value ? 150 : p.value), h = Hn((E) => {\n      typeof E == \"string\" && (s.value = l.value, l.value = E);\n    }, D);\n    return ds({\n      isRootMenu: !0,\n      modelValue: l,\n      previousValue: s,\n      baseId: he(void 0, \"radix-navigation-menu\"),\n      disableClickTrigger: g,\n      disableHoverTrigger: m,\n      dir: w,\n      orientation: e.orientation,\n      rootNavigationMenu: i,\n      indicatorTrack: u,\n      onIndicatorTrackChange: (E) => {\n        u.value = E;\n      },\n      viewport: d,\n      onViewportChange: (E) => {\n        d.value = E;\n      },\n      onTriggerEnter: (E) => {\n        h(E);\n      },\n      onTriggerLeave: () => {\n        C.value = !0, h(\"\");\n      },\n      onContentEnter: () => {\n        h();\n      },\n      onContentLeave: () => {\n        h(\"\");\n      },\n      onItemSelect: (E) => {\n        s.value = l.value, l.value = E;\n      },\n      onItemDismiss: () => {\n        s.value = l.value, l.value = \"\";\n      }\n    }), (E, P) => (b(), S(o(O), {\n      ref: o(r),\n      \"aria-label\": \"Main\",\n      as: E.as,\n      \"as-child\": E.asChild,\n      \"data-orientation\": E.orientation,\n      dir: o(w),\n      \"data-radix-navigation-menu\": \"\"\n    }, {\n      default: y(() => [\n        _(E.$slots, \"default\", { modelValue: o(l) })\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"data-orientation\", \"dir\"]));\n  }\n});\nfunction an(a) {\n  return a ? \"open\" : \"closed\";\n}\nfunction cs(a, t) {\n  return `${a}-trigger-${t}`;\n}\nfunction xo(a, t) {\n  return `${a}-content-${t}`;\n}\nconst Ic = \"navigationMenu.linkSelect\", ka = \"navigationMenu.rootContentDismiss\";\nfunction Rn(a) {\n  const t = [], e = document.createTreeWalker(a, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (n) => {\n      const l = n.tagName === \"INPUT\" && n.type === \"hidden\";\n      return n.disabled || n.hidden || l ? NodeFilter.FILTER_SKIP : n.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n    }\n  });\n  for (; e.nextNode(); ) t.push(e.currentNode);\n  return t;\n}\nfunction ps(a) {\n  const t = document.activeElement;\n  return a.some((e) => e === t ? !0 : (e.focus(), document.activeElement !== t));\n}\nfunction Tc(a) {\n  return a.forEach((t) => {\n    t.dataset.tabindex = t.getAttribute(\"tabindex\") || \"\", t.setAttribute(\"tabindex\", \"-1\");\n  }), () => {\n    a.forEach((t) => {\n      const e = t.dataset.tabindex;\n      t.setAttribute(\"tabindex\", e);\n    });\n  };\n}\nfunction fs(a) {\n  return (t) => t.pointerType === \"mouse\" ? a(t) : void 0;\n}\nconst [So, Rc] = Q(\"NavigationMenuItem\"), ay = /* @__PURE__ */ x({\n  __name: \"NavigationMenuItem\",\n  props: {\n    value: {},\n    asChild: { type: Boolean },\n    as: { default: \"li\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const { injectCollection: e } = Me(\"nav\"), n = e(), l = gt(), s = he(t.value), r = I(), i = I(), u = xo(l.baseId, s);\n    let d = () => ({});\n    const c = I(!1);\n    async function p(m = \"start\") {\n      const w = document.getElementById(u);\n      if (w) {\n        d();\n        const C = Rn(w);\n        C.length && ps(m === \"start\" ? C : C.reverse());\n      }\n    }\n    function f() {\n      const m = document.getElementById(u);\n      if (m) {\n        const w = Rn(m);\n        w.length && (d = Tc(w));\n      }\n    }\n    Rc({\n      value: s,\n      contentId: u,\n      triggerRef: r,\n      focusProxyRef: i,\n      wasEscapeCloseRef: c,\n      onEntryKeyDown: p,\n      onFocusProxyEnter: p,\n      onContentFocusOutside: f,\n      onRootContentClose: f\n    });\n    function v() {\n      var m;\n      l.onItemDismiss(), (m = r.value) == null || m.focus();\n    }\n    function g(m) {\n      const w = document.activeElement;\n      if (m.keyCode === 32 || m.key === \"Enter\")\n        if (l.modelValue.value === s) {\n          v(), m.preventDefault();\n          return;\n        } else {\n          m.target.click(), m.preventDefault();\n          return;\n        }\n      const C = n.value.filter(\n        (h) => {\n          var E;\n          return (E = h.parentElement) == null ? void 0 : E.hasAttribute(\"data-menu-item\");\n        }\n      );\n      if (!C.includes(w))\n        return;\n      const D = Bt(m, w, void 0, {\n        itemsArray: C,\n        loop: !1\n      });\n      D && (D == null || D.focus()), m.preventDefault(), m.stopPropagation();\n    }\n    return (m, w) => (b(), S(o(O), {\n      \"as-child\": m.asChild,\n      as: m.as,\n      \"data-menu-item\": \"\",\n      onKeydown: ie(g, [\"up\", \"down\", \"left\", \"right\", \"home\", \"end\", \"space\"])\n    }, {\n      default: y(() => [\n        _(m.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as-child\", \"as\"]));\n  }\n}), Ac = /* @__PURE__ */ x({\n  __name: \"NavigationMenuContentImpl\",\n  props: {\n    disableOutsidePointerEvents: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { injectCollection: l } = Me(\"nav\"), s = l(), { forwardRef: r, currentElement: i } = R(), u = gt(), d = So(), c = cs(u.baseId, d.value), p = xo(u.baseId, d.value), f = I(null), v = $(() => {\n      const E = s.value.map((A) => A.id.split(\"trigger-\")[1]);\n      u.dir.value === \"rtl\" && E.reverse();\n      const P = E.indexOf(u.modelValue.value), B = E.indexOf(u.previousValue.value), T = d.value === u.modelValue.value, M = B === E.indexOf(d.value);\n      if (!T && !M)\n        return f.value;\n      const V = (() => {\n        if (P !== B) {\n          if (T && B !== -1)\n            return P > B ? \"from-end\" : \"from-start\";\n          if (M && P !== -1)\n            return P > B ? \"to-start\" : \"to-end\";\n        }\n        return null;\n      })();\n      return f.value = V, V;\n    });\n    function g(h) {\n      var E, P;\n      if (n(\"focusOutside\", h), n(\"interactOutside\", h), !h.defaultPrevented) {\n        d.onContentFocusOutside();\n        const B = h.target;\n        (P = (E = u.rootNavigationMenu) == null ? void 0 : E.value) != null && P.contains(B) && h.preventDefault();\n      }\n    }\n    function m(h) {\n      var E;\n      if (n(\"pointerDownOutside\", h), !h.defaultPrevented) {\n        const P = h.target, B = s.value.some(\n          (M) => M.contains(P)\n        ), T = u.isRootMenu && ((E = u.viewport.value) == null ? void 0 : E.contains(P));\n        (B || T || !u.isRootMenu) && h.preventDefault();\n      }\n    }\n    ge((h) => {\n      const E = i.value;\n      if (u.isRootMenu && E) {\n        const P = () => {\n          var B;\n          u.onItemDismiss(), d.onRootContentClose(), E.contains(document.activeElement) && ((B = d.triggerRef.value) == null || B.focus());\n        };\n        E.addEventListener(ka, P), h(\n          () => E.removeEventListener(ka, P)\n        );\n      }\n    });\n    function w(h) {\n      var E, P;\n      n(\"escapeKeyDown\", h), h.defaultPrevented || (u.onItemDismiss(), (P = (E = d.triggerRef) == null ? void 0 : E.value) == null || P.focus(), d.wasEscapeCloseRef.value = !0);\n    }\n    function C(h) {\n      var M;\n      if (h.target.closest(\"[data-radix-navigation-menu]\") !== u.rootNavigationMenu.value)\n        return;\n      const E = h.altKey || h.ctrlKey || h.metaKey, P = h.key === \"Tab\" && !E, B = Rn(h.currentTarget);\n      if (P) {\n        const V = document.activeElement, A = B.findIndex(\n          (W) => W === V\n        ), U = h.shiftKey ? B.slice(0, A).reverse() : B.slice(A + 1, B.length);\n        if (ps(U))\n          h.preventDefault();\n        else {\n          (M = d.focusProxyRef.value) == null || M.focus();\n          return;\n        }\n      }\n      const T = Bt(\n        h,\n        document.activeElement,\n        void 0,\n        { itemsArray: B, loop: !1, enableIgnoredElement: !0 }\n      );\n      T == null || T.focus();\n    }\n    function D() {\n      var E;\n      const h = new Event(ka, {\n        bubbles: !0,\n        cancelable: !0\n      });\n      (E = i.value) == null || E.dispatchEvent(h);\n    }\n    return (h, E) => (b(), S(o(yt), k({\n      id: o(p),\n      ref: o(r),\n      \"aria-labelledby\": o(c),\n      \"data-motion\": v.value,\n      \"data-state\": o(an)(o(u).modelValue.value === o(d).value),\n      \"data-orientation\": o(u).orientation\n    }, e, {\n      onKeydown: C,\n      onEscapeKeyDown: w,\n      onPointerDownOutside: m,\n      onFocusOutside: g,\n      onDismiss: D\n    }), {\n      default: y(() => [\n        _(h.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"id\", \"aria-labelledby\", \"data-motion\", \"data-state\", \"data-orientation\"]));\n  }\n}), ny = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"NavigationMenuContent\",\n  props: {\n    forceMount: { type: Boolean },\n    disableOutsidePointerEvents: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = Re(n), { forwardRef: s } = R(), r = ja(), i = gt(), u = So(), d = $(() => u.value === i.modelValue.value), c = $(() => i.viewport.value && !i.modelValue.value && i.previousValue.value ? i.previousValue.value === u.value : !1);\n    return (p, f) => o(r) ? (b(), S(jt, {\n      key: 0,\n      to: o(i).viewport.value,\n      disabled: !o(i).viewport.value\n    }, [\n      q(o(Pe), {\n        present: p.forceMount || d.value || c.value\n      }, {\n        default: y(() => [\n          q(Ac, k({\n            ref: o(s),\n            \"data-state\": o(an)(d.value),\n            style: {\n              pointerEvents: !d.value && o(i).isRootMenu ? \"none\" : void 0\n            }\n          }, { ...p.$attrs, ...e, ...o(l) }, {\n            onPointerenter: f[0] || (f[0] = (v) => o(i).onContentEnter(o(u).value)),\n            onPointerleave: f[1] || (f[1] = (v) => o(fs)(() => o(i).onContentLeave())(v)),\n            onPointerDownOutside: f[2] || (f[2] = (v) => n(\"pointerDownOutside\", v)),\n            onFocusOutside: f[3] || (f[3] = (v) => n(\"focusOutside\", v)),\n            onInteractOutside: f[4] || (f[4] = (v) => n(\"interactOutside\", v))\n          }), {\n            default: y(() => [\n              _(p.$slots, \"default\")\n            ]),\n            _: 3\n          }, 16, [\"data-state\", \"style\"])\n        ]),\n        _: 3\n      }, 8, [\"present\"])\n    ], 8, [\"to\", \"disabled\"])) : ce(\"\", !0);\n  }\n}), oy = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"NavigationMenuIndicator\",\n  props: {\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { forwardRef: e } = R(), { injectCollection: n } = Me(\"nav\"), l = n(), s = gt(), r = I(), i = $(() => s.orientation === \"horizontal\"), u = $(() => !!s.modelValue.value), d = I();\n    function c() {\n      d.value && (r.value = {\n        size: i.value ? d.value.offsetWidth : d.value.offsetHeight,\n        offset: i.value ? d.value.offsetLeft : d.value.offsetTop\n      });\n    }\n    return ge(() => {\n      if (!s.modelValue.value) {\n        r.value = void 0;\n        return;\n      }\n      const p = l.value;\n      d.value = p.find(\n        (f) => f.id.includes(s.modelValue.value)\n      ), c();\n    }), Ze(d, c), Ze(s.indicatorTrack, c), (p, f) => o(s).indicatorTrack.value ? (b(), S(jt, {\n      key: 0,\n      to: o(s).indicatorTrack.value\n    }, [\n      q(o(Pe), {\n        present: p.forceMount || u.value\n      }, {\n        default: y(() => {\n          var v, g, m, w;\n          return [\n            q(o(O), k({\n              ref: o(e),\n              \"aria-hidden\": \"true\",\n              \"data-state\": u.value ? \"visible\" : \"hidden\",\n              \"data-orientation\": o(s).orientation,\n              \"as-child\": t.asChild,\n              as: p.as,\n              style: {\n                position: \"absolute\",\n                ...i.value ? {\n                  left: 0,\n                  width: `${(v = r.value) == null ? void 0 : v.size}px`,\n                  transform: `translateX(${(g = r.value) == null ? void 0 : g.offset}px)`\n                } : {\n                  top: 0,\n                  height: `${(m = r.value) == null ? void 0 : m.size}px`,\n                  transform: `translateY(${(w = r.value) == null ? void 0 : w.offset}px)`\n                }\n              }\n            }, p.$attrs), {\n              default: y(() => [\n                _(p.$slots, \"default\")\n              ]),\n              _: 3\n            }, 16, [\"data-state\", \"data-orientation\", \"as-child\", \"as\", \"style\"])\n          ];\n        }),\n        _: 3\n      }, 8, [\"present\"])\n    ], 8, [\"to\"])) : ce(\"\", !0);\n  }\n}), ly = /* @__PURE__ */ x({\n  __name: \"NavigationMenuLink\",\n  props: {\n    active: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"a\" }\n  },\n  emits: [\"select\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t;\n    R();\n    async function l(s) {\n      var i;\n      const r = new CustomEvent(Ic, {\n        bubbles: !0,\n        cancelable: !0,\n        detail: {\n          originalEvent: s\n        }\n      });\n      if (n(\"select\", r), !r.defaultPrevented && !s.metaKey) {\n        const u = new CustomEvent(\n          ka,\n          {\n            bubbles: !0,\n            cancelable: !0\n          }\n        );\n        (i = s.target) == null || i.dispatchEvent(u);\n      }\n    }\n    return (s, r) => (b(), S(o(O), {\n      as: s.as,\n      \"data-active\": s.active ? \"\" : void 0,\n      \"aria-current\": s.active ? \"page\" : void 0,\n      \"as-child\": e.asChild,\n      \"data-radix-vue-collection-item\": \"\",\n      onClick: l\n    }, {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as\", \"data-active\", \"aria-current\", \"as-child\"]));\n  }\n}), sy = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"NavigationMenuList\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"ul\" }\n  },\n  setup(a) {\n    const t = a, e = gt(), { forwardRef: n, currentElement: l } = R();\n    return le(() => {\n      e.onIndicatorTrackChange(l.value);\n    }), (s, r) => (b(), S(o(O), {\n      ref: o(n),\n      style: { position: \"relative\" }\n    }, {\n      default: y(() => [\n        q(o(O), k(s.$attrs, {\n          \"as-child\": t.asChild,\n          as: s.as,\n          \"data-orientation\": o(e).orientation\n        }), {\n          default: y(() => [\n            _(s.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"as-child\", \"as\", \"data-orientation\"])\n      ]),\n      _: 3\n    }, 512));\n  }\n}), ry = /* @__PURE__ */ x({\n  __name: \"NavigationMenuSub\",\n  props: {\n    modelValue: {},\n    defaultValue: {},\n    orientation: { default: \"horizontal\" },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, l = ne(e, \"modelValue\", t, {\n      defaultValue: e.defaultValue ?? \"\",\n      passive: e.modelValue === void 0\n    }), s = I(\"\"), r = gt(), { forwardRef: i, currentElement: u } = R(), d = I(), c = I(), { createCollection: p } = Me(\"nav\");\n    return p(d), ds({\n      ...r,\n      isRootMenu: !1,\n      modelValue: l,\n      previousValue: s,\n      orientation: e.orientation,\n      rootNavigationMenu: u,\n      indicatorTrack: d,\n      onIndicatorTrackChange: (f) => {\n        d.value = f;\n      },\n      viewport: c,\n      onViewportChange: (f) => {\n        c.value = f;\n      },\n      onTriggerEnter: (f) => {\n        l.value = f;\n      },\n      onTriggerLeave: () => {\n      },\n      onContentEnter: () => {\n      },\n      onContentLeave: () => {\n      },\n      onItemSelect: (f) => {\n        l.value = f;\n      },\n      onItemDismiss: () => {\n        l.value = \"\";\n      }\n    }), (f, v) => (b(), S(o(O), {\n      ref: o(i),\n      \"data-orientation\": f.orientation,\n      \"as-child\": e.asChild,\n      as: f.as,\n      \"data-radix-navigation-menu\": \"\"\n    }, {\n      default: y(() => [\n        _(f.$slots, \"default\", { modelValue: o(l) })\n      ]),\n      _: 3\n    }, 8, [\"data-orientation\", \"as-child\", \"as\"]));\n  }\n}), Oc = [\"aria-owns\"], iy = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"NavigationMenuTrigger\",\n  props: {\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = gt(), n = So(), { forwardRef: l, currentElement: s } = R(), r = I(\"\"), i = I(\"\"), u = $t(!1, 300), d = I(!1), c = $(() => n.value === e.modelValue.value);\n    le(() => {\n      n.triggerRef = s, r.value = cs(e.baseId, n.value), i.value = xo(e.baseId, n.value);\n    });\n    function p() {\n      e.disableHoverTrigger.value || (d.value = !1, n.wasEscapeCloseRef.value = !1);\n    }\n    function f(D) {\n      if (!e.disableHoverTrigger.value && D.pointerType === \"mouse\") {\n        if (t.disabled || d.value || n.wasEscapeCloseRef.value || u.value)\n          return;\n        e.onTriggerEnter(n.value), u.value = !0;\n      }\n    }\n    function v(D) {\n      if (!e.disableHoverTrigger.value && D.pointerType === \"mouse\") {\n        if (t.disabled)\n          return;\n        e.onTriggerLeave(), u.value = !1;\n      }\n    }\n    function g(D) {\n      D.pointerType === \"mouse\" && e.disableClickTrigger.value || u.value || (c.value ? e.onItemSelect(\"\") : e.onItemSelect(n.value), d.value = c.value);\n    }\n    function m(D) {\n      const E = { horizontal: \"ArrowDown\", vertical: e.dir.value === \"rtl\" ? \"ArrowLeft\" : \"ArrowRight\" }[e.orientation];\n      c.value && D.key === E && (n.onEntryKeyDown(), D.preventDefault(), D.stopPropagation());\n    }\n    function w(D) {\n      n.focusProxyRef.value = $e(D);\n    }\n    function C(D) {\n      const h = document.getElementById(n.contentId), E = D.relatedTarget, P = E === s.value, B = h == null ? void 0 : h.contains(E);\n      (P || !B) && n.onFocusProxyEnter(P ? \"start\" : \"end\");\n    }\n    return (D, h) => (b(), ve(we, null, [\n      q(o(O), k({\n        id: r.value,\n        ref: o(l),\n        disabled: D.disabled,\n        \"data-disabled\": D.disabled ? \"\" : void 0,\n        \"data-state\": o(an)(c.value),\n        \"aria-expanded\": c.value,\n        \"aria-controls\": i.value,\n        \"as-child\": t.asChild,\n        as: D.as\n      }, D.$attrs, {\n        \"data-radix-vue-collection-item\": \"\",\n        onPointerenter: p,\n        onPointermove: f,\n        onPointerleave: v,\n        onClick: g,\n        onKeydown: m\n      }), {\n        default: y(() => [\n          _(D.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16, [\"id\", \"disabled\", \"data-disabled\", \"data-state\", \"aria-expanded\", \"aria-controls\", \"as-child\", \"as\"]),\n      c.value ? (b(), ve(we, { key: 0 }, [\n        q(o(Xt), {\n          ref: w,\n          \"aria-hidden\": \"true\",\n          tabindex: 0,\n          onFocus: C\n        }),\n        o(e).viewport ? (b(), ve(\"span\", {\n          key: 0,\n          \"aria-owns\": i.value\n        }, null, 8, Oc)) : ce(\"\", !0)\n      ], 64)) : ce(\"\", !0)\n    ], 64));\n  }\n}), uy = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"NavigationMenuViewport\",\n  props: {\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const { forwardRef: t, currentElement: e } = R(), n = gt(), l = I(), s = $(() => !!n.modelValue.value), r = $(() => n.modelValue.value);\n    te(e, () => {\n      e.value && n.onViewportChange(e.value);\n    });\n    const i = I();\n    return te([r, s], async () => {\n      var d, c;\n      if (await oe(), !e.value)\n        return;\n      const u = (c = (d = e.value.querySelector(\"[data-state=open]\")) == null ? void 0 : d.children) == null ? void 0 : c[0];\n      i.value = u;\n    }, { immediate: !0 }), Ze(i, () => {\n      i.value && (l.value = {\n        width: i.value.offsetWidth,\n        height: i.value.offsetHeight\n      });\n    }), (u, d) => (b(), S(o(Pe), {\n      present: u.forceMount || s.value\n    }, {\n      default: y(() => {\n        var c, p;\n        return [\n          q(o(O), k(u.$attrs, {\n            ref: o(t),\n            as: u.as,\n            \"as-child\": u.asChild,\n            \"data-state\": o(an)(s.value),\n            \"data-orientation\": o(n).orientation,\n            style: {\n              // Prevent interaction when animating out\n              pointerEvents: !s.value && o(n).isRootMenu ? \"none\" : void 0,\n              \"--radix-navigation-menu-viewport-width\": l.value ? `${(c = l.value) == null ? void 0 : c.width}px` : void 0,\n              \"--radix-navigation-menu-viewport-height\": l.value ? `${(p = l.value) == null ? void 0 : p.height}px` : void 0\n            },\n            onPointerenter: d[0] || (d[0] = (f) => o(n).onContentEnter(o(n).modelValue.value)),\n            onPointerleave: d[1] || (d[1] = (f) => o(fs)(() => o(n).onContentLeave())(f))\n          }), {\n            default: y(() => [\n              _(u.$slots, \"default\")\n            ]),\n            _: 3\n          }, 16, [\"as\", \"as-child\", \"data-state\", \"data-orientation\", \"style\"])\n        ];\n      }),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n});\nfunction vs(a) {\n  const { disabled: t } = a, e = I(), n = ia(), l = () => window.clearTimeout(e.value), s = (f) => {\n    l(), !t.value && (n.trigger(), e.value = window.setTimeout(() => {\n      s(60);\n    }, f));\n  }, r = () => {\n    s(400);\n  }, i = () => {\n    l();\n  }, u = I(!1), d = $(() => $e(a.target)), c = (f) => {\n    f.button !== 0 || u.value || (f.preventDefault(), u.value = !0, r());\n  }, p = () => {\n    u.value = !1, i();\n  };\n  return qe && (Ne(d || window, \"pointerdown\", c), Ne(window, \"pointerup\", p), Ne(window, \"pointercancel\", p)), {\n    isPressed: u,\n    onTrigger: n.on\n  };\n}\nfunction Yo(a, t = I({})) {\n  return Sl(() => new Mr(a.value, t.value));\n}\nfunction kc(a, t = I({})) {\n  return Sl(() => new Vr(a.value, t.value));\n}\nfunction Xo(a, t, e) {\n  let n = a === \"+\" ? t + e : t - e;\n  if (t % 1 !== 0 || e % 1 !== 0) {\n    const l = t.toString().split(\".\"), s = e.toString().split(\".\"), r = l[1] && l[1].length || 0, i = s[1] && s[1].length || 0, u = 10 ** Math.max(r, i);\n    t = Math.round(t * u), e = Math.round(e * u), n = a === \"+\" ? t + e : t - e, n /= u;\n  }\n  return n;\n}\nconst Mc = [\"value\", \"name\", \"disabled\", \"required\"], [Eo, Vc] = Q(\"NumberFieldRoot\"), dy = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"NumberFieldRoot\",\n  props: {\n    defaultValue: { default: void 0 },\n    modelValue: {},\n    min: {},\n    max: {},\n    step: { default: 1 },\n    formatOptions: {},\n    locale: { default: \"en-US\" },\n    disabled: { type: Boolean },\n    required: { type: Boolean },\n    name: {},\n    id: {},\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { disabled: l, min: s, max: r, step: i, locale: u, formatOptions: d, id: c } = ae(e), p = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue,\n      passive: e.modelValue === void 0\n    }), { primitiveElement: f, currentElement: v } = Ae(), g = Je(v), m = I(), w = $(\n      () => W(p.value) === s.value || (s.value && !isNaN(p.value) ? Xo(\"-\", p.value, i.value) < s.value : !1)\n    ), C = $(\n      () => W(p.value) === r.value || (r.value && !isNaN(p.value) ? Xo(\"+\", p.value, i.value) > r.value : !1)\n    );\n    function D(L, G = 1) {\n      var z;\n      const N = T.parse(((z = m.value) == null ? void 0 : z.value) ?? \"\");\n      e.disabled || (isNaN(N) ? p.value = s.value ?? 0 : L === \"increase\" ? p.value = W(N + (i.value ?? 1) * G) : p.value = W(N - (i.value ?? 1) * G));\n    }\n    function h(L = 1) {\n      D(\"increase\", L);\n    }\n    function E(L = 1) {\n      D(\"decrease\", L);\n    }\n    function P(L) {\n      L === \"min\" && s.value !== void 0 ? p.value = W(s.value) : L === \"max\" && r.value !== void 0 && (p.value = W(r.value));\n    }\n    const B = Yo(u, d), T = kc(u, d), M = $(() => B.resolvedOptions().maximumFractionDigits > 0 ? \"decimal\" : \"numeric\"), V = Yo(u, d), A = $(() => isNaN(p.value) ? \"\" : V.format(p.value));\n    function F(L) {\n      return T.isValidPartialNumber(L, s.value, r.value);\n    }\n    function U(L) {\n      m.value && (m.value.value = L);\n    }\n    function W(L) {\n      let G;\n      return i.value === void 0 || isNaN(i.value) ? G = Ht(L, s.value, r.value) : G = Fr(L, s.value, r.value, i.value), G = T.parse(B.format(G)), G;\n    }\n    function ee(L) {\n      const G = T.parse(L);\n      return p.value = W(G), L.length ? (isNaN(G), U(A.value)) : U(L);\n    }\n    return Vc({\n      modelValue: p,\n      handleDecrease: E,\n      handleIncrease: h,\n      handleMinMaxValue: P,\n      inputMode: M,\n      inputEl: m,\n      onInputElement: (L) => m.value = L,\n      textValue: A,\n      validate: F,\n      applyInputValue: ee,\n      disabled: l,\n      max: r,\n      min: s,\n      isDecreaseDisabled: w,\n      isIncreaseDisabled: C,\n      id: c\n    }), (L, G) => (b(), ve(we, null, [\n      q(o(O), k(L.$attrs, {\n        ref_key: \"primitiveElement\",\n        ref: f,\n        role: \"group\",\n        as: L.as,\n        \"as-child\": L.asChild,\n        \"data-disabled\": o(l) ? \"\" : void 0\n      }), {\n        default: y(() => [\n          _(L.$slots, \"default\", {\n            modelValue: o(p),\n            textValue: A.value\n          })\n        ]),\n        _: 3\n      }, 16, [\"as\", \"as-child\", \"data-disabled\"]),\n      o(g) ? (b(), ve(\"input\", {\n        key: 0,\n        type: \"text\",\n        tabindex: \"-1\",\n        \"aria-hidden\": \"true\",\n        value: o(p),\n        name: e.name,\n        disabled: e.disabled,\n        required: e.required,\n        style: {\n          transform: \"translateX(-100%)\",\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          opacity: 0,\n          margin: 0\n        }\n      }, null, 8, Mc)) : ce(\"\", !0)\n    ], 64));\n  }\n}), cy = /* @__PURE__ */ x({\n  __name: \"NumberFieldInput\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"input\" }\n  },\n  setup(a) {\n    const t = a, { primitiveElement: e, currentElement: n } = Ae(), l = Eo();\n    function s(r) {\n      r.target === document.activeElement && (Math.abs(r.deltaY) <= Math.abs(r.deltaX) || (r.preventDefault(), r.deltaY > 0 ? l.handleIncrease() : r.deltaY < 0 && l.handleDecrease()));\n    }\n    return le(() => {\n      l.onInputElement(n.value);\n    }), (r, i) => (b(), S(o(O), k(t, {\n      id: o(l).id.value,\n      ref_key: \"primitiveElement\",\n      ref: e,\n      role: \"spinbutton\",\n      type: \"text\",\n      tabindex: \"0\",\n      value: o(l).textValue.value,\n      inputmode: o(l).inputMode.value,\n      disabled: o(l).disabled.value ? \"\" : void 0,\n      \"data-disabled\": o(l).disabled.value ? \"\" : void 0,\n      autocomplete: \"off\",\n      autocorrect: \"off\",\n      spellcheck: \"false\",\n      \"aria-roledescription\": \"Number field\",\n      \"aria-valuenow\": o(l).modelValue.value,\n      \"aria-valuemin\": o(l).min.value,\n      \"aria-valuemax\": o(l).max.value,\n      onKeydown: [\n        i[0] || (i[0] = ie(ue((u) => o(l).handleIncrease(), [\"prevent\"]), [\"up\"])),\n        i[1] || (i[1] = ie(ue((u) => o(l).handleDecrease(), [\"prevent\"]), [\"down\"])),\n        i[2] || (i[2] = ie(ue((u) => o(l).handleIncrease(10), [\"prevent\"]), [\"page-up\"])),\n        i[3] || (i[3] = ie(ue((u) => o(l).handleDecrease(10), [\"prevent\"]), [\"page-down\"])),\n        i[4] || (i[4] = ie(ue((u) => o(l).handleMinMaxValue(\"min\"), [\"prevent\"]), [\"home\"])),\n        i[5] || (i[5] = ie(ue((u) => o(l).handleMinMaxValue(\"max\"), [\"prevent\"]), [\"end\"]))\n      ],\n      onWheel: s,\n      onBeforeinput: i[6] || (i[6] = (u) => {\n        const d = u.target;\n        let c = d.value.slice(0, d.selectionStart ?? void 0) + (u.data ?? \"\") + d.value.slice(d.selectionEnd ?? void 0);\n        o(l).validate(c) || u.preventDefault();\n      }),\n      onBlur: i[7] || (i[7] = (u) => {\n        var d;\n        return o(l).applyInputValue((d = u.target) == null ? void 0 : d.value);\n      })\n    }), {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"id\", \"value\", \"inputmode\", \"disabled\", \"data-disabled\", \"aria-valuenow\", \"aria-valuemin\", \"aria-valuemax\"]));\n  }\n}), py = /* @__PURE__ */ x({\n  __name: \"NumberFieldIncrement\",\n  props: {\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = Eo(), n = $(() => {\n      var u;\n      return ((u = e.disabled) == null ? void 0 : u.value) || t.disabled || e.isIncreaseDisabled.value;\n    }), { primitiveElement: l, currentElement: s } = Ae(), { isPressed: r, onTrigger: i } = vs({ target: s, disabled: n });\n    return i(() => {\n      e.handleIncrease();\n    }), (u, d) => (b(), S(o(O), k(t, {\n      ref_key: \"primitiveElement\",\n      ref: l,\n      tabindex: \"-1\",\n      \"aria-label\": \"Increase\",\n      type: u.as === \"button\" ? \"button\" : void 0,\n      style: {\n        userSelect: o(r) ? \"none\" : void 0\n      },\n      disabled: n.value ? \"\" : void 0,\n      \"data-disabled\": n.value ? \"\" : void 0,\n      \"data-pressed\": o(r) ? \"true\" : void 0,\n      onContextmenu: d[0] || (d[0] = ue(() => {\n      }, [\"prevent\"]))\n    }), {\n      default: y(() => [\n        _(u.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"type\", \"style\", \"disabled\", \"data-disabled\", \"data-pressed\"]));\n  }\n}), fy = /* @__PURE__ */ x({\n  __name: \"NumberFieldDecrement\",\n  props: {\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = Eo(), n = $(() => {\n      var u;\n      return ((u = e.disabled) == null ? void 0 : u.value) || t.disabled || e.isDecreaseDisabled.value;\n    }), { primitiveElement: l, currentElement: s } = Ae(), { isPressed: r, onTrigger: i } = vs({ target: s, disabled: n });\n    return i(() => {\n      e.handleDecrease();\n    }), (u, d) => (b(), S(o(O), k(t, {\n      ref_key: \"primitiveElement\",\n      ref: l,\n      tabindex: \"-1\",\n      \"aria-label\": \"Decrease\",\n      type: u.as === \"button\" ? \"button\" : void 0,\n      style: {\n        userSelect: o(r) ? \"none\" : void 0\n      },\n      disabled: n.value ? \"\" : void 0,\n      \"data-disabled\": n.value ? \"\" : void 0,\n      \"data-pressed\": o(r) ? \"true\" : void 0,\n      onContextmenu: d[0] || (d[0] = ue(() => {\n      }, [\"prevent\"]))\n    }), {\n      default: y(() => [\n        _(u.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"type\", \"style\", \"disabled\", \"data-disabled\", \"data-pressed\"]));\n  }\n}), [ea, Fc] = Q(\"PaginationRoot\"), vy = /* @__PURE__ */ x({\n  __name: \"PaginationRoot\",\n  props: {\n    page: {},\n    defaultPage: { default: 1 },\n    itemsPerPage: { default: 10 },\n    total: { default: 0 },\n    siblingCount: { default: 2 },\n    disabled: { type: Boolean },\n    showEdges: { type: Boolean, default: !1 },\n    asChild: { type: Boolean },\n    as: { default: \"nav\" }\n  },\n  emits: [\"update:page\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { siblingCount: l, disabled: s, showEdges: r } = ae(e);\n    R();\n    const i = ne(e, \"page\", n, {\n      defaultValue: e.defaultPage,\n      passive: e.page === void 0\n    }), u = $(() => Math.max(1, Math.ceil(e.total / e.itemsPerPage)));\n    return Fc({\n      page: i,\n      onPageChange(d) {\n        i.value = d;\n      },\n      pageCount: u,\n      siblingCount: l,\n      disabled: s,\n      showEdges: r\n    }), (d, c) => (b(), S(o(O), {\n      as: d.as,\n      \"as-child\": d.asChild\n    }, {\n      default: y(() => [\n        _(d.$slots, \"default\", {\n          page: o(i),\n          pageCount: u.value\n        })\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\"]));\n  }\n}), my = /* @__PURE__ */ x({\n  __name: \"PaginationEllipsis\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(O), k(t, { \"data-type\": \"ellipsis\" }), {\n      default: y(() => [\n        _(e.$slots, \"default\", {}, () => [\n          me(\"…\")\n        ])\n      ]),\n      _: 3\n    }, 16));\n  }\n}), hy = /* @__PURE__ */ x({\n  __name: \"PaginationFirst\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = ea();\n    return R(), (n, l) => (b(), S(o(O), k(t, {\n      \"aria-label\": \"First Page\",\n      type: n.as === \"button\" ? \"button\" : void 0,\n      disabled: o(e).page.value === 1 || o(e).disabled.value,\n      onClick: l[0] || (l[0] = (s) => o(e).onPageChange(1))\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\", {}, () => [\n          me(\"First page\")\n        ])\n      ]),\n      _: 3\n    }, 16, [\"type\", \"disabled\"]));\n  }\n}), yy = /* @__PURE__ */ x({\n  __name: \"PaginationLast\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = ea();\n    return R(), (n, l) => (b(), S(o(O), k(t, {\n      \"aria-label\": \"Last Page\",\n      type: n.as === \"button\" ? \"button\" : void 0,\n      disabled: o(e).page.value === o(e).pageCount.value || o(e).disabled.value,\n      onClick: l[0] || (l[0] = (s) => o(e).onPageChange(o(e).pageCount.value))\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\", {}, () => [\n          me(\"Last page\")\n        ])\n      ]),\n      _: 3\n    }, 16, [\"type\", \"disabled\"]));\n  }\n});\nfunction rt(a, t) {\n  const e = t - a + 1;\n  return Array.from({ length: e }, (n, l) => l + a);\n}\nfunction Lc(a) {\n  return a.map((t) => typeof t == \"number\" ? { type: \"page\", value: t } : { type: \"ellipsis\" });\n}\nconst Ba = \"ellipsis\";\nfunction Nc(a, t, e, n) {\n  const s = t, r = Math.max(a - e, 1), i = Math.min(a + e, s);\n  if (n) {\n    const d = Math.min(2 * e + 5, t) - 2, c = r > 3 && Math.abs(s - d - 1 + 1) > 2 && Math.abs(r - 1) > 2, p = i < s - 2 && Math.abs(s - d) > 2 && Math.abs(s - i) > 2;\n    if (!c && p)\n      return [...rt(1, d), Ba, s];\n    if (c && !p) {\n      const v = rt(s - d + 1, s);\n      return [1, Ba, ...v];\n    }\n    if (c && p) {\n      const v = rt(r, i);\n      return [1, Ba, ...v, Ba, s];\n    }\n    return rt(1, s);\n  } else {\n    const u = e * 2 + 1;\n    return t < u ? rt(1, s) : a <= e + 1 ? rt(1, u) : t - a <= e ? rt(t - u + 1, s) : rt(r, i);\n  }\n}\nconst gy = /* @__PURE__ */ x({\n  __name: \"PaginationList\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = ea(), n = $(() => Lc(\n      Nc(\n        e.page.value,\n        e.pageCount.value,\n        e.siblingCount.value,\n        e.showEdges.value\n      )\n    ));\n    return (l, s) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(l.$slots, \"default\", { items: n.value })\n      ]),\n      _: 3\n    }, 16));\n  }\n}), by = /* @__PURE__ */ x({\n  __name: \"PaginationListItem\",\n  props: {\n    value: {},\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = ea(), n = $(() => e.page.value === t.value);\n    return (l, s) => (b(), S(o(O), k(t, {\n      \"data-type\": \"page\",\n      \"aria-label\": `Page ${l.value}`,\n      \"aria-current\": n.value ? \"page\" : void 0,\n      \"data-selected\": n.value ? \"true\" : void 0,\n      disabled: o(e).disabled.value,\n      type: l.as === \"button\" ? \"button\" : void 0,\n      onClick: s[0] || (s[0] = (r) => o(e).onPageChange(l.value))\n    }), {\n      default: y(() => [\n        _(l.$slots, \"default\", {}, () => [\n          me(De(l.value), 1)\n        ])\n      ]),\n      _: 3\n    }, 16, [\"aria-label\", \"aria-current\", \"data-selected\", \"disabled\", \"type\"]));\n  }\n}), Cy = /* @__PURE__ */ x({\n  __name: \"PaginationNext\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = ea();\n    return (n, l) => (b(), S(o(O), k(t, {\n      \"aria-label\": \"Next Page\",\n      type: n.as === \"button\" ? \"button\" : void 0,\n      disabled: o(e).page.value === o(e).pageCount.value || o(e).disabled.value,\n      onClick: l[0] || (l[0] = (s) => o(e).onPageChange(o(e).page.value + 1))\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\", {}, () => [\n          me(\"Next page\")\n        ])\n      ]),\n      _: 3\n    }, 16, [\"type\", \"disabled\"]));\n  }\n}), wy = /* @__PURE__ */ x({\n  __name: \"PaginationPrev\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = ea();\n    return (n, l) => {\n      var s;\n      return b(), S(o(O), k(t, {\n        \"aria-label\": \"Previous Page\",\n        type: n.as === \"button\" ? \"button\" : void 0,\n        disabled: o(e).page.value === 1 || ((s = o(e).disabled) == null ? void 0 : s.value),\n        onClick: l[0] || (l[0] = (r) => o(e).onPageChange(o(e).page.value - 1))\n      }), {\n        default: y(() => [\n          _(n.$slots, \"default\", {}, () => [\n            me(\"Prev page\")\n          ])\n        ]),\n        _: 3\n      }, 16, [\"type\", \"disabled\"]);\n    };\n  }\n}), zc = [\"id\", \"value\", \"name\", \"disabled\", \"required\"], [Kc, Hc] = Q(\"PinInputRoot\"), _y = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"PinInputRoot\",\n  props: {\n    modelValue: {},\n    defaultValue: {},\n    placeholder: { default: \"\" },\n    mask: { type: Boolean },\n    otp: { type: Boolean },\n    type: { default: \"text\" },\n    dir: {},\n    name: {},\n    disabled: { type: Boolean },\n    required: { type: Boolean },\n    id: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\", \"complete\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { mask: l, otp: s, placeholder: r, type: i, disabled: u, dir: d } = ae(e), { forwardRef: c } = R(), p = be(d), f = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue ?? [],\n      passive: e.modelValue === void 0\n    }), v = I(/* @__PURE__ */ new Set());\n    function g(w) {\n      v.value.add(w);\n    }\n    const m = $(() => f.value.filter((C) => !!C).length === v.value.size);\n    return te(f, () => {\n      m.value && n(\"complete\", f.value);\n    }, { deep: !0 }), Hc({\n      modelValue: f,\n      mask: l,\n      otp: s,\n      placeholder: r,\n      type: i,\n      dir: p,\n      disabled: u,\n      isCompleted: m,\n      inputElements: v,\n      onInputElementChange: g\n    }), (w, C) => (b(), ve(we, null, [\n      q(o(O), k(w.$attrs, {\n        ref: o(c),\n        dir: o(p),\n        \"data-complete\": m.value ? \"\" : void 0,\n        \"data-disabled\": o(u) ? \"\" : void 0\n      }), {\n        default: y(() => [\n          _(w.$slots, \"default\", { modelValue: o(f) })\n        ]),\n        _: 3\n      }, 16, [\"dir\", \"data-complete\", \"data-disabled\"]),\n      Ue(\"input\", {\n        id: w.id,\n        type: \"text\",\n        tabindex: \"-1\",\n        \"aria-hidden\": \"true\",\n        value: o(f).join(\"\"),\n        name: w.name,\n        disabled: o(u),\n        required: w.required,\n        style: {\n          transform: \"translateX(-100%)\",\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          opacity: 0,\n          margin: 0\n        },\n        onFocus: C[0] || (C[0] = (D) => {\n          var h, E;\n          return (E = (h = Array.from(v.value)) == null ? void 0 : h[0]) == null ? void 0 : E.focus();\n        })\n      }, null, 40, zc)\n    ], 64));\n  }\n}), Wc = [\"autocomplete\", \"type\", \"inputmode\", \"pattern\", \"placeholder\", \"value\", \"disabled\", \"data-disabled\", \"data-complete\", \"aria-label\"], xy = /* @__PURE__ */ x({\n  __name: \"PinInputInput\",\n  props: {\n    index: {},\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"input\" }\n  },\n  setup(a) {\n    const t = a, e = Kc(), n = $(() => Array.from(e.inputElements.value)), l = $(() => t.disabled || e.disabled.value), s = $(() => e.otp.value), r = $(() => e.type.value === \"number\"), i = $(() => e.mask.value), u = I();\n    function d(h) {\n      var B;\n      const E = h.target;\n      if ((((B = h.data) == null ? void 0 : B.length) ?? 0) > 1) {\n        w(E.value);\n        return;\n      }\n      if (r.value && !/^\\d*$/.test(E.value)) {\n        E.value = E.value.replace(/\\D/g, \"\");\n        return;\n      }\n      E.value = E.value.slice(-1), D(t.index, E.value);\n      const P = n.value[t.index + 1];\n      P && P.focus();\n    }\n    function c(h) {\n      Bt(h, document.activeElement, void 0, {\n        itemsArray: n.value,\n        focus: !0,\n        loop: !1,\n        arrowKeyOptions: \"horizontal\",\n        dir: e.dir.value\n      });\n    }\n    function p(h) {\n      if (h.preventDefault(), h.target.value)\n        D(t.index, \"\");\n      else {\n        const B = n.value[t.index - 1];\n        B && (B.focus(), D(t.index - 1, \"\"));\n      }\n    }\n    function f(h) {\n      h.key === \"Delete\" && (h.preventDefault(), D(t.index, \"\"));\n    }\n    function v(h) {\n      const E = h.target;\n      E.setSelectionRange(1, 1), E.value || (E.placeholder = \"\");\n    }\n    function g(h) {\n      const E = h.target;\n      oe(() => {\n        E.value || (E.placeholder = e.placeholder.value);\n      });\n    }\n    function m(h) {\n      h.preventDefault();\n      const E = h.clipboardData;\n      if (!E)\n        return;\n      const P = E.getData(\"text\");\n      w(P);\n    }\n    function w(h) {\n      var T;\n      const E = [...e.modelValue.value], P = h.length >= n.value.length ? 0 : t.index, B = Math.min(P + h.length, n.value.length);\n      for (let M = P; M < B; M++) {\n        const V = n.value[M], A = h[M - P];\n        r.value && !/^\\d*$/.test(A) || (E[M] = A, V.focus());\n      }\n      e.modelValue.value = E, (T = n.value[B]) == null || T.focus();\n    }\n    function C(h) {\n      let E = h.length - 1;\n      for (; E >= 0 && h[E] === \"\"; )\n        h.pop(), E--;\n      return h;\n    }\n    function D(h, E) {\n      const P = [...e.modelValue.value];\n      P[h] = E, e.modelValue.value = C(P);\n    }\n    return le(() => {\n      e.onInputElementChange(u.value);\n    }), Be(() => {\n      var h;\n      (h = e.inputElements) == null || h.value.delete(u.value);\n    }), (h, E) => (b(), ve(\"input\", {\n      ref_key: \"inputRef\",\n      ref: u,\n      autocapitalize: \"none\",\n      autocomplete: s.value ? \"one-time-code\" : \"false\",\n      type: i.value ? \"password\" : \"text\",\n      inputmode: r.value ? \"numeric\" : \"text\",\n      pattern: r.value ? \"[0-9]*\" : void 0,\n      placeholder: o(e).placeholder.value,\n      value: o(e).modelValue.value[h.index],\n      disabled: l.value,\n      \"data-disabled\": l.value ? \"\" : void 0,\n      \"data-complete\": o(e).isCompleted.value ? \"\" : void 0,\n      \"aria-label\": `pin input ${h.index + 1} of ${n.value.length}`,\n      onInput: E[0] || (E[0] = (P) => d(P)),\n      onKeydown: [\n        ie(c, [\"left\", \"right\", \"up\", \"down\", \"home\", \"end\"]),\n        ie(p, [\"backspace\"]),\n        ie(f, [\"delete\"])\n      ],\n      onFocus: v,\n      onBlur: g,\n      onPaste: m\n    }, null, 40, Wc));\n  }\n}), [Vt, jc] = Q(\"PopoverRoot\"), ms = /* @__PURE__ */ x({\n  __name: \"PopoverRoot\",\n  props: {\n    defaultOpen: { type: Boolean, default: !1 },\n    open: { type: Boolean, default: void 0 },\n    modal: { type: Boolean, default: !1 }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { modal: l } = ae(e), s = ne(e, \"open\", n, {\n      defaultValue: e.defaultOpen,\n      passive: e.open === void 0\n    }), r = I(), i = I(!1);\n    return jc({\n      contentId: \"\",\n      modal: l,\n      open: s,\n      onOpenChange: (u) => {\n        s.value = u;\n      },\n      onOpenToggle: () => {\n        s.value = !s.value;\n      },\n      triggerElement: r,\n      hasCustomAnchor: i\n    }), (u, d) => (b(), S(o(Tt), null, {\n      default: y(() => [\n        _(u.$slots, \"default\", { open: o(s) })\n      ]),\n      _: 3\n    }));\n  }\n}), hs = /* @__PURE__ */ x({\n  __name: \"PopoverTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = Vt(), { forwardRef: n, currentElement: l } = R();\n    return le(() => {\n      e.triggerElement.value = l.value;\n    }), (s, r) => (b(), S(Ge(o(e).hasCustomAnchor.value ? o(O) : o(Rt)), { \"as-child\": \"\" }, {\n      default: y(() => [\n        q(o(O), {\n          ref: o(n),\n          type: s.as === \"button\" ? \"button\" : void 0,\n          \"aria-haspopup\": \"dialog\",\n          \"aria-expanded\": o(e).open.value,\n          \"aria-controls\": o(e).contentId,\n          \"data-state\": o(e).open.value ? \"open\" : \"closed\",\n          as: s.as,\n          \"as-child\": t.asChild,\n          onClick: o(e).onOpenToggle\n        }, {\n          default: y(() => [\n            _(s.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"type\", \"aria-expanded\", \"aria-controls\", \"data-state\", \"as\", \"as-child\", \"onClick\"])\n      ]),\n      _: 3\n    }));\n  }\n}), ys = /* @__PURE__ */ x({\n  __name: \"PopoverPortal\",\n  props: {\n    to: {},\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(ht), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), gs = /* @__PURE__ */ x({\n  __name: \"PopoverContentImpl\",\n  props: {\n    trapFocus: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {},\n    disableOutsidePointerEvents: { type: Boolean }\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = It(e), { forwardRef: s } = R(), r = Vt();\n    return Gn(), (i, u) => (b(), S(o(Ya), {\n      \"as-child\": \"\",\n      loop: \"\",\n      trapped: i.trapFocus,\n      onMountAutoFocus: u[5] || (u[5] = (d) => n(\"openAutoFocus\", d)),\n      onUnmountAutoFocus: u[6] || (u[6] = (d) => n(\"closeAutoFocus\", d))\n    }, {\n      default: y(() => [\n        q(o(yt), {\n          \"as-child\": \"\",\n          \"disable-outside-pointer-events\": i.disableOutsidePointerEvents,\n          onPointerDownOutside: u[0] || (u[0] = (d) => n(\"pointerDownOutside\", d)),\n          onInteractOutside: u[1] || (u[1] = (d) => n(\"interactOutside\", d)),\n          onEscapeKeyDown: u[2] || (u[2] = (d) => n(\"escapeKeyDown\", d)),\n          onFocusOutside: u[3] || (u[3] = (d) => n(\"focusOutside\", d)),\n          onDismiss: u[4] || (u[4] = (d) => o(r).onOpenChange(!1))\n        }, {\n          default: y(() => [\n            q(o(Dt), k(o(l), {\n              id: o(r).contentId,\n              ref: o(s),\n              \"data-state\": o(r).open.value ? \"open\" : \"closed\",\n              role: \"dialog\",\n              style: {\n                \"--radix-popover-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n                \"--radix-popover-content-available-width\": \"var(--radix-popper-available-width)\",\n                \"--radix-popover-content-available-height\": \"var(--radix-popper-available-height)\",\n                \"--radix-popover-trigger-width\": \"var(--radix-popper-anchor-width)\",\n                \"--radix-popover-trigger-height\": \"var(--radix-popper-anchor-height)\"\n              }\n            }), {\n              default: y(() => [\n                _(i.$slots, \"default\")\n              ]),\n              _: 3\n            }, 16, [\"id\", \"data-state\"])\n          ]),\n          _: 3\n        }, 8, [\"disable-outside-pointer-events\"])\n      ]),\n      _: 3\n    }, 8, [\"trapped\"]));\n  }\n}), Uc = /* @__PURE__ */ x({\n  __name: \"PopoverContentModal\",\n  props: {\n    trapFocus: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {},\n    disableOutsidePointerEvents: { type: Boolean }\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = Vt(), s = I(!1);\n    ha(!0);\n    const r = xe(e, n), { forwardRef: i, currentElement: u } = R();\n    return ya(u), (d, c) => (b(), S(gs, k(o(r), {\n      ref: o(i),\n      \"trap-focus\": o(l).open.value,\n      \"disable-outside-pointer-events\": \"\",\n      onCloseAutoFocus: c[0] || (c[0] = ue(\n        (p) => {\n          var f;\n          n(\"closeAutoFocus\", p), s.value || (f = o(l).triggerElement.value) == null || f.focus();\n        },\n        [\"prevent\"]\n      )),\n      onPointerDownOutside: c[1] || (c[1] = (p) => {\n        n(\"pointerDownOutside\", p);\n        const f = p.detail.originalEvent, v = f.button === 0 && f.ctrlKey === !0, g = f.button === 2 || v;\n        s.value = g;\n      }),\n      onFocusOutside: c[2] || (c[2] = ue(() => {\n      }, [\"prevent\"]))\n    }), {\n      default: y(() => [\n        _(d.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"trap-focus\"]));\n  }\n}), Gc = /* @__PURE__ */ x({\n  __name: \"PopoverContentNonModal\",\n  props: {\n    trapFocus: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {},\n    disableOutsidePointerEvents: { type: Boolean }\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = Vt(), s = I(!1), r = I(!1), i = xe(e, n);\n    return (u, d) => (b(), S(gs, k(o(i), {\n      \"trap-focus\": !1,\n      \"disable-outside-pointer-events\": !1,\n      onCloseAutoFocus: d[0] || (d[0] = (c) => {\n        var p;\n        n(\"closeAutoFocus\", c), c.defaultPrevented || (s.value || (p = o(l).triggerElement.value) == null || p.focus(), c.preventDefault()), s.value = !1, r.value = !1;\n      }),\n      onInteractOutside: d[1] || (d[1] = async (c) => {\n        var v;\n        n(\"interactOutside\", c), c.defaultPrevented || (s.value = !0, c.detail.originalEvent.type === \"pointerdown\" && (r.value = !0));\n        const p = c.target;\n        ((v = o(l).triggerElement.value) == null ? void 0 : v.contains(p)) && c.preventDefault(), c.detail.originalEvent.type === \"focusin\" && r.value && c.preventDefault();\n      })\n    }), {\n      default: y(() => [\n        _(u.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), bs = /* @__PURE__ */ x({\n  __name: \"PopoverContent\",\n  props: {\n    forceMount: { type: Boolean },\n    trapFocus: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {},\n    disableOutsidePointerEvents: { type: Boolean }\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\", \"focusOutside\", \"interactOutside\", \"openAutoFocus\", \"closeAutoFocus\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = Vt(), s = xe(e, n), { forwardRef: r } = R();\n    return l.contentId || (l.contentId = he(void 0, \"radix-vue-popover-content\")), (i, u) => (b(), S(o(Pe), {\n      present: i.forceMount || o(l).open.value\n    }, {\n      default: y(() => [\n        o(l).modal.value ? (b(), S(Uc, k({ key: 0 }, o(s), { ref: o(r) }), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16)) : (b(), S(Gc, k({ key: 1 }, o(s), { ref: o(r) }), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16))\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), Cs = /* @__PURE__ */ x({\n  __name: \"PopoverArrow\",\n  props: {\n    width: { default: 10 },\n    height: { default: 5 },\n    asChild: { type: Boolean },\n    as: { default: \"svg\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(Yt), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), ws = /* @__PURE__ */ x({\n  __name: \"PopoverClose\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = Vt();\n    return (n, l) => (b(), S(o(O), {\n      type: n.as === \"button\" ? \"button\" : void 0,\n      as: n.as,\n      \"as-child\": t.asChild,\n      onClick: l[0] || (l[0] = (s) => o(e).onOpenChange(!1))\n    }, {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"type\", \"as\", \"as-child\"]));\n  }\n}), _s = /* @__PURE__ */ x({\n  __name: \"PopoverAnchor\",\n  props: {\n    element: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = Vt();\n    return vl(() => {\n      e.hasCustomAnchor.value = !0;\n    }), Be(() => {\n      e.hasCustomAnchor.value = !1;\n    }), (n, l) => (b(), S(o(Rt), H(j(t)), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), da = 100, [qc, Yc] = Q(\"ProgressRoot\"), Po = (a) => typeof a == \"number\";\nfunction Xc(a, t) {\n  return zt(a) || Po(a) && !Number.isNaN(a) && a <= t && a >= 0 ? a : (console.error(`Invalid prop \\`value\\` of value \\`${a}\\` supplied to \\`ProgressRoot\\`. The \\`value\\` prop must be:\n  - a positive number\n  - less than the value passed to \\`max\\` (or ${da} if no \\`max\\` prop is set)\n  - \\`null\\`  or \\`undefined\\` if the progress is indeterminate.\n\nDefaulting to \\`null\\`.`), null);\n}\nfunction Zc(a) {\n  return Po(a) && !Number.isNaN(a) && a > 0 ? a : (console.error(\n    `Invalid prop \\`max\\` of value \\`${a}\\` supplied to \\`ProgressRoot\\`. Only numbers greater than 0 are valid max values. Defaulting to \\`${da}\\`.`\n  ), da);\n}\nconst Sy = /* @__PURE__ */ x({\n  __name: \"ProgressRoot\",\n  props: {\n    modelValue: {},\n    max: { default: da },\n    getValueLabel: { type: Function, default: (a, t) => `${Math.round(a / t * da)}%` },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\", \"update:max\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t;\n    R();\n    const l = ne(e, \"modelValue\", n, {\n      passive: e.modelValue === void 0\n    }), s = ne(e, \"max\", n, {\n      passive: e.max === void 0\n    });\n    te(\n      () => l.value,\n      async (i) => {\n        const u = Xc(i, e.max);\n        u !== i && (await oe(), l.value = u);\n      },\n      { immediate: !0 }\n    ), te(\n      () => e.max,\n      (i) => {\n        const u = Zc(e.max);\n        u !== i && (s.value = u);\n      },\n      { immediate: !0 }\n    );\n    const r = $(() => zt(l.value) ? \"indeterminate\" : l.value === s.value ? \"complete\" : \"loading\");\n    return Yc({\n      modelValue: l,\n      max: s,\n      progressState: r\n    }), (i, u) => (b(), S(o(O), {\n      \"as-child\": i.asChild,\n      as: i.as,\n      \"aria-valuemax\": o(s),\n      \"aria-valuemin\": 0,\n      \"aria-valuenow\": Po(o(l)) ? o(l) : void 0,\n      \"aria-valuetext\": i.getValueLabel(o(l), o(s)),\n      \"aria-label\": i.getValueLabel(o(l), o(s)),\n      role: \"progressbar\",\n      \"data-state\": r.value,\n      \"data-value\": o(l) ?? void 0,\n      \"data-max\": o(s)\n    }, {\n      default: y(() => [\n        _(i.$slots, \"default\", { modelValue: o(l) })\n      ]),\n      _: 3\n    }, 8, [\"as-child\", \"as\", \"aria-valuemax\", \"aria-valuenow\", \"aria-valuetext\", \"aria-label\", \"data-state\", \"data-value\", \"data-max\"]));\n  }\n}), Ey = /* @__PURE__ */ x({\n  __name: \"ProgressIndicator\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = qc();\n    return R(), (n, l) => {\n      var s;\n      return b(), S(o(O), k(t, {\n        \"data-state\": o(e).progressState.value,\n        \"data-value\": ((s = o(e).modelValue) == null ? void 0 : s.value) ?? void 0,\n        \"data-max\": o(e).max.value\n      }), {\n        default: y(() => [\n          _(n.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16, [\"data-state\", \"data-value\", \"data-max\"]);\n    };\n  }\n}), [Jc, Qc] = Q(\"RadioGroupRoot\"), Py = /* @__PURE__ */ x({\n  __name: \"RadioGroupRoot\",\n  props: {\n    modelValue: {},\n    defaultValue: {},\n    disabled: { type: Boolean, default: !1 },\n    name: {},\n    required: { type: Boolean, default: !1 },\n    orientation: { default: void 0 },\n    dir: {},\n    loop: { type: Boolean, default: !0 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { forwardRef: l } = R(), s = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue,\n      passive: e.modelValue === void 0\n    }), { disabled: r, loop: i, orientation: u, name: d, required: c, dir: p } = ae(e), f = be(p);\n    return Qc({\n      modelValue: s,\n      changeModelValue: (v) => {\n        s.value = v;\n      },\n      disabled: r,\n      loop: i,\n      orientation: u,\n      name: d == null ? void 0 : d.value,\n      required: c\n    }), (v, g) => (b(), S(o(Ot), {\n      \"as-child\": \"\",\n      orientation: o(u),\n      dir: o(f),\n      loop: o(i)\n    }, {\n      default: y(() => [\n        q(o(O), {\n          ref: o(l),\n          role: \"radiogroup\",\n          \"data-disabled\": o(r) ? \"\" : void 0,\n          \"as-child\": v.asChild,\n          as: v.as,\n          required: o(c),\n          \"aria-orientation\": o(u),\n          \"aria-required\": o(c),\n          dir: o(f),\n          name: o(d)\n        }, {\n          default: y(() => [\n            _(v.$slots, \"default\", { modelValue: o(s) })\n          ]),\n          _: 3\n        }, 8, [\"data-disabled\", \"as-child\", \"as\", \"required\", \"aria-orientation\", \"aria-required\", \"dir\", \"name\"])\n      ]),\n      _: 3\n    }, 8, [\"orientation\", \"dir\", \"loop\"]));\n  }\n}), ep = [\"value\", \"checked\", \"name\", \"disabled\", \"required\"], tp = /* @__PURE__ */ x({\n  __name: \"Radio\",\n  props: {\n    id: {},\n    value: {},\n    disabled: { type: Boolean, default: !1 },\n    required: { type: Boolean },\n    checked: { type: Boolean, default: void 0 },\n    name: {},\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  emits: [\"update:checked\"],\n  setup(a, { emit: t }) {\n    const e = a, l = ne(e, \"checked\", t, {\n      passive: e.checked === void 0\n    }), { value: s } = ae(e), { forwardRef: r, currentElement: i } = R(), u = Je(i), d = $(() => {\n      var p;\n      return e.id && i.value ? ((p = document.querySelector(`[for=\"${e.id}\"]`)) == null ? void 0 : p.innerText) ?? e.value : void 0;\n    });\n    function c(p) {\n      l.value = !0, u.value && p.stopPropagation();\n    }\n    return (p, f) => (b(), S(o(O), k(p.$attrs, {\n      id: p.id,\n      ref: o(r),\n      role: \"radio\",\n      type: p.as === \"button\" ? \"button\" : void 0,\n      as: p.as,\n      \"aria-checked\": o(l),\n      \"aria-label\": d.value,\n      \"as-child\": p.asChild,\n      disabled: p.disabled ? \"\" : void 0,\n      \"data-state\": o(l) ? \"checked\" : \"unchecked\",\n      \"data-disabled\": p.disabled ? \"\" : void 0,\n      value: o(s),\n      required: p.required,\n      name: p.name,\n      onClick: ue(c, [\"stop\"])\n    }), {\n      default: y(() => [\n        _(p.$slots, \"default\", { checked: o(l) }),\n        o(u) ? (b(), ve(\"input\", {\n          key: 0,\n          type: \"radio\",\n          tabindex: \"-1\",\n          \"aria-hidden\": \"true\",\n          value: o(s),\n          checked: !!o(l),\n          name: p.name,\n          disabled: p.disabled,\n          required: p.required,\n          style: {\n            transform: \"translateX(-100%)\",\n            position: \"absolute\",\n            pointerEvents: \"none\",\n            opacity: 0,\n            margin: 0\n          }\n        }, null, 8, ep)) : ce(\"\", !0)\n      ]),\n      _: 3\n    }, 16, [\"id\", \"type\", \"as\", \"aria-checked\", \"aria-label\", \"as-child\", \"disabled\", \"data-state\", \"data-disabled\", \"value\", \"required\", \"name\"]));\n  }\n}), [ap, np] = Q(\"RadioGroupItem\"), Dy = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"RadioGroupItem\",\n  props: {\n    id: {},\n    value: {},\n    disabled: { type: Boolean, default: !1 },\n    required: { type: Boolean },\n    name: {},\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, { forwardRef: e, currentElement: n } = R(), l = Jc(), s = $(() => l.disabled.value || t.disabled), r = $(() => l.required.value || t.required), i = $(() => {\n      var p;\n      return ((p = l.modelValue) == null ? void 0 : p.value) === t.value;\n    });\n    np({ disabled: s, checked: i });\n    const u = I(!1), d = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\n    Ne(\"keydown\", (p) => {\n      d.includes(p.key) && (u.value = !0);\n    }), Ne(\"keyup\", () => {\n      u.value = !1;\n    });\n    function c() {\n      setTimeout(() => {\n        var p;\n        u.value && ((p = n.value) == null || p.click());\n      }, 0);\n    }\n    return (p, f) => (b(), S(o(kt), {\n      checked: i.value,\n      disabled: s.value,\n      \"as-child\": \"\",\n      focusable: !s.value,\n      active: i.value\n    }, {\n      default: y(() => [\n        q(tp, k({ ...p.$attrs, ...t }, {\n          ref: o(e),\n          checked: i.value,\n          required: r.value,\n          disabled: s.value,\n          \"onUpdate:checked\": f[0] || (f[0] = (v) => o(l).changeModelValue(p.value)),\n          onKeydown: f[1] || (f[1] = ie(ue(() => {\n          }, [\"prevent\"]), [\"enter\"])),\n          onFocus: c\n        }), {\n          default: y(() => [\n            _(p.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"checked\", \"required\", \"disabled\"])\n      ]),\n      _: 3\n    }, 8, [\"checked\", \"disabled\", \"focusable\", \"active\"]));\n  }\n}), $y = /* @__PURE__ */ x({\n  __name: \"RadioGroupIndicator\",\n  props: {\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const { forwardRef: t } = R(), e = ap();\n    return (n, l) => (b(), S(o(Pe), {\n      present: n.forceMount || o(e).checked.value\n    }, {\n      default: y(() => [\n        q(o(O), k({\n          ref: o(t),\n          \"data-state\": o(e).checked.value ? \"checked\" : \"unchecked\",\n          \"data-disabled\": o(e).disabled.value ? \"\" : void 0,\n          \"as-child\": n.asChild,\n          as: n.as\n        }, n.$attrs), {\n          default: y(() => [\n            _(n.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"data-state\", \"data-disabled\", \"as-child\", \"as\"])\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n});\nfunction op(a) {\n  const t = $(() => a.start.value ? !!a.isDateDisabled(a.start.value) : !1), e = $(() => a.end.value ? !!a.isDateDisabled(a.end.value) : !1), n = $(\n    () => t.value || e.value ? !1 : !!(a.start.value && a.end.value && Le(a.end.value, a.start.value))\n  ), l = (c) => a.start.value ? Te(a.start.value, c) : !1, s = (c) => a.end.value ? Te(a.end.value, c) : !1, r = (c) => a.start.value && Te(a.start.value, c) || a.end.value && Te(a.end.value, c) ? !0 : a.end.value && a.start.value ? Pr(c, a.start.value, a.end.value) : !1, i = $(() => {\n    if (a.start.value && a.end.value || !a.start.value || !a.focusedValue.value)\n      return null;\n    const c = Le(a.start.value, a.focusedValue.value), p = c ? a.start.value : a.focusedValue.value, f = c ? a.focusedValue.value : a.start.value;\n    return Te(p.add({ days: 1 }), f) ? {\n      start: p,\n      end: f\n    } : gl(p, f, a.isDateUnavailable, a.isDateDisabled) ? {\n      start: p,\n      end: f\n    } : null;\n  });\n  return {\n    isInvalid: n,\n    isSelected: r,\n    highlightedRange: i,\n    isSelectionStart: l,\n    isSelectionEnd: s,\n    isHighlightedStart: (c) => !i.value || !i.value.start ? !1 : Te(i.value.start, c),\n    isHighlightedEnd: (c) => !i.value || !i.value.end ? !1 : Te(i.value.end, c)\n  };\n}\nconst lp = { style: { border: \"0px\", clip: \"rect(0px, 0px, 0px, 0px)\", \"clip-path\": \"inset(50%)\", height: \"1px\", margin: \"-1px\", overflow: \"hidden\", padding: \"0px\", position: \"absolute\", \"white-space\": \"nowrap\", width: \"1px\" } }, sp = {\n  role: \"heading\",\n  \"aria-level\": \"2\"\n}, [ta, rp] = Q(\"RangeCalendarRoot\"), ip = /* @__PURE__ */ x({\n  __name: \"RangeCalendarRoot\",\n  props: {\n    defaultPlaceholder: {},\n    defaultValue: { default: () => ({ start: void 0, end: void 0 }) },\n    modelValue: {},\n    placeholder: { default: void 0 },\n    pagedNavigation: { type: Boolean, default: !1 },\n    preventDeselect: { type: Boolean, default: !1 },\n    weekStartsOn: { default: 0 },\n    weekdayFormat: { default: \"narrow\" },\n    calendarLabel: {},\n    fixedWeeks: { type: Boolean, default: !1 },\n    maxValue: {},\n    minValue: {},\n    locale: { default: \"en\" },\n    numberOfMonths: { default: 1 },\n    disabled: { type: Boolean, default: !1 },\n    readonly: { type: Boolean, default: !1 },\n    initialFocus: { type: Boolean, default: !1 },\n    isDateDisabled: { type: Function, default: void 0 },\n    isDateUnavailable: { type: Function, default: void 0 },\n    dir: {},\n    nextPage: {},\n    prevPage: {},\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  emits: [\"update:modelValue\", \"update:placeholder\", \"update:startValue\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, {\n      disabled: l,\n      readonly: s,\n      initialFocus: r,\n      pagedNavigation: i,\n      weekStartsOn: u,\n      weekdayFormat: d,\n      fixedWeeks: c,\n      numberOfMonths: p,\n      preventDeselect: f,\n      isDateUnavailable: v,\n      isDateDisabled: g,\n      calendarLabel: m,\n      maxValue: w,\n      minValue: C,\n      locale: D,\n      dir: h,\n      nextPage: E,\n      prevPage: P\n    } = ae(e), { primitiveElement: B, currentElement: T } = Ae(), M = be(h), V = I(), A = I(), F = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue ?? { start: void 0, end: void 0 },\n      passive: e.modelValue === void 0\n    }), U = Ut({\n      defaultPlaceholder: e.placeholder,\n      defaultValue: F.value.start\n    }), W = I(F.value.start), ee = I(F.value.end), L = ne(e, \"placeholder\", n, {\n      defaultValue: e.defaultPlaceholder ?? U.copy(),\n      passive: e.placeholder === void 0\n    });\n    function G(Ce) {\n      L.value = Ce.copy();\n    }\n    const {\n      fullCalendarLabel: N,\n      headingValue: z,\n      isDateDisabled: Y,\n      isDateUnavailable: K,\n      isNextButtonDisabled: J,\n      isPrevButtonDisabled: Z,\n      grid: re,\n      weekdays: X,\n      isOutsideVisibleView: se,\n      nextPage: pe,\n      prevPage: _e,\n      formatter: Se\n    } = Gl({\n      locale: D,\n      placeholder: L,\n      weekStartsOn: u,\n      fixedWeeks: c,\n      numberOfMonths: p,\n      minValue: C,\n      maxValue: w,\n      disabled: l,\n      weekdayFormat: d,\n      pagedNavigation: i,\n      isDateDisabled: g.value,\n      isDateUnavailable: v.value,\n      calendarLabel: m,\n      nextPage: E,\n      prevPage: P\n    }), {\n      isInvalid: ye,\n      isSelected: de,\n      highlightedRange: Ie,\n      isSelectionStart: Oe,\n      isSelectionEnd: ze,\n      isHighlightedStart: wt,\n      isHighlightedEnd: pr\n    } = op({\n      start: W,\n      end: ee,\n      isDateDisabled: Y,\n      isDateUnavailable: K,\n      focusedValue: A\n    });\n    return te(F, (Ce) => {\n      Ce.start && (!W.value || !Ee(W.value, Ce.start)) && (W.value = Ce.start.copy()), Ce.end && (!ee.value || !Ee(ee.value, Ce.end)) && (ee.value = Ce.end.copy());\n    }), te(W, (Ce) => {\n      Ce && !Ee(Ce, L.value) && G(Ce), n(\"update:startValue\", Ce);\n    }), te([W, ee], ([Ce, ot]) => {\n      const We = F.value;\n      if (!(We && We.start && We.end && Ce && ot && Ee(We.start, Ce) && Ee(We.end, ot)))\n        if (Ce && ot) {\n          if (We.start && We.end && Ee(We.start, Ce) && Ee(We.end, ot))\n            return;\n          Le(ot, Ce) ? F.value = {\n            start: ot.copy(),\n            end: Ce.copy()\n          } : F.value = {\n            start: Ce.copy(),\n            end: ot.copy()\n          };\n        } else We.start && We.end && (F.value = {\n          start: void 0,\n          end: void 0\n        });\n    }), rp({\n      isDateUnavailable: K,\n      startValue: W,\n      endValue: ee,\n      formatter: Se,\n      modelValue: F,\n      placeholder: L,\n      disabled: l,\n      initialFocus: r,\n      pagedNavigation: i,\n      weekStartsOn: u,\n      weekdayFormat: d,\n      fixedWeeks: c,\n      numberOfMonths: p,\n      readonly: s,\n      preventDeselect: f,\n      fullCalendarLabel: N,\n      headingValue: z,\n      isInvalid: ye,\n      isDateDisabled: Y,\n      highlightedRange: Ie,\n      focusedValue: A,\n      lastPressedDateValue: V,\n      isSelected: de,\n      isSelectionEnd: ze,\n      isSelectionStart: Oe,\n      isNextButtonDisabled: J,\n      isPrevButtonDisabled: Z,\n      isOutsideVisibleView: se,\n      nextPage: pe,\n      prevPage: _e,\n      parentElement: T,\n      onPlaceholderChange: G,\n      locale: D,\n      dir: M,\n      isHighlightedStart: wt,\n      isHighlightedEnd: pr\n    }), le(() => {\n      r.value && _l(T.value);\n    }), (Ce, ot) => (b(), S(o(O), {\n      ref_key: \"primitiveElement\",\n      ref: B,\n      as: Ce.as,\n      \"as-child\": Ce.asChild,\n      role: \"application\",\n      \"aria-label\": o(N),\n      \"data-readonly\": o(s) ? \"\" : void 0,\n      \"data-disabled\": o(l) ? \"\" : void 0,\n      \"data-invalid\": o(ye) ? \"\" : void 0,\n      dir: o(M)\n    }, {\n      default: y(() => [\n        Ue(\"div\", lp, [\n          Ue(\"div\", sp, De(o(N)), 1)\n        ]),\n        _(Ce.$slots, \"default\", {\n          date: o(L),\n          grid: o(re),\n          weekDays: o(X),\n          weekStartsOn: o(u),\n          locale: o(D),\n          fixedWeeks: o(c)\n        })\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"aria-label\", \"data-readonly\", \"data-disabled\", \"data-invalid\", \"dir\"]));\n  }\n}), up = /* @__PURE__ */ x({\n  __name: \"RangeCalendarHeader\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), dp = /* @__PURE__ */ x({\n  __name: \"RangeCalendarHeading\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a, e = ta();\n    return (n, l) => (b(), S(o(O), k(t, {\n      \"data-disabled\": o(e).disabled.value ? \"\" : void 0\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\", {\n          headingValue: o(e).headingValue.value\n        }, () => [\n          me(De(o(e).headingValue.value), 1)\n        ])\n      ]),\n      _: 3\n    }, 16, [\"data-disabled\"]));\n  }\n}), cp = /* @__PURE__ */ x({\n  __name: \"RangeCalendarGrid\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"table\" }\n  },\n  setup(a) {\n    const t = a, e = ta(), n = $(() => e.disabled.value ? !0 : void 0), l = $(() => e.readonly.value ? !0 : void 0);\n    return (s, r) => (b(), S(o(O), k(t, {\n      tabindex: \"-1\",\n      role: \"grid\",\n      \"aria-readonly\": l.value,\n      \"aria-disabled\": n.value,\n      \"data-readonly\": l.value && \"\",\n      \"data-disabled\": n.value && \"\"\n    }), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"aria-readonly\", \"aria-disabled\", \"data-readonly\", \"data-disabled\"]));\n  }\n}), pp = /* @__PURE__ */ x({\n  __name: \"RangeCalendarCell\",\n  props: {\n    date: {},\n    asChild: { type: Boolean },\n    as: { default: \"td\" }\n  },\n  setup(a) {\n    const t = ta();\n    return (e, n) => {\n      var l, s;\n      return b(), S(o(O), {\n        as: e.as,\n        \"as-child\": e.asChild,\n        role: \"gridcell\",\n        \"aria-selected\": o(t).isSelected(e.date) ? !0 : void 0,\n        \"aria-disabled\": o(t).isDateDisabled(e.date) || ((s = (l = o(t)).isDateUnavailable) == null ? void 0 : s.call(l, e.date)),\n        \"data-disabled\": o(t).isDateDisabled(e.date) ? \"\" : void 0\n      }, {\n        default: y(() => [\n          _(e.$slots, \"default\")\n        ]),\n        _: 3\n      }, 8, [\"as\", \"as-child\", \"aria-selected\", \"aria-disabled\", \"data-disabled\"]);\n    };\n  }\n}), fp = /* @__PURE__ */ x({\n  __name: \"RangeCalendarHeadCell\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"th\" }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), vp = /* @__PURE__ */ x({\n  __name: \"RangeCalendarNext\",\n  props: {\n    step: {},\n    nextPage: {},\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = $(() => n.disabled.value || n.isNextButtonDisabled(t.step, t.nextPage)), n = ta();\n    return (l, s) => (b(), S(o(O), k(t, {\n      \"aria-label\": \"Next page\",\n      type: l.as === \"button\" ? \"button\" : void 0,\n      \"aria-disabled\": e.value || void 0,\n      \"data-disabled\": e.value || void 0,\n      disabled: e.value,\n      onClick: s[0] || (s[0] = (r) => o(n).nextPage(t.step, t.nextPage))\n    }), {\n      default: y(() => [\n        _(l.$slots, \"default\", {}, () => [\n          me(\"Next page\")\n        ])\n      ]),\n      _: 3\n    }, 16, [\"type\", \"aria-disabled\", \"data-disabled\", \"disabled\"]));\n  }\n}), mp = /* @__PURE__ */ x({\n  __name: \"RangeCalendarPrev\",\n  props: {\n    step: {},\n    prevPage: {},\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = $(() => n.disabled.value || n.isPrevButtonDisabled(t.step, t.prevPage)), n = ta();\n    return (l, s) => (b(), S(o(O), k(t, {\n      \"aria-label\": \"Previous page\",\n      type: l.as === \"button\" ? \"button\" : void 0,\n      \"aria-disabled\": e.value || void 0,\n      \"data-disabled\": e.value || void 0,\n      disabled: e.value,\n      onClick: s[0] || (s[0] = (r) => o(n).prevPage(t.step, t.prevPage))\n    }), {\n      default: y(() => [\n        _(l.$slots, \"default\", {}, () => [\n          me(\"Prev page\")\n        ])\n      ]),\n      _: 3\n    }, 16, [\"type\", \"aria-disabled\", \"data-disabled\", \"disabled\"]));\n  }\n}), hp = /* @__PURE__ */ x({\n  __name: \"RangeCalendarGridHead\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"thead\" }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), k(t, { \"aria-hidden\": \"true\" }), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), yp = /* @__PURE__ */ x({\n  __name: \"RangeCalendarGridBody\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"tbody\" }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), gp = /* @__PURE__ */ x({\n  __name: \"RangeCalendarGridRow\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"tr\" }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), bp = /* @__PURE__ */ x({\n  __name: \"RangeCalendarCellTrigger\",\n  props: {\n    day: {},\n    month: {},\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a, e = ta(), n = Qe(), { primitiveElement: l, currentElement: s } = Ae(), r = $(() => e.formatter.custom(Fe(t.day), {\n      weekday: \"long\",\n      month: \"long\",\n      day: \"numeric\",\n      year: \"numeric\"\n    })), i = $(() => e.isDateDisabled(t.day)), u = $(() => {\n      var V;\n      return (V = e.isDateUnavailable) == null ? void 0 : V.call(e, t.day);\n    }), d = $(() => e.isSelected(t.day)), c = $(() => e.isSelectionStart(t.day)), p = $(() => e.isSelectionEnd(t.day)), f = $(() => e.isHighlightedStart(t.day)), v = $(() => e.isHighlightedEnd(t.day)), g = $(() => e.highlightedRange.value ? Dr(t.day, e.highlightedRange.value.start, e.highlightedRange.value.end) : !1), m = \"[data-radix-vue-calendar-cell-trigger]:not([data-disabled]):not([data-outside-month]):not([data-outside-visible-months])\", w = $(() => ml(t.day, zn())), C = $(() => !hl(t.day, t.month)), D = $(\n      () => e.isOutsideVisibleView(t.day)\n    ), h = $(() => t.day.day.toLocaleString(e.locale.value)), E = $(() => !e.disabled.value && Te(t.day, e.placeholder.value));\n    function P(V, A) {\n      var F;\n      if (!e.readonly.value && !(e.isDateDisabled(A) || (F = e.isDateUnavailable) != null && F.call(e, A))) {\n        if (e.lastPressedDateValue.value = A.copy(), e.startValue.value && e.highlightedRange.value === null) {\n          if (Te(A, e.startValue.value) && !e.preventDeselect.value && !e.endValue.value) {\n            e.startValue.value = void 0, e.onPlaceholderChange(A);\n            return;\n          } else if (!e.endValue.value) {\n            V.preventDefault(), e.lastPressedDateValue.value && Te(e.lastPressedDateValue.value, A) && (e.startValue.value = A.copy());\n            return;\n          }\n        }\n        if (e.startValue.value && e.endValue.value && Te(e.endValue.value, A) && !e.preventDeselect.value) {\n          e.startValue.value = void 0, e.endValue.value = void 0, e.onPlaceholderChange(A);\n          return;\n        }\n        e.startValue.value ? e.endValue.value ? e.endValue.value && e.startValue.value && (e.endValue.value = void 0, e.startValue.value = A.copy()) : e.endValue.value = A.copy() : e.startValue.value = A.copy();\n      }\n    }\n    function B(V) {\n      P(V, t.day);\n    }\n    function T() {\n      var V;\n      e.isDateDisabled(t.day) || (V = e.isDateUnavailable) != null && V.call(e, t.day) || (e.focusedValue.value = t.day.copy());\n    }\n    function M(V) {\n      V.preventDefault(), V.stopPropagation();\n      const A = e.parentElement.value, F = A ? Array.from(A.querySelectorAll(m)) : [];\n      let W = F.indexOf(s.value);\n      const ee = 7, L = e.dir.value === \"rtl\" ? -1 : 1;\n      switch (V.code) {\n        case n.ARROW_RIGHT:\n          W += L;\n          break;\n        case n.ARROW_LEFT:\n          W -= L;\n          break;\n        case n.ARROW_UP:\n          W -= ee;\n          break;\n        case n.ARROW_DOWN:\n          W += ee;\n          break;\n        case n.ENTER:\n        case n.SPACE_CODE:\n          P(V, t.day);\n          return;\n        default:\n          return;\n      }\n      if (W >= 0 && W < F.length) {\n        F[W].focus();\n        return;\n      }\n      if (W < 0) {\n        if (e.isPrevButtonDisabled(\"month\"))\n          return;\n        e.prevPage(), oe(() => {\n          const G = A ? Array.from(A.querySelectorAll(m)) : [];\n          G[G.length - Math.abs(W)].focus();\n        });\n        return;\n      }\n      if (W >= F.length) {\n        if (e.isNextButtonDisabled(\"month\"))\n          return;\n        e.nextPage(), oe(() => {\n          (A ? Array.from(A.querySelectorAll(m)) : [])[W - F.length].focus();\n        });\n      }\n    }\n    return (V, A) => (b(), S(o(O), k({\n      ref_key: \"primitiveElement\",\n      ref: l\n    }, t, {\n      role: \"button\",\n      \"aria-label\": r.value,\n      \"data-radix-vue-calendar-cell-trigger\": \"\",\n      \"aria-selected\": d.value ? !0 : void 0,\n      \"aria-disabled\": C.value || i.value || u.value ? !0 : void 0,\n      \"data-highlighted\": g.value ? \"\" : void 0,\n      \"data-selection-start\": c.value ? !0 : void 0,\n      \"data-selection-end\": p.value ? !0 : void 0,\n      \"data-highlighted-start\": f.value ? !0 : void 0,\n      \"data-highlighted-end\": v.value ? !0 : void 0,\n      \"data-selected\": d.value ? !0 : void 0,\n      \"data-outside-visible-view\": D.value ? \"\" : void 0,\n      \"data-value\": V.day.toString(),\n      \"data-disabled\": i.value || C.value ? \"\" : void 0,\n      \"data-unavailable\": u.value ? \"\" : void 0,\n      \"data-today\": w.value ? \"\" : void 0,\n      \"data-outside-month\": C.value ? \"\" : void 0,\n      \"data-focused\": E.value ? \"\" : void 0,\n      tabindex: E.value ? 0 : C.value || i.value ? void 0 : -1,\n      onClick: B,\n      onFocusin: T,\n      onMouseenter: T,\n      onKeydown: ie(M, [\"up\", \"down\", \"left\", \"right\", \"enter\", \"space\"])\n    }), {\n      default: y(() => [\n        _(V.$slots, \"default\", { dayValue: h.value }, () => [\n          me(De(h.value), 1)\n        ])\n      ]),\n      _: 3\n    }, 16, [\"aria-label\", \"aria-selected\", \"aria-disabled\", \"data-highlighted\", \"data-selection-start\", \"data-selection-end\", \"data-highlighted-start\", \"data-highlighted-end\", \"data-selected\", \"data-outside-visible-view\", \"data-value\", \"data-disabled\", \"data-unavailable\", \"data-today\", \"data-outside-month\", \"data-focused\", \"tabindex\"]));\n  }\n}), [He, Cp] = Q(\"ScrollAreaRoot\"), By = /* @__PURE__ */ x({\n  __name: \"ScrollAreaRoot\",\n  props: {\n    type: { default: \"hover\" },\n    dir: {},\n    scrollHideDelay: { default: 600 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a, { expose: t }) {\n    const e = a, n = I(0), l = I(0), s = I(), r = I(), i = I(), u = I(), d = I(!1), c = I(!1), { type: p, dir: f, scrollHideDelay: v } = ae(e), g = be(f);\n    function m() {\n      var h;\n      (h = s.value) == null || h.scrollTo({\n        top: 0\n      });\n    }\n    function w() {\n      var h;\n      (h = s.value) == null || h.scrollTo({\n        top: 0,\n        left: 0\n      });\n    }\n    t({\n      /** Viewport element within ScrollArea */\n      viewport: s,\n      /** Scroll viewport to top */\n      scrollTop: m,\n      /** Scroll viewport to top-left */\n      scrollTopLeft: w\n    });\n    const { forwardRef: C, currentElement: D } = R();\n    return Cp({\n      type: p,\n      dir: g,\n      scrollHideDelay: v,\n      scrollArea: D,\n      viewport: s,\n      onViewportChange: (h) => {\n        s.value = h || void 0;\n      },\n      content: r,\n      onContentChange: (h) => {\n        r.value = h;\n      },\n      scrollbarX: i,\n      scrollbarXEnabled: d,\n      scrollbarY: u,\n      scrollbarYEnabled: c,\n      onScrollbarXChange: (h) => {\n        i.value = h || void 0;\n      },\n      onScrollbarYChange: (h) => {\n        u.value = h || void 0;\n      },\n      onScrollbarXEnabledChange: (h) => {\n        d.value = h;\n      },\n      onScrollbarYEnabledChange: (h) => {\n        c.value = h;\n      },\n      onCornerWidthChange: (h) => {\n        n.value = h;\n      },\n      onCornerHeightChange: (h) => {\n        l.value = h;\n      }\n    }), (h, E) => (b(), S(o(O), {\n      ref: o(C),\n      \"as-child\": e.asChild,\n      as: h.as,\n      dir: o(g),\n      style: ke({\n        position: \"relative\",\n        // Pass corner sizes as CSS vars to reduce re-renders of context consumers\n        \"--radix-scroll-area-corner-width\": `${n.value}px`,\n        \"--radix-scroll-area-corner-height\": `${l.value}px`\n      })\n    }, {\n      default: y(() => [\n        _(h.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as-child\", \"as\", \"dir\", \"style\"]));\n  }\n}), Iy = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"ScrollAreaViewport\",\n  props: {\n    nonce: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a, { expose: t }) {\n    const e = a, { nonce: n } = ae(e), l = Xa(n), s = He(), r = I();\n    le(() => {\n      s.onViewportChange(r.value), s.onContentChange(u.value);\n    }), t({\n      viewportElement: r\n    });\n    const { forwardRef: i, currentElement: u } = R();\n    return (d, c) => (b(), ve(we, null, [\n      Ue(\"div\", k({\n        ref_key: \"viewportElement\",\n        ref: r,\n        \"data-radix-scroll-area-viewport\": \"\",\n        style: {\n          /**\n           * We don't support `visible` because the intention is to have at least one scrollbar\n           * if this component is used and `visible` will behave like `auto` in that case\n           * https://developer.mozilla.org/en-US/docs/Web/CSS/overflowed#description\n           *\n           * We don't handle `auto` because the intention is for the native implementation\n           * to be hidden if using this component. We just want to ensure the node is scrollable\n           * so could have used either `scroll` or `auto` here. We picked `scroll` to prevent\n           * the browser from having to work out whether to render native scrollbars or not,\n           * we tell it to with the intention of hiding them in CSS.\n           */\n          overflowX: o(s).scrollbarXEnabled.value ? \"scroll\" : \"hidden\",\n          overflowY: o(s).scrollbarYEnabled.value ? \"scroll\" : \"hidden\"\n        }\n      }, d.$attrs, { tabindex: 0 }), [\n        q(o(O), {\n          ref: o(i),\n          style: ke({\n            /**\n             * When horizontal scrollbar is visible: this element should be at least\n             * as wide as its children for size calculations to work correctly.\n             *\n             * When horizontal scrollbar is NOT visible: this element's width should\n             * be constrained by the parent container to enable `text-overflow: ellipsis`\n             */\n            minWidth: o(s).scrollbarXEnabled.value ? \"fit-content\" : void 0\n          }),\n          \"as-child\": e.asChild,\n          as: d.as\n        }, {\n          default: y(() => [\n            _(d.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"style\", \"as-child\", \"as\"])\n      ], 16),\n      q(o(O), {\n        as: \"style\",\n        nonce: o(l)\n      }, {\n        default: y(() => [\n          me(\" /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-radix-scroll-area-viewport] { scrollbar-width:none; -ms-overflow-style:none; -webkit-overflow-scrolling:touch; } [data-radix-scroll-area-viewport]::-webkit-scrollbar { display:none; } \")\n        ]),\n        _: 1\n      }, 8, [\"nonce\"])\n    ], 64));\n  }\n});\nfunction xs(a, t) {\n  return (e) => {\n    if (a[0] === a[1] || t[0] === t[1])\n      return t[0];\n    const n = (t[1] - t[0]) / (a[1] - a[0]);\n    return t[0] + n * (e - a[0]);\n  };\n}\nfunction nn(a) {\n  const t = Ss(a.viewport, a.content), e = a.scrollbar.paddingStart + a.scrollbar.paddingEnd, n = (a.scrollbar.size - e) * t;\n  return Math.max(n, 18);\n}\nfunction Ss(a, t) {\n  const e = a / t;\n  return Number.isNaN(e) ? 0 : e;\n}\nfunction wp(a, t = () => {\n}) {\n  let e = { left: a.scrollLeft, top: a.scrollTop }, n = 0;\n  return function l() {\n    const s = { left: a.scrollLeft, top: a.scrollTop }, r = e.left !== s.left, i = e.top !== s.top;\n    (r || i) && t(), e = s, n = window.requestAnimationFrame(l);\n  }(), () => window.cancelAnimationFrame(n);\n}\nfunction Zo(a, t, e = \"ltr\") {\n  const n = nn(t), l = t.scrollbar.paddingStart + t.scrollbar.paddingEnd, s = t.scrollbar.size - l, r = t.content - t.viewport, i = s - n, u = e === \"ltr\" ? [0, r] : [r * -1, 0], d = Ht(\n    a,\n    u[0],\n    u[1]\n  );\n  return xs([0, r], [0, i])(d);\n}\nfunction Ia(a) {\n  return a ? Number.parseInt(a, 10) : 0;\n}\nfunction _p(a, t, e, n = \"ltr\") {\n  const l = nn(e), s = l / 2, r = t || s, i = l - r, u = e.scrollbar.paddingStart + r, d = e.scrollbar.size - e.scrollbar.paddingEnd - i, c = e.content - e.viewport, p = n === \"ltr\" ? [0, c] : [c * -1, 0];\n  return xs(\n    [u, d],\n    p\n  )(a);\n}\nfunction Jo(a, t) {\n  return a > 0 && a < t;\n}\nconst Es = /* @__PURE__ */ x({\n  __name: \"ScrollAreaScrollbarImpl\",\n  props: {\n    isHorizontal: { type: Boolean }\n  },\n  emits: [\"onDragScroll\", \"onWheelScroll\", \"onThumbPointerDown\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = He(), s = on(), r = ln(), { forwardRef: i, currentElement: u } = R(), d = I(\"\"), c = I();\n    function p(C) {\n      var D, h;\n      if (c.value) {\n        const E = C.clientX - ((D = c.value) == null ? void 0 : D.left), P = C.clientY - ((h = c.value) == null ? void 0 : h.top);\n        n(\"onDragScroll\", { x: E, y: P });\n      }\n    }\n    function f(C) {\n      C.button === 0 && (C.target.setPointerCapture(C.pointerId), c.value = u.value.getBoundingClientRect(), d.value = document.body.style.webkitUserSelect, document.body.style.webkitUserSelect = \"none\", l.viewport && (l.viewport.value.style.scrollBehavior = \"auto\"), p(C));\n    }\n    function v(C) {\n      p(C);\n    }\n    function g(C) {\n      const D = C.target;\n      D.hasPointerCapture(C.pointerId) && D.releasePointerCapture(C.pointerId), document.body.style.webkitUserSelect = d.value, l.viewport && (l.viewport.value.style.scrollBehavior = \"\"), c.value = void 0;\n    }\n    function m(C) {\n      var P;\n      const D = C.target, h = (P = u.value) == null ? void 0 : P.contains(D), E = s.sizes.value.content - s.sizes.value.viewport;\n      h && s.handleWheelScroll(C, E);\n    }\n    le(() => {\n      document.addEventListener(\"wheel\", m, { passive: !1 });\n    }), Be(() => {\n      document.removeEventListener(\"wheel\", m);\n    });\n    function w() {\n      var C, D, h, E, P;\n      u.value && (e.isHorizontal ? s.handleSizeChange({\n        content: ((C = l.viewport.value) == null ? void 0 : C.scrollWidth) ?? 0,\n        viewport: ((D = l.viewport.value) == null ? void 0 : D.offsetWidth) ?? 0,\n        scrollbar: {\n          size: u.value.clientWidth ?? 0,\n          paddingStart: Ia(getComputedStyle(u.value).paddingLeft),\n          paddingEnd: Ia(getComputedStyle(u.value).paddingRight)\n        }\n      }) : s.handleSizeChange({\n        content: ((h = l.viewport.value) == null ? void 0 : h.scrollHeight) ?? 0,\n        viewport: ((E = l.viewport.value) == null ? void 0 : E.offsetHeight) ?? 0,\n        scrollbar: {\n          size: ((P = u.value) == null ? void 0 : P.clientHeight) ?? 0,\n          paddingStart: Ia(getComputedStyle(u.value).paddingLeft),\n          paddingEnd: Ia(getComputedStyle(u.value).paddingRight)\n        }\n      }));\n    }\n    return Ze(u, w), Ze(l.content, w), (C, D) => (b(), S(o(O), {\n      ref: o(i),\n      style: { position: \"absolute\" },\n      \"data-scrollbarimpl\": \"\",\n      as: o(r).as.value,\n      \"as-child\": o(r).asChild.value,\n      onPointerdown: f,\n      onPointermove: v,\n      onPointerup: g\n    }, {\n      default: y(() => [\n        _(C.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\"]));\n  }\n}), xp = /* @__PURE__ */ x({\n  __name: \"ScrollAreaScrollbarX\",\n  setup(a) {\n    const t = He(), e = on(), { forwardRef: n, currentElement: l } = R();\n    le(() => {\n      l.value && t.onScrollbarXChange(l.value);\n    });\n    const s = $(() => e.sizes.value);\n    return (r, i) => (b(), S(Es, {\n      ref: o(n),\n      \"is-horizontal\": !0,\n      \"data-orientation\": \"horizontal\",\n      style: ke({\n        bottom: 0,\n        left: o(t).dir.value === \"rtl\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n        right: o(t).dir.value === \"ltr\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n        \"--radix-scroll-area-thumb-width\": s.value ? `${o(nn)(s.value)}px` : void 0\n      }),\n      onOnDragScroll: i[0] || (i[0] = (u) => o(e).onDragScroll(u.x))\n    }, {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"style\"]));\n  }\n}), Sp = /* @__PURE__ */ x({\n  __name: \"ScrollAreaScrollbarY\",\n  setup(a) {\n    const t = He(), e = on(), { forwardRef: n, currentElement: l } = R();\n    le(() => {\n      l.value && t.onScrollbarYChange(l.value);\n    });\n    const s = $(() => e.sizes.value);\n    return (r, i) => (b(), S(Es, {\n      ref: o(n),\n      \"is-horizontal\": !1,\n      \"data-orientation\": \"vertical\",\n      style: ke({\n        top: 0,\n        right: o(t).dir.value === \"ltr\" ? 0 : void 0,\n        left: o(t).dir.value === \"rtl\" ? 0 : void 0,\n        bottom: \"var(--radix-scroll-area-corner-height)\",\n        \"--radix-scroll-area-thumb-height\": s.value ? `${o(nn)(s.value)}px` : void 0\n      }),\n      onOnDragScroll: i[0] || (i[0] = (u) => o(e).onDragScroll(u.y))\n    }, {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"style\"]));\n  }\n}), [on, Ep] = Q(\"ScrollAreaScrollbarVisible\"), Do = /* @__PURE__ */ x({\n  __name: \"ScrollAreaScrollbarVisible\",\n  setup(a) {\n    const t = He(), e = ln(), { forwardRef: n } = R(), l = I({\n      content: 0,\n      viewport: 0,\n      scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 }\n    }), s = $(() => {\n      const C = Ss(l.value.viewport, l.value.content);\n      return C > 0 && C < 1;\n    }), r = I(), i = I(0);\n    function u(C, D) {\n      if (v.value) {\n        const h = t.viewport.value.scrollLeft + C.deltaY;\n        t.viewport.value.scrollLeft = h, Jo(h, D) && C.preventDefault();\n      } else {\n        const h = t.viewport.value.scrollTop + C.deltaY;\n        t.viewport.value.scrollTop = h, Jo(h, D) && C.preventDefault();\n      }\n    }\n    function d(C, D) {\n      v.value ? i.value = D.x : i.value = D.y;\n    }\n    function c(C) {\n      i.value = 0;\n    }\n    function p(C) {\n      l.value = C;\n    }\n    function f(C, D) {\n      return _p(\n        C,\n        i.value,\n        l.value,\n        D\n      );\n    }\n    const v = $(\n      () => e.isHorizontal.value\n    );\n    function g(C) {\n      v.value ? t.viewport.value.scrollLeft = f(\n        C,\n        t.dir.value\n      ) : t.viewport.value.scrollTop = f(C);\n    }\n    function m() {\n      if (v.value) {\n        if (t.viewport.value && r.value) {\n          const C = t.viewport.value.scrollLeft, D = Zo(\n            C,\n            l.value,\n            t.dir.value\n          );\n          r.value.style.transform = `translate3d(${D}px, 0, 0)`;\n        }\n      } else if (t.viewport.value && r.value) {\n        const C = t.viewport.value.scrollTop, D = Zo(C, l.value);\n        r.value.style.transform = `translate3d(0, ${D}px, 0)`;\n      }\n    }\n    function w(C) {\n      r.value = C;\n    }\n    return Ep({\n      sizes: l,\n      hasThumb: s,\n      handleWheelScroll: u,\n      handleThumbDown: d,\n      handleThumbUp: c,\n      handleSizeChange: p,\n      onThumbPositionChange: m,\n      onThumbChange: w,\n      onDragScroll: g\n    }), (C, D) => v.value ? (b(), S(xp, k({ key: 0 }, C.$attrs, { ref: o(n) }), {\n      default: y(() => [\n        _(C.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16)) : (b(), S(Sp, k({ key: 1 }, C.$attrs, { ref: o(n) }), {\n      default: y(() => [\n        _(C.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Ps = /* @__PURE__ */ x({\n  __name: \"ScrollAreaScrollbarAuto\",\n  props: {\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = He(), e = ln(), { forwardRef: n } = R(), l = I(!1), s = Hn(() => {\n      if (t.viewport.value) {\n        const r = t.viewport.value.offsetWidth < t.viewport.value.scrollWidth, i = t.viewport.value.offsetHeight < t.viewport.value.scrollHeight;\n        l.value = e.isHorizontal.value ? r : i;\n      }\n    }, 10);\n    return le(() => s()), Ze(t.viewport, s), Ze(t.content, s), (r, i) => (b(), S(o(Pe), {\n      present: r.forceMount || l.value\n    }, {\n      default: y(() => [\n        q(Do, k(r.$attrs, {\n          ref: o(n),\n          \"data-state\": l.value ? \"visible\" : \"hidden\"\n        }), {\n          default: y(() => [\n            _(r.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"data-state\"])\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), Pp = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"ScrollAreaScrollbarHover\",\n  props: {\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = He(), { forwardRef: e } = R();\n    let n;\n    const l = I(!1);\n    function s() {\n      window.clearTimeout(n), l.value = !0;\n    }\n    function r() {\n      n = window.setTimeout(() => {\n        l.value = !1;\n      }, t.scrollHideDelay.value);\n    }\n    return le(() => {\n      const i = t.scrollArea.value;\n      i && (i.addEventListener(\"pointerenter\", s), i.addEventListener(\"pointerleave\", r));\n    }), Be(() => {\n      const i = t.scrollArea.value;\n      i && (window.clearTimeout(n), i.removeEventListener(\"pointerenter\", s), i.removeEventListener(\"pointerleave\", r));\n    }), (i, u) => (b(), S(o(Pe), {\n      present: i.forceMount || l.value\n    }, {\n      default: y(() => [\n        q(Ps, k(i.$attrs, {\n          ref: o(e),\n          \"data-state\": l.value ? \"visible\" : \"hidden\"\n        }), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"data-state\"])\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), Dp = /* @__PURE__ */ x({\n  __name: \"ScrollAreaScrollbarScroll\",\n  props: {\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = He(), e = ln(), { forwardRef: n } = R(), { state: l, dispatch: s } = Ml(\"hidden\", {\n      hidden: {\n        SCROLL: \"scrolling\"\n      },\n      scrolling: {\n        SCROLL_END: \"idle\",\n        POINTER_ENTER: \"interacting\"\n      },\n      interacting: {\n        SCROLL: \"interacting\",\n        POINTER_LEAVE: \"idle\"\n      },\n      idle: {\n        HIDE: \"hidden\",\n        SCROLL: \"scrolling\",\n        POINTER_ENTER: \"interacting\"\n      }\n    });\n    ge((i) => {\n      if (l.value === \"idle\") {\n        const u = window.setTimeout(\n          () => s(\"HIDE\"),\n          t.scrollHideDelay.value\n        );\n        i(() => {\n          window.clearTimeout(u);\n        });\n      }\n    });\n    const r = Hn(() => s(\"SCROLL_END\"), 100);\n    return ge((i) => {\n      const u = t.viewport.value, d = e.isHorizontal.value ? \"scrollLeft\" : \"scrollTop\";\n      if (u) {\n        let c = u[d];\n        const p = () => {\n          const f = u[d];\n          c !== f && (s(\"SCROLL\"), r()), c = f;\n        };\n        u.addEventListener(\"scroll\", p), i(() => {\n          u.removeEventListener(\"scroll\", p);\n        });\n      }\n    }), (i, u) => (b(), S(o(Pe), {\n      present: i.forceMount || o(l) !== \"hidden\"\n    }, {\n      default: y(() => [\n        q(Do, k(i.$attrs, { ref: o(n) }), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16)\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), [ln, $p] = Q(\"ScrollAreaScrollbar\"), Ty = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"ScrollAreaScrollbar\",\n  props: {\n    orientation: { default: \"vertical\" },\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a, { forwardRef: e } = R(), n = He(), l = $(() => t.orientation === \"horizontal\");\n    te(\n      l,\n      () => {\n        l.value ? n.onScrollbarXEnabledChange(!0) : n.onScrollbarYEnabledChange(!0);\n      },\n      { immediate: !0 }\n    ), Be(() => {\n      n.onScrollbarXEnabledChange(!1), n.onScrollbarYEnabledChange(!1);\n    });\n    const { orientation: s, forceMount: r, asChild: i, as: u } = ae(t);\n    return $p({\n      orientation: s,\n      forceMount: r,\n      isHorizontal: l,\n      as: u,\n      asChild: i\n    }), (d, c) => o(n).type.value === \"hover\" ? (b(), S(Pp, k({ key: 0 }, d.$attrs, {\n      ref: o(e),\n      \"force-mount\": o(r)\n    }), {\n      default: y(() => [\n        _(d.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"force-mount\"])) : o(n).type.value === \"scroll\" ? (b(), S(Dp, k({ key: 1 }, d.$attrs, {\n      ref: o(e),\n      \"force-mount\": o(r)\n    }), {\n      default: y(() => [\n        _(d.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"force-mount\"])) : o(n).type.value === \"auto\" ? (b(), S(Ps, k({ key: 2 }, d.$attrs, {\n      ref: o(e),\n      \"force-mount\": o(r)\n    }), {\n      default: y(() => [\n        _(d.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"force-mount\"])) : o(n).type.value === \"always\" ? (b(), S(Do, k({ key: 3 }, d.$attrs, {\n      ref: o(e),\n      \"data-state\": \"visible\"\n    }), {\n      default: y(() => [\n        _(d.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16)) : ce(\"\", !0);\n  }\n}), Ry = /* @__PURE__ */ x({\n  __name: \"ScrollAreaThumb\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = He(), n = on();\n    function l(f) {\n      const g = f.target.getBoundingClientRect(), m = f.clientX - g.left, w = f.clientY - g.top;\n      n.handleThumbDown(f, { x: m, y: w });\n    }\n    function s(f) {\n      n.handleThumbUp(f);\n    }\n    const { forwardRef: r, currentElement: i } = R(), u = I(), d = $(() => e.viewport.value);\n    function c() {\n      if (!u.value) {\n        const f = wp(\n          d.value,\n          n.onThumbPositionChange\n        );\n        u.value = f, n.onThumbPositionChange();\n      }\n    }\n    const p = $(() => n.sizes.value);\n    return fi(p, () => {\n      n.onThumbChange(i.value), d.value && (n.onThumbPositionChange(), d.value.addEventListener(\"scroll\", c));\n    }), Be(() => {\n      var f;\n      d.value.removeEventListener(\"scroll\", c), (f = e.viewport.value) == null || f.removeEventListener(\"scroll\", c);\n    }), (f, v) => (b(), S(o(O), {\n      ref: o(r),\n      \"data-state\": o(n).hasThumb ? \"visible\" : \"hidden\",\n      style: {\n        width: \"var(--radix-scroll-area-thumb-width)\",\n        height: \"var(--radix-scroll-area-thumb-height)\"\n      },\n      \"as-child\": t.asChild,\n      as: f.as,\n      onPointerdown: l,\n      onPointerup: s\n    }, {\n      default: y(() => [\n        _(f.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"data-state\", \"as-child\", \"as\"]));\n  }\n}), Bp = /* @__PURE__ */ x({\n  __name: \"ScrollAreaCornerImpl\",\n  setup(a) {\n    const t = He(), e = I(0), n = I(0), l = $(() => !!e.value && !!n.value);\n    function s() {\n      var u;\n      const i = ((u = t.scrollbarX.value) == null ? void 0 : u.offsetHeight) || 0;\n      t.onCornerHeightChange(i), n.value = i;\n    }\n    function r() {\n      var u;\n      const i = ((u = t.scrollbarY.value) == null ? void 0 : u.offsetWidth) || 0;\n      t.onCornerWidthChange(i), e.value = i;\n    }\n    return Ze(t.scrollbarX.value, s), Ze(t.scrollbarY.value, r), te(() => t.scrollbarX.value, s), te(() => t.scrollbarY.value, r), (i, u) => {\n      var d;\n      return l.value ? (b(), S(o(O), k({\n        key: 0,\n        style: {\n          width: `${e.value}px`,\n          height: `${n.value}px`,\n          position: \"absolute\",\n          right: o(t).dir.value === \"ltr\" ? 0 : void 0,\n          left: o(t).dir.value === \"rtl\" ? 0 : void 0,\n          bottom: 0\n        }\n      }, (d = i.$parent) == null ? void 0 : d.$props), {\n        default: y(() => [\n          _(i.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16, [\"style\"])) : ce(\"\", !0);\n    };\n  }\n}), Ay = /* @__PURE__ */ x({\n  __name: \"ScrollAreaCorner\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { forwardRef: e } = R(), n = He(), l = $(\n      () => !!n.scrollbarX.value && !!n.scrollbarY.value\n    ), s = $(\n      () => n.type.value !== \"scroll\" && l.value\n    );\n    return (r, i) => s.value ? (b(), S(Bp, k({ key: 0 }, t, { ref: o(e) }), {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16)) : ce(\"\", !0);\n  }\n}), Ip = [\"default-value\"], Tp = /* @__PURE__ */ x({\n  __name: \"BubbleSelect\",\n  props: {\n    autocomplete: {},\n    autofocus: { type: Boolean },\n    disabled: { type: Boolean },\n    form: {},\n    multiple: { type: Boolean },\n    name: {},\n    required: { type: Boolean },\n    size: {},\n    value: {}\n  },\n  setup(a) {\n    const t = a, { value: e } = ae(t), n = I();\n    return (l, s) => (b(), S(o(Xt), { \"as-child\": \"\" }, {\n      default: y(() => [\n        Ha(Ue(\"select\", k({\n          ref_key: \"selectElement\",\n          ref: n\n        }, t, {\n          \"onUpdate:modelValue\": s[0] || (s[0] = (r) => Xe(e) ? e.value = r : null),\n          \"default-value\": o(e)\n        }), [\n          _(l.$slots, \"default\")\n        ], 16, Ip), [\n          [Cr, o(e)]\n        ])\n      ]),\n      _: 3\n    }));\n  }\n}), Rp = {\n  key: 0,\n  value: \"\"\n}, [bt, Ds] = Q(\"SelectRoot\"), [Ap, Op] = Q(\"SelectRoot\"), Oy = /* @__PURE__ */ x({\n  __name: \"SelectRoot\",\n  props: {\n    open: { type: Boolean, default: void 0 },\n    defaultOpen: { type: Boolean },\n    defaultValue: { default: \"\" },\n    modelValue: { default: void 0 },\n    dir: {},\n    name: {},\n    autocomplete: {},\n    disabled: { type: Boolean },\n    required: { type: Boolean }\n  },\n  emits: [\"update:modelValue\", \"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue,\n      passive: e.modelValue === void 0\n    }), s = ne(e, \"open\", n, {\n      defaultValue: e.defaultOpen,\n      passive: e.open === void 0\n    }), r = I(), i = I(), u = I({\n      x: 0,\n      y: 0\n    }), d = I(!1), { required: c, disabled: p, dir: f } = ae(e), v = be(f);\n    Ds({\n      triggerElement: r,\n      onTriggerChange: (C) => {\n        r.value = C;\n      },\n      valueElement: i,\n      onValueElementChange: (C) => {\n        i.value = C;\n      },\n      valueElementHasChildren: d,\n      onValueElementHasChildrenChange: (C) => {\n        d.value = C;\n      },\n      contentId: \"\",\n      modelValue: l,\n      onValueChange: (C) => {\n        l.value = C;\n      },\n      open: s,\n      required: c,\n      onOpenChange: (C) => {\n        s.value = C;\n      },\n      dir: v,\n      triggerPointerDownPosRef: u,\n      disabled: p\n    });\n    const g = Je(r), m = I(/* @__PURE__ */ new Set()), w = $(() => Array.from(m.value).map((C) => {\n      var D;\n      return (D = C.props) == null ? void 0 : D.value;\n    }).join(\";\"));\n    return Op({\n      onNativeOptionAdd: (C) => {\n        m.value.add(C);\n      },\n      onNativeOptionRemove: (C) => {\n        m.value.delete(C);\n      }\n    }), (C, D) => (b(), S(o(Tt), null, {\n      default: y(() => [\n        _(C.$slots, \"default\", {\n          modelValue: o(l),\n          open: o(s)\n        }),\n        o(g) ? (b(), S(Tp, k({ key: w.value }, C.$attrs, {\n          \"aria-hidden\": \"true\",\n          tabindex: \"-1\",\n          required: o(c),\n          name: C.name,\n          autocomplete: C.autocomplete,\n          disabled: o(p),\n          value: o(l),\n          onChange: D[0] || (D[0] = (h) => l.value = h.target.value)\n        }), {\n          default: y(() => [\n            o(l) === void 0 ? (b(), ve(\"option\", Rp)) : ce(\"\", !0),\n            (b(!0), ve(we, null, va(Array.from(m.value), (h) => (b(), S(Ge(h), k({ ref_for: !0 }, h.props, {\n              key: h.key ?? \"\"\n            }), null, 16))), 128))\n          ]),\n          _: 1\n        }, 16, [\"required\", \"name\", \"autocomplete\", \"disabled\", \"value\"])) : ce(\"\", !0)\n      ]),\n      _: 3\n    }));\n  }\n}), kp = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"], Mp = [\" \", \"Enter\"], at = 10;\nfunction $s(a) {\n  return a === \"\" || zt(a);\n}\nconst ky = /* @__PURE__ */ x({\n  __name: \"SelectTrigger\",\n  props: {\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = bt(), n = $(() => {\n      var v;\n      return ((v = e.disabled) == null ? void 0 : v.value) || t.disabled;\n    }), { forwardRef: l, currentElement: s } = R();\n    e.contentId || (e.contentId = he(void 0, \"radix-vue-select-content\")), le(() => {\n      e.triggerElement = s;\n    });\n    const { injectCollection: r } = Me(), i = r(), { search: u, handleTypeaheadSearch: d, resetTypeahead: c } = ga(i);\n    function p() {\n      n.value || (e.onOpenChange(!0), c());\n    }\n    function f(v) {\n      p(), e.triggerPointerDownPosRef.value = {\n        x: Math.round(v.pageX),\n        y: Math.round(v.pageY)\n      };\n    }\n    return (v, g) => (b(), S(o(Rt), { \"as-child\": \"\" }, {\n      default: y(() => {\n        var m, w, C, D;\n        return [\n          q(o(O), {\n            ref: o(l),\n            role: \"combobox\",\n            type: v.as === \"button\" ? \"button\" : void 0,\n            \"aria-controls\": o(e).contentId,\n            \"aria-expanded\": o(e).open.value || !1,\n            \"aria-required\": (m = o(e).required) == null ? void 0 : m.value,\n            \"aria-autocomplete\": \"none\",\n            disabled: n.value,\n            dir: (w = o(e)) == null ? void 0 : w.dir.value,\n            \"data-state\": (C = o(e)) != null && C.open.value ? \"open\" : \"closed\",\n            \"data-disabled\": n.value ? \"\" : void 0,\n            \"data-placeholder\": o($s)((D = o(e).modelValue) == null ? void 0 : D.value) ? \"\" : void 0,\n            \"as-child\": v.asChild,\n            as: v.as,\n            onClick: g[0] || (g[0] = (h) => {\n              var E;\n              (E = h == null ? void 0 : h.currentTarget) == null || E.focus();\n            }),\n            onPointerdown: g[1] || (g[1] = (h) => {\n              if (h.pointerType === \"touch\")\n                return h.preventDefault();\n              const E = h.target;\n              E.hasPointerCapture(h.pointerId) && E.releasePointerCapture(h.pointerId), h.button === 0 && h.ctrlKey === !1 && (f(h), h.preventDefault());\n            }),\n            onPointerup: g[2] || (g[2] = ue(\n              (h) => {\n                h.pointerType === \"touch\" && f(h);\n              },\n              [\"prevent\"]\n            )),\n            onKeydown: g[3] || (g[3] = (h) => {\n              const E = o(u) !== \"\";\n              !(h.ctrlKey || h.altKey || h.metaKey) && h.key.length === 1 && E && h.key === \" \" || (o(d)(h.key), o(kp).includes(h.key) && (p(), h.preventDefault()));\n            })\n          }, {\n            default: y(() => [\n              _(v.$slots, \"default\")\n            ]),\n            _: 3\n          }, 8, [\"type\", \"aria-controls\", \"aria-expanded\", \"aria-required\", \"disabled\", \"dir\", \"data-state\", \"data-disabled\", \"data-placeholder\", \"as-child\", \"as\"])\n        ];\n      }),\n      _: 3\n    }));\n  }\n}), My = /* @__PURE__ */ x({\n  __name: \"SelectPortal\",\n  props: {\n    to: {},\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(ht), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), [$o, Vp] = Q(\"SelectItemAlignedPosition\"), Fp = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"SelectItemAlignedPosition\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"placed\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { injectCollection: l } = Me(), s = bt(), r = Ct(), i = l(), u = I(!1), d = I(!0), c = I(), { forwardRef: p, currentElement: f } = R(), { viewport: v, selectedItem: g, selectedItemText: m, focusSelectedItem: w } = r;\n    function C() {\n      if (s.triggerElement.value && s.valueElement.value && c.value && f.value && (v != null && v.value) && (g != null && g.value) && (m != null && m.value)) {\n        const E = s.triggerElement.value.getBoundingClientRect(), P = f.value.getBoundingClientRect(), B = s.valueElement.value.getBoundingClientRect(), T = m.value.getBoundingClientRect();\n        if (s.dir.value !== \"rtl\") {\n          const Se = T.left - P.left, ye = B.left - Se, de = E.left - ye, Ie = E.width + de, Oe = Math.max(Ie, P.width), ze = window.innerWidth - at, wt = Ht(ye, at, ze - Oe);\n          c.value.style.minWidth = `${Ie}px`, c.value.style.left = `${wt}px`;\n        } else {\n          const Se = P.right - T.right, ye = window.innerWidth - B.right - Se, de = window.innerWidth - E.right - ye, Ie = E.width + de, Oe = Math.max(Ie, P.width), ze = window.innerWidth - at, wt = Ht(\n            ye,\n            at,\n            ze - Oe\n          );\n          c.value.style.minWidth = `${Ie}px`, c.value.style.right = `${wt}px`;\n        }\n        const M = i.value, V = window.innerHeight - at * 2, A = v.value.scrollHeight, F = window.getComputedStyle(f.value), U = Number.parseInt(\n          F.borderTopWidth,\n          10\n        ), W = Number.parseInt(F.paddingTop, 10), ee = Number.parseInt(\n          F.borderBottomWidth,\n          10\n        ), L = Number.parseInt(\n          F.paddingBottom,\n          10\n        ), G = U + W + A + L + ee, N = Math.min(\n          g.value.offsetHeight * 5,\n          G\n        ), z = window.getComputedStyle(v.value), Y = Number.parseInt(z.paddingTop, 10), K = Number.parseInt(\n          z.paddingBottom,\n          10\n        ), J = E.top + E.height / 2 - at, Z = V - J, re = g.value.offsetHeight / 2, X = g.value.offsetTop + re, se = U + W + X, pe = G - se;\n        if (se <= J) {\n          const Se = g.value === M[M.length - 1];\n          c.value.style.bottom = \"0px\";\n          const ye = f.value.clientHeight - v.value.offsetTop - v.value.offsetHeight, de = Math.max(\n            Z,\n            re + (Se ? K : 0) + ye + ee\n          ), Ie = se + de;\n          c.value.style.height = `${Ie}px`;\n        } else {\n          const Se = g.value === M[0];\n          c.value.style.top = \"0px\";\n          const de = Math.max(\n            J,\n            U + v.value.offsetTop + (Se ? Y : 0) + re\n          ) + pe;\n          c.value.style.height = `${de}px`, v.value.scrollTop = se - J + v.value.offsetTop;\n        }\n        c.value.style.margin = `${at}px 0`, c.value.style.minHeight = `${N}px`, c.value.style.maxHeight = `${V}px`, n(\"placed\"), requestAnimationFrame(() => u.value = !0);\n      }\n    }\n    const D = I(\"\");\n    le(async () => {\n      await oe(), C(), f.value && (D.value = window.getComputedStyle(f.value).zIndex);\n    });\n    function h(E) {\n      E && d.value === !0 && (C(), w == null || w(), d.value = !1);\n    }\n    return Vp({\n      contentWrapper: c,\n      shouldExpandOnScrollRef: u,\n      onScrollButtonChange: h\n    }), (E, P) => (b(), ve(\"div\", {\n      ref_key: \"contentWrapperElement\",\n      ref: c,\n      style: ke({\n        display: \"flex\",\n        flexDirection: \"column\",\n        position: \"fixed\",\n        zIndex: D.value\n      })\n    }, [\n      q(o(O), k({\n        ref: o(p),\n        style: {\n          // When we get the height of the content, it includes borders. If we were to set\n          // the height without having `boxSizing: 'border-box'` it would be too big.\n          boxSizing: \"border-box\",\n          // We need to ensure the content doesn't get taller than the wrapper\n          maxHeight: \"100%\"\n        }\n      }, { ...E.$attrs, ...e }), {\n        default: y(() => [\n          _(E.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16)\n    ], 4));\n  }\n}), Lp = /* @__PURE__ */ x({\n  __name: \"SelectPopperPosition\",\n  props: {\n    side: {},\n    sideOffset: {},\n    align: { default: \"start\" },\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: { default: at },\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const e = It(a);\n    return (n, l) => (b(), S(o(Dt), k(o(e), { style: {\n      // Ensure border-box for floating-ui calculations\n      boxSizing: \"border-box\",\n      \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n      \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n      \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n      \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n      \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n    } }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), aa = {\n  onViewportChange: () => {\n  },\n  itemTextRefCallback: () => {\n  },\n  itemRefCallback: () => {\n  }\n}, [Ct, Np] = Q(\"SelectContent\"), zp = /* @__PURE__ */ x({\n  __name: \"SelectContentImpl\",\n  props: {\n    position: { default: \"item-aligned\" },\n    bodyLock: { type: Boolean, default: !0 },\n    side: {},\n    sideOffset: {},\n    align: { default: \"start\" },\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"closeAutoFocus\", \"escapeKeyDown\", \"pointerDownOutside\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = bt();\n    Gn(), ha(e.bodyLock);\n    const { createCollection: s } = Me(), r = I();\n    ya(r);\n    const i = s(r), { search: u, handleTypeaheadSearch: d } = ga(i), c = I(), p = I(), f = I(), v = I(!1), g = I(!1);\n    function m() {\n      p.value && r.value && $n([p.value, r.value]);\n    }\n    te(v, () => {\n      m();\n    });\n    const { onOpenChange: w, triggerPointerDownPosRef: C } = l;\n    ge((P) => {\n      if (!r.value)\n        return;\n      let B = { x: 0, y: 0 };\n      const T = (V) => {\n        var A, F;\n        B = {\n          x: Math.abs(\n            Math.round(V.pageX) - (((A = C.value) == null ? void 0 : A.x) ?? 0)\n          ),\n          y: Math.abs(\n            Math.round(V.pageY) - (((F = C.value) == null ? void 0 : F.y) ?? 0)\n          )\n        };\n      }, M = (V) => {\n        var A;\n        V.pointerType !== \"touch\" && (B.x <= 10 && B.y <= 10 ? V.preventDefault() : (A = r.value) != null && A.contains(V.target) || w(!1), document.removeEventListener(\"pointermove\", T), C.value = null);\n      };\n      C.value !== null && (document.addEventListener(\"pointermove\", T), document.addEventListener(\"pointerup\", M, {\n        capture: !0,\n        once: !0\n      })), P(() => {\n        document.removeEventListener(\"pointermove\", T), document.removeEventListener(\"pointerup\", M, {\n          capture: !0\n        });\n      });\n    });\n    function D(P) {\n      const B = P.ctrlKey || P.altKey || P.metaKey;\n      if (P.key === \"Tab\" && P.preventDefault(), !B && P.key.length === 1 && d(P.key), [\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(P.key)) {\n        let T = i.value;\n        if ([\"ArrowUp\", \"End\"].includes(P.key) && (T = T.slice().reverse()), [\"ArrowUp\", \"ArrowDown\"].includes(P.key)) {\n          const M = P.target, V = T.indexOf(M);\n          T = T.slice(V + 1);\n        }\n        setTimeout(() => $n(T)), P.preventDefault();\n      }\n    }\n    const h = $(() => e.position === \"popper\" ? e : {}), E = It(h.value);\n    return Np({\n      content: r,\n      viewport: c,\n      onViewportChange: (P) => {\n        c.value = P;\n      },\n      itemRefCallback: (P, B, T) => {\n        var A, F;\n        const M = !g.value && !T;\n        (((A = l.modelValue) == null ? void 0 : A.value) !== void 0 && ((F = l.modelValue) == null ? void 0 : F.value) === B || M) && (p.value = P, M && (g.value = !0));\n      },\n      selectedItem: p,\n      selectedItemText: f,\n      onItemLeave: () => {\n        var P;\n        (P = r.value) == null || P.focus();\n      },\n      itemTextRefCallback: (P, B, T) => {\n        var A, F;\n        const M = !g.value && !T;\n        (((A = l.modelValue) == null ? void 0 : A.value) !== void 0 && ((F = l.modelValue) == null ? void 0 : F.value) === B || M) && (f.value = P);\n      },\n      focusSelectedItem: m,\n      position: e.position,\n      isPositioned: v,\n      searchRef: u\n    }), (P, B) => (b(), S(o(Ya), {\n      \"as-child\": \"\",\n      onMountAutoFocus: B[6] || (B[6] = ue(() => {\n      }, [\"prevent\"])),\n      onUnmountAutoFocus: B[7] || (B[7] = (T) => {\n        var M;\n        n(\"closeAutoFocus\", T), !T.defaultPrevented && ((M = o(l).triggerElement.value) == null || M.focus({ preventScroll: !0 }), T.preventDefault());\n      })\n    }, {\n      default: y(() => [\n        q(o(yt), {\n          \"as-child\": \"\",\n          \"disable-outside-pointer-events\": \"\",\n          onFocusOutside: B[2] || (B[2] = ue(() => {\n          }, [\"prevent\"])),\n          onDismiss: B[3] || (B[3] = (T) => o(l).onOpenChange(!1)),\n          onEscapeKeyDown: B[4] || (B[4] = (T) => n(\"escapeKeyDown\", T)),\n          onPointerDownOutside: B[5] || (B[5] = (T) => n(\"pointerDownOutside\", T))\n        }, {\n          default: y(() => [\n            (b(), S(Ge(\n              P.position === \"popper\" ? Lp : Fp\n            ), k({ ...P.$attrs, ...o(E) }, {\n              id: o(l).contentId,\n              ref: (T) => {\n                r.value = o($e)(T);\n              },\n              role: \"listbox\",\n              \"data-state\": o(l).open.value ? \"open\" : \"closed\",\n              dir: o(l).dir.value,\n              style: {\n                // flex layout so we can place the scroll buttons properly\n                display: \"flex\",\n                flexDirection: \"column\",\n                // reset the outline by default as the content MAY get focused\n                outline: \"none\"\n              },\n              onContextmenu: B[0] || (B[0] = ue(() => {\n              }, [\"prevent\"])),\n              onPlaced: B[1] || (B[1] = (T) => v.value = !0),\n              onKeydown: D\n            }), {\n              default: y(() => [\n                _(P.$slots, \"default\")\n              ]),\n              _: 3\n            }, 16, [\"id\", \"data-state\", \"dir\", \"onKeydown\"]))\n          ]),\n          _: 3\n        })\n      ]),\n      _: 3\n    }));\n  }\n}), Kp = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"SelectProvider\",\n  props: {\n    context: {}\n  },\n  setup(a) {\n    return Ds(a.context), (e, n) => _(e.$slots, \"default\");\n  }\n}), Hp = { key: 1 }, Vy = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"SelectContent\",\n  props: {\n    forceMount: { type: Boolean },\n    position: {},\n    bodyLock: { type: Boolean },\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean },\n    updatePositionStrategy: {},\n    prioritizePosition: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"closeAutoFocus\", \"escapeKeyDown\", \"pointerDownOutside\"],\n  setup(a, { emit: t }) {\n    const e = a, l = xe(e, t), s = bt(), r = I();\n    le(() => {\n      r.value = new DocumentFragment();\n    });\n    const i = I(), u = $(() => e.forceMount || s.open.value);\n    return (d, c) => {\n      var p;\n      return u.value ? (b(), S(o(Pe), {\n        key: 0,\n        ref_key: \"presenceRef\",\n        ref: i,\n        present: !0\n      }, {\n        default: y(() => [\n          q(zp, H(j({ ...o(l), ...d.$attrs })), {\n            default: y(() => [\n              _(d.$slots, \"default\")\n            ]),\n            _: 3\n          }, 16)\n        ]),\n        _: 3\n      }, 512)) : !((p = i.value) != null && p.present) && r.value ? (b(), ve(\"div\", Hp, [\n        (b(), S(jt, { to: r.value }, [\n          q(Kp, { context: o(s) }, {\n            default: y(() => [\n              _(d.$slots, \"default\")\n            ]),\n            _: 3\n          }, 8, [\"context\"])\n        ], 8, [\"to\"]))\n      ])) : ce(\"\", !0);\n    };\n  }\n}), Fy = /* @__PURE__ */ x({\n  __name: \"SelectArrow\",\n  props: {\n    width: { default: 10 },\n    height: { default: 5 },\n    asChild: { type: Boolean },\n    as: { default: \"svg\" }\n  },\n  setup(a) {\n    const t = a, e = bt(), n = Ct();\n    return (l, s) => o(e).open.value && o(n).position === \"popper\" ? (b(), S(o(Yt), H(k({ key: 0 }, t)), {\n      default: y(() => [\n        _(l.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16)) : ce(\"\", !0);\n  }\n}), Ly = /* @__PURE__ */ x({\n  __name: \"SelectSeparator\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(O), k({ \"aria-hidden\": \"true\" }, t), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), [Bs, Wp] = Q(\"SelectItem\"), Ny = /* @__PURE__ */ x({\n  __name: \"SelectItem\",\n  props: {\n    value: {},\n    disabled: { type: Boolean },\n    textValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { disabled: e } = ae(t), n = bt(), l = Ct(aa), { forwardRef: s, currentElement: r } = R(), i = $(() => {\n      var m;\n      return ((m = n.modelValue) == null ? void 0 : m.value) === t.value;\n    }), u = I(!1), d = I(t.textValue ?? \"\"), c = he(void 0, \"radix-vue-select-item-text\");\n    async function p(m) {\n      await oe(), !(m != null && m.defaultPrevented) && (e.value || (n.onValueChange(t.value), n.onOpenChange(!1)));\n    }\n    async function f(m) {\n      var w;\n      await oe(), !m.defaultPrevented && (e.value ? (w = l.onItemLeave) == null || w.call(l) : m.currentTarget.focus({ preventScroll: !0 }));\n    }\n    async function v(m) {\n      var w;\n      await oe(), !m.defaultPrevented && m.currentTarget === document.activeElement && ((w = l.onItemLeave) == null || w.call(l));\n    }\n    async function g(m) {\n      var C;\n      await oe(), !(m.defaultPrevented || ((C = l.searchRef) == null ? void 0 : C.value) !== \"\" && m.key === \" \") && (Mp.includes(m.key) && p(), m.key === \" \" && m.preventDefault());\n    }\n    if (t.value === \"\")\n      throw new Error(\n        \"A <SelectItem /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.\"\n      );\n    return le(() => {\n      r.value && l.itemRefCallback(\n        r.value,\n        t.value,\n        t.disabled\n      );\n    }), Wp({\n      value: t.value,\n      disabled: e,\n      textId: c,\n      isSelected: i,\n      onItemTextChange: (m) => {\n        d.value = ((d.value || (m == null ? void 0 : m.textContent)) ?? \"\").trim();\n      }\n    }), (m, w) => (b(), S(o(O), {\n      ref: o(s),\n      role: \"option\",\n      \"data-radix-vue-collection-item\": \"\",\n      \"aria-labelledby\": o(c),\n      \"data-highlighted\": u.value ? \"\" : void 0,\n      \"aria-selected\": i.value,\n      \"data-state\": i.value ? \"checked\" : \"unchecked\",\n      \"aria-disabled\": o(e) || void 0,\n      \"data-disabled\": o(e) ? \"\" : void 0,\n      tabindex: o(e) ? void 0 : -1,\n      as: m.as,\n      \"as-child\": m.asChild,\n      onFocus: w[0] || (w[0] = (C) => u.value = !0),\n      onBlur: w[1] || (w[1] = (C) => u.value = !1),\n      onPointerup: p,\n      onPointerdown: w[2] || (w[2] = (C) => {\n        C.currentTarget.focus({ preventScroll: !0 });\n      }),\n      onTouchend: w[3] || (w[3] = ue(() => {\n      }, [\"prevent\", \"stop\"])),\n      onPointermove: f,\n      onPointerleave: v,\n      onKeydown: g\n    }, {\n      default: y(() => [\n        _(m.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"aria-labelledby\", \"data-highlighted\", \"aria-selected\", \"data-state\", \"aria-disabled\", \"data-disabled\", \"tabindex\", \"as\", \"as-child\"]));\n  }\n}), zy = /* @__PURE__ */ x({\n  __name: \"SelectItemIndicator\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = a, e = Bs();\n    return (n, l) => o(e).isSelected.value ? (b(), S(o(O), k({\n      key: 0,\n      \"aria-hidden\": \"true\"\n    }, t), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16)) : ce(\"\", !0);\n  }\n}), [jp, Up] = Q(\"SelectGroup\"), Ky = /* @__PURE__ */ x({\n  __name: \"SelectGroup\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = he(void 0, \"radix-vue-select-group\");\n    return Up({ id: e }), (n, l) => (b(), S(o(O), k({ role: \"group\" }, t, { \"aria-labelledby\": o(e) }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"aria-labelledby\"]));\n  }\n}), Hy = /* @__PURE__ */ x({\n  __name: \"SelectLabel\",\n  props: {\n    for: {},\n    asChild: { type: Boolean },\n    as: { default: \"div\" }\n  },\n  setup(a) {\n    const t = a, e = jp({ id: \"\" });\n    return (n, l) => (b(), S(o(O), k(t, {\n      id: o(e).id\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"id\"]));\n  }\n}), Wy = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"SelectItemText\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = a, e = bt(), n = Ct(aa), l = Ap(), s = Bs(), { forwardRef: r, currentElement: i } = R(), u = $(() => {\n      var d;\n      return pt(\"option\", {\n        key: s.value,\n        value: s.value,\n        disabled: s.disabled.value,\n        textContent: (d = i.value) == null ? void 0 : d.textContent\n      });\n    });\n    return le(() => {\n      i.value && (s.onItemTextChange(i.value), n.itemTextRefCallback(\n        i.value,\n        s.value,\n        s.disabled.value\n      ), l.onNativeOptionAdd(u.value));\n    }), Vn(() => {\n      l.onNativeOptionRemove(u.value);\n    }), (d, c) => (b(), ve(we, null, [\n      q(o(O), k({\n        id: o(s).textId,\n        ref: o(r)\n      }, { ...t, ...d.$attrs }), {\n        default: y(() => [\n          _(d.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16, [\"id\"]),\n      o(s).isSelected.value && o(e).valueElement.value && !o(e).valueElementHasChildren.value ? (b(), S(jt, {\n        key: 0,\n        to: o(e).valueElement.value\n      }, [\n        _(d.$slots, \"default\")\n      ], 8, [\"to\"])) : ce(\"\", !0)\n    ], 64));\n  }\n}), jy = /* @__PURE__ */ x({\n  __name: \"SelectViewport\",\n  props: {\n    nonce: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { nonce: e } = ae(t), n = Xa(e), l = Ct(aa), s = l.position === \"item-aligned\" ? $o() : void 0, { forwardRef: r, currentElement: i } = R();\n    le(() => {\n      l == null || l.onViewportChange(i.value);\n    });\n    const u = I(0);\n    function d(c) {\n      const p = c.currentTarget, { shouldExpandOnScrollRef: f, contentWrapper: v } = s ?? {};\n      if (f != null && f.value && (v != null && v.value)) {\n        const g = Math.abs(u.value - p.scrollTop);\n        if (g > 0) {\n          const m = window.innerHeight - at * 2, w = Number.parseFloat(\n            v.value.style.minHeight\n          ), C = Number.parseFloat(v.value.style.height), D = Math.max(w, C);\n          if (D < m) {\n            const h = D + g, E = Math.min(m, h), P = h - E;\n            v.value.style.height = `${E}px`, v.value.style.bottom === \"0px\" && (p.scrollTop = P > 0 ? P : 0, v.value.style.justifyContent = \"flex-end\");\n          }\n        }\n      }\n      u.value = p.scrollTop;\n    }\n    return (c, p) => (b(), ve(we, null, [\n      q(o(O), k({\n        ref: o(r),\n        \"data-radix-select-viewport\": \"\",\n        role: \"presentation\"\n      }, { ...c.$attrs, ...t }, {\n        style: {\n          // we use position: 'relative' here on the `viewport` so that when we call\n          // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n          // (independent of the scrollUpButton).\n          position: \"relative\",\n          flex: 1,\n          overflow: \"auto\"\n        },\n        onScroll: d\n      }), {\n        default: y(() => [\n          _(c.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16),\n      q(o(O), {\n        as: \"style\",\n        nonce: o(n)\n      }, {\n        default: y(() => [\n          me(\" /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-radix-select-viewport] { scrollbar-width:none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } [data-radix-select-viewport]::-webkit-scrollbar { display: none; } \")\n        ]),\n        _: 1\n      }, 8, [\"nonce\"])\n    ], 64));\n  }\n}), Is = /* @__PURE__ */ x({\n  __name: \"SelectScrollButtonImpl\",\n  emits: [\"autoScroll\"],\n  setup(a, { emit: t }) {\n    const e = t, { injectCollection: n } = Me(), l = n(), s = Ct(aa), r = I(null);\n    function i() {\n      r.value !== null && (window.clearInterval(r.value), r.value = null);\n    }\n    ge(() => {\n      const c = l.value.find(\n        (p) => p === document.activeElement\n      );\n      c == null || c.scrollIntoView({ block: \"nearest\" });\n    });\n    function u() {\n      r.value === null && (r.value = window.setInterval(() => {\n        e(\"autoScroll\");\n      }, 50));\n    }\n    function d() {\n      var c;\n      (c = s.onItemLeave) == null || c.call(s), r.value === null && (r.value = window.setInterval(() => {\n        e(\"autoScroll\");\n      }, 50));\n    }\n    return Vn(() => i()), (c, p) => {\n      var f;\n      return b(), S(o(O), k({\n        \"aria-hidden\": \"true\",\n        style: {\n          flexShrink: 0\n        }\n      }, (f = c.$parent) == null ? void 0 : f.$props, {\n        onPointerdown: u,\n        onPointermove: d,\n        onPointerleave: p[0] || (p[0] = () => {\n          i();\n        })\n      }), {\n        default: y(() => [\n          _(c.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16);\n    };\n  }\n}), Uy = /* @__PURE__ */ x({\n  __name: \"SelectScrollUpButton\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = Ct(aa), e = t.position === \"item-aligned\" ? $o() : void 0, { forwardRef: n, currentElement: l } = R(), s = I(!1);\n    return ge((r) => {\n      var i, u;\n      if ((i = t.viewport) != null && i.value && ((u = t.isPositioned) != null && u.value)) {\n        let d = function() {\n          s.value = c.scrollTop > 0;\n        };\n        const c = t.viewport.value;\n        d(), c.addEventListener(\"scroll\", d), r(() => c.removeEventListener(\"scroll\", d));\n      }\n    }), te(l, () => {\n      l.value && (e == null || e.onScrollButtonChange(l.value));\n    }), (r, i) => s.value ? (b(), S(Is, {\n      key: 0,\n      ref: o(n),\n      onAutoScroll: i[0] || (i[0] = () => {\n        const { viewport: u, selectedItem: d } = o(t);\n        u != null && u.value && (d != null && d.value) && (u.value.scrollTop = u.value.scrollTop - d.value.offsetHeight);\n      })\n    }, {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 512)) : ce(\"\", !0);\n  }\n}), Gy = /* @__PURE__ */ x({\n  __name: \"SelectScrollDownButton\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = Ct(aa), e = t.position === \"item-aligned\" ? $o() : void 0, { forwardRef: n, currentElement: l } = R(), s = I(!1);\n    return ge((r) => {\n      var i, u;\n      if ((i = t.viewport) != null && i.value && ((u = t.isPositioned) != null && u.value)) {\n        let d = function() {\n          const p = c.scrollHeight - c.clientHeight;\n          s.value = Math.ceil(c.scrollTop) < p;\n        };\n        const c = t.viewport.value;\n        d(), c.addEventListener(\"scroll\", d), r(() => c.removeEventListener(\"scroll\", d));\n      }\n    }), te(l, () => {\n      l.value && (e == null || e.onScrollButtonChange(l.value));\n    }), (r, i) => s.value ? (b(), S(Is, {\n      key: 0,\n      ref: o(n),\n      onAutoScroll: i[0] || (i[0] = () => {\n        const { viewport: u, selectedItem: d } = o(t);\n        u != null && u.value && (d != null && d.value) && (u.value.scrollTop = u.value.scrollTop + d.value.offsetHeight);\n      })\n    }, {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 512)) : ce(\"\", !0);\n  }\n}), qy = /* @__PURE__ */ x({\n  __name: \"SelectValue\",\n  props: {\n    placeholder: { default: \"\" },\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const { forwardRef: t, currentElement: e } = R(), n = bt(), l = Wa();\n    return vl(() => {\n      var r;\n      const s = !!Ua((r = l == null ? void 0 : l.default) == null ? void 0 : r.call(l)).length;\n      n.onValueElementHasChildrenChange(s);\n    }), le(() => {\n      n.valueElement = e;\n    }), (s, r) => (b(), S(o(O), {\n      ref: o(t),\n      as: s.as,\n      \"as-child\": s.asChild,\n      style: { pointerEvents: \"none\" }\n    }, {\n      default: y(() => {\n        var i;\n        return [\n          o($s)((i = o(n).modelValue) == null ? void 0 : i.value) ? (b(), ve(we, { key: 0 }, [\n            me(De(s.placeholder), 1)\n          ], 64)) : _(s.$slots, \"default\", { key: 1 })\n        ];\n      }),\n      _: 3\n    }, 8, [\"as\", \"as-child\"]));\n  }\n}), Yy = /* @__PURE__ */ x({\n  __name: \"SelectIcon\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    return (t, e) => (b(), S(o(O), {\n      \"aria-hidden\": \"true\",\n      as: t.as,\n      \"as-child\": t.asChild\n    }, {\n      default: y(() => [\n        _(t.$slots, \"default\", {}, () => [\n          me(\"▼\")\n        ])\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\"]));\n  }\n}), Ts = /* @__PURE__ */ x({\n  __name: \"BaseSeparator\",\n  props: {\n    orientation: { default: \"horizontal\" },\n    decorative: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = [\"horizontal\", \"vertical\"];\n    function n(i) {\n      return e.includes(i);\n    }\n    const l = $(\n      () => n(t.orientation) ? t.orientation : \"horizontal\"\n    ), s = $(\n      () => l.value === \"vertical\" ? t.orientation : void 0\n    ), r = $(\n      () => t.decorative ? { role: \"none\" } : { \"aria-orientation\": s.value, role: \"separator\" }\n    );\n    return (i, u) => (b(), S(o(O), k({\n      as: i.as,\n      \"as-child\": i.asChild,\n      \"data-orientation\": l.value\n    }, r.value), {\n      default: y(() => [\n        _(i.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"as\", \"as-child\", \"data-orientation\"]));\n  }\n}), Gp = /* @__PURE__ */ x({\n  __name: \"Separator\",\n  props: {\n    orientation: { default: \"horizontal\" },\n    decorative: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(Ts, H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n});\nfunction qp(a = [], t, e) {\n  const n = [...a];\n  return n[e] = t, n.sort((l, s) => l - s);\n}\nfunction Rs(a, t, e) {\n  const s = 100 / (e - t) * (a - t);\n  return Ht(s, 0, 100);\n}\nfunction Yp(a, t) {\n  return t > 2 ? `Value ${a + 1} of ${t}` : t === 2 ? [\"Minimum\", \"Maximum\"][a] : void 0;\n}\nfunction Xp(a, t) {\n  if (a.length === 1)\n    return 0;\n  const e = a.map((l) => Math.abs(l - t)), n = Math.min(...e);\n  return e.indexOf(n);\n}\nfunction Zp(a, t, e) {\n  const n = a / 2, s = Bo([0, 50], [0, n]);\n  return (n - s(t) * e) * e;\n}\nfunction Jp(a) {\n  return a.slice(0, -1).map((t, e) => a[e + 1] - t);\n}\nfunction Qp(a, t) {\n  if (t > 0) {\n    const e = Jp(a);\n    return Math.min(...e) >= t;\n  }\n  return !0;\n}\nfunction Bo(a, t) {\n  return (e) => {\n    if (a[0] === a[1] || t[0] === t[1])\n      return t[0];\n    const n = (t[1] - t[0]) / (a[1] - a[0]);\n    return t[0] + n * (e - a[0]);\n  };\n}\nfunction ef(a) {\n  return (String(a).split(\".\")[1] || \"\").length;\n}\nfunction tf(a, t) {\n  const e = 10 ** t;\n  return Math.round(a * e) / e;\n}\nconst As = [\"PageUp\", \"PageDown\"], Os = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"], ks = {\n  \"from-left\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n  \"from-right\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowRight\"],\n  \"from-bottom\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n  \"from-top\": [\"Home\", \"PageDown\", \"ArrowUp\", \"ArrowLeft\"]\n}, [Ms, Vs] = Q([\"SliderVertical\", \"SliderHorizontal\"]), Fs = /* @__PURE__ */ x({\n  __name: \"SliderImpl\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  emits: [\"slideStart\", \"slideMove\", \"slideEnd\", \"homeKeyDown\", \"endKeyDown\", \"stepKeyDown\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = sn();\n    return (s, r) => (b(), S(o(O), k({ \"data-slider-impl\": \"\" }, e, {\n      onKeydown: r[0] || (r[0] = (i) => {\n        i.key === \"Home\" ? (n(\"homeKeyDown\", i), i.preventDefault()) : i.key === \"End\" ? (n(\"endKeyDown\", i), i.preventDefault()) : o(As).concat(o(Os)).includes(i.key) && (n(\"stepKeyDown\", i), i.preventDefault());\n      }),\n      onPointerdown: r[1] || (r[1] = (i) => {\n        const u = i.target;\n        u.setPointerCapture(i.pointerId), i.preventDefault(), o(l).thumbElements.value.includes(u) ? u.focus() : n(\"slideStart\", i);\n      }),\n      onPointermove: r[2] || (r[2] = (i) => {\n        i.target.hasPointerCapture(i.pointerId) && n(\"slideMove\", i);\n      }),\n      onPointerup: r[3] || (r[3] = (i) => {\n        const u = i.target;\n        u.hasPointerCapture(i.pointerId) && (u.releasePointerCapture(i.pointerId), n(\"slideEnd\", i));\n      })\n    }), {\n      default: y(() => [\n        _(s.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), af = /* @__PURE__ */ x({\n  __name: \"SliderHorizontal\",\n  props: {\n    dir: {},\n    min: {},\n    max: {},\n    inverted: { type: Boolean }\n  },\n  emits: [\"slideEnd\", \"slideStart\", \"slideMove\", \"homeKeyDown\", \"endKeyDown\", \"stepKeyDown\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { max: l, min: s, dir: r, inverted: i } = ae(e), { forwardRef: u, currentElement: d } = R(), c = I(), p = $(() => (r == null ? void 0 : r.value) === \"ltr\" && !i.value || (r == null ? void 0 : r.value) !== \"ltr\" && i.value);\n    function f(v) {\n      const g = c.value || d.value.getBoundingClientRect(), m = [0, g.width], w = p.value ? [s.value, l.value] : [l.value, s.value], C = Bo(m, w);\n      return c.value = g, C(v - g.left);\n    }\n    return Vs({\n      startEdge: p.value ? \"left\" : \"right\",\n      endEdge: p.value ? \"right\" : \"left\",\n      direction: p.value ? 1 : -1,\n      size: \"width\"\n    }), (v, g) => (b(), S(Fs, {\n      ref: o(u),\n      dir: o(r),\n      \"data-orientation\": \"horizontal\",\n      style: {\n        \"--radix-slider-thumb-transform\": \"translateX(-50%)\"\n      },\n      onSlideStart: g[0] || (g[0] = (m) => {\n        const w = f(m.clientX);\n        n(\"slideStart\", w);\n      }),\n      onSlideMove: g[1] || (g[1] = (m) => {\n        const w = f(m.clientX);\n        n(\"slideMove\", w);\n      }),\n      onSlideEnd: g[2] || (g[2] = () => {\n        c.value = void 0, n(\"slideEnd\");\n      }),\n      onStepKeyDown: g[3] || (g[3] = (m) => {\n        const w = p.value ? \"from-left\" : \"from-right\", C = o(ks)[w].includes(m.key);\n        n(\"stepKeyDown\", m, C ? -1 : 1);\n      }),\n      onEndKeyDown: g[4] || (g[4] = (m) => n(\"endKeyDown\", m)),\n      onHomeKeyDown: g[5] || (g[5] = (m) => n(\"homeKeyDown\", m))\n    }, {\n      default: y(() => [\n        _(v.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"dir\"]));\n  }\n}), nf = /* @__PURE__ */ x({\n  __name: \"SliderVertical\",\n  props: {\n    min: {},\n    max: {},\n    inverted: { type: Boolean }\n  },\n  emits: [\"slideEnd\", \"slideStart\", \"slideMove\", \"homeKeyDown\", \"endKeyDown\", \"stepKeyDown\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { max: l, min: s, inverted: r } = ae(e), { forwardRef: i, currentElement: u } = R(), d = I(), c = $(() => !r.value);\n    function p(f) {\n      const v = d.value || u.value.getBoundingClientRect(), g = [0, v.height], m = c.value ? [l.value, s.value] : [s.value, l.value], w = Bo(g, m);\n      return d.value = v, w(f - v.top);\n    }\n    return Vs({\n      startEdge: c.value ? \"bottom\" : \"top\",\n      endEdge: c.value ? \"top\" : \"bottom\",\n      size: \"height\",\n      direction: c.value ? 1 : -1\n    }), (f, v) => (b(), S(Fs, {\n      ref: o(i),\n      \"data-orientation\": \"vertical\",\n      style: {\n        \"--radix-slider-thumb-transform\": \"translateY(50%)\"\n      },\n      onSlideStart: v[0] || (v[0] = (g) => {\n        const m = p(g.clientY);\n        n(\"slideStart\", m);\n      }),\n      onSlideMove: v[1] || (v[1] = (g) => {\n        const m = p(g.clientY);\n        n(\"slideMove\", m);\n      }),\n      onSlideEnd: v[2] || (v[2] = () => {\n        d.value = void 0, n(\"slideEnd\");\n      }),\n      onStepKeyDown: v[3] || (v[3] = (g) => {\n        const m = c.value ? \"from-bottom\" : \"from-top\", w = o(ks)[m].includes(g.key);\n        n(\"stepKeyDown\", g, w ? -1 : 1);\n      }),\n      onEndKeyDown: v[4] || (v[4] = (g) => n(\"endKeyDown\", g)),\n      onHomeKeyDown: v[5] || (v[5] = (g) => n(\"homeKeyDown\", g))\n    }, {\n      default: y(() => [\n        _(f.$slots, \"default\")\n      ]),\n      _: 3\n    }, 512));\n  }\n}), of = [\"value\", \"name\", \"disabled\", \"step\"], [sn, lf] = Q(\"SliderRoot\"), Xy = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"SliderRoot\",\n  props: {\n    name: {},\n    defaultValue: { default: () => [0] },\n    modelValue: {},\n    disabled: { type: Boolean, default: !1 },\n    orientation: { default: \"horizontal\" },\n    dir: {},\n    inverted: { type: Boolean, default: !1 },\n    min: { default: 0 },\n    max: { default: 100 },\n    step: { default: 1 },\n    minStepsBetweenThumbs: { default: 0 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\", \"valueCommit\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { min: l, max: s, step: r, minStepsBetweenThumbs: i, orientation: u, disabled: d, dir: c } = ae(e), p = be(c), { forwardRef: f, currentElement: v } = R(), g = Je(v);\n    ba();\n    const m = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue,\n      passive: e.modelValue === void 0\n    }), w = I(0), C = I(m.value);\n    function D(T) {\n      const M = Xp(m.value, T);\n      P(T, M);\n    }\n    function h(T) {\n      P(T, w.value);\n    }\n    function E() {\n      const T = C.value[w.value];\n      m.value[w.value] !== T && n(\"valueCommit\", wr(m.value));\n    }\n    function P(T, M, { commit: V } = { commit: !1 }) {\n      var ee;\n      const A = ef(r.value), F = tf(Math.round((T - l.value) / r.value) * r.value + l.value, A), U = Ht(F, l.value, s.value), W = qp(m.value, U, M);\n      if (Qp(W, i.value * r.value)) {\n        w.value = W.indexOf(U);\n        const L = String(W) !== String(m.value);\n        L && V && n(\"valueCommit\", W), L && ((ee = B.value[w.value]) == null || ee.focus(), m.value = W);\n      }\n    }\n    const B = I([]);\n    return lf({\n      modelValue: m,\n      valueIndexToChangeRef: w,\n      thumbElements: B,\n      orientation: u,\n      min: l,\n      max: s,\n      disabled: d\n    }), (T, M) => (b(), ve(we, null, [\n      q(o(Ca), null, {\n        default: y(() => [\n          (b(), S(Ge(o(u) === \"horizontal\" ? af : nf), k(T.$attrs, {\n            ref: o(f),\n            \"as-child\": T.asChild,\n            as: T.as,\n            min: o(l),\n            max: o(s),\n            dir: o(p),\n            inverted: T.inverted,\n            \"aria-disabled\": o(d),\n            \"data-disabled\": o(d) ? \"\" : void 0,\n            onPointerdown: M[0] || (M[0] = () => {\n              o(d) || (C.value = o(m));\n            }),\n            onSlideStart: M[1] || (M[1] = (V) => !o(d) && D(V)),\n            onSlideMove: M[2] || (M[2] = (V) => !o(d) && h(V)),\n            onSlideEnd: M[3] || (M[3] = (V) => !o(d) && E()),\n            onHomeKeyDown: M[4] || (M[4] = (V) => !o(d) && P(o(l), 0, { commit: !0 })),\n            onEndKeyDown: M[5] || (M[5] = (V) => !o(d) && P(o(s), o(m).length - 1, { commit: !0 })),\n            onStepKeyDown: M[6] || (M[6] = (V, A) => {\n              if (!o(d)) {\n                const W = o(As).includes(V.key) || V.shiftKey && o(Os).includes(V.key) ? 10 : 1, ee = w.value, L = o(m)[ee], G = o(r) * W * A;\n                P(L + G, ee, { commit: !0 });\n              }\n            })\n          }), {\n            default: y(() => [\n              _(T.$slots, \"default\", { modelValue: o(m) })\n            ]),\n            _: 3\n          }, 16, [\"as-child\", \"as\", \"min\", \"max\", \"dir\", \"inverted\", \"aria-disabled\", \"data-disabled\"]))\n        ]),\n        _: 3\n      }),\n      o(g) ? (b(!0), ve(we, { key: 0 }, va(o(m), (V, A) => (b(), ve(\"input\", {\n        key: A,\n        value: V,\n        type: \"number\",\n        style: { display: \"none\" },\n        name: T.name ? T.name + (o(m).length > 1 ? \"[]\" : \"\") : void 0,\n        disabled: o(d),\n        step: o(r)\n      }, null, 8, of))), 128)) : ce(\"\", !0)\n    ], 64));\n  }\n}), sf = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"SliderThumbImpl\",\n  props: {\n    index: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = sn(), n = Ms(), { forwardRef: l, currentElement: s } = R(), r = $(() => {\n      var v, g;\n      return (g = (v = e.modelValue) == null ? void 0 : v.value) == null ? void 0 : g[t.index];\n    }), i = $(() => r.value === void 0 ? 0 : Rs(r.value, e.min.value ?? 0, e.max.value ?? 100)), u = $(() => {\n      var v, g;\n      return Yp(t.index, ((g = (v = e.modelValue) == null ? void 0 : v.value) == null ? void 0 : g.length) ?? 0);\n    }), d = kl(s), c = $(() => d[n.size].value), p = $(() => c.value ? Zp(c.value, i.value, n.direction) : 0), f = ja();\n    return le(() => {\n      e.thumbElements.value.push(s.value);\n    }), Be(() => {\n      const v = e.thumbElements.value.findIndex((g) => g === s.value) ?? -1;\n      e.thumbElements.value.splice(v, 1);\n    }), (v, g) => (b(), S(o(Zt), null, {\n      default: y(() => [\n        q(o(O), k(v.$attrs, {\n          ref: o(l),\n          role: \"slider\",\n          \"data-radix-vue-collection-item\": \"\",\n          tabindex: o(e).disabled.value ? void 0 : 0,\n          \"aria-label\": v.$attrs[\"aria-label\"] || u.value,\n          \"data-disabled\": o(e).disabled.value ? \"\" : void 0,\n          \"data-orientation\": o(e).orientation.value,\n          \"aria-valuenow\": r.value,\n          \"aria-valuemin\": o(e).min.value,\n          \"aria-valuemax\": o(e).max.value,\n          \"aria-orientation\": o(e).orientation.value,\n          \"as-child\": v.asChild,\n          as: v.as,\n          style: {\n            transform: \"var(--radix-slider-thumb-transform)\",\n            position: \"absolute\",\n            [o(n).startEdge]: `calc(${i.value}% + ${p.value}px)`,\n            /**\n             * There will be no value on initial render while we work out the index so we hide thumbs\n             * without a value, otherwise SSR will render them in the wrong position before they\n             * snap into the correct position during hydration which would be visually jarring for\n             * slower connections.\n             */\n            display: !o(f) && r.value === void 0 ? \"none\" : void 0\n          },\n          onFocus: g[0] || (g[0] = () => {\n            o(e).valueIndexToChangeRef.value = v.index;\n          })\n        }), {\n          default: y(() => [\n            _(v.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"tabindex\", \"aria-label\", \"data-disabled\", \"data-orientation\", \"aria-valuenow\", \"aria-valuemin\", \"aria-valuemax\", \"aria-orientation\", \"as-child\", \"as\", \"style\"])\n      ]),\n      _: 3\n    }));\n  }\n}), Zy = /* @__PURE__ */ x({\n  __name: \"SliderThumb\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { getItems: e } = Jt(), { forwardRef: n, currentElement: l } = R(), s = $(() => l.value ? e().findIndex((r) => r.ref === l.value) : -1);\n    return (r, i) => (b(), S(sf, k({ ref: o(n) }, t, { index: s.value }), {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"index\"]));\n  }\n}), Jy = /* @__PURE__ */ x({\n  __name: \"SliderTrack\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = sn();\n    return R(), (e, n) => (b(), S(o(O), {\n      \"as-child\": e.asChild,\n      as: e.as,\n      \"data-disabled\": o(t).disabled.value ? \"\" : void 0,\n      \"data-orientation\": o(t).orientation.value\n    }, {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as-child\", \"as\", \"data-disabled\", \"data-orientation\"]));\n  }\n}), Qy = /* @__PURE__ */ x({\n  __name: \"SliderRange\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = sn(), e = Ms();\n    R();\n    const n = $(() => {\n      var r, i;\n      return (i = (r = t.modelValue) == null ? void 0 : r.value) == null ? void 0 : i.map(\n        (u) => Rs(u, t.min.value, t.max.value)\n      );\n    }), l = $(() => t.modelValue.value.length > 1 ? Math.min(...n.value) : 0), s = $(() => 100 - Math.max(...n.value));\n    return (r, i) => (b(), S(o(O), {\n      \"data-disabled\": o(t).disabled.value ? \"\" : void 0,\n      \"data-orientation\": o(t).orientation.value,\n      \"as-child\": r.asChild,\n      as: r.as,\n      style: ke({\n        [o(e).startEdge]: `${l.value}%`,\n        [o(e).endEdge]: `${s.value}%`\n      })\n    }, {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"data-disabled\", \"data-orientation\", \"as-child\", \"as\", \"style\"]));\n  }\n});\nlet An = null, St = null;\nfunction rf(a, t) {\n  if (t) {\n    const e = (t & js) !== 0, n = (t & Us) !== 0, l = (t & Gs) !== 0, s = (t & qs) !== 0;\n    if (e)\n      return l ? \"se-resize\" : s ? \"ne-resize\" : \"e-resize\";\n    if (n)\n      return l ? \"sw-resize\" : s ? \"nw-resize\" : \"w-resize\";\n    if (l)\n      return \"s-resize\";\n    if (s)\n      return \"n-resize\";\n  }\n  switch (a) {\n    case \"horizontal\":\n      return \"ew-resize\";\n    case \"intersection\":\n      return \"move\";\n    case \"vertical\":\n      return \"ns-resize\";\n  }\n}\nfunction Ls() {\n  St !== null && (document.head.removeChild(St), An = null, St = null);\n}\nfunction Sn(a, t) {\n  const e = rf(a, t);\n  An !== e && (An = e, St === null && (St = document.createElement(\"style\"), document.head.appendChild(St)), St.innerHTML = `*{cursor: ${e}!important;}`);\n}\nfunction uf({\n  defaultSize: a,\n  dragState: t,\n  layout: e,\n  panelData: n,\n  panelIndex: l,\n  precision: s = 3\n}) {\n  const r = e[l];\n  let i;\n  return r == null ? i = a !== void 0 ? a.toPrecision(s) : \"1\" : n.length === 1 ? i = \"1\" : i = r.toPrecision(s), {\n    flexBasis: 0,\n    flexGrow: i,\n    flexShrink: 1,\n    // Without this, Panel sizes may be unintentionally overridden by their content\n    overflow: \"hidden\",\n    // Disable pointer events inside of a panel during resize\n    // This avoid edge cases like nested iframes\n    pointerEvents: t !== null ? \"none\" : void 0\n  };\n}\nfunction Ns(a) {\n  return a.type === \"keydown\";\n}\nfunction zs(a) {\n  return a.type.startsWith(\"mouse\");\n}\nfunction Ks(a) {\n  return a.type.startsWith(\"touch\");\n}\nfunction rn(a) {\n  if (zs(a))\n    return {\n      x: a.clientX,\n      y: a.clientY\n    };\n  if (Ks(a)) {\n    const t = a.touches[0];\n    if (t && t.clientX && t.clientY)\n      return {\n        x: t.clientX,\n        y: t.clientY\n      };\n  }\n  return {\n    x: Number.POSITIVE_INFINITY,\n    y: Number.POSITIVE_INFINITY\n  };\n}\nfunction Hs(a, t) {\n  const e = a === \"horizontal\", { x: n, y: l } = rn(t);\n  return e ? n : l;\n}\nfunction df(a, t, e) {\n  return a.x < t.x + t.width && a.x + a.width > t.x && a.y < t.y + t.height && a.y + a.height > t.y;\n}\nfunction fe(a, t = \"Assertion failed!\") {\n  if (!a)\n    throw console.error(t), new Error(t);\n}\nfunction cf(a, t) {\n  if (a === t)\n    throw new Error(\"Cannot compare node with itself\");\n  const e = {\n    a: tl(a),\n    b: tl(t)\n  };\n  let n;\n  for (; e.a.at(-1) === e.b.at(-1); )\n    a = e.a.pop(), t = e.b.pop(), n = a;\n  fe(n);\n  const l = {\n    a: el(Qo(e.a)),\n    b: el(Qo(e.b))\n  };\n  if (l.a === l.b) {\n    const s = n.childNodes, r = {\n      a: e.a.at(-1),\n      b: e.b.at(-1)\n    };\n    let i = s.length;\n    for (; i--; ) {\n      const u = s[i];\n      if (u === r.a)\n        return 1;\n      if (u === r.b)\n        return -1;\n    }\n  }\n  return Math.sign(l.a - l.b);\n}\nconst pf = /\\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\\b/;\nfunction ff(a) {\n  const t = getComputedStyle(Ws(a)).display;\n  return t === \"flex\" || t === \"inline-flex\";\n}\nfunction vf(a) {\n  const t = getComputedStyle(a);\n  return !!(t.position === \"fixed\" || t.zIndex !== \"auto\" && (t.position !== \"static\" || ff(a)) || +t.opacity < 1 || \"transform\" in t && t.transform !== \"none\" || \"webkitTransform\" in t && t.webkitTransform !== \"none\" || \"mixBlendMode\" in t && t.mixBlendMode !== \"normal\" || \"filter\" in t && t.filter !== \"none\" || \"webkitFilter\" in t && t.webkitFilter !== \"none\" || \"isolation\" in t && t.isolation === \"isolate\" || pf.test(t.willChange) || t.webkitOverflowScrolling === \"touch\");\n}\nfunction Qo(a) {\n  let t = a.length;\n  for (; t--; ) {\n    const e = a[t];\n    if (fe(e), vf(e))\n      return e;\n  }\n  return null;\n}\nfunction el(a) {\n  return a && Number(getComputedStyle(a).zIndex) || 0;\n}\nfunction tl(a) {\n  const t = [];\n  for (; a; )\n    t.push(a), a = Ws(a);\n  return t;\n}\nfunction Ws(a) {\n  var t;\n  return a.parentNode instanceof DocumentFragment && ((t = a.parentNode) == null ? void 0 : t.host) || a.parentNode;\n}\nconst js = 1, Us = 2, Gs = 4, qs = 8;\nfunction mf() {\n  if (typeof matchMedia == \"function\")\n    return matchMedia(\"(pointer:coarse)\").matches ? \"coarse\" : \"fine\";\n}\nconst hf = mf() === \"coarse\", ft = [];\nlet un = !1;\nconst ct = /* @__PURE__ */ new Map(), dn = /* @__PURE__ */ new Map(), ca = /* @__PURE__ */ new Set();\nfunction yf(a, t, e, n, l) {\n  const { ownerDocument: s } = t, r = {\n    direction: e,\n    element: t,\n    hitAreaMargins: n,\n    setResizeHandlerState: l\n  }, i = ct.get(s) ?? 0;\n  return ct.set(s, i + 1), ca.add(r), za(), function() {\n    dn.delete(a), ca.delete(r);\n    const d = ct.get(s) ?? 1;\n    ct.set(s, d - 1), za(), Ls(), d === 1 && ct.delete(s);\n  };\n}\nfunction Ta(a) {\n  const { target: t } = a, { x: e, y: n } = rn(a);\n  un = !0, Io({ target: t, x: e, y: n }), za(), ft.length > 0 && (To(\"down\", a), a.preventDefault());\n}\nfunction it(a) {\n  const { x: t, y: e } = rn(a);\n  if (!un) {\n    const { target: n } = a;\n    Io({ target: n, x: t, y: e });\n  }\n  To(\"move\", a), Ys(), ft.length > 0 && a.preventDefault();\n}\nfunction ut(a) {\n  const { target: t } = a, { x: e, y: n } = rn(a);\n  dn.clear(), un = !1, ft.length > 0 && a.preventDefault(), To(\"up\", a), Io({ target: t, x: e, y: n }), Ys(), za();\n}\nfunction Io({\n  target: a,\n  x: t,\n  y: e\n}) {\n  ft.splice(0);\n  let n = null;\n  a instanceof HTMLElement && (n = a), ca.forEach((l) => {\n    const { element: s, hitAreaMargins: r } = l, i = s.getBoundingClientRect(), { bottom: u, left: d, right: c, top: p } = i, f = hf ? r.coarse : r.fine;\n    if (t >= d - f && t <= c + f && e >= p - f && e <= u + f) {\n      if (n !== null && s !== n && !s.contains(n) && !n.contains(s) && cf(n, s) > 0) {\n        let g = n, m = !1;\n        for (; g && !g.contains(s); ) {\n          if (df(\n            g.getBoundingClientRect(),\n            i\n          )) {\n            m = !0;\n            break;\n          }\n          g = g.parentElement;\n        }\n        if (m)\n          return;\n      }\n      ft.push(l);\n    }\n  });\n}\nfunction En(a, t) {\n  dn.set(a, t);\n}\nfunction Ys() {\n  let a = !1, t = !1;\n  ft.forEach((n) => {\n    const { direction: l } = n;\n    l.value === \"horizontal\" ? a = !0 : t = !0;\n  });\n  let e = 0;\n  dn.forEach((n) => {\n    e |= n;\n  }), a && t ? Sn(\"intersection\", e) : a ? Sn(\"horizontal\", e) : t ? Sn(\"vertical\", e) : Ls();\n}\nfunction za() {\n  ct.forEach((a, t) => {\n    const { body: e } = t;\n    e.removeEventListener(\"contextmenu\", ut), e.removeEventListener(\"mousedown\", Ta), e.removeEventListener(\"mouseleave\", it), e.removeEventListener(\"mousemove\", it), e.removeEventListener(\"touchmove\", it), e.removeEventListener(\"touchstart\", Ta);\n  }), window.removeEventListener(\"mouseup\", ut), window.removeEventListener(\"touchcancel\", ut), window.removeEventListener(\"touchend\", ut), ca.size > 0 && (un ? (ft.length > 0 && ct.forEach((a, t) => {\n    const { body: e } = t;\n    a > 0 && (e.addEventListener(\"contextmenu\", ut), e.addEventListener(\"mouseleave\", it), e.addEventListener(\"mousemove\", it), e.addEventListener(\"touchmove\", it, {\n      passive: !1\n    }));\n  }), window.addEventListener(\"mouseup\", ut), window.addEventListener(\"touchcancel\", ut), window.addEventListener(\"touchend\", ut)) : ct.forEach((a, t) => {\n    const { body: e } = t;\n    a > 0 && (e.addEventListener(\"mousedown\", Ta), e.addEventListener(\"mousemove\", it), e.addEventListener(\"touchmove\", it, {\n      passive: !1\n    }), e.addEventListener(\"touchstart\", Ta));\n  }));\n}\nfunction To(a, t) {\n  ca.forEach((e) => {\n    const { setResizeHandlerState: n } = e, l = ft.includes(e);\n    n(a, l, t);\n  });\n}\nconst Ro = 10;\nfunction pa(a, t, e = Ro) {\n  a = Number.parseFloat(a.toFixed(e)), t = Number.parseFloat(t.toFixed(e));\n  const n = a - t;\n  return n === 0 ? 0 : n > 0 ? 1 : -1;\n}\nfunction Ve(a, t, e) {\n  return pa(a, t, e) === 0;\n}\nfunction Nt({\n  panelConstraints: a,\n  panelIndex: t,\n  size: e\n}) {\n  const n = a[t];\n  fe(n != null);\n  const { collapsedSize: l = 0, collapsible: s, maxSize: r = 100, minSize: i = 0 } = n;\n  if (pa(e, i) < 0)\n    if (s) {\n      const u = (l + i) / 2;\n      pa(e, u) < 0 ? e = l : e = i;\n    } else\n      e = i;\n  return e = Math.min(r, e), e = Number.parseFloat(e.toFixed(Ro)), e;\n}\nfunction Ra(a, t) {\n  if (a.length !== t.length)\n    return !1;\n  for (let e = 0; e < a.length; e++)\n    if (a[e] !== t[e])\n      return !1;\n  return !0;\n}\nfunction la({\n  delta: a,\n  layout: t,\n  panelConstraints: e,\n  pivotIndices: n,\n  trigger: l\n}) {\n  if (Ve(a, 0))\n    return t;\n  const s = [...t], [r, i] = n;\n  fe(r != null), fe(i != null);\n  let u = 0;\n  if (l === \"keyboard\") {\n    {\n      const c = a < 0 ? i : r, p = e[c];\n      if (fe(p), p.collapsible) {\n        const f = t[c];\n        fe(f != null);\n        const v = e[c];\n        fe(v);\n        const { collapsedSize: g = 0, minSize: m = 0 } = v;\n        if (Ve(f, g)) {\n          const w = m - f;\n          pa(w, Math.abs(a)) > 0 && (a = a < 0 ? 0 - w : w);\n        }\n      }\n    }\n    {\n      const c = a < 0 ? r : i, p = e[c];\n      fe(p);\n      const { collapsible: f } = p;\n      if (f) {\n        const v = t[c];\n        fe(v != null);\n        const g = e[c];\n        fe(g);\n        const { collapsedSize: m = 0, minSize: w = 0 } = g;\n        if (Ve(v, w)) {\n          const C = v - m;\n          pa(C, Math.abs(a)) > 0 && (a = a < 0 ? 0 - C : C);\n        }\n      }\n    }\n  }\n  {\n    const c = a < 0 ? 1 : -1;\n    let p = a < 0 ? i : r, f = 0;\n    for (; ; ) {\n      const g = t[p];\n      fe(g != null);\n      const w = Nt({\n        panelConstraints: e,\n        panelIndex: p,\n        size: 100\n      }) - g;\n      if (f += w, p += c, p < 0 || p >= e.length)\n        break;\n    }\n    const v = Math.min(Math.abs(a), Math.abs(f));\n    a = a < 0 ? 0 - v : v;\n  }\n  {\n    let p = a < 0 ? r : i;\n    for (; p >= 0 && p < e.length; ) {\n      const f = Math.abs(a) - Math.abs(u), v = t[p];\n      fe(v != null);\n      const g = v - f, m = Nt({\n        panelConstraints: e,\n        panelIndex: p,\n        size: g\n      });\n      if (!Ve(v, m) && (u += v - m, s[p] = m, u.toPrecision(3).localeCompare(Math.abs(a).toPrecision(3), void 0, {\n        numeric: !0\n      }) >= 0))\n        break;\n      a < 0 ? p-- : p++;\n    }\n  }\n  if (Ve(u, 0))\n    return t;\n  {\n    const c = a < 0 ? i : r, p = t[c];\n    fe(p != null);\n    const f = p + u, v = Nt({\n      panelConstraints: e,\n      panelIndex: c,\n      size: f\n    });\n    if (s[c] = v, !Ve(v, f)) {\n      let g = f - v, w = a < 0 ? i : r;\n      for (; w >= 0 && w < e.length; ) {\n        const C = s[w];\n        fe(C != null);\n        const D = C + g, h = Nt({\n          panelConstraints: e,\n          panelIndex: w,\n          size: D\n        });\n        if (Ve(C, h) || (g -= h - C, s[w] = h), Ve(g, 0))\n          break;\n        a > 0 ? w-- : w++;\n      }\n    }\n  }\n  const d = s.reduce((c, p) => p + c, 0);\n  return Ve(d, 100) ? s : t;\n}\nfunction Xs(a, t = document) {\n  var n;\n  if (!ma)\n    return null;\n  if (t instanceof HTMLElement && ((n = t == null ? void 0 : t.dataset) == null ? void 0 : n.panelGroupId) === a)\n    return t;\n  const e = t.querySelector(\n    `[data-panel-group][data-panel-group-id=\"${a}\"]`\n  );\n  return e || null;\n}\nfunction cn(a, t = document) {\n  if (!ma)\n    return null;\n  const e = t.querySelector(`[data-panel-resize-handle-id=\"${a}\"]`);\n  return e || null;\n}\nfunction Zs(a, t, e = document) {\n  return ma ? fa(a, e).findIndex(\n    (s) => s.getAttribute(\"data-panel-resize-handle-id\") === t\n  ) ?? null : null;\n}\nfunction fa(a, t = document) {\n  return ma ? Array.from(\n    t.querySelectorAll(\n      `[data-panel-resize-handle-id][data-panel-group-id=\"${a}\"]`\n    )\n  ) : [];\n}\nfunction gf(a, t, e, n = document) {\n  var d, c;\n  const l = cn(t, n), s = fa(a, n), r = l ? s.indexOf(l) : -1, i = ((d = e[r]) == null ? void 0 : d.id) ?? null, u = ((c = e[r + 1]) == null ? void 0 : c.id) ?? null;\n  return [i, u];\n}\nfunction bf(a, t, e, n, l) {\n  const s = e === \"horizontal\", r = cn(t, l);\n  fe(r);\n  const i = r.getAttribute(\"data-panel-group-id\");\n  fe(i);\n  const { initialCursorPosition: u } = n, d = Hs(e, a), c = Xs(i, l);\n  fe(c);\n  const p = c.getBoundingClientRect(), f = s ? p.width : p.height;\n  return (d - u) / f * 100;\n}\nfunction Cf(a, t, e, n, l, s) {\n  if (Ns(a)) {\n    const r = e === \"horizontal\";\n    let i = 0;\n    a.shiftKey ? i = 100 : i = l ?? 10;\n    let u = 0;\n    switch (a.key) {\n      case \"ArrowDown\":\n        u = r ? 0 : i;\n        break;\n      case \"ArrowLeft\":\n        u = r ? -i : 0;\n        break;\n      case \"ArrowRight\":\n        u = r ? i : 0;\n        break;\n      case \"ArrowUp\":\n        u = r ? 0 : -i;\n        break;\n      case \"End\":\n        u = 100;\n        break;\n      case \"Home\":\n        u = -100;\n        break;\n    }\n    return u;\n  } else\n    return n == null ? 0 : bf(\n      a,\n      t,\n      e,\n      n,\n      s\n    );\n}\nfunction wf({\n  layout: a,\n  panelsArray: t,\n  pivotIndices: e\n}) {\n  let n = 0, l = 100, s = 0, r = 0;\n  const i = e[0];\n  fe(i != null), t.forEach((p, f) => {\n    const { constraints: v } = p, { maxSize: g = 100, minSize: m = 0 } = v;\n    f === i ? (n = m, l = g) : (s += m, r += g);\n  });\n  const u = Math.min(l, 100 - s), d = Math.max(n, 100 - r), c = a[i];\n  return {\n    valueMax: u,\n    valueMin: d,\n    valueNow: c\n  };\n}\nfunction _f({\n  panelDataArray: a\n}) {\n  const t = Array(a.length), e = a.map(\n    (s) => s.constraints\n  );\n  let n = 0, l = 100;\n  for (let s = 0; s < a.length; s++) {\n    const r = e[s];\n    fe(r);\n    const { defaultSize: i } = r;\n    i != null && (n++, t[s] = i, l -= i);\n  }\n  for (let s = 0; s < a.length; s++) {\n    const r = e[s];\n    fe(r);\n    const { defaultSize: i } = r;\n    if (i != null)\n      continue;\n    const u = a.length - n, d = l / u;\n    n++, t[s] = d, l -= d;\n  }\n  return t;\n}\nfunction oa(a, t, e) {\n  t.forEach((n, l) => {\n    const s = a[l];\n    fe(s);\n    const { callbacks: r, constraints: i, id: u } = s, { collapsedSize: d = 0, collapsible: c } = i, p = e[u];\n    if (p == null || n !== p) {\n      e[u] = n;\n      const { onCollapse: f, onExpand: v, onResize: g } = r;\n      g && g(n, p), c && (f || v) && (v && (p == null || p === d) && n !== d && v(), f && (p == null || p !== d) && n === d && f());\n    }\n  });\n}\nfunction xf(a, t = 10) {\n  let e = null;\n  return (...l) => {\n    e !== null && clearTimeout(e), e = setTimeout(() => {\n      a(...l);\n    }, t);\n  };\n}\nfunction Js(a, t, e) {\n  const n = Zs(\n    a,\n    t,\n    e\n  );\n  return n != null ? [n, n + 1] : [-1, -1];\n}\nfunction Sf({\n  layout: a,\n  panelConstraints: t\n}) {\n  const e = [...a], n = e.reduce(\n    (s, r) => s + r,\n    0\n  );\n  if (e.length !== t.length)\n    throw new Error(\n      `Invalid ${t.length} panel layout: ${e.map((s) => `${s}%`).join(\", \")}`\n    );\n  if (!Ve(n, 100)) {\n    console.warn(\n      `WARNING: Invalid layout total size: ${e.map((s) => `${s}%`).join(\", \")}. Layout normalization will be applied.`\n    );\n    for (let s = 0; s < t.length; s++) {\n      const r = e[s];\n      fe(r != null);\n      const i = 100 / n * r;\n      e[s] = i;\n    }\n  }\n  let l = 0;\n  for (let s = 0; s < t.length; s++) {\n    const r = e[s];\n    fe(r != null);\n    const i = Nt({\n      panelConstraints: t,\n      panelIndex: s,\n      size: r\n    });\n    r !== i && (l += r - i, e[s] = i);\n  }\n  if (!Ve(l, 0))\n    for (let s = 0; s < t.length; s++) {\n      const r = e[s];\n      fe(r != null);\n      const i = r + l, u = Nt({\n        panelConstraints: t,\n        panelIndex: s,\n        size: i\n      });\n      if (r !== u && (l -= u - r, e[s] = u, Ve(l, 0)))\n        break;\n    }\n  return e;\n}\nfunction al(a) {\n  try {\n    if (typeof localStorage < \"u\")\n      a.getItem = (t) => localStorage.getItem(t), a.setItem = (t, e) => {\n        localStorage.setItem(t, e);\n      };\n    else\n      throw new TypeError(\"localStorage not supported in this environment\");\n  } catch (t) {\n    console.error(t), a.getItem = () => null, a.setItem = () => {\n    };\n  }\n}\nfunction Qs(a) {\n  return `radix-vue:${a}`;\n}\nfunction er(a) {\n  return a.map((t) => {\n    const { constraints: e, id: n, idIsFromProps: l, order: s } = t;\n    return l ? n : s ? `${s}:${JSON.stringify(e)}` : JSON.stringify(e);\n  }).sort((t, e) => t.localeCompare(e)).join(\",\");\n}\nfunction tr(a, t) {\n  try {\n    const e = Qs(a), n = t.getItem(e);\n    if (n) {\n      const l = JSON.parse(n);\n      if (typeof l == \"object\" && l != null)\n        return l;\n    }\n  } catch {\n  }\n  return null;\n}\nfunction Ef(a, t, e) {\n  const n = tr(a, e) ?? {}, l = er(t);\n  return n[l] ?? null;\n}\nfunction Pf(a, t, e, n, l) {\n  const s = Qs(a), r = er(t), i = tr(a, l) ?? {};\n  i[r] = {\n    expandToSizes: Object.fromEntries(e.entries()),\n    layout: n\n  };\n  try {\n    l.setItem(s, JSON.stringify(i));\n  } catch (u) {\n    console.error(u);\n  }\n}\nfunction Df({\n  eagerValuesRef: a,\n  groupId: t,\n  layout: e,\n  panelDataArray: n,\n  panelGroupElement: l,\n  setLayout: s\n}) {\n  ge((r) => {\n    const i = l.value;\n    if (!i)\n      return;\n    const u = fa(\n      t,\n      i\n    );\n    for (let d = 0; d < n.length - 1; d++) {\n      const { valueMax: c, valueMin: p, valueNow: f } = wf({\n        layout: e.value,\n        panelsArray: n,\n        pivotIndices: [d, d + 1]\n      }), v = u[d];\n      if (v != null) {\n        const g = n[d];\n        fe(g), v.setAttribute(\"aria-controls\", g.id), v.setAttribute(\n          \"aria-valuemax\",\n          `${Math.round(c)}`\n        ), v.setAttribute(\n          \"aria-valuemin\",\n          `${Math.round(p)}`\n        ), v.setAttribute(\n          \"aria-valuenow\",\n          f != null ? `${Math.round(f)}` : \"\"\n        );\n      }\n    }\n    r(() => {\n      u.forEach((d) => {\n        d.removeAttribute(\"aria-controls\"), d.removeAttribute(\"aria-valuemax\"), d.removeAttribute(\"aria-valuemin\"), d.removeAttribute(\"aria-valuenow\");\n      });\n    });\n  }), ge((r) => {\n    const i = l.value;\n    if (!i)\n      return;\n    const u = a.value;\n    fe(u);\n    const { panelDataArray: d } = u, c = Xs(t, i);\n    fe(c != null, `No group found for id \"${t}\"`);\n    const p = fa(t, i);\n    fe(p);\n    const f = p.map((v) => {\n      const g = v.getAttribute(\"data-panel-resize-handle-id\");\n      fe(g);\n      const [m, w] = gf(\n        t,\n        g,\n        d,\n        i\n      );\n      if (m == null || w == null)\n        return () => {\n        };\n      const C = (D) => {\n        if (!D.defaultPrevented)\n          switch (D.key) {\n            case \"Enter\": {\n              D.preventDefault();\n              const h = d.findIndex(\n                (E) => E.id === m\n              );\n              if (h >= 0) {\n                const E = d[h];\n                fe(E);\n                const P = e.value[h], {\n                  collapsedSize: B = 0,\n                  collapsible: T,\n                  minSize: M = 0\n                } = E.constraints;\n                if (P != null && T) {\n                  const V = la({\n                    delta: Ve(P, B) ? M - B : B - P,\n                    layout: e.value,\n                    panelConstraints: d.map(\n                      (A) => A.constraints\n                    ),\n                    pivotIndices: Js(\n                      t,\n                      g,\n                      i\n                    ),\n                    trigger: \"keyboard\"\n                  });\n                  e.value !== V && s(V);\n                }\n              }\n              break;\n            }\n          }\n      };\n      return v.addEventListener(\"keydown\", C), () => {\n        v.removeEventListener(\"keydown\", C);\n      };\n    });\n    r(() => {\n      f.forEach((v) => v());\n    });\n  });\n}\nconst $f = 100, sa = {\n  getItem: (a) => (al(sa), sa.getItem(a)),\n  setItem: (a, t) => {\n    al(sa), sa.setItem(a, t);\n  }\n}, [ar, Bf] = Q(\"PanelGroup\"), eg = /* @__PURE__ */ x({\n  __name: \"SplitterGroup\",\n  props: {\n    id: {},\n    autoSaveId: { default: null },\n    direction: {},\n    keyboardResizeBy: { default: 10 },\n    storage: { default: () => sa },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"layout\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = {}, { direction: s } = ae(e), r = he(e.id, \"radix-vue-splitter-group\"), i = be(), { forwardRef: u, currentElement: d } = R(), c = I(null), p = I([]), f = I({}), v = I(/* @__PURE__ */ new Map()), g = I(0), m = $(() => ({\n      autoSaveId: e.autoSaveId,\n      direction: e.direction,\n      dragState: c.value,\n      id: r,\n      keyboardResizeBy: e.keyboardResizeBy,\n      storage: e.storage\n    })), w = I({\n      layout: p.value,\n      panelDataArray: [],\n      panelDataArrayChanged: !1\n    }), C = (N) => p.value = N;\n    Df({\n      eagerValuesRef: w,\n      groupId: r,\n      layout: p,\n      panelDataArray: w.value.panelDataArray,\n      setLayout: C,\n      panelGroupElement: d\n    }), ge(() => {\n      const { panelDataArray: N } = w.value, { autoSaveId: z } = e;\n      if (z) {\n        if (p.value.length === 0 || p.value.length !== N.length)\n          return;\n        let Y = l[z];\n        Y || (Y = xf(\n          Pf,\n          $f\n        ), l[z] = Y);\n        const K = [...N], J = new Map(\n          v.value\n        );\n        Y(\n          z,\n          K,\n          J,\n          p.value,\n          e.storage\n        );\n      }\n    });\n    function D(N, z) {\n      const { panelDataArray: Y } = w.value, K = L(Y, N);\n      return uf({\n        defaultSize: z,\n        dragState: c.value,\n        layout: p.value,\n        panelData: Y,\n        panelIndex: K\n      });\n    }\n    function h(N) {\n      const { panelDataArray: z } = w.value;\n      z.push(N), z.sort((Y, K) => {\n        const J = Y.order, Z = K.order;\n        return J == null && Z == null ? 0 : J == null ? -1 : Z == null ? 1 : J - Z;\n      }), w.value.panelDataArrayChanged = !0;\n    }\n    te(() => w.value.panelDataArrayChanged, () => {\n      if (w.value.panelDataArrayChanged) {\n        w.value.panelDataArrayChanged = !1;\n        const { autoSaveId: N, storage: z } = m.value, { layout: Y, panelDataArray: K } = w.value;\n        let J = null;\n        if (N) {\n          const re = Ef(N, K, z);\n          re && (v.value = new Map(\n            Object.entries(re.expandToSizes)\n          ), J = re.layout);\n        }\n        J === null && (J = _f({\n          panelDataArray: K\n        }));\n        const Z = Sf({\n          layout: J,\n          panelConstraints: K.map(\n            (re) => re.constraints\n          )\n        });\n        zr(Y, Z) || (C(Z), w.value.layout = Z, n(\"layout\", Z), oa(\n          K,\n          Z,\n          f.value\n        ));\n      }\n    });\n    function E(N) {\n      return function(Y) {\n        Y.preventDefault();\n        const K = d.value;\n        if (!K)\n          return () => null;\n        const { direction: J, dragState: Z, id: re, keyboardResizeBy: X } = m.value, { layout: se, panelDataArray: pe } = w.value, { initialLayout: _e } = Z ?? {}, Se = Js(\n          re,\n          N,\n          K\n        );\n        let ye = Cf(\n          Y,\n          N,\n          J,\n          Z,\n          X,\n          K\n        );\n        if (ye === 0)\n          return;\n        const de = J === \"horizontal\";\n        i.value === \"rtl\" && de && (ye = -ye);\n        const Ie = pe.map((wt) => wt.constraints), Oe = la({\n          delta: ye,\n          layout: _e ?? se,\n          panelConstraints: Ie,\n          pivotIndices: Se,\n          trigger: Ns(Y) ? \"keyboard\" : \"mouse-or-touch\"\n        }), ze = !Ra(se, Oe);\n        (zs(Y) || Ks(Y)) && g.value !== ye && (g.value = ye, ze ? En(N, 0) : de ? En(\n          N,\n          ye < 0 ? js : Us\n        ) : En(\n          N,\n          ye < 0 ? Gs : qs\n        )), ze && (C(Oe), w.value.layout = Oe, n(\"layout\", Oe), oa(\n          pe,\n          Oe,\n          f.value\n        ));\n      };\n    }\n    function P(N, z) {\n      const { layout: Y, panelDataArray: K } = w.value, J = K.map((_e) => _e.constraints), { panelSize: Z, pivotIndices: re } = G(\n        K,\n        N,\n        Y\n      );\n      fe(Z != null);\n      const se = L(K, N) === K.length - 1 ? Z - z : z - Z, pe = la({\n        delta: se,\n        layout: Y,\n        panelConstraints: J,\n        pivotIndices: re,\n        trigger: \"imperative-api\"\n      });\n      Ra(Y, pe) || (C(pe), w.value.layout = pe, n(\"layout\", pe), oa(\n        K,\n        pe,\n        f.value\n      ));\n    }\n    function B(N, z) {\n      const { layout: Y, panelDataArray: K } = w.value, J = L(K, N);\n      K[J] = N, w.value.panelDataArrayChanged = !0;\n      const {\n        collapsedSize: Z = 0,\n        collapsible: re\n      } = z, {\n        collapsedSize: X = 0,\n        collapsible: se,\n        maxSize: pe = 100,\n        minSize: _e = 0\n      } = N.constraints, { panelSize: Se } = G(\n        K,\n        N,\n        Y\n      );\n      Se !== null && (re && se && Se === Z ? Z !== X && P(N, X) : Se < _e ? P(N, _e) : Se > pe && P(N, pe));\n    }\n    function T(N, z) {\n      const { direction: Y } = m.value, { layout: K } = w.value;\n      if (!d.value)\n        return;\n      const J = cn(\n        N,\n        d.value\n      );\n      fe(J);\n      const Z = Hs(\n        Y,\n        z\n      );\n      c.value = {\n        dragHandleId: N,\n        dragHandleRect: J.getBoundingClientRect(),\n        initialCursorPosition: Z,\n        initialLayout: K\n      };\n    }\n    function M() {\n      c.value = null;\n    }\n    function V(N) {\n      const { panelDataArray: z } = w.value, Y = L(z, N);\n      Y >= 0 && (z.splice(Y, 1), delete f.value[N.id], w.value.panelDataArrayChanged = !0);\n    }\n    function A(N) {\n      const { layout: z, panelDataArray: Y } = w.value;\n      if (N.constraints.collapsible) {\n        const K = Y.map(\n          (X) => X.constraints\n        ), {\n          collapsedSize: J = 0,\n          panelSize: Z,\n          pivotIndices: re\n        } = G(Y, N, z);\n        if (fe(\n          Z != null,\n          `Panel size not found for panel \"${N.id}\"`\n        ), Z !== J) {\n          v.value.set(N.id, Z);\n          const se = L(Y, N) === Y.length - 1 ? Z - J : J - Z, pe = la({\n            delta: se,\n            layout: z,\n            panelConstraints: K,\n            pivotIndices: re,\n            trigger: \"imperative-api\"\n          });\n          Ra(z, pe) || (C(pe), w.value.layout = pe, n(\"layout\", pe), oa(\n            Y,\n            pe,\n            f.value\n          ));\n        }\n      }\n    }\n    function F(N) {\n      const { layout: z, panelDataArray: Y } = w.value;\n      if (N.constraints.collapsible) {\n        const K = Y.map(\n          (se) => se.constraints\n        ), {\n          collapsedSize: J = 0,\n          panelSize: Z,\n          minSize: re = 0,\n          pivotIndices: X\n        } = G(Y, N, z);\n        if (Z === J) {\n          const se = v.value.get(\n            N.id\n          ), pe = se != null && se >= re ? se : re, Se = L(Y, N) === Y.length - 1 ? Z - pe : pe - Z, ye = la({\n            delta: Se,\n            layout: z,\n            panelConstraints: K,\n            pivotIndices: X,\n            trigger: \"imperative-api\"\n          });\n          Ra(z, ye) || (C(ye), w.value.layout = ye, n(\"layout\", ye), oa(\n            Y,\n            ye,\n            f.value\n          ));\n        }\n      }\n    }\n    function U(N) {\n      const { layout: z, panelDataArray: Y } = w.value, { panelSize: K } = G(Y, N, z);\n      return fe(\n        K != null,\n        `Panel size not found for panel \"${N.id}\"`\n      ), K;\n    }\n    function W(N) {\n      const { layout: z, panelDataArray: Y } = w.value, {\n        collapsedSize: K = 0,\n        collapsible: J,\n        panelSize: Z\n      } = G(Y, N, z);\n      return J === !0 && Z === K;\n    }\n    function ee(N) {\n      const { layout: z, panelDataArray: Y } = w.value, {\n        collapsedSize: K = 0,\n        collapsible: J,\n        panelSize: Z\n      } = G(Y, N, z);\n      return fe(\n        Z != null,\n        `Panel size not found for panel \"${N.id}\"`\n      ), !J || Z > K;\n    }\n    Bf({\n      direction: s,\n      dragState: c.value,\n      groupId: r,\n      reevaluatePanelConstraints: B,\n      registerPanel: h,\n      registerResizeHandle: E,\n      resizePanel: P,\n      startDragging: T,\n      stopDragging: M,\n      unregisterPanel: V,\n      panelGroupElement: d,\n      collapsePanel: A,\n      expandPanel: F,\n      isPanelCollapsed: W,\n      isPanelExpanded: ee,\n      getPanelSize: U,\n      getPanelStyle: D\n    });\n    function L(N, z) {\n      return N.findIndex(\n        (Y) => Y === z || Y.id === z.id\n      );\n    }\n    function G(N, z, Y) {\n      const K = L(N, z), Z = K === N.length - 1 ? [K - 1, K] : [K, K + 1], re = Y[K];\n      return {\n        ...z.constraints,\n        panelSize: re,\n        pivotIndices: Z\n      };\n    }\n    return (N, z) => (b(), S(o(O), {\n      ref: o(u),\n      as: N.as,\n      \"as-child\": N.asChild,\n      style: ke({\n        display: \"flex\",\n        flexDirection: o(s) === \"horizontal\" ? \"row\" : \"column\",\n        height: \"100%\",\n        overflow: \"hidden\",\n        width: \"100%\"\n      }),\n      \"data-panel-group\": \"\",\n      \"data-orientation\": o(s),\n      \"data-panel-group-id\": o(r)\n    }, {\n      default: y(() => [\n        _(N.$slots, \"default\", { layout: p.value })\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"style\", \"data-orientation\", \"data-panel-group-id\"]));\n  }\n}), tg = /* @__PURE__ */ x({\n  __name: \"SplitterPanel\",\n  props: {\n    collapsedSize: {},\n    collapsible: { type: Boolean },\n    defaultSize: {},\n    id: {},\n    maxSize: {},\n    minSize: {},\n    order: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"collapse\", \"expand\", \"resize\"],\n  setup(a, { expose: t, emit: e }) {\n    const n = a, l = e, s = ar();\n    if (s === null)\n      throw new Error(\n        \"SplitterPanel components must be rendered within a SplitterGroup container\"\n      );\n    const { collapsePanel: r, expandPanel: i, getPanelSize: u, getPanelStyle: d, isPanelCollapsed: c, resizePanel: p, groupId: f, reevaluatePanelConstraints: v, registerPanel: g, unregisterPanel: m } = s, w = he(n.id, \"radix-vue-splitter-panel\"), C = $(() => ({\n      callbacks: {\n        onCollapse: () => l(\"collapse\"),\n        onExpand: () => l(\"expand\"),\n        onResize: (...P) => l(\"resize\", ...P)\n      },\n      constraints: {\n        collapsedSize: n.collapsedSize && Number.parseFloat(n.collapsedSize.toFixed(Ro)),\n        collapsible: n.collapsible,\n        defaultSize: n.defaultSize,\n        /** Panel id (unique within group); falls back to useId when not provided */\n        /** Panel id (unique within group); falls back to useId when not provided */\n        maxSize: n.maxSize,\n        minSize: n.minSize\n      },\n      id: w,\n      idIsFromProps: n.id !== void 0,\n      order: n.order\n    }));\n    te(() => C.value.constraints, (P, B) => {\n      (B.collapsedSize !== P.collapsedSize || B.collapsible !== P.collapsible || B.maxSize !== P.maxSize || B.minSize !== P.minSize) && v(C.value, B);\n    }, { deep: !0 }), le(() => {\n      const P = C.value;\n      g(P), Be(() => {\n        m(P);\n      });\n    });\n    const D = $(() => d(C.value, n.defaultSize)), h = $(() => c(C.value)), E = $(() => !h.value);\n    return t({\n      /** If panel is `collapsible`, collapse it fully. */\n      collapse: () => {\n        r(C.value);\n      },\n      /** If panel is currently collapsed, expand it to its most recent size. */\n      expand: () => {\n        i(C.value);\n      },\n      /** Gets the current size of the panel as a percentage (1 - 100). */\n      getSize() {\n        return u(C.value);\n      },\n      /** Resize panel to the specified percentage (1 - 100). */\n      resize: (P) => {\n        p(C.value, P);\n      },\n      /** Returns `true` if the panel is currently collapsed */\n      isCollapsed: h,\n      /** Returns `true` if the panel is currently not collapsed */\n      isExpanded: E\n    }), (P, B) => (b(), S(o(O), {\n      id: o(w),\n      style: ke(D.value),\n      as: P.as,\n      \"as-child\": P.asChild,\n      \"data-panel\": \"\",\n      \"data-panel-collapsible\": P.collapsible || void 0,\n      \"data-panel-group-id\": o(f),\n      \"data-panel-id\": o(w),\n      \"data-panel-size\": Number.parseFloat(`${D.value.flexGrow}`).toFixed(1),\n      \"data-state\": P.collapsible ? h.value ? \"collapsed\" : \"expanded\" : void 0\n    }, {\n      default: y(() => [\n        _(P.$slots, \"default\", {\n          isCollapsed: h.value,\n          isExpanded: E.value\n        })\n      ]),\n      _: 3\n    }, 8, [\"id\", \"style\", \"as\", \"as-child\", \"data-panel-collapsible\", \"data-panel-group-id\", \"data-panel-id\", \"data-panel-size\", \"data-state\"]));\n  }\n});\nfunction If({\n  disabled: a,\n  handleId: t,\n  resizeHandler: e,\n  panelGroupElement: n\n}) {\n  ge((l) => {\n    const s = n.value;\n    if (a.value || e.value === null || s === null)\n      return;\n    const r = cn(t, s);\n    if (r == null)\n      return;\n    const i = (u) => {\n      var d;\n      if (!u.defaultPrevented)\n        switch (u.key) {\n          case \"ArrowDown\":\n          case \"ArrowLeft\":\n          case \"ArrowRight\":\n          case \"ArrowUp\":\n          case \"End\":\n          case \"Home\": {\n            u.preventDefault(), (d = e.value) == null || d.call(e, u);\n            break;\n          }\n          case \"F6\": {\n            u.preventDefault();\n            const c = r.getAttribute(\"data-panel-group-id\");\n            fe(c);\n            const p = fa(\n              c,\n              s\n            ), f = Zs(\n              c,\n              t,\n              s\n            );\n            fe(f !== null);\n            const v = u.shiftKey ? f > 0 ? f - 1 : p.length - 1 : f + 1 < p.length ? f + 1 : 0;\n            p[v].focus();\n            break;\n          }\n        }\n    };\n    r.addEventListener(\"keydown\", i), l(() => {\n      r.removeEventListener(\"keydown\", i);\n    });\n  });\n}\nconst ag = /* @__PURE__ */ x({\n  __name: \"SplitterResizeHandle\",\n  props: {\n    id: {},\n    hitAreaMargins: {},\n    tabindex: { default: 0 },\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"dragging\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { forwardRef: l, currentElement: s } = R(), { disabled: r } = ae(e), i = ar();\n    if (i === null)\n      throw new Error(\n        \"PanelResizeHandle components must be rendered within a PanelGroup container\"\n      );\n    const {\n      direction: u,\n      groupId: d,\n      registerResizeHandle: c,\n      startDragging: p,\n      stopDragging: f,\n      panelGroupElement: v\n    } = i, g = he(e.id, \"radix-vue-splitter-resize-handle\"), m = I(\"inactive\"), w = I(!1), C = I(null);\n    return te(r, () => {\n      ma && (r.value ? C.value = null : C.value = c(g));\n    }, { immediate: !0 }), ge((D) => {\n      var P, B;\n      if (r.value || C.value === null)\n        return;\n      const h = s.value;\n      if (!h)\n        return;\n      fe(h);\n      const E = (T, M, V) => {\n        var A;\n        if (M)\n          switch (T) {\n            case \"down\": {\n              m.value = \"drag\", p(g, V), n(\"dragging\", !0);\n              break;\n            }\n            case \"move\": {\n              m.value !== \"drag\" && (m.value = \"hover\"), (A = C.value) == null || A.call(C, V);\n              break;\n            }\n            case \"up\": {\n              m.value = \"hover\", f(), n(\"dragging\", !1);\n              break;\n            }\n          }\n        else\n          m.value = \"inactive\";\n      };\n      D(yf(\n        g,\n        h,\n        u,\n        {\n          // Coarse inputs (e.g. finger/touch)\n          coarse: ((P = e.hitAreaMargins) == null ? void 0 : P.coarse) ?? 15,\n          // Fine inputs (e.g. mouse)\n          fine: ((B = e.hitAreaMargins) == null ? void 0 : B.fine) ?? 5\n        },\n        E\n      ));\n    }), If({\n      disabled: r,\n      resizeHandler: C,\n      handleId: g,\n      panelGroupElement: v\n    }), (D, h) => (b(), S(o(O), {\n      id: o(g),\n      ref: o(l),\n      style: {\n        touchAction: \"none\",\n        userSelect: \"none\"\n      },\n      as: D.as,\n      \"as-child\": D.asChild,\n      role: \"separator\",\n      \"data-resize-handle\": \"\",\n      tabindex: D.tabindex,\n      \"data-state\": m.value,\n      \"data-disabled\": o(r) ? \"\" : void 0,\n      \"data-orientation\": o(u),\n      \"data-panel-group-id\": o(d),\n      \"data-resize-handle-active\": m.value === \"drag\" ? \"pointer\" : w.value ? \"keyboard\" : void 0,\n      \"data-resize-handle-state\": m.value,\n      \"data-panel-resize-handle-enabled\": !o(r),\n      \"data-panel-resize-handle-id\": o(g),\n      onBlur: h[0] || (h[0] = (E) => w.value = !1),\n      onFocus: h[1] || (h[1] = (E) => w.value = !1)\n    }, {\n      default: y(() => [\n        _(D.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"id\", \"as\", \"as-child\", \"tabindex\", \"data-state\", \"data-disabled\", \"data-orientation\", \"data-panel-group-id\", \"data-resize-handle-active\", \"data-resize-handle-state\", \"data-panel-resize-handle-enabled\", \"data-panel-resize-handle-id\"]));\n  }\n}), Tf = {\n  \"aria-live\": \"polite\",\n  \"aria-atomic\": \"true\",\n  role: \"status\",\n  style: {\n    transform: \"translateX(-100%)\",\n    position: \"absolute\",\n    pointerEvents: \"none\",\n    opacity: 0,\n    margin: 0\n  }\n}, [Ao, Rf] = Q(\"StepperRoot\"), ng = /* @__PURE__ */ x({\n  __name: \"StepperRoot\",\n  props: {\n    defaultValue: { default: 1 },\n    orientation: { default: \"horizontal\" },\n    dir: {},\n    modelValue: {},\n    linear: { type: Boolean, default: !0 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { dir: l, orientation: s, linear: r } = ae(e), i = be(l);\n    R();\n    const u = I(/* @__PURE__ */ new Set()), d = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue,\n      passive: e.modelValue === void 0\n    }), c = $(() => Array.from(u.value)), p = $(() => d.value === 1), f = $(() => d.value === c.value.length), v = $(() => u.value.size);\n    function g(h) {\n      h > v.value || h < 1 || u.value.size && c.value[h] && c.value[h].getAttribute(\"disabled\") || r.value && h > (d.value ?? 1) + 1 || (d.value = h);\n    }\n    const m = I(null), w = I(null), C = $(() => m.value ? m.value.getAttribute(\"disabled\") === \"\" : !0), D = $(() => w.value ? w.value.getAttribute(\"disabled\") === \"\" : !0);\n    return te(d, async () => {\n      await oe(() => {\n        m.value = c.value.length && d.value < c.value.length ? c.value[d.value] : null, w.value = c.value.length && d.value > 1 ? c.value[d.value - 2] : null;\n      });\n    }), te(c, async () => {\n      await oe(() => {\n        m.value = c.value.length && d.value < c.value.length ? c.value[d.value] : null, w.value = c.value.length && d.value > 1 ? c.value[d.value - 2] : null;\n      });\n    }), Rf({\n      modelValue: d,\n      changeModelValue: (h) => {\n        d.value = h;\n      },\n      orientation: s,\n      dir: i,\n      linear: r,\n      totalStepperItems: u\n    }), (h, E) => (b(), S(o(O), {\n      role: \"group\",\n      \"aria-label\": \"progress\",\n      as: h.as,\n      \"as-child\": h.asChild,\n      \"data-linear\": o(r) ? \"\" : void 0,\n      \"data-orientation\": h.orientation\n    }, {\n      default: y(() => [\n        _(h.$slots, \"default\", {\n          modelValue: o(d),\n          totalSteps: u.value.size,\n          isNextDisabled: C.value,\n          isPrevDisabled: D.value,\n          isFirstStep: p.value,\n          isLastStep: f.value,\n          goToStep: g,\n          nextStep: () => g((o(d) ?? 1) + 1),\n          prevStep: () => g((o(d) ?? 1) - 1)\n        }),\n        Ue(\"div\", Tf, \" Step \" + De(o(d)) + \" of \" + De(u.value.size), 1)\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"data-linear\", \"data-orientation\"]));\n  }\n}), [xa, Af] = Q(\"StepperItem\"), og = /* @__PURE__ */ x({\n  __name: \"StepperItem\",\n  props: {\n    step: {},\n    disabled: { type: Boolean, default: !1 },\n    completed: { type: Boolean, default: !1 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { disabled: e, step: n, completed: l } = ae(t), { forwardRef: s } = R(), r = Ao(), i = he(void 0, \"radix-vue-stepper-item-title\"), u = he(void 0, \"radix-vue-stepper-item-description\"), d = $(() => l.value ? \"completed\" : r.modelValue.value === n.value ? \"active\" : r.modelValue.value > n.value ? \"completed\" : \"inactive\"), c = $(() => e.value ? !1 : r.linear.value ? n.value <= r.modelValue.value || n.value === r.modelValue.value + 1 : !0);\n    return Af({\n      titleId: i,\n      descriptionId: u,\n      state: d,\n      disabled: e,\n      step: n,\n      isFocusable: c\n    }), (p, f) => (b(), S(o(O), {\n      ref: o(s),\n      as: p.as,\n      \"as-child\": p.asChild,\n      \"aria-current\": d.value === \"active\" ? \"true\" : void 0,\n      \"data-state\": d.value,\n      disabled: o(e) || !c.value ? \"\" : void 0,\n      \"data-disabled\": o(e) || !c.value ? \"\" : void 0,\n      \"data-orientation\": o(r).orientation.value\n    }, {\n      default: y(() => [\n        _(p.$slots, \"default\", { state: d.value })\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"aria-current\", \"data-state\", \"disabled\", \"data-disabled\", \"data-orientation\"]));\n  }\n}), lg = /* @__PURE__ */ x({\n  __name: \"StepperTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = Ao(), e = xa(), n = Qe(), l = $(() => Array.from(t.totalStepperItems.value));\n    function s(d) {\n      if (!e.disabled.value) {\n        if (t.linear.value) {\n          if ((e.step.value <= t.modelValue.value || e.step.value === t.modelValue.value + 1) && d.ctrlKey === !1) {\n            t.changeModelValue(e.step.value);\n            return;\n          }\n        } else if (d.ctrlKey === !1) {\n          t.changeModelValue(e.step.value);\n          return;\n        }\n        d.preventDefault();\n      }\n    }\n    function r(d) {\n      d.preventDefault(), !e.disabled.value && ((d.key === n.ENTER || d.key === n.SPACE) && !d.ctrlKey && !d.shiftKey && t.changeModelValue(e.step.value), [n.ARROW_LEFT, n.ARROW_RIGHT, n.ARROW_UP, n.ARROW_DOWN].includes(d.key) && Bt(d, document.activeElement, void 0, {\n        itemsArray: l.value,\n        focus: !0,\n        loop: !1,\n        arrowKeyOptions: t.orientation.value,\n        dir: t.dir.value\n      }));\n    }\n    const { forwardRef: i, currentElement: u } = R();\n    return le(() => {\n      t.totalStepperItems.value.add(u.value);\n    }), Be(() => {\n      t.totalStepperItems.value.delete(u.value);\n    }), (d, c) => (b(), S(o(O), {\n      ref: o(i),\n      type: d.as === \"button\" ? \"button\" : void 0,\n      as: d.as,\n      \"as-child\": d.asChild,\n      \"data-state\": o(e).state.value,\n      disabled: o(e).disabled.value || !o(e).isFocusable.value ? \"\" : void 0,\n      \"data-disabled\": o(e).disabled.value || !o(e).isFocusable.value ? \"\" : void 0,\n      \"data-orientation\": o(t).orientation.value,\n      tabindex: o(e).isFocusable.value ? 0 : -1,\n      \"aria-describedby\": o(e).descriptionId,\n      \"aria-labelledby\": o(e).titleId,\n      onMousedown: ue(s, [\"left\"]),\n      onKeydown: ie(r, [\"enter\", \"space\", \"left\", \"right\", \"up\", \"down\"])\n    }, {\n      default: y(() => [\n        _(d.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"type\", \"as\", \"as-child\", \"data-state\", \"disabled\", \"data-disabled\", \"data-orientation\", \"tabindex\", \"aria-describedby\", \"aria-labelledby\"]));\n  }\n}), sg = /* @__PURE__ */ x({\n  __name: \"StepperDescription\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"p\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = xa();\n    return (n, l) => (b(), S(o(O), k(t, {\n      id: o(e).descriptionId\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"id\"]));\n  }\n}), rg = /* @__PURE__ */ x({\n  __name: \"StepperTitle\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"h4\" }\n  },\n  setup(a) {\n    const t = a, e = xa();\n    return R(), (n, l) => (b(), S(o(O), k(t, {\n      id: o(e).titleId\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"id\"]));\n  }\n}), ig = /* @__PURE__ */ x({\n  __name: \"StepperIndicator\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = xa();\n    return R(), (n, l) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(n.$slots, \"default\", {}, () => [\n          me(\" Step \" + De(o(e).step.value), 1)\n        ])\n      ]),\n      _: 3\n    }, 16));\n  }\n}), ug = /* @__PURE__ */ x({\n  __name: \"StepperSeparator\",\n  props: {\n    orientation: {},\n    decorative: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = Ao(), n = xa();\n    return R(), (l, s) => (b(), S(o(Gp), k(t, {\n      decorative: \"\",\n      orientation: o(e).orientation.value,\n      \"data-state\": o(n).state.value\n    }), {\n      default: y(() => [\n        _(l.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"orientation\", \"data-state\"]));\n  }\n}), Of = [\"name\", \"disabled\", \"required\", \"value\", \"checked\", \"data-state\", \"data-disabled\"], [kf, Mf] = Q(\"SwitchRoot\"), dg = /* @__PURE__ */ x({\n  __name: \"SwitchRoot\",\n  props: {\n    defaultChecked: { type: Boolean },\n    checked: { type: Boolean, default: void 0 },\n    disabled: { type: Boolean },\n    required: { type: Boolean },\n    name: {},\n    id: {},\n    value: { default: \"on\" },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  emits: [\"update:checked\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { disabled: l } = ae(e), s = ne(e, \"checked\", n, {\n      defaultValue: e.defaultChecked,\n      passive: e.checked === void 0\n    });\n    function r() {\n      l.value || (s.value = !s.value);\n    }\n    const { forwardRef: i, currentElement: u } = R(), d = Je(u), c = $(() => {\n      var p;\n      return e.id && u.value ? (p = document.querySelector(`[for=\"${e.id}\"]`)) == null ? void 0 : p.innerText : void 0;\n    });\n    return Mf({\n      checked: s,\n      toggleCheck: r,\n      disabled: l\n    }), (p, f) => (b(), ve(we, null, [\n      q(o(O), k(p.$attrs, {\n        id: p.id,\n        ref: o(i),\n        role: \"switch\",\n        type: p.as === \"button\" ? \"button\" : void 0,\n        value: p.value,\n        \"aria-label\": p.$attrs[\"aria-label\"] || c.value,\n        \"aria-checked\": o(s),\n        \"aria-required\": p.required,\n        \"data-state\": o(s) ? \"checked\" : \"unchecked\",\n        \"data-disabled\": o(l) ? \"\" : void 0,\n        \"as-child\": p.asChild,\n        as: p.as,\n        disabled: o(l),\n        onClick: r,\n        onKeydown: ie(ue(r, [\"prevent\"]), [\"enter\"])\n      }), {\n        default: y(() => [\n          _(p.$slots, \"default\", { checked: o(s) })\n        ]),\n        _: 3\n      }, 16, [\"id\", \"type\", \"value\", \"aria-label\", \"aria-checked\", \"aria-required\", \"data-state\", \"data-disabled\", \"as-child\", \"as\", \"disabled\", \"onKeydown\"]),\n      o(d) ? (b(), ve(\"input\", {\n        key: 0,\n        type: \"checkbox\",\n        name: p.name,\n        tabindex: \"-1\",\n        \"aria-hidden\": \"true\",\n        disabled: o(l),\n        required: p.required,\n        value: p.value,\n        checked: !!o(s),\n        \"data-state\": o(s) ? \"checked\" : \"unchecked\",\n        \"data-disabled\": o(l) ? \"\" : void 0,\n        style: {\n          transform: \"translateX(-100%)\",\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          opacity: 0,\n          margin: 0\n        }\n      }, null, 8, Of)) : ce(\"\", !0)\n    ], 64));\n  }\n}), cg = /* @__PURE__ */ x({\n  __name: \"SwitchThumb\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = kf();\n    return R(), (e, n) => {\n      var l;\n      return b(), S(o(O), {\n        \"data-state\": (l = o(t).checked) != null && l.value ? \"checked\" : \"unchecked\",\n        \"data-disabled\": o(t).disabled.value ? \"\" : void 0,\n        \"as-child\": e.asChild,\n        as: e.as\n      }, {\n        default: y(() => [\n          _(e.$slots, \"default\")\n        ]),\n        _: 3\n      }, 8, [\"data-state\", \"data-disabled\", \"as-child\", \"as\"]);\n    };\n  }\n}), [pn, Vf] = Q(\"TabsRoot\"), pg = /* @__PURE__ */ x({\n  __name: \"TabsRoot\",\n  props: {\n    defaultValue: {},\n    orientation: { default: \"horizontal\" },\n    dir: {},\n    activationMode: { default: \"automatic\" },\n    modelValue: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { orientation: l, dir: s } = ae(e), r = be(s);\n    R();\n    const i = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue,\n      passive: e.modelValue === void 0\n    }), u = I();\n    return Vf({\n      modelValue: i,\n      changeModelValue: (d) => {\n        i.value = d;\n      },\n      orientation: l,\n      dir: r,\n      activationMode: e.activationMode,\n      baseId: he(void 0, \"radix-vue-tabs\"),\n      tabsList: u\n    }), (d, c) => (b(), S(o(O), {\n      dir: o(r),\n      \"data-orientation\": o(l),\n      \"as-child\": d.asChild,\n      as: d.as\n    }, {\n      default: y(() => [\n        _(d.$slots, \"default\", { modelValue: o(i) })\n      ]),\n      _: 3\n    }, 8, [\"dir\", \"data-orientation\", \"as-child\", \"as\"]));\n  }\n}), fg = /* @__PURE__ */ x({\n  __name: \"TabsList\",\n  props: {\n    loop: { type: Boolean, default: !0 },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { loop: e } = ae(t), { forwardRef: n, currentElement: l } = R(), s = pn();\n    return s.tabsList = l, (r, i) => (b(), S(o(Ot), {\n      \"as-child\": \"\",\n      orientation: o(s).orientation.value,\n      dir: o(s).dir.value,\n      loop: o(e)\n    }, {\n      default: y(() => [\n        q(o(O), {\n          ref: o(n),\n          role: \"tablist\",\n          \"as-child\": r.asChild,\n          as: r.as,\n          \"aria-orientation\": o(s).orientation.value\n        }, {\n          default: y(() => [\n            _(r.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"as-child\", \"as\", \"aria-orientation\"])\n      ]),\n      _: 3\n    }, 8, [\"orientation\", \"dir\", \"loop\"]));\n  }\n});\nfunction nr(a, t) {\n  return `${a}-trigger-${t}`;\n}\nfunction or(a, t) {\n  return `${a}-content-${t}`;\n}\nconst vg = /* @__PURE__ */ x({\n  __name: \"TabsContent\",\n  props: {\n    value: {},\n    forceMount: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { forwardRef: e } = R(), n = pn(), l = $(() => nr(n.baseId, t.value)), s = $(() => or(n.baseId, t.value)), r = $(() => t.value === n.modelValue.value), i = I(r.value);\n    return le(() => {\n      requestAnimationFrame(() => {\n        i.value = !1;\n      });\n    }), (u, d) => (b(), S(o(Pe), {\n      present: r.value,\n      \"force-mount\": \"\"\n    }, {\n      default: y(({ present: c }) => [\n        q(o(O), {\n          id: s.value,\n          ref: o(e),\n          \"as-child\": u.asChild,\n          as: u.as,\n          role: \"tabpanel\",\n          \"data-state\": r.value ? \"active\" : \"inactive\",\n          \"data-orientation\": o(n).orientation.value,\n          \"aria-labelledby\": l.value,\n          hidden: !c.value,\n          tabindex: \"0\",\n          style: ke({\n            animationDuration: i.value ? \"0s\" : void 0\n          })\n        }, {\n          default: y(() => [\n            u.forceMount || r.value ? _(u.$slots, \"default\", { key: 0 }) : ce(\"\", !0)\n          ]),\n          _: 2\n        }, 1032, [\"id\", \"as-child\", \"as\", \"data-state\", \"data-orientation\", \"aria-labelledby\", \"hidden\", \"style\"])\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), mg = /* @__PURE__ */ x({\n  __name: \"TabsTrigger\",\n  props: {\n    value: {},\n    disabled: { type: Boolean, default: !1 },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, { forwardRef: e } = R(), n = pn(), l = $(() => nr(n.baseId, t.value)), s = $(() => or(n.baseId, t.value)), r = $(() => t.value === n.modelValue.value);\n    return (i, u) => (b(), S(o(kt), {\n      \"as-child\": \"\",\n      focusable: !i.disabled,\n      active: r.value\n    }, {\n      default: y(() => [\n        q(o(O), {\n          id: l.value,\n          ref: o(e),\n          role: \"tab\",\n          type: i.as === \"button\" ? \"button\" : void 0,\n          as: i.as,\n          \"as-child\": i.asChild,\n          \"aria-selected\": r.value ? \"true\" : \"false\",\n          \"aria-controls\": s.value,\n          \"data-state\": r.value ? \"active\" : \"inactive\",\n          disabled: i.disabled,\n          \"data-disabled\": i.disabled ? \"\" : void 0,\n          \"data-orientation\": o(n).orientation.value,\n          onMousedown: u[0] || (u[0] = ue((d) => {\n            !i.disabled && d.ctrlKey === !1 ? o(n).changeModelValue(i.value) : d.preventDefault();\n          }, [\"left\"])),\n          onKeydown: u[1] || (u[1] = ie((d) => o(n).changeModelValue(i.value), [\"enter\", \"space\"])),\n          onFocus: u[2] || (u[2] = () => {\n            const d = o(n).activationMode !== \"manual\";\n            !r.value && !i.disabled && d && o(n).changeModelValue(i.value);\n          })\n        }, {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"id\", \"type\", \"as\", \"as-child\", \"aria-selected\", \"aria-controls\", \"data-state\", \"disabled\", \"data-disabled\", \"data-orientation\"])\n      ]),\n      _: 3\n    }, 8, [\"focusable\", \"active\"]));\n  }\n}), hg = /* @__PURE__ */ x({\n  __name: \"TabsIndicator\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = pn();\n    R();\n    const n = I(), l = I({\n      size: null,\n      position: null\n    });\n    te(() => [e.modelValue.value, e == null ? void 0 : e.dir.value], async () => {\n      await oe(), s();\n    }, { immediate: !0 }), Ze([e.tabsList, n], s);\n    function s() {\n      var r;\n      n.value = (r = e.tabsList.value) == null ? void 0 : r.querySelector('[role=\"tab\"][data-state=\"active\"]'), n.value && (e.orientation.value === \"horizontal\" ? l.value = {\n        size: n.value.offsetWidth,\n        position: n.value.offsetLeft\n      } : l.value = {\n        size: n.value.offsetHeight,\n        position: n.value.offsetTop\n      });\n    }\n    return (r, i) => typeof l.value.size == \"number\" ? (b(), S(o(O), k({ key: 0 }, t, {\n      style: {\n        \"--radix-tabs-indicator-size\": `${l.value.size}px`,\n        \"--radix-tabs-indicator-position\": `${l.value.position}px`\n      }\n    }), {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"style\"])) : ce(\"\", !0);\n  }\n}), [fn, Ff] = Q(\"TagsInputRoot\"), yg = /* @__PURE__ */ x({\n  __name: \"TagsInputRoot\",\n  props: {\n    modelValue: {},\n    defaultValue: { default: () => [] },\n    addOnPaste: { type: Boolean },\n    addOnTab: { type: Boolean },\n    addOnBlur: { type: Boolean },\n    duplicate: { type: Boolean },\n    disabled: { type: Boolean },\n    delimiter: { default: \",\" },\n    dir: {},\n    max: { default: 0 },\n    required: { type: Boolean },\n    name: {},\n    id: {},\n    convertValue: {},\n    displayValue: { type: Function, default: (a) => a.toString() },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  emits: [\"update:modelValue\", \"invalid\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { addOnPaste: l, disabled: s, delimiter: r, max: i, id: u, dir: d, addOnBlur: c, addOnTab: p } = ae(e), f = be(d), v = ne(e, \"modelValue\", n, {\n      defaultValue: e.defaultValue,\n      passive: !0,\n      deep: !0\n    }), { forwardRef: g, currentElement: m } = R(), { focused: w } = gi(m), C = Je(m), { getItems: D } = ba(), h = I(), E = I(!1);\n    return Ff({\n      modelValue: v,\n      onAddValue: (P) => {\n        const B = v.value.length > 0 && typeof v.value[0] == \"object\", T = v.value.length > 0 && typeof e.defaultValue[0] == \"object\";\n        if ((B || T) && typeof e.convertValue != \"function\")\n          throw new Error(\"You must provide a `convertValue` function when using objects as values.\");\n        const M = e.convertValue ? e.convertValue(P) : P;\n        if (v.value.length >= i.value && i.value)\n          return n(\"invalid\", M), !1;\n        if (e.duplicate)\n          return v.value.push(M), !0;\n        if (v.value.includes(M))\n          E.value = !0;\n        else\n          return v.value.push(M), !0;\n        return n(\"invalid\", M), !1;\n      },\n      onRemoveValue: (P) => {\n        P !== -1 && v.value.splice(P, 1);\n      },\n      onInputKeydown: (P) => {\n        const B = P.target, T = D().map((V) => V.ref).filter((V) => V.dataset.disabled !== \"\");\n        if (!T.length)\n          return;\n        const M = T.at(-1);\n        switch (P.key) {\n          case \"Delete\":\n          case \"Backspace\": {\n            if (B.selectionStart !== 0 || B.selectionEnd !== 0)\n              break;\n            if (h.value) {\n              const V = T.findIndex((A) => A === h.value);\n              v.value.splice(V, 1), h.value = h.value === M ? T.at(V - 1) : T.at(V + 1), P.preventDefault();\n            } else P.key === \"Backspace\" && (h.value = M, P.preventDefault());\n            break;\n          }\n          case \"Home\":\n          case \"End\":\n          case \"ArrowRight\":\n          case \"ArrowLeft\": {\n            const V = P.key === \"ArrowRight\" && f.value === \"ltr\" || P.key === \"ArrowLeft\" && f.value === \"rtl\", A = !V;\n            if (B.selectionStart !== 0 || B.selectionEnd !== 0)\n              break;\n            if (A && !h.value)\n              h.value = M, P.preventDefault();\n            else if (V && M && h.value === M)\n              h.value = void 0, P.preventDefault();\n            else if (h.value) {\n              const F = Bt(P, h.value, void 0, {\n                itemsArray: T,\n                loop: !1,\n                dir: f.value\n              });\n              F && (h.value = F), P.preventDefault();\n            }\n            break;\n          }\n          case \"ArrowUp\":\n          case \"ArrowDown\": {\n            h.value && P.preventDefault();\n            break;\n          }\n          default:\n            h.value = void 0;\n        }\n      },\n      selectedElement: h,\n      isInvalidInput: E,\n      addOnPaste: l,\n      addOnBlur: c,\n      addOnTab: p,\n      dir: f,\n      disabled: s,\n      delimiter: r,\n      max: i,\n      id: u,\n      displayValue: e.displayValue\n    }), (P, B) => (b(), S(o(Ca), null, {\n      default: y(() => [\n        q(o(O), {\n          ref: o(g),\n          dir: o(f),\n          as: P.as,\n          \"as-child\": P.asChild,\n          \"data-invalid\": E.value ? \"\" : void 0,\n          \"data-disabled\": o(s) ? \"\" : void 0,\n          \"data-focused\": o(w) ? \"\" : void 0\n        }, {\n          default: y(() => [\n            _(P.$slots, \"default\", { modelValue: o(v) }),\n            o(C) && P.name ? (b(), S(o(to), {\n              key: 0,\n              name: P.name,\n              value: o(v),\n              required: P.required,\n              disabled: o(s)\n            }, null, 8, [\"name\", \"value\", \"required\", \"disabled\"])) : ce(\"\", !0)\n          ]),\n          _: 3\n        }, 8, [\"dir\", \"as\", \"as-child\", \"data-invalid\", \"data-disabled\", \"data-focused\"])\n      ]),\n      _: 3\n    }));\n  }\n}), gg = /* @__PURE__ */ x({\n  __name: \"TagsInputInput\",\n  props: {\n    placeholder: {},\n    autoFocus: { type: Boolean },\n    maxLength: {},\n    asChild: { type: Boolean },\n    as: { default: \"input\" }\n  },\n  setup(a) {\n    const t = a, e = fn(), { forwardRef: n, currentElement: l } = R();\n    function s(c) {\n      if (!e.addOnBlur.value)\n        return;\n      const p = c.target;\n      if (!p.value)\n        return;\n      e.onAddValue(p.value) && (p.value = \"\");\n    }\n    function r(c) {\n      e.addOnTab.value && i(c);\n    }\n    async function i(c) {\n      if (await oe(), c.defaultPrevented)\n        return;\n      const p = c.target;\n      if (!p.value)\n        return;\n      e.onAddValue(p.value) && (p.value = \"\"), c.preventDefault();\n    }\n    function u(c) {\n      e.isInvalidInput.value = !1;\n      const p = e.delimiter.value;\n      if (p === c.data) {\n        const f = c.target;\n        f.value = f.value.replaceAll(p, \"\"), e.onAddValue(f.value) && (f.value = \"\");\n      }\n    }\n    function d(c) {\n      if (e.addOnPaste.value) {\n        c.preventDefault();\n        const p = c.clipboardData;\n        if (!p)\n          return;\n        const f = p.getData(\"text\");\n        e.delimiter.value ? f.split(e.delimiter.value).forEach((g) => {\n          e.onAddValue(g);\n        }) : e.onAddValue(f);\n      }\n    }\n    return le(() => {\n      const c = l.value.nodeName === \"INPUT\" ? l.value : l.value.querySelector(\"input\");\n      c && setTimeout(() => {\n        t.autoFocus && (c == null || c.focus());\n      }, 1);\n    }), (c, p) => {\n      var f;\n      return b(), S(o(O), {\n        id: (f = o(e).id) == null ? void 0 : f.value,\n        ref: o(n),\n        type: \"text\",\n        autocomplete: \"off\",\n        autocorrect: \"off\",\n        autocapitalize: \"off\",\n        as: c.as,\n        \"as-child\": c.asChild,\n        maxlength: c.maxLength,\n        placeholder: c.placeholder,\n        disabled: o(e).disabled.value,\n        \"data-invalid\": o(e).isInvalidInput.value ? \"\" : void 0,\n        onInput: u,\n        onKeydown: [\n          ie(i, [\"enter\"]),\n          ie(r, [\"tab\"]),\n          o(e).onInputKeydown\n        ],\n        onBlur: s,\n        onPaste: d\n      }, {\n        default: y(() => [\n          _(c.$slots, \"default\")\n        ]),\n        _: 3\n      }, 8, [\"id\", \"as\", \"as-child\", \"maxlength\", \"placeholder\", \"disabled\", \"data-invalid\", \"onKeydown\"]);\n    };\n  }\n}), [lr, Lf] = Q(\"TagsInputItem\"), bg = /* @__PURE__ */ x({\n  __name: \"TagsInputItem\",\n  props: {\n    value: {},\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { value: e } = ae(t), n = fn(), { forwardRef: l, currentElement: s } = R(), r = $(() => n.selectedElement.value === s.value), i = $(() => t.disabled || n.disabled.value), u = Lf({\n      value: e,\n      isSelected: r,\n      disabled: i,\n      textId: \"\",\n      displayValue: $(() => n.displayValue(e.value))\n    });\n    return (d, c) => (b(), S(o(Zt), null, {\n      default: y(() => [\n        q(o(O), {\n          ref: o(l),\n          as: d.as,\n          \"as-child\": d.asChild,\n          \"aria-labelledby\": o(u).textId,\n          \"aria-current\": r.value,\n          \"data-disabled\": i.value ? \"\" : void 0,\n          \"data-state\": r.value ? \"active\" : \"inactive\"\n        }, {\n          default: y(() => [\n            _(d.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"as\", \"as-child\", \"aria-labelledby\", \"aria-current\", \"data-disabled\", \"data-state\"])\n      ]),\n      _: 3\n    }));\n  }\n}), Cg = /* @__PURE__ */ x({\n  __name: \"TagsInputItemText\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"span\" }\n  },\n  setup(a) {\n    const t = a, e = lr();\n    return R(), e.textId || (e.textId = he(void 0, \"radix-vue-tags-input-item-text\")), (n, l) => (b(), S(o(O), k(t, {\n      id: o(e).textId\n    }), {\n      default: y(() => [\n        _(n.$slots, \"default\", {}, () => [\n          me(De(o(e).displayValue.value), 1)\n        ])\n      ]),\n      _: 3\n    }, 16, [\"id\"]));\n  }\n}), wg = /* @__PURE__ */ x({\n  __name: \"TagsInputItemDelete\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = fn(), n = lr(), l = $(() => {\n      var r;\n      return ((r = n.disabled) == null ? void 0 : r.value) || e.disabled.value;\n    });\n    function s() {\n      if (l.value)\n        return;\n      const r = e.modelValue.value.findIndex((i) => i === n.value.value);\n      e.onRemoveValue(r);\n    }\n    return (r, i) => (b(), S(o(O), k({ tabindex: \"-1\" }, t, {\n      \"aria-labelledby\": o(n).textId,\n      \"aria-current\": o(n).isSelected.value,\n      \"data-state\": o(n).isSelected.value ? \"active\" : \"inactive\",\n      \"data-disabled\": l.value ? \"\" : void 0,\n      type: r.as === \"button\" ? \"button\" : void 0,\n      onClick: s\n    }), {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"aria-labelledby\", \"aria-current\", \"data-state\", \"data-disabled\", \"type\"]));\n  }\n}), _g = /* @__PURE__ */ x({\n  __name: \"TagsInputClear\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a;\n    R();\n    const e = fn();\n    function n() {\n      e.disabled.value || (e.modelValue.value = []);\n    }\n    return (l, s) => (b(), S(o(O), k(t, {\n      type: l.as === \"button\" ? \"button\" : void 0,\n      \"data-disabled\": o(e).disabled.value ? \"\" : void 0,\n      onClick: n\n    }), {\n      default: y(() => [\n        _(l.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"type\", \"data-disabled\"]));\n  }\n}), [vn, Nf] = Q(\"ToastProvider\"), xg = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"ToastProvider\",\n  props: {\n    label: { default: \"Notification\" },\n    duration: { default: 5e3 },\n    swipeDirection: { default: \"right\" },\n    swipeThreshold: { default: 50 }\n  },\n  setup(a) {\n    const t = a, { label: e, duration: n, swipeDirection: l, swipeThreshold: s } = ae(t), r = I(), i = I(0), u = I(!1), d = I(!1);\n    if (t.label && typeof t.label == \"string\" && !t.label.trim()) {\n      const c = \"Invalid prop `label` supplied to `ToastProvider`. Expected non-empty `string`.\";\n      throw new Error(c);\n    }\n    return Nf({\n      label: e,\n      duration: n,\n      swipeDirection: l,\n      swipeThreshold: s,\n      toastCount: i,\n      viewport: r,\n      onViewportChange(c) {\n        r.value = c;\n      },\n      onToastAdd() {\n        i.value++;\n      },\n      onToastRemove() {\n        i.value--;\n      },\n      isFocusedToastEscapeKeyDownRef: u,\n      isClosePausedRef: d\n    }), (c, p) => _(c.$slots, \"default\");\n  }\n}), zf = \"toast.swipeStart\", Kf = \"toast.swipeMove\", Hf = \"toast.swipeCancel\", Wf = \"toast.swipeEnd\", On = \"toast.viewportPause\", kn = \"toast.viewportResume\";\nfunction Aa(a, t, e) {\n  const n = e.originalEvent.currentTarget, l = new CustomEvent(a, {\n    bubbles: !1,\n    cancelable: !0,\n    detail: e\n  });\n  t && n.addEventListener(a, t, { once: !0 }), n.dispatchEvent(l);\n}\nfunction nl(a, t, e = 0) {\n  const n = Math.abs(a.x), l = Math.abs(a.y), s = n > l;\n  return t === \"left\" || t === \"right\" ? s && n > e : !s && l > e;\n}\nfunction jf(a) {\n  return a.nodeType === a.ELEMENT_NODE;\n}\nfunction sr(a) {\n  const t = [];\n  return Array.from(a.childNodes).forEach((n) => {\n    if (n.nodeType === n.TEXT_NODE && n.textContent && t.push(n.textContent), jf(n)) {\n      const l = n.ariaHidden || n.hidden || n.style.display === \"none\", s = n.dataset.radixToastAnnounceExclude === \"\";\n      if (!l)\n        if (s) {\n          const r = n.dataset.radixToastAnnounceAlt;\n          r && t.push(r);\n        } else\n          t.push(...sr(n));\n    }\n  }), t;\n}\nconst Uf = /* @__PURE__ */ x({\n  __name: \"ToastAnnounce\",\n  setup(a) {\n    const t = vn(), e = pi(1e3), n = I(!1);\n    return Il(() => {\n      n.value = !0;\n    }), (l, s) => o(e) || n.value ? (b(), S(o(Xt), { key: 0 }, {\n      default: y(() => [\n        me(De(o(t).label.value) + \" \", 1),\n        _(l.$slots, \"default\")\n      ]),\n      _: 3\n    })) : ce(\"\", !0);\n  }\n}), [Gf, qf] = Q(\"ToastRoot\"), Yf = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"ToastRootImpl\",\n  props: {\n    type: {},\n    open: { type: Boolean, default: !1 },\n    duration: {},\n    asChild: { type: Boolean },\n    as: { default: \"li\" }\n  },\n  emits: [\"close\", \"escapeKeyDown\", \"pause\", \"resume\", \"swipeStart\", \"swipeMove\", \"swipeCancel\", \"swipeEnd\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { forwardRef: l, currentElement: s } = R(), r = vn(), i = I(null), u = I(null), d = $(() => e.duration || r.duration.value), c = I(0), p = I(d.value), f = I(0), v = I(d.value), g = Il(() => {\n      const D = (/* @__PURE__ */ new Date()).getTime() - c.value;\n      v.value = Math.max(p.value - D, 0);\n    }, { fpsLimit: 60 });\n    function m(D) {\n      !D || D === Number.POSITIVE_INFINITY || qe && (window.clearTimeout(f.value), c.value = (/* @__PURE__ */ new Date()).getTime(), f.value = window.setTimeout(w, D));\n    }\n    function w() {\n      var h, E;\n      ((h = s.value) == null ? void 0 : h.contains(document.activeElement)) && ((E = r.viewport.value) == null || E.focus()), r.isClosePausedRef.value = !1, n(\"close\");\n    }\n    const C = $(() => s.value ? sr(s.value) : null);\n    if (e.type && ![\"foreground\", \"background\"].includes(e.type)) {\n      const D = \"Invalid prop `type` supplied to `Toast`. Expected `foreground | background`.\";\n      throw new Error(D);\n    }\n    return ge((D) => {\n      const h = r.viewport.value;\n      if (h) {\n        const E = () => {\n          m(p.value), g.resume(), n(\"resume\");\n        }, P = () => {\n          const B = (/* @__PURE__ */ new Date()).getTime() - c.value;\n          p.value = p.value - B, window.clearTimeout(f.value), g.pause(), n(\"pause\");\n        };\n        return h.addEventListener(On, P), h.addEventListener(kn, E), () => {\n          h.removeEventListener(On, P), h.removeEventListener(kn, E);\n        };\n      }\n    }), te(() => [e.open, d.value], () => {\n      p.value = d.value, e.open && !r.isClosePausedRef.value && m(d.value);\n    }, { immediate: !0 }), jn(\"Escape\", (D) => {\n      n(\"escapeKeyDown\", D), D.defaultPrevented || (r.isFocusedToastEscapeKeyDownRef.value = !0, w());\n    }), le(() => {\n      r.onToastAdd();\n    }), Be(() => {\n      r.onToastRemove();\n    }), qf({ onClose: w }), (D, h) => (b(), ve(we, null, [\n      C.value ? (b(), S(Uf, {\n        key: 0,\n        role: \"status\",\n        \"aria-live\": D.type === \"foreground\" ? \"assertive\" : \"polite\",\n        \"aria-atomic\": \"\"\n      }, {\n        default: y(() => [\n          me(De(C.value), 1)\n        ]),\n        _: 1\n      }, 8, [\"aria-live\"])) : ce(\"\", !0),\n      o(r).viewport.value ? (b(), S(jt, {\n        key: 1,\n        to: o(r).viewport.value\n      }, [\n        q(o(O), k({\n          ref: o(l),\n          role: \"status\",\n          \"aria-live\": \"off\",\n          \"aria-atomic\": \"\",\n          tabindex: \"0\",\n          \"data-radix-vue-collection-item\": \"\"\n        }, D.$attrs, {\n          as: D.as,\n          \"as-child\": D.asChild,\n          \"data-state\": D.open ? \"open\" : \"closed\",\n          \"data-swipe-direction\": o(r).swipeDirection.value,\n          style: { userSelect: \"none\", touchAction: \"none\" },\n          onPointerdown: h[0] || (h[0] = ue((E) => {\n            i.value = { x: E.clientX, y: E.clientY };\n          }, [\"left\"])),\n          onPointermove: h[1] || (h[1] = (E) => {\n            if (!i.value) return;\n            const P = E.clientX - i.value.x, B = E.clientY - i.value.y, T = !!u.value, M = [\"left\", \"right\"].includes(o(r).swipeDirection.value), V = [\"left\", \"up\"].includes(o(r).swipeDirection.value) ? Math.min : Math.max, A = M ? V(0, P) : 0, F = M ? 0 : V(0, B), U = E.pointerType === \"touch\" ? 10 : 2, W = { x: A, y: F }, ee = { originalEvent: E, delta: W };\n            T ? (u.value = W, o(Aa)(o(Kf), (L) => n(\"swipeMove\", L), ee)) : o(nl)(W, o(r).swipeDirection.value, U) ? (u.value = W, o(Aa)(o(zf), (L) => n(\"swipeStart\", L), ee), E.target.setPointerCapture(E.pointerId)) : (Math.abs(P) > U || Math.abs(B) > U) && (i.value = null);\n          }),\n          onPointerup: h[2] || (h[2] = (E) => {\n            const P = u.value, B = E.target;\n            if (B.hasPointerCapture(E.pointerId) && B.releasePointerCapture(E.pointerId), u.value = null, i.value = null, P) {\n              const T = E.currentTarget, M = { originalEvent: E, delta: P };\n              o(nl)(P, o(r).swipeDirection.value, o(r).swipeThreshold.value) ? o(Aa)(o(Wf), (V) => n(\"swipeEnd\", V), M) : o(Aa)(o(Hf), (V) => n(\"swipeCancel\", V), M), T == null || T.addEventListener(\"click\", (V) => V.preventDefault(), {\n                once: !0\n              });\n            }\n          })\n        }), {\n          default: y(() => [\n            _(D.$slots, \"default\", {\n              remaining: v.value,\n              duration: d.value\n            })\n          ]),\n          _: 3\n        }, 16, [\"as\", \"as-child\", \"data-state\", \"data-swipe-direction\"])\n      ], 8, [\"to\"])) : ce(\"\", !0)\n    ], 64));\n  }\n}), Sg = /* @__PURE__ */ x({\n  __name: \"ToastRoot\",\n  props: {\n    defaultOpen: { type: Boolean, default: !0 },\n    forceMount: { type: Boolean },\n    type: { default: \"foreground\" },\n    open: { type: Boolean, default: void 0 },\n    duration: {},\n    asChild: { type: Boolean },\n    as: { default: \"li\" }\n  },\n  emits: [\"escapeKeyDown\", \"pause\", \"resume\", \"swipeStart\", \"swipeMove\", \"swipeCancel\", \"swipeEnd\", \"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { forwardRef: l } = R(), s = ne(e, \"open\", n, {\n      defaultValue: e.defaultOpen,\n      passive: e.open === void 0\n    });\n    return (r, i) => (b(), S(o(Pe), {\n      present: r.forceMount || o(s)\n    }, {\n      default: y(() => [\n        q(Yf, k({\n          ref: o(l),\n          open: o(s),\n          type: r.type,\n          as: r.as,\n          \"as-child\": r.asChild,\n          duration: r.duration\n        }, r.$attrs, {\n          onClose: i[0] || (i[0] = (u) => s.value = !1),\n          onPause: i[1] || (i[1] = (u) => n(\"pause\")),\n          onResume: i[2] || (i[2] = (u) => n(\"resume\")),\n          onEscapeKeyDown: i[3] || (i[3] = (u) => n(\"escapeKeyDown\", u)),\n          onSwipeStart: i[4] || (i[4] = (u) => {\n            n(\"swipeStart\", u), u.currentTarget.setAttribute(\"data-swipe\", \"start\");\n          }),\n          onSwipeMove: i[5] || (i[5] = (u) => {\n            const { x: d, y: c } = u.detail.delta, p = u.currentTarget;\n            p.setAttribute(\"data-swipe\", \"move\"), p.style.setProperty(\"--radix-toast-swipe-move-x\", `${d}px`), p.style.setProperty(\"--radix-toast-swipe-move-y\", `${c}px`);\n          }),\n          onSwipeCancel: i[6] || (i[6] = (u) => {\n            const d = u.currentTarget;\n            d.setAttribute(\"data-swipe\", \"cancel\"), d.style.removeProperty(\"--radix-toast-swipe-move-x\"), d.style.removeProperty(\"--radix-toast-swipe-move-y\"), d.style.removeProperty(\"--radix-toast-swipe-end-x\"), d.style.removeProperty(\"--radix-toast-swipe-end-y\");\n          }),\n          onSwipeEnd: i[7] || (i[7] = (u) => {\n            const { x: d, y: c } = u.detail.delta, p = u.currentTarget;\n            p.setAttribute(\"data-swipe\", \"end\"), p.style.removeProperty(\"--radix-toast-swipe-move-x\"), p.style.removeProperty(\"--radix-toast-swipe-move-y\"), p.style.setProperty(\"--radix-toast-swipe-end-x\", `${d}px`), p.style.setProperty(\"--radix-toast-swipe-end-y\", `${c}px`), s.value = !1;\n          })\n        }), {\n          default: y(({ remaining: u, duration: d }) => [\n            _(r.$slots, \"default\", {\n              remaining: u,\n              duration: d,\n              open: o(s)\n            })\n          ]),\n          _: 3\n        }, 16, [\"open\", \"type\", \"as\", \"as-child\", \"duration\"])\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), rr = /* @__PURE__ */ x({\n  __name: \"ToastAnnounceExclude\",\n  props: {\n    altText: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    return (t, e) => (b(), S(o(O), {\n      as: t.as,\n      \"as-child\": t.asChild,\n      \"data-radix-toast-announce-exclude\": \"\",\n      \"data-radix-toast-announce-alt\": t.altText || void 0\n    }, {\n      default: y(() => [\n        _(t.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"as\", \"as-child\", \"data-radix-toast-announce-alt\"]));\n  }\n}), Xf = /* @__PURE__ */ x({\n  __name: \"ToastClose\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = Gf(), { forwardRef: n } = R();\n    return (l, s) => (b(), S(rr, { \"as-child\": \"\" }, {\n      default: y(() => [\n        q(o(O), k(t, {\n          ref: o(n),\n          type: l.as === \"button\" ? \"button\" : void 0,\n          onClick: s[0] || (s[0] = (r) => o(e).onClose())\n        }), {\n          default: y(() => [\n            _(l.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"type\"])\n      ]),\n      _: 3\n    }));\n  }\n}), Eg = /* @__PURE__ */ x({\n  __name: \"ToastAction\",\n  props: {\n    altText: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    if (!a.altText)\n      throw new Error(\"Missing prop `altText` expected on `ToastAction`\");\n    const { forwardRef: e } = R();\n    return (n, l) => n.altText ? (b(), S(rr, {\n      key: 0,\n      \"alt-text\": n.altText,\n      \"as-child\": \"\"\n    }, {\n      default: y(() => [\n        q(Xf, {\n          ref: o(e),\n          as: n.as,\n          \"as-child\": n.asChild\n        }, {\n          default: y(() => [\n            _(n.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"as\", \"as-child\"])\n      ]),\n      _: 3\n    }, 8, [\"alt-text\"])) : ce(\"\", !0);\n  }\n}), ol = /* @__PURE__ */ x({\n  __name: \"FocusProxy\",\n  emits: [\"focusFromOutsideViewport\"],\n  setup(a, { emit: t }) {\n    const e = t, n = vn();\n    return (l, s) => (b(), S(o(Xt), {\n      \"aria-hidden\": \"true\",\n      tabindex: \"0\",\n      style: { position: \"fixed\" },\n      onFocus: s[0] || (s[0] = (r) => {\n        var d;\n        const i = r.relatedTarget;\n        !((d = o(n).viewport.value) != null && d.contains(i)) && e(\"focusFromOutsideViewport\");\n      })\n    }, {\n      default: y(() => [\n        _(l.$slots, \"default\")\n      ]),\n      _: 3\n    }));\n  }\n}), Pg = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"ToastViewport\",\n  props: {\n    hotkey: { default: () => [\"F8\"] },\n    label: { type: [String, Function], default: \"Notifications ({hotkey})\" },\n    asChild: { type: Boolean },\n    as: { default: \"ol\" }\n  },\n  setup(a) {\n    const t = a, { hotkey: e, label: n } = ae(t), { forwardRef: l, currentElement: s } = R(), { createCollection: r } = Me(), i = r(s), u = vn(), d = $(() => u.toastCount.value > 0), c = I(), p = I(), f = $(() => e.value.join(\"+\").replace(/Key/g, \"\").replace(/Digit/g, \"\"));\n    jn(e.value, () => {\n      s.value.focus();\n    }), le(() => {\n      u.onViewportChange(s.value);\n    }), ge((g) => {\n      const m = s.value;\n      if (d.value && m) {\n        const w = () => {\n          if (!u.isClosePausedRef.value) {\n            const P = new CustomEvent(On);\n            m.dispatchEvent(P), u.isClosePausedRef.value = !0;\n          }\n        }, C = () => {\n          if (u.isClosePausedRef.value) {\n            const P = new CustomEvent(kn);\n            m.dispatchEvent(P), u.isClosePausedRef.value = !1;\n          }\n        }, D = (P) => {\n          !m.contains(P.relatedTarget) && C();\n        }, h = () => {\n          m.contains(document.activeElement) || C();\n        }, E = (P) => {\n          var M, V, A;\n          const B = P.altKey || P.ctrlKey || P.metaKey;\n          if (P.key === \"Tab\" && !B) {\n            const F = document.activeElement, U = P.shiftKey;\n            if (P.target === m && U) {\n              (M = c.value) == null || M.focus();\n              return;\n            }\n            const L = v({ tabbingDirection: U ? \"backwards\" : \"forwards\" }), G = L.findIndex((N) => N === F);\n            Oa(L.slice(G + 1)) ? P.preventDefault() : U ? (V = c.value) == null || V.focus() : (A = p.value) == null || A.focus();\n          }\n        };\n        m.addEventListener(\"focusin\", w), m.addEventListener(\"focusout\", D), m.addEventListener(\"pointermove\", w), m.addEventListener(\"pointerleave\", h), m.addEventListener(\"keydown\", E), window.addEventListener(\"blur\", w), window.addEventListener(\"focus\", C), g(() => {\n          m.removeEventListener(\"focusin\", w), m.removeEventListener(\"focusout\", D), m.removeEventListener(\"pointermove\", w), m.removeEventListener(\"pointerleave\", h), m.removeEventListener(\"keydown\", E), window.removeEventListener(\"blur\", w), window.removeEventListener(\"focus\", C);\n        });\n      }\n    });\n    function v({ tabbingDirection: g }) {\n      const w = i.value.map((C) => {\n        const D = [C, ...Jn(C)];\n        return g === \"forwards\" ? D : D.reverse();\n      });\n      return (g === \"forwards\" ? w.reverse() : w).flat();\n    }\n    return (g, m) => (b(), S(o(Qi), {\n      role: \"region\",\n      \"aria-label\": typeof o(n) == \"string\" ? o(n).replace(\"{hotkey}\", f.value) : o(n)(f.value),\n      tabindex: \"-1\",\n      style: ke({\n        // incase list has size when empty (e.g. padding), we remove pointer events so\n        // it doesn't prevent interactions with page elements that it overlays\n        pointerEvents: d.value ? void 0 : \"none\"\n      })\n    }, {\n      default: y(() => [\n        d.value ? (b(), S(ol, {\n          key: 0,\n          ref: (w) => {\n            c.value = o($e)(w);\n          },\n          onFocusFromOutsideViewport: m[0] || (m[0] = () => {\n            const w = v({\n              tabbingDirection: \"forwards\"\n            });\n            o(Oa)(w);\n          })\n        }, null, 512)) : ce(\"\", !0),\n        q(o(O), k({\n          ref: o(l),\n          tabindex: \"-1\",\n          as: g.as,\n          \"as-child\": g.asChild\n        }, g.$attrs), {\n          default: y(() => [\n            _(g.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"as\", \"as-child\"]),\n        d.value ? (b(), S(ol, {\n          key: 1,\n          ref: (w) => {\n            p.value = o($e)(w);\n          },\n          onFocusFromOutsideViewport: m[1] || (m[1] = () => {\n            const w = v({\n              tabbingDirection: \"backwards\"\n            });\n            o(Oa)(w);\n          })\n        }, null, 512)) : ce(\"\", !0)\n      ]),\n      _: 3\n    }, 8, [\"aria-label\", \"style\"]));\n  }\n}), Dg = /* @__PURE__ */ x({\n  __name: \"ToastTitle\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), $g = /* @__PURE__ */ x({\n  __name: \"ToastDescription\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(O), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Zf = /* @__PURE__ */ x({\n  __name: \"Toggle\",\n  props: {\n    defaultValue: { type: Boolean },\n    pressed: { type: Boolean, default: void 0 },\n    disabled: { type: Boolean, default: !1 },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  emits: [\"update:pressed\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t;\n    R();\n    const l = ne(e, \"pressed\", n, {\n      defaultValue: e.defaultValue,\n      passive: e.pressed === void 0\n    });\n    function s() {\n      l.value = !l.value;\n    }\n    const r = $(() => l.value ? \"on\" : \"off\");\n    return (i, u) => (b(), S(o(O), {\n      type: i.as === \"button\" ? \"button\" : void 0,\n      \"as-child\": e.asChild,\n      as: i.as,\n      \"aria-pressed\": o(l),\n      \"data-state\": r.value,\n      \"data-disabled\": i.disabled ? \"\" : void 0,\n      disabled: i.disabled,\n      onClick: s\n    }, {\n      default: y(() => [\n        _(i.$slots, \"default\", { pressed: o(l) })\n      ]),\n      _: 3\n    }, 8, [\"type\", \"as-child\", \"as\", \"aria-pressed\", \"data-state\", \"data-disabled\", \"disabled\"]));\n  }\n}), [Jf, Qf] = Q(\"ToggleGroupRoot\"), ev = /* @__PURE__ */ x({\n  __name: \"ToggleGroupRoot\",\n  props: {\n    rovingFocus: { type: Boolean, default: !0 },\n    disabled: { type: Boolean, default: !1 },\n    orientation: {},\n    dir: {},\n    loop: { type: Boolean, default: !0 },\n    asChild: { type: Boolean },\n    as: {},\n    type: {},\n    modelValue: {},\n    defaultValue: {}\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { loop: l, rovingFocus: s, disabled: r, dir: i } = ae(e), u = be(i), { forwardRef: d } = R(), { modelValue: c, changeModelValue: p, isSingle: f } = Ll(e, n);\n    return Qf({\n      isSingle: f,\n      modelValue: c,\n      changeModelValue: p,\n      dir: u,\n      orientation: e.orientation,\n      loop: l,\n      rovingFocus: s,\n      disabled: r\n    }), (v, g) => (b(), S(Ge(o(s) ? o(Ot) : o(O)), {\n      \"as-child\": \"\",\n      orientation: o(s) ? v.orientation : void 0,\n      dir: o(u),\n      loop: o(s) ? o(l) : void 0\n    }, {\n      default: y(() => [\n        q(o(O), {\n          ref: o(d),\n          role: \"group\",\n          \"as-child\": v.asChild,\n          as: v.as\n        }, {\n          default: y(() => [\n            _(v.$slots, \"default\", { modelValue: o(c) })\n          ]),\n          _: 3\n        }, 8, [\"as-child\", \"as\"])\n      ]),\n      _: 3\n    }, 8, [\"orientation\", \"dir\", \"loop\"]));\n  }\n}), tv = /* @__PURE__ */ x({\n  __name: \"ToggleGroupItem\",\n  props: {\n    value: {},\n    defaultValue: { type: Boolean },\n    pressed: { type: Boolean },\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = Jf(), n = $(() => {\n      var i;\n      return ((i = e.disabled) == null ? void 0 : i.value) || t.disabled;\n    }), l = $(() => {\n      var i;\n      return (i = e.modelValue.value) == null ? void 0 : i.includes(t.value);\n    }), s = $(() => {\n      var i;\n      return e.isSingle.value ? e.modelValue.value === t.value : (i = e.modelValue.value) == null ? void 0 : i.includes(t.value);\n    }), { forwardRef: r } = R();\n    return (i, u) => (b(), S(Ge(o(e).rovingFocus.value ? o(kt) : o(O)), {\n      \"as-child\": \"\",\n      focusable: !n.value,\n      active: l.value\n    }, {\n      default: y(() => [\n        q(o(Zf), k(t, {\n          ref: o(r),\n          disabled: n.value,\n          pressed: s.value,\n          \"onUpdate:pressed\": u[0] || (u[0] = (d) => o(e).changeModelValue(i.value))\n        }), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"disabled\", \"pressed\"])\n      ]),\n      _: 3\n    }, 8, [\"focusable\", \"active\"]));\n  }\n}), [ir, av] = Q(\"ToolbarRoot\"), Bg = /* @__PURE__ */ x({\n  __name: \"ToolbarRoot\",\n  props: {\n    orientation: { default: \"horizontal\" },\n    dir: {},\n    loop: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { orientation: e, dir: n } = ae(t), l = be(n), { forwardRef: s } = R();\n    return av({ orientation: e, dir: l }), (r, i) => (b(), S(o(Ot), {\n      \"as-child\": \"\",\n      orientation: o(e),\n      dir: o(l),\n      loop: r.loop\n    }, {\n      default: y(() => [\n        q(o(O), {\n          ref: o(s),\n          role: \"toolbar\",\n          \"aria-orientation\": o(e),\n          \"as-child\": r.asChild,\n          as: r.as\n        }, {\n          default: y(() => [\n            _(r.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"aria-orientation\", \"as-child\", \"as\"])\n      ]),\n      _: 3\n    }, 8, [\"orientation\", \"dir\", \"loop\"]));\n  }\n}), nv = /* @__PURE__ */ x({\n  __name: \"ToolbarButton\",\n  props: {\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, { forwardRef: e } = R();\n    return (n, l) => (b(), S(o(kt), {\n      \"as-child\": \"\",\n      focusable: !n.disabled\n    }, {\n      default: y(() => [\n        q(o(O), k({\n          ref: o(e),\n          type: n.as === \"button\" ? \"button\" : void 0\n        }, t), {\n          default: y(() => [\n            _(n.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"type\"])\n      ]),\n      _: 3\n    }, 8, [\"focusable\"]));\n  }\n}), Ig = /* @__PURE__ */ x({\n  __name: \"ToolbarLink\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"a\" }\n  },\n  setup(a) {\n    const t = a, { forwardRef: e } = R();\n    return (n, l) => (b(), S(o(kt), {\n      \"as-child\": \"\",\n      focusable: \"\"\n    }, {\n      default: y(() => [\n        q(o(O), k(t, {\n          ref: o(e),\n          onKeydown: l[0] || (l[0] = (s) => {\n            var r;\n            s.key === \" \" && ((r = s.currentTarget) == null || r.click());\n          })\n        }), {\n          default: y(() => [\n            _(n.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16)\n      ]),\n      _: 3\n    }));\n  }\n}), Tg = /* @__PURE__ */ x({\n  __name: \"ToolbarToggleGroup\",\n  props: {\n    rovingFocus: { type: Boolean },\n    disabled: { type: Boolean },\n    orientation: {},\n    dir: {},\n    loop: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {},\n    type: {},\n    modelValue: {},\n    defaultValue: {}\n  },\n  emits: [\"update:modelValue\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = ir(), s = Re(n);\n    return R(), (r, i) => (b(), S(o(ev), k({ ...e, ...o(s) }, {\n      \"data-orientation\": o(l).orientation.value,\n      dir: o(l).dir.value,\n      \"roving-focus\": !1\n    }), {\n      default: y(() => [\n        _(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"data-orientation\", \"dir\"]));\n  }\n}), Rg = /* @__PURE__ */ x({\n  __name: \"ToolbarToggleItem\",\n  props: {\n    value: {},\n    defaultValue: { type: Boolean },\n    pressed: { type: Boolean },\n    disabled: { type: Boolean },\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { forwardRef: e } = R();\n    return (n, l) => (b(), S(nv, { \"as-child\": \"\" }, {\n      default: y(() => [\n        q(o(tv), k(t, { ref: o(e) }), {\n          default: y(() => [\n            _(n.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16)\n      ]),\n      _: 3\n    }));\n  }\n}), Ag = /* @__PURE__ */ x({\n  __name: \"ToolbarSeparator\",\n  props: {\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, e = ir();\n    return R(), (n, l) => (b(), S(Ts, {\n      orientation: o(e).orientation.value,\n      \"as-child\": t.asChild,\n      as: n.as\n    }, {\n      default: y(() => [\n        _(n.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"orientation\", \"as-child\", \"as\"]));\n  }\n}), ur = \"tooltip.open\", [Oo, ov] = Q(\"TooltipProvider\"), Og = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"TooltipProvider\",\n  props: {\n    delayDuration: { default: 700 },\n    skipDelayDuration: { default: 300 },\n    disableHoverableContent: { type: Boolean, default: !1 },\n    disableClosingTrigger: { type: Boolean },\n    disabled: { type: Boolean },\n    ignoreNonKeyboardFocus: { type: Boolean, default: !1 }\n  },\n  setup(a) {\n    const t = a, { delayDuration: e, skipDelayDuration: n, disableHoverableContent: l, disableClosingTrigger: s, ignoreNonKeyboardFocus: r, disabled: i } = ae(t);\n    R();\n    const u = I(!0), d = I(!1), { start: c, stop: p } = Wn(() => {\n      u.value = !0;\n    }, n, { immediate: !1 });\n    return ov({\n      isOpenDelayed: u,\n      delayDuration: e,\n      onOpen() {\n        p(), u.value = !1;\n      },\n      onClose() {\n        c();\n      },\n      isPointerInTransitRef: d,\n      disableHoverableContent: l,\n      disableClosingTrigger: s,\n      disabled: i,\n      ignoreNonKeyboardFocus: r\n    }), (f, v) => _(f.$slots, \"default\");\n  }\n}), [mn, lv] = Q(\"TooltipRoot\"), kg = /* @__PURE__ */ x({\n  __name: \"TooltipRoot\",\n  props: {\n    defaultOpen: { type: Boolean, default: !1 },\n    open: { type: Boolean, default: void 0 },\n    delayDuration: { default: void 0 },\n    disableHoverableContent: { type: Boolean, default: void 0 },\n    disableClosingTrigger: { type: Boolean, default: void 0 },\n    disabled: { type: Boolean, default: void 0 },\n    ignoreNonKeyboardFocus: { type: Boolean, default: void 0 }\n  },\n  emits: [\"update:open\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t;\n    R();\n    const l = Oo(), s = $(() => e.disableHoverableContent ?? l.disableHoverableContent.value), r = $(() => e.disableClosingTrigger ?? l.disableClosingTrigger.value), i = $(() => e.disabled ?? l.disabled.value), u = $(() => e.delayDuration ?? l.delayDuration.value), d = $(() => e.ignoreNonKeyboardFocus ?? l.ignoreNonKeyboardFocus.value), c = ne(e, \"open\", n, {\n      defaultValue: e.defaultOpen,\n      passive: e.open === void 0\n    });\n    te(c, (h) => {\n      l.onClose && (h ? (l.onOpen(), document.dispatchEvent(new CustomEvent(ur))) : l.onClose());\n    });\n    const p = I(!1), f = I(), v = $(() => c.value ? p.value ? \"delayed-open\" : \"instant-open\" : \"closed\"), { start: g, stop: m } = Wn(() => {\n      p.value = !0, c.value = !0;\n    }, u, { immediate: !1 });\n    function w() {\n      m(), p.value = !1, c.value = !0;\n    }\n    function C() {\n      m(), c.value = !1;\n    }\n    function D() {\n      g();\n    }\n    return lv({\n      contentId: \"\",\n      open: c,\n      stateAttribute: v,\n      trigger: f,\n      onTriggerChange(h) {\n        f.value = h;\n      },\n      onTriggerEnter() {\n        l.isOpenDelayed.value ? D() : w();\n      },\n      onTriggerLeave() {\n        s.value ? C() : m();\n      },\n      onOpen: w,\n      onClose: C,\n      disableHoverableContent: s,\n      disableClosingTrigger: r,\n      disabled: i,\n      ignoreNonKeyboardFocus: d\n    }), (h, E) => (b(), S(o(Tt), null, {\n      default: y(() => [\n        _(h.$slots, \"default\", { open: o(c) })\n      ]),\n      _: 3\n    }));\n  }\n}), Mg = /* @__PURE__ */ x({\n  __name: \"TooltipTrigger\",\n  props: {\n    asChild: { type: Boolean },\n    as: { default: \"button\" }\n  },\n  setup(a) {\n    const t = a, e = mn(), n = Oo();\n    e.contentId || (e.contentId = he(void 0, \"radix-vue-tooltip-content\"));\n    const { forwardRef: l, currentElement: s } = R(), r = I(!1), i = I(!1), u = $(() => e.disabled.value ? {} : {\n      click: m,\n      focus: v,\n      pointermove: p,\n      pointerleave: f,\n      pointerdown: c,\n      blur: g\n    });\n    le(() => {\n      e.onTriggerChange(s.value);\n    });\n    function d() {\n      setTimeout(() => {\n        r.value = !1;\n      }, 1);\n    }\n    function c() {\n      r.value = !0, document.addEventListener(\"pointerup\", d, { once: !0 });\n    }\n    function p(w) {\n      w.pointerType !== \"touch\" && !i.value && !n.isPointerInTransitRef.value && (e.onTriggerEnter(), i.value = !0);\n    }\n    function f() {\n      e.onTriggerLeave(), i.value = !1;\n    }\n    function v(w) {\n      var C, D;\n      r.value || e.ignoreNonKeyboardFocus.value && !((D = (C = w.target).matches) != null && D.call(C, \":focus-visible\")) || e.onOpen();\n    }\n    function g() {\n      e.onClose();\n    }\n    function m() {\n      e.disableClosingTrigger.value || e.onClose();\n    }\n    return (w, C) => (b(), S(o(Rt), { \"as-child\": \"\" }, {\n      default: y(() => [\n        q(o(O), k({\n          ref: o(l),\n          \"aria-describedby\": o(e).open.value ? o(e).contentId : void 0,\n          \"data-state\": o(e).stateAttribute.value,\n          as: w.as,\n          \"as-child\": t.asChild,\n          \"data-grace-area-trigger\": \"\"\n        }, Nn(u.value)), {\n          default: y(() => [\n            _(w.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16, [\"aria-describedby\", \"data-state\", \"as\", \"as-child\"])\n      ]),\n      _: 3\n    }));\n  }\n}), dr = /* @__PURE__ */ x({\n  __name: \"TooltipContentImpl\",\n  props: {\n    ariaLabel: {},\n    asChild: { type: Boolean },\n    as: {},\n    side: { default: \"top\" },\n    sideOffset: { default: 0 },\n    align: { default: \"center\" },\n    alignOffset: {},\n    avoidCollisions: { type: Boolean, default: !0 },\n    collisionBoundary: { default: () => [] },\n    collisionPadding: { default: 0 },\n    arrowPadding: { default: 0 },\n    sticky: { default: \"partial\" },\n    hideWhenDetached: { type: Boolean, default: !1 }\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = mn(), { forwardRef: s } = R(), r = Wa(), i = $(() => {\n      var c;\n      return (c = r.default) == null ? void 0 : c.call(r);\n    }), u = $(() => {\n      var f;\n      if (e.ariaLabel)\n        return e.ariaLabel;\n      let c = \"\";\n      function p(v) {\n        typeof v.children == \"string\" && v.type !== pl ? c += v.children : Array.isArray(v.children) && v.children.forEach((g) => p(g));\n      }\n      return (f = i.value) == null || f.forEach((v) => p(v)), c;\n    }), d = $(() => {\n      const { ariaLabel: c, ...p } = e;\n      return p;\n    });\n    return le(() => {\n      Ne(window, \"scroll\", (c) => {\n        const p = c.target;\n        p != null && p.contains(l.trigger.value) && l.onClose();\n      }), Ne(window, ur, l.onClose);\n    }), (c, p) => (b(), S(o(yt), {\n      \"as-child\": \"\",\n      \"disable-outside-pointer-events\": !1,\n      onEscapeKeyDown: p[0] || (p[0] = (f) => n(\"escapeKeyDown\", f)),\n      onPointerDownOutside: p[1] || (p[1] = (f) => {\n        var v;\n        o(l).disableClosingTrigger.value && ((v = o(l).trigger.value) != null && v.contains(f.target)) && f.preventDefault(), n(\"pointerDownOutside\", f);\n      }),\n      onFocusOutside: p[2] || (p[2] = ue(() => {\n      }, [\"prevent\"])),\n      onDismiss: p[3] || (p[3] = (f) => o(l).onClose())\n    }, {\n      default: y(() => [\n        q(o(Dt), k({\n          ref: o(s),\n          \"data-state\": o(l).stateAttribute.value\n        }, { ...c.$attrs, ...d.value }, { style: {\n          \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n          \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n          \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n          \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n          \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n        } }), {\n          default: y(() => [\n            _(c.$slots, \"default\"),\n            q(o(Xt), {\n              id: o(l).contentId,\n              role: \"tooltip\"\n            }, {\n              default: y(() => [\n                me(De(u.value), 1)\n              ]),\n              _: 1\n            }, 8, [\"id\"])\n          ]),\n          _: 3\n        }, 16, [\"data-state\"])\n      ]),\n      _: 3\n    }));\n  }\n}), sv = /* @__PURE__ */ x({\n  __name: \"TooltipContentHoverable\",\n  props: {\n    ariaLabel: {},\n    asChild: { type: Boolean },\n    as: {},\n    side: {},\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean }\n  },\n  setup(a) {\n    const e = It(a), { forwardRef: n, currentElement: l } = R(), { trigger: s, onClose: r } = mn(), i = Oo(), { isPointerInTransit: u, onPointerExit: d } = Al(s, l);\n    return i.isPointerInTransitRef = u, d(() => {\n      r();\n    }), (c, p) => (b(), S(dr, k({ ref: o(n) }, o(e)), {\n      default: y(() => [\n        _(c.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Vg = /* @__PURE__ */ x({\n  __name: \"TooltipContent\",\n  props: {\n    forceMount: { type: Boolean },\n    ariaLabel: {},\n    asChild: { type: Boolean },\n    as: {},\n    side: { default: \"top\" },\n    sideOffset: {},\n    align: {},\n    alignOffset: {},\n    avoidCollisions: { type: Boolean },\n    collisionBoundary: {},\n    collisionPadding: {},\n    arrowPadding: {},\n    sticky: {},\n    hideWhenDetached: { type: Boolean }\n  },\n  emits: [\"escapeKeyDown\", \"pointerDownOutside\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, l = mn(), s = xe(e, n), { forwardRef: r } = R();\n    return (i, u) => (b(), S(o(Pe), {\n      present: i.forceMount || o(l).open.value\n    }, {\n      default: y(() => [\n        (b(), S(Ge(o(l).disableHoverableContent.value ? dr : sv), k({ ref: o(r) }, o(s)), {\n          default: y(() => [\n            _(i.$slots, \"default\")\n          ]),\n          _: 3\n        }, 16))\n      ]),\n      _: 3\n    }, 8, [\"present\"]));\n  }\n}), Fg = /* @__PURE__ */ x({\n  __name: \"TooltipArrow\",\n  props: {\n    width: { default: 10 },\n    height: { default: 5 },\n    asChild: { type: Boolean },\n    as: { default: \"svg\" }\n  },\n  setup(a) {\n    const t = a;\n    return R(), (e, n) => (b(), S(o(Yt), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n}), Lg = /* @__PURE__ */ x({\n  __name: \"TooltipPortal\",\n  props: {\n    to: {},\n    disabled: { type: Boolean },\n    forceMount: { type: Boolean }\n  },\n  setup(a) {\n    const t = a;\n    return (e, n) => (b(), S(o(ht), H(j(t)), {\n      default: y(() => [\n        _(e.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16));\n  }\n});\nfunction ko(a) {\n  return a.reduce((t, e) => (t.push(e), e.children && t.push(...ko(e.children)), t), []);\n}\nconst [cr, rv] = Q(\"TreeRoot\"), Ng = /* @__PURE__ */ x({\n  __name: \"TreeRoot\",\n  props: {\n    modelValue: {},\n    defaultValue: {},\n    items: {},\n    expanded: {},\n    defaultExpanded: {},\n    getKey: {},\n    getChildren: { type: Function, default: (a) => a.children },\n    selectionBehavior: { default: \"toggle\" },\n    multiple: { type: Boolean },\n    dir: {},\n    disabled: { type: Boolean },\n    propagateSelect: { type: Boolean },\n    asChild: { type: Boolean },\n    as: { default: \"ul\" }\n  },\n  emits: [\"update:modelValue\", \"update:expanded\"],\n  setup(a, { emit: t }) {\n    const e = a, n = t, { items: l, multiple: s, disabled: r, propagateSelect: i, dir: u } = ae(e), { handleTypeaheadSearch: d } = ga(), c = be(u), p = I(), f = I(!1), v = ia(), g = ne(e, \"modelValue\", n, {\n      // @ts-expect-error idk\n      defaultValue: e.defaultValue ?? (s.value ? [] : void 0),\n      passive: e.modelValue === void 0,\n      deep: !0\n    }), m = ne(e, \"expanded\", n, {\n      // @ts-expect-error idk\n      defaultValue: e.defaultExpanded ?? [],\n      passive: e.expanded === void 0,\n      deep: !0\n    }), { onSelectItem: w, handleMultipleReplace: C } = Fi(g, e), D = $(() => s.value && Array.isArray(g.value) ? g.value.map((T) => e.getKey(T)) : [e.getKey(g.value ?? {})]);\n    function h(T, M = 1, V) {\n      return T.reduce((A, F, U) => {\n        const W = e.getKey(F), ee = e.getChildren(F), L = m.value.includes(W), G = {\n          _id: W,\n          value: F,\n          index: U,\n          level: M,\n          parentItem: V,\n          hasChildren: !!ee,\n          bind: {\n            value: F,\n            level: M,\n            \"aria-setsize\": T.length,\n            \"aria-posinset\": U + 1\n          }\n        };\n        return A.push(G), ee && L && A.push(...h(ee, M + 1, F)), A;\n      }, []);\n    }\n    const E = $(() => {\n      const T = e.items;\n      return m.value.map((M) => M), h(T ?? []);\n    });\n    function P(T) {\n      var M;\n      if (f.value)\n        v.trigger(T);\n      else {\n        const V = (M = p.value) == null ? void 0 : M.getItems().map((A) => A.ref);\n        d(T.key, V);\n      }\n    }\n    function B(T) {\n      if (f.value)\n        return;\n      const M = Ja[T.key];\n      oe(() => {\n        var V;\n        C(\n          M,\n          document.activeElement,\n          (V = p.value) == null ? void 0 : V.getItems,\n          E.value.map((A) => A.value)\n        );\n      });\n    }\n    return rv({\n      modelValue: g,\n      selectedKeys: D,\n      onSelect: (T) => {\n        var A;\n        const M = (F) => e.getKey(F ?? {}) === e.getKey(T), V = e.multiple && Array.isArray(g.value) ? ((A = g.value) == null ? void 0 : A.findIndex(M)) !== -1 : void 0;\n        if (w(T, M), e.propagateSelect && e.multiple && Array.isArray(g.value)) {\n          const F = ko(e.getChildren(T) ?? []);\n          V ? g.value = [...g.value].filter((U) => !F.some((W) => e.getKey(U ?? {}) === e.getKey(W))) : g.value = [...g.value, ...F];\n        }\n      },\n      expanded: m,\n      onToggle(T) {\n        if (!(T ? e.getChildren(T) : void 0))\n          return;\n        const V = e.getKey(T) ?? T;\n        m.value.includes(V) ? m.value = m.value.filter((A) => A !== V) : m.value.push(V);\n      },\n      getKey: e.getKey,\n      getChildren: e.getChildren,\n      items: l,\n      expandedItems: E,\n      disabled: r,\n      multiple: s,\n      dir: c,\n      propagateSelect: i,\n      isVirtual: f,\n      virtualKeydownHook: v,\n      handleMultipleReplace: C\n    }), (T, M) => (b(), S(o(Ot), {\n      ref_key: \"rovingFocusGroupRef\",\n      ref: p,\n      \"as-child\": \"\",\n      orientation: \"vertical\",\n      dir: o(c)\n    }, {\n      default: y(() => [\n        q(o(O), {\n          role: \"tree\",\n          as: T.as,\n          \"as-child\": T.asChild,\n          \"aria-multiselectable\": o(s) ? !0 : void 0,\n          onKeydown: [\n            P,\n            ie(ue(B, [\"shift\"]), [\"up\", \"down\"])\n          ]\n        }, {\n          default: y(() => [\n            _(T.$slots, \"default\", {\n              flattenItems: E.value,\n              modelValue: o(g),\n              expanded: o(m)\n            })\n          ]),\n          _: 3\n        }, 8, [\"as\", \"as-child\", \"aria-multiselectable\", \"onKeydown\"])\n      ]),\n      _: 3\n    }, 8, [\"dir\"]));\n  }\n}), iv = \"tree.select\", uv = \"tree.toggle\", zg = /* @__PURE__ */ x({\n  inheritAttrs: !1,\n  __name: \"TreeItem\",\n  props: {\n    value: {},\n    level: {},\n    asChild: { type: Boolean },\n    as: { default: \"li\" }\n  },\n  emits: [\"select\", \"toggle\"],\n  setup(a, { expose: t, emit: e }) {\n    const n = a, l = e, s = cr(), { getItems: r } = Jt(), i = $(() => !!s.getChildren(n.value)), u = $(() => {\n      const C = s.getKey(n.value);\n      return s.expanded.value.includes(C);\n    }), d = $(() => {\n      const C = s.getKey(n.value);\n      return s.selectedKeys.value.includes(C);\n    }), c = $(() => {\n      if (s.propagateSelect.value && d.value && i.value && Array.isArray(s.modelValue.value))\n        return !ko(s.getChildren(n.value) || []).every((D) => s.modelValue.value.find((h) => s.getKey(h) === s.getKey(D)));\n    });\n    function p(C) {\n      if (i.value)\n        if (u.value) {\n          const D = r().map((T) => T.ref), h = document.activeElement, E = D.indexOf(h), B = [...D].slice(E).find((T) => Number(T.getAttribute(\"data-indent\")) === n.level + 1);\n          B && B.focus();\n        } else\n          w(C);\n    }\n    function f(C) {\n      if (u.value)\n        w(C);\n      else {\n        const D = r().map((T) => T.ref), h = document.activeElement, E = D.indexOf(h), B = [...D].slice(0, E).reverse().find((T) => Number(T.getAttribute(\"data-indent\")) === n.level - 1);\n        B && B.focus();\n      }\n    }\n    async function v(C) {\n      l(\"select\", C), !(C != null && C.defaultPrevented) && s.onSelect(n.value);\n    }\n    async function g(C) {\n      l(\"toggle\", C), !(C != null && C.defaultPrevented) && s.onToggle(n.value);\n    }\n    async function m(C) {\n      if (!C)\n        return;\n      const D = { originalEvent: C, value: n.value, isExpanded: u.value, isSelected: d.value };\n      Kt(iv, v, D);\n    }\n    async function w(C) {\n      if (!C)\n        return;\n      const D = { originalEvent: C, value: n.value, isExpanded: u.value, isSelected: d.value };\n      Kt(uv, g, D);\n    }\n    return t({\n      isExpanded: u,\n      isSelected: d,\n      isIndeterminate: c,\n      handleToggle: () => s.onToggle(n.value),\n      handleSelect: () => s.onSelect(n.value)\n    }), (C, D) => (b(), S(o(kt), {\n      \"as-child\": \"\",\n      value: C.value,\n      \"allow-shift-key\": \"\"\n    }, {\n      default: y(() => [\n        q(o(O), k(C.$attrs, {\n          role: \"treeitem\",\n          as: C.as,\n          \"as-child\": C.asChild,\n          \"aria-selected\": d.value,\n          \"aria-expanded\": i.value ? u.value : void 0,\n          \"aria-level\": C.level,\n          \"data-indent\": C.level,\n          \"data-selected\": d.value ? \"\" : void 0,\n          \"data-expanded\": u.value ? \"\" : void 0,\n          onKeydown: [\n            ie(ue(m, [\"self\", \"prevent\"]), [\"enter\", \"space\"]),\n            D[0] || (D[0] = ie(ue((h) => o(s).dir.value === \"ltr\" ? p(h) : f(h), [\"prevent\"]), [\"right\"])),\n            D[1] || (D[1] = ie(ue((h) => o(s).dir.value === \"ltr\" ? f(h) : p(h), [\"prevent\"]), [\"left\"]))\n          ],\n          onClick: D[2] || (D[2] = ue((h) => {\n            m(h), w(h);\n          }, [\"stop\"]))\n        }), {\n          default: y(() => [\n            _(C.$slots, \"default\", {\n              isExpanded: u.value,\n              isSelected: d.value,\n              isIndeterminate: c.value,\n              handleSelect: () => o(s).onSelect(C.value),\n              handleToggle: () => o(s).onToggle(C.value)\n            })\n          ]),\n          _: 3\n        }, 16, [\"as\", \"as-child\", \"aria-selected\", \"aria-expanded\", \"aria-level\", \"data-indent\", \"data-selected\", \"data-expanded\", \"onKeydown\"])\n      ]),\n      _: 3\n    }, 8, [\"value\"]));\n  }\n}), Kg = /* @__PURE__ */ x({\n  __name: \"TreeVirtualizer\",\n  props: {\n    estimateSize: {},\n    textContent: { type: Function }\n  },\n  setup(a) {\n    const t = a, e = Wa(), n = cr(), l = Tl(), { getItems: s } = Jt(), r = $t(\"\", 1e3), i = $(() => {\n      const f = (v) => t.textContent ? t.textContent(v) : v.toString().toLowerCase();\n      return n.expandedItems.value.map((v, g) => ({\n        index: g,\n        textContent: f(v.value)\n      }));\n    });\n    n.isVirtual.value = !0;\n    const u = $(() => {\n      const f = l.value;\n      if (f) {\n        const v = window.getComputedStyle(f);\n        return {\n          start: Number.parseFloat(v.paddingBlockStart || v.paddingTop),\n          end: Number.parseFloat(v.paddingBlockEnd || v.paddingBottom)\n        };\n      } else\n        return { start: 0, end: 0 };\n    }), d = us(\n      {\n        get scrollPaddingStart() {\n          return u.value.start;\n        },\n        get scrollPaddingEnd() {\n          return u.value.end;\n        },\n        get count() {\n          return n.expandedItems.value.length ?? 0;\n        },\n        get horizontal() {\n          return !1;\n        },\n        getItemKey(f) {\n          return f + n.getKey(n.expandedItems.value[f].value);\n        },\n        estimateSize() {\n          return t.estimateSize ?? 28;\n        },\n        getScrollElement() {\n          return l.value;\n        },\n        overscan: 12\n      }\n    ), c = $(() => d.value.getVirtualItems().map((f) => ({\n      item: f,\n      is: Fn(e.default({\n        item: n.expandedItems.value[f.index],\n        virtualizer: d.value,\n        virtualItem: f\n      })[0], {\n        \"data-index\": f.index,\n        style: {\n          position: \"absolute\",\n          top: 0,\n          left: 0,\n          transform: `translateY(${f.start}px)`,\n          overflowAnchor: \"none\"\n        }\n      })\n    })));\n    function p(f) {\n      d.value.scrollToIndex(f, { align: \"start\" }), requestAnimationFrame(() => {\n        const v = l.value.querySelector(`[data-index=\"${f}\"]`);\n        v instanceof HTMLElement && v.focus();\n      });\n    }\n    return n.virtualKeydownHook.on((f) => {\n      var w;\n      const v = f.altKey || f.ctrlKey || f.metaKey;\n      if (f.key === \"Tab\" && !v)\n        return;\n      const m = Ja[f.key];\n      if ([\"first\", \"last\"].includes(m)) {\n        f.preventDefault();\n        const C = m === \"first\" ? 0 : n.expandedItems.value.length - 1;\n        d.value.scrollToIndex(C), requestAnimationFrame(() => {\n          const D = s();\n          (m === \"first\" ? D[0] : D[D.length - 1]).ref.focus();\n        });\n      } else if (m === \"prev\" && f.key !== \"ArrowUp\") {\n        const C = document.activeElement, D = Number(C.getAttribute(\"data-index\")), h = Number(C.getAttribute(\"data-indent\")), P = n.expandedItems.value.slice(0, D).map((B, T) => ({ ...B, index: T })).reverse().find((B) => B.level === h - 1);\n        P && p(P.index);\n      } else if (!m && !v) {\n        r.value += f.key;\n        const C = Number((w = document.activeElement) == null ? void 0 : w.getAttribute(\"data-index\")), D = i.value[C].textContent, h = i.value.map((B) => B.textContent), E = Yn(h, r.value, D), P = i.value.find((B) => B.textContent === E);\n        P && p(P.index);\n      }\n      oe(() => {\n        f.shiftKey && m && n.handleMultipleReplace(m, document.activeElement, s, n.expandedItems.value.map((C) => C.value));\n      });\n    }), (f, v) => (b(), ve(\"div\", {\n      \"data-radix-vue-virtualizer\": \"\",\n      style: ke({\n        position: \"relative\",\n        width: \"100%\",\n        height: `${o(d).getTotalSize()}px`\n      })\n    }, [\n      (b(!0), ve(we, null, va(c.value, ({ is: g, item: m }) => (b(), S(Ge(g), {\n        key: m.key\n      }))), 128))\n    ], 4));\n  }\n}), Hg = /* @__PURE__ */ x({\n  __name: \"Viewport\",\n  props: {\n    nonce: {},\n    asChild: { type: Boolean },\n    as: {}\n  },\n  setup(a) {\n    const t = a, { forwardRef: e } = R(), { nonce: n } = ae(t), l = Xa(n);\n    return (s, r) => (b(), ve(we, null, [\n      q(o(O), k({ ...s.$attrs, ...t }, {\n        ref: o(e),\n        \"data-radix-viewport\": \"\",\n        role: \"presentation\",\n        style: {\n          // we use position: 'relative' here on the `viewport` so that when we call\n          // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n          // (independent of the scrollUpButton).\n          position: \"relative\",\n          flex: 1,\n          overflow: \"auto\"\n        }\n      }), {\n        default: y(() => [\n          _(s.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16),\n      q(o(O), {\n        as: \"style\",\n        nonce: o(l)\n      }, {\n        default: y(() => [\n          me(\" /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-radix-viewport] { scrollbar-width:none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } [data-radix-viewport]::-webkit-scrollbar { display: none; } \")\n        ]),\n        _: 1\n      }, 8, [\"nonce\"])\n    ], 64));\n  }\n});\nexport {\n  bv as AccordionContent,\n  Cv as AccordionHeader,\n  gv as AccordionItem,\n  yv as AccordionRoot,\n  wv as AccordionTrigger,\n  Tv as AlertDialogAction,\n  $v as AlertDialogCancel,\n  Pv as AlertDialogContent,\n  Iv as AlertDialogDescription,\n  Dv as AlertDialogOverlay,\n  Ev as AlertDialogPortal,\n  xv as AlertDialogRoot,\n  Bv as AlertDialogTitle,\n  Sv as AlertDialogTrigger,\n  Rv as AspectRatio,\n  kv as AvatarFallback,\n  Ov as AvatarImage,\n  Av as AvatarRoot,\n  Lu as CalendarCell,\n  Uu as CalendarCellTrigger,\n  Fu as CalendarGrid,\n  Wu as CalendarGridBody,\n  Hu as CalendarGridHead,\n  ju as CalendarGridRow,\n  Nu as CalendarHeadCell,\n  Mu as CalendarHeader,\n  Vu as CalendarHeading,\n  zu as CalendarNext,\n  Ku as CalendarPrev,\n  ku as CalendarRoot,\n  Vv as CheckboxIndicator,\n  Mv as CheckboxRoot,\n  Hi as CollapsibleContent,\n  Ni as CollapsibleRoot,\n  zi as CollapsibleTrigger,\n  Nv as ComboboxAnchor,\n  Zv as ComboboxArrow,\n  Kv as ComboboxCancel,\n  jv as ComboboxContent,\n  Uv as ComboboxEmpty,\n  Hv as ComboboxGroup,\n  Lv as ComboboxInput,\n  qv as ComboboxItem,\n  Yv as ComboboxItemIndicator,\n  Wv as ComboboxLabel,\n  Jv as ComboboxPortal,\n  Fv as ComboboxRoot,\n  Xv as ComboboxSeparator,\n  zv as ComboboxTrigger,\n  Gv as ComboboxViewport,\n  mv as ConfigProvider,\n  nm as ContextMenuArrow,\n  rm as ContextMenuCheckboxItem,\n  am as ContextMenuContent,\n  lm as ContextMenuGroup,\n  om as ContextMenuItem,\n  im as ContextMenuItemIndicator,\n  um as ContextMenuLabel,\n  tm as ContextMenuPortal,\n  dm as ContextMenuRadioGroup,\n  cm as ContextMenuRadioItem,\n  Qv as ContextMenuRoot,\n  sm as ContextMenuSeparator,\n  pm as ContextMenuSub,\n  fm as ContextMenuSubContent,\n  vm as ContextMenuSubTrigger,\n  em as ContextMenuTrigger,\n  qd as DateFieldInput,\n  Vd as DateFieldRoot,\n  Im as DatePickerAnchor,\n  Tm as DatePickerArrow,\n  $m as DatePickerCalendar,\n  gm as DatePickerCell,\n  Em as DatePickerCellTrigger,\n  Rm as DatePickerClose,\n  Om as DatePickerContent,\n  Bm as DatePickerField,\n  ym as DatePickerGrid,\n  xm as DatePickerGridBody,\n  _m as DatePickerGridHead,\n  Sm as DatePickerGridRow,\n  bm as DatePickerHeadCell,\n  mm as DatePickerHeader,\n  hm as DatePickerHeading,\n  Pm as DatePickerInput,\n  Cm as DatePickerNext,\n  wm as DatePickerPrev,\n  Dm as DatePickerRoot,\n  Am as DatePickerTrigger,\n  tc as DateRangeFieldInput,\n  ec as DateRangeFieldRoot,\n  Xm as DateRangePickerAnchor,\n  Zm as DateRangePickerArrow,\n  qm as DateRangePickerCalendar,\n  Fm as DateRangePickerCell,\n  jm as DateRangePickerCellTrigger,\n  Jm as DateRangePickerClose,\n  eh as DateRangePickerContent,\n  Ym as DateRangePickerField,\n  Vm as DateRangePickerGrid,\n  Hm as DateRangePickerGridBody,\n  Km as DateRangePickerGridHead,\n  Wm as DateRangePickerGridRow,\n  Lm as DateRangePickerHeadCell,\n  km as DateRangePickerHeader,\n  Mm as DateRangePickerHeading,\n  Um as DateRangePickerInput,\n  Nm as DateRangePickerNext,\n  zm as DateRangePickerPrev,\n  Gm as DateRangePickerRoot,\n  Qm as DateRangePickerTrigger,\n  jl as DialogClose,\n  gu as DialogContent,\n  _u as DialogDescription,\n  Cu as DialogOverlay,\n  _v as DialogPortal,\n  Yi as DialogRoot,\n  wu as DialogTitle,\n  Xi as DialogTrigger,\n  lh as DropdownMenuArrow,\n  uh as DropdownMenuCheckboxItem,\n  oh as DropdownMenuContent,\n  rh as DropdownMenuGroup,\n  sh as DropdownMenuItem,\n  dh as DropdownMenuItemIndicator,\n  ch as DropdownMenuLabel,\n  nh as DropdownMenuPortal,\n  ph as DropdownMenuRadioGroup,\n  fh as DropdownMenuRadioItem,\n  th as DropdownMenuRoot,\n  ih as DropdownMenuSeparator,\n  vh as DropdownMenuSub,\n  mh as DropdownMenuSubContent,\n  hh as DropdownMenuSubTrigger,\n  ah as DropdownMenuTrigger,\n  gh as EditableArea,\n  _h as EditableCancelTrigger,\n  xh as EditableEditTrigger,\n  bh as EditableInput,\n  Ch as EditablePreview,\n  yh as EditableRoot,\n  wh as EditableSubmitTrigger,\n  $h as HoverCardArrow,\n  Dh as HoverCardContent,\n  Ph as HoverCardPortal,\n  Sh as HoverCardRoot,\n  Eh as HoverCardTrigger,\n  Bh as Label,\n  Th as ListboxContent,\n  Rh as ListboxFilter,\n  Mh as ListboxGroup,\n  Vh as ListboxGroupLabel,\n  Ah as ListboxItem,\n  Oh as ListboxItemIndicator,\n  Ih as ListboxRoot,\n  kh as ListboxVirtualizer,\n  Hh as MenubarArrow,\n  Gh as MenubarCheckboxItem,\n  Kh as MenubarContent,\n  jh as MenubarGroup,\n  Wh as MenubarItem,\n  qh as MenubarItemIndicator,\n  Yh as MenubarLabel,\n  Lh as MenubarMenu,\n  zh as MenubarPortal,\n  Xh as MenubarRadioGroup,\n  Zh as MenubarRadioItem,\n  Fh as MenubarRoot,\n  Uh as MenubarSeparator,\n  Jh as MenubarSub,\n  Qh as MenubarSubContent,\n  ey as MenubarSubTrigger,\n  Nh as MenubarTrigger,\n  ny as NavigationMenuContent,\n  oy as NavigationMenuIndicator,\n  ay as NavigationMenuItem,\n  ly as NavigationMenuLink,\n  sy as NavigationMenuList,\n  ty as NavigationMenuRoot,\n  ry as NavigationMenuSub,\n  iy as NavigationMenuTrigger,\n  uy as NavigationMenuViewport,\n  fy as NumberFieldDecrement,\n  py as NumberFieldIncrement,\n  cy as NumberFieldInput,\n  dy as NumberFieldRoot,\n  my as PaginationEllipsis,\n  hy as PaginationFirst,\n  yy as PaginationLast,\n  gy as PaginationList,\n  by as PaginationListItem,\n  Cy as PaginationNext,\n  wy as PaginationPrev,\n  vy as PaginationRoot,\n  xy as PinInputInput,\n  _y as PinInputRoot,\n  _s as PopoverAnchor,\n  Cs as PopoverArrow,\n  ws as PopoverClose,\n  bs as PopoverContent,\n  ys as PopoverPortal,\n  ms as PopoverRoot,\n  hs as PopoverTrigger,\n  O as Primitive,\n  Ey as ProgressIndicator,\n  Sy as ProgressRoot,\n  $y as RadioGroupIndicator,\n  Dy as RadioGroupItem,\n  Py as RadioGroupRoot,\n  pp as RangeCalendarCell,\n  bp as RangeCalendarCellTrigger,\n  cp as RangeCalendarGrid,\n  yp as RangeCalendarGridBody,\n  hp as RangeCalendarGridHead,\n  gp as RangeCalendarGridRow,\n  fp as RangeCalendarHeadCell,\n  up as RangeCalendarHeader,\n  dp as RangeCalendarHeading,\n  vp as RangeCalendarNext,\n  mp as RangeCalendarPrev,\n  ip as RangeCalendarRoot,\n  Ay as ScrollAreaCorner,\n  By as ScrollAreaRoot,\n  Ty as ScrollAreaScrollbar,\n  Ry as ScrollAreaThumb,\n  Iy as ScrollAreaViewport,\n  Fy as SelectArrow,\n  Vy as SelectContent,\n  Ky as SelectGroup,\n  Yy as SelectIcon,\n  Ny as SelectItem,\n  zy as SelectItemIndicator,\n  Wy as SelectItemText,\n  Hy as SelectLabel,\n  My as SelectPortal,\n  Oy as SelectRoot,\n  Gy as SelectScrollDownButton,\n  Uy as SelectScrollUpButton,\n  Ly as SelectSeparator,\n  ky as SelectTrigger,\n  qy as SelectValue,\n  jy as SelectViewport,\n  Gp as Separator,\n  Qy as SliderRange,\n  Xy as SliderRoot,\n  Zy as SliderThumb,\n  Jy as SliderTrack,\n  Xn as Slot,\n  eg as SplitterGroup,\n  tg as SplitterPanel,\n  ag as SplitterResizeHandle,\n  sg as StepperDescription,\n  ig as StepperIndicator,\n  og as StepperItem,\n  ng as StepperRoot,\n  ug as StepperSeparator,\n  rg as StepperTitle,\n  lg as StepperTrigger,\n  dg as SwitchRoot,\n  cg as SwitchThumb,\n  vg as TabsContent,\n  hg as TabsIndicator,\n  fg as TabsList,\n  pg as TabsRoot,\n  mg as TabsTrigger,\n  _g as TagsInputClear,\n  gg as TagsInputInput,\n  bg as TagsInputItem,\n  wg as TagsInputItemDelete,\n  Cg as TagsInputItemText,\n  yg as TagsInputRoot,\n  Eg as ToastAction,\n  Xf as ToastClose,\n  $g as ToastDescription,\n  xg as ToastProvider,\n  Sg as ToastRoot,\n  Dg as ToastTitle,\n  Pg as ToastViewport,\n  Zf as Toggle,\n  tv as ToggleGroupItem,\n  ev as ToggleGroupRoot,\n  nv as ToolbarButton,\n  Ig as ToolbarLink,\n  Bg as ToolbarRoot,\n  Ag as ToolbarSeparator,\n  Tg as ToolbarToggleGroup,\n  Rg as ToolbarToggleItem,\n  Fg as TooltipArrow,\n  Vg as TooltipContent,\n  Lg as TooltipPortal,\n  Og as TooltipProvider,\n  kg as TooltipRoot,\n  Mg as TooltipTrigger,\n  zg as TreeItem,\n  Ng as TreeRoot,\n  Kg as TreeVirtualizer,\n  Hg as Viewport,\n  Xt as VisuallyHidden,\n  Q as createContext,\n  ha as useBodyScrollLock,\n  Un as useDateFormatter,\n  Re as useEmitAsProps,\n  R as useForwardExpose,\n  It as useForwardProps,\n  xe as useForwardPropsEmits,\n  he as useId,\n  Ml as useStateMachine,\n  hv as withDefault\n};\n","(function(){\"use strict\";try{if(typeof document<\"u\"){var e=document.createElement(\"style\");e.appendChild(document.createTextNode('[vaul-drawer]{touch-action:none;transform:translate3d(0,100%,0);transition:transform .5s cubic-bezier(.32,.72,0,1)}.vaul-dragging .vaul-scrollable{overflow-y:hidden!important}[vaul-drawer][vaul-drawer-visible=true]{transform:translate3d(0,var(--snap-point-height, 0),0)}[vaul-overlay]{opacity:0;transition:opacity .5s cubic-bezier(.32,.72,0,1)}[vaul-overlay][vaul-drawer-visible=true]{opacity:1}[vaul-drawer]:after{content:\"\";position:absolute;top:100%;background:inherit;background-color:inherit;left:0;right:0;height:200%}[vaul-overlay][vaul-snap-points=true]:not([vaul-snap-points-overlay=true]):not([data-state=closed]){opacity:0}[vaul-overlay][vaul-snap-points-overlay=true]:not([vaul-drawer-visible=false]){opacity:1}@keyframes fake-animation{}@media (hover: hover) and (pointer: fine){[vaul-drawer]{-webkit-user-select:none;user-select:none}}')),document.head.appendChild(e)}}catch(a){console.error(\"vite-plugin-css-injected-by-js\",a)}})();\nimport { getCurrentInstance as He, ref as O, watch as z, nextTick as he, computed as H, onMounted as Le, onUnmounted as Me, watchEffect as je, defineComponent as F, useSlots as Ve, toRefs as ze, openBlock as ee, createBlock as te, unref as N, withCtx as oe, renderSlot as ie, mergeProps as We, normalizeStyle as ke } from \"vue\";\nimport { createContext as Ie, DialogRoot as Ye, useForwardPropsEmits as qe, DialogOverlay as Ge, DialogContent as Je } from \"radix-vue\";\nimport { DialogClose as mt, DialogDescription as gt, DialogPortal as wt, DialogTitle as ht, DialogTrigger as bt } from \"radix-vue\";\nconst Ke = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst Xe = (n) => typeof n < \"u\";\nfunction Qe(n) {\n  return JSON.parse(JSON.stringify(n));\n}\nfunction me(n, t, s, i = {}) {\n  var e, g, w;\n  const {\n    clone: $ = !1,\n    passive: f = !1,\n    eventName: o,\n    deep: b = !1,\n    defaultValue: v,\n    shouldEmit: _\n  } = i, R = He(), y = s || (R == null ? void 0 : R.emit) || ((e = R == null ? void 0 : R.$emit) == null ? void 0 : e.bind(R)) || ((w = (g = R == null ? void 0 : R.proxy) == null ? void 0 : g.$emit) == null ? void 0 : w.bind(R == null ? void 0 : R.proxy));\n  let l = o;\n  t || (t = \"modelValue\"), l = l || `update:${t.toString()}`;\n  const r = (c) => $ ? typeof $ == \"function\" ? $(c) : Qe(c) : c, u = () => Xe(n[t]) ? r(n[t]) : v, T = (c) => {\n    _ ? _(c) && y(l, c) : y(l, c);\n  };\n  if (f) {\n    const c = u(), S = O(c);\n    let P = !1;\n    return z(\n      () => n[t],\n      (C) => {\n        P || (P = !0, S.value = r(C), he(() => P = !1));\n      }\n    ), z(\n      S,\n      (C) => {\n        !P && (C !== n[t] || b) && T(C);\n      },\n      { deep: b }\n    ), S;\n  } else\n    return H({\n      get() {\n        return u();\n      },\n      set(c) {\n        T(c);\n      }\n    });\n}\nconst [le, Ze] = Ie(\"DrawerRoot\"), be = /* @__PURE__ */ new WeakMap();\nfunction h(n, t, s = !1) {\n  if (!n || !(n instanceof HTMLElement) || !t)\n    return;\n  const i = {};\n  Object.entries(t).forEach(([e, g]) => {\n    if (e.startsWith(\"--\")) {\n      n.style.setProperty(e, g);\n      return;\n    }\n    i[e] = n.style[e], n.style[e] = g;\n  }), !s && be.set(n, i);\n}\nfunction Q(n, t) {\n  if (!n || !(n instanceof HTMLElement))\n    return;\n  const s = be.get(n);\n  s && (t ? n.style[t] = s[t] : Object.entries(s).forEach(([i, e]) => {\n    n.style[i] = e;\n  }));\n}\nfunction Z(n) {\n  const t = window.getComputedStyle(n), s = t.transform || t.webkitTransform || t.mozTransform;\n  let i = s.match(/^matrix3d\\((.+)\\)$/);\n  return i ? Number.parseFloat(i[1].split(\", \")[13]) : (i = s.match(/^matrix\\((.+)\\)$/), i ? Number.parseFloat(i[1].split(\", \")[5]) : null);\n}\nfunction Fe(n) {\n  return 8 * (Math.log(n + 1) - 2);\n}\nconst m = {\n  DURATION: 0.5,\n  EASE: [0.32, 0.72, 0, 1]\n}, ye = 0.4;\nfunction et({\n  activeSnapPoint: n,\n  snapPoints: t,\n  drawerRef: s,\n  overlayRef: i,\n  fadeFromIndex: e,\n  onSnapPointChange: g\n}) {\n  const w = H(\n    () => (t.value && n.value === t.value[t.value.length - 1]) ?? null\n  ), $ = H(\n    () => t.value && t.value.length > 0 && ((e == null ? void 0 : e.value) || (e == null ? void 0 : e.value) === 0) && !Number.isNaN(e == null ? void 0 : e.value) && t.value[(e == null ? void 0 : e.value) ?? -1] === n.value || !t.value\n  ), f = H(\n    () => {\n      var l;\n      return ((l = t.value) == null ? void 0 : l.findIndex((r) => r === n.value)) ?? null;\n    }\n  ), o = H(\n    () => {\n      var l;\n      return ((l = t.value) == null ? void 0 : l.map((r) => {\n        const u = typeof window < \"u\", T = typeof r == \"string\";\n        let c = 0;\n        T && (c = Number.parseInt(r, 10));\n        const S = T ? c : u ? r * window.innerHeight : 0;\n        return u ? window.innerHeight - S : S;\n      })) ?? [];\n    }\n  ), b = H(\n    () => {\n      var l;\n      return f.value !== null ? (l = o.value) == null ? void 0 : l[f.value] : null;\n    }\n  ), v = (l) => {\n    var u, T, c, S;\n    const r = ((u = o.value) == null ? void 0 : u.findIndex((P) => P === l)) ?? null;\n    he(() => {\n      var P;\n      g(r, o.value), h((P = s.value) == null ? void 0 : P.$el, {\n        transition: `transform ${m.DURATION}s cubic-bezier(${m.EASE.join(\",\")})`,\n        transform: `translate3d(0, ${l}px, 0)`\n      });\n    }), o.value && r !== o.value.length - 1 && r !== (e == null ? void 0 : e.value) ? h((T = i.value) == null ? void 0 : T.$el, {\n      transition: `opacity ${m.DURATION}s cubic-bezier(${m.EASE.join(\",\")})`,\n      opacity: \"0\"\n    }) : h((c = i.value) == null ? void 0 : c.$el, {\n      transition: `opacity ${m.DURATION}s cubic-bezier(${m.EASE.join(\",\")})`,\n      opacity: \"1\"\n    }), n.value = r !== null ? ((S = t.value) == null ? void 0 : S[r]) ?? null : null;\n  };\n  z(\n    [n, o, t],\n    () => {\n      var l;\n      if (n.value) {\n        const r = ((l = t.value) == null ? void 0 : l.findIndex((u) => u === n.value)) ?? -1;\n        o.value && r !== -1 && typeof o.value[r] == \"number\" && v(o.value[r]);\n      }\n    },\n    {\n      immediate: !0\n      // if you want to run the effect immediately as well\n    }\n  );\n  function _({\n    draggedDistance: l,\n    closeDrawer: r,\n    velocity: u,\n    dismissible: T\n  }) {\n    var L, j, W;\n    if (e === void 0)\n      return;\n    const c = (b.value ?? 0) - l, S = f.value === (e.value ?? 0) - 1, P = f.value === 0, C = l > 0;\n    if (S && h((L = i.value) == null ? void 0 : L.$el, {\n      transition: `opacity ${m.DURATION}s cubic-bezier(${m.EASE.join(\",\")})`\n    }), u > 2 && !C) {\n      T ? r() : v(o.value[0]);\n      return;\n    }\n    if (u > 2 && C && o && t.value) {\n      v(o.value[t.value.length - 1]);\n      return;\n    }\n    const G = (j = o.value) == null ? void 0 : j.reduce((B, I) => typeof B != \"number\" || typeof I != \"number\" ? B : Math.abs(I - c) < Math.abs(B - c) ? I : B);\n    if (u > ye && Math.abs(l) < window.innerHeight * 0.4) {\n      const B = C ? 1 : -1;\n      if (B > 0 && w) {\n        v(o.value[(((W = t.value) == null ? void 0 : W.length) ?? 0) - 1]);\n        return;\n      }\n      if (P && B < 0 && T && r(), f.value === null)\n        return;\n      v(o.value[f.value + B]);\n      return;\n    }\n    v(G);\n  }\n  function R({ draggedDistance: l }) {\n    var u;\n    if (b.value === null)\n      return;\n    const r = b.value - l;\n    h((u = s.value) == null ? void 0 : u.$el, {\n      transform: `translate3d(0, ${r}px, 0)`\n    });\n  }\n  function y(l, r) {\n    if (!t || typeof f.value != \"number\" || !o.value || e === void 0)\n      return null;\n    const u = f.value === (e.value ?? 0) - 1;\n    if (f.value >= (e.value ?? 0) && r)\n      return 0;\n    if (u && !r)\n      return 1;\n    if (!$.value && !u)\n      return null;\n    const c = u ? f.value + 1 : f.value - 1, S = u ? o.value[c] - o.value[c - 1] : o.value[c + 1] - o.value[c], P = l / Math.abs(S);\n    return u ? 1 - P : P;\n  }\n  return {\n    isLastSnapPoint: w,\n    shouldFade: $,\n    getPercentageDragged: y,\n    activeSnapPointIndex: f,\n    onRelease: _,\n    onDrag: R,\n    snapPointsOffset: o\n  };\n}\nlet q = null;\nfunction tt(n) {\n  const { isOpen: t, modal: s, nested: i, hasBeenOpened: e } = n, g = O(typeof window < \"u\" ? window.location.href : \"\"), w = O(0);\n  function $() {\n    if (q === null && t.value) {\n      q = {\n        position: document.body.style.position,\n        top: document.body.style.top,\n        left: document.body.style.left,\n        height: document.body.style.height\n      };\n      const { scrollX: o, innerHeight: b } = window;\n      document.body.style.position = \"fixed\", document.body.style.top = `-${w.value}px`, document.body.style.left = `-${o}px`, document.body.style.right = \"0px\", document.body.style.height = \"auto\", setTimeout(() => {\n        requestAnimationFrame(() => {\n          const v = b - window.innerHeight;\n          v && w.value >= b && (document.body.style.top = `-${w.value + v}px`);\n        });\n      }, 300);\n    }\n  }\n  function f() {\n    if (q !== null) {\n      const o = -Number.parseInt(document.body.style.top, 10), b = -Number.parseInt(document.body.style.left, 10);\n      Object.assign(document.body.style, q), requestAnimationFrame(() => {\n        if (g.value !== window.location.href) {\n          g.value = window.location.href;\n          return;\n        }\n        window.scrollTo(b, o);\n      }), q = null;\n    }\n  }\n  return Le(() => {\n    function o() {\n      w.value = window.scrollY;\n    }\n    o(), window.addEventListener(\"scroll\", o), Me(() => {\n      window.removeEventListener(\"scroll\", o);\n    });\n  }), z([t, e, g], () => {\n    i.value || !e.value || (t.value ? ($(), s || setTimeout(() => {\n      f();\n    }, 500)) : f());\n  }), { restorePositionSetting: f };\n}\nconst nt = 0.25, at = 100, ge = 8, V = 16, ot = 26, we = \"vaul-dragging\";\nfunction it(n, t) {\n  return n && n.value ? n : t;\n}\nfunction lt(n) {\n  const {\n    emitDrag: t,\n    emitRelease: s,\n    emitClose: i,\n    emitOpenChange: e,\n    open: g,\n    dismissible: w,\n    nested: $,\n    fixed: f,\n    modal: o,\n    shouldScaleBackground: b,\n    scrollLockTimeout: v,\n    closeThreshold: _,\n    activeSnapPoint: R,\n    fadeFromIndex: y\n  } = n, l = O(g.value ?? !1), r = O(!1), u = O(!1), T = O(!1), c = O(!1), S = O(null), P = O(null), C = O(null), G = O(null), L = O(null), j = O(!0), W = O(null), B = O(0), I = O(!1);\n  O(0);\n  const d = O(null);\n  O(0);\n  const re = H(() => {\n    var a;\n    return ((a = d.value) == null ? void 0 : a.$el.getBoundingClientRect().height) || 0;\n  }), U = it(\n    n.snapPoints,\n    O(void 0)\n  ), {\n    activeSnapPointIndex: se,\n    onRelease: De,\n    snapPointsOffset: $e,\n    onDrag: Se,\n    shouldFade: ue,\n    getPercentageDragged: Oe\n  } = et({\n    snapPoints: U,\n    activeSnapPoint: R,\n    drawerRef: d,\n    fadeFromIndex: y,\n    overlayRef: S,\n    onSnapPointChange: Te\n  });\n  function Te(a, p) {\n    U.value && a === p.length - 1 && (P.value = /* @__PURE__ */ new Date());\n  }\n  const { restorePositionSetting: Re } = tt({\n    isOpen: l,\n    modal: o,\n    nested: $,\n    hasBeenOpened: r\n  });\n  function J() {\n    return (window.innerWidth - ot) / window.innerWidth;\n  }\n  function ce(a, p) {\n    var M;\n    if (!a)\n      return !1;\n    let D = a;\n    const E = (M = window.getSelection()) == null ? void 0 : M.toString(), A = d.value ? Z(d.value.$el) : null, x = /* @__PURE__ */ new Date();\n    if (D.hasAttribute(\"data-vaul-no-drag\") || D.closest(\"[data-vaul-no-drag]\") || P.value && x.getTime() - P.value.getTime() < 500)\n      return !1;\n    if (A && A > 0)\n      return !0;\n    if (E && E.length > 0)\n      return !1;\n    if (L.value && x.getTime() - L.value.getTime() < v.value && A === 0 || p)\n      return L.value = x, !1;\n    for (; D; ) {\n      if (D.scrollHeight > D.clientHeight) {\n        if (D.scrollTop !== 0)\n          return L.value = /* @__PURE__ */ new Date(), !1;\n        if (D.getAttribute(\"role\") === \"dialog\")\n          return !0;\n      }\n      D = D.parentNode;\n    }\n    return !0;\n  }\n  function Pe(a) {\n    !w.value && !U.value || d.value && !d.value.$el.contains(a.target) || (T.value = !0, C.value = /* @__PURE__ */ new Date(), a.target.setPointerCapture(a.pointerId), B.value = a.screenY);\n  }\n  function Ee(a) {\n    var p, D, E, A, x, M;\n    if (T.value) {\n      const K = B.value - a.screenY, X = K > 0;\n      if (U.value && se.value === 0 && !w.value && !X || !j.value && !ce(a.target, X))\n        return;\n      if ((p = d == null ? void 0 : d.value) == null || p.$el.classList.add(we), j.value = !0, h((D = d.value) == null ? void 0 : D.$el, {\n        transition: \"none\"\n      }), h((E = S.value) == null ? void 0 : E.$el, {\n        transition: \"none\"\n      }), U.value && Se({ draggedDistance: K }), X && !U.value) {\n        const ae = Fe(K);\n        h((A = d.value) == null ? void 0 : A.$el, {\n          transform: `translate3d(0, ${Math.min(ae * -1, 0)}px, 0)`\n        });\n        return;\n      }\n      const ne = Math.abs(K), ve = document.querySelector(\"[vaul-drawer-wrapper]\");\n      let k = ne / re.value;\n      const pe = Oe(\n        ne,\n        X\n      );\n      pe !== null && (k = pe);\n      const Be = 1 - k;\n      if ((ue.value || y.value && se.value === y.value - 1) && (t(k), h(\n        (x = S.value) == null ? void 0 : x.$el,\n        {\n          opacity: `${Be}`,\n          transition: \"none\"\n        },\n        !0\n      )), ve && S.value && b.value) {\n        const ae = Math.min(J() + k * (1 - J()), 1), xe = 8 - k * 8, Ue = Math.max(0, 14 - k * 14);\n        h(\n          ve,\n          {\n            borderRadius: `${xe}px`,\n            transform: `scale(${ae}) translate3d(0, ${Ue}px, 0)`,\n            transition: \"none\"\n          },\n          !0\n        );\n      }\n      U.value || h((M = d.value) == null ? void 0 : M.$el, {\n        transform: `translate3d(0, ${ne}px, 0)`\n      });\n    }\n  }\n  function de() {\n    var D;\n    if (!d.value)\n      return;\n    const a = document.querySelector(\"[vaul-drawer-wrapper]\"), p = Z(d.value.$el);\n    h(d.value.$el, {\n      transform: \"translate3d(0, 0, 0)\",\n      transition: `transform ${m.DURATION}s cubic-bezier(${m.EASE.join(\",\")})`\n    }), h((D = S.value) == null ? void 0 : D.$el, {\n      transition: `opacity ${m.DURATION}s cubic-bezier(${m.EASE.join(\",\")})`,\n      opacity: \"1\"\n    }), b.value && p && p > 0 && l.value && h(\n      a,\n      {\n        borderRadius: `${ge}px`,\n        overflow: \"hidden\",\n        transform: `scale(${J()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,\n        transformOrigin: \"top\",\n        transitionProperty: \"transform, border-radius\",\n        transitionDuration: `${m.DURATION}s`,\n        transitionTimingFunction: `cubic-bezier(${m.EASE.join(\",\")})`\n      },\n      !0\n    );\n  }\n  function Y() {\n    var a;\n    d.value && (h(d.value.$el, {\n      transform: \"translate3d(0, 100%, 0)\",\n      transition: `transform ${m.DURATION}s cubic-bezier(${m.EASE.join(\",\")})`\n    }), h((a = S.value) == null ? void 0 : a.$el, {\n      opacity: \"0\",\n      transition: `opacity ${m.DURATION}s cubic-bezier(${m.EASE.join(\",\")})`\n    }), fe(!1), Re(), window.setTimeout(() => {\n      u.value = !1, l.value = !1;\n    }, 300), window.setTimeout(() => {\n      U.value && (R.value = U.value[0]);\n    }, m.DURATION * 1e3));\n  }\n  je(() => {\n    if (!l.value && b.value && Ke) {\n      const a = setTimeout(() => {\n        Q(document.body);\n      }, 200);\n      return () => clearTimeout(a);\n    }\n  });\n  function Ne(a) {\n    if (!T.value || !d.value)\n      return;\n    d.value.$el.classList.remove(we), j.value = !1, T.value = !1, G.value = /* @__PURE__ */ new Date();\n    const p = Z(d.value.$el);\n    if (!ce(a.target, !1) || !p || Number.isNaN(p) || C.value === null)\n      return;\n    const D = G.value.getTime() - C.value.getTime(), E = B.value - a.screenY, A = Math.abs(E) / D;\n    if (A > 0.05 && (c.value = !0, window.setTimeout(() => {\n      c.value = !1;\n    }, 200)), U.value) {\n      De({\n        draggedDistance: E,\n        closeDrawer: Y,\n        velocity: A,\n        dismissible: w.value\n      }), s(!0);\n      return;\n    }\n    if (E > 0) {\n      de(), s(!0);\n      return;\n    }\n    if (A > ye) {\n      Y(), s(!1);\n      return;\n    }\n    const x = Math.min(\n      d.value.$el.getBoundingClientRect().height ?? 0,\n      window.innerHeight\n    );\n    if (p >= x * _.value) {\n      Y(), s(!1);\n      return;\n    }\n    s(!0), de();\n  }\n  z(l, (a) => {\n    a && (P.value = /* @__PURE__ */ new Date(), fe(!0)), e(a);\n  }, { immediate: !0 }), z(g, (a) => {\n    a ? (l.value = a, r.value = !0) : Y();\n  }, { immediate: !0 });\n  function fe(a) {\n    const p = document.querySelector(\"[vaul-drawer-wrapper]\");\n    !p || !b.value || (a ? (h(document.body, {\n      background: document.body.style.backgroundColor || document.body.style.background\n    }), h(\n      document.body,\n      {\n        background: \"black\"\n      },\n      !0\n    ), h(p, {\n      borderRadius: `${ge}px`,\n      overflow: \"hidden\",\n      transform: `scale(${J()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,\n      transformOrigin: \"top\",\n      transitionProperty: \"transform, border-radius\",\n      transitionDuration: `${m.DURATION}s`,\n      transitionTimingFunction: `cubic-bezier(${m.EASE.join(\",\")})`\n    })) : (Q(p, \"overflow\"), Q(p, \"transform\"), Q(p, \"borderRadius\"), h(p, {\n      transitionProperty: \"transform, border-radius\",\n      transitionDuration: `${m.DURATION}s`,\n      transitionTimingFunction: `cubic-bezier(${m.EASE.join(\",\")})`\n    })));\n  }\n  function Ae(a) {\n    var E, A;\n    const p = a ? (window.innerWidth - V) / window.innerWidth : 1, D = a ? -V : 0;\n    W.value && window.clearTimeout(W.value), h((E = d.value) == null ? void 0 : E.$el, {\n      transition: `transform ${m.DURATION}s cubic-bezier(${m.EASE.join(\",\")})`,\n      transform: `scale(${p}) translate3d(0, ${D}px, 0)`\n    }), !a && ((A = d.value) != null && A.$el) && (W.value = window.setTimeout(() => {\n      var x, M;\n      h((x = d.value) == null ? void 0 : x.$el, {\n        transition: \"none\",\n        transform: `translate3d(0, ${Z((M = d.value) == null ? void 0 : M.$el)}px, 0)`\n      });\n    }, 500));\n  }\n  function _e(a) {\n    var A;\n    if (a < 0)\n      return;\n    const p = (window.innerWidth - V) / window.innerWidth, D = p + a * (1 - p), E = -V + a * V;\n    h((A = d.value) == null ? void 0 : A.$el, {\n      transform: `scale(${D}) translate3d(0, ${E}px, 0)`,\n      transition: \"none\"\n    });\n  }\n  function Ce(a) {\n    var E;\n    const p = a ? (window.innerWidth - V) / window.innerWidth : 1, D = a ? -V : 0;\n    a && h((E = d.value) == null ? void 0 : E.$el, {\n      transition: `transform ${m.DURATION}s cubic-bezier(${m.EASE.join(\n        \",\"\n      )})`,\n      transform: `scale(${p}) translate3d(0, ${D}px, 0)`\n    });\n  }\n  return {\n    open: g,\n    isOpen: l,\n    modal: o,\n    keyboardIsOpen: I,\n    hasBeenOpened: r,\n    isVisible: u,\n    drawerRef: d,\n    drawerHeightRef: re,\n    overlayRef: S,\n    isDragging: T,\n    dragStartTime: C,\n    isAllowedToDrag: j,\n    snapPoints: U,\n    activeSnapPoint: R,\n    pointerStartY: B,\n    dismissible: w,\n    snapPointsOffset: $e,\n    shouldFade: ue,\n    fadeFromIndex: y,\n    shouldScaleBackground: b,\n    onPress: Pe,\n    onDrag: Ee,\n    onRelease: Ne,\n    closeDrawer: Y,\n    onNestedDrag: _e,\n    onNestedRelease: Ce,\n    onNestedOpenChange: Ae,\n    emitClose: i,\n    emitDrag: t,\n    emitRelease: s,\n    emitOpenChange: e,\n    nested: $\n  };\n}\nconst rt = /* @__PURE__ */ F({\n  __name: \"DrawerRoot\",\n  props: {\n    activeSnapPoint: { default: void 0 },\n    closeThreshold: { default: nt },\n    shouldScaleBackground: { type: Boolean, default: void 0 },\n    scrollLockTimeout: { default: at },\n    fixed: { type: Boolean, default: void 0 },\n    dismissible: { type: Boolean, default: !0 },\n    modal: { type: Boolean, default: !0 },\n    open: { type: Boolean, default: void 0 },\n    defaultOpen: { type: Boolean, default: void 0 },\n    nested: { type: Boolean, default: !1 },\n    snapPoints: { default: void 0 },\n    fadeFromIndex: { default: void 0 }\n  },\n  emits: [\"drag\", \"release\", \"close\", \"update:open\", \"update:activeSnapPoint\"],\n  setup(n, { expose: t, emit: s }) {\n    const i = n, e = s;\n    Ve();\n    const g = H(() => i.fadeFromIndex ?? (i.snapPoints && i.snapPoints.length - 1)), w = me(i, \"open\", e, {\n      defaultValue: i.defaultOpen,\n      passive: i.open === void 0\n    }), $ = me(i, \"activeSnapPoint\", e, {\n      passive: i.activeSnapPoint === void 0\n    }), f = {\n      emitDrag: (y) => e(\"drag\", y),\n      emitRelease: (y) => e(\"release\", y),\n      emitClose: () => e(\"close\"),\n      emitOpenChange: (y) => {\n        e(\"update:open\", y);\n      }\n    }, { closeDrawer: o, hasBeenOpened: b, modal: v, isOpen: _ } = Ze(\n      lt({\n        ...f,\n        ...ze(i),\n        activeSnapPoint: $,\n        fadeFromIndex: g,\n        open: w\n      })\n    );\n    function R(y) {\n      if (w.value !== void 0) {\n        f.emitOpenChange(y);\n        return;\n      }\n      y ? (b.value = !0, _.value = y) : o();\n    }\n    return t({\n      open: _\n    }), (y, l) => (ee(), te(N(Ye), {\n      open: N(_),\n      modal: N(v),\n      \"onUpdate:open\": R\n    }, {\n      default: oe(() => [\n        ie(y.$slots, \"default\", { open: N(_) })\n      ]),\n      _: 3\n    }, 8, [\"open\", \"modal\"]));\n  }\n}), ct = /* @__PURE__ */ F({\n  __name: \"DrawerRootNested\",\n  props: {\n    activeSnapPoint: {},\n    closeThreshold: {},\n    shouldScaleBackground: { type: Boolean },\n    scrollLockTimeout: {},\n    fixed: { type: Boolean },\n    dismissible: { type: Boolean },\n    modal: { type: Boolean },\n    open: { type: Boolean },\n    defaultOpen: { type: Boolean },\n    nested: { type: Boolean },\n    snapPoints: {},\n    fadeFromIndex: {}\n  },\n  emits: [\"drag\", \"release\", \"close\", \"update:open\", \"update:activeSnapPoint\"],\n  setup(n, { emit: t }) {\n    const s = n, i = t, { onNestedDrag: e, onNestedOpenChange: g, onNestedRelease: w } = le();\n    function $() {\n      g(!1);\n    }\n    function f(v) {\n      e(v);\n    }\n    function o(v) {\n      v && g(v), i(\"update:open\", v);\n    }\n    const b = qe(s, i);\n    return (v, _) => (ee(), te(rt, We(N(b), {\n      nested: \"\",\n      onClose: $,\n      onDrag: f,\n      onRelease: N(w),\n      \"onUpdate:open\": o\n    }), {\n      default: oe(() => [\n        ie(v.$slots, \"default\")\n      ]),\n      _: 3\n    }, 16, [\"onRelease\"]));\n  }\n}), dt = /* @__PURE__ */ F({\n  __name: \"DrawerOverlay\",\n  setup(n) {\n    const { overlayRef: t, snapPoints: s, isVisible: i, isOpen: e, shouldFade: g } = le(), w = H(() => {\n      var $;\n      return s && ((($ = s.value) == null ? void 0 : $.length) ?? 0) > 0;\n    });\n    return ($, f) => (ee(), te(N(Ge), {\n      ref_key: \"overlayRef\",\n      ref: t,\n      \"vaul-drawer-visible\": N(i) ? \"true\" : \"false\",\n      \"vaul-overlay\": \"\",\n      \"vaul-snap-points\": N(e) && w.value ? \"true\" : \"false\",\n      \"vaul-snap-points-overlay\": N(e) && N(g) ? \"true\" : \"false\"\n    }, null, 8, [\"vaul-drawer-visible\", \"vaul-snap-points\", \"vaul-snap-points-overlay\"]));\n  }\n}), ft = /* @__PURE__ */ F({\n  __name: \"DrawerContent\",\n  setup(n) {\n    const {\n      open: t,\n      isOpen: s,\n      isVisible: i,\n      snapPointsOffset: e,\n      drawerRef: g,\n      onPress: w,\n      onDrag: $,\n      onRelease: f,\n      modal: o,\n      emitOpenChange: b,\n      dismissible: v,\n      keyboardIsOpen: _,\n      closeDrawer: R\n    } = le(), y = H(() => e.value && e.value.length > 0 ? `${e.value[0]}px` : \"0\");\n    function l(r) {\n      if (!o.value || r.defaultPrevented) {\n        r.preventDefault();\n        return;\n      }\n      _.value && (_.value = !1), r.preventDefault(), v.value && b(!1), !(!v.value || t.value !== void 0) && R();\n    }\n    return z(\n      s,\n      (r) => {\n        r && setTimeout(() => {\n          i.value = !0;\n        }, 1);\n      },\n      { immediate: !0 }\n    ), (r, u) => (ee(), te(N(Je), {\n      ref_key: \"drawerRef\",\n      ref: g,\n      \"vaul-drawer\": \"\",\n      \"vaul-drawer-visible\": N(i) ? \"true\" : \"false\",\n      style: ke({ \"--snap-point-height\": y.value }),\n      onPointerdown: N(w),\n      onPointermove: N($),\n      onPointerup: N(f),\n      onPointerDownOutside: l,\n      onEscapeKeyDown: u[0] || (u[0] = (T) => {\n        N(v) || T.preventDefault();\n      })\n    }, {\n      default: oe(() => [\n        ie(r.$slots, \"default\")\n      ]),\n      _: 3\n    }, 8, [\"vaul-drawer-visible\", \"style\", \"onPointerdown\", \"onPointermove\", \"onPointerup\"]));\n  }\n});\nexport {\n  mt as DrawerClose,\n  ft as DrawerContent,\n  gt as DrawerDescription,\n  dt as DrawerOverlay,\n  wt as DrawerPortal,\n  rt as DrawerRoot,\n  ct as DrawerRootNested,\n  ht as DrawerTitle,\n  bt as DrawerTrigger\n};\n","<template>\n  <div class=\"relative items-center\">\n    <!-- User Button -->\n    <div\n      class=\"flex items-center cursor-pointer transition-all hover:opacity-90 active:scale-95 duration-300\"\n      @click.stop=\"toggleMenu\"\n    >\n      <div\n        class=\"size-10 rounded-full overflow-hidden bg-thm flex items-center justify-center\"\n      >\n        <img\n          v-if=\"profileImg\"\n          :src=\"'data:image/png;base64,' + profileImg\"\n          :alt=\"title\"\n        />\n        <WebccIcon v-else name=\"account/user\" class=\"size-6 text-bgr\" />\n      </div>\n    </div>\n\n    <!-- Desktop Menu -->\n    <Transition name=\"bounce\">\n      <div\n        v-if=\"!mobile && open\"\n        v-on-click-outside.bubble=\"closeMenu\"\n        class=\"absolute z-5 right-0 bottom-[-0.5rem] bg-bgr border rounded shadow-md translate-y-full flex flex-col overflow-hidden\"\n      >\n        <div v-if=\"signedIn\" class=\"flex gap-4 px-3 py-4\">\n          <div\n            class=\"size-11 rounded-full overflow-hidden bg-thm flex items-center justify-center\"\n          >\n            <img\n              v-if=\"profileImg\"\n              :src=\"'data:image/png;base64,' + profileImg\"\n              :alt=\"title\"\n            />\n            <span v-else-if=\"initials\" class=\"text-lg lg:text-2xl text-bgr\">{{\n              initials\n            }}</span>\n            <WebccIcon v-else name=\"account/user\" class=\"size-6 text-bgr\" />\n          </div>\n          <div class=\"flex flex-col\">\n            <span class=\"font-medium\">{{ title }}</span>\n            <span class=\"text-sm text-txt-weak\">{{ email }}</span>\n          </div>\n        </div>\n        <div class=\"flex flex-col border-y\">\n          <button\n            v-for=\"{ key, action, classes } in actions\"\n            :key=\"key\"\n            class=\"px-3 py-4 cursor-pointer hover:bg-bgr-100 text-left text-nowrap\"\n            :class=\"classes\"\n            @click=\"menuItemClick(action)\"\n          >\n            <span>{{ $t(key) }}</span>\n          </button>\n        </div>\n      </div>\n    </Transition>\n\n    <!-- Mobile Menu -->\n    <ClientOnly>\n      <DrawerRoot v-if=\"mobile\" v-model:open=\"open\">\n        <DrawerPortal>\n          <DrawerOverlay class=\"fixed bg-black/40 inset-0\" />\n          <DrawerContent\n            aria-describedby=\"undefined\"\n            class=\"bg-bgr z-1 flex justify-center rounded-t-lg h-full max-h-[90%] fixed bottom-0 left-0 right-0\"\n          >\n            <DrawerTitle />\n            <div class=\"max-w-xl w-full\">\n              <div class=\"w-full flex justify-center pt-2.5\">\n                <WebccIcon\n                  name=\"site/chevron-down\"\n                  filled\n                  class=\"size-8 inline text-txt-weaker\"\n                />\n              </div>\n              <div class=\"p-4 flex flex-col\">\n                <UserCard v-if=\"signedIn\" />\n                <div class=\"flex flex-col border-b mt-4\">\n                  <button\n                    v-for=\"{ key, action, classes } in actions\"\n                    :key=\"key\"\n                    class=\"px-3 py-4 cursor-pointer hover:bg-bgr-100 text-left text-nowrap\"\n                    :class=\"classes\"\n                    @click=\"menuItemClick(action)\"\n                  >\n                    <span>{{ $t(key) }}</span>\n                  </button>\n                </div>\n              </div>\n            </div>\n          </DrawerContent>\n        </DrawerPortal>\n      </DrawerRoot>\n    </ClientOnly>\n\n    <Teleport to=\"body\">\n      <WebccLoaderOverlay v-if=\"useAuth().pending\" />\n    </Teleport>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { vOnClickOutside } from '@vueuse/components'\nimport {\n  DrawerContent,\n  DrawerOverlay,\n  DrawerPortal,\n  DrawerRoot,\n  DrawerTitle,\n} from 'vaul-vue'\n\nconst trPrefix = 'www.components.site.Header.user.'\n\nconst { t } = useI18n()\n\nconst open = ref(false)\n\nconst { signedIn, email, name, initials, profileImg } = storeToRefs(useUser())\n\nconst title = computed(() => name.value || t(`${trPrefix}name`))\nconst mobile = computed(() => useScreen().isSmall)\n\nconst actions = computed<\n  { key: TranslationKey; action: Function; classes?: string }[]\n>(() => [\n  { key: `${trPrefix}account`, action: toProfile },\n  { key: `${trPrefix}bookings`, action: toBookings },\n  { key: `${trPrefix}logout`, action: logout, classes: 'text-err' },\n])\n\n// Registering a dummy hook to avoid the following warnings when resizing the screen:\n// \"[Vue warn]: onMounted is called when there is no active component instance to be associated with.\"\nwatch(mobile, () => null)\n\nfunction toggleMenu() {\n  open.value = !open.value\n}\n\nfunction closeMenu() {\n  open.value = false\n}\n\nasync function menuItemClick(fn: Function) {\n  closeMenu()\n  return await fn()\n}\n\nasync function toProfile() {\n  await navigateTo(useURLs().buildProfileUrl(), { external: true })\n}\n\nasync function toBookings() {\n  await navigateTo(useURLs().buildBookingsUrl(), { external: true })\n}\n\nasync function logout() {\n  await useAuth().logout()\n}\n</script>\n\n<style scoped>\n.bounce-enter-active {\n  animation: bounce-in 0.2s;\n}\n\n.bounce-leave-active {\n  animation: bounce-in 0.2s reverse;\n}\n\n@keyframes bounce-in {\n  0% {\n    transform: translate(5%, 95%) scale(90%);\n    opacity: 0;\n  }\n  100% {\n    transform: translate(0, 100%) scale(100%);\n    opacity: 1;\n  }\n}\n</style>\n","<template>\n  <header>\n    <!-- Logo and contact info -->\n    <div\n      class=\"container-fluid-lg flex items-center justify-center pt-4 text-sm font-light text-txt-strong md:justify-between\"\n    >\n      <WebccCompanyLogo\n        target=\"_self\"\n        :anchor=\"false\"\n        :caption=\"logoCaption\"\n        class=\"hidden md:block\"\n        :href=\"logoHref\"\n        @click=\"trackingLogo()\"\n      />\n      <aside\n        v-if=\"siteSettings?.includes('contactinfo')\"\n        class=\"pointer-events-none flex items-center\"\n      >\n        <span class=\"pointer-events-auto\">{{\n          $t(`${trPrefix}hereForYou`)\n        }}</span>\n        <WebccLink\n          v-if=\"showContactUs && links?.contact?.href\"\n          :to=\"links.contact.href\"\n          class=\"pointer-events-auto ml-3 underline underline-offset-1\"\n          @click=\"trackContactUs\"\n        >\n          <span>{{ $t(`${trPrefix}contactUs`) }}</span>\n        </WebccLink>\n      </aside>\n    </div>\n\n    <!-- Navigation, Bookmarks, Lang and Currency switcher -->\n    <div\n      class=\"container-fluid-lg flex items-center py-2 pb-4\"\n      :class=\"showMenu ? 'justify-between' : 'justify-end'\"\n    >\n      <WebccCompanyLogo\n        target=\"_self\"\n        :anchor=\"false\"\n        :caption=\"logoCaption\"\n        class=\"mr-auto md:hidden\"\n        :href=\"logoHref\"\n        @click=\"tracking.handlers?.header.headerItemClick('homepage')\"\n      />\n      <Navigation\n        v-if=\"showMenu && header?.menu\"\n        :menu=\"header?.menu\"\n        :links=\"links\"\n      />\n      <div class=\"flex items-center md:items-end\">\n        <!-- Bookmarks -->\n        <client-only>\n          <WebccLink\n            v-if=\"useStorageReady()\"\n            class=\"relative ml-4 flex rounded border border-bgr-300 p-2 text-sm text-txt-strongest duration-200 hover:bg-bgr-100 focus:outline-none md:ml-3 cursor-pointer\"\n            @click=\"toWishlist\"\n          >\n            <WebccIcon\n              class=\"mr-0 h-5 w-5 text-bgr-600 md:mr-1\"\n              name=\"site/bookmark\"\n              filled\n            />\n            <span class=\"hidden md:block\">{{\n              $t(`${trPrefix}labels.favorites`)\n            }}</span>\n            <div\n              v-show=\"bookmarks.count > 0 && partner.id && partner.jwt\"\n              class=\"absolute -right-2 -top-2 flex h-5 w-5 items-center justify-center rounded-full bg-thm text-xs text-bgr\"\n            >\n              {{ bookmarks.count }}\n            </div>\n          </WebccLink>\n        </client-only>\n\n        <HeaderLangSelect v-if=\"sites.length > 1\" />\n\n        <HeaderSelect\n          v-if=\"currencies && currencies.length > 1\"\n          :selected-value=\"confCurrency!\"\n          :all-options=\"currencies!\"\n          :has-key=\"false\"\n          :to-upper-case=\"true\"\n          @on-change=\"changeCurrency\"\n        />\n\n        <HeaderUserButton v-if=\"auth.isAuthorized\" class=\"ml-4\" />\n        <WebccButton\n          v-else\n          variant=\"white\"\n          round\n          class=\"relative ml-3 py-2 !px-3 border border-bgr-300 text-txt-strongest duration-200 hover:bg-bgr-100 focus:outline-none md:ml-4\"\n          :disabled=\"auth.pending\"\n          @click=\"signIn\"\n        >\n          <span class=\"text-nowrap text-sm font-medium\">{{\n            $t(`${trPrefix}user.login`)\n          }}</span>\n        </WebccButton>\n\n        <!-- Mobile Menu Button -->\n        <button\n          class=\"ml-1 rounded p-1 hover:bg-bgr-100 focus:outline-none active:bg-bgr-100 sm:ml-2 sm:p-2 md:hidden\"\n          @click.stop=\"toggling.toggle('menu')\"\n        >\n          <WebccIcon class=\"h-7 w-7 text-txt-weak\" name=\"site/menu\" />\n        </button>\n      </div>\n    </div>\n  </header>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.site.Header.'\n\nwithDefaults(\n  defineProps<{\n    showMenu?: boolean\n    showContactUs?: boolean\n  }>(),\n  {\n    showMenu: true,\n    showContactUs: true,\n  },\n)\n\nconst {\n  buildBookmarksUrl,\n  buildLoginUrl,\n  buildLoginToWishlistUrl,\n  buildWishlistUrl,\n} = useURLs()\nconst confData = useConfdata()\nconst tracking = useTracking()\nconst toggling = useToggler()\nconst bookmarks = useBookmarks()\nconst auth = useAuth()\nconst partner = usePartner()\n\nconst logoHref = ref('/')\n\nconst {\n  header,\n  links,\n  currencies,\n  siteSettings,\n  sites,\n  logoCaption,\n  currency: confCurrency,\n} = storeToRefs(confData)\n\nconst bookmarksURL = computed(() => buildBookmarksUrl())\n\nfunction changeCurrency(currency: string) {\n  tracking.handlers?.header.currencySwitch(currency)\n  const url = new URL(window.location.href)\n  url.searchParams.set('currency', currency)\n  window.location.href = url.href\n}\n\nfunction signIn() {\n  tracking.handlers?.header.enterGuestWorld()\n  nextTick(() => {\n    navigateTo(buildLoginUrl().toString(), { external: true })\n  })\n}\n\nfunction trackingLogo() {\n  tracking.handlers?.header.headerItemClick('homepage')\n  tracking.handlers?.homepage.headerLogoClick()\n}\n\nfunction trackContactUs() {\n  tracking.handlers?.header.headerItemClick('contactus')\n  tracking.handlers?.homepage.headerContactUsClick()\n}\n\nasync function toWishlist() {\n  tracking.handlers?.header.headerItemClick('favourites')\n  tracking.handlers?.homepage.headerWishlistClick()\n\n  if (partner.id && partner.jwt) {\n    await navigateToFavourites()\n  } else {\n    await navigateToWishlists()\n  }\n\n  async function navigateToFavourites() {\n    await navigateTo(\n      {\n        path: bookmarksURL.value,\n        query: { ...useRoute().query },\n      },\n      { external: true },\n    )\n  }\n\n  async function navigateToWishlists() {\n    const { isAuthorized } = useAuthStore()\n    if (isAuthorized) {\n      await navigateTo(buildWishlistUrl().toString(), { external: true })\n    } else {\n      await navigateTo(buildLoginToWishlistUrl().toString(), { external: true })\n    }\n  }\n}\n</script>\n","<template>\n  <!-- To avoid warning \"Component is missing template or render function.\" -->\n  <div></div>\n</template>\n\n<script setup lang=\"ts\">\ntype BrandingType = 'origBrand' | 'noBrand' | 'BOTfriendsBrand'\n\nconst trPrefix = 'www.components.common.Chatbot.'\n\nconst { t } = useI18n()\n\nconst Smooch = (await import('smooch')).default\n\nconst branding: BrandingType = 'noBrand'\nconst { locale } = useL10N()\nconst { domain, links } = useConfdata()\nconst iconPublicUrl = getPublicUrl(domain, 'interhome/interhome.svg')\nconst privacyPolicyUrl = links?.privacyPolicy?.href ?? ''\nconst { colors } = useColors()\nconst [themeColor, ctaColor] = [colors.theme, colors.cta].map((color) =>\n  color.substring(1),\n)\n\nconst isDetailPage = computed(() => useConfdata().pagetype === 'detail')\n\nconst bottom = computed(() => {\n  if (!isDetailPage.value) return 20\n  if (useScreen().isExtraSmall && window.innerWidth < 370) return 121\n  if (useScreen().isExtraSmall) return 101\n  if (useScreen().isSmall) return 91\n  return 20\n})\n\nconst right = computed(() => {\n  if (!isDetailPage.value) return 14\n  if (useScreen().isSmall) return 0\n  return 14\n})\n\nconst maxHeight = computed(() => {\n  return window.innerHeight - bottom.value\n})\n\nwatch(isDetailPage, updatePosition)\nwatch(() => useScreen().current, updatePosition)\n\nonMounted(async () => {\n  /**\n   * @see {@link https://github.com/zendesk/sunshine-conversations-web?tab=readme-ov-file#initoptions | Smooch init options}\n   *\n   * Unfortunately there is probably no equivalent singular/plural for `messageRelativeTimeMinute`\n   * conversationListRelativeTimeMinute: 'a minute ago X',\n   * conversationListRelativeTimeMinutes: '{value} minutes ago Y',\n   */\n  await Smooch.init({\n    businessName: 'Interhome',\n    businessIconUrl: iconPublicUrl,\n    integrationId: '633424105e90dc00f3506eab',\n    region: 'eu-1',\n    locale,\n    customText: {\n      headerText: t(`${trPrefix}header`),\n      introductionText: t(`${trPrefix}introduction`, {\n        link: privacyPolicyUrl,\n      }),\n      conversationTimestampHeaderFormat: 'DD. MMMM YYYY',\n      inputPlaceholder: t(`${trPrefix}placeholder`),\n      messageSending: t(`${trPrefix}sending`),\n      messageDelivered: t(`${trPrefix}delivered`),\n      messageRelativeTimeDay: t(`${trPrefix}days`),\n      messageRelativeTimeHour: t(`${trPrefix}hours`),\n      messageRelativeTimeMinute: t(`${trPrefix}minutes`),\n      messageRelativeTimeJustNow: t(`${trPrefix}now`),\n      sendButtonText: t(`${trPrefix}send`),\n    },\n    customColors: {\n      brandColor: themeColor,\n      actionColor: ctaColor,\n      conversationColor: themeColor,\n    },\n    delegate: {\n      beforeDisplay(message: Smooch.Message) {\n        if (message.role === 'appMaker') {\n          message.shouldShowAvatar = true\n          message.avatarUrl = iconPublicUrl\n        }\n        return message\n      },\n      beforeSend(message: Smooch.Message) {\n        message.metadata = { brand: 'Interhome' }\n        return message\n      },\n    },\n  })\n\n  Smooch.on('widget:opened', () => {\n    if (Smooch.getConversation()?.messages?.length) return\n    Smooch.startConversation()\n  })\n\n  setBranding()\n  updatePosition()\n})\n\nonBeforeUnmount(() => {\n  Smooch.destroy()\n})\n\nfunction updatePosition(): void {\n  const { style } = getMessenger() ?? {}\n  style?.setProperty('max-height', `${maxHeight.value}px`)\n  style?.setProperty('bottom', `${bottom.value}px`)\n  style?.setProperty('right', `${right.value}px`)\n}\n\nfunction setBranding() {\n  if (branding !== 'origBrand') removeBranding()\n  if (branding === 'BOTfriendsBrand') addBOTfriendsBranding()\n}\n\nfunction removeBranding() {\n  const [logo] = getMessageContainer()?.getElementsByClassName('logo') ?? []\n  logo?.parentNode?.removeChild(logo)\n}\n\nfunction addBOTfriendsBranding() {\n  const image = document.createElement('img')\n  image.src = 'https://www.cdn.botfriendsx.com/botfriends_logo.png'\n  image.style.cssText =\n    'display: block; margin-left: auto; margin-right: auto; width: 164px; height: 20px'\n\n  const div = document.createElement('div')\n  div.classList.add('logo')\n  div.style.cssText = 'padding-bottom: 10px'\n  div.appendChild(image)\n\n  getMessageContainer()?.appendChild(div)\n}\n\nfunction getMessenger(): HTMLIFrameElement | undefined {\n  return document.querySelectorAll<HTMLIFrameElement>(\n    '#web-messenger-container',\n  )[0]\n}\n\nfunction getMessageContainer(): Element | undefined {\n  return getMessenger()?.contentWindow?.document.getElementsByClassName(\n    'messages-container',\n  )[0]\n}\n</script>\n","import { publicAssetsURL } from '#internal/nuxt/paths';export default publicAssetsURL(\"/logos/interchalet.svg\")","import { publicAssetsURL } from '#internal/nuxt/paths';export default publicAssetsURL(\"/logos/interhome.svg\")","<template>\n  <div class=\"flex flex-col sm:flex-row w-full max-w-md lg:max-w-lg\">\n    <div\n      id=\"logos\"\n      class=\"flex flex-row items-center mb-2 sm:flex-col text-lg text-txt-weak\"\n    >\n      <img\n        src=\"/logos/interchalet.svg\"\n        class=\"min-w-1/3 max-w-[7.5rem] sm:w-[6.25rem]\"\n      />\n      <span class=\"hidden sm:block\">&darr;</span>\n      <span class=\"sm:hidden px-3\">&rarr;</span>\n      <img\n        src=\"/logos/interhome.svg\"\n        class=\"min-w-1/3 max-w-[7.5rem] sm:w-[6.25rem]\"\n      />\n    </div>\n    <div id=\"content\" class=\"sm:ml-4\">\n      <h3 class=\"text-base font-semibold mb-1\">{{ t(`${trPrefix}header`) }}</h3>\n      <div class=\"text-txt-weak\">{{ t(`${trPrefix}textAfter`) }}</div>\n      <div class=\"mt-2\" @click=\"readMore\">\n        <a id=\"readmore-link\" class=\"inline-flex font-semibold\">\n          {{ t(`${trPrefix}moreAfter`) }}\n          <WebccIcon\n            name=\"site/chevron-right-bold\"\n            class=\"h-6 w-6 p-1 ml-1\"\n            filled\n          />\n        </a>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.ui.interhomePopup.'\n\nconst { t } = useI18n()\nconst popups = usePopups()\nconst tracking = useTracking()\n\nonMounted(() => {\n  tracking.handlers?.interchaletMigration.popupDisplayed()\n})\n\nfunction readMore() {\n  popups.update('interhomePopup', true)\n  tracking.handlers?.interchaletMigration.popupReadMore()\n  navigateTo('/pages/aus-interchalet-wird-interhome/')\n}\n</script>\n","<template>\n  <div />\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.notifications.'\n\nconst { t } = useI18n()\nconst params = useParams()\nconst partner = usePartner()\nconst user = useUser()\nconst toaster = useToaster()\nconst displayedPopups = usePopups()\nconst redirection = useRedirection()\n\nonMounted(() => {\n  notifySignedIn()\n  notifyInterchaletMigration()\n})\n\nfunction notifySignedIn() {\n  if (!params.all.signedIn || user.signedIn) return\n\n  toaster.success(\n    `${t(`${trPrefix}signedIn.text`)} <strong>${user.email}</strong>`,\n    { delay: 300 },\n  )\n}\n\nfunction notifyInterchaletMigration() {\n  if (!useFlag('interchalet-is-now-interhome-information').value) return\n  if (!redirection.fromInterchalet.value && partner.id !== 'IH1000021') return\n  if (displayedPopups.popups.interhomePopup) return\n\n  toaster.untyped(h(resolveComponent('InterchaletMigrationPopup')), {\n    delay: 300,\n    duration: false,\n    closeButton: 'top',\n    onClose() {\n      displayedPopups.update('interhomePopup', true)\n    },\n  })\n}\n</script>\n","<template>\n  <Transition name=\"fade-slide\" appear>\n    <div\n      v-if=\"visible\"\n      class=\"fixed bottom-16 z-20 w-full px-4 sm:bottom-auto sm:right-4 sm:top-16 sm:w-auto sm:px-0\"\n    >\n      <div\n        class=\"group flex cursor-pointer gap-4 rounded-lg border bg-bgr p-4 shadow-xl transition-all hover:shadow-2xl\"\n        @click=\"toBooking\"\n      >\n        <div>\n          <img :src=\"image\" class=\"h-20 grow rounded-lg\" />\n        </div>\n        <div class=\"flex grow flex-col gap-1 sm:w-64\">\n          <p class=\"line-clamp-1 w-full font-medium\">\n            {{ accom?.type.translation }} {{ accom?.name }}\n          </p>\n          <p class=\"text-txt-weak\">\n            {{ dates }} &bull;\n            <span>{{ $t(`${trPrefix}pax_s`, trip?.pax) }}</span>\n          </p>\n          <div class=\"mt-1 flex items-center gap-2\">\n            <p class=\"font-medium group-hover:underline\">\n              {{ $t(`${trPrefix}completeBooking`) }}\n            </p>\n            <WebccIcon\n              name=\"site/chevron-right\"\n              class=\"h-6 w-6 text-txt\"\n              filled\n            />\n          </div>\n        </div>\n        <div class=\"flex\" @click.stop=\"close\">\n          <div\n            class=\"flex h-7 w-7 items-center justify-center rounded-full hover:bg-bgr-200\"\n          >\n            <WebccIcon name=\"site/x\" class=\"h-5 w-5\" />\n          </div>\n        </div>\n      </div>\n    </div>\n  </Transition>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.ui.BookingTeaser.'\n\nconst l10n = useL10N()\nconst params = useParams()\nconst confData = useConfdata()\nconst urls = useURLs()\nconst tracking = useTracking()\n\nconst lastBooking = ref<BookingPending>()\n\nconst enabled = computed(\n  () =>\n    useAB().isActive('dialogInterruptedBooking') &&\n    confData.siteSettings?.includes('bookingTeaser'),\n)\nconst visible = computed(() => enabled.value && lastBooking.value)\n\nconst accom = computed(() => lastBooking.value?.accom)\nconst trip = computed(() => lastBooking.value?.trip)\nconst image = computed(\n  () =>\n    accom.value && urls.buildImageUrl(accom.value.image, 'tr:n-srp_hitbox_sm'),\n)\n\nconst dates = computed(() => {\n  const { checkin, checkout } = trip.value ?? {}\n  return checkin && checkout\n    ? [checkin, checkout]\n        .map((date) => toShortDate(date, l10n.language))\n        .join(' - ')\n    : undefined\n})\n\nwatch(enabled, init)\n\nonMounted(init)\n\nasync function init() {\n  if (!enabled.value) return\n\n  lastBooking.value = await useBookingsPending().getLast()\n\n  if (!lastBooking.value) return\n\n  tracking.handlers?.start.showedTeaserToBooking()\n}\n\nfunction toBooking() {\n  tracking.handlers?.start.clickedTeaserToBooking()\n\n  if (!lastBooking.value?.url) return\n\n  window.open(\n    urls.buildValidUrl(lastBooking.value.url),\n    params.iframe ? '_self' : undefined,\n  )\n}\n\nfunction close() {\n  lastBooking.value = undefined\n  useBookingsPending().dismissLast()\n  tracking.handlers?.start.closedTeaserToBooking()\n}\n</script>\n\n<style scoped>\n.fade-slide-enter-active,\n.fade-slide-leave-active {\n  transition: all 0.5s ease;\n}\n\n.fade-slide-enter-from,\n.fade-slide-leave-to {\n  opacity: 0;\n  transform: translateX(30px);\n}\n@media screen and (max-width: 575px) {\n  .fade-slide-enter-from,\n  .fade-slide-leave-to {\n    opacity: 0;\n    transform: translateY(30px);\n  }\n}\n</style>\n","<template>\n  <div>\n    <!-- To avoid warning \"Component is missing template or render function.\" -->\n  </div>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * @see {@link https://support.bugherd.com/en/articles/33871-installing-bugherd-using-javascript} | Installing BugHerd using JavaScript\n */\n\nconst { apiKey } = useRuntimeConfig().public.bugherd\n\nif (apiKey) {\n  useHead({\n    script: [\n      {\n        src: `https://www.bugherd.com/sidebarv2.js?apikey=${apiKey}`,\n        type: 'text/javascript',\n        async: true,\n      },\n    ],\n  })\n}\n</script>\n","<template>\n  <main class=\"flex w-full flex-col items-center bg-bgr-100\">\n    <h1\n      class=\"mb-4 mt-4 text-center text-3xl font-normal leading-normal text-thm\"\n    >\n      {{ $t('errors.title') }}\n    </h1>\n    <article\n      class=\"mx-2 my-4 w-full max-w-screen-md rounded bg-bgr p-4 text-black shadow-md md:w-full\"\n    >\n      <h4 class=\"text-xl text-[#e43956]\">\n        {{ $t('errors.messages.notFound') }}\n      </h4>\n    </article>\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  error: string\n  clearError: Function\n}>()\n\nwatch(\n  () => useConfdata().pagetype,\n  () => {\n    props.clearError()\n  },\n)\n</script>\n","import { defineComponent, onErrorCaptured, ref } from \"vue\";\nimport { useNuxtApp } from \"../nuxt.js\";\nexport default defineComponent({\n  emits: {\n    error(_error) {\n      return true;\n    }\n  },\n  setup(_props, { slots, emit }) {\n    const error = ref(null);\n    const nuxtApp = useNuxtApp();\n    onErrorCaptured((err, target, info) => {\n      if (import.meta.client && (!nuxtApp.isHydrating || !nuxtApp.payload.serverRendered)) {\n        emit(\"error\", err);\n        nuxtApp.hooks.callHook(\"vue:error\", err, target, info);\n        error.value = err;\n        return false;\n      }\n    });\n    function clearError() {\n      error.value = null;\n    }\n    return () => error.value ? slots.error?.({ error, clearError }) : slots.default?.();\n  }\n});\n","<template>\n  <div\n    class=\"group flex h-10 w-10 cursor-pointer items-center justify-center rounded-full bg-[#bbb] p-3 shadow-sm hover:shadow-lg md:h-12 md:w-12 hover:bg-thm\"\n    @click=\"handleClick\"\n  >\n    <WebccIcon\n      :filled=\"true\"\n      :name=\"'site/' + target\"\n      class=\"h-full w-full rounded-full text-bgr-300\"\n    />\n  </div>\n</template>\n<script setup lang=\"ts\">\nconst props = defineProps<{ target: string; link: string }>()\nconst emit = defineEmits<{ (e: 'clicked'): void }>()\n\nfunction handleClick() {\n  if (props.link) {\n    useTracking().handlers?.homepage.footerSocialMediaLinkElementClick(\n      props.target,\n      useRoute().path,\n    )\n    window.open(props.link, '_blank')\n  } else {\n    emit('clicked')\n  }\n}\n</script>\n","<template>\n  <component\n    :is=\"open ? WebccModal : 'div'\"\n    :class=\"!open ? 'hidden' : ''\"\n    @close=\"close\"\n  >\n    <div\n      class=\"container-fluid-xl my-2 inline-block h-[90vh] max-h-[44rem] transform overflow-hidden rounded-lg text-left align-bottom shadow-xl transition-all md:h-[85vh]\"\n    >\n      <div class=\"flex h-full flex-col bg-bgr-200\">\n        <div class=\"flex items-center bg-bgr px-4 py-2 xl:px-8\">\n          <h3 class=\"flex-1 text-lg font-medium leading-6 text-txt-stronger\">\n            {{ $t(`${trPrefix}countryAndLanguage`) }}\n          </h3>\n\n          <div\n            class=\"mx-auto flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-full bg-bgr-200\"\n            @click=\"close\"\n          >\n            <WebccIcon class=\"h-6 w-6\" name=\"site/x\" />\n          </div>\n        </div>\n\n        <div class=\"flex flex-col gap-8 overflow-y-auto p-4 sm:flex-row xl:p-8\">\n          <section class=\"w-full sm:w-1/2 md:w-2/3 lg:w-3/4\">\n            <h6 class=\"font-semibold\">{{ $t(`${trPrefix}europe`) }}</h6>\n            <ul\n              v-if=\"targets.eur\"\n              class=\"columns-1 gap-8 md:columns-2 lg:columns-3\"\n            >\n              <li\n                v-for=\"domain in targets.eur\"\n                :key=\"domain.path\"\n                class=\"mr-4 w-full shrink-0 border-b border-bgr-300 hover:bg-bgr xl:w-64\"\n              >\n                <WebccLink\n                  anchor\n                  class=\"flex flex-row items-center gap-2 px-2 py-3\"\n                  :to=\"getUrlWithParams(domain.path)\"\n                  :data-code=\"domain.lang\"\n                  @click=\"languageTracking(domain.name)\"\n                >\n                  <WebccIcon\n                    class=\"h-6 w-6\"\n                    :name=\"'flags/' + domain.flag\"\n                    filled\n                  />\n                  <span class=\"grow\">{{ domain.name }}</span>\n                  <b class=\"text-bgr-strong w-5\">{{ domain.lang }}</b>\n                </WebccLink>\n              </li>\n            </ul>\n          </section>\n\n          <section\n            v-if=\"targets.int && targets.int.length > 0\"\n            class=\"w-full sm:w-1/2 md:w-1/3 lg:w-1/4\"\n          >\n            <h6 class=\"font-semibold\">{{ $t(`${trPrefix}international`) }}</h6>\n            <ul class=\"columns-1 gap-8\">\n              <li\n                v-for=\"domain in targets.int\"\n                :key=\"domain.path\"\n                class=\"mr-4 w-full border-b border-bgr-300 hover:bg-bgr xl:w-64\"\n              >\n                <WebccLink\n                  anchor\n                  class=\"flex flex-row items-center gap-2 px-2 py-3\"\n                  :to=\"getUrlWithParams(domain.path)\"\n                  :data-code=\"domain.lang\"\n                  @click=\"languageTracking(domain.name)\"\n                >\n                  <WebccIcon\n                    class=\"h-6 w-6\"\n                    :name=\"'flags/' + domain.flag\"\n                    filled\n                  />\n                  <span class=\"grow\">{{ domain.name }}</span>\n                  <b class=\"text-bgr-strong w-5\">{{ domain.lang }}</b>\n                </WebccLink>\n              </li>\n            </ul>\n          </section>\n        </div>\n      </div>\n    </div>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'www.components.site.DomainLanguageSwitcher.'\n\nconst params = useParams()\n\nexport type Domains = {\n  eur: { flag: string; lang: string; path: string; name: string }[]\n  int: { flag: string; lang: string; path: string; name: string }[]\n}\n\nconst props = defineProps<{\n  open?: boolean\n  pagetype: string\n  urls: Record<string, string>\n  domains: Domains\n}>()\nconst emit = defineEmits<{ (e: 'close'): void }>()\n\nconst WebccModal = resolveComponent('WebccModal')\n\nconst targets = computed(() => {\n  return props.domains || {}\n})\n\nfunction getUrlWithParams(path: string) {\n  const url = new URL(props.urls[path])\n  const searchParams = new URLSearchParams({\n    ...(params.persistent as Record<string, string>),\n  })\n  url.search = searchParams.toString()\n  return url\n}\n\nfunction close() {\n  emit('close')\n}\n\nfunction languageTracking(domain: string) {\n  useTracking().handlers?.homepage.footerChangeCountryAndLanguage(\n    domain ?? '',\n    useRoute().path,\n  )\n}\n</script>\n","<template>\n  <footer\n    v-if=\"!iframe\"\n    v-track:impression=\"{\n      event: `homepage:footerElementImpression`,\n      params: { pos: useRoute().path },\n    }\"\n    class=\"bg-bgr-300\"\n  >\n    <main\n      class=\"container-fluid-lg grid grid-cols-1 gap-8 py-16 sm:grid-cols-2 md:grid-cols-3 md:gap-16\"\n    >\n      <section>\n        <div v-if=\"isContactBoxEnabled\" class=\"mb-8 md:mb-16\">\n          <h4 class=\"mb-2 text-xl font-light text-thm\">\n            {{ $t(`${trPrefix}contact.heading`) }}\n          </h4>\n          <p class=\"mt-2 text-base font-light leading-normal\">\n            {{ $t(`${trPrefix}contact.support`) }}\n          </p>\n          <p class=\"mt-2 text-base font-light leading-normal\">\n            {{ $t(`${trPrefix}contact.availability`) }}\n          </p>\n\n          <WebccLink\n            v-if=\"isPhoneNumberEnabled\"\n            anchor\n            class=\"mt-4 flex items-center font-light hover:text-thm\"\n            :to=\"'tel:' + trimmedPhoneNumber\"\n          >\n            <WebccIcon\n              name=\"site/telefon-alt\"\n              class=\"mr-2 h-6 w-6 border-0 border-dotted border-txt\"\n              filled\n            />\n            {{ salesoffice?.phone }}\n          </WebccLink>\n          <WebccLink\n            anchor\n            class=\"mt-2 flex items-center font-light hover:text-thm\"\n            :to=\"'mailto:' + salesoffice?.email\"\n            :title=\"salesoffice?.email\"\n          >\n            <WebccIcon\n              name=\"site/mail\"\n              class=\"mr-2 h-6 w-6 border-0 border-dotted border-txt\"\n              filled\n            />\n            {{ salesoffice?.email }}\n          </WebccLink>\n        </div>\n        <div>\n          <h4 class=\"mb-2 text-xl font-light text-thm\">\n            {{ $t(`${trPrefix}about.heading.ih`) }}\n          </h4>\n          <ul class=\"mt-2 w-full\">\n            <li v-for=\"({ label, link }, i) in footer?.menu\" :key=\"i\">\n              <WebccLink\n                :anchor=\"link!.anchor\"\n                :to=\"link!.href\"\n                class=\"group mb-2 flex items-center justify-between border-b border-bgr-400 py-1 text-txt hover:border-thm hover:text-thm\"\n              >\n                {{ label }}\n                <WebccIcon\n                  :filled=\"true\"\n                  name=\"site/chevron-right\"\n                  class=\"-mr-1.5 h-5 w-5 text-txt group-hover:text-thm\"\n                />\n              </WebccLink>\n            </li>\n            <li>\n              <button\n                v-if=\"useConfdata().siteCode === 'icDEde'\"\n                class=\"group mb-2 flex w-full items-center justify-between border-b border-bgr-400 py-1 text-txt hover:border-thm hover:text-thm\"\n                @click=\"feedback = true\"\n              >\n                <span>{{ $t(`${trPrefix}siteFeedback`) }}</span>\n                <WebccIcon\n                  :filled=\"true\"\n                  name=\"site/chevron-right\"\n                  class=\"-mr-1.5 h-5 w-5 text-txt group-hover:text-thm\"\n                />\n              </button>\n            </li>\n            <li>\n              <button\n                v-if=\"storage.available\"\n                class=\"group mb-2 flex w-full items-center justify-between border-b border-bgr-400 py-1 text-txt hover:border-thm hover:text-thm\"\n                @click=\"openConfig\"\n              >\n                <span>{{ $t(`${trPrefix}cookieSettings`) }}</span>\n                <WebccIcon\n                  :filled=\"true\"\n                  name=\"site/chevron-right\"\n                  class=\"-mr-1.5 h-5 w-5 text-txt group-hover:text-thm\"\n                />\n              </button>\n            </li>\n          </ul>\n        </div>\n      </section>\n      <section>\n        <div class=\"mb-8 md:mb-16\">\n          <h4 class=\"mb-2 text-xl font-light text-thm\">\n            {{ $t(`${trPrefix}social.heading`) }}\n          </h4>\n          <div class=\"flex gap-5\">\n            <SocialMediaLink\n              v-for=\"({ icon, link }, i) in footer?.socialMedia\"\n              :key=\"i + 'sm'\"\n              :target=\"icon\"\n              :link=\"link.href\"\n            />\n          </div>\n        </div>\n        <div>\n          <h4 class=\"mb-2 text-xl font-light text-thm\">\n            {{ $t(`${trPrefix}payment.heading`) }}\n          </h4>\n          <p class=\"mt-2 text-base font-light leading-normal\">\n            {{ $t(`${trPrefix}payment.encrypted`) }}\n          </p>\n\n          <ul class=\"mt-4 space-y-4\">\n            <li\n              v-for=\"(pm, i) in paymentForms\"\n              :key=\"i + 'pm'\"\n              class=\"flex h-12 items-center justify-end gap-4 rounded border border-bgr-400 px-4 shadow\"\n            >\n              <img\n                v-if=\"paymentMethods[pm.type].img\"\n                :src=\"paymentMethods[pm.type].img\"\n                :class=\"paymentMethods[pm.type].classes\"\n                :alt=\"paymentMethods[pm.type].textkey\"\n                loading=\"lazy\"\n              />\n              <WebccIcon\n                v-show=\"pm.type\"\n                v-else-if=\"paymentMethods[pm.type].icon\"\n                :name=\"paymentMethods[pm.type].icon\"\n                :class=\"paymentMethods[pm.type].classes\"\n                filled\n              />\n              <div class=\"ml-auto font-light\">\n                {{\n                  $t(\n                    `${trPrefix}payment.${paymentMethods[pm.type].textkey}` as TranslationKey,\n                  )\n                }}\n              </div>\n            </li>\n          </ul>\n        </div>\n      </section>\n      <section class=\"col-span-1 flex flex-col sm:col-span-2 md:col-span-1\">\n        <div\n          class=\"grid grid-cols-1 gap-0 sm:grid-cols-2 sm:gap-8 md:grid-cols-1 md:gap-0\"\n        >\n          <div class=\"mb-8 flex flex-col md:mb-16\">\n            <h4 class=\"mb-2 text-xl font-light text-thm\">\n              {{ $t(`${trPrefix}partner.migros`) }}\n            </h4>\n            <WebccIcon\n              name=\"site/migros\"\n              class=\"h-12 w-32 rounded bg-bgr p-2 shadow-sm\"\n              filled\n            />\n          </div>\n\n          <div class=\"mb-8 flex flex-col md:mb-16\">\n            <h4 class=\"mb-2 text-xl font-light text-thm\">\n              {{ $t(`${trPrefix}partner.heading`) }}\n            </h4>\n\n            <div\n              v-for=\"({ image, label }, i) in footer?.partnerships\"\n              :key=\"i + 'ps'\"\n              class=\"flex flex-col\"\n            >\n              <img\n                :src=\"image?.asset\"\n                :alt=\"image?.alt\"\n                :height=\"image?.height\"\n                :width=\"image?.width\"\n              />\n              <p class=\"text-sm font-light\">{{ label }}</p>\n            </div>\n          </div>\n        </div>\n        <div\n          v-if=\"\n            !siteSettings?.includes('hideDomainSwitcher') && footer?.localeURLs\n          \"\n          class=\"mt-auto flex flex-col\"\n        >\n          <h4 class=\"mb-2 text-xl font-light text-thm\">\n            {{ $t(`${trPrefix}partner.domains`) }}\n          </h4>\n\n          <WebccButton\n            :icon=\"'flags/' + currentDomain.flag\"\n            variant=\"white\"\n            class=\"flex items-center gap-2 self-start rounded text-lg shadow-sm\"\n            icon-filled\n            @click=\"openDomainSwitcher\"\n          >\n            {{ currentDomain.name }}\n            <b class=\"ml-6 font-semibold\">{{ currentDomain.lang }}</b>\n          </WebccButton>\n        </div>\n      </section>\n    </main>\n\n    <section class=\"flex h-16 items-center justify-center bg-bgr-200\">\n      <span>{{\n        $t(`${trPrefix}copyright`, {\n          year: new Date().getFullYear().toString(),\n        })\n      }}</span>\n    </section>\n    <DomainLanguageSwitcher\n      v-if=\"footer?.localeURLs\"\n      :domains=\"domains\"\n      :pagetype=\"pagetype || ''\"\n      :urls=\"footer.localeURLs ?? {}\"\n      :open=\"domLangOpen && isDomainSwitcherEnabled\"\n      @close=\"closeDomainSwitcher\"\n    />\n  </footer>\n\n  <footer v-else-if=\"showFooterLinks\" class=\"mt-4 flex flex-col bg-bgr-100 p-4\">\n    <div class=\"flex flex-wrap justify-center\">\n      <WebccLink\n        target=\"_blank\"\n        :to=\"links?.conditions?.href\"\n        :title=\"links?.conditions?.label\"\n        class=\"block w-max text-txt m-3 hover:text-thm\"\n      >\n        {{ links?.conditions?.label }}\n      </WebccLink>\n      <WebccLink\n        target=\"_blank\"\n        :to=\"links?.privacyPolicy?.href\"\n        :title=\"links?.privacyPolicy?.label\"\n        class=\"block w-max text-txt m-3 hover:text-thm\"\n      >\n        {{ links?.privacyPolicy?.label }}\n      </WebccLink>\n      <WebccLink\n        target=\"_blank\"\n        :to=\"links?.imprint?.href\"\n        :title=\"links?.imprint?.label\"\n        class=\"block w-max text-txt m-3 hover:text-thm\"\n      >\n        {{ links?.imprint?.label }}\n      </WebccLink>\n    </div>\n  </footer>\n\n  <WebccModal v-if=\"feedback\" @close=\"feedback = false\">\n    <div\n      class=\"relative flex flex-col overflow-hidden w-[95vw] h-[95vh] max-h-[648px] max-w-[600px] bg-bgr rounded\"\n    >\n      <div\n        class=\"h-10 px-4 py-2 font-semibold text-left bg-[#ffa500] transition-all text-txt-contrast rounded-t\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        aria-labelledby=\"modal-headline\"\n      >\n        {{ $t(`${trPrefix}siteFeedback`) }}\n      </div>\n      <div\n        class=\"absolute flex items-center justify-center h-5 w-5 top-2.5 right-4 rounded-full bg-bgr cursor-pointer\"\n        @click=\"feedback = false\"\n      >\n        <WebccIcon name=\"site/cross\" class=\"h-4 w-auto\"></WebccIcon>\n      </div>\n      <iframe\n        src=\"https://form.jotform.com/232913817871362\"\n        class=\"w-full h-full overflow-scroll rounded-b\"\n      />\n    </div>\n  </WebccModal>\n</template>\n\n<script setup lang=\"ts\">\nimport { storeToRefs } from 'pinia'\nimport type { Domains } from './DomainLanguageSwitcher.vue'\n\nconst trPrefix = 'www.components.footer.'\n\nconst isDomainSwitcherEnabled = useFlag('domain-switcher-clickable')\nconst isContactBoxEnabled = useFlag('footer-contact-box')\nconst isPhoneNumberEnabled = useFlag('footer-phone-number')\n\nconst { pagetype, salesoffice, links, siteSettings, siteCode, footer } =\n  storeToRefs(useConfdata())\nconst trimmedPhoneNumber = salesoffice.value?.phone.replace(' ', '')\n\nconst iframe = computed(() => useParams().iframe)\n\nconst storage = { available: true }\nconst feedback = ref(false)\n\nconst domains: Domains = {\n  eur: [\n    { flag: 'be', lang: 'NL', path: 'ihBEnl', name: 'België' },\n    { flag: 'be', lang: 'FR', path: 'ihBEfr', name: 'Belgique' },\n    { flag: 'cz', lang: 'CS', path: 'ihCZcs', name: 'Česko' },\n    { flag: 'cz', lang: 'EN', path: 'ihCZen', name: 'Czech Republic' },\n    { flag: 'dk', lang: 'DA', path: 'ihDKda', name: 'Danmark' },\n    { flag: 'dk', lang: 'EN', path: 'ihDKen', name: 'Denmark' },\n    { flag: 'de', lang: 'DE', path: 'ihDEde', name: 'Deutschland' },\n    { flag: 'es', lang: 'ES', path: 'ihESes', name: 'España' },\n    { flag: 'ee', lang: 'EN', path: 'ihEEen', name: 'Estonia' },\n    { flag: 'ee', lang: 'FI', path: 'ihEEfi', name: 'Viro' },\n    { flag: 'fr', lang: 'FR', path: 'ihFRfr', name: 'France' },\n    { flag: 'gb', lang: 'EN', path: 'ihUKen', name: 'Great Britain' },\n    { flag: 'hr', lang: 'HR', path: 'ihHRhr', name: 'Hrvatska' },\n    { flag: 'ie', lang: 'EN', path: 'ihIEen', name: 'Ireland' },\n    { flag: 'it', lang: 'IT', path: 'ihITit', name: 'Italia' },\n    { flag: 'nl', lang: 'NL', path: 'ihNLnl', name: 'Nederland' },\n    { flag: 'no', lang: 'NO', path: 'ihNOno', name: 'Norge' },\n    { flag: 'no', lang: 'EN', path: 'ihNOen', name: 'Norway' },\n    { flag: 'at', lang: 'DE', path: 'ihATde', name: 'Österreich' },\n    { flag: 'at', lang: 'EN', path: 'ihATen', name: 'Austria' },\n    { flag: 'pl', lang: 'PL', path: 'ihPLpl', name: 'Polska' },\n    { flag: 'pt', lang: 'PT', path: 'ihPTpt', name: 'Portugal' },\n    { flag: 'ch', lang: 'DE', path: 'ihCHde', name: 'Schweiz' },\n    { flag: 'ch', lang: 'FR', path: 'ihCHfr', name: 'Suisse' },\n    { flag: 'ch', lang: 'IT', path: 'ihCHit', name: 'Svizzera' },\n    { flag: 'ch', lang: 'EN', path: 'ihCHen', name: 'Switzerland' },\n    { flag: 'fi', lang: 'FI', path: 'ihFIfi', name: 'Suomi' },\n    { flag: 'se', lang: 'SV', path: 'ihSEsv', name: 'Sverige' },\n    { flag: 'se', lang: 'EN', path: 'ihSEen', name: 'Sweden' },\n  ],\n  int: [{ flag: 'ih', lang: 'EN', path: 'ihCOMen', name: 'Interhome.com' }],\n}\n\nconst paymentMethods: Record<\n  string,\n  { img?: string; icon?: string; textkey: string; classes: string } & (\n    | { img: string }\n    | { icon: string }\n  )\n> = {\n  MAST: { icon: 'site/mastercard', textkey: 'MAST', classes: 'h-12 w-12' },\n  VISA: { icon: 'site/visa', textkey: 'VISA', classes: 'h-12 w-12' },\n  BLEU: { icon: '', textkey: '', classes: 'h-12 w-12' },\n  CHECK: { icon: '', textkey: '', classes: 'h-12 w-12' },\n  ECV: {\n    img: '/images/pay-methods/ecv.svg',\n    textkey: 'ECV',\n    classes: 'h-8 w-24',\n  },\n  IDEAL: { icon: 'site/ideal', textkey: 'ID', classes: 'h-12 w-12' },\n  TWINT: {\n    img: '/images/pay-methods/twint.svg',\n    textkey: 'TW',\n    classes: 'h-20 w-16',\n  },\n  '': { icon: '', textkey: 'INV', classes: 'h-12 w-12' },\n  PAYPAL: {\n    img: '/images/pay-methods/paypal.svg',\n    textkey: 'PAYPAL',\n    classes: 'h-8 w-20',\n  },\n}\n\nconst showFooterLinks = computed(() => {\n  return (\n    iframe.value && ['footer', 'full'].includes(iframe.value.layout.toString())\n  )\n})\n\nconst currentDomain: ComputedRef<{\n  flag?: string\n  lang?: string\n  path?: string\n  name?: string\n}> = computed(() => {\n  return (\n    Object.values(domains)\n      .flat()\n      .find((domain) => {\n        return domain.path === siteCode.value\n      }) || {}\n  )\n})\n\nconst paymentForms = computed(() => {\n  return salesoffice.value?.paymentForms\n    .filter((p) => Object.keys(paymentMethods).includes(p.type))\n    .sort((p1, p2) => {\n      if (p2.mode === 'INV') {\n        return -1\n      }\n      if (p1.mode === 'INV') {\n        return 1\n      }\n      return 0\n    })\n})\n\nconst domLangOpen = ref(false)\n\nfunction openConfig() {\n  useConsent().configOpen = true\n}\n\nfunction openDomainSwitcher() {\n  domLangOpen.value = true\n}\n\nfunction closeDomainSwitcher() {\n  domLangOpen.value = false\n}\n</script>\n","<template>\n  <div\n    role=\"radiogroup\"\n    :name=\"name\"\n    class=\"flex content-center\"\n    :class=\"\n      border\n        ? 'flex-col gap-2 sm:flex-row sm:flex-wrap'\n        : 'flex-row flex-wrap gap-x-4 gap-y-4 sm:gap-x-8'\n    \"\n    @click.stop\n  >\n    <label\n      v-for=\"option in options\"\n      :key=\"option.value\"\n      class=\"inline-flex cursor-pointer items-center justify-center gap-2 transition-all duration-200\"\n      :class=\"\n        border\n          ? `${sizeClasses} border-txt-weaker mb-1 rounded border sm:mb-0`\n          : 'h-5'\n      \"\n    >\n      <input\n        :value=\"option.value\"\n        type=\"radio\"\n        :name=\"name\"\n        :checked=\"option.value === value ? true : false\"\n        class=\"border-txt-weak text-thm focus:ring-thm border transition-all duration-200\"\n        @click.stop\n        @change.stop=\"\n          $emit('change', ($event.target as HTMLInputElement).value)\n        \"\n      />\n      <span class=\"text-sm leading-4\"> {{ option.label }}</span>\n    </label>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\ntype OptionValue = string | number\ntype Option = { label: string; value: OptionValue }\nconst props = withDefaults(\n  defineProps<{\n    value: boolean | string | number\n    options: Option[]\n    label?: string\n    name?: string\n    size?: string\n    border?: boolean\n  }>(),\n  {\n    label: '',\n    name: '',\n    size: 'md',\n    border: true,\n  },\n)\n\ndefineEmits<{ (e: 'change', value: boolean | string | number): void }>()\n\nconst sizeClasses = computed(() => {\n  switch (props.size) {\n    case 'md':\n      return 'pl-4 pr-8 h-14'\n    case 'sm':\n      return 'pl-4 pr-4 h-10'\n    default:\n      return 'pl-4 pr-8 h-14'\n  }\n})\n</script>\n","<template>\n  <div\n    class=\"grid gap-4 sm:grid-cols-2 md:grid-cols-3 max-h-[80vH] overflow-y-auto\"\n  >\n    <div\n      v-for=\"{\n        name,\n        title,\n        isEnabled,\n        url,\n        variant,\n        variants,\n        toggle,\n      } in features\"\n      :key=\"name\"\n      class=\"flex flex-col gap-2 px-3 py-2 rounded-xl bg-black/5 shadow-md backdrop-blur-sm hover:shadow-xl hover:backdrop-blur-lg\"\n    >\n      <label\n        class=\"flex flex-row items-center justify-start gap-4\"\n        :for=\"`feature-${name}`\"\n      >\n        <WebccSwitch\n          :name=\"`feature-${name}`\"\n          :model-value=\"isEnabled\"\n          @update:model-value=\"toggle()\"\n        />\n        <div class=\"flex flex-col\">\n          <span class=\"text-sm font-semibold\">{{ title }}</span>\n          <a\n            class=\"text-xs hover:text-thm\"\n            :href=\"url\"\n            anchor\n            target=\"_blank\"\n            title=\"Open in Unleash\"\n          >\n            {{ name }}\n          </a>\n        </div>\n      </label>\n      <label\n        v-if=\"variants.length\"\n        :for=\"`feature-${name}-variant`\"\n        class=\"flex flex-row gap-2 text-sm\"\n      >\n        <span>Variant:</span>\n        <WebccRadio\n          :name=\"`feature-${name}-variant`\"\n          :value=\"variant?.name ?? ''\"\n          :options=\"variants.map(({ name }) => ({ value: name, label: name }))\"\n          :border=\"false\"\n          class=\"!gap-x-4 !gap-y-2\"\n          size=\"sm\"\n          @change=\"toggle($event.toString())\"\n        />\n      </label>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst nuxtApp = useNuxtApp()\n\nconst features = computed(() =>\n  Object.values(nuxtApp.$unleash.features)\n    .toSorted((a, b) => a.name.localeCompare(b.name))\n    .map(({ name }) => toReactive(useFeature(name))),\n)\n</script>\n","<template>\n  <div\n    id=\"ab\"\n    class=\"w-full grid gap-4 sm:grid-cols-2 md:grid-cols-3 max-h-[90vH] overflow-y-auto\"\n  >\n    <label\n      v-for=\"object in useAB().all\"\n      :key=\"object.key\"\n      class=\"flex items-center justify-start gap-2 rounded-xl bg-black/5 px-3 py-2 shadow-md backdrop-blur-sm hover:shadow-xl hover:backdrop-blur-lg\"\n    >\n      <WebccSwitch\n        :model-value=\"object.active || false\"\n        :name=\"object.name\"\n        @update:model-value=\"useAB().toggle(object.key, $event)\"\n      />\n      <!-- TODO: activate select variant\n             check {{ typeof object.value }} ???\n      -->\n\n      <!--\n      <Select\n        v-else\n        size=\"sm\"\n        class=\"min-w-1/4 w-fit text-black\"\n        :value=\"object.value\"\n        :options=\"Object.keys(object.variants)\"\n        @update=\"$ab(object.key, $event)\"\n      />\n      -->\n      <div>\n        <p class=\"text-sm font-semibold text-white\">{{ object.name }}</p>\n        <p class=\"text-gray-300 text-xs\">\n          key: {{ object.key }} - {{ object.description }}\n        </p>\n      </div>\n    </label>\n  </div>\n</template>\n\n<script setup lang=\"ts\"></script>\n","<template>\n  <div>\n    <div\n      class=\"absolute left-0 top-0 z-10 h-2 w-2\"\n      @click.self.stop=\"toggler.toggle('debug', { state: true })\"\n    ></div>\n    <div v-if=\"toggler.toggles('debug').value\">\n      <aside class=\"fixed top-0 z-10 w-full bg-black/50\">\n        <nav class=\"container-fluid-lg flex\">\n          <button\n            v-for=\"[id, title] in Object.entries(TABS)\"\n            :key=\"id\"\n            class=\"px-4 py-1.5 text-base font-light text-txt-weaker hover:bg-black/60 hover:text-txt-weakest\"\n            @click.stop=\"openTab(id)\"\n          >\n            {{ title }}\n          </button>\n\n          <button\n            class=\"ml-auto cursor-pointer self-center rounded-full bg-black/40 text-txt-weakest hover:bg-black/60\"\n            @click.stop=\"toggler.toggle('debug', { state: false })\"\n          >\n            <WebccIcon name=\"site/x\" class=\"h-6 w-6 stroke-2 p-0.5\" />\n          </button>\n        </nav>\n\n        <!-- Features -->\n        <div\n          v-if=\"toggler.toggles('features').value\"\n          class=\"container-fluid-lg relative\"\n        >\n          <div\n            class=\"absolute w-full rounded-b bg-black/50 p-8 pt-12 text-thm-contrast shadow backdrop-blur-lg\"\n          >\n            <button\n              class=\"absolute right-4 top-4 cursor-pointer rounded-full bg-black/40 text-txt-weakest hover:bg-black/60\"\n              @click.stop=\"\n                toggler.toggle('features', { state: false, closeOthers: false })\n              \"\n            >\n              <WebccIcon name=\"site/x\" class=\"h-6 w-6 stroke-2 p-0.5\" />\n            </button>\n            <Features />\n          </div>\n        </div>\n\n        <!-- A/B -->\n        <div\n          v-if=\"toggler.toggles('ab').value\"\n          class=\"container-fluid-lg relative\"\n        >\n          <div\n            class=\"absolute w-full rounded-b bg-black/50 p-8 pt-12 text-thm-contrast shadow backdrop-blur-lg\"\n          >\n            <button\n              class=\"absolute right-4 top-4 cursor-pointer rounded-full bg-black/40 text-txt-weakest hover:bg-black/60\"\n              @click.stop=\"\n                toggler.toggle('ab', { state: false, closeOthers: false })\n              \"\n            >\n              <WebccIcon name=\"site/x\" class=\"h-6 w-6 stroke-2 p-0.5\" />\n            </button>\n            <div class=\"flex flex-col lg:flex-row lg:justify-between\">\n              <AB />\n            </div>\n          </div>\n        </div>\n\n        <!-- CONF -->\n        <div\n          v-if=\"toggler.toggles('conf').value\"\n          class=\"container-fluid-lg relative z-10\"\n        >\n          <div\n            class=\"absolute w-full rounded-b bg-black/50 p-5 shadow backdrop-blur-lg\"\n          >\n            <button\n              class=\"absolute right-4 top-4 cursor-pointer rounded-full bg-black/40 text-txt-weakest hover:bg-black/60\"\n              @click=\"toggler.toggle('conf')\"\n            >\n              <WebccIcon name=\"site/x\" class=\"h-6 w-6 stroke-2 p-0.5\" />\n            </button>\n\n            <div class=\"flex w-full flex-col items-center pb-5\">\n              <p class=\"text-base text-txt-weaker\">domain:</p>\n              <p class=\"text-3xl font-semibold text-txt-weakest\">\n                {{ confData.domain }}\n              </p>\n            </div>\n            <div\n              class=\"grid w-full grid-cols-2 gap-6 pb-5 text-txt-weakest md:flex md:justify-between\"\n            >\n              <div\n                class=\"flex grow basis-0 flex-col rounded-xl bg-black/5 p-4 shadow-md backdrop-blur-sm transition-all duration-300 hover:-translate-y-1 hover:shadow-xl md:flex-row md:items-center\"\n              >\n                <div\n                  class=\"flex h-full w-full flex-row items-center justify-start gap-2\"\n                >\n                  <div class=\"flex h-1/2 items-center justify-center\">\n                    <div class=\"fill-text-txt-weakest flex h-8 w-8\">\n                      <WebccIcon name=\"site/chrome\" />\n                    </div>\n                  </div>\n                  <p class=\"text-sm text-txt-weaker\">Browser</p>\n                  <p>{{ userAgent.useragent?.browser.name }}</p>\n                </div>\n              </div>\n              <div\n                class=\"flex grow basis-0 flex-col rounded-xl bg-black/5 p-4 shadow-md backdrop-blur-sm transition-all duration-300 hover:-translate-y-1 hover:shadow-xl md:flex-row md:items-center\"\n              >\n                <div\n                  class=\"flex h-full w-full flex-row items-center justify-start gap-2\"\n                >\n                  <div class=\"flex h-1/2 items-center justify-center\">\n                    <div class=\"fill-text-txt-weakest flex h-8 w-8\">\n                      <WebccIcon name=\"site/version\" />\n                    </div>\n                  </div>\n                  <p class=\"text-sm text-txt-weaker\">Version</p>\n                  <p>{{ userAgent.useragent?.browser.version }}</p>\n                </div>\n              </div>\n              <div\n                class=\"flex grow basis-0 cursor-pointer flex-col rounded-xl bg-black/5 p-4 shadow-md backdrop-blur-sm transition-all duration-300 hover:-translate-y-1 hover:shadow-xl md:flex-row md:items-center\"\n              >\n                <div\n                  class=\"flex h-full w-full flex-row items-center justify-start gap-2\"\n                >\n                  <div class=\"flex h-1/2 items-center justify-center\">\n                    <div class=\"fill-text-txt-weakest flex h-8 w-8\">\n                      <WebccIcon\n                        :name=\"\n                          userAgent.useragent?.supported ? 'tick' : 'cross'\n                        \"\n                      />\n                    </div>\n                  </div>\n                  <p class=\"text-sm text-txt-weaker\">Supported</p>\n                  <p></p>\n                </div>\n              </div>\n              <div\n                class=\"flex grow basis-0 flex-col rounded-xl bg-black/5 p-4 shadow-md backdrop-blur-sm transition-all duration-300 hover:-translate-y-1 hover:shadow-xl md:flex-row md:items-center\"\n              >\n                <div\n                  class=\"flex h-full w-full flex-row items-center justify-start gap-2\"\n                >\n                  <div class=\"flex h-1/2 items-center justify-center\">\n                    <div class=\"fill-text-txt-weakest flex h-8 w-8\">\n                      <WebccIcon :name=\"userAgent.useragent?.device ?? ''\" />\n                    </div>\n                  </div>\n                  <p class=\"text-sm text-txt-weaker\">Device</p>\n                  <p>{{ userAgent.useragent?.device }}</p>\n                </div>\n              </div>\n            </div>\n            <div\n              class=\"grid w-full grid-cols-2 gap-6 pb-5 text-txt-weakest md:flex md:justify-between\"\n            >\n              <div\n                class=\"flex grow basis-0 flex-col rounded-xl bg-black/5 p-4 shadow-md backdrop-blur-sm transition-all duration-300 hover:-translate-y-1 hover:shadow-xl md:flex-row md:items-center\"\n              >\n                <div\n                  class=\"flex h-full w-full flex-row items-center justify-start gap-2\"\n                >\n                  <pre\n                    class=\"h-screen-50 overflow-scroll whitespace-pre-wrap break-words rounded-xl border-txt bg-black/5 p-4 text-xs text-txt-weakest shadow backdrop-blur-sm\"\n                    >{{ confData.raw?.conf }}</pre\n                  >\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <!-- BODY -->\n        <div\n          v-if=\"toggler.toggles('body').value\"\n          class=\"container-fluid-lg relative z-10\"\n        >\n          <div\n            class=\"absolute w-full rounded-b bg-black/50 p-5 shadow backdrop-blur-lg\"\n          >\n            <button\n              class=\"absolute right-4 top-4 cursor-pointer rounded-full bg-black/40 text-txt-weakest hover:bg-black/60\"\n              @click=\"toggler.toggle('body')\"\n            >\n              <WebccIcon name=\"site/x\" class=\"h-6 w-6 stroke-2 p-0.5\" />\n            </button>\n            <div\n              class=\"grid w-full grid-cols-2 gap-6 pb-5 text-txt-weakest md:flex md:justify-between mt-8\"\n            >\n              <div\n                class=\"flex grow basis-0 flex-col rounded-xl bg-black/5 p-4 shadow-md backdrop-blur-sm transition-all duration-300 hover:-translate-y-1 hover:shadow-xl md:flex-row md:items-center\"\n              >\n                <div\n                  class=\"flex h-full w-full flex-row items-center justify-start gap-2\"\n                >\n                  <pre\n                    class=\"h-screen-50 overflow-scroll whitespace-pre-wrap break-words rounded-xl border-txt bg-black/5 p-4 text-xs text-txt-weakest shadow backdrop-blur-sm\"\n                    >{{ confData.body }}</pre\n                  >\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <!-- SETTINGS -->\n        <div\n          v-if=\"toggler.toggles('settings').value\"\n          class=\"container-fluid-lg relative z-10\"\n        >\n          <div\n            class=\"absolute w-full rounded-b bg-black/50 p-5 shadow backdrop-blur-lg\"\n          >\n            <button\n              class=\"absolute right-4 top-4 cursor-pointer rounded-full bg-black/40 text-txt-weakest hover:bg-black/60\"\n              @click=\"toggler.toggle('settings')\"\n            >\n              <WebccIcon name=\"site/x\" class=\"h-6 w-6 stroke-2 p-0.5\" />\n            </button>\n            <div\n              class=\"grid w-full grid-cols-2 gap-6 pb-5 text-txt-weakest md:flex md:justify-between mt-8\"\n            >\n              <div\n                class=\"flex grow flex-wrap gap-y-2 basis-0 flex-col rounded-xl bg-black/5 p-4 shadow-md backdrop-blur-sm transition-all duration-300 hover:-translate-y-1 hover:shadow-xl md:flex-row md:items-center\"\n              >\n                <span\n                  v-for=\"[key, value] of Object.entries(settings).filter(\n                    ([, value]) => typeof value === 'boolean',\n                  )\"\n                  :key=\"key\"\n                >\n                  <label\n                    class=\"flex items-center justify-start gap-2 rounded-xl bg-black/5 px-3 py-2 shadow-md backdrop-blur-sm hover:shadow-xl hover:backdrop-blur-lg\"\n                  >\n                    <WebccSwitch\n                      :model-value=\"value\"\n                      :name=\"key\"\n                      @update:model-value=\"settings.set(key, !value)\"\n                    />\n                    <div>\n                      <p class=\"text-sm font-semibold text-white\">{{ key }}</p>\n                    </div>\n                  </label>\n                </span>\n              </div>\n            </div>\n\n            <div\n              class=\"grid w-full grid-cols-2 gap-6 pb-5 text-txt-weakest md:flex md:justify-between\"\n            >\n              <div\n                class=\"flex grow basis-0 flex-col rounded-xl bg-black/5 p-4 shadow-md backdrop-blur-sm transition-all duration-300 hover:-translate-y-1 hover:shadow-xl md:flex-row md:items-center\"\n              >\n                <div\n                  class=\"flex h-full flex-row items-center justify-start gap-2\"\n                >\n                  <pre\n                    class=\"h-screen-50 overflow-scroll whitespace-pre-wrap break-words rounded-xl border-txt bg-black/5 p-4 text-xs text-txt-weakest shadow backdrop-blur-sm\"\n                    >{{ runtimeConfig }}</pre\n                  >\n                </div>\n              </div>\n              <div\n                class=\"flex grow basis-0 flex-col rounded-xl bg-black/5 p-4 shadow-md backdrop-blur-sm transition-all duration-300 hover:-translate-y-1 hover:shadow-xl md:flex-row md:items-center\"\n              >\n                <div\n                  class=\"flex h-full flex-row items-center justify-start gap-2\"\n                >\n                  <pre\n                    class=\"h-screen-50 whitespace-pre-wrap break-words rounded-xl border-txt bg-black/5 p-4 text-xs text-txt-weakest shadow backdrop-blur-sm\"\n                    >{{ settings.all }}</pre\n                  >\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <!-- COLORS -->\n        <div\n          v-if=\"toggler.toggles('colors').value\"\n          class=\"container-fluid-lg relative top-1 z-10\"\n        >\n          <div\n            class=\"absolute left-0 right-0 flex max-h-[90vh] flex-row justify-between gap-12 overflow-auto rounded-b bg-white/50 p-4 py-12 shadow backdrop-blur-lg\"\n          >\n            <div\n              v-for=\"(items, group) in colorGroups\"\n              :key=\"group\"\n              class=\"flex flex-col gap-2\"\n            >\n              <h3 class=\"text-lg font-semibold\">{{ COLOR_GROUPS[group] }}</h3>\n              <div\n                v-for=\"(value, key) in items\"\n                :key=\"key\"\n                class=\"flex w-min flex-row gap-2\"\n              >\n                <span class=\"w-32\">{{ key }}</span>\n                <input\n                  type=\"color\"\n                  :value=\"value\"\n                  class=\"w-16 cursor-pointer border border-black\"\n                />\n              </div>\n            </div>\n          </div>\n          <button\n            class=\"absolute right-4 top-4 cursor-pointer rounded-full bg-black/40 text-white hover:bg-black/60\"\n            @click=\"toggler.toggle('colors')\"\n          >\n            <WebccIcon name=\"site/x\" class=\"h-6 w-6 stroke-2 p-0.5\" />\n          </button>\n        </div>\n\n        <!-- SEARCH -->\n        <section\n          v-if=\"toggler.toggles('search').value\"\n          class=\"container-fluid-lg relative z-10\"\n        >\n          <div\n            class=\"absolute left-0 right-0 rounded-b bg-black/50 p-4 shadow backdrop-blur-lg\"\n          >\n            <section>\n              <button\n                class=\"absolute right-4 top-4 cursor-pointer rounded-full bg-black/40 text-txt-weakest hover:bg-black/60\"\n                @click.stop=\"\n                  toggler.toggle('search', { state: false, closeOthers: false })\n                \"\n              >\n                <WebccIcon name=\"site/x\" class=\"h-6 w-6 stroke-2 p-0.5\" />\n              </button>\n              <span\n                class=\"block font-semibold text-lg text-txt-weakest mt-2 mb-2\"\n                >Autosuggest</span\n              >\n              <div class=\"bg-white p-4\">\n                Input Threshold\n                <WebccRadio\n                  :value=\"settings.autosuggestThreshold\"\n                  :options=\"[\n                    { value: 2, label: 'minimum 2 characters' },\n                    { value: 3, label: 'minimum 3 characters' },\n                  ]\"\n                  size=\"sm\"\n                  name=\"autosuggestThreshold\"\n                  class=\"[&>label]:p-2\"\n                  @change=\"settings.autosuggestThreshold = $event as number\"\n                />\n                Search Type\n                <WebccRadio\n                  :value=\"settings.autosuggestSearchtype\"\n                  :options=\"[\n                    {\n                      value: 'search_as_you_type',\n                      label: 'Search as you type',\n                    },\n                    { value: 'completion', label: 'Completion' },\n                  ]\"\n                  size=\"sm\"\n                  name=\"autosuggestSearchtype\"\n                  @change=\"settings.autosuggestSearchtype = $event.toString()\"\n                />\n                Size\n                <WebccRadio\n                  :value=\"settings.autosuggestSize\"\n                  :options=\"[\n                    { value: 10, label: '10 suggestions' },\n                    { value: 20, label: '20 suggestions' },\n                    { value: 50, label: '50 suggestions' },\n                    { value: 100, label: '100 suggestions' },\n                  ]\"\n                  size=\"sm\"\n                  name=\"autosuggestSize\"\n                  @change=\"settings.autosuggestSize = $event as number\"\n                />\n                Source (wirkt sich nur bei \"Search as you type\" aus)\n                <WebccRadio\n                  :value=\"settings.autosuggestSource\"\n                  :options=\"[\n                    { value: '', label: 'Keine Einschränkung' },\n                    { value: 'focus', label: 'Focus' },\n                  ]\"\n                  size=\"sm\"\n                  name=\"autosuggestSource\"\n                  @change=\"settings.autosuggestSource = $event.toString()\"\n                />\n              </div>\n            </section>\n            <section>\n              <span\n                class=\"block font-semibold text-lg text-txt-weakest mt-2 mb-2\"\n                >Mapsearch</span\n              >\n              <div class=\"bg-white p-4\">\n                <WebccCheckbox\n                  :value=\"settings.mapShowMapInfo\"\n                  label=\"Zeige Mapinfo\"\n                  class=\"mr-2\"\n                  name=\"mapShowMapInfo\"\n                  @update:model-value=\"settings.mapShowMapInfo = $event\"\n                />\n                <WebccCheckbox\n                  :value=\"settings.mapShowBounds\"\n                  label=\"Anfragebounds / map (gelb) und Ergebnisbounds / viewport (rot)\"\n                  class=\"mr-2\"\n                  name=\"mapShowBounds\"\n                  @update:model-value=\"settings.mapShowBounds = $event\"\n                />\n                <WebccCheckbox\n                  :value=\"settings.mapShowProposal\"\n                  label=\"Zeige Destination-Proposal\"\n                  class=\"mr-2\"\n                  name=\"mapShowProposal\"\n                  @update:model-value=\"settings.mapShowProposal = $event\"\n                />\n\n                De-Clustering-Method\n                <WebccRadio\n                  :value=\"settings.mapDeClustering\"\n                  :options=\"[\n                    {\n                      value: 'accosum',\n                      label: 'Summe Accos in Buckets <= 20 und Mapzoom > 12',\n                    },\n                    { value: 'none', label: 'Coords-Cardinality in Buckets' },\n                  ]\"\n                  size=\"sm\"\n                  name=\"mapShowProposal\"\n                  @change=\"settings.mapDeClustering = $event.toString()\"\n                />\n                Additional Bucket-Zoom\n                <WebccRadio\n                  :value=\"settings.mapAdditionalBucketZoom\"\n                  :options=\"[\n                    { value: 0, label: 'Display-Zoom der Karte' },\n                    { value: 1, label: 'Display-Zoom + 1' },\n                    { value: 2, label: 'Display-Zoom + 2' },\n                  ]\"\n                  size=\"sm\"\n                  name=\"mapAdditionalBucketZoom\"\n                  @change=\"settings.mapAdditionalBucketZoom = $event as number\"\n                />\n              </div>\n            </section>\n          </div>\n        </section>\n      </aside>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { mapValues, pickBy } from 'lodash-es'\n\nconst TABS = {\n  features: 'Features',\n  ab: 'AB',\n  conf: 'Conf',\n  body: 'Body',\n  settings: 'Settings',\n  colors: 'Colors',\n  search: 'New Search Settings',\n}\n\nconst COLOR_GROUPS = {\n  text: 'Text',\n  background: 'Background',\n  theme: 'Theme',\n  cta: 'CTA',\n  highlight: 'Highlight',\n  error: 'Error',\n  warning: 'Warning',\n  success: 'Success',\n}\n\nconst runtimeConfig = useRuntimeConfig()\nconst confData = useConfdata()\nconst settings = useSettings()\nconst userAgent = useUseragent()\nconst toggler = useToggler()\nconst colors = useColors()\n\nonBeforeMount(() => {\n  toggler.register('debug', {\n    state: settings.debug,\n    ignoreDocumentClick: true,\n  })\n  Object.keys(TABS).forEach((id) =>\n    toggler.register(id, { ignoreDocumentClick: true }),\n  )\n})\n\nfunction openTab(id: string) {\n  toggler.toggle(id, { closeOthers: true })\n  toggler.toggle('debug', { closeOthers: false })\n}\n\nconst colorGroups = computed(() =>\n  mapValues(COLOR_GROUPS, (_, group) => pickGroupColors(group)),\n)\n\nfunction pickGroupColors(group: string) {\n  return pickBy(colors.colors, (_, color) => color.startsWith(group))\n}\n</script>\n","<template>\n  <WebccModal @close=\"emit('close')\">\n    <div\n      class=\"config-content mx-auto my-0 flex w-[95%] max-w-3xl flex-col overflow-auto\"\n    >\n      <header\n        class=\"relative flex min-w-[300px] shrink-0 items-center justify-between rounded-t-md bg-bgr p-6\"\n      >\n        <p class=\"text-xl font-medium\">\n          {{ $t(`${trPrefix}cookiesManagePreferences`) }}\n        </p>\n        <button\n          class=\"pointer-events-auto relative inline-block h-6 w-6 shrink-0 grow-0 cursor-pointer select-none appearance-none rounded-xl border-0 bg-bgr-300 p-1 align-top outline-none\"\n          aria-label=\"close\"\n          @click=\"emit('close')\"\n        >\n          <svg\n            class=\"h-4 w-4 text-txt-contrast\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            fill=\"none\"\n            viewBox=\"0 0 24 24\"\n            stroke=\"currentColor\"\n            aria-hidden=\"true\"\n          >\n            <path\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n              stroke-width=\"2\"\n              d=\"M6 18L18 6M6 6l12 12\"\n            />\n          </svg>\n        </button>\n      </header>\n      <section class=\"flex-1-auto min-w-[300px] overflow-y-auto bg-bgr-100 p-6\">\n        <div class=\"choice grid overflow-auto pb-3 md:pb-4\">\n          <div class=\"choice-title text-base font-semibold text-txt\">\n            {{ $t(`${trPrefix}cookiesFunctionalTitle`) }}\n          </div>\n          <div class=\"choice-switch justify-self-end\">\n            <input\n              id=\"switch1\"\n              type=\"checkbox\"\n              class=\"checkbox\"\n              disabled\n              checked\n            />\n            <label for=\"switch1\" class=\"switch disabled\" />\n          </div>\n          <div class=\"choice-text max-w-2xl text-sm text-txt md:text-base\">\n            {{ $t(`${trPrefix}cookiesFunctionalText`) }}\n          </div>\n        </div>\n        <div class=\"choice grid overflow-auto pb-3 md:pb-4\">\n          <div class=\"choice-title text-base font-semibold text-txt\">\n            {{ $t(`${trPrefix}cookiesAnalyticalTitle`) }}\n          </div>\n          <div class=\"choice-switch justify-self-end\">\n            <input\n              id=\"switch2\"\n              v-model=\"usedConsent.statistics\"\n              type=\"checkbox\"\n              class=\"checkbox\"\n              value=\"true\"\n            />\n            <label for=\"switch2\" class=\"switch\" />\n          </div>\n          <div class=\"choice-text max-w-2xl text-sm text-txt md:text-base\">\n            {{ $t(`${trPrefix}cookiesAnalyticalText`) }}\n          </div>\n        </div>\n        <div class=\"choice grid overflow-auto\">\n          <div class=\"choice-title text-base font-semibold text-txt\">\n            {{ $t(`${trPrefix}cookiesMarketingTitle`) }}\n          </div>\n          <div class=\"choice-switch justify-self-end\">\n            <input\n              id=\"switch3\"\n              v-model=\"usedConsent.other\"\n              type=\"checkbox\"\n              class=\"checkbox\"\n              value=\"true\"\n            />\n            <label for=\"switch3\" class=\"switch\" />\n          </div>\n          <div class=\"choice-text max-w-2xl text-sm text-txt md:text-base\">\n            {{ $t(`${trPrefix}cookiesMarketingText`) }}\n          </div>\n        </div>\n      </section>\n      <footer\n        class=\"flex min-w-[300px] shrink-0 flex-col-reverse gap-4 rounded-b-md border-b bg-bgr p-6 sm:flex-row sm:justify-end\"\n      >\n        <WebccButton\n          variant=\"white\"\n          class=\"text-txt font-normal border transition-all h-11 w-full sm:w-48 !px-3\"\n          @click=\"\n            sendChoice({\n              statistics: usedConsent.statistics,\n              other: usedConsent.other,\n            })\n          \"\n        >\n          <span>{{ $t(`${trPrefix}cookiesConfirmChoice`) }}</span>\n        </WebccButton>\n        <WebccButton\n          variant=\"theme\"\n          class=\"transition-all h-11 w-full sm:w-48\"\n          @click=\"sendChoice({ statistics: true, other: true })\"\n        >\n          <span>{{ $t(`${trPrefix}cookiesAcceptAll`) }}</span>\n        </WebccButton>\n      </footer>\n    </div>\n  </WebccModal>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'components.cookieConsent.'\n\nconst usedConsent = useConsent().consent\n\nconst emit = defineEmits<{\n  (e: 'save-choice', value: Choice): void\n  (e: 'close'): void\n}>()\n\nfunction sendChoice(values: Choice) {\n  console.log('save Choice aus config', {\n    statistics: values.statistics,\n    other: values.other,\n  })\n  emit('save-choice', { statistics: values.statistics, other: values.other })\n}\n</script>\n\n<style scoped>\n.config-wrapper {\n  /* TODO: How to do this in tailwind? */\n  background-color: rgba(10, 10, 10, 0.625);\n}\n.config-content {\n  /* TODO: How to do this in tailwind? */\n  max-height: calc(100vh - 120px);\n}\n\n/* TODO: How to do this in tailwind? */\n.choice {\n  column-gap: 0.875rem;\n  grid-template-columns: 4fr 1fr;\n  grid-template-areas:\n    'title switch'\n    'text text';\n}\n@media (min-width: 960px) {\n  .choice {\n    column-gap: 1rem;\n  }\n}\n.choice-title {\n  grid-area: title;\n}\n.choice-switch {\n  grid-area: switch;\n}\n.choice-text {\n  grid-area: text;\n}\n\n/* https://medium.com/front-end-weekly/creating-a-toggle-switch-in-css-2d23e496d035 */\n/* TODO: How to do this in tailwind? */\n.checkbox {\n  display: none;\n}\n.switch {\n  @apply relative inline-block bg-bgr-300;\n  width: 40px;\n  height: 20px;\n  border-radius: 20px;\n}\n.switch:not(.disabled) {\n  @apply cursor-pointer;\n}\n.switch::after {\n  @apply bg-bgr;\n  content: '';\n  position: absolute;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  top: 1px;\n  left: 1px;\n  transition: all 0.5s;\n}\n.checkbox:checked + .switch::after {\n  left: 20px;\n}\n.checkbox:checked + .switch {\n  @apply bg-thm;\n}\n.checkbox:checked + .switch.disabled {\n  @apply bg-thm;\n  opacity: 0.4;\n}\n</style>\n","<template>\n  <div\n    class=\"md:container-fluid-lg fixed bottom-0 flex h-full w-full max-w-full justify-center overflow-y-auto px-6 sm:h-auto sm:-translate-y-9 sm:bg-transparent z-[9]\"\n    :class=\"{ 'bg-bgr-800 bg-opacity-80': !configIsOpen }\"\n  >\n    <div\n      class=\"consent-banner my-8 max-h-[85vh] overflow-y-auto rounded bg-bgr p-6\"\n      tabindex=\"-1\"\n      role=\"dialog\"\n      aria-hidden=\"true\"\n    >\n      <p class=\"mb-4 text-lg font-medium sm:text-xl\">\n        {{ $t(`${trPrefix}cookiesTitle`) }}\n      </p>\n      <span>{{ $t(`${trPrefix}cookiesInfotextBefore`) }}</span\n      >&nbsp;<span\n        class=\"inline-block cursor-pointer font-medium underline hover:no-underline\"\n        @click=\"openPrivacypolicy()\"\n        >{{ $t(`${trPrefix}cookiesMoreInfoHere`) }}</span\n      ><span>{{ $t(`${trPrefix}cookiesMoreInfoAfter`) }}</span>\n      <div\n        class=\"mt-6 flex flex-col items-center justify-start gap-4 sm:flex-row\"\n      >\n        <WebccButton\n          class=\"h-11 w-48\"\n          variant=\"theme\"\n          @click=\"sendChoice({ statistics: true, other: true })\"\n        >\n          <span>{{ $t(`${trPrefix}cookiesAccept`) }}</span>\n        </WebccButton>\n        <span\n          class=\"cursor-pointer underline transition-all hover:no-underline\"\n          @click=\"sendChoice({ statistics: false, other: false })\"\n          >{{ $t(`${trPrefix}cookiesDecline`) }}</span\n        >\n        <span\n          class=\"cursor-pointer underline transition-all hover:no-underline\"\n          @click=\"openConfig()\"\n          >{{ $t(`${trPrefix}cookiesConfigureLink`) }}</span\n        >\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst trPrefix = 'components.cookieConsent.'\n\ndefineProps<{\n  configIsOpen: boolean\n  openConfig: () => void\n  openPrivacypolicy: () => void\n}>()\n\nconst emit = defineEmits<{\n  'save-choice': [choice: Choice]\n  close: []\n}>()\n\n// body scroll lock\nconst windowScrollLock = useScrollLock(window)\nconst screen = useScreen()\nconst xs = screen.breakpoints.smaller('sm')\nwatch(xs, (isScreenSmall) => (windowScrollLock.value = isScreenSmall))\n\nfunction sendChoice(values: Choice) {\n  emit('save-choice', { statistics: values.statistics, other: values.other })\n}\n</script>\n\n<style scoped>\n.consent-banner {\n  /* TODO: How to do this in tailwind? */\n  box-shadow: 0px 0px 16px 8px rgba(0, 0, 0, 0.12);\n}\n</style>\n","<template>\n  <client-only>\n    <Teleport v-if=\"useStorageReady()\" to=\"body\">\n      <div\n        id=\"consent\"\n        class=\"relative flex items-center justify-center text-base\"\n      >\n        <ConsentConfig\n          v-if=\"consent.configOpen\"\n          @close=\"closeConfig\"\n          @save-choice=\"saveChoice\"\n        />\n        <ConsentBanner\n          v-if=\"consent.open\"\n          :open-config=\"openConfig\"\n          :open-privacypolicy=\"openPrivacypolicy\"\n          :config-is-open=\"consent.configOpen\"\n          @save-choice=\"saveChoice\"\n        />\n      </div>\n    </Teleport>\n  </client-only>\n</template>\n\n<script setup lang=\"ts\">\nconst consent = useConsent()\n\nconst decision = ref(false)\n\ndefineExpose({ decision, openConfig, openPrivacypolicy })\n\nfunction openPrivacypolicy() {\n  window.location.href =\n    useConfdata().links?.privacyPolicy?.href ||\n    'https://www.interhome.group/privacy-policy'\n}\n\nfunction openConfig() {\n  consent.configOpen = true\n}\n\nfunction closeConfig() {\n  consent.configOpen = false\n}\n\nfunction saveChoice(options: Choice) {\n  consent.configOpen = false\n  consent.update({\n    ...options,\n    timestamp: new Date(),\n    initDecision: consent.consent.initDecision === null,\n  })\n}\n</script>\n","<template>\n  <main class=\"flex w-full flex-col items-center bg-bgr-100\">\n    <h1\n      class=\"mb-4 mt-4 text-center text-3xl font-normal leading-normal text-thm\"\n    >\n      {{ $t('errors.title') }}\n    </h1>\n    <article\n      class=\"mx-2 my-4 w-full max-w-screen-md rounded bg-bgr p-4 text-black shadow-md md:w-full\"\n    >\n      <h4 class=\"text-xl text-[#e43956]\">\n        {{ $t('errors.messages.notFound') }}\n      </h4>\n    </article>\n  </main>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n  error: string\n  clearError: Function\n}>()\n\nwatch(\n  () => useConfdata().pagetype,\n  () => {\n    props.clearError()\n  },\n)\n</script>\n","<template>\n  <div\n    class=\"min-w-[320px] flex flex-grow flex-col items-start justify-start border border-solid border-gray-300 rounded-lg cursor-pointer\"\n    :class=\"{ 'border-t-0': wishlist?.img }\"\n    @click=\"onCardClick\"\n  >\n    <!-- Image -->\n    <div class=\"relative rounded-lg w-full\">\n      <img\n        v-if=\"image\"\n        loading=\"lazy\"\n        class=\"min-h-[240px] w-full rounded-lg object-cover\"\n        :src=\"image\"\n      />\n      <div\n        v-if=\"!image\"\n        class=\"w-full aspect-[4/3] bg-neutral-200 rounded-lg flex justify-center items-center\"\n      >\n        <WebccIcon\n          loading=\"lazy\"\n          name=\"site/no-image\"\n          class=\"text-txt-weak w-10 h-10\"\n        />\n      </div>\n    </div>\n    <!-- Description -->\n    <div class=\"flex flex-grow flex-col p-4\">\n      <h2 class=\"text-xl font-medium\">{{ wishlist?.name }}</h2>\n      <span class=\"text-sm font-normal text-neutral-600\">{{\n        t(`${trPrefix}propsCounter`, {\n          counter: wishlist?.accommodations?.length.toString() || '0',\n        })\n      }}</span>\n    </div>\n  </div>\n</template>\n<script lang=\"ts\" setup>\nconst trPrefix = 'www.components.views.search.area.wishlist.'\ndefineExpose({ trPrefix })\nconst { t } = useI18n()\nconst props = defineProps<{\n  wishlist?: Wishlist\n}>()\nconst season = useSeason(new Date())\nconst { wishlist } = toRefs(props)\n\nconst image = computed(() => {\n  const images = Object.entries(\n    wishlist.value?.accommodations?.at(-1)?.media?.items || {},\n  )\n  const id = images.find(([_, value]) => value?.[`order_${season}`] === 1)?.[0]\n\n  return id\n    ? `${useRuntimeConfig().public.imagekitBase}/${id}/tr:n-srp_hitbox_sm`\n    : null\n})\n\nconst emit = defineEmits<{\n  (e: 'select', value: { wishlistId: string; wishlistName: string }): unknown\n}>()\n\nfunction onCardClick() {\n  if (!wishlist.value?.wishlistId) return\n  emit('select', {\n    wishlistId: wishlist.value.wishlistId,\n    wishlistName: wishlist.value.name,\n  })\n}\n</script>\n","<template>\n  <WebccModal @close=\"closeModal\">\n    <div class=\"w-full md:min-w-[640px] max-h-[80vh] rounded-lg bg-bgr\">\n      <!-- Heared -->\n      <div\n        class=\"px-5 py-4 flex items-center justify-center md:justify-between relative\"\n      >\n        <h2 v-if=\"!createNew\" class=\"font-medium text-xl\">\n          {{ t(`${trPrefix}title`) }}\n        </h2>\n        <h2 v-if=\"createNew\" class=\"font-medium text-xl\">\n          {{ t(`${trPrefix}createNewTitle`) }}\n        </h2>\n        <div\n          class=\"md:relative absolute right-3 md:right-0 size-8 rounded-full flex items-center justify-center cursor-pointer hover:bg-bgr-200 transition-all p-1 text-txt-weak\"\n          @click=\"closeModal\"\n        >\n          <WebccIcon name=\"site/x\" class=\"size-5\" />\n        </div>\n      </div>\n      <hr class=\"border-t border-bgr-200 w-full\" />\n      <!-- Body -->\n      <div class=\"relative p-5\">\n        <WebccLoaderOverlay v-if=\"isLoading\" size=\"sm\" absolute />\n        <WebccButton\n          v-if=\"!isLoading && !createNew\"\n          class=\"p-3 w-auto\"\n          icon=\"site/plus-small\"\n          variant=\"white\"\n          outline\n        >\n          <span class=\"text-base font-medium\" @click.stop=\"createWishlist\">{{\n            t(`${trPrefix}create`)\n          }}</span>\n        </WebccButton>\n        <div\n          v-if=\"!createNew\"\n          class=\"min-w-[320px] min-h-[320px] w-full grid gap-4 grid-cols-1 sm:grid-cols-2 mt-6 overflow-y-auto max-h-[400px] p-2\"\n        >\n          <Wishlist\n            v-for=\"(wishlist, i) in wishlists\"\n            :key=\"i\"\n            :wishlist=\"wishlist\"\n            @select=\"selectWishlist\"\n          />\n        </div>\n        <div v-if=\"createNew\" class=\"min-w-[320px]\">\n          <WebccForm ref=\"formRef\" v-model=\"formdata\" class=\"w-full\">\n            <WebccFormfield\n              :label=\"t(`${trPrefix}label`)\"\n              name=\"name\"\n              type=\"text\"\n              tr-prefix=\"guestWorld.components.modal.\"\n              required=\"required\"\n              :validators=\"validators\"\n              component=\"WebccInput\"\n            />\n          </WebccForm>\n          <hr class=\"border-t border-bgr-200 w-full\" />\n          <div\n            class=\"px-5 py-4 flex items-center justify-center md:justify-end flex-col flex-col-reverse md:flex-row w-full gap-3 md:gap-5\"\n          >\n            <WebccButton\n              class=\"w-full md:w-auto\"\n              variant=\"white\"\n              outline\n              @click=\"backToWishlists\"\n            >\n              <span>{{ t(`${trPrefix}cancel`) }}</span>\n            </WebccButton>\n            <WebccButton\n              class=\"w-full md:w-auto\"\n              variant=\"theme\"\n              :disabled=\"!formdata.name\"\n              :loading=\"isLoading\"\n              @click=\"saveWishlist\"\n            >\n              <span>{{ t(`${trPrefix}continue`) }}</span>\n            </WebccButton>\n          </div>\n        </div>\n      </div>\n    </div>\n  </WebccModal>\n</template>\n\n<script lang=\"ts\" setup>\nimport Wishlist from './Wishlist.vue'\n\nconst trPrefix = 'www.components.views.search.area.wishlistModal.'\nconst { t } = useI18n()\nconst wishlist = useWishlistStore()\nconst tracking = useTracking()\nconst closeWishlistEvt = useEventBus('closeWishlistModal')\nconst emit = defineEmits<{\n  (e: 'close'): unknown\n}>()\nconst requiredValidator = (value: string) => value && value.length > 0\nconst forbiddenChars = (value: string) =>\n  /^[^<>']*$/.test(value) || 'forbiddenChars'\n\nconst createNew: Ref<boolean> = ref(false)\nconst formdata = ref({ name: '' })\nconst formRef = ref<HTMLFormElement>()\nconst validators = ref<Array<(value: string) => boolean | string>>([\n  forbiddenChars,\n  requiredValidator,\n])\nconst { wishlists, isLoading } = toRefs(wishlist)\n\nonMounted(async () => {\n  closeWishlistEvt.on(closeModal)\n})\n\nonUnmounted(() => {\n  closeWishlistEvt.off(closeModal)\n})\n\nasync function selectWishlist(value: {\n  wishlistId: string\n  wishlistName: string\n}) {\n  await wishlist.addAccommodationToWishlist({\n    wishlistId: value.wishlistId,\n    wishlistName: value.wishlistName,\n  })\n}\n\nasync function createWishlist() {\n  tracking.handlers?.wishlists.createWishlist()\n  createNew.value = true\n}\n\nasync function saveWishlist() {\n  if (!formdata.value.name) return\n  await wishlist.createWishlist(formdata.value.name)\n  createNew.value = false\n}\n\nfunction backToWishlists() {\n  createNew.value = false\n}\n\nfunction closeModal() {\n  emit('close')\n}\n</script>\n\n<style></style>\n","<template>\n  <NuxtErrorBoundary @error=\"console.error($event)\">\n    <div v-if=\"layoutAndComponent && !useRuntimeConfig().test\">\n      <!-- Layouts do not work properly in our dynamic routing setup. For now this isn't much of an issue since we never really used layouts anyway, so we can easily move the necessary components here directly. -->\n      <template v-if=\"layoutAndComponent.layout === 'default'\">\n        <Colors :colors=\"useColors().colors\" />\n        <GeneralInfoBar />\n        <B2BInfoBar />\n        <Announcements :announcements />\n        <Header v-if=\"showHeader\" />\n        <client-only>\n          <Chatbot v-if=\"siteSettings?.includes('chatbot')\" />\n          <Notifications />\n          <BookingTeaser />\n          <BugHerd />\n          <WishlistModal v-if=\"openModal\" @close=\"openModal = false\" />\n          <WishlistModal v-if=\"openModal\" @close=\"openModal = false\" />\n        </client-only>\n        <NuxtErrorBoundary @error=\"console.error($event)\">\n          <component :is=\"layoutAndComponent.component\" />\n          <template #error=\"{ error, clearError }\">\n            <ErrorContent :error=\"error\" :clear-error=\"clearError\" />\n          </template>\n        </NuxtErrorBoundary>\n        <Footer />\n        <client-only>\n          <DebugInfo />\n        </client-only>\n      </template>\n      <template v-else-if=\"layoutAndComponent.layout === 'empty'\">\n        <component :is=\"layoutAndComponent.component\" />\n      </template>\n      <Consent />\n    </div>\n    <template #error=\"{ error, clearError }\">\n      <ErrorFull :error=\"error\" :clear-error=\"clearError\" />\n    </template>\n  </NuxtErrorBoundary>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ConcreteComponent } from 'vue'\nimport type { ScreenSizePair } from '~/modules/screen/runtime/screen.types'\nimport WishlistModal from './components/common/wishlist/WishlistModal.vue'\n\nconst params = useParams()\nconst confData = useConfdata()\nconst route = useRoute()\nconst { siteSettings, pagetype, head, announcements } = storeToRefs(confData)\nconst auth = useAuthStore()\nconst wishlist = useWishlistStore()\nconst tracking = useTracking()\nconst addToWishlistEvt = useEventBus<AccommodationDto>('addToWishlist')\nconst deleteFromWishlistEvt =\n  useEventBus<AccommodationDto>('deleteFromWishlist')\nconst { buildLoginUrlWishAccomCode } = useURLs()\n\nconst isRedesign = useFlag('srp-redesign')\n\nconst openModal: Ref<boolean> = ref(false)\nconst modalShown: Ref<boolean> = ref(false)\n\nconst layoutAndComponent = computed(\n  (): {\n    layout: 'default' | 'empty'\n    component: ConcreteComponent | string\n  } => {\n    let layout: 'default' | 'empty'\n    let component: ConcreteComponent | string\n    switch (pagetype.value) {\n      case 'start':\n        component = resolveComponent('PageStart')\n        layout = 'default'\n        break\n      case 'search':\n        component = isRedesign.value\n          ? resolveComponent('RedesignPageSearch')\n          : resolveComponent('PageSearch')\n        layout = 'default'\n        break\n      case 'detail':\n        component = resolveComponent('PageDetails')\n        layout = 'default'\n        break\n      case 'content':\n      case 'content-landing':\n      case 'content-lso-overview':\n      case 'content-lso-detail':\n      case 'content-supporting':\n        component = resolveComponent('PageContent')\n        layout = 'default'\n        break\n      case 'reviews':\n        component = resolveComponent('PageReviews')\n        layout = 'default'\n        break\n      case 'bookmarks':\n        component = resolveComponent('PageBookmarks')\n        layout = 'default'\n        break\n      case 'newsletter':\n        component = resolveComponent('PageNewsletter')\n        layout = 'default'\n        break\n      case 'emails':\n        component = resolveComponent('PageEmails')\n        layout = 'default'\n        break\n      case 'myrent':\n        component = resolveComponent('PageMyrent')\n        layout = 'empty'\n        break\n      case 'redirect':\n        // If we reach this we are in huge trouble. Redirects must be handled a lot earlier since we will have incorrect data in useConfdata otherwise\n        console.error('Routing with pagetype redirect. This must never happen!')\n        component = resolveComponent('PageUnknown')\n        layout = 'empty'\n        break\n      case 'unknown':\n      default:\n        switch (route.path.split('/')[1]) {\n          case 'taf':\n            // Example: https://www.interhome.at/taf/?recommendationId=F2D993D001441EECB9FC0B9FAB9A4254\n            component = resolveComponent('PageBookmarks')\n            layout = 'default'\n            navigateTo(\n              `${confData.links?.bookmarks.href}?recommendationId=${route.query.recommendationId}`,\n              { redirectCode: 301 },\n            )\n            break\n          case 'probes':\n          case 'testing':\n            component = resolveComponent(route.path.split('/')[2])\n            layout = 'empty'\n            break\n          default:\n            if (import.meta.server) {\n              setResponseStatus(useRequestEvent()!, 404)\n            }\n            component = resolveComponent('PageUnknown')\n            layout = 'default'\n        }\n        break\n    }\n\n    return { component, layout }\n  },\n)\n\nconst showHeader = computed(() => {\n  return (\n    !params.iframe ||\n    ['header', 'full'].includes(params.iframe!.layout.toString())\n  )\n})\n\nconst accommodationToLinkParam = computed(\n  () => route.query?.addToWishlist as string | string[],\n)\nconst signedInParam = computed(() => route.query?.signedIn || '')\n\nconst routeChanged = () => {\n  usePageHead().update(head.value)\n}\n\nwatch(route, () => routeChanged(), { deep: true, immediate: true })\n\nonMounted(async () => {\n  addToWishlistEvt.on(openWishlistModal)\n  deleteFromWishlistEvt.on(deleteFromWishlist)\n  await checkWishlistModal()\n})\n\nonBeforeMount(() => {\n  if (useAB().isActive('userSurveyJotform')) useUserSurvey().schedule()\n})\n\nonUnmounted(() => {\n  addToWishlistEvt.off(openWishlistModal)\n  deleteFromWishlistEvt.off(deleteFromWishlist)\n})\n\nif (params.iframe) {\n  useScreen().onResize(iframeResize)\n}\n\n/**\n * Sends the height to the parent iFrame so it can grow in \"traditional\" mode.\n *\n * @param rect New size rectangle\n */\nfunction iframeResize({ height }: ScreenSizePair) {\n  window.parent.postMessage([height, 0].join(';'), '*')\n}\n\nasync function openWishlistModal(data: AccommodationDto) {\n  if (!auth.isAuthorized) {\n    tracking.handlers?.wishlists.addPropertyRedirect(data.code)\n    await navigateTo(buildLoginUrlWishAccomCode(data.code).toString(), {\n      external: true,\n    })\n    return\n  }\n  tracking.handlers?.wishlists.addProperty(data.code)\n  wishlist.selectAccommodationToAdd(data.code)\n  openModal.value = true\n}\n\nasync function deleteFromWishlist(data: AccommodationDto) {\n  if (!data.code) return\n  if (!auth.isAuthorized) {\n    await navigateTo(buildLoginUrlWishAccomCode(data.code).toString(), {\n      external: true,\n    })\n    return\n  }\n  await wishlist.deleteAccommodationFromWishlist(data.code)\n}\n\nasync function checkWishlistModal() {\n  const accommodationToLink = extractAccommodationCode(\n    accommodationToLinkParam.value,\n  )\n  const isSignedIn = extractQueryParamValue(signedInParam.value)\n  if (isSignedIn !== 'true') {\n    await cleanQuery()\n    return\n  }\n\n  if (!modalShown.value && accommodationToLink) {\n    tracking.handlers?.wishlists.addPropertyRedirectSuccess(accommodationToLink)\n    modalShown.value = true\n    wishlist.selectAccommodationToAdd(accommodationToLink)\n    openModal.value = true\n    await cleanQuery()\n  }\n}\n\nasync function cleanQuery() {\n  const query = { ...useRoute().query }\n  delete query['addToWishlist']\n  delete query['returnTo']\n  delete query['signedIn']\n  const router = useRouter()\n  await router.replace({ path: route.path, query })\n}\n</script>\n","<template>\n  <div class=\"flex flex-col items-center\">\n    <header class=\"container-fluid-lg flex max-h-32 justify-between p-4\">\n      <WebccCompanyLogo\n        target=\"_self\"\n        :anchor=\"false\"\n        :caption=\"logoCaption\"\n        class=\"font-light\"\n      />\n    </header>\n    <main class=\"flex w-full flex-col items-center bg-gray-100\">\n      <article\n        class=\"text-tx-lighter mx-2 my-4 w-full max-w-screen-md rounded bg-white p-4 shadow-md md:w-full\"\n        @click=\"handleClick\"\n      >\n        <div class=\"text-err\">{{ message }}</div>\n      </article>\n      <template v-if=\"showDetails\">\n        <section\n          class=\"flex gap-4 flex-col container-fluid-sm justify-center items-center text-xl\"\n        >\n          <div v-if=\"error.url\" class=\"flex flex-row justify-between w-full\">\n            <div>URL</div>\n            <div>{{ error.url }}</div>\n          </div>\n          <div\n            v-if=\"error.statusCode\"\n            class=\"flex flex-row justify-between w-full\"\n          >\n            <div>StatusCode</div>\n            <div>{{ error.statusCode }}</div>\n          </div>\n          <div\n            v-if=\"error.statusMessage\"\n            class=\"flex flex-row justify-between w-full\"\n          >\n            <div>StatusMessage</div>\n            <div>{{ error.statusMessage }}</div>\n          </div>\n          <div\n            v-if=\"error.message\"\n            class=\"flex flex-row justify-between w-full\"\n          >\n            <div>Message</div>\n            <div>{{ error.message }}</div>\n          </div>\n          <div\n            v-if=\"error.description\"\n            class=\"flex flex-row justify-between w-full\"\n          >\n            <div>Description</div>\n            <div>{{ error.description }}</div>\n          </div>\n          <div v-if=\"error.data\" class=\"flex flex-row justify-between w-full\">\n            <div>Data</div>\n            <div>{{ error.data }}</div>\n          </div>\n        </section>\n        <div v-if=\"error.stack\" class=\"container-fluid-md mt-8\">\n          <div class=\"overflow-auto\" v-html=\"error.stack\"></div>\n        </div>\n      </template>\n    </main>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\ndefineProps<{\n  error: {\n    url: string\n    statusCode: number\n    statusMessage: string\n    message: string\n    description: string\n    data: any\n    stack: string\n  }\n}>()\n\nconst showDetails = ref(process.env.NODE_ENV !== 'production')\n\nconst { logoCaption } = storeToRefs(useConfdata())\n\nconst message = computed(() => {\n  switch (useRequestURL().hostname) {\n    case 'www.interhome.ch':\n    case 'www.interhome.de':\n    case 'www.interhome.at':\n      return 'Leider ist ein Fehler aufgetreten. Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.'\n    case 'www.interhome.nl':\n    case 'www.interhome.be':\n      return 'Helaas, er is een fout opgetreden. Probeer het op een later tijdstip nog eens.'\n    case 'www.interhome.cz':\n      return 'Bohužel došlo k chybě. Zkuste to prosím později.'\n    case 'www.interhome.dk':\n      return 'Der er desværre opstået en fejl. Prøv venligst igen på et senere tidspunkt.'\n    case 'www.interhome.es':\n      return 'Lamentablemente, se ha producido un error. Por favor, inténtelo de nuevo en otro momento.'\n    case 'www.interhome.fr':\n      return \"Malheureusement, une erreur s'est produite. Veuillez réessayer à une date ultérieure.\"\n    case 'www.interhome.hr':\n      return ''\n    case 'www.interhome.it':\n      return 'Purtroppo si è verificato un errore. Si prega di riprovare più tardi.'\n    case 'www.interhome.no':\n      return ''\n    case 'www.interhome.pl':\n      return 'Niestety, wystąpił błąd. Prosimy spróbować ponownie w późniejszym terminie.'\n    case 'www.interhome.pt':\n      return 'Infelizmente, ocorreu um erro. Por favor, tente novamente mais tarde.'\n    case 'www.interhome.sv':\n      return 'Tyvärr har ett fel inträffat. Försök igen vid en senare tidpunkt.'\n    case 'www.interhome.ru':\n      return 'К сожалению, произошла ошибка. Пожалуйста, повторите попытку в более позднее время.'\n    case 'www.interhome.fi':\n    case 'www.interhome.ee':\n      return 'Valitettavasti on tapahtunut virhe. Yritä uudelleen myöhemmin.'\n    case 'www.interhome.co.uk':\n    case 'www.interhome.ie':\n    case 'www.interhome.com':\n    case 'www.interhome.in':\n    case 'www.bookinterhome.ca':\n    case 'www.interhome.au':\n    default:\n      return 'Unfortunately an error has occurred. Please try again at a later time.'\n  }\n})\n\nfunction handleClick(event: MouseEvent) {\n  if (event.altKey && event.ctrlKey) {\n    showDetails.value = !showDetails.value\n  }\n}\n</script>\n","<template>\n  <Suspense @resolve=\"onResolve\">\n    <div v-if=\"abortRender\" />\n    <ErrorComponent\n      v-else-if=\"error\"\n      :error=\"error\"\n    />\n    <IslandRenderer\n      v-else-if=\"islandContext\"\n      :context=\"islandContext\"\n    />\n    <component\n      :is=\"SingleRenderer\"\n      v-else-if=\"SingleRenderer\"\n    />\n    <AppComponent v-else />\n  </Suspense>\n</template>\n\n<script setup>\nimport { defineAsyncComponent, onErrorCaptured, onServerPrefetch, provide } from 'vue'\nimport { useNuxtApp } from '../nuxt'\nimport { isNuxtError, showError, useError } from '../composables/error'\nimport { useRoute, useRouter } from '../composables/router'\nimport { PageRouteSymbol } from '../components/injections'\nimport AppComponent from '#build/app-component.mjs'\nimport ErrorComponent from '#build/error-component.mjs'\n// @ts-expect-error virtual file\nimport { componentIslands } from '#build/nuxt.config.mjs'\n\nconst IslandRenderer = import.meta.server && componentIslands\n  ? defineAsyncComponent(() => import('./island-renderer').then(r => r.default || r))\n  : () => null\n\nconst nuxtApp = useNuxtApp()\nconst onResolve = nuxtApp.deferHydration()\nif (import.meta.client && nuxtApp.isHydrating) {\n  const removeErrorHook = nuxtApp.hooks.hookOnce('app:error', onResolve)\n  useRouter().beforeEach(removeErrorHook)\n}\n\nconst url = import.meta.server ? nuxtApp.ssrContext.url : window.location.pathname\nconst SingleRenderer = import.meta.test && import.meta.dev && import.meta.server && url.startsWith('/__nuxt_component_test__/') && defineAsyncComponent(() => import('#build/test-component-wrapper.mjs')\n  .then(r => r.default(import.meta.server ? url : window.location.href)))\n\n// Inject default route (outside of pages) as active route\nprovide(PageRouteSymbol, useRoute())\n\n// vue:setup hook\nconst results = nuxtApp.hooks.callHookWith(hooks => hooks.map(hook => hook()), 'vue:setup')\nif (import.meta.dev && results && results.some(i => i && 'then' in i)) {\n  console.error('[nuxt] Error in `vue:setup`. Callbacks must be synchronous.')\n}\n\n// error handling\nconst error = useError()\n// render an empty <div> when plugins have thrown an error but we're not yet rendering the error page\nconst abortRender = import.meta.server && error.value && !nuxtApp.ssrContext.error\nonErrorCaptured((err, target, info) => {\n  nuxtApp.hooks.callHook('vue:error', err, target, info).catch(hookError => console.error('[nuxt] Error in `vue:error` hook', hookError))\n  if (import.meta.server || (isNuxtError(err) && (err.fatal || err.unhandled))) {\n    const p = nuxtApp.runWithContext(() => showError(err))\n    onServerPrefetch(() => p)\n    return false // suppress error from breaking render\n  }\n})\n\n// Component islands context\nconst islandContext = import.meta.server && nuxtApp.ssrContext.islandContext\n</script>\n","import { createApp, createSSRApp, nextTick } from \"vue\";\nimport \"#build/fetch.mjs\";\nimport { applyPlugins, createNuxtApp } from \"./nuxt.js\";\nimport { createError } from \"./composables/error.js\";\nimport \"#build/css\";\nimport plugins from \"#build/plugins\";\nimport RootComponent from \"#build/root-component.mjs\";\nimport { vueAppRootContainer } from \"#build/nuxt.config.mjs\";\nlet entry;\nif (import.meta.server) {\n  entry = async function createNuxtAppServer(ssrContext) {\n    const vueApp = createApp(RootComponent);\n    const nuxt = createNuxtApp({ vueApp, ssrContext });\n    try {\n      await applyPlugins(nuxt, plugins);\n      await nuxt.hooks.callHook(\"app:created\", vueApp);\n    } catch (error) {\n      await nuxt.hooks.callHook(\"app:error\", error);\n      nuxt.payload.error = nuxt.payload.error || createError(error);\n    }\n    if (ssrContext?._renderResponse) {\n      throw new Error(\"skipping render\");\n    }\n    return vueApp;\n  };\n}\nif (import.meta.client) {\n  if (import.meta.dev && import.meta.webpackHot) {\n    import.meta.webpackHot.accept();\n  }\n  let vueAppPromise;\n  entry = async function initApp() {\n    if (vueAppPromise) {\n      return vueAppPromise;\n    }\n    const isSSR = Boolean(\n      window.__NUXT__?.serverRendered || document.getElementById(\"__NUXT_DATA__\")?.dataset.ssr === \"true\"\n    );\n    const vueApp = isSSR ? createSSRApp(RootComponent) : createApp(RootComponent);\n    const nuxt = createNuxtApp({ vueApp });\n    async function handleVueError(error) {\n      await nuxt.callHook(\"app:error\", error);\n      nuxt.payload.error = nuxt.payload.error || createError(error);\n    }\n    vueApp.config.errorHandler = handleVueError;\n    try {\n      await applyPlugins(nuxt, plugins);\n    } catch (err) {\n      handleVueError(err);\n    }\n    try {\n      await nuxt.hooks.callHook(\"app:created\", vueApp);\n      await nuxt.hooks.callHook(\"app:beforeMount\", vueApp);\n      vueApp.mount(vueAppRootContainer);\n      await nuxt.hooks.callHook(\"app:mounted\", vueApp);\n      await nextTick();\n    } catch (err) {\n      handleVueError(err);\n    }\n    if (vueApp.config.errorHandler === handleVueError) {\n      vueApp.config.errorHandler = void 0;\n    }\n    return vueApp;\n  };\n  vueAppPromise = entry().catch((error) => {\n    console.error(\"Error while mounting app:\", error);\n    throw error;\n  });\n}\nexport default (ssrContext) => entry(ssrContext);\n"],"file":"_nuxt/5sQ5sHNp.js"}